Example #1
0
		public void UpdateAndResolveOverapplied()
		{
			decimal amountRemaining = AmountRemaining();
			if (Math.Round(amountRemaining,2) < 0)
			{
				Query invoiceTransfersAppliedQuery = new Query(new And(new Q(InvoiceTransfer.Columns.TransferK, this.K),
															           new Q(Invoice.Columns.Type, Invoice.Types.Invoice)));
				invoiceTransfersAppliedQuery.TableElement = new Join(InvoiceTransfer.Columns.InvoiceK, Invoice.Columns.K);
				invoiceTransfersAppliedQuery.OrderBy = new OrderBy(Invoice.Columns.DueDateTime, OrderBy.OrderDirection.Ascending);
				InvoiceTransferSet invoiceTransferSet = new InvoiceTransferSet(invoiceTransfersAppliedQuery);

				string transferNote = "Transfer overapplied by " + ((double)(-1 * amountRemaining)).ToString("c") + ".";

				decimal amountToUnApply = 0;
				for (int i = invoiceTransferSet.Count - 1; i >= 0; i--)
				{
					if (Math.Round(amountRemaining,2) < 0)
					{
						Invoice invoice = new Invoice(invoiceTransferSet[i].InvoiceK);
						if (invoiceTransferSet[i].Amount <= -1 * amountRemaining)
						{
							amountToUnApply = invoiceTransferSet[i].Amount;
							invoiceTransferSet[i].Delete();
						}
						else
						{
							amountToUnApply = -1 * amountRemaining;
							invoiceTransferSet[i].Amount -= amountToUnApply;
							invoiceTransferSet[i].Amount = Math.Round(invoiceTransferSet[i].Amount, 2);
							invoiceTransferSet[i].Update();
						}
						transferNote += string.Format("\nAutomatically unapplied {0} from invoice #{1}.", amountToUnApply.ToString("c"), invoice.K);
						amountRemaining += amountToUnApply;
                        //if (this.Method == Methods.TicketSales)
                        //    BankExport.GenerateBankExportForTicketFundsUsed(this, -1 * amountToUnApply, new Invoice(invoiceTransferSet[i].InvoiceK));

						invoice.AddNote(string.Format("Transfer #{0} was overapplied. {1} has been unapplied from transfer #{0}.", this.K, amountToUnApply.ToString("c")), "System");
						invoice.UpdateAndSetPaidStatus();
					}
				}
				this.AddNote(transferNote, "System");

				if (Math.Round(amountRemaining, 2) == 0)
					this.IsFullyApplied = true;
				else
					this.IsFullyApplied = false;
				this.Update();
			}
		}