public string LinkAdmin(Transfer transfer)
 {
     return Utilities.Link(UrlInfo.PageUrl(UrlInfo.PageTypes.Admin, "adminmainaccounting", "SearchType", Convert.ToInt32(AdminMainAccounting.SearchType.Transfer).ToString(),
                             "FromDate", ((DateTime)transfer.ExtraSelectElements["Date"]).ToString("dd_MM_yy"), "ToDate", ((DateTime)transfer.ExtraSelectElements["Date"]).ToString("dd_MM_yy"),
                             "Method", Convert.ToInt32(Bobs.Transfer.Methods.Card).ToString(),
                             "Status", Convert.ToInt32(Bobs.Transfer.StatusEnum.Success).ToString()),
                             ((DateTime)transfer.ExtraSelectElements["Date"]).ToString("ddd dd/MM/yy"));
 }
Esempio n. 2
0
		public void MakePayment(List<InvoiceDataHolder> invoices, decimal amount, Usr usr, int promoterK, int actionUsrK, string cardFullName, string cardAddressStreet, string cardAddressArea, string cardAddressTown, string cardAddressCounty, int cardAddressCountryK, string cardAddressPostCode, string cardAddressCountry, string cardNumber, DateTime cardExpiryDate, string cardCV2, Transfer.FraudCheckEnum fraudCheckEnum, bool saveCard, Guid duplicateGuid, DateTime cardStartDate, string cardIssueNumber)
		{
			this.amount = Math.Round(amount, 2);
			if (this.amount <= 0)
			{
				throw new Exception("Cannot make a payment for " + this.amount.ToString("c") + ". It must be a positive amount.");
			}
			else
			{
				this.cardNumber = cardNumber.Trim().Replace(" ", "");
				this.cardAddressCountry = cardAddressCountry.Trim();
				this.fraudCheckEnum = fraudCheckEnum;
				this.invoiceDataHolders = invoices;
				this.transfer.Guid = Guid.NewGuid();
				this.transfer.DuplicateGuid = duplicateGuid;
				this.transfer.Amount = this.amount;
				this.transfer.Type = Transfer.TransferTypes.Payment;
				this.transfer.Method = Transfer.Methods.Card;
				this.transfer.Company = Model.Entities.Transfer.CompanyEnum.DH;
				this.transfer.CardAddress1 = cardAddressStreet.Trim();
				this.transfer.CardAddressArea = cardAddressArea;
				this.transfer.CardAddressCounty = cardAddressCounty;
				this.transfer.CardAddressTown = cardAddressTown;
				this.transfer.CardAddressCountryK = cardAddressCountryK;
				this.transfer.CardPostcode = cardAddressPostCode.Trim();
				this.transfer.CardName = cardFullName.Trim();
				this.transfer.CardCV2 = cardCV2.Trim();
				this.transfer.CardExpires = cardExpiryDate;
				this.transfer.CardStart = cardStartDate;
				if (cardIssueNumber.Length > 0)
					this.transfer.CardIssue = Convert.ToInt32(cardIssueNumber);
				this.transfer.SetUsrAndActionUsr(usr);
				this.transfer.DateTimeCreated = DateTime.Now;
				this.transfer.PromoterK = promoterK;
				this.usr = usr;

				this.transfer.StoreCardEndAndHashAndCardType(this.cardNumber);

				ValidateMinimumDetails();

				try
				{
					response = secVpnService.validateCardFull(
									userName,
									password,
									transfer.Guid.ToString(),				// DSI created SecPay Transaction Id "tran0001"
                                    ipAddress,								// Credit Card user IP address "127.0.0.1"
									cardFullName,							// User Name "Mr Cardholder"
									cardNumber,								// User card number "4444333322221111"
Esempio n. 3
0
		public void PayWithSavedCard_Click(object o, System.EventArgs e)
		{
			CheckSslStatus();

			try
			{
				if (IsValidTotal() && AllowSavedCards)
				{
					PaymentClickEventArgs paymentClickEventArgs = new PaymentClickEventArgs();
					if (PaymentClick != null)
						PaymentClick(this, paymentClickEventArgs);

					if (paymentClickEventArgs.Abort)
						return;

					if (Page.IsValid)
					{

						Transfer prevSavedTransfer = new Transfer(Convert.ToInt32(this.SavedCardDropDownList.SelectedValue));
						this.CardNumberHash = prevSavedTransfer.CardNumberHash;
						//check for duplicate invoices
						if (ValidateAndLockInvoices())
						{
							secPay = new SecPay();
							//bool creatingInvoices = false;
							//int savedTransferK = Convert.ToInt32(this.SavedCardDropDownList.SelectedValue);

							if (!CurrentUsr.CheckPassword(PasswordTextBox.Text))
							{
								ProcessingVal.IsValid = false;
								ProcessingVal.ErrorMessage = "Incorrect password";
								this.UnlockInvoiceItems();

								if (ContainerPage != null && !HideValidationSummary)
									ContainerPage.AnchorSkip(this.ClientID + "_PaymentAnchor");
							}
							else
							{
								try
								{
									foreach (InvoiceDataHolder idh in Invoices)
									{
										//creatingInvoices = idh.K == 0;
										SetInvoiceDatesUsrsGuid(idh);
									}

									secPay.MakePaymentUsingSavedTransferDetails(
										Invoices,
										InvoiceTotalAfterBalanceAndCredit,
										CurrentUsr,
										prevSavedTransfer,
										FraudCheck,
										(Guid)ViewState["DuplicateGuidTransfer"]);
								}
								catch (Exception ex)
								{
									this.ProcessingVal.ErrorMessage = RETRY_INVOICE_ERROR_MSG;
									//try
									//{
									//    this.UnlockInvoiceItems();
									//}
									//catch (Exception)
									//{ }
									this.ProcessException(ex, prevSavedTransfer.CardNumberEnd);
									return;
								}

								if (secPay.Transfer.Status.Equals(Transfer.StatusEnum.Success))
									this.ProcessSuccessfulSecPayTransfer(secPay);
								else
									this.HandleFailedSecPayTransfer(secPay);
							}
						}
					}
					else
					{
						if (ContainerPage != null && !HideValidationSummary)
							ContainerPage.AnchorSkip(this.ClientID + "_PaymentAnchor");
					}

				}
				else
				{
					// Re evaluate.
					this.Initialize();
					
				}
			}
			catch (Exception ex)
			{
				ProcessingVal.ErrorMessage = RETRY_INVOICE_ERROR_MSG;
				ProcessException(ex);
				return;
			}
			
		}
Esempio n. 4
0
        public Transfer ExportToTransfer()
        {
            Transfer transfer = new Transfer();
            transfer.K = this.k;
            if (this.k > 0)
                transfer = new Transfer(k);
            else
                // if it doesnt already exist in the database, then it is new.
                this.State = DataHolderState.Added;
            transfer.Amount = Math.Round(this.amount,2);
            transfer.Status = this.status;
            transfer.Method = this.method;
            transfer.DateTimeComplete = this.dateTimeComplete;

			transfer = this.SetReferenceNumber(transfer);			

            return transfer;
        }
Esempio n. 5
0
		protected void SetupTransferButton_Click(object sender, EventArgs e)
		{
			SetupAllOutstandingInvoices();

			SetupPayment.Reset();

			List<int> invoiceKList = new List<int>();

			// Loop through Repeater dataset, get all checked, and pass those K's to the payment screen
			foreach (RepeaterItem rpi in this.PromoterAccountItemRepeater.Items)
			{
				CheckBox outstandingCheckBox = (CheckBox)rpi.FindControl("OutstandingCheckBox");
				if (outstandingCheckBox.Checked == true)
				{
					Label invoiceKLabel = (Label)rpi.FindControl("InvoiceKLabel");
					invoiceKList.Add(Convert.ToInt32(invoiceKLabel.Text));
				}
			}

			foreach (int invoiceK in invoiceKList)
			{
				Invoice invoice = new Invoice(invoiceK);

				InvoiceCreditSet invoiceCreditSet = new InvoiceCreditSet(new Query(new Q(InvoiceCredit.Columns.InvoiceK, invoice.K)));
				InvoiceTransferSet invoiceTransferSet = new InvoiceTransferSet(new Query(new Q(InvoiceTransfer.Columns.InvoiceK, invoice.K)));
				var total = invoice.Total;
				var vat = invoice.Vat;
				var price = invoice.Price;

				foreach (InvoiceCredit invoiceCredit in invoiceCreditSet)
				{
					Invoice credit = new Invoice(invoiceCredit.CreditInvoiceK);
					//price += credit.Price;
					//vat += credit.Vat;
					total += credit.Total;
				}
				foreach (InvoiceTransfer invoiceTransfer in invoiceTransferSet)
				{
					Transfer transfer = new Transfer(invoiceTransfer.TransferK);
					if (transfer.Status.Equals(Transfer.StatusEnum.Success))
					{
						total -= transfer.Amount;
					}
				}
				InvoiceDataHolder idh = new InvoiceDataHolder(invoice);
				//idh.K = 0;
				this.SetupPayment.Invoices.Add(idh);

			}
			this.SetupPayment.PromoterK = CurrentPromoter.K;
			this.SummaryPanel.Visible = false;
			this.SetupTransferPanel.Visible = true;

	//		this.SetupPayment.Initialize();
		}
Esempio n. 6
0
		public static void EmailTransfer(Transfer transfer, bool transferCreated, bool transferStatusChanged)
		{
			string emailSubject = "";
			if (Vars.DevEnv)
				emailSubject += "TEST - ";

			emailSubject += "DontStayIn ";
			if (transfer.DateTimeCreated.Equals(transfer.DateTimeComplete) && transfer.Method.Equals(Transfer.Methods.Card))
				emailSubject += "WEB ";
            emailSubject += transfer.TypeToString + " #" + transfer.K.ToString() + ", " + Math.Abs(transfer.Amount).ToString("c");

			if (transferStatusChanged == true)
				emailSubject += "";
			else if (transferCreated)
				emailSubject += " created";
			else
				emailSubject += " updated";

			emailSubject += ", Status: " + transfer.Status.ToString();

			EmailTransfer(transfer, emailSubject, transferCreated, transferStatusChanged);
		}
Esempio n. 7
0
		private static void AddTransferToEmail(Mailer mailer, Transfer transfer)
		{
			if (transfer != null)
			{
				if (transfer.Status.Equals(Transfer.StatusEnum.Pending) && transfer.Type.Equals(Transfer.TransferTypes.Payment))
				{
					AddPendingPaymentToEmail(mailer, transfer);
				}
				else if (transfer.Status.Equals(Transfer.StatusEnum.Success) && transfer.Type.Equals(Transfer.TransferTypes.Payment))
				{
					AddSuccessfulPaymentToEmail(mailer, transfer);
				}
				else if ((transfer.Status.Equals(Transfer.StatusEnum.Pending) || transfer.Status.Equals(Transfer.StatusEnum.Success)) && transfer.Type.Equals(Transfer.TransferTypes.Refund))
				{
					AddRefundToEmail(mailer, transfer);
				}
			}
		}
Esempio n. 8
0
		//protected void GenBannerStats_Click(object sender, EventArgs eventArgs)
		//{
		//    Banner.GeneratePositionStats();
		//}
		#endregion

		#region UpdateOldDBInvoices_Click
		public void UpdateOldDBInvoices_Click(object o, System.EventArgs e)
		{
			Cambro.Web.Helpers.WriteAlertHeader();

			Cambro.Web.Helpers.WriteAlert("Selecting xxx...", 1);

			Query InvoiceQuery = new Query();
			InvoiceQuery.OrderBy = new OrderBy(Invoice.Columns.K, OrderBy.OrderDirection.Ascending);

			InvoiceSet bs = new InvoiceSet(InvoiceQuery);

			for (int count = 0; count < bs.Count; count++)
			{
				Invoice invoice = bs[count];

				try
				{
					invoice.Type = Invoice.Types.Invoice;
					invoice.IsImmediateCreditCardPayment = true;
					invoice.ActionUsrK = invoice.UsrK;
					invoice.VatCode = Invoice.VATCodes.T1;
					decimal invoicePrice = 0;
					decimal invoiceVat = 0;
					decimal invoiceTotal = 0;

					foreach (InvoiceItem invoiceItem in invoice.Items)
					{
						//invoiceItem.Price = Math.Round(invoiceItem.Price, 2);
						//invoiceItem.Vat = Math.Round(invoiceItem.Vat, 2);
						//invoiceItem.Total = Math.Round(invoiceItem.Total, 2);

						invoicePrice += invoiceItem.Price;
						invoiceVat += invoiceItem.Vat;
						invoiceTotal += invoiceItem.Total;

						if (invoiceItem.Type == InvoiceItem.Types.CharityDonation)
							invoiceItem.VatCode = InvoiceItem.VATCodes.T9;
						else if(invoiceItem.Vat.Equals(0))
							invoiceItem.VatCode = InvoiceItem.VATCodes.T0;
						else
							invoiceItem.VatCode = InvoiceItem.VATCodes.T1;

						if (invoiceItem.Type == InvoiceItem.Types.Banner || invoiceItem.Type == InvoiceItem.Types.BannerEmail || invoiceItem.Type == InvoiceItem.Types.BannerHotbox
							|| invoiceItem.Type == InvoiceItem.Types.BannerPhoto || invoiceItem.Type == InvoiceItem.Types.BannerSkyscraper || invoiceItem.Type == InvoiceItem.Types.BannerTop)
						{
							try
							{
								Banner banner = new Banner(invoiceItem.KeyData);
								invoiceItem.RevenueStartDate = banner.FirstDay;
								invoiceItem.RevenueEndDate = banner.LastDay;
							}
							catch (Exception)
							{ }
						}
						else
						{
							invoiceItem.RevenueStartDate = invoice.CreatedDateTime;
							invoiceItem.RevenueEndDate = invoice.CreatedDateTime;
						}
						invoiceItem.Update();
					}

					invoice.Price = Math.Round(invoicePrice,2);
					invoice.Vat = Math.Round(invoiceVat,2);
					invoice.Total = Math.Round(invoiceTotal, 2);

					if (invoice.DueDateTime.Equals(DateTime.MinValue))
						invoice.DueDateTime = invoice.CreatedDateTime.AddDays(30);

					invoice.UpdateAndSetPaidStatus();

					// If there arent transfers paying for this invoices yet, then create them.
					decimal amountPaid = invoice.AmountPaid;
					if (Math.Round(invoice.Total,2) > Math.Round(amountPaid,2))
					{
						InvoiceTransferSet invoiceTransferSet = new InvoiceTransferSet(new Query(new Q(InvoiceTransfer.Columns.InvoiceK, invoice.K)));
						if (invoiceTransferSet.Count == 0)
						{
							Transfer transfer = new Transfer();
							transfer.ActionUsrK = invoice.UsrK;
							transfer.Amount = Math.Round(invoice.Total - amountPaid, 2);
							transfer.DateTimeComplete = invoice.CreatedDateTime;
							transfer.DateTimeCreated = invoice.CreatedDateTime;
							transfer.Method = Transfer.Methods.Card;
							transfer.AddNote("Autogenerated Transfer to create transfer for old system invoice.", "System");
							transfer.PromoterK = invoice.PromoterK;
							transfer.Status = Transfer.StatusEnum.Success;
							transfer.Type = Transfer.TransferTypes.Payment;
							transfer.UsrK = invoice.UsrK;
							// Will be fully applied
							transfer.IsFullyApplied = true;

							transfer.CardAddress1 = invoice.Address;
							transfer.CardName = invoice.Name;
							transfer.CardPostcode = invoice.Postcode;

							transfer.Update();

							InvoiceTransfer invoiceTransfer = new InvoiceTransfer();
							invoiceTransfer.InvoiceK = invoice.K;
							invoiceTransfer.TransferK = transfer.K;
							invoiceTransfer.Amount = transfer.Amount;

							invoiceTransfer.Update();

							invoice.UpdateAndSetPaidStatus();
						}
					}
					invoice.PaidDateTime = invoice.CreatedDateTime;
					invoice.Update();
					if (count % 10 == 0)
						Cambro.Web.Helpers.WriteAlert("Done " + count + "/" + bs.Count, 2);
				}
				catch (Exception ex)
				{
					Cambro.Web.Helpers.WriteAlert("Exception " + count + "/" + bs.Count + " - " + ex.ToString(), 3);
				}

				bs.Kill(count);
			}
			Cambro.Web.Helpers.WriteAlert("Done!", 3);
			Cambro.Web.Helpers.WriteAlertFooter();
		}
Esempio n. 9
0
		static void appendTransferAndInvoiceTransfer(StringBuilder sb, Transfer t, InvoiceTransfer it)
		{
			sb.Append(SALES_RECEIPT_TRANSACTION_TYPE);
			sb.Append(DELIMITER);
			sb.Append(t.PromoterK);
			sb.Append(DELIMITER);
			sb.Append(t.Type.ToString());
			sb.Append(DELIMITER);
			sb.Append(t.Method.ToString());
			sb.Append(DELIMITER);
			sb.Append(t.DateTimeComplete.ToString("dd/MM/yy"));
			sb.Append(DELIMITER);
			sb.Append(t.Amount.ToString("0.00"));
			sb.Append(DELIMITER);
			sb.Append(TRANSFER_K_PREFIX);							// Prefix + K.ToString() <= 8 characters
			sb.Append(t.K.ToString("000000"));				        // Up to 6 digit K number. for K of 10^6 or greater, reduce the prefix size
			if (it != null)
			{
				sb.Append(DELIMITER);
				sb.Append(INVOICE_K_PREFIX);
				sb.Append(it.InvoiceK.ToString("000000"));
				sb.Append(DELIMITER);
				sb.Append(it.Amount.ToString("0.00"));
			}
			else
			{
				sb.Append(DELIMITER);
				sb.Append(DELIMITER);
			}
			sb.Append(NEWLINE);
		}
Esempio n. 10
0
        protected void InvoiceTransferGridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            this.InvoiceTransferGridView.EditIndex = -1;
            this.InvoiceTransferGridView.ShowFooter = true;

            if (InvoiceTransferDataHolderList.Count >= e.RowIndex)
            {
                InvoiceTransferDataHolder deleteInvoiceTransferDataHolder = InvoiceTransferDataHolderList[e.RowIndex];
                // Delete row from List
                InvoiceTransferDataHolderList.Remove(deleteInvoiceTransferDataHolder);
				if (!InvoiceTransferDataHolderDeleteList.Contains(deleteInvoiceTransferDataHolder))
				{
					bool contains = false;
					foreach (InvoiceTransferDataHolder itdh in InvoiceTransferDataHolderDeleteList)
					{
						if (itdh.TransferK == deleteInvoiceTransferDataHolder.TransferK)
						{
							contains = true;
							break;
						}
					}
					if (contains == false)
					{
						InvoiceTransferDataHolderDeleteList.Add(deleteInvoiceTransferDataHolder);
						if (CurrentInvoice.K > 0)
						{
							deleteInvoiceTransferDataHolder.State = DataHolderState.Deleted;
							deleteInvoiceTransferDataHolder.UpdateInsertDelete();
							if (Math.Round(deleteInvoiceTransferDataHolder.Amount, 2) != 0)
							{
								Transfer t = new Transfer(deleteInvoiceTransferDataHolder.TransferK);
								t.IsFullyApplied = false;
								t.Update();
								//if (t.Method == Transfer.Methods.TicketSales)
								//{
								//	Bobs.BankExport.GenerateBankExportForTicketFundsUsed(t, -1 * deleteInvoiceTransferDataHolder.Amount, CurrentInvoice);
								//}

								CurrentInvoice.AddNote("Transfer #" + t.K.ToString() + " was unapplied from " + (CurrentInvoice.Paid ? "paid" : "saved") + " invoice", Usr.Current.NickName);
								CurrentInvoice.UpdateAndSetPaidStatus();
								LoadScreenFromInvoice();
							}
							SetAddTransfersOptions();
						}
					}
				}
            }
            CalculateInvoiceItemVatAndTotals();
			ShowHideControls(CurrentInvoice.K > 0);
        }   
Esempio n. 11
0
		/// <summary>
		/// Recalculate all VAT and Totals
		/// </summary> 
        public void CalculateInvoiceItemVatAndTotals()
        {
            //double InvoiceVATRate = Invoice.VATRate((Invoice.VATCodes)Convert.ToInt32(this.VatCodeDropDownList.SelectedValue));
			decimal invoicePrice = 0;
			decimal invoiceVAT = 0;
			decimal invoiceTotal = 0;
			decimal salesUsrAmount = 0;

            //double InvoiceItemVATRate = 0;
            foreach (InvoiceItemDataHolder iidh in InvoiceItemDataHolderList)
            {
				decimal total = iidh.Total;
				//InvoiceItemVATRate = InvoiceVATRate <= InvoiceItem.VATRate(iidh.VatCode) ? InvoiceVATRate : InvoiceItem.VATRate(iidh.VatCode);
				iidh.InvoiceVatCode = (Invoice.VATCodes)Convert.ToInt32(this.VatCodeDropDownList.SelectedValue);
				iidh.SetTotal(total);
				//iidh.Price = Math.Round(iidh.Price, 2);
				//if (iidh.K > 0)
				//    iidh.Vat = Math.Round(iidh.Vat, 2);
				//else
				//    iidh.Vat = Math.Round(iidh.Price * InvoiceItemVATRate, 2);
				//iidh.Total = Math.Round(iidh.Price + iidh.Vat, 2);

                invoicePrice += iidh.Price;
                invoiceVAT += iidh.Vat;
                invoiceTotal += iidh.Total;

				if(iidh.DoesApplyToSalesUsrAmount)
					salesUsrAmount += iidh.Price;
            }
            this.PriceTextBox.Text = invoicePrice.ToString("c");
            this.VATTextBox.Text = invoiceVAT.ToString("c");
            this.TotalTextBox.Text = invoiceTotal.ToString("c");

			if (InvoiceK == 0)
			{
				this.SalesAmountTextBox.Text = salesUsrAmount.ToString("c");
			}

            //this.InvoiceItemsGridView.DataSource = this.InvoiceItemDataHolderList;
            //this.InvoiceItemsGridView.DataBind();

            decimal amountPaid = 0;
            DateTime lastTransferDate = DateTime.MinValue;

			foreach (InvoiceTransferDataHolder itdh in InvoiceTransferDataHolderList)
			{
				if (new Transfer(itdh.TransferK).Status.Equals(Transfer.StatusEnum.Success))
				{
					amountPaid += itdh.Amount;
					DateTime invoiceTransferCompletedDate = new Transfer(itdh.TransferK).DateTimeComplete;
					if (lastTransferDate <= invoiceTransferCompletedDate)
						lastTransferDate = invoiceTransferCompletedDate;
				}
			}

			foreach (InvoiceCreditDataHolder icdh in InvoiceCreditDataHolderList)
			{
				// Credit amounts will be negative
				amountPaid -= icdh.Amount;
				if (icdh.CreditK != 0)
				{
					amountPaid += new Invoice(icdh.CreditK).AmountPaid;
				}
				if (lastTransferDate <= icdh.CreatedDateTime)
					lastTransferDate = icdh.CreatedDateTime;
			}

			if (!CurrentInvoice.PaidDateTime.Equals(DateTime.MinValue))
				lastTransferDate = CurrentInvoice.PaidDateTime;

			if (Math.Round(invoiceTotal, 2) > Math.Round(amountPaid, 2) || lastTransferDate.Equals(DateTime.MinValue))
            {
                this.PaidCheckBox.Checked = false;
				this.SetPaidImage(false);
				this.PaidDateLabel.Visible = false;
            }
			else if (Math.Round(invoiceTotal, 2) == Math.Round(amountPaid, 2))
            {
				this.PaidCheckBox.Checked = true;
				this.SetPaidImage(true);
				this.PaidDateTextBox.Text = lastTransferDate.ToString("HH:mm dd/MM/yy");
				this.PaidDateLabel.Visible = true;
				ProcessingVal.IsValid = true;
            }
            else
            {
				this.PaidCheckBox.Checked = true;
				this.SetPaidImage(true);
				this.PaidDateTextBox.Text = lastTransferDate.ToString("HH:mm dd/MM/yy");
				this.PaidDateLabel.Visible = true;
				ProcessingVal.ErrorMessage = "Transfer totals (" + amountPaid.ToString("c") + ") are greater than the total invoice amount (" + invoiceTotal.ToString("c") + ").";
				ProcessingVal.IsValid = false;
            }

			this.AmountDueTextBox.Text = ((double)(invoiceTotal - amountPaid)).ToString("c");

            InvoiceAndSubItemsBindData();
		}
Esempio n. 12
0
		//REMOVED BY DAVEB 10/01
		//private static void RefundTicket(Usr actionUsr, Ticket ticket)
		//{
		//    RefundTicket(actionUsr, ticket, false);
		//}

		private static void RefundTicket(Usr actionUsr, Ticket ticket, bool refundIncludeBookingFee, bool areFundsAlreadyReleased)
        {
            try
            {
                if (ticket.IsAllowedToRefund(actionUsr, Math.Round(ticket.Price + (refundIncludeBookingFee ? ticket.BookingFee : 0), 2)))
                {
                    InvoiceDataHolder creditDH = ticket.Invoice.CreateCredit();
                    creditDH.ActionUsrK = actionUsr.K;
                    // Remove all invoice items, except that of tickets
                    for (int i = creditDH.InvoiceItemDataHolderList.Count - 1; i >= 0; i--)
                    {
                        // Remove only the ticket invoice item (and booking fee if refundIncludeBookingFee)
                        if (creditDH.InvoiceItemDataHolderList[i].BuyableObjectK != ticket.K || creditDH.InvoiceItemDataHolderList[i].BuyableObjectType != Model.Entities.ObjectType.Ticket
                            || (creditDH.InvoiceItemDataHolderList[i].Type != InvoiceItem.Types.EventTickets
                                && (creditDH.InvoiceItemDataHolderList[i].Type != InvoiceItem.Types.EventTicketsBookingFee || !refundIncludeBookingFee)))
                        {
                            creditDH.InvoiceItemDataHolderList.RemoveAt(i);
                        }
                    }

                    if (ticket.Invoice.AmountAllowedToCredit < Math.Abs(creditDH.Total))
                        throw new Exception("Cannot credit more than " + ticket.Invoice.AmountAllowedToCredit.ToString("c") + " for Invoice #" + ticket.Invoice.K.ToString());

					decimal refundAmountRemaining = Math.Abs(creditDH.Total);
                    SecPay secPay = new SecPay();

                    // Refund that amount from transfers
                    foreach (InvoiceTransfer invoiceTransfer in ticket.Invoice.SuccessfulInvoiceTransfers)
                    {
                        try
                        {
                            if (refundAmountRemaining <= 0)
                                break;

							decimal refundAmount = Math.Round(invoiceTransfer.Amount, 2) < Math.Round(refundAmountRemaining, 2) ? Math.Round(invoiceTransfer.Amount, 2) : Math.Round(refundAmountRemaining, 2);

                            // refund refundAmount from that transfer, the subtract that from refundAmountRemaining
                            Transfer transferToRefund = new Transfer(invoiceTransfer.TransferK);

                            secPay.MakeRefund(transferToRefund, Guid.NewGuid(), Usr.Current.K, refundAmount);
                            if (secPay.Transfer.Status == Transfer.StatusEnum.Success)
                            {
                                refundAmountRemaining = Math.Round(refundAmountRemaining - refundAmount, 2);
                                transferToRefund.UpdateAndResolveOverapplied();
                                Utilities.EmailTransfer(secPay.Transfer, true, false);
                            }
                            else
                                throw new Exception("SecPay refund #");// + secPay.Transfer.K.ToString() + " failed, by user: "******", for ticket #" + ticket.K.ToString());
                        }
                        catch (Exception ex)
                        {
                            Utilities.AdminEmailAlert("Exception in Ticket.RefundTicket(Ticket ticket)", "Exception in Ticket.RefundTicket(Ticket ticket)", ex, ticket);
                        }
                    }

                    if (Math.Round(refundAmountRemaining, 2) <= 0)
                    {
                        creditDH.DueDateTime = Time.Now;
                        Invoice credit = creditDH.UpdateInsertDelete();
                        // Get latest invoice from DB
                        ticket.Invoice = null;
                        ticket.Invoice.ApplyCreditToThisInvoice(credit);

                        if (!ticket.Invoice.Paid)
                            throw new Exception("Invoice #" + ticket.Invoice.K.ToString() + " was not refunded completely, please verify manually.");

                        ticket.Cancelled = true;
						ticket.CancelledBeforeFundsRelease = !areFundsAlreadyReleased;
						ticket.CancelledDateTime = Time.Now;
                        ticket.Update();
						if (ticket.BuyerUsr != null)
						{
							ticket.BuyerUsr.SetPrefsNextTicketFeedbackDate();
						}
                        Utilities.EmailTicket(ticket);
                    }
                }
            }
            catch (Exception ex)
            {
                Utilities.AdminEmailAlert("Exception in Ticket.RefundTicket(Ticket ticket)", "Exception in Ticket.RefundTicket(Ticket ticket)", ex, ticket);
                throw ex;
            }
        }
Esempio n. 13
0
        protected void SaveButton_Click(object sender, EventArgs e)
        {
			Page.Validate("");
			if (Page.IsValid)
			{
				// Validation
				if (this.OverrideDueDateCheckBox.Checked == true && !this.DueDateCal.ValidateNow())
				{
					this.DueDateCustomValidator.IsValid = false;
					return;
				}
				if (this.OverrideTaxDateCheckBox.Checked == true && !this.TaxDateCal.ValidateNow())
				{
					this.TaxDateCustomValidator.IsValid = false;
					return;
				}
				if (this.InvoiceItemsGridView.EditIndex >= 0)
				{
					this.NoEditCustomVal.ErrorMessage = "Invoice item must be saved.";
					this.NoEditCustomVal.IsValid = false;
					return;
				}
				else if (this.InvoiceTransferGridView.EditIndex >= 0)
				{
					this.NoEditCustomVal.ErrorMessage = "Transfer must be saved.";
					this.NoEditCustomVal.IsValid = false;
					return;
				}
				else if (this.InvoiceCreditGridView.EditIndex >= 0)
				{
					this.NoEditCustomVal.ErrorMessage = "Credit must be saved.";
					this.NoEditCustomVal.IsValid = false;
					return;
				}
				
				bool succeeded = false;
				bool previouslyPaid = CurrentInvoice.Paid;

				//DateTime prevTaxDateTime = CurrentInvoice.TaxDateTime;

				LoadInvoiceFromScreen();

				//if (CurrentInvoice.K > 0 && Utilities.GetStartOfDay(prevTaxDateTime) != Utilities.GetStartOfDay(CurrentInvoice.TaxDateTime))
				//{
				//    this.TaxDateCustomValidator.IsValid = false;
				//    return;
				//}

				try
				{
					if (!Invoice.DoesDuplicateGuidExistInDb((Guid)this.ViewState["DuplicateGuid"]) || CurrentInvoice.K > 0)
					{
						if (this.InvoiceItemDataHolderList.Count == 0)
							throw new Exception("Must have at least one invoice item!");
                        bool newInvoice = CurrentInvoice.K == 0;
						// if this is a new Invoice, then save first to get Invoice.K from DB
						if (this.InvoiceK == 0 || CurrentInvoice.K == 0)
						{
                            if (CurrentInvoice.Total < 0)
                                throw new Exception("Cannot have invoice of negative amount: " + CurrentInvoice.Total.ToString("c"));

							if (CurrentInvoice.Promoter != null)
							{
								decimal promoterCreditBalance = CurrentInvoice.Promoter.CreditLimit + CurrentInvoice.Promoter.GetBalance();

								if (promoterCreditBalance >= CurrentInvoice.Total)
								{
									CurrentInvoice.UpdatePromoterStatusAndSalesStatus();
									CurrentInvoice.Update();
								}
								else
								{
									throw new Exception("This promoter has insufficient credit balance.\nCurrent credit balance = " + promoterCreditBalance.ToString("c") + ".\nClick Create Transfer to add money to this promoter account");
								}
							}
							else if(CurrentInvoice.Usr != null)
							{
								decimal userCreditBalance = CurrentInvoice.Usr.GetBalance();

								if (userCreditBalance >= CurrentInvoice.Total)
								{
									CurrentInvoice.Update();
								}
								else
								{
									throw new Exception("This user has insufficient balance.\nCurrent balance = " + userCreditBalance.ToString("c") + ".\nClick Create Transfer to add money to this user account");
								}
							}
							else
							{
								throw new Exception("No account selected.");
							}
						}
						foreach (InvoiceItemDataHolder invoiceItemDataHolder in this.InvoiceItemDataHolderList)
						{
							if (CurrentInvoice.K > 0)
							{
								invoiceItemDataHolder.InvoiceK = CurrentInvoice.K;
								invoiceItemDataHolder.UpdateInsertDelete();
							}
						}
						foreach (InvoiceTransferDataHolder invoiceTransferDataHolder in this.InvoiceTransferDataHolderList)
						{
							if (CurrentInvoice.K > 0)
							{
								invoiceTransferDataHolder.InvoiceK = CurrentInvoice.K;
								invoiceTransferDataHolder.UpdateInsertDelete();
                                
                                if (newInvoice)
                                {
                                    Transfer transferApplied = new Transfer(invoiceTransferDataHolder.TransferK);
                                    //if (transferApplied.Method == Transfer.Methods.TicketSales)
                                    //{
                                    //    Bobs.BankExport.GenerateBankExportForTicketFundsUsed(transferApplied, invoiceTransferDataHolder.Amount, CurrentInvoice);
                                    //}
                                }
							}
						}
						foreach (InvoiceTransferDataHolder invoiceTransferDataHolderDelete in this.InvoiceTransferDataHolderDeleteList)
						{
							bool toBeDeleted = true;
							foreach (InvoiceTransferDataHolder invoiceTransferDataHolder in this.InvoiceTransferDataHolderList)
							{
								// Do not delete ones that are confirmed to be saved.  This resolves issues when saved items are marked for deletion, then added again.
								if (invoiceTransferDataHolder.TransferK == invoiceTransferDataHolderDelete.TransferK)
								{
									toBeDeleted = false;
									break;
								}
							}

							if (toBeDeleted == true)
							{
								invoiceTransferDataHolderDelete.State = DataHolderState.Deleted;
								invoiceTransferDataHolderDelete.UpdateInsertDelete();
							}
						}
                        CurrentInvoice.AssignBuyerType();
						CurrentInvoice.UpdateAndAutoApplySuccessfulTransfersWithAvailableMoney();						
						
						succeeded = true;
					}
					// Do not process if duplicate exists. User probably tried refreshing the page.
					else
					{
						throw new Exception("Duplicate invoice already exists in the database.");
					}					
				}

				catch (Exception ex)
				{
					// Display error message
					ProcessingVal.ErrorMessage = ex.Message;
					ProcessingVal.IsValid = false;
				}

				// Having Server.Transfer or Response.Redirect in Try{} throws an abort thread exception.
				if (succeeded == true)
				{
					// Send email to promoter and to DSI accounts
					bool invoiceCreated = false;
					if (InvoiceK == 0)
						invoiceCreated = true;

					// Only send out emails when invoice is created or when Paid status changes
					if(invoiceCreated || previouslyPaid != CurrentInvoice.Paid)
						Utilities.EmailInvoice(CurrentInvoice, invoiceCreated);

					string response = "<script type=\"text/javascript\">alert('Invoice #" + CurrentInvoice.K.ToString() + " saved successfully'); open('" + CurrentInvoice.UrlAdmin() + "?" + Cambro.Misc.Utility.GenRandomText(5) + "', '_self' );</script>";
					ViewState["DuplicateGuid"] = Guid.NewGuid();
					Response.Write(response);
					Response.End();
				}
			}
        }
Esempio n. 14
0
    	public Transfer CreateFundsReleaseTransfer()
		{
			Transfer releaseFundsTransfer = new Transfer();
			if (Usr.Current != null)
			{
				releaseFundsTransfer.ActionUsrK = Usr.Current.K;
			}
			releaseFundsTransfer.AddNote("Funds released from Event K=" + this.EventK, "System");
			releaseFundsTransfer.Amount = this.TotalFunds;
			releaseFundsTransfer.DateTimeCreated = DateTime.Now;
			releaseFundsTransfer.DateTimeComplete = DateTime.Now;
            //releaseFundsTransfer.DSIBankAccount = Transfer.DSIBankAccounts.Client;
			releaseFundsTransfer.DuplicateGuid = Guid.NewGuid();
			releaseFundsTransfer.Method = Transfer.Methods.TicketSales;
			releaseFundsTransfer.Company = Model.Entities.Transfer.CompanyEnum.DH;
			releaseFundsTransfer.PromoterK = this.PromoterK;
			releaseFundsTransfer.Status = Transfer.StatusEnum.Success;
			releaseFundsTransfer.Type = Transfer.TransferTypes.Payment;
			releaseFundsTransfer.UsrK = this.Promoter.PrimaryUsrK;

			return releaseFundsTransfer;
		}
		protected void Page_Load(object sender, EventArgs e)
		{
			string type = "";
			int k = 0;
			int pk = 0;

			if (ContainerPage.Url["type"].Exists)
				type = ContainerPage.Url["type"].Value;

			if (ContainerPage.Url["K"].Exists && ContainerPage.Url["K"].IsInt)
				k = Convert.ToInt32(ContainerPage.Url["K"].Value);

			if (ContainerPage.Url["PK"].Exists && ContainerPage.Url["PK"].IsInt)
				pk = Convert.ToInt32(ContainerPage.Url["PK"].Value);

			//Promoter CurrentPromoter = new Promoter(pk);

			Usr.KickUserIfNotLoggedIn();

			//if (!Usr.Current.IsPromoter && !Usr.Current.IsAdmin)
			//{
			//    throw new Exception("You must be a promoter to view this page");
			//}
			//if (CurrentPromoter != null)
			//{
			//    if (!Usr.Current.IsPromoterK(CurrentPromoter.K) && !Usr.Current.IsAdmin)
			//        throw new Exception("You can't view these details.");
			//}

			if (type.ToUpper() == "STATEMENT")
			{
				Promoter promoter = new Promoter(pk);

				if (!promoter.IsUsrAllowedAccess(Usr.Current))
					throw new Exception(Vars.CANT_VIEW_DETAILS);

				int month = DateTime.Now.Month;
				int year = DateTime.Now.Year;

				if (ContainerPage.Url["M"].Exists && ContainerPage.Url["M"].IsInt)
					month = Convert.ToInt32(ContainerPage.Url["M"].Value);
				if (ContainerPage.Url["Y"].Exists && ContainerPage.Url["Y"].IsInt)
					year = Convert.ToInt32(ContainerPage.Url["Y"].Value);

				Response.Write(promoter.GenerateMonthlyStatementStringBuilder(month, year, true).ToString());
			}
            else if(type.ToUpper().Equals("TICKETFUNDSINVOICE"))
            {
                TicketPromoterEvent tpe = new TicketPromoterEvent(pk, k);
                if (!tpe.IsUsrAllowedAccess(Usr.Current))
                    throw new Exception(Vars.CANT_VIEW_DETAILS);

                Response.Write(tpe.GenerateReportStringBuilder(true).ToString());
            }
			else
			{
				IBobReport bobReport;
				switch (type.ToUpper())
				{
					case "TRANSFER": bobReport = new Transfer(k); break;
					case "INVOICE": // goto credit
					case "CREDIT": bobReport = new Bobs.Invoice(k); break;
					case "TICKET": bobReport = new Ticket(k); break;
					case "TICKETFORPRINTING": bobReport = new TicketForPrinting(k); break;
					case "INSERTIONORDER": bobReport = new InsertionOrder(k); break;
					default: bobReport = null; break;
				}

				if (bobReport != null)
				{
					if (!bobReport.IsUsrAllowedAccess(Usr.Current))
						throw new Exception(Vars.CANT_VIEW_DETAILS);

					Response.Write(bobReport.GenerateReportStringBuilder(true).ToString());
				}
			}

		}
Esempio n. 16
0
		public Transfer SetReferenceNumber(Transfer transfer)
		{
			if (transfer.Method.Equals(Transfer.Methods.Card))
				transfer.CardNumberEnd = this.ReferenceNumber;
			else if (transfer.Method.Equals(Transfer.Methods.BankTransfer))
				transfer.BankTransferReference = this.ReferenceNumber;
			else if (transfer.Method.Equals(Transfer.Methods.Cheque))
				transfer.ChequeReferenceNumber = this.ReferenceNumber;

			return transfer;
		}
Esempio n. 17
0
		protected void DeleteCardLinkButton_Click(object sender, EventArgs eventArgs)
		{
			Transfer t = new Transfer(int.Parse(SavedCardDropDownList.SelectedValue));

			if (t.UsrK != Usr.Current.K)
				throw new Exception("Wrong user!");

			if (t.CardSaved)
			{
				t.CardSaved = false;
				t.Update();
				BindSavedCards();
			}
			ContainerPage.AnchorSkip(this.ClientID + "_PaymentAnchor");
		}
Esempio n. 18
0
        //public static void GenerateBankExportsForBookingFeesToDate()
        //{
        //    DateTime startDateRange = Utilities.CardnetDelay(GetDateOfLastNonTicketFundsBankExport()).AddDays(1);
        //    DateTime endDateRange = Utilities.CardnetDelay().AddDays(1);
            
        //    Query untransferedBookingFeesQuery = new Query(new And(new Q(InvoiceItem.Columns.Type, InvoiceItem.Types.EventTicketsBookingFee),
        //                                                           new Q(InvoiceItem.Columns.RevenueStartDate, QueryOperator.GreaterThanOrEqualTo, startDateRange),
        //                                                           new Q(InvoiceItem.Columns.RevenueStartDate, QueryOperator.LessThan, endDateRange)));
        //    untransferedBookingFeesQuery.ExtraSelectElements.Add("SumBookingFeeAmounts", "SUM([InvoiceItem].[Total])");
        //    untransferedBookingFeesQuery.ExtraSelectElements.Add("TheDate", "dateadd(day, 0, datediff(day, 0, [InvoiceItem].[RevenueStartDate]))");
        //    untransferedBookingFeesQuery.GroupBy = new GroupBy("dateadd(day, 0, datediff(day, 0, [InvoiceItem].[RevenueStartDate]))");
        //    untransferedBookingFeesQuery.Columns = new ColumnSet();

        //    InvoiceItemSet untransferedBookingFeeItems = new InvoiceItemSet(untransferedBookingFeesQuery);
        //    foreach (InvoiceItem ii in untransferedBookingFeeItems)
        //    {
        //        GenerateBankExportForBookingFees(ii);
        //    }
        //}


		#region I this this sets up the transfers between the current and client accounts. I've disabled it.

		//public static void GenerateBankExportsForAllNonTicketFundsToDate()
		//{
		//    DateTime startDateRange = Utilities.CardnetDelay(GetDateOfLastNonTicketFundsBankExport()).AddDays(1);
		//    DateTime endDateRange = Utilities.CardnetDelay().AddDays(1);

		//    GenerateBankExportsForNonTicketFunds(startDateRange, endDateRange, true);
		//    GenerateBankExportsForNonTicketFunds(startDateRange, endDateRange, false);            
		//}

		//private static void GenerateBankExportsForNonTicketFunds(DateTime startDateRange, DateTime endDateRange, bool positiveCashFlow)
		//{
		//    startDateRange = Utilities.GetStartOfDay(startDateRange);
		//    endDateRange = Utilities.GetStartOfDay(endDateRange);

		//    Query nonTicketCardMoneyQuery = new Query(new And(new Q(Transfer.Columns.Method, Transfer.Methods.Card),
		//                                                      new Q(Transfer.Columns.Status, Transfer.StatusEnum.Success),
		//                                                      new Q(Transfer.Columns.DateTimeComplete, QueryOperator.GreaterThanOrEqualTo, startDateRange),
		//                                                      new Q(Transfer.Columns.DateTimeComplete, QueryOperator.LessThan, endDateRange)));
            
		//    nonTicketCardMoneyQuery.ExtraSelectElements.Add("SumAmounts", "SUM([Transfer].[Amount])");
		//    nonTicketCardMoneyQuery.ExtraSelectElements.Add("TheDate", "dateadd(day, 0, datediff(day, 0, [Transfer].[DateTimeComplete]))");
		//    nonTicketCardMoneyQuery.OrderBy = new OrderBy("dateadd(day, 0, datediff(day, 0, [Transfer].[DateTimeComplete]))");
		//    nonTicketCardMoneyQuery.GroupBy = new GroupBy("dateadd(day, 0, datediff(day, 0, [Transfer].[DateTimeComplete]))");
		//    nonTicketCardMoneyQuery.Columns = new ColumnSet();


		//    Query ticketCardMoneyQuery = new Query(new And(new Q(InvoiceItem.Columns.Type, InvoiceItem.Types.EventTickets),
		//                                                   new Q(InvoiceItem.Columns.RevenueStartDate, QueryOperator.GreaterThanOrEqualTo, startDateRange),
		//                                                   new Q(InvoiceItem.Columns.RevenueStartDate, QueryOperator.LessThan, endDateRange)));
		//    ticketCardMoneyQuery.ExtraSelectElements.Add("SumAmounts", "SUM([InvoiceItem].[Total])");
		//    ticketCardMoneyQuery.ExtraSelectElements.Add("TheDate", "dateadd(day, 0, datediff(day, 0, [InvoiceItem].[RevenueStartDate]))");
		//    ticketCardMoneyQuery.OrderBy = new OrderBy("dateadd(day, 0, datediff(day, 0, [InvoiceItem].[RevenueStartDate]))");
		//    ticketCardMoneyQuery.GroupBy = new GroupBy("dateadd(day, 0, datediff(day, 0, [InvoiceItem].[RevenueStartDate]))");
		//    ticketCardMoneyQuery.Columns = new ColumnSet();

		//    if(positiveCashFlow)
		//    {
		//        nonTicketCardMoneyQuery.QueryCondition = new And(nonTicketCardMoneyQuery.QueryCondition,
		//                                                         new Q(Transfer.Columns.Amount, QueryOperator.GreaterThan, 0));
		//        ticketCardMoneyQuery.QueryCondition = new And(ticketCardMoneyQuery.QueryCondition,
		//                                                      new Q(InvoiceItem.Columns.Total, QueryOperator.GreaterThan, 0));
		//    }
		//    else
		//    {
		//        nonTicketCardMoneyQuery.QueryCondition = new And(nonTicketCardMoneyQuery.QueryCondition,
		//                                                         new Q(Transfer.Columns.Amount, QueryOperator.LessThan, 0));
		//        ticketCardMoneyQuery.QueryCondition = new And(ticketCardMoneyQuery.QueryCondition,
		//                                                      new Q(InvoiceItem.Columns.Total, QueryOperator.LessThan, 0));
		//    }

		//    TransferSet nonTicketCardMoneyTransfers = new TransferSet(nonTicketCardMoneyQuery);
		//    InvoiceItemSet ticketCardMoneyItems = new InvoiceItemSet(ticketCardMoneyQuery);

		//    Hashtable hash = new Hashtable();
		//    foreach (Transfer t in nonTicketCardMoneyTransfers)
		//    {
		//        hash.Add(Convert.ToDateTime(t.ExtraSelectElements["TheDate"]).ToString("dd-MM-yyyy"), t.ExtraSelectElements["SumAmounts"]);
		//    }

		//    foreach (InvoiceItem ii in ticketCardMoneyItems)
		//    {
		//        if (hash.ContainsKey(Convert.ToDateTime(ii.ExtraSelectElements["TheDate"]).ToString("dd-MM-yyyy")))
		//            hash[Convert.ToDateTime(ii.ExtraSelectElements["TheDate"]).ToString("dd-MM-yyyy")] = ((double)(Convert.ToDouble(hash[Convert.ToDateTime(ii.ExtraSelectElements["TheDate"]).ToString("dd-MM-yyyy")]) - Convert.ToDouble(ii.ExtraSelectElements["SumAmounts"]))).ToString();
		//        else
		//            hash.Add(Convert.ToDateTime(ii.ExtraSelectElements["TheDate"]).ToString("dd-MM-yyyy"), ((double)(-1 * Convert.ToDouble(ii.ExtraSelectElements["SumAmounts"]))).ToString());
		//    }

		//    while (startDateRange < endDateRange)
		//    {
		//        if (hash.ContainsKey(startDateRange.ToString("dd-MM-yyyy")))
		//        {
		//            BankExport be = new BankExport();
		//            be.Amount = Math.Round(Convert.ToDecimal(hash[startDateRange.ToString("dd-MM-yyyy")]), 2);
		//            if (be.Amount != 0)
		//            {
		//                be.ReferenceDateTime = startDateRange;
		//                StringBuilder sb = new StringBuilder();
		//                sb.Append("Client account to current account: ");
		//                sb.Append(be.Amount.ToString("c"));
		//                sb.Append(" from ");
		//                sb.Append(be.ReferenceDateTime.ToString("ddd dd/MM/yyyy"));
		//                be.Details = sb.ToString();

		//                be.AddedDateTime = DateTime.Now;
		//                if (be.Amount > 0)
		//                {
		//                    be.BankAccountNumber = Vars.DSI_BANK_ACCOUNT_NUMBER;
		//                    be.BankAccountSortCode = Vars.DSI_BANK_SORT_CODE;
		//                    be.BankName = Vars.DSI_BANK_NAME;
		//                }
		//                else
		//                {
		//                    be.BankAccountNumber = Vars.DSI_CLIENT_BANK_ACCOUNT_NUMBER;
		//                    be.BankAccountSortCode = Vars.DSI_CLIENT_BANK_SORT_CODE;
		//                    be.BankName = Vars.DSI_CLIENT_BANK_NAME;
		//                }
		//                be.Amount = Math.Abs(be.Amount);

		//                be.Status = Statuses.Added;

		//                be.Type = Types.InternalTransferNonTicketFunds;

		//                be.Update();

		//                be.Validate();
		//            }
		//        }
		//        startDateRange = startDateRange.AddDays(1);
		//    }
		//}
		

		//private static void GenerateBankExportForBookingFees(InvoiceItem invoiceItem)
		//{
		//    BankExport be = new BankExport();

		//    be.Amount = Math.Round(Convert.ToDecimal(invoiceItem.ExtraSelectElements["SumBookingFeeAmounts"]), 2);
		//    if (be.Amount != 0)
		//    {
		//        be.ReferenceDateTime = (DateTime)invoiceItem.ExtraSelectElements["TheDate"];
		//        StringBuilder sb = new StringBuilder();
		//        sb.Append("Ticket booking fees of ");
		//        sb.Append(be.Amount.ToString("c"));
		//        sb.Append(" from ");
		//        sb.Append(be.ReferenceDateTime.ToString("ddd dd/MM/yyyy"));
		//        be.Details = sb.ToString();

		//        be.AddedDateTime = DateTime.Now;
		//        if (be.Amount > 0)
		//        {
		//            be.BankAccountNumber = Vars.DSI_BANK_ACCOUNT_NUMBER;
		//            be.BankAccountSortCode = Vars.DSI_BANK_SORT_CODE;
		//            be.BankName = Vars.DSI_BANK_NAME;
		//        }
		//        else
		//        {
		//            be.BankAccountNumber = Vars.DSI_CLIENT_BANK_ACCOUNT_NUMBER;
		//            be.BankAccountSortCode = Vars.DSI_CLIENT_BANK_SORT_CODE;
		//            be.BankName = Vars.DSI_CLIENT_BANK_NAME;
		//        }
		//        be.Amount = Math.Abs(be.Amount);

		//        be.Status = Statuses.Added;
 
		//        be.Type = Types.InternalTransferNonTicketFunds;

		//        be.Update();

		//        be.Validate();
		//    }
		//}
		#endregion

		public static void GenerateBankExportForRefundTransfer(Transfer refundTransfer)
        {
            BankExport be = new BankExport();
            be.AddedDateTime = DateTime.Now;
            be.Amount = Math.Abs(refundTransfer.Amount);
            be.BankName = Cambro.Misc.Utility.Snip(refundTransfer.BankName, 35);
            be.BankAccountNumber = refundTransfer.BankAccountNumber;
            be.BankAccountSortCode = refundTransfer.BankSortCode;
            be.PromoterK = refundTransfer.PromoterK;
            be.Status = BankExport.Statuses.Added;

			if (refundTransfer.TransferRefunded != null && refundTransfer.TransferRefunded.Method == Transfer.Methods.TicketSales)
            {
				//if (refundTransfer.BankName.ToUpper().Contains(Vars.DSI_BANK_NAME.ToUpper()))
				//    be.Type = BankExport.Types.InternalTransferTicketFundsToPromoter;
				//else
                    be.Type = BankExport.Types.ExternalBACSTicketFundsToPromoter;
            }
            else
            {
				//if (refundTransfer.BankName.ToUpper().Contains(Vars.DSI_BANK_NAME.ToUpper()))
				//    be.Type = BankExport.Types.InternalTransferRefundToPromoter;
				//else
                    be.Type = Types.ExternalBACSRefundToPromoter;
            }
            be.TransferK = refundTransfer.K;

            StringBuilder sb = new StringBuilder();
            sb.Append("Promoter ");
            sb.Append(refundTransfer.Promoter.Name);
            sb.Append(" requested a refund of ");
            sb.Append(refundTransfer.Amount.ToString("c"));
            sb.Append(".");
            sb.Append(refundTransfer.Promoter.AsHTML());
            sb.Append(refundTransfer.AsHTML());
            be.Details = sb.ToString();

            be.Update();

            be.Validate();
            refundTransfer.BankTransferReference = be.PaymentRef;
            refundTransfer.Update();
        }
Esempio n. 19
0
		private bool ProcessSuccessfulSecPayTransfer(SecPay secPay)
		{
			bool result = true;
            
			if (this.Invoices.Count != secPay.Invoices.Count)
			{
				if (secPay.Invoices.Count == 0)
				{
					result = false;
					ProcessingVal.ErrorMessage = RETRY_INVOICE_ERROR_MSG;
				}
				else
					ProcessingVal.ErrorMessage = CALL_ADMIN_INVOICE_ERROR_MSG;

				string exceptionMessage = "Payment control invoices = " + this.Invoices.Count.ToString() + ". SecPay Invoices = " + secPay.Invoices.Count.ToString() + ". Invoices attempting process:<br>";

				ProcessException(new Exception(exceptionMessage));
			}
			else
				HandleAndVerifyInvoicesProcessed(secPay.Invoices);

			if (secPay.Transfer.IsFullyApplied == false)
			{
				Transfer secPayTransfer = new Transfer(secPay.Transfer.K);
				if (secPay.Transfer.IsFullyApplied == false)
				{
					string msg = "SecPay Transfer (K=" + secPayTransfer.K.ToString() + ") was not fully applied.";
					Utilities.AdminEmailAlert(msg , msg, new DsiUserFriendlyException(msg), secPayTransfer);
				}
			}
			if (result)
			{
				if (PaymentDone != null)
					PaymentDone(this, new PaymentDoneEventArgs(secPay.Invoices, this.CampaignCredits, false, ""));
			}
			if (GetFullAddress)
			{
				Usr usr = Usr.Current;

			}
			return result;
		}
Esempio n. 20
0
		public static void GenerateBankExportForTicketFundsUsed(Transfer ticketFundsTransfer, decimal amount, Invoice invoiceAppliedTo)
        {            
			//BankExport be = new BankExport();
            
			//be.Amount = Math.Round(amount, 2);
			//if (be.Amount != 0)
			//{
			//    be.AddedDateTime = DateTime.Now;
                
			//    be.BankAccountNumber = Vars.DSI_BANK_ACCOUNT_NUMBER;
			//    be.BankAccountSortCode = Vars.DSI_BANK_SORT_CODE;
			//    be.BankName = Vars.DSI_BANK_NAME;
                
			//    be.Amount = Math.Abs(be.Amount);

			//    be.PromoterK = ticketFundsTransfer.PromoterK;
			//    be.TransferK = ticketFundsTransfer.K;

			//    be.Status = Statuses.Added;
			//    be.Type = Types.InternalTransferTicketFundsUsed;

			//    StringBuilder sb = new StringBuilder();
			//    sb.Append("Promoter ");
			//    sb.Append(ticketFundsTransfer.Promoter.Name);
			//    sb.Append(" used ticket funds transfer #");
			//    sb.Append(ticketFundsTransfer.K.ToString());
			//    sb.Append(" and applied ");
			//    sb.Append(amount.ToString("c"));
			//    sb.Append(" to invoice #");
			//    sb.Append(invoiceAppliedTo.K.ToString());
			//    //sb.Append(ticketFundsTransfer.AmountRemaining().ToString("c"));
			//    //sb.Append(" remaining.<br>Invoice is ");
			//    //if(!invoiceAppliedTo.Paid)
			//    //  sb.Append("not");
			//    //sb.Append(" fully paid.<br><br>");
			//    sb.Append(ticketFundsTransfer.Promoter.AsHTML());
			//    if (ticketFundsTransfer.TicketPromoterEvent != null && ticketFundsTransfer.TicketPromoterEvent.Event != null)
			//    {
			//        sb.Append(ticketFundsTransfer.TicketPromoterEvent.Event.AsHTML());
			//    }
			//    sb.Append(ticketFundsTransfer.AsHTML());
			//    be.Details = sb.ToString();

			//    be.Update();

			//    be.Validate();
			//    ticketFundsTransfer.BankTransferReference = be.PaymentRef;
			//    ticketFundsTransfer.Update();
			//}
        }
Esempio n. 21
0
		// Recalculate all VAT and Totals
		public void CalculateCreditItemVatAndTotals()
		{
			//double creditVATRate = Invoice.VATRate((Invoice.VATCodes)Convert.ToInt32(this.VATCodeNumberHiddenTextBox.Text));
			decimal creditPrice = 0;
			decimal creditVAT = 0;
			decimal creditTotal = 0;
			decimal salesUsrAmount = 0;

			//double creditItemVATRate = 0;
			foreach (InvoiceItemDataHolder iidh in CreditItemDataHolderList)
			{
				var total = iidh.Total;
				//creditItemVATRate = creditVATRate <= InvoiceItem.VATRate(iidh.VatCode) ? creditVATRate : InvoiceItem.VATRate(iidh.VatCode);
				iidh.InvoiceVatCode = (Invoice.VATCodes)Convert.ToInt32(this.VATCodeNumberHiddenTextBox.Text);
				iidh.SetTotal(total);

				//iidh.Price = Math.Round(iidh.Price, 2);
				//if (iidh.K > 0)
				//    iidh.Vat = Math.Round(iidh.Vat, 2);
				//else
				//    iidh.Vat = Math.Round(iidh.Price * creditItemVATRate, 2);
				//iidh.Total = Math.Round(iidh.Price + iidh.Vat, 2);

				creditPrice += iidh.Price;
				creditVAT += iidh.Vat;
				creditTotal += iidh.Total;

				if (iidh.DoesApplyToSalesUsrAmount)
					salesUsrAmount += iidh.Price;
			}
			this.PriceTextBox.Text = creditPrice.ToString("c");
			this.VATTextBox.Text = creditVAT.ToString("c");
			this.TotalTextBox.Text = creditTotal.ToString("c");

			if (CreditK == 0)
			{
				this.SalesAmountTextBox.Text = salesUsrAmount.ToString("c");
			}

			decimal amountPaid = 0;
			DateTime lastTransferDate = DateTime.MinValue;

			foreach (InvoiceTransferDataHolder itdh in CreditTransferDataHolderList)
			{
				amountPaid += itdh.Amount;
				DateTime creditTransferCreatedDate = new Transfer(itdh.TransferK).DateTimeCreated;
				if (lastTransferDate <= creditTransferCreatedDate)
					lastTransferDate = creditTransferCreatedDate;
			}

			if (Math.Round(creditTotal,2) > Math.Round(amountPaid,2) || lastTransferDate.Equals(DateTime.MinValue))
			{
				this.PaidCheckBox.Checked = false;
				this.SetPaidImage(false);
			}
			else if (Math.Round(creditTotal, 2).Equals(Math.Round(amountPaid, 2)))
			{
				this.PaidCheckBox.Checked = true;
				this.SetPaidImage(true);
				this.PaidDateTextBox.Text = lastTransferDate.ToShortDateString();
			}

			CreditAndSubItemsBindData();
		}
Esempio n. 22
0
		public void MakePayment(List<InvoiceDataHolder> invoices, decimal amount, Usr usr, int promoterK, int actionUsrK, string cardFullName, string cardAddressStreet, string cardAddressArea, string cardAddressTown, string cardAddressCounty, int cardAddressCountryK, string cardAddressPostCode, string cardAddressCountry, string cardNumber, DateTime cardExpiryDate, string cardCV2, Transfer.FraudCheckEnum fraudCheckEnum, bool saveCard, Guid duplicateGuid)
		{
			MakePayment(invoices, amount, usr, promoterK, actionUsrK, cardFullName, cardAddressStreet, cardAddressArea, cardAddressTown, cardAddressCounty, cardAddressCountryK, cardAddressPostCode, cardAddressCountry, cardNumber, cardExpiryDate, cardCV2, fraudCheckEnum, saveCard, duplicateGuid, DateTime.MinValue, "");
		}
Esempio n. 23
0
		private static void AddAppliedInvoices(Mailer mailer, Transfer transfer)
		{
			Query invoiceQuery = new Query(new Q(InvoiceTransfer.Columns.TransferK, transfer.K));
			invoiceQuery.TableElement = new Join(InvoiceTransfer.Columns.InvoiceK, Invoice.Columns.K);
			invoiceQuery.OrderBy = new OrderBy(Invoice.Columns.K, OrderBy.OrderDirection.Ascending);
			InvoiceSet invoices = new InvoiceSet(invoiceQuery);
			if (invoices.Count > 0)
			{
				mailer.Body += "<p>Applied to the following:</p>";
				AddInvoicesToEmail(mailer, invoices);
			}
		}
Esempio n. 24
0
		private static void AddSuccessfulPaymentToEmail(Mailer mailer, Transfer transfer)
		{
			if (transfer.Status.Equals(Transfer.StatusEnum.Success) && transfer.Type.Equals(Transfer.TransferTypes.Payment))
			{
				mailer.Attachments.Add(new System.Net.Mail.Attachment(Utilities.GenerateReportMemoryStream(false, transfer), "DontStayIn " + transfer.TypeToString + " #" + transfer.K.ToString() + ".doc", "application/word"));
				if (transfer.Promoter != null)
				{
                    mailer.Body += @"<p><a href=""[LOGIN(" + transfer.UrlReport() + "\")]>Successful " + transfer.TypeToString.ToLower() + " for " + Utilities.MoneyToHTML(Math.Abs(transfer.Amount))
								+ "</a> has been processed on your " + transfer.Promoter.LinkEmail() + " promoter account.</p>";
				}
				else if (transfer.Usr != null)
				{
                    mailer.Body += "<p>Successful " + transfer.TypeToString.ToLower() + " for " + Utilities.MoneyToHTML(Math.Abs(transfer.Amount)) + " has been processed on your " + transfer.Usr.LinkEmail() + " user account.</p>";
				}
				AddAppliedInvoices(mailer, transfer);
			}
		}
Esempio n. 25
0
		public static void EmailTransfer(Transfer transfer, string emailSubject, bool transferCreated, bool transferStatusChanged)
		{
			try
			{
				Mailer mailer = new Mailer();

				//mailer.Attachments.Add(new System.Net.Mail.Attachment(transfer.GenerateReportMemoryStream(false), "DontStayIn " + transfer.Type.ToString() + " #" + transfer.K.ToString() + ".html", "html/plain"));
				mailer.Subject = emailSubject;

				mailer.Body = "<h2>" + emailSubject + "</h2>";
				if (transfer.Promoter != null)
				{
					mailer.Body += transfer.Promoter.LinkEmailFull;
				}
				if (transfer.Usr != null)
				{
					mailer.Body += transfer.Usr.LinkEmailFull;
				}

				AddTransferToEmail(mailer, transfer);

				if (transfer.Promoter != null)
				{
					mailer.Body += @"<br><p><a href=""[LOGIN(" + transfer.Promoter.UrlApp("invoices") + "\")]>Click here to view all " + transfer.Promoter.Name + " invoices</a></p>";
					mailer.RedirectUrl = transfer.Promoter.UrlApp("invoices");
				}

				// Who does it go to??? All go to accounts. Newly successful transfers go to payments & promoter.adminusrs

				// Send email to each user in the AdminUsrs for the Promoter account		
				if (!Vars.DevEnv && transfer.Promoter != null && ((transferStatusChanged || transferCreated) && transfer.Status.Equals(Transfer.StatusEnum.Success) ||
									(transferCreated && transfer.Status.Equals(Transfer.StatusEnum.Pending) && transfer.Type.Equals(Transfer.TransferTypes.Refund))))
				{
					try
					{
						mailer.TemplateType = Mailer.TemplateTypes.AnotherSiteUser;

						foreach (Usr usr in transfer.Promoter.AdminUsrs)
						{
							mailer.UsrRecipient = usr;
							mailer.Send();
						}
						if (transfer.Usr != null && !transfer.Usr.IsPromoterK(transfer.PromoterK))
						{
							mailer.UsrRecipient = transfer.Usr;
							mailer.Send();
						}

						if (transfer.Promoter.AccountsEmail != null && transfer.Promoter.AccountsEmail.Length > 0)
						{
							try
							{
								string body = "<p>" + emailSubject + "</p><p>Account: " + transfer.Promoter.Name + "</p>";

								Utilities.EmailToNonUser(transfer.Promoter.AccountsEmail, mailer.Subject, body, mailer.Attachments.ToArray());
							}
							catch (Exception ex)
							{
								string additionalDetails = "Occurred in Utilities.EmailTransfer(): Promoter.AccountsEmail = " + transfer.Promoter.AccountsEmail;
								EmailException(ex, additionalDetails, transfer);
							}
						}
					}
					catch (Exception ex)
					{
						string additionalDetails = "Occurred in Utilities.EmailTransfer(): Promoter.AccountsEmail = " + transfer.Promoter.AccountsEmail;
						EmailException(ex, additionalDetails, transfer);
					}
				}

				// Change for internal use
				mailer.UsrRecipient = null;
				mailer.TemplateType = Mailer.TemplateTypes.AdminNote;

				mailer.Subject = "";
				if (Vars.DevEnv)
					mailer.Subject = "TEST - ";
				mailer.Subject += "DontStayIn ";

				if (transfer.DateTimeCreated.Equals(transfer.DateTimeComplete) && transfer.Method.Equals(Transfer.Methods.Card))
					mailer.Subject += "WEB ";
                mailer.Subject += transfer.TypeToString + " #" + transfer.K.ToString() + ", " + Math.Abs(transfer.Amount).ToString("c");
				if (transfer.Usr != null)
					mailer.Subject += " from " + transfer.Usr.Name;
				if (transfer.Promoter != null)
					mailer.Subject += " (" + transfer.Promoter.Name + ")";

				if (!Vars.DevEnv && transfer.Status.Equals(Transfer.StatusEnum.Success) && (transferStatusChanged || transferCreated))
				{
					// Only send to [email protected] when a payment has been just been made successful
					mailer.To = "*****@*****.**";
					mailer.Send();
				}

                // now send to our accounts email address
                mailer.To = "*****@*****.**";

				if (transferCreated == true)
					mailer.Subject += " created";
				else
					mailer.Subject += " updated";
				mailer.Subject += ", Status: " + transfer.Status.ToString();

				mailer.Send();
			}
			catch (Exception ex)
			{
				EmailException(ex, "Occurred in Utilities.EmailTransfer()", transfer);
			}
		}
Esempio n. 26
0
        public static Transfer RefundViaBACS(Transfer refundTransfer)
        {
            refundTransfer.Method = Methods.BankTransfer;
            refundTransfer.GetBankDetailsFromPromoterAccount();
            
            try
            {
                if (refundTransfer.BankSortCode.Trim().Length > 0 && refundTransfer.BankAccountNumber.Trim().Length > 0)
                {
                    refundTransfer.Update();

                    BankExport.GenerateBankExportForRefundTransfer(refundTransfer);                    
                }
                else
                    throw new DsiUserFriendlyException("Insufficient bank details to refund via BACS." + refundTransfer.AsHTML());
            }
            catch (Exception ex)
            {
				Utilities.AdminEmailAlert("Unable to refund via BACS because of insufficient bank details.", "BACS refund failed", ex, refundTransfer);
				throw ex;
            }

            return refundTransfer;
        }
Esempio n. 27
0
		private static void AddPendingPaymentToEmail(Mailer mailer, Transfer transfer)
		{
			if (transfer.Status.Equals(Transfer.StatusEnum.Pending) && transfer.Type.Equals(Transfer.TransferTypes.Payment))
			{
				mailer.Attachments.Add(new System.Net.Mail.Attachment(Utilities.GenerateReportMemoryStream(false, transfer), "DontStayIn " + transfer.TypeToString + " #" + transfer.K.ToString() + ".doc", "application/word"));
				if (transfer.Promoter != null)
				{
					mailer.Body += @"<p><a href=""[LOGIN(" + transfer.UrlReport() + "\")]>" + transfer.Status.ToString() + " " + transfer.TypeToString.ToLower() + "</a> for "
                                + Utilities.MoneyToHTML(Math.Abs(transfer.Amount)) + " has been setup on your " + transfer.Promoter.LinkEmail() + " promoter account.</p>";

					if (transfer.Method.Equals(Transfer.Methods.Cheque))
						mailer.Body += "<p>Please make your cheque payable to:<br>Development Hell Limited<br>Greenhill House, Thorpe Road, Peterborough, PE3 6RU</p><p>Add reference #" + transfer.K.ToString() + " to the back of the cheque</p>";
					else if (transfer.Method.Equals(Transfer.Methods.BankTransfer))
						mailer.Body += "<p>Please make BACS transfer details:<br>Bank name: Barclays Bank PLC<br>Branch Name: Commercial Bank Basingstoke<br>Sort Code: 20-37-63<br>Account #: 00478377<br>(IBAN for international transfers: GB04 BARC 2037 6300 4783 77)</p><p>Add BACS reference #" + transfer.K.ToString() + "</p>";
					else
						mailer.Body += "<p>Please make payment to:<br>Development Hell Limited<br>Greenhill House, Thorpe Road, Peterborough, PE3 6RU</p>";
				}
				AddAppliedInvoices(mailer, transfer);
			}
		}
Esempio n. 28
0
        public TransferDataHolder(Transfer transfer)
        {
            this.k = transfer.K;
            this.amount = Math.Round(transfer.Amount,2);
            this.status = transfer.Status;
            this.dateTimeComplete = transfer.DateTimeComplete;
            this.method = transfer.Method;
			if (transfer.Method.Equals(Transfer.Methods.Card))
				this.referenceNumber = transfer.CardNumberEnd;
			else if (transfer.Method.Equals(Transfer.Methods.BankTransfer))
				this.referenceNumber = transfer.BankTransferReference;
			else if (transfer.Method.Equals(Transfer.Methods.Cheque))
			    this.referenceNumber = transfer.ChequeReferenceNumber;
			else
				this.referenceNumber = "";
        }
Esempio n. 29
0
		private static void AddRefundToEmail(Mailer mailer, Transfer transfer)
		{
			if ((transfer.Status.Equals(Transfer.StatusEnum.Pending) || transfer.Status.Equals(Transfer.StatusEnum.Success)) && transfer.Type.Equals(Transfer.TransferTypes.Refund))
			{
				mailer.Attachments.Add(new System.Net.Mail.Attachment(Utilities.GenerateReportMemoryStream(false, transfer), "DontStayIn " + transfer.TypeToString + " #" + transfer.K.ToString() + ".doc", "application/word"));

				if (transfer.Promoter != null)
                    mailer.Body += @"<p><a href=""[LOGIN(" + transfer.UrlReport() + "\")]>" + transfer.TypeToString + " for " + Utilities.MoneyToHTML(Math.Abs(transfer.Amount)) + "</a> has been ";
				else
                    mailer.Body += "<p>" + transfer.TypeToString + " for " + Utilities.MoneyToHTML(Math.Abs(transfer.Amount)) + " has been ";

				if (transfer.Status.Equals(Transfer.StatusEnum.Pending))
					mailer.Body += "setup";
				else if (transfer.Status.Equals(Transfer.StatusEnum.Success))
					mailer.Body += "successfully processed";

				if (transfer.Promoter != null)
				{
					mailer.Body += " on your " + transfer.Promoter.LinkEmail() + " promoter account.</p>";
				}
				else
				{
					mailer.Body += ".</p>";
				}

				if (transfer.TransferRefundedK != 0)
				{
					Transfer transferRefunded = new Transfer(transfer.TransferRefundedK);
					mailer.Attachments.Add(new System.Net.Mail.Attachment(Utilities.GenerateReportMemoryStream(false, transferRefunded), "DontStayIn " + transferRefunded.TypeToString + " #" + transferRefunded.K.ToString() + ".doc", "application/word"));
					if (transfer.Promoter != null)
						mailer.Body += @"<ul type=""circle""><li><a href=""[LOGIN(" + transferRefunded.UrlReport() + "\")]>Refunding transfer #" + transferRefunded.K.ToString() + "</a></li></ul>";
					else
						mailer.Body += @"<ul type=""circle""><li>Refunding " + transferRefunded.TypeToString.ToLower() + " #" + transferRefunded.K.ToString() + "</li></ul>";
				}
				AddAppliedInvoices(mailer, transfer);
			}
		}
Esempio n. 30
0
			public PromoterAccountItem(Transfer transfer)
			{
				this.K = transfer.K;
                this.Outstanding = transfer.AmountRemaining().ToString("c");
				if (transfer.Type.Equals(Transfer.TransferTypes.Payment))
				{
					this.OriginalType = Type.Payment;
                    if (transfer.Method == Transfer.Methods.TicketSales)
                        this.OriginalType = Type.TicketSales;
				}
				else
				{
					this.OriginalType = Type.Refund;
                    if (transfer.TransferRefunded != null && transfer.TransferRefunded.Method == Transfer.Methods.TicketSales)
                        this.OriginalType = Type.TicketSalesRelease;
                    // We dont show outstanding money for refunds that having been successfully processed
                    if(transfer.Status == Transfer.StatusEnum.Success)
                        this.Outstanding = (0).ToString("c");
				}				
                
                this.Date = transfer.DateTimeComplete > DateTime.MinValue ? transfer.DateTimeComplete : transfer.DateTimeCreated;
				this.Total = Math.Abs(transfer.Amount).ToString("c");
				this.Status = transfer.Status.ToString();
				this.ViewLink = Utilities.LinkNewWindow(transfer.UrlReport(), "View");
                if(this.OriginalType == Type.TicketSales && transfer.TicketPromoterEvent != null)
                    this.ViewLink = Utilities.LinkNewWindow(transfer.TicketPromoterEvent.UrlReport(), "View");
				this.EditLink = "<small>" + Utilities.LinkNewWindow(transfer.UrlAdmin(), "[Edit]") + "</small>";
			}