Beispiel #1
0
        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);
        }
Beispiel #2
0
 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());
     }
 }
Beispiel #3
0
 public List <Element> GetInvoiceElements(int id)
 {
     using (var db = new DatabaseContext())
     {
         return(_elementDa.GetInvoiceElements(db, id));
     }
 }
Beispiel #4
0
        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);
        }