Example #1
0
        public async static Task <MemoryStream> CreateInvoiceStream(Translate translate, Invoice invoice, InvoiceDataApi invoiceData, string organizationLogo, string organizationName, string organizationAddress)
        {
            var styles = new List <KeyValuePair <string, string> >();

            styles.AddRange(GenericCssStyles.GetDefaultStyles());
            styles.AddRange(GenericCssStyles.GetSortingtimeLogoStyles());
            styles.AddRange(GetInvoiceHtmlStyles());

            return(await CreatePdfInvoiceHtml(translate, invoice, invoiceData, organizationLogo, organizationName, organizationAddress).ToHtmlStreamAddStyle(styles));
        }
Example #2
0
        private static IEnumerable <string> CreatePdfInvoiceHtml(Translate translate, Invoice invoice, InvoiceDataApi invoiceData, string organizationLogo, string organizationName, string organizationAddress)
        {
            foreach (var style in GenericCssStyles.GetDefaultInlineStyles())
            {
                yield return(style);
            }

            yield return("<html class='html'>");

            yield return("<body class='body'>");

            yield return("<div class='vertical-logo'>");

            yield return(translate.Get("INVOICE.POWERED_BY") + " <span class='logo-sorting'>Sorting</span><span class='logo-time'>time</span>");

            yield return("</div>");

            yield return("<div class='container'>");

            yield return("<div class='body-content'>");

            yield return("<div class='row'>");

            yield return("    <div class='col-md-3'>");

            yield return("        <div>");

            yield return("            <div class='invoice-logo'>" + organizationLogo != null ? "<img src='" + organizationLogo + "' />" : "" + "</div>");

            yield return("        </div>");

            yield return("    </div>");

            yield return("    <div class='col-md-6'>");

            yield return("        <div>");

            yield return("            <div class='invoice-title'>" + invoiceData.InvoiceTitle + "</div>");

            yield return("        </div>");

            yield return("    </div>");

            yield return("    <div class='col-md-3'>");

            yield return("        <div>");

            yield return("            <div class='organisation-name'>" + organizationName + "</div>");

            yield return("        </div>");

            yield return("        <div class='default-margin'>");

            yield return("            <div class='organisation-address'>" + organizationAddress?.ToHtml() + "</div>");

            yield return("        </div>");

            yield return("    </div>");

            yield return("</div>");


            yield return("<div class='row'>");

            yield return("    <div class='col-md-3'>");

            yield return("        <div class='large-margin'>");

            yield return("            <div class='invoice-customer'>" + invoiceData.InvoiceCustomer?.ToHtml() + "</div>");

            yield return("        </div>");

            yield return("    </div>");

            yield return("    <div class='col-md-offset-5-col-md-4'>");

            if (invoiceData.Vat && !string.IsNullOrWhiteSpace(invoiceData.VatNumber))
            {
                yield return("      <div class='inner-row'>");

                yield return("          <div class='col-md-5'>");

                yield return("              <div>");

                yield return("                  <div class='control-label'>" + translate.Get("INVOICE.VAT_NUMBER") + ":</div>");

                yield return("              </div>");

                yield return("          </div>");

                yield return("          <div class='col-md-7'>");

                yield return("              <div>");

                yield return("                  <div class='vat-number'>" + invoiceData.VatNumber + "</div>");

                yield return("              </div>");

                yield return("          </div>");

                yield return("      </div>");
            }

            if (!string.IsNullOrWhiteSpace(invoiceData.PaymentDetails))
            {
                yield return("        <div class='large-margin'>");

                yield return("            <div class='payment-details'>" + invoiceData.PaymentDetails?.ToHtml() + "</div>");

                yield return("        </div>");
            }

            yield return("    </div>");

            yield return("</div>");

            yield return("<div class='row'>");

            yield return("    <div class='col-md-12'>");

            yield return("        <hr class='hr' />");

            yield return("    </div>");

            yield return("</div>");


            yield return("<div class='row'>");

            yield return("    <div class='col-md-5'>");

            yield return("      <div class='inner-row'>");

            yield return("          <div class='col-md-5'>");

            yield return("              <div>");

            yield return("                  <div class='control-label'>" + (!invoice.CreditNote ? translate.Get("INVOICE.INVOICE_NUMBER") : translate.Get("INVOICE.CREDIT_NUMBER")) + ":</div>");

            yield return("              </div>");

            yield return("          </div>");

            yield return("          <div class='col-md-7'>");

            yield return("              <div>");

            yield return("                  <div class='invoice-number'>" + invoice.Number + "</div>");

            yield return("              </div>");

            yield return("          </div>");

            yield return("      </div>");

            yield return("      <div class='inner-row'>");

            yield return("          <div class='col-md-5'>");

            yield return("              <div>");

            yield return("                  <div class='control-label'>" + (!invoice.CreditNote ? translate.Get("INVOICE.INVOICE_DATE") : translate.Get("INVOICE.CREDIT_DATE")) + ":</div>");

            yield return("              </div>");

            yield return("          </div>");

            yield return("          <div class='col-md-7'>");

            yield return("              <div>");

            yield return("                  <div class='invoice-date'>" + invoice.InvoiceDate.ToShortDateString() + "</div>");

            yield return("              </div>");

            yield return("          </div>");

            yield return("      </div>");

            if (!string.IsNullOrWhiteSpace(invoiceData.InvoiceReference))
            {
                yield return("      <div class='inner-row'>");

                yield return("          <div class='col-md-5'>");

                yield return("              <div>");

                yield return("                  <div class='control-label'>" + translate.Get("INVOICE.REFERENCE") + ":</div>");

                yield return("              </div>");

                yield return("          </div>");

                yield return("          <div class='col-md-7'>");

                yield return("              <div>");

                yield return("                  <div class='invoice-reference'>" + invoiceData.InvoiceReference + "</div>");

                yield return("              </div>");

                yield return("          </div>");

                yield return("      </div>");
            }
            yield return("    </div>");

            if (!string.IsNullOrWhiteSpace(invoiceData.InvoicePaymentTerms))
            {
                yield return("    <div class='col-md-offset-1-col-md-6'>");

                yield return("        <div class='large-margin'>");

                yield return("            <div class='payment-terms'>" + invoiceData.InvoicePaymentTerms?.ToHtml() + "</div>");

                yield return("        </div>");

                yield return("    </div>");
            }
            yield return("</div>");

            if (!string.IsNullOrWhiteSpace(invoiceData.InvoiceText))
            {
                yield return("<div class='row'>");

                yield return("    <div class='col-md-12'>");

                yield return("        <div class='large-margin'>");

                yield return("            <div class='invoice-text'>" + invoiceData.InvoiceText?.ToHtml() + "</div>");

                yield return("        </div>");

                yield return("    </div>");

                yield return("</div>");
            }
            yield return("<div class='row'>");

            yield return("<div class='col-md-12'>");

            yield return("    <table class='table'>");

            yield return("    <colgroup>");

            yield return("        <col style='width: 20px' />");

            if (invoiceData.ShowGroupColl)
            {
                yield return("        <col style='width: 25%' />");
            }
            yield return("        <col style='width: auto' />");

            yield return("        <col style='width: 15%' />");

            yield return("        <col style='width: 15%' />");

            yield return("        <col style='width: 18%' />");

            yield return("    </colgroup>");

            yield return("        <tbody>");

            yield return("            <tr>");

            if (invoiceData.ShowGroupColl)
            {
                yield return("            <th class='table-head' colspan='2'>" + translate.Get("INVOICE.GROUP") + "</th>");
            }
            yield return("                <th class='table-head' colspan='" + (invoiceData.ShowGroupColl ? "1" : "2") + "'>" + translate.Get("INVOICE.TASK") + "</th>");

            yield return("                <th class='table-head-right'>" + translate.Get("INVOICE.TIME") + "</th>");

            yield return("                <th class='table-head-right'>" + translate.Get("INVOICE.HOURPRICE") + "</th>");

            yield return("                <th class='table-head-right'>" + translate.Get("INVOICE.PRICE") + "</th>");

            yield return("            </tr>");

            foreach (var groupTask in invoiceData.Invoice.GroupTasks)
            {
                yield return("            <tr>");

                if (invoiceData.ShowGroupColl)
                {
                    yield return("            <td class='table-data' colspan='2'>" + groupTask.Group + "</td>");
                }
                yield return("                <td class='table-data' colspan='" + (invoiceData.ShowGroupColl ? "1" : "2") + "'>" + groupTask.Task + "</td>");

                yield return("                <td class='table-data'></td>");

                yield return("                <td class='table-data'></td>");

                yield return("                <td class='table-data'></td>");

                yield return("            </tr>");

                yield return("            <tr class='sub-table'>");

                yield return("                <th class='sub-table-head-first'></th>");

                yield return("                <th class='sub-table-head-names1' colspan='" + (invoiceData.ShowGroupColl ? "2" : "1") + "'>" + translate.Get("INVOICE.PERSON") + "</th>");

                yield return("                <th class='sub-table-head-names2'></th>");

                yield return("                <th class='sub-table-head-names2'></th>");

                yield return("                <th class='sub-table-head-names2'></th>");

                yield return("            </tr>");

                foreach (var user in groupTask.Users)
                {
                    yield return("            <tr class='sub-table'>");

                    yield return("                <td class='table-user-first'></td>");

                    yield return("                <td class='table-user-names1' colspan='" + (invoiceData.ShowGroupColl ? "2" : "1") + "'>" + user.FullName + "</td>");

                    yield return("                <td class='table-user-data-right'>" + user.Time.ToTimeFormat() + "</td>");

                    yield return("                <td class='table-user-data-right'>" + user.HourPrice?.ToString("C").HtmlSpace() + "</td>");

                    yield return("                <td class='table-user-data-right'>" + user.Price?.ToString("C").HtmlSpace() + "</td>");

                    yield return("            </tr>");
                }

                yield return("            <tr>");

                yield return("                <td class='table-space' colspan='" + (invoiceData.ShowGroupColl ? "6" : "5") + "'></td>");

                yield return("            </tr>");
            }

            yield return("            <tr>");

            yield return("                <td class='table-space-small' colspan='" + (invoiceData.ShowGroupColl ? "6" : "5") + "'></td>");

            yield return("            </tr>");

            yield return("            <tr>");

            yield return("                <td class='table-space' colspan='" + (invoiceData.ShowGroupColl ? "3" : "2") + "'></td>");

            yield return("                <td colspan='2' class='table-data'>" + translate.Get("INVOICE.SUBTOTAL") + "</td>");

            yield return("                <td class='table-data-right'>" + invoice.SubTotalPrice.ToString("C").HtmlSpace() + "</td>");

            yield return("            </tr>");

            if (invoiceData.Tax)
            {
                yield return("            <tr>");

                yield return("                <td class='table-space' colspan='" + (invoiceData.ShowGroupColl ? "3" : "2") + "'></td>");

                yield return("                <td colspan='2' class='table-data'>" + translate.Get("INVOICE.TAX") + " (" + (invoiceData.TaxPercentage.HasValue ? invoiceData.TaxPercentage.Value : 0) + "%)</td>");

                yield return("                <td class='table-data-right'>" + invoiceData.TaxPrice?.ToString("C").HtmlSpace() + "</td>");

                yield return("            </tr>");
            }
            if (invoiceData.Vat)
            {
                yield return("            <tr>");

                yield return("                <td class='table-space' colspan='" + (invoiceData.ShowGroupColl ? "3" : "2") + "'></td>");

                yield return("                <td colspan='2' class='table-data'>" + translate.Get("INVOICE.VAT") + " (" + (invoiceData.VatPercentage.HasValue ? invoiceData.VatPercentage.Value : 0) + "%)</td>");

                yield return("                <td class='table-data-right'>" + invoiceData.VatPrice?.ToString("C").HtmlSpace() + "</td>");

                yield return("            </tr>");
            }

            yield return("            <tr>");

            yield return("                <td class='table-space' colspan='" + (invoiceData.ShowGroupColl ? "3" : "2") + "'></td>");

            yield return("                <td colspan='2' class='table-data-total'>" + translate.Get("INVOICE.TOTAL") + "</td>");

            yield return("                <td class='table-data-total-right'>" + invoiceData.TotalPrice.ToString("C").HtmlSpace() + "</td>");

            yield return("            </tr>");


            yield return("        </tbody>");

            yield return("    </table>");

            yield return("</div>");

            yield return("</div>");

            yield return("</div>");

            yield return("</div>");

            yield return("</body></html>");
        }
 public void Init()
 {
     instance = new InvoiceDataApi();
 }