Commit 3be9c3d7 authored by Vu Duy Anh's avatar Vu Duy Anh

commit merge

parents e63b04b2 2b5770de
......@@ -2,31 +2,21 @@ package com.viettel.campaign.mapper;
import com.viettel.campaign.model.ccms_full.CampaignAgent;
import com.viettel.campaign.web.dto.CampaignAgentDTO;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
public class CampaignAgentMapper extends BaseMapper<CampaignAgent, CampaignAgentDTO> {
@Autowired
ModelMapper modelMapper;
@Override
public CampaignAgentDTO toDtoBean(CampaignAgent campaignAgent) {
CampaignAgentDTO obj = new CampaignAgentDTO();
obj.setAgentId(campaignAgent.getAgentId());
obj.setCampaignAgentId(campaignAgent.getCampaignAgentId());
obj.setCampaignId(campaignAgent.getCampaignId());
obj.setCompanySiteId(campaignAgent.getCompanySiteId());
obj.setFilterType(campaignAgent.getFilterType());
obj.setReSchedule(campaignAgent.getReSchedule());
obj.setStatus(campaignAgent.getStatus());
return obj;
return modelMapper.map(campaignAgent, CampaignAgentDTO.class);
}
@Override
public CampaignAgent toPersistenceBean(CampaignAgentDTO dtoBean) {
CampaignAgent obj = new CampaignAgent();
obj.setAgentId(dtoBean.getAgentId());
obj.setCampaignAgentId(dtoBean.getCampaignAgentId());
obj.setCampaignId(dtoBean.getCampaignId());
obj.setCompanySiteId(dtoBean.getCompanySiteId());
obj.setFilterType(dtoBean.getFilterType());
obj.setReSchedule(dtoBean.getReSchedule());
obj.setStatus(dtoBean.getStatus());
return obj;
return modelMapper.map(dtoBean, CampaignAgent.class);
}
}
......@@ -12,11 +12,14 @@ import java.util.Date;
@Getter
@Setter
public class CampaignCustomer {
@Id
@GeneratedValue(generator = "CAMPAIGN_CUSTOMER_SEQ")
@SequenceGenerator(name = "CAMPAIGN_CUSTOMER_SEQ", sequenceName = "CAMPAIGN_CUSTOMER_SEQ", allocationSize = 1)
@Basic(optional = false)
@NotNull
@Column(name = "CAMPAIGN_CUSTOMERLIST_ID")
private Long campaignCustomerListId;
@Column(name = "CAMPAIGN_CUSTOMER_ID")
private Long campaignCustomerId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "CUSTOMER_ID")
......
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
@Entity
@Table(name = "CONTACT_CUST_RESULT")
@Getter
@Setter
public class ContactCustResult implements Serializable {
@Id
@NotNull
@GeneratedValue(generator = "CONTACT_CUST_RESULT_SEQ")
@SequenceGenerator(name = "CONTACT_CUST_RESULT_SEQ", sequenceName = "CONTACT_CUST_RESULT_SEQ", allocationSize = 1)
@Basic(optional = false)
@Column(name = "CONTACT_CUST_RESULT_ID")
private Long contactCustResultId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "CALL_STATUS")
private Short callStatus;
@Column(name = "CONTACT_STATUS")
@NotNull
private Short contactStatus;
@Column(name = "STATUS")
private Short status;
@Column(name = "SATISFACTION")
private Integer satisfaction;
@Column(name = "DESCRIPTION")
private String description;
@Column(name = "CREATE_TIME")
@NotNull
private Date createTime;
@Column(name = "AGENT_ID")
private Long agentId;
@Column(name = "UPDATE_TIME")
private Date updateTime;
@Column(name = "UPDATE_BY")
private Long updateBy;
@Column(name = "CAMPAIGN_ID")
@NotNull
private Long campaignId;
@Column(name = "OLD_CONTACT_CUST_RESULT_ID")
private Long oldContactCustResultId;
@Column(name = "CUSTOMER_ID")
@NotNull
private Long customerId;
@Column(name = "DURATION_CALL")
private Long durationCall;
@Column(name = "START_CALL")
private Date startCall;
@Column(name = "RECEIVE_CUST_LOG_ID")
@NotNull
private Long receiveCustLogId;
@Column(name = "IPCC_CALL_STATUS")
private Short ipccCallStatus;
@Column(name = "CALL_ID")
private String callId;
@Column(name = "PHONE_NUMBER")
@NotNull
private String phoneNumber;
@Column(name = "RECEIVE_TIME")
@NotNull
private Date receiveTime;
@Column(name = "PRE_END_TIME")
private Date preEndTime;
@Column(name = "URL_CALL")
private String urlCall;
@Column(name = "TRANSACTION_ID")
private String transactionId;
@Column(name = "RECALL_TIME")
private Date recallTime;
@Column(name = "IS_FINAL_RECALL")
private Short isFinalRecall;
@Column(name = "IS_SEND_EMAIL")
private Short isSendEmail = 0;
@Column(name = "SALED_ON_TPIN")
private Long saledOnTpin;
@Column(name = "END_TIME")
private Date endTime;
@Column(name = "WAIT_TIME")
private Long waitTime;
@Column(name = "DIAL_MODE")
private String dialMode;
@Column(name = "WRAPUP_TIME")
private Long wrapupTime;
@Column(name = "TIME_MAKE_CALL")
private Long timeMakeCall = 0L;
@Column(name = "TIME_RECEIVE_CUST")
private Long timeReceiveCust = 0L;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Entity
@Table(name = "CONTACT_QUEST_RESULT")
@Getter
@Setter
public class ContactQuestResult implements Serializable {
@Id
@Column(name = "CONTACT_QUEST_RESULT_ID")
@NotNull
private Long contactQuestResultId;
@Column(name = "CONTACT_CUST_RESULT_ID")
@NotNull
private Long contactCustResultId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "SCENARIO_QUESTION_ID")
@NotNull
private Long scenarioQuestionId;
@Column(name = "OTHER_OPINION")
private String otherOpinion;
@Column(name = "SCENARIO_ANSWER_ID")
private Long scenarioAnswerId;
@Column(name = "STATUS")
private Short status;
@Column(name = "OLD_CONTACT_CUST_RESULT_ID")
private Long oldContactCustResultId;
@Column(name = "CUSTOMER_ID")
@NotNull
private Long customerId;
@Column(name = "CAMPAIGN_ID")
@NotNull
private Long campaignId;
}
package com.viettel.campaign.model.ccms_full;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
@Entity
@Table(name = "RECEIVE_CUST_LOG")
@Getter
@Setter
public class ReceiveCustLog implements Serializable {
@Id
@GeneratedValue(generator = "RECEIVE_CUST_LOG_SEQ")
@SequenceGenerator(name = "RECEIVE_CUST_LOG_SEQ", sequenceName = "RECEIVE_CUST_LOG_SEQ", allocationSize = 1)
@Basic(optional = false)
@NotNull
@Column(name = "RECEIVE_CUST_LOG_ID")
private Long receiveCustLogId;
@Column(name = "COMPANY_SITE_ID")
private Long companySiteId;
@Column(name = "CUSTOMER_ID")
@NotNull
private Long customerId;
@Column(name = "START_TIME")
@Temporal(TemporalType.TIMESTAMP)
@NotNull
private Date startTime;
@Column(name = "AGENT_ID")
private Long agentId;
@Column(name = "CAMPAIGN_ID")
private Long campaignId;
@Column(name = "END_TIME")
@Temporal(TemporalType.TIMESTAMP)
private Date endTime;
}
......@@ -3,6 +3,9 @@ package com.viettel.campaign.repository.acd_full;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.acd_full.Agents;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
......@@ -11,4 +14,8 @@ import org.springframework.transaction.annotation.Transactional;
public interface AgentsRepository extends JpaRepository<Agents, String> {
Agents findByAgentId(String agentId);
@Modifying
@Query(value = "UPDATE Agents SET campaignSystemStatus = :campaignSystemStatus WHERE agentId = :agentId")
void updateAgentLogoutFromCampaign(@Param("agentId") Long agentId, @Param("campaignSystemStatus") String campaignSystemStatus);
}
......@@ -21,6 +21,6 @@ public interface ApParamRepository extends JpaRepository<ApParam, Long>, ApParam
@Query(value = "SELECT p FROM ApParam p WHERE status = 1 AND parType LIKE concat('%', :parType, '%') ")
List<ApParam> findParamByParType(@Param("parType") String parType);
@Query(value = "select a from ApParam a WHERE status = 1 AND parType = 'CAMPAIGN_TYPE'")
List<ApParam> findAllParam();
@Query(value = "FROM ApParam WHERE status = 1 AND parType = :parType")
List<ApParam> findAllParam(@Param("parType") String parType);
}
......@@ -5,12 +5,14 @@ import com.viettel.campaign.model.ccms_full.CampaignCustomer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Repository
@Transactional(DataSourceQualify.CCMS_FULL)
public interface CampaignCustomerRepository extends JpaRepository<CampaignCustomer, Long> {
public interface CampaignCustomerRepository extends JpaRepository<CampaignCustomer, Long>, CampaignCustomerRepositoryCustom {
@Query(value = "SELECT COUNT(*) " +
"FROM CAMPAIGN_CUSTOMER CC JOIN CAMPAIGN_COMPLETE_CODE CCC ON CC.CAMPAIGN_ID = CCC.CAMPAIGN_ID " +
"WHERE CC.STATUS = 3 AND CC.CAMPAIGN_ID = :campaignId AND CC.CUSTOMER_ID = :customerId AND CCC.IS_RECALL = 1 AND CCC.STATUS = 1 ",
......@@ -33,4 +35,6 @@ public interface CampaignCustomerRepository extends JpaRepository<CampaignCustom
" AND cc.recall_time <= SYSDATE\n" +
" AND cc.recall_time + interval :apParam MINUTE >= SYSDATE", nativeQuery = true)
List<CampaignCustomer> getCustomerRecallDate(@Param("campaignId") Long campaignId, @Param("agentId") Long agentId, @Param("companySiteId") Long companySiteId, @Param("apParam") String apParam);
CampaignCustomer findCampaignCustomerByCampaignCustomerId(Long id);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.web.dto.CampaignCustomerDTO;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface CampaignCustomerRepositoryCustom {
List<CampaignCustomerDTO> getDataCampaignCustomer(CampaignCustomerDTO dto, String expression);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.ContactCustResult;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ContactCustResultRepository extends JpaRepository<ContactCustResult, Long> {
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.ContactQuestResult;
import com.viettel.campaign.web.dto.ContactQuestResultDTO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface ContactQuestResultRepository extends JpaRepository<ContactQuestResult, Long> {
List<ContactQuestResultDTO> findByCompanySiteIdAndCampaignId(Long companySiteId, Long campaignId);
}
package com.viettel.campaign.repository.ccms_full;
import com.viettel.campaign.model.ccms_full.ReceiveCustLog;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ReceiveCustLogRepository extends JpaRepository<ReceiveCustLog, Long> {
}
package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.ApParam;
import com.viettel.campaign.repository.ccms_full.ApParamRepository;
import com.viettel.campaign.repository.ccms_full.CampaignCustomerRepositoryCustom;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil;
import com.viettel.campaign.utils.HibernateUtil;
import com.viettel.campaign.utils.SQLBuilder;
import com.viettel.campaign.web.dto.CampaignCustomerDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.hibernate.type.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Transactional(DataSourceQualify.CCMS_FULL)
public class CampaignCustomerRepositoryImpl implements CampaignCustomerRepositoryCustom {
@Autowired
ApParamRepository apParamRepository;
@Autowired
@PersistenceContext(unitName = DataSourceQualify.JPA_UNIT_NAME_CCMS_FULL)
EntityManager entityManager;
@Override
public List<CampaignCustomerDTO> getDataCampaignCustomer(CampaignCustomerDTO customerDTO, String expression) {
List<CampaignCustomerDTO> result = new ArrayList<>();
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
try {
SQLQuery query = session.createSQLQuery(expression);
query.setParameter("campaignId", customerDTO.getCampaignId());
query.setParameter("companySiteId", customerDTO.getCompanySiteId());
if (expression.contains(":agentId")) {
query.setParameter("agentId", customerDTO.getAgentId());
}
if (expression.contains(":dungSai")) {
List<ApParam> apParam = apParamRepository.findAllParam("DUNG_SAI");
query.setParameter("dungSai", apParam.get(0).getParValue());
}
query.addScalar("customerId", new LongType());
query.setResultTransformer(Transformers.aliasToBean(CampaignCustomerDTO.class));
result = query.list();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
session.close();
}
return result;
}
}
......@@ -2,6 +2,7 @@ package com.viettel.campaign.repository.ccms_full.impl;
import com.viettel.campaign.config.DataSourceQualify;
import com.viettel.campaign.model.ccms_full.CampaignCustomer;
import com.viettel.campaign.repository.ccms_full.CampaignCustomerRepository;
import com.viettel.campaign.repository.ccms_full.CampaignRepositoryCustom;
import com.viettel.campaign.utils.Constants;
import com.viettel.campaign.utils.DataUtil;
......@@ -46,6 +47,9 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
@Qualifier(DataSourceQualify.NAMED_JDBC_PARAMETER_TEMPLATE_CCMS_FULL)
NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Autowired
CampaignCustomerRepository campaignCustomerRepository;
@Override
public ResultDTO search(CampaignRequestDTO requestDto) {
logger.info("Start search campaign::");
......@@ -486,7 +490,7 @@ public class CampaignRepositoryImpl implements CampaignRepositoryCustom {
try {
List<CustomerCustomDTO> list = dto.getCustomerCustomDTOList();
for (CustomerCustomDTO customerCustomDTO: list) {
CampaignCustomer campaignCustomer = entityManager.find(CampaignCustomer.class, customerCustomDTO.getCampaignCustomerId());
CampaignCustomer campaignCustomer = campaignCustomerRepository.findCampaignCustomerByCampaignCustomerId(customerCustomDTO.getCampaignCustomerId());
campaignCustomer.setStatus((short) 0);
campaignCustomer.setCallStatus(null);
campaignCustomer.setRedistribute((short) 1);
......
package com.viettel.campaign.service;
import com.viettel.campaign.web.dto.CampaignCustomerDTO;
import com.viettel.campaign.web.dto.ContactCustResultDTO;
import com.viettel.campaign.web.dto.ReceiveCustLogDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
......@@ -22,9 +24,16 @@ public interface CampaignExecuteService {
List<ContactCustResultDTO> getContactCustById(CampaignRequestDTO dto);
//</editor-fold>
ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto);
ResultDTO searchCampaignExecute(CampaignRequestDTO requestDto, String xAuthToken);
ResultDTO getExecuteCampaign(CampaignRequestDTO requestDto);
ResultDTO getCall(CampaignRequestDTO dto);
ResultDTO getCall(CampaignCustomerDTO dto);
ResultDTO getCallLog(ReceiveCustLogDTO dto);
ResultDTO getAgentLogout(CampaignRequestDTO dto);
ResultDTO callCustomer(ContactCustResultDTO dto);
}
......@@ -92,7 +92,7 @@ public class ApParamServiceImpl implements ApParamService {
@Override
public List<ApParam> findAllParam() {
return apParamRepository.findAllParam() ;
return apParamRepository.findAllParam("CAMPAIGN_TYPE") ;
}
......
package com.viettel.campaign.utils;
//import com.viettel.security.PassTranformer;
import com.viettel.security.PassTranformer;
import org.apache.log4j.Logger;
import java.io.File;
......
......@@ -10,27 +10,47 @@ import java.util.Date;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ContactCustResultDTO extends BaseDTO{
private Long contacCustResultId;
private Long contactCustResultId;
private Long companySiteId;
private Short callStatus;
private Short recordStatus;
private Short contactStatus;
private Short status;
private Integer satisfaction;
private String description;
private Date createTime;
private Long callTime;
private Long agentId;
private Date updateTime;
private Long updateBy;
private Long campaignId;
private String campaignName;
private Long oldContactCustResultId;
private Long customerId;
private Long durationCall;
private Date startCall;
private Long receiveCustLogId;
private Short ipccCallStatus;
private String callId;
private String phoneNumber;
private Date receiveTime;
private Date preEndTime;
private String urlCall;
private String transactionId;
private Date recallTime;
private Short isFinalRecall;
private Short isSendEmail = 0;
private Long saledOnTpin;
private Date endTime;
private Long waitTime;
private String dialMode;
private Long wrapupTime;
private Long timeMakeCall = 0L;
private Long timeReceiveCust = 0L;
private Short recordStatus;
private Long callTime;
private String campaignName;
private String customerName;
private Long customerId;
private String contactStatus;
private String campaignCode;
private String userName;
private String surveyStatus;
private Short status;
private Boolean enableEdit;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ContactQuestResultDTO extends BaseDTO {
private Long contactQuestResultId;
private Long contactCustResultId;
private Long companySiteId;
private Long scenarioQuestionId;
private String otherOpinion;
private Long scenarioAnswerId;
private Short status;
private Long oldContactCustResultId;
private Long customerId;
private Long campaignId;
}
package com.viettel.campaign.web.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class ReceiveCustLogDTO {
private Long receiveCustLogId;
private Long companySiteId;
private Long customerId;
private Date startTime;
private Long agentId;
private Long campaignId;
private Date endTime;
}
......@@ -4,8 +4,7 @@ import com.viettel.campaign.model.ccms_full.TimeRangeDialMode;
import com.viettel.campaign.model.ccms_full.TimeZoneDialMode;
import com.viettel.campaign.service.CampaignExecuteService;
import com.viettel.campaign.service.CampaignService;
import com.viettel.campaign.web.dto.CampaignDTO;
import com.viettel.campaign.web.dto.ResultDTO;
import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.request_dto.CampaignRequestDTO;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
......@@ -40,8 +39,9 @@ public class CampaignController {
@PostMapping("/searchCampaignExecute")
@ResponseBody
public ResponseEntity<ResultDTO> searchCampaignExecute(@RequestBody CampaignRequestDTO requestDto) {
ResultDTO result = campaignExecuteService.searchCampaignExecute(requestDto);
public ResponseEntity<ResultDTO> searchCampaignExecute(@RequestBody CampaignRequestDTO requestDto, HttpServletRequest request) {
String xAuthToken = request.getHeader("X-Auth-Token");
ResultDTO result = campaignExecuteService.searchCampaignExecute(requestDto, xAuthToken);
return new ResponseEntity<>(result, HttpStatus.OK);
}
......@@ -54,11 +54,32 @@ public class CampaignController {
@PostMapping("/getCall")
@ResponseBody
public ResponseEntity<ResultDTO> getCall(@RequestBody CampaignRequestDTO requestDto) {
public ResponseEntity<ResultDTO> getCall(@RequestBody CampaignCustomerDTO requestDto) {
ResultDTO result = campaignExecuteService.getCall(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/getCallLog")
@ResponseBody
public ResponseEntity<ResultDTO> getCallLog(@RequestBody ReceiveCustLogDTO requestDto) {
ResultDTO result = campaignExecuteService.getCallLog(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/callCustomer")
@ResponseBody
public ResponseEntity<ResultDTO> callCustomer(@RequestBody ContactCustResultDTO requestDto) {
ResultDTO result = campaignExecuteService.callCustomer(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping("/getAgentLogout")
@ResponseBody
public ResponseEntity<ResultDTO> getAgentLogout(@RequestBody CampaignRequestDTO requestDto) {
ResultDTO result = campaignExecuteService.getAgentLogout(requestDto);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@RequestMapping(value = "/search", method = RequestMethod.POST)
public ResponseEntity<ResultDTO> search(@RequestBody CampaignRequestDTO requestDto) {
ResultDTO result = campaignService.search(requestDto);
......
......@@ -39,3 +39,28 @@ campaign.status.2 = Deploy
campaign.status.3 = Pause
campaign.status.4 = Finish
campaign.status.5 = Kêt thúc sớm
#Campaign customer list management
CUSTOMER_ID = Id khách hàng
CODE = Mã khách hàng
NAME = Tên khách hàng
DESCRIPTION = Mô tả
COMPANY_NAME = Tên công ty
CUSTOMER_IMG = Ảnh khách hàng
CREATE_DATE = Ngày tạo
UPDATE_DATE = Ngày cập nhật
STATUS = Trạng thái
CREATE_BY = Tạo bởi
UPDATE_BY = Cập nhật bởi
SITE_ID = Mã công ty
GENDER = Giới tính
CURRENT_ADDRESS = Địa chỉ hiện tại
PLACE_OF_BIRTH = Nơi sinh
DATE_OF_BIRTH = Ngày sinh
MOBILE_NUMBER = Số điện thoại
USERNAME = Tài khoản
AREA_CODE = Khu vực
CALL_ALLOWED = CALL_ALLOWED
EMAIL_ALLOWED = EMAIL_ALLOWED
SMS_ALLOWED = SMS_ALLOWED
IPCC_STATUS = IPCC_STATUS
......@@ -42,4 +42,27 @@ campaign.status.3 = Tạm ngừng
campaign.status.4 = Kêt thúc
campaign.status.5 = Kêt thúc sớm
#Campaign customer list management
CUSTOMER_ID = Id khách hàng
CODE = Mã khách hàng
NAME = Tên khách hàng
DESCRIPTION = Mô tả
COMPANY_NAME = Tên công ty
CUSTOMER_IMG = Ảnh khách hàng
CREATE_DATE = Ngày tạo
UPDATE_DATE = Ngày cập nhật
STATUS = Trạng thái
CREATE_BY = Tạo bởi
UPDATE_BY = Cập nhật bởi
SITE_ID = Mã công ty
GENDER = Giới tính
CURRENT_ADDRESS = Địa chỉ hiện tại
PLACE_OF_BIRTH = Nơi sinh
DATE_OF_BIRTH = Ngày sinh
MOBILE_NUMBER = Số điện thoại
USERNAME = Tài khoản
AREA_CODE = Khu vực
CALL_ALLOWED = CALL_ALLOWED
EMAIL_ALLOWED = EMAIL_ALLOWED
SMS_ALLOWED = SMS_ALLOWED
IPCC_STATUS = IPCC_STATUS
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment