using System; using System.Linq; using System.Web; using System.Web.UI; using Common; using System.Globalization; //20180326 - use DB setting for VAT - maanie public partial class Root_Invoice : Page { private int CustomerId { get { int id; return Page.RouteData.Values["customerid"] != null && int.TryParse(Page.RouteData.Values["customerid"].ToString(), out id) ? id : 0; } } private int Id { get { int id; return Page.RouteData.Values["id"] != null && int.TryParse(Page.RouteData.Values["id"].ToString(), out id) ? id : 0; } } public string ItemType = string.Empty; protected void Page_Load(object sender, EventArgs e) { if (Id == 0 || Page.IsPostBack) return; using (var db = new DataModel()) { Customer customer; if (User.Identity.Name == "test@test.com") customer = db.Customers.FirstOrDefault(f => f.CustomerId == CustomerId); else { var customerLogin = db.GetCustomerLoginFromGuid(HttpContext.Current.User.Identity.Name).FirstOrDefault(); if (customerLogin == null) return; customer = db.Customers.FirstOrDefault(f => f.CustomerId == customerLogin.CustomerId && f.CustomerId == CustomerId); } if (customer == null) return; //if (customer.BillingProfileId == 1) LoadInvoice(); //else LoadDispatch(); LoadDispatch(); } } private void LoadDispatch() { using (var db = new DataModel()) { //var detail = db.vwInvoicesReadyToPrints.FirstOrDefault(f => f.Id == Id && f.CustomerId == CustomerId); //var dispatch = db.Dispatches.FirstOrDefault(f => f.DispatchId == Id && f.Invoice.CustomerId == CustomerId); var dispatch = db.vwDispatchesReadyToPrints.Where(d => d.CustomerId == CustomerId && d.DeliveryId == Id).ToList(); var customer = db.Customers.FirstOrDefault(w => w.CustomerId == CustomerId); if (dispatch == null) return; //var invoiceId = (detail == null ? dispatch.DispatchId : detail.InvoiceId); //var invoiceDate = (detail == null ? dispatch.DateCreated : detail.DateCreated); var invoiceId = Id; var invoiceDate = dispatch[0].DateCreated; CompanyAddressLabel.Text = string.Format("{0} / {1}", Settings.CompanyAddress, Settings.CompanyPhone); CompanyEmailLabel.Text = string.Format("Email: {0}", Settings.CompanyEmail); CompanyVATNumberLabel.Text = string.Format("VAT Number: {0}", Settings.CompanyVatNumber); //DispatchIdLabel.Text = invoiceId.ToString(); DispatchIdLabel.Text = Id.ToString(); //CustomerName.Text = dispatch.Invoice.Customer.Name; CustomerName.Text = customer.Name; //BarcodeLabel.ImageUrl = string.Format("/Handlers/BarcodeHandler.ashx?type=Dispatch&value={0}", dispatch.Invoice.InvoiceId); BarcodeLabel.ImageUrl = string.Format("/Handlers/BarcodeHandler.ashx?type=Dispatch&value={0}", Id); DateLabel.Text += string.Format("   {0}", invoiceDate.ToShortDateString()); TimeLabel.Text += string.Format("   {0}", invoiceDate.ToShortTimeString()); CustomerAddressLine1.Text = customer.AddressLine1; CustomerAddressLine2.Text = customer.AddressLine2; CustomerAddressCity.Text = customer.AddressCity; CustomerAddressPostCode.Text = customer.AddressPostCode; //var inventory = db.GetWorkloadInventoryForDispatch(Id).ToList(); var inventory = db.GetWorkloadInventoryForDispatches(Id).ToList(); var laundryInventory = inventory.Where(i => i.Category == "Laundry" && i.Cost.HasValue).ToList(); var linenInventory = inventory.Where(i => i.Category == "Linen" && i.Cost.HasValue).ToList(); var fnbInventory = inventory.Where(i => i.Category == "Food and Bev" && i.Cost.HasValue).ToList(); LaundryRepeater.DataSource = laundryInventory; LaundryRepeater.DataBind(); LinenRepeater.DataSource = linenInventory; LinenRepeater.DataBind(); FNBRepeater.DataSource = fnbInventory; FNBRepeater.DataBind(); //20180326 - use DB setting for VAT - maanie double vatAmount = 0.0; //var setting = db.Settings.FirstOrDefault(s => s.SettingName == "VAT Amount"); var VAT = db.VATs.FirstOrDefault(); if (VAT == null) vatAmount = 0.14; //set to 0.14 if no vat setting found else vatAmount = VAT.VAT1; double subTotal = (double) inventory.Where(w => w.Cost.HasValue).Sum(result => result.ItemCount * result.Cost.Value / 100.0); subTotal += (double)inventory.Where(w => w.Cost.HasValue).Sum(result => result.ItemCountStain * result.Cost.Value / 100.0); //20180430 - added stain amounts to subtotal double vat = subTotal * vatAmount; //0.14; //20180326 - use DB setting for VAT - maanie double total = subTotal + vat; SubTotalLabel.Text = string.Format("R {0}", subTotal.ToString("F")); VATLabel.Text = string.Format("R {0}", vat.ToString("F")); VATAmountLabel.Text = vatAmount.ToString().Substring(vatAmount.ToString().IndexOf(",") + 1); //added 20180326 - maanie TotalLabel.Text = string.Format("R {0}", total.ToString("F")); LaundryLabel.Visible = LinenLabel.Visible = fnbLabel.Visible = false; laundryTotal.Visible = linenTotal.Visible = fnbTotal.Visible = false; if (laundryInventory.Count > 0) { double laundryInvoiceSubTotal = (double) laundryInventory.Sum(result => (result.ItemCount * result.Cost.Value / 100.0)); laundryInvoiceSubTotal += (double)laundryInventory.Sum(result => (result.ItemCountStain * result.Cost.Value / 100.0)); //20180430 - added stain amounts to laundryInvoiceSubTotal double laundryInvoiceTotal = laundryInvoiceSubTotal + (laundryInvoiceSubTotal * vatAmount); //0.14); //20180326 - use DB setting for VAT - maanie LaundryTotalLabel.Text = string.Format("R {0}", laundryInvoiceTotal.ToString("F")); laundryTotal.Visible = LaundryLabel.Visible = true; } if (linenInventory.Count > 0) { double linenInvoiceSubTotal = (double) linenInventory.Sum(result => (result.ItemCount * result.Cost.Value / 100.0)); linenInvoiceSubTotal += (double)linenInventory.Sum(result => (result.ItemCountStain * result.Cost.Value / 100.0)); //20180430 - added stain amounts to linenInvoiceSubTotal double linenInvoiceTotal = linenInvoiceSubTotal + (linenInvoiceSubTotal * vatAmount); //0.14); //20180326 - use DB setting for VAT - maanie LinenTotalLabel.Text = string.Format("R {0}", linenInvoiceTotal.ToString("F")); linenTotal.Visible = LinenLabel.Visible = true; } if (fnbInventory.Count <= 0) return; double fnbInvoiceSubTotal = (double) fnbInventory.Sum(result => (result.ItemCount * result.Cost.Value / 100.0)); fnbInvoiceSubTotal += (double)fnbInventory.Sum(result => (result.ItemCountStain * result.Cost.Value / 100.0)); //20180430 - added stain amounts to fnbInvoiceSubTotal double fnbInvoiceTotal = fnbInvoiceSubTotal + (fnbInvoiceSubTotal * vatAmount); //0.14); //20180326 - use DB setting for VAT - maanie FNBTotalLabel.Text = string.Format("R {0}", fnbInvoiceTotal.ToString("F")); fnbTotal.Visible = fnbLabel.Visible = true; } } private void LoadInvoice() { using (var db = new DataModel()) { var detail = db.vwInvoicesReadyToPrints.FirstOrDefault(f => f.Id == Id && f.CustomerId == CustomerId); var invoice = db.Invoices.FirstOrDefault(f => f.InvoiceId == Id && f.CustomerId == CustomerId); if (invoice == null) return; var invoiceId = (detail == null ? invoice.InvoiceId : detail.InvoiceId); var invoiceDate = (detail == null ? invoice.Workload.DateCreated : detail.DateCreated); CompanyAddressLabel.Text = string.Format("{0} / {1}", Settings.CompanyAddress, Settings.CompanyPhone); CompanyEmailLabel.Text = string.Format("Email: {0}", Settings.CompanyEmail); CompanyVATNumberLabel.Text = string.Format("VAT Number: {0}", Settings.CompanyVatNumber); DispatchIdLabel.Text = invoiceId.ToString(); CustomerName.Text = invoice.Customer.Name; BarcodeLabel.ImageUrl = string.Format("/Handlers/BarcodeHandler.ashx?type=Invoice&value={0}", invoice.InvoiceId); DateLabel.Text += string.Format("   {0}", invoiceDate.ToShortDateString()); TimeLabel.Text += string.Format("   {0}", invoiceDate.ToShortTimeString()); CustomerAddressLine1.Text = invoice.Customer.AddressLine1; CustomerAddressLine2.Text = invoice.Customer.AddressLine2; CustomerAddressCity.Text = invoice.Customer.AddressCity; CustomerAddressPostCode.Text = invoice.Customer.AddressPostCode; var inventory = db.GetWorkloadInventoryForInvoice(Id).ToList(); var laundryInventory = inventory.Where(i => i.Category == "Laundry" && i.Cost.HasValue).ToList(); var linenInventory = inventory.Where(i => i.Category == "Linen" && i.Cost.HasValue).ToList(); var fnbInventory = inventory.Where(i => i.Category == "Food and Bev" && i.Cost.HasValue).ToList(); LaundryRepeater.DataSource = laundryInventory; LaundryRepeater.DataBind(); LinenRepeater.DataSource = linenInventory; LinenRepeater.DataBind(); FNBRepeater.DataSource = fnbInventory; FNBRepeater.DataBind(); //20180326 - use DB setting for VAT - maanie double vatAmount = 0.0; var setting = db.Settings.FirstOrDefault(s => s.SettingName == "VAT Amount"); if (setting == null) vatAmount = 0.14; //set to 0.14 if no vat setting found else vatAmount = Convert.ToDouble(setting.SettingValue); var subTotal = inventory.Where(w => w.Cost.HasValue).Sum(result => result.ItemCount * result.Cost.Value / 100.0); var vat = subTotal * vatAmount; //0.14; //20180326 - use DB setting for VAT - maanie var total = subTotal + vat; SubTotalLabel.Text = string.Format("R {0}", subTotal.ToString("F")); VATLabel.Text = string.Format("R {0}", vat.ToString("F")); TotalLabel.Text = string.Format("R {0}", total.ToString("F")); LaundryLabel.Visible = LinenLabel.Visible = fnbLabel.Visible = false; laundryTotal.Visible = linenTotal.Visible = fnbTotal.Visible = false; if (laundryInventory.Count > 0) { var laundryInvoiceSubTotal = laundryInventory.Sum(result => (result.ItemCount * result.Cost.Value / 100.0)); var laundryInvoiceTotal = laundryInvoiceSubTotal + (laundryInvoiceSubTotal * vatAmount); //0.14); //20180326 - use DB setting for VAT - maanie LaundryTotalLabel.Text = string.Format("R {0}", laundryInvoiceTotal.ToString("F")); laundryTotal.Visible = LaundryLabel.Visible = true; } if (linenInventory.Count > 0) { var linenInvoiceSubTotal = linenInventory.Sum(result => (result.ItemCount * result.Cost.Value / 100.0)); var linenInvoiceTotal = linenInvoiceSubTotal + (linenInvoiceSubTotal * vatAmount); //0.14); //20180326 - use DB setting for VAT - maanie LinenTotalLabel.Text = string.Format("R {0}", linenInvoiceTotal.ToString("F")); linenTotal.Visible = LinenLabel.Visible = true; } if (fnbInventory.Count <= 0) return; var fnbInvoiceSubTotal = fnbInventory.Sum(result => (result.ItemCount * result.Cost.Value / 100.0)); var fnbInvoiceTotal = fnbInvoiceSubTotal + (fnbInvoiceSubTotal * vatAmount); //0.14); //20180326 - use DB setting for VAT - maanie FNBTotalLabel.Text = string.Format("R {0}", fnbInvoiceTotal.ToString("F")); fnbTotal.Visible = fnbLabel.Visible = true; } } public string LineTotal(object o) { if (o is int) return ((int)o).ToString("F"); if (!(o is WorkloadInventory_Result)) return string.Empty; var row = (WorkloadInventory_Result)o; return ((row.ItemCount * row.Cost) / 100.0).Value.ToString("F"); } public string ShowHeader(object o) { //20180502 - type changed to show header correctly (we returning a dispatach type NOT an invoice type anymore) - maanie if (!(o is GetWorkloadInventoryForDispatches_Result)) return "none;"; //if (!(o is WorkloadInventory_Result)) return "none;"; var row = (GetWorkloadInventoryForDispatches_Result)o; //var row = (WorkloadInventory_Result)o; var result = (ItemType != row.ItemType) ? "inline;" : "none;"; ItemType = row.ItemType; return result; } }