private void Page_Load(object sender, System.EventArgs e) { Usr.KickUserIfNotLoggedIn(); ContainerPage.SslPage = true; if (!Page.IsPostBack) { DonateLoggedOut.Visible = Usr.Current == null; DonateLoggedIn.Visible = Usr.Current != null; if (Usr.Current != null) { UsrDonationIcon udi = new UsrDonationIcon { DonationIconK = DonationIcon.K, UsrK = Usr.Current.K, BuyableLockDateTime = DateTime.Now, Enabled = false }; udi.Update(); InvoiceDataHolder i = new InvoiceDataHolder(); InvoiceItemDataHolder iidh = new InvoiceItemDataHolder(); if (DonationIcon.Vatable.Value) iidh.VatCode = InvoiceItem.VATCodes.T1; else iidh.VatCode = InvoiceItem.VATCodes.T9; if (DonationIcon.Charity) { iidh.Type = InvoiceItem.Types.CharityDonation; iidh.Description = "Charity donation"; iidh.ShortDescription = "Charity donation"; } else { iidh.Type = InvoiceItem.Types.UsrDonate; iidh.Description = "Profile icon"; iidh.ShortDescription = "Profile icon"; } iidh.SetTotal(DonationIcon.Price); iidh.KeyData = Usr.Current.K; iidh.BuyableObjectK = udi.K; iidh.BuyableObjectType = Model.Entities.ObjectType.UsrDonationIcon; iidh.RevenueStartDate = DateTime.Today; iidh.RevenueEndDate = DateTime.Today; i.InvoiceItemDataHolderList.Add(iidh); i.Type = Invoice.Types.Invoice; i.UsrK = Usr.Current.K; Payment.Invoices.Clear(); Payment.Invoices.Add(i); Payment.PromoterK = 0; Payment.Initialize(); } } }
public static void Refund(Usr actionUsr, List<Ticket> tickets, bool refundIncludeBookingFee, decimal chargeToPromoter) { try { if (tickets.Count > 0 && actionUsr.IsSuperAdmin) { chargeToPromoter = Math.Abs(chargeToPromoter); List<int> ticketRunKs = new List<int>(); int promoterK = tickets[0].TicketRun.PromoterK; int eventK = tickets[0].TicketRun.EventK; foreach (Ticket ticket in tickets) { if (promoterK != ticket.TicketRun.PromoterK) throw new Exception("Cannot automate refund for tickets belonging to more than 1 promoter."); if (eventK != ticket.TicketRun.EventK) throw new Exception("Cannot automate refund for tickets belonging to more than 1 event."); } TicketPromoterEvent ticketPromoterEvent = new TicketPromoterEvent(promoterK, eventK); bool chargePromoterTicketPrice = ticketPromoterEvent.FundsReleased && ticketPromoterEvent.FundsTransfer != null && ticketPromoterEvent.FundsTransfer.Status == Transfer.StatusEnum.Success; bool areFundsAlreadyReleased = chargePromoterTicketPrice; decimal sumTicketPrice = 0; string failedTicketKs = ""; List<Exception> failedRefundExceptions = new List<Exception>(); int successfulRefundTransferCount = 0; int successfulRefundQuantity = 0; foreach (Ticket ticket in tickets) { try { RefundTicket(actionUsr, ticket, refundIncludeBookingFee, areFundsAlreadyReleased); if (ticket.Cancelled) { if (!ticketRunKs.Contains(ticket.TicketRunK)) ticketRunKs.Add(ticket.TicketRunK); successfulRefundTransferCount++; successfulRefundQuantity += ticket.Quantity; if (chargePromoterTicketPrice) sumTicketPrice += ticket.Price; } } catch (Exception ex) { failedRefundExceptions.Add(ex); failedTicketKs += ticket.K.ToString() + ", "; } } if (successfulRefundTransferCount > 0 && (chargePromoterTicketPrice || chargeToPromoter > 0)) { // create invoice with tickets.count * chargeToPromoter invoice item for refund. DateTime now = DateTime.Now; InvoiceDataHolder refundChargeInvoiceDH = new InvoiceDataHolder(); refundChargeInvoiceDH.ActionUsrK = Usr.Current.K; refundChargeInvoiceDH.CreatedDateTime = now; refundChargeInvoiceDH.DueDateTime = now.AddDays(tickets[0].TicketRun.Promoter.InvoiceDueDaysEffective > Vars.InvoiceDueDaysDefault ? tickets[0].TicketRun.Promoter.InvoiceDueDaysEffective : Vars.InvoiceDueDaysDefault); refundChargeInvoiceDH.DuplicateGuid = Guid.NewGuid(); refundChargeInvoiceDH.PromoterK = tickets[0].TicketRun.PromoterK; refundChargeInvoiceDH.TaxDateTime = now; refundChargeInvoiceDH.Type = Invoice.Types.Invoice; if (tickets[0].TicketRun.Promoter.PrimaryUsrK != 0) refundChargeInvoiceDH.UsrK = tickets[0].TicketRun.Promoter.PrimaryUsrK; else refundChargeInvoiceDH.UsrK = Usr.Current.K; refundChargeInvoiceDH.VatCode = Invoice.VATCodes.T1; if (chargePromoterTicketPrice) { InvoiceItemDataHolder iidhPrice = new InvoiceItemDataHolder(); iidhPrice.RevenueStartDate = now; iidhPrice.RevenueEndDate = now; iidhPrice.Description = "Ticket price refund charge for " + successfulRefundQuantity.ToString() + " ticket" + (successfulRefundQuantity > 1 ? "s" : ""); iidhPrice.ShortDescription = "Ticket price refund charge"; iidhPrice.Type = InvoiceItem.Types.Misc; iidhPrice.VatCode = InvoiceItem.VATCodes.T9; iidhPrice.SetTotal(Math.Round(sumTicketPrice, 2)); refundChargeInvoiceDH.InvoiceItemDataHolderList.Add(iidhPrice); } InvoiceItemDataHolder iidh = new InvoiceItemDataHolder(); iidh.RevenueStartDate = now; iidh.RevenueEndDate = now; iidh.Description = "Ticket refund charge for " + successfulRefundTransferCount.ToString() + " ticket" + (successfulRefundTransferCount > 1 ? "s" : "") + " transfers"; iidh.ShortDescription = "Ticket refund charge"; iidh.Type = InvoiceItem.Types.Misc; iidh.VatCode = InvoiceItem.VATCodes.T1; iidh.SetTotal(Math.Round(successfulRefundTransferCount * chargeToPromoter, 2)); refundChargeInvoiceDH.InvoiceItemDataHolderList.Add(iidh); Invoice refundChargeInovice = refundChargeInvoiceDH.UpdateInsertDelete(); foreach (int ticketRunK in ticketRunKs) { new TicketRun(ticketRunK).CalculateSoldTicketsAndUpdate(); } refundChargeInovice.UpdateAndAutoApplySuccessfulTransfersWithAvailableMoney(); Utilities.EmailInvoice(refundChargeInovice, true); if (areFundsAlreadyReleased) ticketPromoterEvent.CalculateTotalFundsAndVat(); } failedTicketKs = failedTicketKs.Trim(); if (failedTicketKs.Length > 0) { string exceptionMessages = ""; foreach (Exception ex in failedRefundExceptions) exceptionMessages += ex.Message + "\n\n"; failedTicketKs = failedTicketKs.Substring(0, failedTicketKs.Length - 1); throw new Exception("Failed to refund the following tickets #" + failedTicketKs + ". Exception messages: " + exceptionMessages); } } } catch (Exception ex) { Utilities.AdminEmailAlert("Exception in Ticket.Refund(List<Ticket> tickets)", "Exception in Ticket.Refund(List<Ticket> tickets)", ex, tickets.ConvertAll(ticket => (IBobAsHTML)ticket)); throw ex; } }
public CampaignCredit PurchaseCampaignCreditsWithRemainingFunds(Usr actionUsr, double discountForCredits) { decimal total = this.AmountRemaining(); if (actionUsr.IsAdmin && total > 0) { DateTime now = Time.Now; InvoiceDataHolder idh = new InvoiceDataHolder() { CreatedDateTime = now, DueDateTime = now, DuplicateGuid = new Guid(), PromoterK = this.PromoterK, SalesUsrK = this.Promoter.SalesUsrK, TaxDateTime = now, Type = Invoice.Types.Invoice, VatCode = Invoice.VATCodes.T1 }; InvoiceItemDataHolder iidh = new InvoiceItemDataHolder() { //BuyableObjectK = campaingCredit.K, BuyableObjectType = Model.Entities.ObjectType.CampaignCredit, //Description = campaingCredit.Description, Discount = discountForCredits, RevenueStartDate = now, RevenueEndDate = now, //ShortDescription = campaingCredit.Description, Type = InvoiceItem.Types.CampaignCredits, VatCode = InvoiceItem.VATCodes.T1 }; iidh.SetTotal(total); int credits = CampaignCredit.CalculateTotalCreditsForMoney(iidh.Price, discountForCredits, this.Promoter); if (credits > 0) { iidh.Discount = 1 - (double)Math.Round(iidh.Price / credits, 4); iidh.SetTotal(total); string description = credits.ToString() + " credits"; iidh.Description = description; iidh.ShortDescription = description; idh.InvoiceItemDataHolderList.Add(iidh); Invoice invoice = idh.UpdateInsertDelete(); invoice.SetUsrAndActionUsr(actionUsr); invoice.AssignSalesUsrAndAmount(); invoice.ApplyTransfersToThisInvoice(this); invoice.UpdateAndSetPaidStatus(); CampaignCredit campaingCredit = new CampaignCredit() { ActionDateTime = now, ActionUsrK = actionUsr.K, BuyableObjectK = invoice.K, BuyableObjectType = Model.Entities.ObjectType.Invoice, Credits = credits, Description = description, DisplayOrder = 0, Enabled = true, FixedDiscount = iidh.Discount, InvoiceItemType = InvoiceItem.Types.CampaignCredits, IsPriceFixed = true, PromoterK = this.PromoterK }; campaingCredit.SetUsrAndActionUsr(actionUsr); campaingCredit.UpdateWithRecalculateBalance(); invoice.Items[0].BuyableObjectK = campaingCredit.K; invoice.Items[0].Update(); return campaingCredit; } else return null; } else return null; }
private void LoadTicketsToPaymentControl() { Payment.Reset(); if (Usr.Current == null) throw new DsiUserFriendlyException("You must be logged in to purchase tickets."); InvoiceDataHolder idh = new InvoiceDataHolder(); idh.ActionUsrK = Usr.Current.K; idh.CreatedDateTime = DateTime.Now; idh.DuplicateGuid = (Guid)ViewState["DuplicateGuid"]; idh.PromoterK = 0; idh.Type = Invoice.Types.Invoice; idh.VatCode = Invoice.VATCodes.T1; DateTime now = DateTime.Now; foreach (Ticket ticket in TicketsToPurchase) { InvoiceItemDataHolder iidhTicket = new InvoiceItemDataHolder(); InvoiceItemDataHolder iidhBookingFee = new InvoiceItemDataHolder(); if (ticket.TicketRun.Promoter.VatStatus == Promoter.VatStatusEnum.Registered) iidhTicket.VatCode = InvoiceItem.VATCodes.T1; else iidhTicket.VatCode = InvoiceItem.VATCodes.T0; iidhTicket.SetTotal(ticket.Price); iidhTicket.Type = InvoiceItem.Types.EventTickets; iidhTicket.KeyData = ticket.K; iidhTicket.BuyableObjectK = ticket.K; iidhTicket.BuyableObjectType = Model.Entities.ObjectType.Ticket; iidhTicket.RevenueStartDate = now; iidhTicket.RevenueEndDate = now; iidhTicket.Description = ticket.Description; iidhTicket.ShortDescription = ticket.ShortDescription; iidhBookingFee.VatCode = InvoiceItem.VATCodes.T1; iidhBookingFee.SetTotal(ticket.BookingFee); iidhBookingFee.Type = InvoiceItem.Types.EventTicketsBookingFee; iidhBookingFee.KeyData = ticket.K; iidhBookingFee.BuyableObjectK = ticket.K; iidhBookingFee.BuyableObjectType = Model.Entities.ObjectType.Ticket; iidhBookingFee.RevenueStartDate = now; iidhBookingFee.RevenueEndDate = now; iidhBookingFee.Description = "Booking fee"; iidhBookingFee.ShortDescription = "Booking fee"; idh.InvoiceItemDataHolderList.Add(iidhTicket); idh.InvoiceItemDataHolderList.Add(iidhBookingFee); } //how many visits has this user had? Query qVisits = new Query(); qVisits.QueryCondition = new Q(Visit.Columns.UsrK, Usr.Current.K); qVisits.ReturnCountOnly = true; VisitSet vsCount = new VisitSet(qVisits); if (vsCount.Count <= 20) Payment.FraudCheck = Transfer.FraudCheckEnum.Strict; Payment.Invoices.Add(idh); Payment.PromoterK = 0; Payment.AllowPayWithBalance = false; Payment.ShowItemsIncVat = true; Payment.UsrK = Usr.Current.K; Payment.Initialize(); Payment.LoadBuyerDetailsToScreen(); //this.TicketsPanel.Visible = false; //this.PayForTicketsPanel.Visible = true; }
public void LoadTicketsToPaymentControl(TicketSet ticketsToPurchase) { Payment.Reset(); if (Usr.Current == null) throw new DsiUserFriendlyException("You must be logged in to purchase tickets."); if (!Usr.Current.IsEmailVerified || Usr.Current.IsEmailBroken) HttpContext.Current.Response.Redirect("/pages/emailverify?url=" + HttpContext.Current.Server.UrlEncode(HttpContext.Current.Request.Url.ToString()) + "&er=" + HttpContext.Current.Server.UrlEncode("You need to verify your email to buy tickets")); InvoiceDataHolder idh = new InvoiceDataHolder(); idh.ActionUsrK = Usr.Current.K; idh.CreatedDateTime = DateTime.Now; idh.DuplicateGuid = (Guid)ViewState["DuplicateGuid"]; idh.PromoterK = 0; idh.Type = Invoice.Types.Invoice; idh.VatCode = Invoice.VATCodes.T1; DateTime now = DateTime.Now; bool requiresDeliveryAddress = false; foreach (Ticket ticket in ticketsToPurchase) { InvoiceItemDataHolder ticketInvoiceItem = new InvoiceItemDataHolder(); InvoiceItemDataHolder bookingFeeInvoiceItem = new InvoiceItemDataHolder(); if (ticket.TicketRun.Promoter.VatStatus == Promoter.VatStatusEnum.Registered) ticketInvoiceItem.VatCode = InvoiceItem.VATCodes.T1; else ticketInvoiceItem.VatCode = InvoiceItem.VATCodes.T0; ticketInvoiceItem.SetTotal(ticket.Price); ticketInvoiceItem.Type = InvoiceItem.Types.EventTickets; ticketInvoiceItem.KeyData = ticket.K; ticketInvoiceItem.BuyableObjectK = ticket.K; ticketInvoiceItem.BuyableObjectType = Model.Entities.ObjectType.Ticket; ticketInvoiceItem.RevenueStartDate = now; ticketInvoiceItem.RevenueEndDate = now; ticketInvoiceItem.Description = ticket.Description; ticketInvoiceItem.ShortDescription = ticket.ShortDescription; bookingFeeInvoiceItem.VatCode = InvoiceItem.VATCodes.T1; bookingFeeInvoiceItem.SetTotal(ticket.BookingFee); bookingFeeInvoiceItem.Type = InvoiceItem.Types.EventTicketsBookingFee; bookingFeeInvoiceItem.KeyData = ticket.K; bookingFeeInvoiceItem.BuyableObjectK = ticket.K; bookingFeeInvoiceItem.BuyableObjectType = Model.Entities.ObjectType.Ticket; bookingFeeInvoiceItem.RevenueStartDate = now; bookingFeeInvoiceItem.RevenueEndDate = now; bookingFeeInvoiceItem.Description = "Booking fee"; bookingFeeInvoiceItem.ShortDescription = "Booking fee"; idh.InvoiceItemDataHolderList.Add(ticketInvoiceItem); idh.InvoiceItemDataHolderList.Add(bookingFeeInvoiceItem); if (ticket.TicketRun.DeliveryMethod == TicketRun.DeliveryMethodType.SpecialDelivery) { requiresDeliveryAddress = true; } } if (requiresDeliveryAddress){ TicketRun ticketRun = ticketsToPurchase[0].TicketRun; InvoiceItemDataHolder deliveryFeeInvoiceItem = new InvoiceItemDataHolder() { VatCode = InvoiceItem.VATCodes.T1, Type = InvoiceItem.Types.EventTicketsDelivery, Description = "Delivery by " + ticketRun.DeliveryMethod.ToString(), ShortDescription = "Delivery by " + ticketRun.DeliveryMethod.ToString(), RevenueStartDate = now, RevenueEndDate = now/*, BuyableObjectK = ticketsToPurchase[0].K, BuyableObjectType = Model.Entities.ObjectType.Ticket*/ }; deliveryFeeInvoiceItem.SetTotal(Convert.ToDecimal(ticketsToPurchase[0].TicketRun.DeliveryCharge)); idh.InvoiceItemDataHolderList.Add(deliveryFeeInvoiceItem); Payment.GetFullAddress = true; Payment.LockCountryK(224); Payment.FraudCheck = Transfer.FraudCheckEnum.Strict; } //how many visits has this user had? Query qVisits = new Query(); qVisits.QueryCondition = new Q(Visit.Columns.UsrK, Usr.Current.K); qVisits.ReturnCountOnly = true; VisitSet vsCount = new VisitSet(qVisits); if (vsCount.Count <= 20) Payment.FraudCheck = Transfer.FraudCheckEnum.Strict; Payment.Invoices.Add(idh); Payment.PromoterK = 0; Payment.AllowPayWithBalance = false; Payment.ShowItemsIncVat = true; Payment.UsrK = Usr.Current.K; Payment.Initialize(); Payment.LoadBuyerDetailsToScreen(); //this.TicketsPanel.Visible = false; this.PayForTicketsPanel.Visible = true; }
private List<InvoiceItemDataHolder> CreateCreditInvoiceItems() { Query InvoiceItemQuery = new Query(new Q(InvoiceItem.Columns.InvoiceK, this.K)); InvoiceItemSet InvoiceItems = new InvoiceItemSet(InvoiceItemQuery); List<InvoiceItemDataHolder> creditItems = new List<InvoiceItemDataHolder>(); foreach (InvoiceItem ii in InvoiceItems) { InvoiceItemDataHolder creditItem = new InvoiceItemDataHolder(); creditItem.BuyableObjectK = ii.BuyableObjectK; creditItem.BuyableObjectType = ii.BuyableObjectType; creditItem.Description = CREDIT + " INV#" + this.K.ToString() + ": " + ii.Description; creditItem.ShortDescription = "CRD for item #" + ii.K.ToString(); //creditItem.Price = -1 * ii.Price; //creditItem.Vat = -1 * ii.Vat; creditItem.RevenueStartDate = DateTime.Now; creditItem.RevenueEndDate = DateTime.Now; creditItem.Type = ii.Type; creditItem.VatCode = ii.VatCode; creditItem.SetTotal(-1 * ii.Total); creditItems.Add(creditItem); } return creditItems; }