private Invoice GetInvoice(DatabaseContext db, int id) { ElementDa elementDa = new ElementDa(); Invoice invoice = _invoiceDa.GetInvoice(db, id); if (invoice != null) { invoice.Elements = elementDa.GetInvoiceElements(db, invoice.ID); //sets the price with and without taxes if (invoice.Incoming) { invoice.SumNoTax = invoice.Elements.Sum(x => x.Item.Price); invoice.Sum = invoice.Elements.Sum(x => x.Item.Price + x.Item.Price * ((decimal)x.Item.IncomingTaxGroup.Tax / 100)); invoice.Sum += invoice.Transport; } else { //should be improved for performance ItemDM itemDm = new ItemDM(); invoice.SumNoTax = invoice.Elements.Sum(x => itemDm.CalculateIncomingPrice(db, x.Item)); invoice.Sum = invoice.Elements.Sum(x => itemDm.CalculateOutgoingPrice(db, x.Item)) + invoice.Transport; } } return(invoice); }
public List <Element> GetInvoiceElements(int id) { using (var db = new DatabaseContext()) { ItemDM itemDm = new ItemDM(); InvoiceDM invoiceDm = new InvoiceDM(); List <Element> elements = _elementDa.GetInvoiceElements(db, id); Invoice invoice = invoiceDm.GetInvoice(id); if (invoice != null && !invoice.Incoming) { elements.ForEach(x => x.Item.Price = itemDm.CalculateIncomingPrice(db, x.Item)); } return(elements.GroupBy(x => new { x.Item.SerNumber, x.Item.Price, x.Item.Product_ID }) .Select(g => new { item = g.Select(c => c).FirstOrDefault(), count = g.Count() }) .Select(x => { x.item.Item.Quantity = x.count; return x.item; }) .ToList()); } }
public List <Element> GetInvoiceElements(int id) { using (var db = new DatabaseContext()) { return(_elementDa.GetInvoiceElements(db, id)); } }
public decimal CalculateIncomingPrice(DatabaseContext db, Item item) { InvoiceDa invoiceDa = new InvoiceDa(); ElementDa elementDa = new ElementDa(); Element element = elementDa.GetItemElement(db, item.ID, true); if (element != null)//if item was added with invoice { List <Element> elements = elementDa.GetInvoiceElements(db, element.Invoice_ID); decimal transport = invoiceDa.GetInvoice(db, element.Invoice_ID).Transport; decimal sum = elements.Sum(x => x.Item.Price + x.Item.Price * ((decimal)x.Item.IncomingTaxGroup.Tax / 100)); decimal procent = decimal.Round((sum + transport) / sum, 4); return(decimal.Round((item.Price + item.Price * ((decimal)item.IncomingTaxGroup.Tax / 100)) * procent, 2)); } return(item.Price); }