private void AddDocuments(VatReport report) { VatReportItems items = report.Items; foreach (VatReportItem item in items) { FinancialTransaction tx = item.Transaction; Documents documents = Documents.ForObject(tx.Dependency ?? tx); // tx.Dependency if not null, else tx int pageCounter = 0; int pagesTotal = documents.Count; foreach (Document doc in documents) { pageCounter++; VatReportDocuments.Add(new RepeatedDocument { BaseId = item.FinancialTransactionId.ToString(CultureInfo.InvariantCulture), DocId = doc.Identity, Title = tx.Description + " " + Document.GetLocalizedPageCounter(pageCounter, pagesTotal) }); } } }
protected void Page_Load(object sender, EventArgs e) { // Get auth data this._authenticationData = GetAuthenticationDataAndCulture(); string reportIdParameter = Request.QueryString["ReportId"]; string reportKeyParameter = Request.QueryString["ReportKey"]; if (!string.IsNullOrEmpty(reportIdParameter)) { this._reportId = Int32.Parse(reportIdParameter); // will throw if non-numeric - don't matter for app } else if (!string.IsNullOrEmpty(reportKeyParameter)) { this._reportId = SwarmDb.GetDatabaseForReading().GetVatReportIdFromGuid(reportKeyParameter.ToLowerInvariant().Trim()); } else { throw new ArgumentException("No Report Requested"); } VatReport report = VatReport.FromIdentity(_reportId); // TODO: AUTH CHECK Response.ContentType = "application/json"; Int64 turnoverCentsTotal = 0; Int64 inboundCentsTotal = 0; Int64 outboundCentsTotal = 0; StringBuilder response = new StringBuilder(16384); VatReportItems items = report.Items; items.Sort(VatItemSorterByDate); List <string> lines = new List <string>(); string hasDoxString = "<img data-txid='{0}' class='LocalViewDox action-icon' />" + "<img data-docid='{1}' data-docname=\\\"{2}\\\" class='LocalDownloadDox action-icon' />"; foreach (VatReportItem item in items) { FinancialTransaction transaction = item.Transaction; bool include = false; string element = string.Format("\"id\":\"{0}\",\"txid\":\"{1}\",\"datetime\":\"{2:MMM dd}\",\"description\":\"{3}\"", transaction.Identity, transaction.OrganizationSequenceId, transaction.DateTime, JsonSanitize(transaction.Description)); if (item.TurnoverCents != 0) { element += String.Format(",\"turnover\":\"{0:N2}\"", item.TurnoverCents / 100.0); turnoverCentsTotal += item.TurnoverCents; include = true; } if (item.VatInboundCents != 0) { element += String.Format(",\"inbound\":\"{0:N2}\"", item.VatInboundCents / 100.0); inboundCentsTotal += item.VatInboundCents; include = true; } if (item.VatOutboundCents != 0) { element += String.Format(",\"outbound\":\"{0:N2}\"", item.VatOutboundCents / 100.0); outboundCentsTotal += item.VatOutboundCents; include = true; } Documents documents = Documents.ForObject(transaction.Dependency ?? transaction); if (documents.Count > 0) { element += String.Format(",\"dox\":\"" + hasDoxString + "\"", transaction.Identity, documents[0].Identity, CurrentOrganization.Name + " - " + report.Description + " - " + Resources.Global.Financial_TransactionIdShort + transaction.OrganizationSequenceId.ToString("N0")); } if (include) { lines.Add("{" + element + "}"); } } if (lines.Count == 0) // add empty report line { lines.Add("{" + String.Format("\"id\":\"0\",\"description\":\"{0}\"", JsonSanitize(Resources.Pages.Ledgers.ViewVatReports_EmptyReport)) + "}"); } Response.Write("{\"rows\":[" + String.Join(",", lines.ToArray()) + "]"); Response.Write(",\"footer\":[{"); // needs to be on separate line to not trigger a String.Format warning Response.Write(String.Format("\"id\":\"0\",\"description\":\"{0}\",\"turnover\":\"{1:N2}\",\"inbound\":\"{2:N2}\",\"outbound\":\"{3:N2}\"", JsonSanitize(Resources.Pages.Ledgers.ViewVatReports_Footer_Total.ToUpperInvariant()), turnoverCentsTotal / 100.0, inboundCentsTotal / 100.0, outboundCentsTotal / 100.0)); Response.Write("}]}"); // needs to be separate to not trigger String.Format warning Response.End(); }