示例#1
0
        public ActionResult GetInvoiceDetails(int ClientId, DateTime?fromdate, DateTime?todate)
        {
            try
            {
                using (MaxDbEntities db = new MaxDbEntities())
                {
                    var          clientDetails   = db.MaxClient_Details(ClientId, fromdate, todate).ToList();
                    var          clientDueAmount = db.MaxClientDueDetails(ClientId).FirstOrDefault();
                    InvoiceModel invoice         = new InvoiceModel();

                    if (clientDueAmount == null)
                    {
                        invoice.DueAmount = 0;
                    }
                    else
                    {
                        invoice.DueAmount = Math.Round(Convert.ToDecimal(clientDueAmount.DueAmount));
                    }

                    List <InvoiceModel> invoices = new List <InvoiceModel>();

                    foreach (var client in clientDetails)
                    {
                        // InvoiceModel invoice = new InvoiceModel();
                        invoice.Client_Id       = client.Client_Id;
                        invoice.Client_Name     = client.ClientName;
                        invoice.ClientShortName = client.ShortName;
                        invoice.Address         = client.AddressLine1;
                        invoice.ServiceType     = client.ServiceType;
                        invoice.ServiceId       = Convert.ToInt32(client.ClientVertical_Id);
                        invoice.PaymentType     = client.PaymentType;
                        invoice.RowNum          = Convert.ToInt32(client.RowNum);
                        invoice.LineCount       = Convert.ToInt32(client.LineCount);
                        invoice.CountryName     = client.Name;
                        if (client.PaymentType == "Per Unit")
                        {
                            invoice.UnitPrice           = Convert.ToDecimal(client.PaymentAmount);
                            invoice.UnitPriceforDisplay = (client.PaymentAmount).ToString();
                            invoice.Amount = Math.Round(Convert.ToDecimal(client.LineCount * client.PaymentAmount));
                        }
                        if (client.PaymentType == "Fixed")
                        {
                            invoice.UnitPriceforDisplay = "Fixed";
                            invoice.UnitPrice           = Convert.ToDecimal(client.PaymentAmount);
                            invoice.Amount = Math.Round(Convert.ToDecimal(client.PaymentAmount));
                        }

                        invoice.TotalAmount = Math.Round(Convert.ToDecimal(invoice.Amount + invoice.DueAmount));

                        invoice.MonthYear = fromdate.Value.ToString("MMMM yyyy");
                        invoices.Add(invoice);
                    }

                    invoice.InvoiceDate        = fromdate.Value.ToShortDateString();
                    invoice.InvoiceDueDate     = fromdate.Value.AddDays(10).ToShortDateString();
                    invoice.InvoiceCurrentDate = DateTime.Now.ToShortDateString();

                    var InvoiceCount = db.DeletedInvoices.Where(inv => inv.Client_Id == ClientId && inv.InvoiceCreatedDate.Value.Month == fromdate.Value.Month).Count();
                    int count        = Convert.ToInt32(InvoiceCount);

                    invoice.InvoiceNumber = "MAX-" + invoice.Client_Id + (fromdate.Value.Month).ToString().Substring(0, 1) + (fromdate.Value.Year).ToString().Substring(2, 2) + "_" + ++count;

                    string    html      = RenderRazorViewToString("GetInvoiceDetails", invoice);
                    string    baseUrl   = System.Web.HttpContext.Current.Request.Url.AbsoluteUri;
                    HtmlToPdf converter = new HtmlToPdf();

                    converter.Options.DisplayFooter = true;
                    string         footerUrl  = Server.MapPath("~/views/home/footer.html");
                    PdfHtmlSection footerHtml = new PdfHtmlSection(footerUrl);
                    footerHtml.AutoFitHeight = HtmlToPdfPageFitMode.AutoFit;
                    converter.Footer.Add(footerHtml);

                    PdfDocument doc = converter.ConvertHtmlString(html, baseUrl);

                    // save pdf document
                    byte[] pdf = doc.Save();

                    // close pdf document
                    doc.Close();

                    // return resulted pdf document
                    FileResult fileResult = new FileContentResult(pdf, "application/pdf");
                    fileResult.FileDownloadName = invoice.InvoiceNumber + "_" + invoice.ClientShortName + ".pdf";
                    return(fileResult);
                    //return View(invoice);
                }
            }
            catch (Exception ex)
            {
                new Error().logAPIError(System.Reflection.MethodBase.GetCurrentMethod().Name, ex.ToString(), ex.StackTrace);
                return(View());
            }
        }