コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
        public DataMessage GetControlNumber(IntentOfPay intent)
        {
            SetLanguage(intent);

            var validation = Validate(intent);

            if (validation.Code == 0)
            {
                FetchControlNumber(intent);
            }

            return(dataMessage);
        }
コード例 #5
0
        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
                }));
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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;
            }
        }
コード例 #9
0
        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);
        }
コード例 #10
0
 public async Task <IActionResult> CHFRequestControlNumberForMultiplePolicies([FromBody] IntentOfPay intent)
 {
     return(await base.GetControlNumber(intent));
 }
コード例 #11
0
 public override Task <IActionResult> GetControlNumber([FromBody] IntentOfPay intent)
 {
     return(base.GetControlNumber(intent));
 }