Exemple #1
0
		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();
				}
			}
		}
Exemple #2
0
		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;
            }
        }
Exemple #3
0
		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;
		}
Exemple #4
0
		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;
        }
Exemple #6
0
		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;
		}