public ActionResult AddPurchaseInvoice(int?id = null)
        {
            Models.ViewModels.Purchases.AddPurchaseInvoice model = new Models.ViewModels.Purchases.AddPurchaseInvoice();
            if (id != null)
            {
                var existingPO = _purchasingService.GetPurchaseOrderById(id.Value);
                model.Date   = existingPO.Date;
                model.Vendor = existingPO.Vendor.No;
                model.No     = existingPO.No;
                model.Amount = existingPO.PurchaseOrderLines.Sum(a => a.Amount);

                foreach (var line in existingPO.PurchaseOrderLines)
                {
                    model.PurchaseInvoiceLines.Add(new Models.ViewModels.Purchases.AddPurchaseInvoiceLine()
                    {
                        Id     = line.Id,
                        ItemId = line.ItemId,
                        UnitOfMeasurementId = line.MeasurementId,
                        Description         = line.Item.Description,
                        Quantity            = line.Quantity,
                        Cost             = line.Cost,
                        TotalLineCost    = line.Cost * line.Quantity,
                        ReceivedQuantity = line.GetReceivedQuantity().Value
                    });
                }
            }
            return(View(model));
        }
        public ActionResult AddPurchaseInvoice(Models.ViewModels.Purchases.AddPurchaseInvoice model)
        {
            if (string.IsNullOrEmpty(model.VendorInvoiceNo))
            {
                return(RedirectToAction("PurchaseOrders"));
            }

            var existingPO = _purchasingService.GetPurchaseOrderById(model.Id);
            var vendor     = _purchasingService.GetVendorById(existingPO.VendorId);

            var purchInvoice = new PurchaseInvoiceHeader()
            {
                Date            = model.Date,
                VendorInvoiceNo = model.VendorInvoiceNo,
                Vendor          = vendor,
                VendorId        = vendor.Id,
                CreatedBy       = User.Identity.Name,
                CreatedOn       = DateTime.Now,
                ModifiedBy      = User.Identity.Name,
                ModifiedOn      = DateTime.Now
            };

            foreach (var line in model.PurchaseInvoiceLines)
            {
                var item        = _inventoryService.GetItemById(line.ItemId);
                var measurement = _inventoryService.GetMeasurementById(line.UnitOfMeasurementId);
                purchInvoice.PurchaseInvoiceLines.Add(new PurchaseInvoiceLine()
                {
                    ItemId           = item.Id,
                    MeasurementId    = measurement.Id,
                    Quantity         = line.Quantity,
                    ReceivedQuantity = line.ReceivedQuantity,
                    Cost             = item.Cost.Value,
                    Discount         = 0,
                    Amount           = item.Cost.Value * line.ReceivedQuantity,
                    CreatedBy        = User.Identity.Name,
                    CreatedOn        = DateTime.Now,
                    ModifiedBy       = User.Identity.Name,
                    ModifiedOn       = DateTime.Now
                });
            }
            _purchasingService.AddPurchaseInvoice(purchInvoice, existingPO.Id);
            return(RedirectToAction("PurchaseOrders"));
        }
        public ActionResult AddPurchaseInvoice(int? id = null)
        {
            Models.ViewModels.Purchases.AddPurchaseInvoice model = new Models.ViewModels.Purchases.AddPurchaseInvoice();
            if (id != null)
            {
                var existingPO = _purchasingService.GetPurchaseOrderById(id.Value);
                model.Date = existingPO.Date;
                model.Vendor = existingPO.Vendor.Name;
                model.No = existingPO.No;
                model.Amount = existingPO.PurchaseOrderLines.Sum(a => a.Amount);

                foreach (var line in existingPO.PurchaseOrderLines)
                {
                    model.PurchaseInvoiceLines.Add(new Models.ViewModels.Purchases.AddPurchaseInvoiceLine()
                    {
                        Id = line.Id,
                        ItemId = line.ItemId,
                        UnitOfMeasurementId = line.MeasurementId,
                        Description = line.Item.Description,
                        Quantity = line.Quantity,
                        Cost = line.Cost,
                        TotalLineCost = line.Cost * line.Quantity,
                        ReceivedQuantity = line.GetReceivedQuantity().Value
                    });
                }
            }
            return View(model);
        }