public DataMessage Validate(IntentOfPay intent) { var context = new ImisDB(); foreach (var policy in intent.policies) { // Check if the Insurance number is not blank or null if (String.IsNullOrEmpty(policy.insurance_number)) { dataMessage.Code = 1; dataMessage.MessageValue = new Responses.Messages.Language().GetMessage((int)UserLanguage, "WrongFormatInsureeNo"); } // Check if the product is valid else if (context.TblProduct.Where(p => p.ProductCode == policy.insurance_product_code && p.ValidityTo == null).FirstOrDefault() == null) { dataMessage.Code = 2; dataMessage.MessageValue = new Responses.Messages.Language().GetMessage((int)UserLanguage, "InValidINmissingPC"); } // Check if the officer code is valid else if (context.TblOfficer.Where(o => o.Code == intent.enrolment_officer_code && o.ValidityTo == null).FirstOrDefault() == null) { dataMessage.Code = 3; dataMessage.MessageValue = new Responses.Messages.Language().GetMessage((int)UserLanguage, "InValidEOC"); } // Check if the officer can sell this product (based on the location) else if (!CanOfficerSellProduct(intent.enrolment_officer_code, policy.insurance_product_code)) { dataMessage.Code = 4; dataMessage.MessageValue = new Responses.Messages.Language().GetMessage((int)UserLanguage, "IncompatibleEO_PC"); } // Check if the family has existing product to renew (if the Enrolment Type is renewal(1)) else if (policy.IsRenewal() == 1 & (from prods in context.TblProduct join pol in context.TblPolicy on prods.ProdId equals pol.ProdId join i in context.TblInsuree on pol.FamilyId equals i.FamilyId where (prods.ProductCode == policy.insurance_product_code && i.Chfid == policy.insurance_number && prods.ValidityTo == null && i.ValidityTo == null) select pol.PolicyId).FirstOrDefault() == 0 ) { dataMessage.Code = 5; dataMessage.MessageValue = new Responses.Messages.Language().GetMessage((int)UserLanguage, "NoRenewalProduct"); } // Check if requested product has any free control number left in pool else if (!ControlNumberAvailable(policy.insurance_product_code)) { dataMessage.Code = 11; dataMessage.MessageValue = new Responses.Messages.Language().GetMessage((int)UserLanguage, "NoControlNumberAvailable"); } } dataMessage.ErrorOccured = dataMessage.Code != 0; dataMessage.Data = new AssignedControlNumber(); return(dataMessage); }
protected override ValidationResult IsValid(object value, ValidationContext validationContext) { IntentOfPay intent = (IntentOfPay)validationContext.ObjectInstance; if (intent.enrolment_officer_code == null && value != null && Convert.ToInt32(value) != 0) { return(new ValidationResult(_fieldName + " is not required if Enrolment officer is not provided")); } else { return(ValidationResult.Success); } }
private void SetLanguage(IntentOfPay intent) { var languages = LocalDefault.PrimaryLanguageRepresentations(_configuration); if (intent.language == null || languages.Contains(intent.language.ToLower())) { UserLanguage = ePayment.Models.Language.Primary; } else { UserLanguage = ePayment.Models.Language.Secondary; } }
public DataMessage GetControlNumber(IntentOfPay intent) { SetLanguage(intent); var validation = Validate(intent); if (validation.Code == 0) { FetchControlNumber(intent); } return(dataMessage); }
public virtual async Task <IActionResult> GetControlNumber([FromBody] IntentOfPay intent) { if (!ModelState.IsValid) { var error = ModelState.Values.FirstOrDefault().Errors.FirstOrDefault().ErrorMessage; if (intent != null) { var resp = await _imisModules.GetPaymentModule().GetPaymentLogic().SaveIntent(intent, error.GetErrorNumber(), error.GetErrorMessage()); return(BadRequest(new ErrorResponseV2() { error_occured = true, error_message = error })); } else { return(BadRequest(new ErrorResponseV2() { error_occured = true, error_message = "10-Uknown type of payment" })); } } try { var response = await _imisModules.GetPaymentModule().GetPaymentLogic().SaveIntent(intent); AssignedControlNumber data = (AssignedControlNumber)response.Data; return(Ok(new GetControlNumberResp() { error_occured = response.ErrorOccured, error_message = response.MessageValue, internal_identifier = data.internal_identifier, control_number = data.control_number })); } catch (Exception e) { return(BadRequest(new ErrorResponseV2() { error_occured = true, error_message = e.Message })); } }
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 DataMessage SaveIntent(IntentOfPay _intent, int?errorNumber = 0, string errorMessage = null) { var Proxyfamily = LocalDefault.FamilyMembers(Configuration); List <PaymentDetail> policies = new List <PaymentDetail>(); if (_intent.policies != null) { policies = _intent.policies; } XElement PaymentIntent = new XElement("PaymentIntent", new XElement("Header", new XElement("OfficerCode", _intent.enrolment_officer_code), new XElement("RequestDate", _intent.request_date), new XElement("PhoneNumber", _intent.phone_number), new XElement("LanguageName", _intent.language), new XElement("AuditUserId", -1) ), new XElement("Details", policies.Select(x => new XElement("Detail", new XElement("InsuranceNumber", x.insurance_number), new XElement("ProductCode", x.insurance_product_code), new XElement("EnrollmentDate", DateTime.UtcNow), new XElement("IsRenewal", x.IsRenewal()) ) ) ), new XElement("ProxySettings", new XElement("AdultMembers", Proxyfamily.Adults), new XElement("ChildMembers", Proxyfamily.Children), new XElement("OAdultMembers", Proxyfamily.OtherAdults), new XElement("OChildMembers", Proxyfamily.OtherChildren) ) ); SqlParameter[] sqlParameters = { new SqlParameter("@Xml", PaymentIntent.ToString()), new SqlParameter("@ErrorNumber", errorNumber), new SqlParameter("@ErrorMsg", errorMessage), new SqlParameter("@PaymentID", SqlDbType.Int) { Direction = ParameterDirection.Output }, new SqlParameter("@ExpectedAmount", SqlDbType.Decimal) { Direction = ParameterDirection.Output }, new SqlParameter("@ProvidedAmount", _intent.amount_to_be_paid), new SqlParameter("@PriorEnrollment", LocalDefault.PriorEnrolmentRequired(Configuration)) }; DataMessage message; try { bool error = true; var data = dh.ExecProcedure("uspInsertPaymentIntent", sqlParameters); var rv = int.Parse(data[2].Value.ToString()); if (rv == 0) { error = false; } DataTable dt = new DataTable(); dt.Clear(); dt.Columns.Add("internal_identifier"); dt.Columns.Add("control_number"); DataRow rw = dt.NewRow(); var PaymentId = data[0].Value.ToString(); rw["internal_identifier"] = PaymentId; dt.Rows.Add(rw); ExpectedAmount = decimal.Parse(data[1].Value.ToString()); var languages = LocalDefault.PrimaryLangReprisantations(Configuration); if (_intent.language == null || languages.Contains(_intent.language.ToLower())) { Language = Language.Primary; } else { Language = Language.Secondary; } message = new SaveIntentResponse(rv, error, dt, (int)Language).Message; GetPaymentInfo(PaymentId); } catch (Exception e) { message = new SaveIntentResponse(e).Message; } return(message); }
private void FetchControlNumber(IntentOfPay intent) { var sSQL = @"BEGIN TRY BEGIN TRAN CN DECLARE @PaymentId INT, @ControlNumber NVARCHAR(50), @ExpectedAmount DECIMAL(18, 2) SELECT TOP 1 @PaymentId = P.PaymentID , @ControlNumber = CN.ControlNumber, @ExpectedAmount = P.ExpectedAmount FROM tblPayment P INNER JOIN tblPaymentDetails PD ON P.PaymentId = PD.PaymentId INNER JOIN tblControlNumber CN ON P.PaymentId = CN.PaymentId WHERE P.ValidityTo IS NULL AND PD.ValidityTo IS NULL AND CN.ValidityTo IS NULL AND P.OfficerCode IS NULL AND PD.ProductCode = @ProductCode AND P.PaymentStatus = 3 AND CN.ControlNumber IS NOT NULL AND PD.InsuranceNumber IS NULL ORDER BY P.PaymentId; --Update Phone number and Officer code UPDATE tblPayment SET OfficerCode = @OfficerCode, PhoneNumber = @Phone, LanguageName = @LanguageName, SmsRequired = @SmsRequired WHERE PaymentID = @PaymentId; --Update Insurance number UPDATE tblPaymentDetails SET InsuranceNumber = @InsuranceNumber, PolicyStage = CASE @EnrolmentType WHEN 1 THEN N'R' ELSE N'N' END WHERE PaymentID = @PaymentId; SELECT @PaymentId internal_identifier, @ControlNumber control_number, @ExpectedAmount ExpectedAmount; COMMIT TRAN CN; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRAN CN; END CATCH"; SqlParameter[] parameters = { new SqlParameter("@ProductCode", intent.policies.FirstOrDefault().insurance_product_code), new SqlParameter("@OfficerCode", intent.enrolment_officer_code), new SqlParameter("@Phone", intent.phone_number), new SqlParameter("@InsuranceNumber", intent.policies.FirstOrDefault().insurance_number), new SqlParameter("@EnrolmentType", (int)intent.policies.FirstOrDefault().renewal), new SqlParameter("@LanguageName", intent.language), new SqlParameter("@SmsRequired", intent.SmsRequired) }; var dh = new DataHelper(_configuration); var dt = dh.GetDataTable(sSQL, parameters, System.Data.CommandType.Text); if (dt != null && dt.Rows.Count > 0 && !String.IsNullOrEmpty(dt.Rows[0]["control_number"].ToString())) { dataMessage = new SaveIntentResponse(0, false, dt, (int)UserLanguage).Message; } }
public async Task <DataMessage> SaveIntent(IntentOfPay intent, int?errorNumber = 0, string errorMessage = null) { IPaymentRepository payment = new PaymentRepository(Configuration); var intentResponse = payment.SaveIntent(intent, errorNumber, errorMessage); DataMessage return_message = new DataMessage(); return_message.Code = intentResponse.Code; return_message.MessageValue = intentResponse.MessageValue; if (intentResponse.Code == 0) { var objstring = intentResponse.Data.ToString(); List <AssignedControlNumber> data = JsonConvert.DeserializeObject <List <AssignedControlNumber> >(objstring); var ret_data = data.FirstOrDefault(); decimal transferFee = 0; //Get the transfer Fee if (intent.type_of_payment != null) { transferFee = payment.determineTransferFee(payment.ExpectedAmount, (TypeOfPayment)intent.type_of_payment); var success = payment.UpdatePaymentTransferFee(payment.PaymentId, transferFee, (TypeOfPayment)intent.type_of_payment); } var amountToBePaid = payment.GetToBePaidAmount(payment.ExpectedAmount, transferFee); var response = payment.PostReqControlNumber(intent.enrolment_officer_code, payment.PaymentId, intent.phone_number, amountToBePaid, intent.policies); if (response.ControlNumber != null) { var controlNumberExists = payment.CheckControlNumber(payment.PaymentId, response.ControlNumber); return_message = payment.SaveControlNumber(response.ControlNumber, controlNumberExists); if (payment.PaymentId != null) { if (!return_message.ErrorOccured && !controlNumberExists) { ret_data.control_number = response.ControlNumber; ControlNumberAssignedSms(payment); } else { ControlNumberNotassignedSms(payment, return_message.MessageValue); } } } else if (response.Posted == true) { return_message = payment.SaveControlNumberAkn(response.ErrorOccured, response.ErrorMessage); } else if (response.ErrorOccured == true) { return_message = payment.SaveControlNumberAkn(response.ErrorOccured, response.ErrorMessage); ControlNumberNotassignedSms(payment, response.ErrorMessage); } return_message.Data = ret_data; } else { return_message = intentResponse; return_message.Data = new AssignedControlNumber(); } return(return_message); }
public async Task <IActionResult> CHFRequestControlNumberForMultiplePolicies([FromBody] IntentOfPay intent) { return(await base.GetControlNumber(intent)); }
public override Task <IActionResult> GetControlNumber([FromBody] IntentOfPay intent) { return(base.GetControlNumber(intent)); }