Example #1
0
        public ActionResult ReceiveItemsByDepartment(List <DisbursementDetail> details, int id)
        {
            Dictionary <int, DisbursementDetail> dDict = DisbursementDao.GetDisbursementDetailDictByDisbursementId(id);

            //generate adjustment if items are missing
            List <AdjustmentDetail> adjustmentDetails = new List <AdjustmentDetail>();

            foreach (var d in details)
            {
                DisbursementDetail disDetail = dDict[d.DisbursementDetailId];
                if (disDetail.Quantity != d.Quantity && d.Quantity < disDetail.Quantity)
                {
                    AdjustmentDetail adDetail = new AdjustmentDetail()
                    {
                        Item = new Item()
                        {
                            ItemId = d.Item.ItemId
                        },
                        Count = disDetail.Quantity - d.Quantity
                    };

                    adjustmentDetails.Add(adDetail);
                }
            }

            if (adjustmentDetails.Count > 0)
            {
                int  userId = Convert.ToInt32(RouteData.Values["userId"]);
                User u      = new User()
                {
                    UserId = userId
                };
                Adjustment ad = AdjustmentDao.InsertAdjustment(adjustmentDetails, u);
                AdjustmentDao.CalculateAdjustmentCost(ad);
            }


            Disbursement dis = DisbursementDao.DeliverDisbursement(id, details);

            //need to update the request such as status, delivered Qty
            RequestDao.UpdateRequestById(dis.Request.RequestId);

            return(RedirectToAction("Deliveries"));
        }
        public ActionResult ReceiveItemsByDepartment(List <DisbursementDetail> details, int id)
        {
            Dictionary <int, DisbursementDetail> dDict = DisbursementDao.GetDisbursementDetailDictByDisbursementId(id);

            //generate adjustment if items are missing
            List <AdjustmentDetail> adjustmentDetails = new List <AdjustmentDetail>();
            //if detail drop to 0 , it should be removed
            List <DisbursementDetail> disDetails = new List <DisbursementDetail>();

            foreach (var d in details)
            {
                DisbursementDetail disDetail = dDict[d.DisbursementDetailId];
                if (disDetail.Quantity != d.Quantity && d.Quantity < disDetail.Quantity)
                {
                    AdjustmentDetail adDetail = new AdjustmentDetail()
                    {
                        Item = new Item()
                        {
                            ItemId = d.Item.ItemId
                        },
                        Count = disDetail.Quantity - d.Quantity
                    };
                    if (d.Quantity == 0)
                    {
                        disDetails.Add(disDetail);
                    }
                    adjustmentDetails.Add(adDetail);
                }
            }

            if (adjustmentDetails.Count > 0)
            {
                int  userId = Convert.ToInt32(RouteData.Values["userId"]);
                User u      = new User()
                {
                    UserId = userId
                };
                Adjustment ad = AdjustmentDao.InsertAdjustment(adjustmentDetails, u);
                AdjustmentDao.CalculateAdjustmentCost(ad);
            }



            Disbursement dis       = DisbursementDao.GetDisbursement(id);
            int          requestId = dis.Request.RequestId;

            dis = DisbursementDao.DeliverDisbursement(id, details);

            //remove disbursement detail with quantity of zero
            if (disDetails.Count > 0)
            {
                DisbursementDao.RemoveDisbursementDetails(disDetails);
                //details have been removed, need to remove disbursement if disbursement got no details
                //removedDisbursement = DisbursementDao.RemoveDisbursementWithoutDetails(id);
            }

            dis = DisbursementDao.GetDeliveredDisbursement(id);
            if (dis != null)
            {
                //need to update the request such as status, delivered Qty
                RequestDao.UpdateRequestById(requestId);
            }
            else
            {
                //if disbursement is removed, change disbursement status of request back to not prepared
                RequestDao.UpdateRequestDisbursementStatus(requestId);
            }


            return(RedirectToAction("Deliveries"));
        }