public CreateCifAndAccountResponseModel CreateCifAndAccount(CreateCifAndAccountRequestModel requestModel, DateTime processDateTime)
        {
            Logging.WriteLog(requestModel);
            CreateCifAndAccountResponseModel responseModel = new CreateCifAndAccountResponseModel();

            requestModel.ThaiName     = SetFirstnameWithMiddlename(requestModel.ThaiName, requestModel.ThaiMiddleName);
            requestModel.EngName      = SetFirstnameWithMiddlename(requestModel.EngName, requestModel.EngMiddleName);
            responseModel.ReferenceNo = requestModel.ReferenceNo;
            try
            {
                MBaseMessageModel mBaseMessageModel = CreateCifAccountMessage(requestModel, processDateTime);

                var mBaseMessage = MBaseMessageMatchObject(mBaseMessageModel);
                // MBase CIFCreate
                var mBaseResponse = MBaseSingleton.Instance.CIFCreation(mBaseMessage);

                // Output Matching Object
                PropertyMatcher <CIFAccountResponse, CreateCifAndAccountResponseModel> .GenerateMatchedObject(mBaseResponse, responseModel);
            }
            catch (Exception ex)
            {
                responseModel.ErrorCode        = ResponseCode.EXC0001;
                responseModel.ErrorDescription = ex.Message;
            }
            finally
            {
                Logging.WriteLog(responseModel);
            }
            return(responseModel);
        }
        public VerifyCitizenResponseModel VerifyCitizenID(VerifyCitizenRequestModel requestModel, DateTime processDateTime)
        {
            Logging.WriteLog(requestModel);
            VerifyCitizenResponseModel responseModel = new VerifyCitizenResponseModel();

            responseModel.ReferenceNo = requestModel.ReferenceNo;
            try
            {
                MBaseMessageModel mBaseMessageModel = VerifyCitizenMessage(requestModel, processDateTime);

                var mBaseMessage = MBaseMessageMatchObject(mBaseMessageModel);
                // MBase Verify Citizen ID
                var mBaseResponse = MBaseSingleton.Instance.VerifyCitizenID(mBaseMessage);

                // Output Matching Object
                PropertyMatcher <VerifyCitizenResponse, VerifyCitizenResponseModel> .GenerateMatchedObject(mBaseResponse, responseModel);
            }
            catch (Exception ex)
            {
                responseModel.ErrorCode        = ResponseCode.EXC0001;
                responseModel.ErrorDescription = ex.Message;
            }
            finally
            {
                Logging.WriteLog(responseModel);
            }
            return(responseModel);
        }
        public VerifyCitizenResponseModel VerifyCitizenID(VerifyCitizenRequestModel requestModel, DateTime processDateTime)
        {
            Logging.WriteLog(requestModel);
            VerifyCitizenResponseModel responseModel = new VerifyCitizenResponseModel();

            try
            {
                MBaseMessageModel mBaseMessageModel = VerifyCitizenMessage(requestModel, processDateTime);

                var mBaseMessage = MBaseMessageMatchObject(mBaseMessageModel);
                // MBase Verify Citizen ID
                var mBaseResponse = MBaseSingleton.Instance.VerifyCitizenID(mBaseMessage);

                // Output Matching Object

                PropertyMatcher <VerifyCitizenResponse, VerifyCitizenResponseModel> .GenerateMatchedObject(mBaseResponse, responseModel);

                Logging.WriteLog(responseModel);
            }
            catch (Exception ex)
            {
                Logging.WriteLog(ex.Message + ":" + ex.StackTrace);
            }
            return(responseModel);
        }
        private MBaseMessage MBaseMessageMatchObject(MBaseMessageModel messageModel)
        {
            // Header Transaction
            var headerTransaction = new MBaseHeaderTransaction();

            PropertyMatcher <HeaderTransactionModel, MBaseHeaderTransaction> .GenerateMatchedObject(messageModel.HeaderTransaction, headerTransaction);

            // Header Message
            var headerMessages = new List <MBaseMessageType>();

            foreach (var itmType in messageModel.HeaderMessages)
            {
                var mbaseMessageType = new MBaseMessageType();
                PropertyMatcher <MessageTypeModel, MBaseMessageType> .GenerateMatchedObject(itmType, mbaseMessageType);

                headerMessages.Add(mbaseMessageType);
            }

            // Input Message
            var inputMessages = new List <MBaseMessageType>();

            foreach (var itmType in messageModel.InputMessages)
            {
                var mbaseMessageType = new MBaseMessageType();
                PropertyMatcher <MessageTypeModel, MBaseMessageType> .GenerateMatchedObject(itmType, mbaseMessageType);

                inputMessages.Add(mbaseMessageType);
            }

            // Response Message
            var responseMessages = new List <MBaseMessageType>();

            foreach (var itmType in messageModel.ResponseMessages)
            {
                var mbaseMessageType = new MBaseMessageType();
                PropertyMatcher <MessageTypeModel, MBaseMessageType> .GenerateMatchedObject(itmType, mbaseMessageType);

                responseMessages.Add(mbaseMessageType);
            }
            return(new MBaseMessage
            {
                HeaderTransaction = headerTransaction,
                HeaderMessages = headerMessages,
                InputMessages = inputMessages,
                ResponseMessages = responseMessages
            });
        }
        public KycCIFLevelResponseModel KycCIFLevelCreate(KycCIFLevelRequestModel requestModel, DateTime processDateTime)
        {
            Logging.WriteLog(requestModel);
            MBaseMessageModel mBaseMessageModel = KycCIFLevelCreateMessage(requestModel, processDateTime);

            var mBaseMessage = MBaseMessageMatchObject(mBaseMessageModel);
            // MBase CIFCreate
            var mBaseResponse = MBaseSingleton.Instance.CreateKycCIFLevelMessage(mBaseMessage);

            // Output Matching Object
            KycCIFLevelResponseModel responseModel = new KycCIFLevelResponseModel();

            PropertyMatcher <KycCIFLevelResponse, KycCIFLevelResponseModel> .GenerateMatchedObject(mBaseResponse, responseModel);

            Logging.WriteLog(responseModel);
            return(responseModel);
        }
        public CIFAddressResponseModel CIFAddressCreate(CIFAddresRequestModel requestModel, DateTime processDateTime)
        {
            Logging.WriteLog(requestModel);
            MBaseMessageModel mBaseMessageModel = CIFAddressCreateMessage(requestModel, processDateTime);

            var mBaseMessage = MBaseMessageMatchObject(mBaseMessageModel);
            // MBase CIFCreate
            var mBaseResponse = MBaseSingleton.Instance.CIFAddressCreation(mBaseMessage);

            // Output Matching Object
            CIFAddressResponseModel responseModel = new CIFAddressResponseModel();

            PropertyMatcher <CIFAddressResponse, CIFAddressResponseModel> .GenerateMatchedObject(mBaseResponse, responseModel);

            Logging.WriteLog(responseModel);
            return(responseModel);
        }
        public CreateCifAddressResponseModel CreateCifAddress(CreateCifAddresRequestModel requestModel, DateTime processDateTime)
        {
            Logging.WriteLog(requestModel);
            CreateCifAddressResponseModel responseModel = new CreateCifAddressResponseModel();

            responseModel.ReferenceNo = requestModel.ReferenceNo;
            try
            {
                string   houseNo     = requestModel.HouseNo.Trim();
                string   villageNo   = requestModel.VillageNo.Trim();
                string   building    = requestModel.Building.Trim();
                string   floor       = requestModel.Floor.Trim();
                string   room        = requestModel.Room.Trim();
                string   alley       = requestModel.Alley.Trim();
                string   lane        = requestModel.Lane.Trim();
                string   road        = requestModel.Road.Trim();
                string   subDistrict = requestModel.SubDistrict.Trim();
                string   district    = requestModel.District.Trim();
                string   province    = requestModel.Province.Trim();
                string   zipCode     = requestModel.ZipCode.Trim();
                string[] addressLine =
                {
                    houseNo, villageNo, building, floor, room, alley, lane, road, subDistrict
                };
                var dictAddressLine = GetAddressLine(addressLine);
                foreach (var address in dictAddressLine)
                {
                    switch (address.Key)
                    {
                    case nameof(requestModel.AddressLine1):
                        requestModel.AddressLine1 = address.Value;
                        break;

                    case nameof(requestModel.AddressLine2):
                        requestModel.AddressLine2 = address.Value;
                        break;

                    case nameof(requestModel.AddressLine3):
                        requestModel.AddressLine3 = address.Value;
                        break;

                    case nameof(requestModel.AddressLine4):
                        requestModel.AddressLine4 = address.Value;
                        break;

                    case nameof(requestModel.AddressLine5):
                        requestModel.AddressLine5 = address.Value;
                        break;
                    }
                }

                requestModel.CityStateZip = $"{requestModel.District} {requestModel.Province} {requestModel.ZipCode}";

                MBaseMessageModel mBaseMessageModel = CreateCifAddressMessage(requestModel, processDateTime);

                var mBaseMessage = MBaseMessageMatchObject(mBaseMessageModel);
                // MBase CIFCreate
                var mBaseResponse = MBaseSingleton.Instance.CIFAddressCreation(mBaseMessage);

                // Output Matching Object
                PropertyMatcher <CIFAddressResponse, CreateCifAddressResponseModel> .GenerateMatchedObject(mBaseResponse, responseModel);
            }
            catch (Exception ex)
            {
                responseModel.ErrorCode        = ResponseCode.EXC0001;
                responseModel.ErrorDescription = ex.Message;
            }
            finally
            {
                Logging.WriteLog(responseModel);
            }
            return(responseModel);
        }