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; }
private PaymentSummary CreatePaymentSummary(UserShows userShow, bool AddAdminCharge = false, bool campingFull = false) { var paymentSummary = new PaymentSummary(); var thisShow = new Shows(userShow.ShowID); var DiscountMgr = new DiscountManager(); return DiscountMgr.GetDiscounts(userShow.ShowID, userShow.Userid, userShow.HandlerType, AddAdminCharge, campingFull); }
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; }
// From Website public StatusCls GetSummaryForm(int ShowId, int UserId) { StatusCls status = new StatusCls(); PaymentSummary paymentSummary = new PaymentSummary(); Shows thisShow = new Shows(ShowId); User currentUser = new User(UserId); var us = new UserShows(UserId, ShowId); var singleEntryId = getSingleEntry(ShowId); decimal totals = 0; var transactions = GetTransactionDetails(us.ID, ref totals); String showDetailsBox = ""; showDetailsBox += "<div class='showDetails summary themeText'>"; showDetailsBox += "<div class='title' style='width:700px'>" + thisShow.ShowName + "</div>"; showDetailsBox += "<div class='showdate'>" + thisShow.ShowDate.ToString("dd MMM yyyy") + "</div>"; showDetailsBox += "</div >"; String totalsBox = ""; totalsBox += status.ShowSummary; totalsBox += "<div class='ctrlButtons'></div>"; totalsBox += "<div class='totalSummary '>"; if (us.Status == (int)UserShows.UserStatus.STATUS_ENTERED_AND_PAID) { if (totals < 0) { var refundRequests = transactions.Where(x => x.TransactionType == TransactionTypes.RefundRequest ); var refundPaid = transactions.Where(x => x.TransactionType == TransactionTypes.RefundPaid || x.TransactionType == TransactionTypes.RefundPaid); if (refundRequests.Any() && (refundRequests.Count() != refundPaid.Count())) { totalsBox += string.Format("<div class='notpaid'><h3>Pending Refund: £{0:0.00}</h3></div>", Math.Abs(totals)); } else { totalsBox += string.Format("<div class='notpaid'><h3>Awaiting payment: £{0:0.00}</h3></div>", Math.Abs(totals)); totalsBox += createPaymentForm(currentUser, thisShow, us.ID, Math.Abs(totals)); } } else if (totals > 0) { if (transactions.Any(x => x.TransactionType == TransactionTypes.ShowEntryPayment)) { totalsBox += "<div class='notpaid'><h3>Show Paid</h3></div>"; } else { totalsBox += string.Format("<div class='notpaid'><h3>Awaiting payment: £{0:0.00}</h3></div>", Math.Abs(totals)); totalsBox += createPaymentForm(currentUser, thisShow, us.ID, totals); } } else { totalsBox += "<div class='paid'><h3>Show Paid</h3></div>"; } } else if (us.Status == (int)UserShows.UserStatus.STATUS_ENTERED_NOT_PAID || us.Status == (int)UserShows.UserStatus.STATUS_SAVED) { if (transactions.Any()) { totals = GetOutstandingBalance(us) * -1; if (totals < 0) { totalsBox += string.Format("<div class='notpaid'><h3>Awaiting payment: £{0:0.00}</h3></div>", Math.Abs(totals)); totalsBox += createPaymentForm(currentUser, thisShow, us.ID, totals * -1); } else if (totals > 0) { totalsBox += "<div class='notpaid'>Refund Due</div>"; } } else { } } String userRefNo = us.ID.ToString().PadLeft(6, '0'); totalsBox += "</div >"; String docbox = "<div class='summaryDocs'>"; docbox += "</div>"; docbox += "<div class='buttons'>"; if (thisShow.Status == (int)Shows.SHOW_STATUS.SHOWDOCS_AVAILABLE) { docbox += "<input type='button' class='button-document bigButtons' data-action='rp' value='Your Running Plan' />"; docbox += "<input type='button' class='button-document bigButtons' data-action='rpb' value='Blank Running Plan' />"; String baseURL = "/Schedules/" + thisShow.ShowDate.ToString("yyyy") + "/"; List<ShowDocuments> showDocs = Shows.getShowDocuments(ShowId); foreach (ShowDocuments doc in showDocs.Where( x=> x.Name == "other" ) ) { docbox += String.Format("<input type='button' class='button-document bigButtons' style='text-transform:Capitalize;' data-action='other' data-url='{0}{1}' value='Show Information' />", baseURL, doc.Url, doc.Name); } } if (thisShow.Status >= (int)Shows.SHOW_STATUS.CLOSED) { //docbox += "<input type='button' class='btns' action='os' value='View Entry' showstatus='" + thisShow.Status.ToString() + "' />"; if (us.Status == (int)UserShows.UserStatus.STATUS_ENTERED_AND_PAID) { docbox += "<div class='entrySummary'>" + getEntrySummary(us) + "</div>"; } } else { docbox += "<div class='entrySummary'>" + getEntrySummary(us) + "</div>"; if (thisShow.Status != (int)Shows.SHOW_STATUS.SHOWDOCS_AVAILABLE) { docbox += "<input type='button' class='btns' action='os' value='Edit Entry' />"; docbox += "<input type='button' class='btns' action='ce' value='Cancel Entry' />"; } } docbox += "<input type='button' class='btns' action='close' value='Close' />"; docbox += "</div>"; status.Status = 0; status.UserID = currentUser.ID; status.Camping = new Camping(ShowId); status.CampingSummary = UserCamping.GetCampingSummary(ShowId, currentUser.ID); if (!status.CampingSummary.Any()) { for (DateTime dt = status.Camping.Startdate; dt <= status.Camping.Enddate; dt = dt.AddDays(1)) { status.CampingSummary.Add(new Core.Dto.CampingSummary { CampingDay = dt, Count = 0 }); } } else { status.CampingFull = status.CampingSummary.Where(x => x.Count >= status.Camping.Limit).Count() == status.CampingSummary.Count(); } status.PaymentSummary = CreatePaymentSummary(us, false, status.CampingFull); if (status.Camping.ID > -1 && !status.CampingFull) { status.UserCamping = new UserCamping(us.ID); } status.Data = "<input id='ShowID' type='hidden' value='" + ShowId.ToString() + "' />" + "<div class='summary' showid='" + ShowId.ToString() + "'>" + showDetailsBox + totalsBox + docbox + "</div>"; status.Extra = totalsBox; if (us.Status == (int)UserShows.UserStatus.STATUS_ENTERED_NOT_PAID) { status.Extra = createPaymentForm(currentUser, thisShow, us.ID, totals); } status.ShowStatus = thisShow.Status; status.PaymentSummary = CreatePaymentSummary(us); status.Helping = Business.Helpers.HelperForShow(us.ShowID, us.Userid); return status; }