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(); } } }
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); }
public void AddMemberPayment(int id, MemberPaymentModel model) { BL.Members.AddMemberPayment(id, model); }