Exemplo n.º 1
0
        public string AddOrUpdatePurchaseOrder(int id, int branchID, DateTime date, DateTime expectedDate, int supplierID, string notes,
                                               decimal discValue, string terms,
                                               List <PurchaseOrderDetailViewModel> detail)
        {
            var poHeader = id == 0
                ? new PurchaseOrderHeader()
                : context.PurchaseOrderHeaders.Single(po => po.ID == id);

            if (id == 0)
            {
                poHeader.DocumentNo = autoNumberProvider.Generate(branchID, "PO", date.Month, date.Year);
            }

            poHeader.BranchID        = branchID;
            poHeader.DocumentDate    = date;
            poHeader.ExpectedDate    = expectedDate;
            poHeader.SupplierID      = supplierID;
            poHeader.Notes           = notes;
            poHeader.DiscountValue   = discValue;
            poHeader.Terms           = terms;
            poHeader.EmployeeID      = employeeProvider.Get(CurrentUserName).ID;
            poHeader.Status          = 'O';
            poHeader.StatusReceiving = 'O';
            EntityHelper.SetAuditField(id, poHeader, CurrentUserName);

            context.Delete(poHeader.PurchaseOrderDetails.ToList());

            foreach (var detailLine in detail)
            {
                PurchaseOrderDetailViewModel line = detailLine;
                //var itemProvider = new ItemProvider(context, principal);
                decimal ratio = itemProvider.GetItemUnitRatio(detailLine.ItemID, detailLine.UnitName);

                var poDetail = new PurchaseOrderDetail
                {
                    ItemID       = detailLine.ItemID,
                    UnitPrice    = detailLine.UnitPrice,
                    Quantity     = detailLine.Quantity,
                    IsTaxed      = detailLine.IsTaxed,
                    DiscountRate = detailLine.DiscountRate,
                    UnitName     = detailLine.UnitName,
                    UnitRatio    = ratio,
                    Notes        = String.Empty
                };

                poHeader.PurchaseOrderDetails.Add(poDetail);
            }

            if (id == 0)
            {
                context.Add(poHeader);
                autoNumberProvider.Increment("PO", branchID, date.Year);
            }


            context.SaveChanges();

            return(poHeader.DocumentNo);
        }