public StringBuilder GenerateReportStringBuilder(bool linksEnabled)
        {
            StringBuilder sb = new StringBuilder();
            string lineReturn = Vars.HTML_LINE_RETURN;

            if (this.FundsReleased && this.Promoter != null && this.Event != null && this.FundsTransfer != null)
            {
                this.CalculateTotalFundsAndVat();

                sb.Append(@"<form id='form1' runat='server'><div style='font-family:Verdana;'><table width='100%' border='0' cellspacing='0' cellpadding='0' height='100%'><tr><td valign='top'>
						<table width='100%'>");

                sb.Append(@"<tr>
                            <td valign='bottom'>" + Vars.DSI_POSTAL_DETAILS_HTML + "</td>");
                sb.Append(@"    <td align='right'>");
                sb.Append(@"    <table>
                                <tr>
                                    <td><b>");
                sb.Append(lineReturn);
                if (linksEnabled)
                    sb.Append(this.Promoter.Link());
                else
                    sb.Append(this.Promoter.Name);
                sb.Append("</b>");
                sb.Append(lineReturn);
                sb.Append(lineReturn);
                sb.Append(this.Promoter.AddressHtml);
                sb.Append(lineReturn);
                sb.Append(lineReturn);
                sb.Append("VAT #: ");
                if (this.Promoter.VatStatus == Promoter.VatStatusEnum.Registered)
                    sb.Append(this.Promoter.VatNumber);
                else if (this.Promoter.VatStatus == Promoter.VatStatusEnum.NotRegistered)
                    sb.Append("Not registered");
                else
//					sb.Append("UNKNOWN");
                    throw new DsiUserFriendlyException("VAT Status is unknown.");
                sb.Append(lineReturn);
                sb.Append(@"                <b>INVOICE</b>
                                    </td>
                                </tr>");
                sb.Append(@"        <tr>
                                    <td>Invoice&nbsp;date:</td>");
                sb.Append("             <td>" + this.FundsTransfer.DateTimeCreated.ToString("dd/MM/yyyy") + @"</td>
                                </tr>");
                sb.Append(@"        <tr>
                                    <td>Invoice&nbsp;number:</td>");
                sb.Append("             <td>" + this.FundsTransferK.ToString() + @"</td>
                                </tr>");
                sb.Append(@"        <tr>
                                    <td>Your&nbsp;account&nbsp;number:</td>");
                sb.Append("             <td>" + this.PromoterK.ToString() + @"</td>
                                </tr>
                            </table>");
                sb.Append(@" </td>
                        </tr>
                       </table>");
                sb.Append(lineReturn);
                sb.Append(lineReturn);
                sb.Append(lineReturn);

                sb.Append(lineReturn);
                sb.Append("<b>EVENT: ");
                if (linksEnabled)
                    sb.Append(this.Event.LinkFriendlyName);
                else
                    sb.Append(this.Event.FriendlyName);
                sb.Append("</b>");
                sb.Append(lineReturn);
                sb.Append(lineReturn);
                sb.Append(lineReturn);
                sb.Append(@"<table width='100%' cellspacing='0' cellpadding='3'  class='BorderBlack Top'>
							<tr>
								<td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='85'><b>Ticket&nbsp;run&nbsp;#</b></td>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='365'><b>Details</b></td>
								<td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='40'><b>Sold</b></td>
								<td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='60'><b>Price</b></td>
								<td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='55'><b>VAT</b></td>
								<td style='vertical-align:bottom;' class='BorderBlack Bottom Left Right' width='65'><b>Total</b></td>
							</tr>");

				decimal totalPrice = 0;
				decimal totalVat = 0;
				decimal totalFunds = 0;
                int totalQuantity = 0;

                foreach (TicketRun tr in this.TicketRuns)
                {
                    sb.Append(@"<tr>
								<td class='BorderBlack Left'>" + tr.K.ToString() + @"</td>");
					sb.Append(@"    <td class='BorderBlack Left'>");
                    if (linksEnabled)
                        sb.Append(tr.LinkPriceBrandName);
                    else
                        sb.Append(tr.PriceBrandName);
                    sb.Append(@"    </td>");

					decimal price = 0;
					decimal vat = 0;
					decimal total = 0;
                    int quantity = 0;

                    foreach (Ticket ticket in tr.Tickets)
                    {
                        if (!ticket.CancelledBeforeFundsRelease)
                        {
                            quantity += ticket.Quantity;
                            price += ticket.InvoiceItem.Price;
                            vat += ticket.InvoiceItem.Vat;
                            total += ticket.InvoiceItem.Total;
                        }
                    }
                    if (quantity != tr.SoldTickets - tr.CancelledTicketBeforeFundReleaseQuantity)
                        throw new DsiUserFriendlyException("Error in calculating number of tickets sold. Please contact an administrator.");

					sb.Append(@"    <td class='BorderBlack Left' align='right'>" + quantity.ToString() + @"</td>");
					sb.Append(@"    <td class='BorderBlack Left' align='right'>" + Utilities.MoneyToHTML(price) + @"</td>");
					sb.Append(@"    <td class='BorderBlack Left' align='right'>" + Utilities.MoneyToHTML(vat) + @"</td>");
					sb.Append(@"    <td class='BorderBlack Left Right' align='right'>" + Utilities.MoneyToHTML(total) + @"</td>
                            </tr>");

                    totalQuantity += quantity;
                    totalPrice += price;
                    totalVat += vat;
                    totalFunds += total;
                }

				if (Math.Round(totalPrice, 2) != Math.Round(this.TotalFundsReleased - this.TotalVatReleased, 2) || Math.Round(totalVat, 2) != Math.Round(this.TotalVatReleased, 2) || Math.Round(totalFunds, 2) != Math.Round(this.TotalFundsReleased, 2) || totalQuantity != this.SoldTickets - this.TotalCancelledTicketsBeforeRelease)
                    throw new DsiUserFriendlyException("Error in calculating tickets funds. Please contact an administrator.");

				sb.Append(@"<tr style='border-top-width: 2px;' class='BorderBlack'>
								<td style='border-top-width: 2px;' class='BorderBlack' colspan='2'>&nbsp;</td>");
                sb.Append(@"    <td style='border-top-width: 2px; border-bottom-width: 2px;' class='BorderBlack Left' align='right'>" + totalQuantity.ToString() + @"</td>");
				sb.Append(@"    <td style='border-top-width: 2px; border-bottom-width: 2px;' class='BorderBlack Left' align='right'>" + Utilities.MoneyToHTML(this.TotalFundsReleased - this.TotalVatReleased) + @"</td>");
				sb.Append(@"    <td style='border-top-width: 2px; border-bottom-width: 2px;' class='BorderBlack Left' align='right'>" + Utilities.MoneyToHTML(this.TotalVatReleased) + @"</td>");
				sb.Append(@"    <td style='border-top-width: 2px; border-bottom-width: 2px;' class='BorderBlack Left Right' align='right'>" + Utilities.MoneyToHTML(this.TotalFundsReleased) + @"</td>
                            </tr>");

                if (this.Promoter.VatStatus == Promoter.VatStatusEnum.Registered)
                    sb.Append("<tr><td colspan='6' align='center'>THE VAT SHOWN IS YOUR OUTPUT TAX DUE TO HM REVENUE & CUSTOMS</td></tr>");
                        
                sb.Append("</table>");

				decimal appliedAmount = 0;
                if (this.FundsTransfer.InvoiceTransfers.Count > 0)
                {
                    sb.Append(lineReturn);
                    sb.Append(lineReturn);
                    sb.Append(lineReturn);

                    sb.Append(@"<table width='100%' cellspacing='0' cellpadding='3' class='BorderBlack Top Bottom Right'>
                            <tr>
								<td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='305'><b>Items&nbsp;Applied&nbsp;To</b></td>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='65'><b>Tax&nbsp;Date</b></td>
								<td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='150'><b>Total Invoice Amount</b></td>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='150'><b>Amount Applied To Invoice</b></td>
                            </tr>");

                    foreach (InvoiceTransfer invoiceTransfer in this.FundsTransfer.InvoiceTransfers)
                    {
                        Invoice invoice = new Invoice(invoiceTransfer.InvoiceK);
                        sb.Append(@"<tr>
                                <td class='BorderBlack Left'>");
                        if (linksEnabled)
                        {
                            sb.Append(invoice.Link());
                        }
                        else
                            sb.Append(invoice.TypeAndK);

                        // Replacing CreatedDateTime with TaxDateTime, as per Gee's request for OASIS v1.5
                        sb.Append(@"</td>
                                <td class='BorderBlack Left'>" + invoice.TaxDateTime.ToString("dd/MM/yy") + @"</td>
                                <td class='BorderBlack Left' align='right'>" + Utilities.MoneyToHTML(invoice.Total) + @"</td>
                                <td class='BorderBlack Left' align='right'>" + Utilities.MoneyToHTML(invoiceTransfer.Amount) + @"</td>
                            </tr>");
                        appliedAmount += Math.Abs(invoiceTransfer.Amount);
                    }

                    sb.Append(@"</table>");
                }

				decimal refundedAmount = 0;
                if (this.FundsTransfer.RefundTransfers.Count > 0)
                {
                    sb.Append(lineReturn);
                    sb.Append(lineReturn);
                    sb.Append(lineReturn);

					sb.Append(@"<table width='100%' cellspacing='0' cellpadding='3' class='BorderBlack Top Bottom Right'>
                        <tr>
							<td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='250'><b>" + this.FundsTransfer.RefundTransfers[0].TypeToString);

                    sb.Append(@"</b></td>
                            <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='85'><b>Method</b></td>
                            <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='160'><b>Method&nbsp;Ref#</b></td>
                            <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='90'><b>Status</b></td>
                            <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' align='left' width='85'><b>Amount</b></td>
                        </tr>");

                    foreach (Transfer refundTransfer in this.FundsTransfer.RefundTransfers)
                    {
                        sb.Append(@"<tr>
                            <td class='BorderBlack Left'>");
                        if (linksEnabled)
                            sb.Append(refundTransfer.Link());
                        else
                            sb.Append(refundTransfer.TypeAndK);

                        sb.Append(@"</td>
                            <td class='BorderBlack Left'>" + Utilities.CamelCaseToString(refundTransfer.Method.ToString()) + @"</td>" +
							   "<td class='BorderBlack Left'>");
                        sb.Append(refundTransfer.ReferenceNumberToHtml());
                        sb.Append(@"</td>
								<td class='BorderBlack Left'>" + refundTransfer.Status.ToString()
                                    + @"</td>
								<td class='BorderBlack Left' align='right'>" + Utilities.MoneyToHTML(refundTransfer.Amount) + @"</td></tr>");
                        refundedAmount += Math.Abs(refundTransfer.Amount);
                    }

                    sb.Append(@"</table><br>");
                }

                // TicketPromoterEvent Summary
                sb.Append(@"<br><table width='250'>
							<tr>
								<td colspan=2><b>Summary</b></td>
							</tr>
							<tr>
								<td width='135'>Ticket&nbsp;Sales&nbsp;Total:</td>
								<td width='115' align='right'>" + Utilities.MoneyToHTML(totalFunds) + @"</td>
							</tr>
							<tr>
								<td width='135'>Payment&nbsp;Total:</td>
								<td width='115' align='right'>" + Utilities.MoneyToHTML(appliedAmount + refundedAmount) + @"</td>
							</tr>
							<tr>
								<td width='135'><b>Outstanding:</b></td>                                
								<td width='115' align='right'><b>" + Utilities.MoneyToHTML(totalFunds - appliedAmount - refundedAmount) + @"</b></td>
							</tr></table>");

                sb.Append("</td></tr>");

                //                sb.Append(@"<tr><td valign='bottom'><hr></td></tr>");

                sb.Append(@"</table></div></form>");
            }

            return sb;
        }
Example #2
0
		public StringBuilder GenerateReportStringBuilder(bool linksEnabled)
        {
            StringBuilder sb = new StringBuilder();

			sb.Append(@"<form id='form1' runat='server'><div style='font-family:Verdana;'><table width='100%' border='0' cellspacing='0' cellpadding='0' height='100%'><tr><td valign='top'>
                        <table width='100%'>");
			sb.Append(Utilities.GenerateHTMLHeaderRowString(this.Type.Equals(TransferTypes.Payment) ? "RECEIPT" : "REMITTANCE&nbsp;ADVICE"));
			sb.Append(@"<tr>
                                <td align='left' valign='top' style='padding-left:48px;'>");
            if (this.Promoter != null)
            {
                if (this.Promoter.AccountsName.Length > 0)
                {
                    sb.Append(this.Promoter.AccountsName);
                    sb.Append("<br>");
                }
                else if (this.Usr != null && this.Usr.FullName.Length > 0 && this.Usr.IsPromoter && this.Usr.IsPromoterK(this.K))
                {
                    sb.Append(this.Usr.FullName);
                    sb.Append("<br>");
                }
                else if (this.Promoter.PrimaryUsr != null && this.Promoter.PrimaryUsr.FullName.Length > 0)
                {
                    sb.Append(this.Promoter.PrimaryUsr.FullName);
                    sb.Append("<br>");
                }

                if (this.Promoter.Name.Length > 0)
                {
                    sb.Append(this.Promoter.Name);
                    sb.Append("<br>");
                }
                sb.Append(this.Promoter.AddressHtml);
            }
            else if (this.Usr != null)
            {
                if (this.Usr.FullName.Length > 0)
                {
                    sb.Append(this.Usr.FullName);
                    sb.Append("<br>");
                }
                sb.Append(this.Usr.AddressHtml());
            }

			sb.Append(@"</td><td width='350'></td><td valign='top' width='100'>Transfer&nbsp;No.<br><br>Acc&nbsp;No.<br><br>Date</td>
							<td align='right' valign='top' width='125'>");

			sb.Append("TRN");
			sb.Append(this.K.ToString());
			sb.Append("<br><br>");
			if (this.Promoter != null)
				sb.Append(this.PromoterK.ToString());
			else if (this.Usr != null)
				sb.Append(this.UsrK.ToString());
			else
				sb.Append("&nbsp;");
			sb.Append("<br><br>");
			sb.Append(this.DateTimeCreated.ToString("dd/MM/yy"));
			sb.Append("</td></tr>");

			//if (this.DateTimeComplete != null && this.DateTimeComplete > DateTime.MinValue)
			//{
			//    sb.Append(@"<br><br><b>Date Completed</b><br>" + this.DateTimeComplete.ToShortDateString());
			//}

            sb.Append(@"</table><br><br>
                        <table width='100%' cellspacing='0' cellpadding='3' class='BorderBlack Top Bottom Right'>
                            <tr>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='250'><b>Transfer</b></td>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='85'><b>Method</b></td>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='160'><b>Method&nbsp;Ref#</b></td>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='90'><b>Status</b></td>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' align='left' width='85'><b>Amount</b></td>
                            </tr>");

			sb.Append(@"<tr><td class='BorderBlack Left'>" + this.TypeToString + @"</td>" +
						   "<td class='BorderBlack Left'>" + Utilities.CamelCaseToString(this.Method.ToString()).Replace(" ", "&nbsp;") + @"</td>
						   <td class='BorderBlack Left'>");
			sb.Append(this.ReferenceNumberToHtml());
			sb.Append(@"</td>
						 	 <td class='BorderBlack Left'>" + this.Status.ToString() + @"</td>
						     <td class='BorderBlack Left' align='right'>" + Utilities.MoneyToHTML(this.Amount) + @"</td></tr></table><br><br>");

            
            if (InvoiceTransfers.Count > 0)
			{	// Rename "Date" to "Tax Date", as per Dave's request 7/2/07
				sb.Append(@"<table width='100%' cellspacing='0' cellpadding='3' class='BorderBlack Top Bottom Right'>
                            <tr>
								<td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='305'><b>Items&nbsp;Applied&nbsp;To</b></td>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='65'><b>Tax&nbsp;Date</b></td>
								<td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='150'><b>Total Invoice Amount</b></td>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='150'><b>Amount Applied To Invoice</b></td>
                            </tr>");

                foreach (InvoiceTransfer invoiceTransfer in InvoiceTransfers)
                {
                    Invoice invoice = new Invoice(invoiceTransfer.InvoiceK);
					sb.Append(@"<tr>
                                <td class='BorderBlack Left'>");
					if (linksEnabled)
					{
						sb.Append(invoice.Link());
					}
					else
						sb.Append(invoice.TypeAndK);

					// Replacing CreatedDateTime with TaxDateTime, as per Gee's request for OASIS v1.5
					sb.Append(@"</td>
                                <td class='BorderBlack Left'>" + invoice.TaxDateTime.ToString("dd/MM/yy") + @"</td>
                                <td class='BorderBlack Left' align='right'>" + Utilities.MoneyToHTML(invoice.Total) + @"</td>
                                <td class='BorderBlack Left' align='right'>" + Utilities.MoneyToHTML(invoiceTransfer.Amount) + @"</td>
                            </tr>");
                }

                sb.Append(@"</table><br>");
            }

			Query refundTransferQuery = new Query();
			if(this.Type.Equals(TransferTypes.Payment))
				refundTransferQuery.QueryCondition = new And(new Q(Transfer.Columns.TransferRefundedK, this.K),
															 new Or(new Q(Transfer.Columns.Status, Transfer.StatusEnum.Pending),
																	new Q(Transfer.Columns.Status, Transfer.StatusEnum.Success)));
			else
				refundTransferQuery.QueryCondition = new And(new Q(Transfer.Columns.K, this.TransferRefundedK),
															 new Or(new Q(Transfer.Columns.Status, Transfer.StatusEnum.Pending),
																	new Q(Transfer.Columns.Status, Transfer.StatusEnum.Success)));

			TransferSet refundTransferSet = new TransferSet(refundTransferQuery);

			if (refundTransferSet.Count > 0)
			{
				sb.Append(@"<br><table width='100%' cellspacing='0' cellpadding='3' class='BorderBlack Top Bottom Right'>
                            <tr>
								<td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='250'><b>");

                if (this.Type.Equals(TransferTypes.Payment))
                {
                    if (this.Method == Methods.TicketSales)
                        sb.Append(Utilities.CamelCaseToString(Methods.TicketSales.ToString()) + " Release");
                    else
                        sb.Append(TransferTypes.Refund.ToString());
                }
                else if (this.Type.Equals(TransferTypes.Refund))
                    sb.Append(TransferTypes.Payment.ToString());

				sb.Append(@"</b></td>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='85'><b>Method</b></td>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='160'><b>Method&nbsp;Ref#</b></td>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' width='90'><b>Status</b></td>
                                <td style='vertical-align:bottom;' class='BorderBlack Bottom Left' align='left' width='85'><b>Amount</b></td>
                            </tr>");

				foreach (Transfer refundTransfer in refundTransferSet)
				{
					sb.Append(@"<tr>
                                <td class='BorderBlack Left'>");
                    if (linksEnabled)
                    {
                        if (refundTransfer.TicketPromoterEvent != null)
                            sb.Append(Utilities.Link(refundTransfer.TicketPromoterEvent.UrlReport(), refundTransfer.TypeAndK));
                        else
                            sb.Append(refundTransfer.Link());
                    }
                    else
                        sb.Append(refundTransfer.TypeAndK);

					sb.Append(@"</td>
                                <td class='BorderBlack Left'>" + Utilities.CamelCaseToString(refundTransfer.Method.ToString()) + @"</td>" +
						   "<td class='BorderBlack Left'>");
					sb.Append(refundTransfer.ReferenceNumberToHtml());
					sb.Append(@"</td>
									<td class='BorderBlack Left'>" + refundTransfer.Status.ToString() 
								+ @"</td>
									<td class='BorderBlack Left' align='right'>" + Utilities.MoneyToHTML(refundTransfer.Amount) + @"</td></tr>");
				}

				sb.Append(@"</table><br>");
			}

			// DSI Registration Footer
			sb.Append(Utilities.GenerateHTMLFooterRowString());

			sb.Append(@"</table></div></form>");

            return sb;
        }