public async Task <DataMessage> SaveControlNumberAsync(ControlNumberResp model) { ImisPayment payment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); var controlNumberExists = payment.CheckControlNumber(model.internal_identifier, model.control_number); var response = await payment.SaveControlNumberAsync(model, controlNumberExists); if (model.error_occured) { response.ErrorOccured = true; response.MessageValue = model.error_message; } if (payment.PaymentId != 0 && payment.SmsRequired) { var ackResponse = payment.GetReqControlNumberAck(payment.PaymentId); if (!response.ErrorOccured && !controlNumberExists) { ControlNumberAssignedSms(payment); } else { ControlNumberNotassignedSms(payment, response.MessageValue); } } return(response); }
public async void SendPaymentConfirmationSms(PaymentData pd, ImisPayment payment) { // Language lang = payment.Language.ToLower() == "en" || payment.Language.ToLower() == "english" || payment.Language.ToLower() == "primary" ? Language.Primary : Language.Secondary; ImisSms sms = new ImisSms(_configuration, _hostingEnvironment, payment.Language); List <SmsContainer> message = new List <SmsContainer>(); var txtmsg = string.Format( sms.GetMessage("PaymentConfirmationSMS"), // template payment.Location, // Product location pd.control_number, // invoice number pd.received_amount, // amount paid pd.receipt_identification, // receipt number DateTime.Parse(pd.payment_date).ToString(), // payment date pd.transaction_identification // transaction number ); message.Add(new SmsContainer() { Message = txtmsg, Recipient = pd.payer_phone_number }); var fileName = "PaymentConfirmationSms_" + pd.payer_phone_number; string test = await sms.SendSMS(message, fileName); payment.UpdateLastSMSSentDateAsync(); }
public BulkControlNumbersForEO GetControlNumbersForEO(string officerCode, string productCode, int available) { var imisPayment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); var threshold = Convert.ToInt32(_configuration["PaymentGateWay:MaxControlNumberForEO"]); var requiredCNs = threshold - available; if (requiredCNs <= 0) { var response = new BulkControlNumbersForEO(); var header = new ControlNumbersForEOHeader { Error = (int)Errors.ControlNumbers.ThresholdReached, ErrorMessage = Errors.ControlNumbers.ThresholdReached.ToString() }; var controlNumebrs = new List <ControlNumbersForEO>(); response.Header = header; response.ControlNumbers = controlNumebrs; return(response); } return(imisPayment.GetControlNumbersForEO(officerCode, productCode, requiredCNs)); }
// Todo: make this method generic public async Task <DataMessage> CancelPayment(int payment_id) { ImisPayment payment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); DataMessage dt = new DataMessage(); if (payment_id > 0) { payment.GetPaymentInfo(payment_id); await payment.CancelPayment(payment_id); SendPaymentCancellationSms(payment); } else { //Todo: move hardcoded message to translation file DataMessage dm = new DataMessage { Code = 2, ErrorOccured = true, MessageValue = "CancelPayment:2:Control Number doesn't exists", }; return(dm); } return(dt); }
public async Task <DataMessage> MatchPayment(MatchModel model) { ImisPayment payment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); var response = payment.MatchPayment(model); if (model.internal_identifier == 0) { List <MatchSms> PaymentIds = new List <MatchSms>(); PaymentIds = payment.GetPaymentIdsForSms(); if (PaymentIds != null) { // SendMatchSms(PaymentIds); } } else { // XML TO JSON var matchdata = JsonConvert.SerializeObject(response.Data); // var matchedPayments = JsonConvert.DeserializeObject <List <MatchedPayment> >(matchdata); if (matchedPayments.FirstOrDefault().PaymentMatched > 0) { //SendPaymentSms(payment); } } return(await Task.FromResult(response)); }
public PaymentController(IConfiguration configuration, IHostingEnvironment hostingEnvironment, ILoggerFactory loggerFactory) : base(configuration, hostingEnvironment, loggerFactory) { env = hostingEnvironment; imisPayment = new ImisPayment(configuration, hostingEnvironment, loggerFactory); _gepgFileLogger = new GepgFileRequestLogger(hostingEnvironment, loggerFactory); _logger = loggerFactory.CreateLogger <PaymentController>(); }
public async Task <IActionResult> CHFCancelOnePayment([FromBody] PaymentCancelModel model) { ImisPayment payment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); DataMessage dt = new DataMessage(); if (model.payment_id != 0 || model.control_number != null) { // if payment_id is in payload it will be used else it will be calculated from CN int paymentId = model.payment_id != 0 ? model.payment_id : payment.GetPaymentId(model.control_number); model.payment_id = paymentId; if (paymentId != 0) { var ack = await payment.GePGPostCancelPayment(paymentId); if (ack.GetType() == typeof(DataMessage)) { return(Ok((DataMessage)ack)); } GePGPaymentCancelResponse response = (GePGPaymentCancelResponse)ack; if (response.gepgBillCanclResp.BillCanclTrxDt.Count() > 0 && response.gepgBillCanclResp.BillCanclTrxDt[0].TrxSts == TrxSts.Success) { return(await base.CancelPayment(model)); } else { return(Ok(new DataMessage { Data = response, Code = 3, ErrorOccured = true, MessageValue = "CancelPayment:3:Failed to cancel" })); } } else { //Todo: move hardcoded message to translation file return(Ok(new DataMessage { Code = 2, ErrorOccured = true, MessageValue = "CancelPayment:2:Control Number doesn't exists", })); } } return(Ok(new DataMessage { Code = 1, ErrorOccured = true, MessageValue = "CancelPayment:1:Missing Control Number", })); }
public async void SendPaymentSms(ImisPayment payment) { // Language lang = payment.Language.ToLower() == "en" || payment.Language.ToLower() == "english" || payment.Language.ToLower() == "primary" ? Language.Primary : Language.Secondary; ImisSms sms = new ImisSms(_configuration, _hostingEnvironment, payment.Language); List <SmsContainer> message = new List <SmsContainer>(); var familyproduct = payment.InsureeProducts.FirstOrDefault(); if (familyproduct.PolicyActivated) { var txtmsg = string.Format(sms.GetMessage("PaidAndActivated"), payment.PaidAmount, DateTime.UtcNow.ToString("dd-MM-yyyy"), payment.ControlNum, familyproduct.InsureeNumber, familyproduct.InsureeName, familyproduct.ProductCode, familyproduct.ProductName, familyproduct.EffectiveDate.Value.ToShortDateString(), familyproduct.ExpiryDate.Value.ToShortDateString(), payment.PaidAmount); message.Add(new SmsContainer() { Message = txtmsg, Recipient = payment.PhoneNumber }); } else { decimal transferFee = 0; if (payment.typeOfPayment != null) { transferFee = payment.determineTransferFee(payment.ExpectedAmount, (TypeOfPayment)payment.typeOfPayment); } var txtmsg = string.Format(sms.GetMessage("PaidAndNotActivated"), payment.PaidAmount, DateTime.UtcNow.ToString("dd-MM-yyyy"), payment.ControlNum, familyproduct.InsureeNumber, familyproduct.InsureeName, familyproduct.ProductCode, familyproduct.ProductName, payment.GetToBePaidAmount(payment.ExpectedAmount, transferFee), payment.OutStAmount); message.Add(new SmsContainer() { Message = txtmsg, Recipient = payment.PhoneNumber }); } var fileName = "PayStatSms_" + payment.PhoneNumber; string test = await sms.SendSMS(message, fileName); payment.UpdateLastSMSSentDateAsync(); }
public async void SendMatchSms(List <MatchSms> Ids) { List <SmsContainer> message = new List <SmsContainer>(); foreach (var m in Ids) { bool shoulSendSms = LocalDefault.ShouldSendSms(_configuration, m.DateLastSms, m.MatchedDate); if (shoulSendSms) { var txtmsgTemplate = string.Empty; string othersCount = string.Empty; ImisPayment _pay = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); _pay.GetPaymentInfo(m.PaymentId); //Language lang = _pay.Language.ToLower() == "en" || _pay.Language.ToLower() == "english" || _pay.Language.ToLower() == "primary" ? Language.Primary : Language.Secondary; ImisSms sms = new ImisSms(_configuration, _hostingEnvironment, _pay.Language); if (_pay.PaymentId != 0) { if (_pay.InsureeProducts.Count > 1) { txtmsgTemplate = sms.GetMessage("PaidAndNotMatchedV2"); othersCount = Convert.ToString(_pay.InsureeProducts.Count - 1); } else { txtmsgTemplate = sms.GetMessage("PaidAndNotMatched"); } var familyproduct = _pay.InsureeProducts.FirstOrDefault(); var txtmsg = string.Format(txtmsgTemplate, _pay.PaidAmount, DateTime.UtcNow.ToString("dd-MM-yyyy"), _pay.ControlNum, familyproduct.InsureeNumber, familyproduct.InsureeName, familyproduct.ProductCode, familyproduct.ProductName, othersCount); message.Add(new SmsContainer() { Message = txtmsg, Recipient = _pay.PhoneNumber }); _pay.UpdateLastSMSSentDateAsync(); } else { throw new Exception(); } var fileName = "PayNotMatched_"; string test = await sms.SendSMS(message, fileName); } } }
public async Task <DataMessage> SaveAcknowledgementAsync(Acknowledgement model) { ImisPayment payment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory) { PaymentId = model.internal_identifier }; var response = await payment.SaveControlNumberAknAsync(model.error_occured, model.error_message); return(response); }
public async Task <DataMessage> GetControlNumbers(PaymentRequest requests) { ImisPayment payment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); var PaymentIds = requests.requests.Select(x => x.internal_identifier).ToArray(); var PaymentIds_string = string.Join(",", PaymentIds); var response = await payment.GetControlNumbers(PaymentIds_string); return(response); }
public void CreatePremium(PolicyRenewalModel renewal) { ImisPayment payment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); var paymentLogic = new PaymentLogic(_configuration, _hostingEnvironment, _loggerFactory); if (_configuration.GetValue <bool>("PaymentGateWay:CreatePremiumOnPaymentReceived")) { int paymentId = payment.GetPaymentId(renewal.ControlNumber); _ = paymentLogic.CreatePremium(paymentId); } }
public async Task <ReconciliationMessage> ProvideReconciliationData(ReconciliationRequest model) { ImisPayment payment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); var response = payment.ProvideReconciliationData(model); ReconciliationMessage return_message = new ReconciliationMessage { transactions = response, error_occurred = false }; return(await Task.FromResult(return_message)); }
public async void ControlNumberAssignedSms(ImisPayment payment) { //Language lang = payment.Language.ToLower() == "en" || payment.Language.ToLower() == "english" || payment.Language.ToLower() == "primary" ? Language.Primary : Language.Secondary; ImisSms sms = new ImisSms(_configuration, _hostingEnvironment, payment.Language); var txtmsgTemplate = string.Empty; string othersCount = string.Empty; if (payment.InsureeProducts.Count > 1) { txtmsgTemplate = sms.GetMessage("ControlNumberAssignedV2"); othersCount = Convert.ToString(payment.InsureeProducts.Count - 1); } else { txtmsgTemplate = sms.GetMessage("ControlNumberAssigned"); } decimal transferFee = 0; if (payment.typeOfPayment != null) { transferFee = payment.determineTransferFee(payment.ExpectedAmount, (TypeOfPayment)payment.typeOfPayment); } var txtmsg = string.Format(txtmsgTemplate, payment.ControlNum, DateTime.UtcNow.ToString("dd-MM-yyyy"), DateTime.UtcNow.ToString("dd-MM-yyyy"), payment.InsureeProducts.FirstOrDefault().InsureeNumber, payment.InsureeProducts.FirstOrDefault().InsureeName, payment.InsureeProducts.FirstOrDefault().ProductCode, payment.InsureeProducts.FirstOrDefault().ProductName, payment.GetToBePaidAmount(payment.ExpectedAmount, transferFee), othersCount); List <SmsContainer> message = new List <SmsContainer>(); message.Add(new SmsContainer() { Message = txtmsg, Recipient = payment.PhoneNumber }); var fileName = "CnAssigned_" + payment.PhoneNumber; string test = await sms.SendSMS(message, fileName); }
public void CreatePremium(EnrolFamilyModel model) { ImisPayment payment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); PaymentLogic paymentLogic = new PaymentLogic(_configuration, _hostingEnvironment, _loggerFactory); if (_configuration.GetValue <bool>("PaymentGateWay:CreatePremiumOnPaymentReceived")) { foreach (var family in model.Family) { foreach (var policy in family.Policies) { int paymentId = payment.GetPaymentId(policy.ControlNumber); _ = paymentLogic.CreatePremium(paymentId); } } } }
public async Task <DataMessage> SaveIntent(IntentOfPay intent, int?errorNumber = 0, string errorMessage = null) { var payment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); var cnHandler = new SingleControlNumberHandler(_configuration, _hostingEnvironment); var return_message = cnHandler.GetControlNumber(intent); var data = new AssignedControlNumber(); if (return_message.ErrorOccured == true) { data = (AssignedControlNumber)return_message.Data; } if (return_message.ErrorOccured == false) { var objstring = return_message.Data.ToString(); data = (JsonConvert.DeserializeObject <List <AssignedControlNumber> >(objstring)).FirstOrDefault(); return_message.Data = data; } if (data.control_number != null & data.internal_identifier != null && intent.SmsRequired & !return_message.ErrorOccured) { payment.GetPaymentInfo(Convert.ToInt32(data.internal_identifier)); ControlNumberAssignedSms(payment); } else { payment.ControlNum = null; payment.InsureeProducts = new List <InsureeProduct>(); payment.InsureeProducts.Add( new InsureeProduct { InsureeNumber = intent.policies.FirstOrDefault().insurance_number, ProductCode = intent.policies.FirstOrDefault().insurance_product_code } ); payment.PhoneNumber = intent.phone_number; ControlNumberNotassignedSms(payment, return_message.MessageValue); } return(return_message); }
public async void SendMatchSms(ImisPayment payment) { // Language lang = payment.Language.ToLower() == "en" || payment.Language.ToLower() == "english" || payment.Language.ToLower() == "primary" ? Language.Primary : Language.Secondary; ImisSms sms = new ImisSms(_configuration, _hostingEnvironment, payment.Language); List <SmsContainer> message = new List <SmsContainer>(); var txtmsgTemplate = string.Empty; string othersCount = string.Empty; if (payment.InsureeProducts.Count > 1) { txtmsgTemplate = sms.GetMessage("PaidAndNotMatchedV2"); othersCount = Convert.ToString(payment.InsureeProducts.Count - 1); } else { txtmsgTemplate = sms.GetMessage("PaidAndNotMatched"); } var familyproduct = payment.InsureeProducts.FirstOrDefault(); var txtmsg = string.Format(txtmsgTemplate, payment.PaidAmount, DateTime.UtcNow.ToString("dd-MM-yyyy"), payment.ControlNum, familyproduct.InsureeNumber, familyproduct.InsureeName, familyproduct.ProductCode, familyproduct.ProductName, othersCount); message.Add(new SmsContainer() { Message = txtmsg, Recipient = payment.PhoneNumber }); var fileName = "PayNotMatched_" + payment.PhoneNumber; string test = await sms.SendSMS(message, fileName); }
public async void SendPaymentCancellationSms(ImisPayment payment) { ImisSms sms = new ImisSms(_configuration, _hostingEnvironment, payment.Language); List <SmsContainer> message = new List <SmsContainer>(); var txtmsg = string.Format( sms.GetMessage("CancellationSms"), // template payment.ControlNum, // invoice number DateTime.Now.ToString() // payment cancellation date ); message.Add(new SmsContainer() { Message = txtmsg, Recipient = payment.PhoneNumber }); var fileName = "PaymentCancellationSms_" + payment.PhoneNumber; string test = await sms.SendSMS(message, fileName); payment.UpdateLastSMSSentDateAsync(); }
private void SendSMS(ImisPayment payment) { var paymentLogic = new PaymentLogic(_configuration, _hostingEnvironment, _loggerFactory); paymentLogic.ControlNumberAssignedSms(payment); }
public int CreatePremium(int paymentId) { var imisPayment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); return(imisPayment.CreatePremium(paymentId)); }
public async Task <int> ControlNumbersToBeRequested(string productCode) { var imisPayment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); return(await imisPayment.ControlNumbersToBeRequested(productCode)); }
public async Task <DataMessage> CreateSelfRenewal(SelfRenewal renewal) { // Log the request for future reference GenerateRquestFile(renewal); var context = new ImisDB(); var dataMessage = Validate(renewal); // Send SMS for the previously created request if (dataMessage.Code == (int)Errors.Renewal.RenewalAlreadyRequested) { var payment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); var paymentId = GetPaymentId(renewal); if (paymentId > 0) { payment.GetPaymentInfo(Convert.ToInt32(paymentId)); // Replace the phone number by the current recipient payment.PhoneNumber = renewal.Msisdn; SendSMS(payment); } } if (dataMessage.Code != 0) { return(dataMessage); } // All checks passed, continue creating a new policy in tblPolicy var insuree = context.TblInsuree .Where(i => i.Chfid == renewal.InsuranceNumber && i.ValidityTo == null) .Include(i => i.Family).ThenInclude(f => f.TblPolicy).ThenInclude(p => p.Prod).ThenInclude(pr => pr.ConversionProd) .FirstOrDefault(); var insurees = context.TblInsuree .Where(i => i.FamilyId == insuree.FamilyId && i.ValidityTo == null).ToList(); var product = context.TblProduct.Where(prod => prod.ProductCode.ToUpper() == renewal.ProductCode.ToUpper() && prod.ValidityTo == null).FirstOrDefault(); var dtPolicyPeriod = GetPolicyPeriod(product.ProdId, DateTime.Now.Date); var prevPolicy = insuree.Family.TblPolicy.Where(p => p.Prod.ProductCode.ToUpper() == renewal.ProductCode.ToUpper() && p.ValidityTo == null).FirstOrDefault(); var conProd = insuree.Family.TblPolicy.Any(p => p.Prod.ConversionProd != null); TblPolicy convPolicy = null; if (conProd == true) { convPolicy = insuree.Family.TblPolicy.Where(p => p.Prod.ConversionProd.ProductCode.ToUpper() == renewal.ProductCode.ToUpper() && p.ValidityTo == null).FirstOrDefault(); } int officerId = 0; if (prevPolicy != null) { officerId = (int)prevPolicy.OfficerId; } else { officerId = (int)convPolicy.OfficerId; } // Prepare policy var policy = new TblPolicy { FamilyId = insuree.FamilyId, EnrollDate = DateTime.Now, StartDate = (DateTime)dtPolicyPeriod.Rows[0]["StartDate"], ExpiryDate = (DateTime?)dtPolicyPeriod.Rows[0]["ExpiryDate"], PolicyStatus = 1, PolicyValue = product.LumpSum, // for now we are taking lumnpsum but in future we might have to consider other paramters like Grace period, discount preiod etc... ProdId = product.ProdId, OfficerId = officerId, ValidityFrom = DateTime.Now, AuditUserId = -1, IsOffline = false, PolicyStage = "R", SelfRenewed = true }; // Prepare InsureePolicy var insureePolicy = new List <TblInsureePolicy>(); foreach (var ins in insurees) { var insPol = new TblInsureePolicy { InsureeId = ins.InsureeId, PolicyId = policy.PolicyId, EnrollmentDate = policy.EnrollDate, StartDate = policy.StartDate, EffectiveDate = policy.EffectiveDate, ExpiryDate = policy.ExpiryDate, ValidityFrom = DateTime.Now, AuditUserId = -1, IsOffline = false }; insureePolicy.Add(insPol); } policy.TblInsureePolicy = insureePolicy; var controlNumberResponse = new GetControlNumberResp(); // Begin transaction using (var dbContextTransaction = context.Database.BeginTransaction()) { try { context.TblPolicy.Add(policy); context.SaveChanges(); // Request Control Number from the Pool, if we fail to get the control number delete the newly created entry var officer = context.TblOfficer.Where(o => o.OfficerId == policy.OfficerId).FirstOrDefault(); var intent = new IntentOfSinglePay { Msisdn = renewal.Msisdn, request_date = DateTime.Now.Date.ToString(), OfficerCode = officer.Code, InsureeNumber = renewal.InsuranceNumber, ProductCode = renewal.ProductCode, EnrolmentType = ePayment.Models.EnrolmentType.Renewal, language = "en" }; controlNumberResponse = await GetControlNumber(intent); if (!String.IsNullOrEmpty(controlNumberResponse.control_number)) { dbContextTransaction.Commit(); dataMessage.Data = context.TblPolicy.Where(p => p.PolicyId == policy.PolicyId).Select(p => new { p.PolicyId, p.EnrollDate, ControlNumber = controlNumberResponse.control_number }).FirstOrDefault(); } else { dbContextTransaction.Rollback(); dataMessage.Data = controlNumberResponse.error_message; } } catch (Exception) { dbContextTransaction.Rollback(); throw; } } return(dataMessage); }
public async Task <string> RequestBulkControlNumbers(RequestBulkControlNumbersModel model) { var imisPayment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); return(await imisPayment.RequestBulkControlNumbers(model)); }
public async Task <DataMessage> SavePayment(PaymentData model) { ImisPayment payment = new ImisPayment(_configuration, _hostingEnvironment, _loggerFactory); //var controlNumberExists = payment.CheckControlNumber(model.internal_identifier, model.control_number); if (model.control_number != null) { model.type_of_payment = null; int paymentId = payment.GetPaymentId(model.control_number); if (paymentId != 0) { payment.GetPaymentInfo(paymentId); } else { DataMessage dm = new DataMessage { Code = 3, ErrorOccured = true, MessageValue = "3-Wrong control_number", }; return(dm); } } if (model.type_of_payment == null && payment.typeOfPayment != null) { var transferFee = payment.determineTransferFeeReverse(Convert.ToDecimal(model.received_amount), (TypeOfPayment)payment.typeOfPayment); var success = await payment.UpdatePaymentTransferFeeAsync(payment.PaymentId, transferFee, (TypeOfPayment)payment.typeOfPayment); model.received_amount = model.received_amount + Convert.ToDouble(transferFee); } else if (model.type_of_payment != null && payment.typeOfPayment == null) { var transferFee = payment.determineTransferFeeReverse(Convert.ToDecimal(model.received_amount), (TypeOfPayment)model.type_of_payment); var success = await payment.UpdatePaymentTransferFeeAsync(payment.PaymentId, transferFee, (TypeOfPayment)model.type_of_payment); model.received_amount = model.received_amount + Convert.ToDouble(transferFee); } var response = await payment.SavePaymentAsync(model); if (payment.PaymentId != 0) { if (_configuration.GetValue <bool>("PaymentGateWay:CreatePremiumOnPaymentReceived") & response.Code == 0) { CreatePremium(payment.PaymentId); } SendPaymentConfirmationSms(model, payment); } if (payment.PaymentId != 0 && !response.ErrorOccured) { var ackResponse = payment.GetPaymentDataAck(payment.PaymentId, payment.ControlNum); MatchModel matchModel = new MatchModel() { internal_identifier = payment.PaymentId, audit_user_id = -3 }; var matchresponse = await MatchPayment(matchModel); /* #if DEBUG * var matchdata = JsonConvert.SerializeObject(matchresponse.Data); * var matchedPayments = JsonConvert.DeserializeObject<List<MatchedPayment>>(matchdata); * * if (matchedPayments.Select(x => x.PaymentId).Contains(payment.PaymentId)) * { * SendPaymentSms(payment); * } #endif*/ } return(response); }