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); }