Example #1
0
        public static void AddMemberPayment(int memberID, MemberPaymentModel model)
        {
            using (var ctx = new DFAppEntities())
            {
                var member = ctx.Members.FirstOrDefault(m => m.MemberID == memberID);
                if (member != null)
                {
                    MemberPayments memberPayment = new MemberPayments()
                    {
                        MemberID           = memberID,
                        PaymentID          = model.ID,
                        DiscountPercentage = model.DiscountPercentage
                    };
                    ctx.MemberPayments.Add(memberPayment);

                    if (model.Companions != null && model.Companions.Count() > 0)
                    {
                        foreach (var companion in model.Companions)
                        {
                            MemberPaymentsForCompanions companionPayment = new MemberPaymentsForCompanions()
                            {
                                MemberID       = memberID,
                                PaymentID      = model.ID,
                                CompanionName  = companion.Name,
                                CompanionPhone = companion.Phone,
                                CompanionEmail = companion.Email
                            };
                            ctx.MemberPaymentsForCompanions.Add(companionPayment);
                        }
                    }

                    foreach (var installment in model.Installments)
                    {
                        MemberPaymentInstallments memberInstallment = new MemberPaymentInstallments()
                        {
                            MemberID        = memberID,
                            PaymentID       = model.ID,
                            InstallmentDate = (DateTime)installment.InstallmentDate,
                            Amount          = installment.Amount,
                            IsPaid          = false,
                            IsCanceled      = false
                        };
                        ctx.MemberPaymentInstallments.Add(memberInstallment);
                    }

                    ctx.SaveChanges();
                }
            }
        }
Example #2
0
        public static void AddMemberPayment(int memberID, MemberPaymentModel model)
        {
            // get payment info
            var paymentInfo = DB.Payments.GetPayment(model.ID);

            // check discount
            if (model.DiscountPercentage.HasValue)
            {
                model.DiscountAmount = paymentInfo.Amount * (1 - ((decimal)model.DiscountPercentage / 100));
            }

            // generate installments
            model.Installments = new List <InstallmentModel>();

            if (paymentInfo.Type.ToUpper() == "ONE-TIME" || paymentInfo.Type.ToUpper() == "MONTHLY")
            {
                if (paymentInfo.NumberOfInstallments == 1)
                {
                    /*
                     * FULL ONE-TIME PAYMENT - treated as one-time payment with only one installment
                     *
                     * MONTHLY PAYMENTS - treated one-time payments but with installment date changed accordingly
                     * Recurring can go indefinitely if there is no stop date
                     * Service agent is in charge of creating new monthly payments at the beginning of each month
                     *
                     */

                    decimal installmentAmount = model.DiscountAmount.HasValue ? (decimal)model.DiscountAmount : (decimal)paymentInfo.Amount;
                    if (model.Companions != null && model.Companions.Count() > 0)
                    {
                        foreach (var c in model.Companions)
                        {
                            installmentAmount += (decimal)paymentInfo.AmountForCompanion;
                        }
                    }

                    DateTime?installmentDate = null;
                    if (paymentInfo.Type.ToUpper() == "MONTHLY")
                    {
                        int paymentDay = ((DateTime)paymentInfo.DueDate).Day;
                        installmentDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, paymentDay);
                    }

                    if (paymentInfo.Type.ToUpper() == "ONE-TIME")
                    {
                        installmentDate = (DateTime)paymentInfo.DueDate;
                    }

                    var oneTimePayment = new InstallmentModel()
                    {
                        InstallmentDate = installmentDate,
                        Amount          = installmentAmount,
                        IsPaid          = false
                    };

                    model.Installments.Add(oneTimePayment);
                }

                if (paymentInfo.NumberOfInstallments > 1)
                {
                    /*
                     * ONE-TIME PAYMENT WITH INSTALLMENTS
                     */

                    List <decimal> installmentAmounts = new List <decimal>();
                    if (!string.IsNullOrEmpty(paymentInfo.InstallmentAmounts))
                    {
                        if (paymentInfo.InstallmentAmounts.EndsWith(";"))
                        {
                            paymentInfo.InstallmentAmounts = paymentInfo.InstallmentAmounts.Substring(0, paymentInfo.InstallmentAmounts.Length - 1);
                        }

                        installmentAmounts = paymentInfo.InstallmentAmounts.Split(';').Select(x => decimal.Parse(x)).ToList();
                    }
                    else
                    {
                        for (int xx = 1; xx <= paymentInfo.NumberOfInstallments; xx++)
                        {
                            installmentAmounts.Add((decimal)paymentInfo.Amount / (int)paymentInfo.NumberOfInstallments);
                        }
                    }

                    List <decimal> installmentAmountsForCompanion = new List <decimal>();
                    if (model.Companions != null && model.Companions.Count() > 0)
                    {
                        if (!string.IsNullOrEmpty(paymentInfo.InstallmentAmountsForCompanion))
                        {
                            if (paymentInfo.InstallmentAmountsForCompanion.EndsWith(";"))
                            {
                                paymentInfo.InstallmentAmountsForCompanion = paymentInfo.InstallmentAmountsForCompanion.Substring(0, paymentInfo.InstallmentAmountsForCompanion.Length - 1);
                            }

                            installmentAmountsForCompanion = paymentInfo.InstallmentAmountsForCompanion.Split(';').Select(x => decimal.Parse(x)).ToList();
                        }
                        else
                        {
                            for (int xx = 1; xx <= paymentInfo.NumberOfInstallments; xx++)
                            {
                                installmentAmountsForCompanion.Add((decimal)paymentInfo.AmountForCompanion / (int)paymentInfo.NumberOfInstallments);
                            }
                        }
                    }

                    decimal totalAmount = (decimal)paymentInfo.Amount;
                    if (model.DiscountPercentage.HasValue)
                    {
                        totalAmount        = totalAmount * (1 - ((decimal)model.DiscountPercentage / 100));
                        installmentAmounts = installmentAmounts.Select(x => x * (1 - ((decimal)model.DiscountPercentage / 100))).ToList();
                    }

                    for (int i = 0; i < paymentInfo.NumberOfInstallments; i++)
                    {
                        // DateTime paymentDate = new DateTime(DateTime.Now.Year, ((DateTime)paymentInfo.DueDate).Month, ((DateTime)paymentInfo.DueDate).Day);
                        DateTime paymentDate = (DateTime)paymentInfo.DueDate;

                        DateTime installmentDate = (i == 0) ? paymentDate : paymentDate.AddMonths(i);

                        decimal installmentAmount = installmentAmounts.ElementAt(i);

                        if (model.Companions != null && model.Companions.Count() > 0)
                        {
                            foreach (var c in model.Companions)
                            {
                                installmentAmount += installmentAmountsForCompanion.ElementAt(i);
                            }
                        }

                        var installment = new InstallmentModel()
                        {
                            InstallmentDate = installmentDate,
                            Amount          = installmentAmount,
                            IsPaid          = false
                        };

                        model.Installments.Add(installment);
                    }
                }
            }

            DB.Members.AddMemberPayment(memberID, model);
        }
Example #3
0
 public void AddMemberPayment(int id, MemberPaymentModel model)
 {
     BL.Members.AddMemberPayment(id, model);
 }