public PaymentSummary GetDiscounts(int ShowId, int UserId, int HandlerType, bool fromAdmin = false, bool campingFull = false) { var paymentSummary = new PaymentSummary(); var us = new UserShows(UserId, ShowId) {HandlerType = HandlerType}; UserCamping.GetCampingSummary(ShowId, UserId); var charges = ShowCharges.getClassChargeDetails(ShowId); var discountList = ShowDiscounts.getDiscountsByType(ShowId, HandlerType, (int)DiscountTypes.TransactionCharge); var allDiscounts = ShowDiscounts.getClassChargeDetails(ShowId); var adminCharge = allDiscounts.FirstOrDefault(x => x.DiscountName == "Admin Charge"); var onlineCharge = allDiscounts.FirstOrDefault(x => x.DiscountName == "Transaction Charge"); // // Added display what has already been paid and add/subtract difference. var showTransactions = new List<Transaction>(); if (us.ID > -1) { showTransactions = Transaction.getTransactionForShowUser(us.RefCode); if (showTransactions.Any(x => x.EnteredBy == (int)Transaction.ENTERED_BY.SHOW_ADMIN_ENTRY)) { if (adminCharge != null) { paymentSummary.add("Admin Charge", adminCharge.Amount, 0, ChargableTypes.OFFLINE_CHARGE); } } if (showTransactions.Any(x => x.EnteredBy == (int)Transaction.ENTERED_BY.ONLINE_ENTRY) || us.Status != 3 ) { if (onlineCharge!= null) { if (fromAdmin) { var onlineEntryCnt = showTransactions.Count(x => x.EnteredBy == 0 && x.TransactionType == TransactionTypes.ShowEntryPayment && x.Amount > 0); if (onlineEntryCnt > 0) { paymentSummary.add("'n' Online Charges ", onlineCharge.Amount, onlineEntryCnt, ChargableTypes.TRANSACTION_CHARGE_ADMIN); } } else { paymentSummary.add("Transaction Charge", onlineCharge.Amount, 0, ChargableTypes.TRANSACTION_CHARGE); } } } } else { if (fromAdmin) { if (adminCharge != null) { paymentSummary.add("Admin Charge", adminCharge.Amount, 0, ChargableTypes.OFFLINE_CHARGE); } } else { if (onlineCharge != null) { paymentSummary.add("Transaction Charge", onlineCharge.Amount, 0, ChargableTypes.TRANSACTION_CHARGE); } } } var showCamping = new Camping(ShowId); foreach (var sd in discountList) { var tmp = sd.DiscountName + " discount " + sd.SubTypeName; tmp = tmp.Replace("'n'", sd.Amount.ToString()); if (sd.Subtype == (int)CHARGES_SUBTYPES.n_NightsCamping) { if (!campingFull) { paymentSummary.add(tmp, showCamping.Costpernight, Convert.ToInt32(sd.Amount), ChargableTypes.DISCOUNT_CAMPING); } } else if (sd.Subtype == (int)CHARGES_SUBTYPES.percentCamping) { if (!campingFull) { paymentSummary.addDiscount(tmp, sd.Amount, sd.Subtype, ChargableTypes.DISCOUNT_CAMPING, sd.ChargeType); } } else if (sd.Subtype == (int)CHARGES_SUBTYPES.n_RunsFree) { paymentSummary.addDiscount(tmp, sd.Amount, sd.Subtype, ChargableTypes.DISCOUNT, sd.ChargeType); } else if (sd.Subtype == (int)CHARGES_SUBTYPES.percentOff) { paymentSummary.addDiscount(tmp, sd.Amount, sd.Subtype, ChargableTypes.DISCOUNT, sd.ChargeType); } } int lastChargeType = -1; var usedAtShow = ShowClasses.GetChargeTypesForShow(ShowId); foreach (ShowChargeTypes item in usedAtShow) { var charge = charges.FirstOrDefault(x => x.ChargeType == item.ChargeTypeId); if (charge != null) { lastChargeType = charge.ChargeType; paymentSummary.add(charge, ChargableTypes.STANDARD); } } if (showCamping.ID > -1 && !campingFull) { UserCamping userCamping = new UserCamping(us.ID); var maxNights = (showCamping.Enddate - showCamping.Startdate).Days + 1; int Nights = 0; if (userCamping.ID > -1) { var list = userCamping.PitchDetails[0].CampingDays.Split(',').Where(x => x.Length > 0); Nights = list.Count() * userCamping.PitchDetails.Count; } if (showCamping.Costpershow > 0) { paymentSummary.add("Camping", showCamping.Costpershow, maxNights, ChargableTypes.MAXCAMPING); } if (showCamping.ChargeType == 1) { if (showCamping.Costpershow == 0) { paymentSummary.add("Camping", showCamping.Costpershow, maxNights, ChargableTypes.MAXCAMPING); } paymentSummary.add("Camping", showCamping.Costpernight, Nights, ChargableTypes.CAMPING); } if (showCamping.ChargeType == 2) { paymentSummary.add("Camping", showCamping.Costpershow, Nights, ChargableTypes.CAMPING_FIXFEE); } } Decimal val = 0M; showTransactions.ForEach(x => val += x.Amount); if (showTransactions.Any()) { decimal lastPayment = 0; decimal showEntries = 0; // if (showTransactions.LastOrDefault().TransactionType != TransactionTypes.RefundPaid) if (showTransactions.Any(x => x.TransactionType == TransactionTypes.ShowEntryPayment)) { lastPayment = showTransactions.Where(x => x.TransactionType == TransactionTypes.ShowEntryPayment).Sum(x => x.Amount); if (lastPayment != 0) { paymentSummary.add("Payments Received", lastPayment, 0, ChargableTypes.TRANSACTION); } } if (showTransactions.Any(x => x.TransactionType == TransactionTypes.ShowEntry)) { showEntries = showTransactions.Where(x => x.TransactionType == TransactionTypes.ShowEntry).Sum(x => x.Amount); paymentSummary.add("Fees", showEntries, 0, ChargableTypes.TRANSACTION); } if (showTransactions.Any(x => x.TransactionType == TransactionTypes.TransactionCharge)) { showEntries = showTransactions.Where(x => x.TransactionType == TransactionTypes.TransactionCharge).Sum(x => x.Amount); paymentSummary.add("Transaction Charges", showEntries, 0, ChargableTypes.TRANSACTION); } if (showTransactions.Any(x => x.TransactionType == TransactionTypes.RefundRequest)) { showEntries = showTransactions.Where(x => x.TransactionType == TransactionTypes.RefundRequest).Sum(x => x.Amount); paymentSummary.add("RefundRequest", showEntries, 0, ChargableTypes.TRANSACTION); } if (showTransactions.Any(x => x.TransactionType == TransactionTypes.RefundPaid)) { var refunds = showTransactions.Where(x => x.TransactionType == TransactionTypes.RefundPaid); showEntries = refunds.Sum(x => x.Amount); paymentSummary.add("RefundPaid", showEntries, 0, ChargableTypes.TRANSACTION); var RefundChargeAmount = DiscountManager.GetRefundCharge(ShowId); paymentSummary.add("RefundCharge", RefundChargeAmount, refunds.Count(), ChargableTypes.REFUND_CHARGE); } if (showTransactions.Any(x => x.TransactionType == TransactionTypes.RefundCancelled)) { var refunds = showTransactions.Where(x => x.TransactionType == TransactionTypes.RefundCancelled); showEntries = refunds.Sum(x => x.Amount); paymentSummary.add("RefundCancelled", showEntries, 0, ChargableTypes.TRANSACTION); } } return paymentSummary; }
public PaymentSummary CreateTotalsSummary(int ShowID, int UserID, ref Decimal totals) { ShowClasses classes = new ShowClasses(); List<ShowClasses.Totals> totalsList = classes.getShowTotalsForUser(ShowID, UserID); PaymentSummary paymentSummary = new PaymentSummary(); decimal standardClassAmount = 0; foreach (ShowClasses.Totals total in totalsList) { if (total.ChargeType == 1) { standardClassAmount = total.ChargeRate; } paymentSummary.add(new ChargableItem(total.ChargeName, total.ChargeRate, total.Count, ChargableTypes.STANDARD, total.ChargeType)); } UserShows us = new UserShows(UserID, ShowID); // // check if alt handlers are judging // if (us.HandlerType == 0) { List<AltHandler> altHList = AltHandler.GetAllAltHandlersList(us.Userid); foreach (AltHandler alt in altHList) { if (Judge.isJudgeAtShow(alt.AltHandlerID, ShowID)) { us.HandlerType = 2; } } } Decimal val = 0; List<ShowDiscounts> list = ShowDiscounts.getDiscountsByType(ShowID, us.HandlerType); foreach (ShowDiscounts sd in list) { String tmp = ""; if (sd.DiscountType == (int)DiscountTypes.Fixed) { val = sd.Amount; tmp = sd.DiscountName + " " + sd.SubTypeName; } else if (sd.DiscountType == (int)DiscountTypes.Member) { tmp = sd.DiscountName + " discount " + sd.SubTypeName; tmp = tmp.Replace("'n'", sd.Amount.ToString()); val = -(sd.Amount * standardClassAmount); } paymentSummary.add(tmp, val, 1, ChargableTypes.DISCOUNT); totals += val; } if (us.ID > -1) { Camping showCamping = new Camping(us.ShowID); UserCamping userCamping = new UserCamping(us.ID); int Nights = 0; if (userCamping.ID > -1) { //ShowCharges chg = new ShowCharges(us.ShowID, 6); // Get Camping Charge for This Show Nights = userCamping.PitchDetails[0].CampingDays.Split(',').Length; } paymentSummary.add("Camping", showCamping.Costpernight, Nights, ChargableTypes.CAMPING); } if (totals > 0) { paymentSummary.add("Outstanding Payments", totals, 0, ChargableTypes.TRANSACTION); } else if (totals < 0) { paymentSummary.add("Over Payments", totals, 0, ChargableTypes.TRANSACTION); } return paymentSummary; }