private PurchaseOrderDetail getEntityByModel(PurchaseOrderDetailModel model)
        {
            if (model == null)
            {
                return(null);
            }

            PurchaseOrderDetail entity = new PurchaseOrderDetail();

            if (model.Id == 0)
            {
                entity.CreateBy   = AuthenticationHelper.UserId;
                entity.CreateDate = DateTime.Now;
            }
            else
            {
                entity.CreateBy   = model.CreateBy;
                entity.CreateDate = model.CreateDate;
            }

            entity.CreateBy   = model.CreateBy;
            entity.CreateDate = model.CreateDate;
            entity.Id         = model.Id;
            entity.ItemId     = model.ItemId;
            entity.NeedByDate = model.NeedByDate;
            entity.POId       = model.POId;
            entity.Price      = model.Price;
            entity.Quantity   = model.Quantity;
            entity.UpdateBy   = model.UpdateBy;
            entity.UpdateDate = model.UpdateDate;

            return(entity);
        }
 public ActionResult UpdatePartial(PurchaseOrderDetailModel model)
 {
     if (ModelState.IsValid)
     {
         try
         {
             SessionHelper.PurchaseOrder.PurchaseOrderDetail.FirstOrDefault(rec => rec.Id == model.Id).CreateBy   = model.CreateBy;
             SessionHelper.PurchaseOrder.PurchaseOrderDetail.FirstOrDefault(rec => rec.Id == model.Id).CreateDate = model.CreateDate;
             SessionHelper.PurchaseOrder.PurchaseOrderDetail.FirstOrDefault(rec => rec.Id == model.Id).Id         = model.Id;
             SessionHelper.PurchaseOrder.PurchaseOrderDetail.FirstOrDefault(rec => rec.Id == model.Id).ItemId     = model.ItemId;
             SessionHelper.PurchaseOrder.PurchaseOrderDetail.FirstOrDefault(rec => rec.Id == model.Id).NeedByDate = model.NeedByDate;
             SessionHelper.PurchaseOrder.PurchaseOrderDetail.FirstOrDefault(rec => rec.Id == model.Id).POId       = model.POId;
             SessionHelper.PurchaseOrder.PurchaseOrderDetail.FirstOrDefault(rec => rec.Id == model.Id).Price      = model.Price;
             SessionHelper.PurchaseOrder.PurchaseOrderDetail.FirstOrDefault(rec => rec.Id == model.Id).Quantity   = model.Quantity;
             SessionHelper.PurchaseOrder.PurchaseOrderDetail.FirstOrDefault(rec => rec.Id == model.Id).UpdateBy   = model.UpdateBy;
             SessionHelper.PurchaseOrder.PurchaseOrderDetail.FirstOrDefault(rec => rec.Id == model.Id).UpdateDate = model.UpdateDate;
         }
         catch (Exception e)
         {
             ViewData["EditError"] = e.Message;
         }
     }
     else
     {
         ViewData["EditError"] = "Please, correct all errors.";
     }
     return(PartialView("_Detail", getPODetail()));
 }
        public ActionResult AddNewPartial(PurchaseOrderDetailModel model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    if (SessionHelper.PurchaseOrder != null)
                    {
                        if (SessionHelper.PurchaseOrder.PurchaseOrderDetail != null && SessionHelper.PurchaseOrder.PurchaseOrderDetail.Count() > 0)
                        {
                            model.Id = SessionHelper.PurchaseOrder.PurchaseOrderDetail.LastOrDefault().Id + 1;
                        }
                        else
                        {
                            model.Id = 1;
                        }
                    }
                    else
                    {
                        model.Id = 1;
                    }

                    SessionHelper.PurchaseOrder.PurchaseOrderDetail.Add(model);
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }
            else
            {
                ViewData["EditError"] = "Please, correct all errors.";
            }
            return(PartialView("_Detail", getPODetail()));
        }
        //Create new PurchaseOrder
        public static PurchaseOrderDetailModel CreatePurchaseOrderDetail(PurchaseOrderDetailModel podm, out string error)
        {
            error = "";
            LUSSISEntities      entities = new LUSSISEntities();
            purchaseorderdetail pod      = new purchaseorderdetail();

            try
            {
                pod.poid     = podm.PoId;
                pod.itemid   = podm.Itemid;
                pod.qty      = podm.Qty;
                pod.delivqty = podm.DelivQty;
                pod.price    = podm.Price;
                entities.purchaseorderdetails.Add(pod);
                entities.SaveChanges();
                podm = GetPurchaseOrderDetailByIDAndItemID(pod.poid, pod.itemid, out error);
            }
            catch (NullReferenceException)
            {
                error = ConError.Status.NOTFOUND;
            }
            catch (Exception e)
            {
                error = e.Message;
            }
            return(podm);
        }
        public ActionResult EditPurchaseOrderDetail(PurchaseOrderDetailModel purchaseOrderDetail)
        {
            if (Session["UserLogon"] != null)
            {
                purchaseOrderDetail.Account = (AccountModel)Session["UserLogon"];
            }
            PurchaseOrderDetailResponse _purchaseorderdetailresponse = new PurchaseOrderDetailResponse();
            var purchaserequestdetailrequest = new PurchaseOrderDetailRequest
            {
                Data = purchaseOrderDetail
            };
            var requestnamabarang = new ProductRequest
            {
                Data = new ProductModel
                {
                    Id = Convert.ToInt32(purchaseOrderDetail.ProductId)
                }
            };

            ProductResponse namabarang = new ProductHandler(_unitOfWork).GetDetail(requestnamabarang);

            purchaserequestdetailrequest.Data.namabarang = purchaserequestdetailrequest.Data.namabarang != null ? purchaserequestdetailrequest.Data.namabarang : namabarang.Entity.Name;
            new PurchaseOrderDetailValidator(_unitOfWork).Validate(purchaserequestdetailrequest, out _purchaseorderdetailresponse);
            return(Json(new { data = _purchaseorderdetailresponse.Entity }, JsonRequestBehavior.AllowGet));
        }
        public static PurchaseOrderDetailModel GetPurchaseOrderDetailByIdAndItemId(int poid, int itemid, string token, out string error)
        {
            string url = APIHelper.Baseurl + "purchaseorderdetail/" + poid + "/" + itemid;
            PurchaseOrderDetailModel podm = APIHelper.Execute <PurchaseOrderDetailModel>(token, url, out error);

            return(podm);
        }
示例#7
0
        int getFreeStock(PurchaseOrderDetailModel pod, List <AllocationModel> allocList)
        {
            // The amount of 'free' stock on an order is the
            // OrderQty less the sum(Quantity) of all allocations pointing at the order detail line
            int allocated = allocList.Sum(al => al.Quantity.Value);

            return(pod.OrderQty.Value - allocated);
        }
        public static PurchaseOrderDetailModel UpdatePODetail(PurchaseOrderDetailModel podm, string token, out string error)
        {
            error = "";
            string url          = APIHelper.Baseurl + "/purchaseorderdetail/update";
            string objectstring = JsonConvert.SerializeObject(podm);

            podm = APIHelper.Execute <PurchaseOrderDetailModel>(token, objectstring, url, out error);
            return(podm);
        }
示例#9
0
        public PurchaseOrderResponse GetDetail(PurchaseOrderRequest request)
        {
            PurchaseOrderResponse response = new PurchaseOrderResponse();

            var qry = _unitOfWork.PurchaseOrderRepository.GetById(request.Data.Id);

            //DeliveryOrderDetailModel newdeliveryOrderdetailModel = new DeliveryOrderDetailModel();
            if (qry != null)
            {
                response.Entity = new PurchaseOrderModel
                {
                    Id = qry.id,
                    PurchaseRequestId = qry.PurchaseRequestId,
                    ponumber          = qry.ponumber,
                    podate            = qry.podate,
                    approveby         = qry.approve_by,
                    request_by        = qry.request_by,
                    approve           = qry.approve,
                    ModifiedBy        = qry.ModifiedBy,
                    CreatedBy         = qry.CreatedBy,
                    ModifiedDate      = qry.ModifiedDate,
                    prrequestby       = qry.PurchaseRequest.request_by,
                    prvalidationby    = qry.PurchaseRequest.ModifiedBy,
                    prdate            = qry.PurchaseRequest.prdate,
                    prnumber          = qry.PurchaseRequest.prnumber,
                    sourcename        = qry.SourceId != null ? qry.Gudang1.name : "",
                    Validasi          = qry.Validasi
                };

                foreach (var item in qry.PurchaseOrderDetails.OrderBy(a => a.OrderNumber))
                {
                    var newpurchaseOrderdetailModel = new PurchaseOrderDetailModel
                    {
                        Id = item.id,
                        PurchaseOrderId = qry.id,
                        ProductId       = item.ProductId,
                        namabarang      = item.namabarang,
                        tot_pemakaian   = item.tot_pemakaian,
                        sisa_stok       = item.sisa_stok,
                        qty             = item.qty,
                        qty_add         = item.qty_add,
                        reason_add      = item.reason_add,
                        total           = item.total,
                        nama_by_ho      = item.nama_by_ho,
                        qty_by_ho       = item.qty_by_ho,
                        remark_by_ho    = item.remark_by_ho,
                        OrderNumber     = item.OrderNumber,
                        Verified        = item.Verified
                    };

                    response.Entity.PurchaseOrderDetails.Add(newpurchaseOrderdetailModel);
                }
            }

            return(response);
        }
示例#10
0
        public Error ImportOrders(CompanyModel company,
                                  UserModel user,
                                  int locationId,
                                  List <string> headings)
        {
            var error = new Error();

            int lastSupplierId           = -1,
                lineNo                   = 0;
            PurchaseOrderHeaderModel poh = null;

            // Create an order for each supplier
            foreach (var row in db.FindFileImportRows(company.Id, user.Id)
                     .Skip(1)                      // Skip first record (headers)
                     .OrderBy(r => r.Product.Supplier.Name)
                     .ToList())
            {
                if (row.SupplierId != lastSupplierId)
                {
                    // Found another supplier, so start a new order
                    poh = new PurchaseOrderHeaderModel {
                        CompanyId     = company.Id,
                        SupplierId    = row.SupplierId,
                        OrderNumber   = LookupService.GetNextSequenceNumber(company, SequenceNumberType.PurchaseOrderNumber),
                        OrderDate     = DateTimeOffset.Now,
                        POStatus      = LookupService.FindPurchaseOrderHeaderStatusByValueModel(PurchaseOrderStatus.OrderPlanned).Id,
                        SalespersonId = user.Id,
                        LocationId    = locationId,
                        CurrencyId    = row.Product.Supplier.CurrencyId,
                        ExchangeRate  = LookupService.FindCurrencyModel(row.Product.Supplier.CurrencyId.Value).ExchangeRate.Value
                    };
                    InsertOrUpdatePurchaseOrderHeader(poh, user, "");

                    lastSupplierId = row.SupplierId.Value;
                    lineNo         = 1000;
                }

                // Add items to the new order
                var pod = new PurchaseOrderDetailModel {
                    CompanyId             = company.Id,
                    PurchaseOrderHeaderId = poh.Id,
                    LineNumber            = lineNo,
                    ProductId             = row.ProductId,
                    ProductDescription    = row.Product.ItemName,
                    UnitPriceExTax        = Convert.ToDecimal(getField(row, "UnitPrice").Value),
                    TaxCodeId             = row.Product.Supplier.TaxCodeId.Value,
                    OrderQty = Convert.ToInt32(getField(row, "Quantity").Value)
                };
                InsertOrUpdatePurchaseOrderDetail(pod, user, "");

                lineNo += 1000;
            }

            return(error);
        }
        public PurchaseOrderDetailModel FindPurchaseOrderDetailModel(int id)
        {
            PurchaseOrderDetailModel model = null;
            var item = db.FindPurchaseOrderDetail(id);

            if (item != null)
            {
                model = MapToModel(item);
            }
            return(model);
        }
示例#12
0
        // The following method is called from the Purchasing service when a Purchase Order is being split
        public void AllocateOnPurchaseOrderSplit(PurchaseOrderDetailModel pod,            // Line we split from
                                                 List <AllocationModel> allocList,        // Allocations linked to the line (ordered by DateCreated)
                                                 PurchaseOrderHeaderModel targetPo,       // PO we are splitting to (the 'later' PO))
                                                 PurchaseOrderDetailModel targetPod,      // Line we are spliting to
                                                 int numSplitItems,                       // Number of items being split
                                                 UserModel user)
        {
            // On entry, the allocList must be in DateCreated order
            // Every allocation will always have a purchase order line Id and a sales order line Id

            // Update the purchase order detail
            pod.OrderQty -= numSplitItems;

            if (allocList.Count > 0)
            {
                // Is window open of the allocation greater than or equal to the
                // the ReallisticETA of the PO were are spliting to ?
                var sod = db.FindSalesOrderDetail(allocList[0].SaleLineId.Value);
                if (sod.SalesOrderHeader.DeliveryWindowOpen != null && targetPo.RealisticRequiredDate != null)
                {
                    // Only do something if the window and required date are set

                    if (sod.SalesOrderHeader.DeliveryWindowOpen >= targetPo.RealisticRequiredDate)
                    {
                        // Yes, Is there free stock on the later PO ?
                        if (getFreeStock(targetPod, allocList) >= numSplitItems)
                        {
                            // Yes, assign allocation to later PO
                            allocList[0].PurchaseLineId = targetPod.Id;
                        }
                        else
                        {
                            // No, assign allocation to earlier PO
                            allocList[0].PurchaseLineId = pod.Id;
                        }
                    }
                    else
                    {
                        // No, is there free stock on the earlier PO ?
                        if (getFreeStock(pod, allocList) >= numSplitItems)
                        {
                            // Yes, assign allocation to earlier PO
                            allocList[0].PurchaseLineId = pod.Id;
                        }
                        else
                        {
                            // No, assign allocation to later PO
                            allocList[0].PurchaseLineId = targetPod.Id;
                        }
                    }
                    InsertOrUpdateAllocation(allocList[0], user, LockAllocation(allocList[0]));
                }
            }
        }
        public IHttpActionResult CreatePODetail(PurchaseOrderDetailModel podetail)
        {
            string error = "";
            PurchaseOrderDetailModel ordm =
                PurchaseOrderDetailRepo.CreatePurchaseOrderDetail(podetail, out error);

            if (error != "" || ordm == null)
            {
                return(Content(HttpStatusCode.BadRequest, error));
            }
            return(Ok(ordm));
        }
        public Error InsertOrUpdatePurchaseOrderDetail(PurchaseOrderDetailModel pod, UserModel user, string lockGuid)
        {
            var error = validateModel(pod);

            if (!error.IsError)
            {
                // Check that the lock is still current
                if (!db.IsLockStillValid(typeof(PurchaseOrderDetail).ToString(), pod.Id, lockGuid))
                {
                    error.SetError(EvolutionResources.errRecordChangedByAnotherUser, "ProductName");
                }
                else
                {
                    PurchaseOrderDetail before = new PurchaseOrderDetail();

                    var temp = new PurchaseOrderDetail();
                    if (pod.Id != 0)
                    {
                        // Updating existing record
                        temp = db.FindPurchaseOrderDetail(pod.Id);

                        Mapper.Map <PurchaseOrderDetail, PurchaseOrderDetail>(temp, before);

                        // The following does not copy:
                        //      OriginalRowId
                        //      LineNumber
                        Mapper.Map <PurchaseOrderDetailModel, PurchaseOrderDetail>(pod, temp);
                    }
                    else
                    {
                        // New record

                        // The following does not copy:
                        //      OriginalRowId
                        //      LineNumber
                        Mapper.Map <PurchaseOrderDetailModel, PurchaseOrderDetail>(pod, temp);

                        temp.OriginalRowId = pod.OriginalRowId;
                        temp.LineNumber    = pod.LineNumber;
                    }

                    db.InsertOrUpdatePurchaseOrderDetail(temp);
                    pod.Id = temp.Id;

                    logChanges(before, temp, user);
                }
            }
            return(error);
        }
        public ActionResult DeletePartial(PurchaseOrderDetailModel model)
        {
            try
            {
                PurchaseOrderModel       po       = SessionHelper.PurchaseOrder;
                PurchaseOrderDetailModel poDetail = po.PurchaseOrderDetail.FirstOrDefault(rec => rec.Id == model.Id);
                SessionHelper.PurchaseOrder.PurchaseOrderDetail.Remove(poDetail);
            }
            catch (Exception ex)
            {
                ViewData["EditError"] = ex.Message;
            }

            return(PartialView("_Detail", getPODetail()));
        }
        public IHttpActionResult GetPurchaseOrderDetailByIdAndItemId(int poid, int itemid)
        {
            string error = "";
            PurchaseOrderDetailModel orm =
                PurchaseOrderDetailRepo.GetPurchaseOrderDetailByIDAndItemID(poid, itemid, out error);

            if (error != "" || orm == null)
            {
                if (error == ConError.Status.NOTFOUND)
                {
                    return(Content(HttpStatusCode.NotFound, "PO Not Found"));
                }
                return(Content(HttpStatusCode.BadRequest, error));
            }
            return(Ok(orm));
        }
        public IHttpActionResult UpdatePODetail(PurchaseOrderDetailModel podetail)
        {
            string error = "";
            PurchaseOrderDetailModel ordm =
                PurchaseOrderDetailRepo.UpdatePurchaseOrderDetail(podetail, out error);

            if (error != "" || ordm == null)
            {
                if (error == ConError.Status.NOTFOUND)
                {
                    return(Content(HttpStatusCode.NotFound, "PO Not Found"));
                }
                return(Content(HttpStatusCode.BadRequest, error));
            }
            return(Ok(ordm));
        }
        //find Purchase Order detail by id and itemid
        public static PurchaseOrderDetailModel GetPurchaseOrderDetailByIDAndItemID(int poid, int itemid, out string error)
        {
            LUSSISEntities entities = new LUSSISEntities();

            error = "";
            purchaseorderdetail      pod  = new purchaseorderdetail();
            PurchaseOrderDetailModel podm = new PurchaseOrderDetailModel();

            try
            {
                pod  = entities.purchaseorderdetails.Where(a => a.poid == poid && a.itemid == itemid).FirstOrDefault <purchaseorderdetail>();
                podm = ConvertDBtoAPIPOModel(pod);
            }
            catch (NullReferenceException)
            {
                error = ConError.Status.NOTFOUND;
            }
            catch (Exception e)
            {
                error = e.Message;
            }
            return(podm);
        }
 public void DeletePurchaseOrderDetail(PurchaseOrderDetailModel pod)
 {
     db.DeletePurchaseOrderDetail(pod.Id);
 }
示例#20
0
        public void IntegrationTest()
        {
            var connection = TestSession.GetConnection();

            connection.Open();
            #region good insertion and select by id test
            PurchaseOrderDetailModel inserted = new PurchaseOrderDetailModel();
            inserted.PurchaseOrderID = TestSession.Random.Next();
            inserted.DueDate         = TestSession.Random.RandomDateTime();
            inserted.OrderQty        = TestSession.Random.RandomShort();
            inserted.ProductID       = TestSession.Random.Next();
            inserted.UnitPrice       = TestSession.Random.RandomDecimal();
            inserted.LineTotal       = TestSession.Random.RandomDecimal();
            inserted.ReceivedQty     = TestSession.Random.RandomDecimal();
            inserted.RejectedQty     = TestSession.Random.RandomDecimal();
            inserted.StockedQty      = TestSession.Random.RandomDecimal();
            inserted.ModifiedDate    = TestSession.Random.RandomDateTime();

            _tested.Insert(connection, new[] { inserted });

            var selectedAfterInsertion = _tested.GetByPrimaryKey(connection, new PurchaseOrderDetailModelPrimaryKey()
            {
                PurchaseOrderID       = inserted.PurchaseOrderID,
                PurchaseOrderDetailID = inserted.PurchaseOrderDetailID,
            });

            CollectionAssert.IsNotEmpty(selectedAfterInsertion);
            var selectedAfterInsert = selectedAfterInsertion.Single();
            Assert.AreEqual(inserted.PurchaseOrderID, selectedAfterInsert.PurchaseOrderID);
            Assert.AreEqual(inserted.PurchaseOrderDetailID, selectedAfterInsert.PurchaseOrderDetailID);
            Assert.AreEqual(inserted.DueDate, selectedAfterInsert.DueDate);
            Assert.AreEqual(inserted.OrderQty, selectedAfterInsert.OrderQty);
            Assert.AreEqual(inserted.ProductID, selectedAfterInsert.ProductID);
            Assert.AreEqual(inserted.UnitPrice, selectedAfterInsert.UnitPrice);
            Assert.AreEqual(inserted.LineTotal, selectedAfterInsert.LineTotal);
            Assert.AreEqual(inserted.ReceivedQty, selectedAfterInsert.ReceivedQty);
            Assert.AreEqual(inserted.RejectedQty, selectedAfterInsert.RejectedQty);
            Assert.AreEqual(inserted.StockedQty, selectedAfterInsert.StockedQty);
            Assert.AreEqual(inserted.ModifiedDate, selectedAfterInsert.ModifiedDate);

            #endregion

            #region update and select by id test
            inserted.DueDate      = TestSession.Random.RandomDateTime();
            inserted.OrderQty     = TestSession.Random.RandomShort();
            inserted.ProductID    = TestSession.Random.Next();
            inserted.UnitPrice    = TestSession.Random.RandomDecimal();
            inserted.LineTotal    = TestSession.Random.RandomDecimal();
            inserted.ReceivedQty  = TestSession.Random.RandomDecimal();
            inserted.RejectedQty  = TestSession.Random.RandomDecimal();
            inserted.StockedQty   = TestSession.Random.RandomDecimal();
            inserted.ModifiedDate = TestSession.Random.RandomDateTime();

            _tested.Update(connection, new[] { inserted });

            var selectedAfterUpdateAddresss = _tested.GetByPrimaryKey(connection, new PurchaseOrderDetailModelPrimaryKey()
            {
                PurchaseOrderID       = inserted.PurchaseOrderID,
                PurchaseOrderDetailID = inserted.PurchaseOrderDetailID,
            });

            CollectionAssert.IsNotEmpty(selectedAfterUpdateAddresss);
            var selectedAfterUpdate = selectedAfterUpdateAddresss.Single();
            Assert.AreEqual(inserted.PurchaseOrderID, selectedAfterUpdate.PurchaseOrderID);
            Assert.AreEqual(inserted.PurchaseOrderDetailID, selectedAfterUpdate.PurchaseOrderDetailID);
            Assert.AreEqual(inserted.DueDate, selectedAfterUpdate.DueDate);
            Assert.AreEqual(inserted.OrderQty, selectedAfterUpdate.OrderQty);
            Assert.AreEqual(inserted.ProductID, selectedAfterUpdate.ProductID);
            Assert.AreEqual(inserted.UnitPrice, selectedAfterUpdate.UnitPrice);
            Assert.AreEqual(inserted.LineTotal, selectedAfterUpdate.LineTotal);
            Assert.AreEqual(inserted.ReceivedQty, selectedAfterUpdate.ReceivedQty);
            Assert.AreEqual(inserted.RejectedQty, selectedAfterUpdate.RejectedQty);
            Assert.AreEqual(inserted.StockedQty, selectedAfterUpdate.StockedQty);
            Assert.AreEqual(inserted.ModifiedDate, selectedAfterUpdate.ModifiedDate);

            #endregion

            #region delete test
            _tested.Delete(connection, new[] { inserted });
            var selectedAfterDeleteAddresss = _tested.GetByPrimaryKey(connection, new PurchaseOrderDetailModelPrimaryKey()
            {
                PurchaseOrderID       = inserted.PurchaseOrderID,
                PurchaseOrderDetailID = inserted.PurchaseOrderDetailID,
            });
            CollectionAssert.IsEmpty(selectedAfterDeleteAddresss);
            #endregion
            connection.Close();
        }
示例#21
0
        private Error doSplit(CompanyModel company, SplitPurchaseModel model, UserModel user)
        {
            var error = new Error();

            string lgs;

            // Proceed to do the split
            for (int i = 0; i < podList.Count() && !error.IsError; i++)
            {
                var podListItem = podList[i];
                var splitItem   = model.SplitItems[i];

                var updatedItem = updatedDetails.Items
                                  .Where(ud => ud.OriginalRowId == podListItem.Id)
                                  .FirstOrDefault();

                PurchaseOrderDetailModel pod = new PurchaseOrderDetailModel {
                    CompanyId             = company.Id,
                    PurchaseOrderHeaderId = 0,
                    LineNumber            = 0,
                    ProductId             = podListItem.ProductId.Value,
                    ProductDescription    = podListItem.ProductDescription,
                    UnitPriceExTax        = podListItem.UnitPriceExTax,
                    TaxCodeId             = podListItem.TaxCodeId,
                    DiscountPercent       = podListItem.DiscountPercent,
                    //LineStatus = podListItem.LineStatus,
                    //IsReceived = podListItem.IsReceived
                };

                if (splitItem.NewOrderQty > 0)
                {
                    // Add a new line to a new order
                    if (newPoh == null)
                    {
                        // Create the new order first
                        newPoh             = mapToModel(updatedPoh);
                        newPoh.Id          = 0;
                        newPoh.OrderNumber = LookupService.GetNextSequenceNumber(company, SequenceNumberType.PurchaseOrderNumber, 0, false);
                        error = InsertOrUpdatePurchaseOrderHeader(newPoh, user, "");
                    }
                    if (!error.IsError)
                    {
                        pod.PurchaseOrderHeaderId = newPoh.Id;
                        pod.OrderQty   = splitItem.NewOrderQty;
                        pod.LineNumber = db.GetNextPurchaseOrderDetailLineNumber(pod.PurchaseOrderHeaderId, false);
                        InsertOrUpdatePurchaseOrderDetail(pod, user, "");

                        // Move the # of split item allocations across to the new purchase order line
                        pod.OrderQty -= splitItem.NewOrderQty;
                        var allocList1 = updatedAllocations.Where(a => a.PurchaseLineId == pod.Id)
                                         .ToList();
                        AllocationService.AllocateOnPurchaseOrderSplit(updatedItem, allocList1, newPoh, pod, splitItem.NewOrderQty, user);
                    }
                }

                if (!error.IsError && splitItem.TargetOrderQty > 0)
                {
                    // Add a new line to the target order
                    pod.Id = 0;
                    pod.PurchaseOrderHeaderId = splitItem.TargetOrderId;
                    pod.OrderQty   = splitItem.TargetOrderQty;
                    pod.LineNumber = db.GetNextPurchaseOrderDetailLineNumber(pod.PurchaseOrderHeaderId, false);

                    error = InsertOrUpdatePurchaseOrderDetail(pod, user, "");

                    // Move the # of split item allocations across to the new purchase order line
                    pod.OrderQty -= splitItem.TargetOrderQty;
                    var allocList2 = updatedAllocations.Where(a => a.PurchaseLineId == pod.Id)
                                     .ToList();
                    AllocationService.AllocateOnPurchaseOrderSplit(updatedItem, allocList2, newPoh, pod, splitItem.TargetOrderQty, user);
                }

                if (!error.IsError)
                {
                    InsertOrUpdatePurchaseOrderDetail(updatedItem, user, LockPurchaseOrderDetail(updatedItem));
                }
            }

            if (!error.IsError)
            {
                // Obsolete the existing order
                origPoh.POStatus = LookupService.FindPurchaseOrderHeaderStatusByValueModel(PurchaseOrderStatus.Superceded).Id;
                lgs   = LockPurchaseOrderHeader(origPoh);
                error = InsertOrUpdatePurchaseOrderHeader(origPoh, user, lgs);
            }
            return(error);
        }
        public IActionResult PurchaseOrderAdd([FromBody] PurchaseOrderModel purchaseOrderModel)
        {

            if (ModelState.IsValid)
            {

                var Check = unitOfWork.PurchaseOrderRepository.Get();
                if (purchaseOrderModel == null)
                {
                    return Ok(0);
                }
                if (Check.Any(m => m.Code == purchaseOrderModel.Code))
                {
                    return Ok(2);
                }
                else
                {
                    if (purchaseOrderModel.OrderDate == null)
                    {
                        purchaseOrderModel.OrderDate = DateTime.Now.ToString("d/M/yyyy");
                        purchaseOrderModel.FromDateGorg = DateTime.Now.ToString("d/M/yyyy");
                        purchaseOrderModel.ToDateGorg = DateTime.Now.ToString("d/M/yyyy");
                    }

                 //   #region Warehouse
                 //   // Add Purchase Invoice Stocks Count To Portofolio
                 //decimal? RialBalance=   _stocksHelper.RialBalanc(purchaseOrderModel.PortfolioID);
                 //   if (RialBalance==null) {
                 //       return Ok(7);
                 //   }
                 //   decimal totalPartenersRial=0.0m;
                 //   foreach (var item in purchaseOrderModel.purchaseordersDetailsModels)
                 //   {
                 //       totalPartenersRial +=item.
                 //   }
                 //   #endregion

                    var model = _mapper.Map<PurchaseOrder>(purchaseOrderModel);




                    unitOfWork.PurchaseOrderRepository.Insert(model);





                    if (purchaseOrderModel.purchaseordersDetailsModels != null)
                    {
                        foreach (var item in purchaseOrderModel.purchaseordersDetailsModels)
                        {
                            PurchaseOrderDetailModel detail = new PurchaseOrderDetailModel();
                            detail.PartnerID = item.PartnerID;
                            detail.PurchaseOrderID = model.PurchaseOrderID;
                            detail.PriceType = item.PriceType;
                            detail.StockCount = item.StockCount;
                            detail.PurchaseOrderDetailID = 0;
                            detail.TradingValue = item.TradingValue;
                            detail.Remarks = item.Remarks;
                            var ob = _mapper.Map<PurchaseOrderDetail>(detail);
                            unitOfWork.PurchaseOrderDetailRepository.Insert(ob);
                        }
                    }




                    var Result = unitOfWork.Save();
                    if (Result == 200)
                    {
                        var UserID = loggerHistory.getUserIdFromRequest(Request);

                        loggerHistory.InsertUserLog(UserID, " امر الشراء", "اضافه امر الشراء", false);
                        return Ok(4);
                    }
                    else if (Result == 501)
                    {
                        return Ok(5);

                    }
                    else
                    {
                        return Ok(6);
                    }



                }



            }
            else
            {
                return Ok(3);
            }

        }
        // Convert From Auto Generated DB Model to APIModel
        private static PurchaseOrderDetailModel ConvertDBtoAPIPOModel(purchaseorderdetail pod)
        {
            PurchaseOrderDetailModel pom = new PurchaseOrderDetailModel(pod.poid, pod.itemid, pod.item.description, pod.qty, pod.delivqty, pod.item.category.name, pod.item.uom, pod.price);

            return(pom);
        }
        public PurchaseOrderDetailModel MapToModel(PurchaseOrderDetailModel item)
        {
            var newItem = Mapper.Map <PurchaseOrderDetailModel, PurchaseOrderDetailModel>(item);

            return(newItem);
        }
        private Error validateModel(PurchaseOrderDetailModel model)
        {
            var error = new Error();

            return(error);
        }
 public string LockPurchaseOrderDetail(PurchaseOrderDetailModel model)
 {
     return(db.LockRecord(typeof(PurchaseOrderDetail).ToString(), model.Id));
 }