public void actionCreateDisbursementDetailTable()
 {
     disbursementDetail = new DisbursementDetail();
     disbursementDetail.disbursement = disbursementId;
     disbursementDetail.stationery = rf.stationery;
     disbursementDetail.requested_quantity = rf.requested_quantity;
     disbursementDetail.fulfilled_quantity = rf.fulfill_quantity;
     disbursementDetail.previous_unfulfilled_quantity = rf.unfulfill_quantity;
     data.DisbursementDetails.AddObject(disbursementDetail);
     data.SaveChanges();
 }
Пример #2
0
        public void Save_InstanceOfType()
        {
            // Arrange
            var disbursementDetail = new DisbursementDetail
            {
                DisbursementId = "DDREPOTEST",
                ItemCode       = "P030"
            };

            disbursementRepository.Save(new Disbursement()
            {
                DisbursementId  = "DDREPOTEST",
                CreatedDateTime = DateTime.Now,
            });

            // Act
            var saveResult = disbursementDetailRepository.Save(disbursementDetail);

            // Assert
            Assert.IsInstanceOfType(saveResult, typeof(DisbursementDetail));
        }
Пример #3
0
        protected void ReduceQuantity(ADProjectDb db, int disbursementDetailId, int disbursementStatusId)
        {
            DisbursementStatus disbursementStatus = db.DisbursementStatus
                                                    .Where(ds => ds.DisbursementStatusId == disbursementStatusId)
                                                    .SingleOrDefault();

            if (disbursementStatus.Description != StatusEnums.DisbursementStatusEnum.COLLECTED.ToString())
            {
                return;
            }

            DisbursementDetail disbursementDetail = db.DisbursementDetail
                                                    .Where(dd => dd.DisbursementDetailId == disbursementDetailId)
                                                    .SingleOrDefault();

            StockInfo stockInfo = db.StockInfo
                                  .Where(stock => stock.ItemCatalogueId == disbursementDetail.ItemCatalogueId)
                                  .SingleOrDefault();

            stockInfo.StockQuantity -= disbursementDetail.DisburseQuantity;
            db.SaveChanges();
        }
Пример #4
0
 /////////Voucher & UpdateDisbursement
 public string UpdateDisbursement(WCFDisbursementDetail[] input)
 {
     try
     {
         List <DisbursementDetail> detailList = new List <DisbursementDetail>();
         foreach (WCFDisbursementDetail WCFdetail in input)
         {
             DisbursementDetail detail = new DisbursementDetail();
             detail.ItemCode          = WCFdetail.ItemCode;
             detail.QuantityRequested = Convert.ToInt32(WCFdetail.QuantityRequested);
             detail.QuantityCollected = Convert.ToInt32(WCFdetail.QuantityCollected);
             detail.Remarks           = WCFdetail.Remarks;
             detailList.Add(detail);
         }
         Data.UpdateDisbursement(detailList);
         return("OK");
     }
     catch (Exception e)
     {
         return(e.ToString());
     }
 }
Пример #5
0
        public void FindByIdTestNotNull()
        {
            // Arrange
            var expected = new DisbursementDetail()
            {
                DisbursementId = "DDREPOTEST",
                ItemCode       = "E030",
            };

            disbursementRepository.Save(new Disbursement()
            {
                DisbursementId  = "DDREPOTEST",
                CreatedDateTime = DateTime.Now,
            });
            disbursementDetailRepository.Save(expected);

            // Act
            var result = disbursementDetailRepository.FindById("DDREPOTEST", "E030");

            // Assert
            Assert.IsInstanceOfType(result, typeof(DisbursementDetail));
        }
Пример #6
0
        public static DisbursementDetail AddDisbursementDetail(LussisEntities context, DisbursementDetail disbursementDetail)
        {
            // TODO : Put a filter for what kind of disbursement to edit
            DisbursementDetail detail = context.DisbursementDetails
                                        .Where(det => det.DisbursementNo.Equals(disbursementDetail.DisbursementNo) && det.ItemNo.Equals(disbursementDetail.ItemNo))
                                        .FirstOrDefault();

            if (detail != null)
            {
                // Append to existing if it already exists
                detail.Needed   += disbursementDetail.Needed;
                detail.Promised += disbursementDetail.Promised;
                detail.Received += disbursementDetail.Received;
            }
            else
            {
                // Add new detail
                context.DisbursementDetails.Add(disbursementDetail);
            }

            context.SaveChanges();
            return(disbursementDetail);
        }
        //methods for departmentwise consolidation


        //moblie
        public void saveDisburseList(List <string> reqIdByDeptList, Dictionary <string, int> itemDic, Disbursement NewDisbursement)
        {
            using (InventorySysDBEntities context = new InventorySysDBEntities())
            {
                context.Disbursements.Add(NewDisbursement);
                foreach (string reqId in reqIdByDeptList)
                {
                    var         q = from x in context.Requisitions where x.Requisition_ID == reqId select x;
                    Requisition r = q.First();
                    r.Disbursement_ID = NewDisbursement.Disbursement_ID;
                }

                foreach (string itemID in itemDic.Keys)
                {
                    DisbursementDetail disburementDetail = new DisbursementDetail();
                    disburementDetail.Disbursement_ID = NewDisbursement.Disbursement_ID;
                    disburementDetail.Item_ID         = itemID;
                    disburementDetail.Quantity        = itemDic[itemID];
                    context.DisbursementDetails.Add(disburementDetail);
                }
                context.SaveChanges();
            }
        }
Пример #8
0
        //public void ChangeDisbursementDisbursingToAllocating()
        //{
        //    List<Disbursement> dList = disbursementDAO.SearchDbmByStatus("disbursing");
        //    foreach (var item in dList)
        //    {
        //        item.Status = "allocating";
        //        item.DateCreated = null;
        //        item.DatePlanToCollect = null;
        //        disbursementDAO.UpdateDbmStatus(item);
        //    }
        //}
        //public void ChangeDisbursementAllocatingToDisbursing()
        //{
        //    List<Disbursement> dList = disbursementDAO.SearchDbmByStatus("allocating");
        //    foreach (var item in dList)
        //    {
        //        item.Status = "disbursing";
        //        item.DateCreated = DateTime.Today;
        //        item.CollectionPointCode = departmentDAO.GetDepartmentInfo(item.DepartmentCode).CollectionPointCode;
        //        disbursementDAO.UpdateDbmStatus(item);

        //    }
        //}
        public List <DisbursementDetail> GenerateDisbursementDetail()
        {
            List <RequestDetail>      requestDetailList      = this.GetNotDisbursedRequestDetailList();
            List <DisbursementDetail> ddList                 = new List <DisbursementDetail>();
            Dictionary <String, int>  quantRetrievedRemained = new Dictionary <string, int>();

            foreach (var item in this.GetCurrentRetrieval().RetrievalDetails)
            {
                quantRetrievedRemained.Add(item.ItemCode, (int)item.QuantityRetrieved);
            }

            requestDetailList.Sort();

            foreach (var item in requestDetailList)
            {
                if (quantRetrievedRemained[item.ItemCode] > 0)
                {
                    DisbursementDetail dd = new DisbursementDetail();
                    dd.RequestCode = item.RequestCode;
                    dd.ItemCode    = item.ItemCode;
                    //requestDAO.GetRequest(item.RequestCode).DepartmentCode;
                    if (quantRetrievedRemained[item.ItemCode] > item.RemainingQuant)
                    {
                        dd.Quantity = item.RemainingQuant;
                        quantRetrievedRemained[item.ItemCode] -= (int)item.RemainingQuant;
                    }
                    else
                    {
                        dd.Quantity = quantRetrievedRemained[item.ItemCode];
                        quantRetrievedRemained[item.ItemCode] = 0;
                    }
                    ddList.Add(dd);
                }
            }
            return(ddList);
        }
Пример #9
0
 public int AddDisbursementDetail(DisbursementDetail disbursementDetail)
 {
     se.DisbursementDetails.Add(disbursementDetail);
     return(se.SaveChanges());
 }
        public void TestInitialize()
        {
            context = new ApplicationDbContext();
            disbursementRepository       = new DisbursementRepository(context);
            disbursementdetailRepository = new DisbursementDetailRepository(context);
            disbursementService          = new DisbursementService(context);
            itemRepository              = new ItemRepository(context);
            retrievalRepository         = new RetrievalRepository(context);
            requisitionRepository       = new RequisitionRepository(context);
            requisitiondetailRepository = new RequisitionDetailRepository(context);
            departmentRepository        = new DepartmentRepository(context);

            Retrieval retrieval = new Retrieval();

            if (retrievalRepository.FindById("TEST") == null)
            {
                //save retrieval object into db

                retrieval.RetrievalId     = "TEST";
                retrieval.CreatedDateTime = DateTime.Now;
                retrievalRepository.Save(retrieval);
            }
            else
            {
                retrieval = retrievalRepository.FindById("TEST");
            }

            //save disbursement object into db

            Disbursement disbursement = new Disbursement();

            if (disbursementRepository.FindById("TEST") == null)
            {
                disbursement.DisbursementId  = "TEST";
                disbursement.CreatedDateTime = DateTime.Now;
                disbursement.Retrieval       = retrieval;
            }
            else
            {
                disbursement = disbursementRepository.FindById("TEST");
            }

            disbursementRepository.Save(disbursement);

            //save disbursement detail object into db
            DisbursementDetail detail = new DisbursementDetail()
            {
                Disbursement   = disbursement,
                Item           = context.Item.First(),
                PlanQuantity   = 20,
                ActualQuantity = 20
            };

            disbursementdetailRepository.Save(detail);

            Requisition requisition = new Requisition()
            {
                RequisitionId   = "TEST",
                Retrieval       = retrieval,
                CreatedDateTime = DateTime.Now,
                Status          = new StatusService(context).FindStatusByStatusId(8)
            };

            requisitionRepository.Save(requisition);
        }
Пример #11
0
        //public static void UpdateDisbursementsStatus()
        //{
        //    using(var ctx = new UniDBContext())
        //    {
        //        List<Disbursement> disbursements = ctx.Disbursements.Include("DisbursementDetails").Include("DisbursementDetails.Item")
        //            .Where(d => d.Status == (int)DisbursementStatus.Allocated && DbFunctions.TruncateTime(d.Date) < DbFunctions.TruncateTime(DateTime.Today))
        //            .ToList();

        //        if(disbursements != null)
        //        {
        //            foreach(var d in disbursements)
        //            {
        //                d.Status = (int)DisbursementStatus.Prepared;
        //            }

        //            ctx.SaveChanges();
        //        }
        //    }
        //}

        public static void GenerateDisbursements(List <RetrievalItem> retrievalItems)
        {
            using (var ctx = new UniDBContext())
            {
                List <int> requestStatus = new List <int>()
                {
                    (int)RequestStatus.Approved,
                    (int)RequestStatus.PartiallyDelivered
                };


                List <int> itemIds = retrievalItems.Select(r => r.ItemId).ToList();
                //item id key and its corresponding item
                Dictionary <int, Item> itemDict = ctx.Items.Where(i => itemIds.Contains(i.ItemId)).ToDictionary(i => i.ItemId);

                //get list of request which contins the requestdetail of item ids retrieved
                Dictionary <int, List <RequestDetail> > requestDetails = ctx.RequestDetails.Include("Request").Include("Item")
                                                                         .Where(rd => requestStatus.Contains(rd.Request.Status) && DbFunctions.TruncateTime(rd.Request.Date) < DbFunctions.TruncateTime(DateTime.Today) &&
                                                                                itemIds.Contains(rd.Item.ItemId))
                                                                         .GroupBy(rd => rd.Item.ItemId)
                                                                         .ToDictionary(c => c.Key, c => c.ToList());

                foreach (var k in requestDetails.Keys)
                {
                    foreach (var detail in requestDetails[k])
                    {
                        Debug.WriteLine("Item Id {0} and Item Amount is {1}", detail.Item.ItemId, detail.Quantity);
                    }
                }



                //key of request and disbursementdetail list for generating disbursement
                Dictionary <int, List <DisbursementDetail> > ddDict = new Dictionary <int, List <DisbursementDetail> >();


                foreach (var itemId in itemIds)
                {
                    Item i      = itemDict[itemId];
                    var  rDList = requestDetails[itemId];

                    foreach (var rd in rDList)
                    {
                        var allocatedAmount       = 0;
                        var requiredAmtForEachReq = rd.Quantity - rd.DeliveredQuantity;
                        if (i.Quantity > requiredAmtForEachReq)
                        {
                            allocatedAmount = requiredAmtForEachReq;
                            i.Quantity      = i.Quantity - requiredAmtForEachReq;
                        }
                        else if (i.Quantity == requiredAmtForEachReq)
                        {
                            allocatedAmount = i.Quantity;
                            i.Quantity      = 0;
                        }
                        else
                        {
                            allocatedAmount = i.Quantity;
                            i.Quantity      = 0;
                        }

                        if (allocatedAmount != 0)
                        {
                            DisbursementDetail dd = new DisbursementDetail()
                            {
                                Item     = i,
                                Quantity = allocatedAmount
                            };

                            ctx.DisbursementDetails.Add(dd);

                            Request r = ctx.RequestDetails.Where(rDetail => rDetail.RequestDetailId == rd.RequestDetailId).Include("Request").Select(rDetail => rDetail.Request).SingleOrDefault();
                            r.DisbursementStatus = (int)RequestRetrievalStatus.Prepared;
                            if (ddDict.ContainsKey(r.RequestId))
                            {
                                ddDict[r.RequestId].Add(dd);
                            }
                            else
                            {
                                ddDict[r.RequestId] = new List <DisbursementDetail>();
                                ddDict[r.RequestId].Add(dd);
                            }
                        }


                        if (i.Quantity == 0)
                        {
                            break;
                        }
                    }
                }

                ctx.SaveChanges();


                foreach (KeyValuePair <int, List <DisbursementDetail> > k in ddDict)
                {
                    Request r = ctx.Requests.Include("Department").Where(req => req.RequestId == k.Key).SingleOrDefault();
                    r.DisbursementStatus = (int)RequestRetrievalStatus.Prepared;
                    Disbursement d = new Disbursement()
                    {
                        DisbursementDetails = k.Value,
                        Date       = DateTime.Now,
                        Request    = r,
                        Department = r.Department
                    };
                    ctx.Disbursements.Add(d);
                }

                ctx.SaveChanges();
            }
        }
 public void UpdateDisbursementDetail(DisbursementDetail detail)
 {
     LUSSISContext.Entry(detail).State = EntityState.Modified;
     LUSSISContext.SaveChanges();
 }
Пример #13
0
        public static bool SubmitRetrieval(int retrievalNo, List <string> deptCodeList, List <string> itemNoList, List <int> actualList)
        {
            LussisEntities context          = new LussisEntities();
            DateTime       today            = DateTime.Today;
            int            daysUntilMonday  = ((int)DayOfWeek.Monday - (int)today.DayOfWeek + 7) % 7;
            DateTime       disbursementDate = today.Date.AddDays(daysUntilMonday);

            // Update RetrievalDate
            Retrieval retrieval = GetRetrieval(context, retrievalNo);

            retrieval.Date = DateTime.Now;

            // For each RetrievalDetail
            for (int i = 0; i < actualList.Count; i++)
            {
                string deptCode = deptCodeList[i];
                string itemNo   = itemNoList[i];
                int    actual   = actualList[i];

                // Update RetrievalDetail
                RetrievalDetail retrievalDetail = GetRetrievalDetail(context, retrievalNo, deptCode, itemNo);
                retrievalDetail.Actual = actual;

                // Update StationeryCatalogueCurrentyQty
                StationeryCatalogue stock = GetStock(context, itemNo);
                stock.CurrentQty -= actual;

                // Add StockTxnDetail
                StockTxnDetail txn = new StockTxnDetail();
                txn.ItemNo      = itemNo;
                txn.Date        = retrieval.Date;
                txn.AdjustQty   = -actual;
                txn.RecordedQty = stock.CurrentQty;
                txn.Remarks     = GetDepartment(context, deptCode).DeptName;
                txn             = AddStockTxn(context, txn);

                // Add Disbursement
                Disbursement disbursement = GetPendingDisbursement(context, deptCode, disbursementDate);
                if (disbursement == null)
                {
                    disbursement = new Disbursement();
                    disbursement.DisbursementNo    = int.MaxValue;
                    disbursement.DeptCode          = deptCode;
                    disbursement.DisbursementDate  = disbursementDate;
                    disbursement.RepEmpNo          = GetDepartment(context, deptCode).RepEmpNo;
                    disbursement.CollectionPointNo = GetDepartment(context, deptCode).CollectionPointNo;
                    disbursement.Pin    = new Random().Next(10000, 99999);
                    disbursement.Status = "Pending";
                    disbursement        = AddDisbursement(context, disbursement);
                }

                // Add DisbursementDetail
                DisbursementDetail disbursementDetail = new DisbursementDetail();
                disbursementDetail.DisbursementNo = disbursement.DisbursementNo;
                disbursementDetail.ItemNo         = itemNo;
                disbursementDetail.Needed         = retrievalDetail.Needed + retrievalDetail.BackLogQty;
                disbursementDetail.Promised       = actual;
                disbursementDetail.Received       = actual;
                disbursementDetail = AddDisbursementDetail(context, disbursementDetail);
            }

            context.SaveChanges();
            return(true);
        }
Пример #14
0
 public void updateDisbursementDetail(DisbursementDetail dd)
 {
     unitOfWork.GetRepository <DisbursementDetail>().Update(dd);
     unitOfWork.SaveChanges();
 }
        public void actionUpdateToDisbursement(int req_dept, int stationery)
        {
            FulfillmentController fc = new FulfillmentController();

            rf=fc.actionGetFulfillmentByDepartmentAndStationery(req_dept, stationery);

            // -------------- Disbursement Table Process ----------
            disbursement = actionGetDisbursementByDepartmentAndTodayDate(req_dept);

            if (disbursement == null)
                actionCreateDisbursementTable(req_dept, getDeptRept(req_dept));

            disbursementId=actionGetDisbursementIdByDepartmentAndDate(req_dept, disbursement.distributed_date);

            // -------------- Disbursement Detail Table Process ----------
            disbursementDetail = actionGetDisbursementDetailByDepartmentAndStationery(stationery);

            if (disbursementDetail == null)
                actionCreateDisbursementDetailTable();
            else
                actionUpdateDisbursementDetailTable();

            // -------------- Update Stationery Process ----------
            new StationeryController().actionUpdateQty(rf.stationery, rf.fulfill_quantity);

            // -------------- Update StockTransaction Process ----------
            new StockTransactionController().actionCreateStockTransaction(stationery, new StationeryController().actionGetQtyInStock(stationery),
                "Disbursement", "- "+rf.fulfill_quantity.ToString());

            // -------------- Remaining Requisition Fulfillment Process ----------
            unfulfillQty = rf.requested_quantity - rf.fulfill_quantity;
            if (unfulfillQty == 0)
                fc.actionDeleteFulfillmentByObject(rf);
            else
                fc.actionUpdateFulfillmentByObject(rf, unfulfillQty);

            // -------------- Update Requisition Status Process ----------
            new RequisitionController().actionRequisitionStatusChangeToDistributedByDepartment(stationery, req_dept);
        }
        string ProcessAndInsertDisbursment(XmlDocument doc, string criteria)
        {
            // creating object of CultureInfo
            CultureInfo cultures = new CultureInfo("en-US");

            string referenceNumber;

            try
            {
                int deviceLocationInfoId = ParseDeviceLocationInfo.SaveInfo(doc);

                #region data fetched from xml
                string senderVirtialId, amountString;

                senderVirtialId = doc.GetElementsByTagName("SenderVID").Item(0).Attributes["value"].Value;
                amountString    = doc.GetElementsByTagName("TxnAmount").Item(0).Attributes["value"].Value;
                referenceNumber = doc.GetElementsByTagName("ReferenceNo").Item(0).Attributes["value"].Value;
                var receiverList = doc.GetElementsByTagName("ReceiverVID");
                #endregion

                double amount;
                amount = 0;

                double.TryParse(amountString, NumberStyles.Any, cultures, out amount);

                Disbursement disbursment = new Disbursement
                {
                    SenderVID            = senderVirtialId,
                    Amount               = amount,
                    ReferenceNo          = referenceNumber,
                    DeviceLocationInfoId = deviceLocationInfoId,
                    Criteria             = criteria,
                    CreatedOn            = DateTime.Now,
                    EntityState          = EntityState.Added
                };
                _businessLayer.AddDisbursment(disbursment);

                List <DisbursementDetail> disbursementDetails = new List <DisbursementDetail>();
                for (int i = 0; i < receiverList.Count; i++)
                {
                    DisbursementDetail disbursementDetail = new DisbursementDetail();

                    amountString = receiverList.Item(i).Attributes["amount"].Value;
                    double.TryParse(amountString, NumberStyles.Any, cultures, out amount);
                    disbursementDetail.ReceiverVID    = receiverList.Item(i).Attributes["value"].Value;
                    disbursementDetail.Amount         = amount;
                    disbursementDetail.DisbursementId = disbursment.Id;
                    disbursementDetail.EntityState    = EntityState.Added;
                    disbursementDetails.Add(disbursementDetail);
                }
                _businessLayer.AddDisbursmentDetail(disbursementDetails.ToArray());

                return(referenceNumber);
            }

            catch (Exception ex)
            {
                throw new Exception(ex.Message);
                //return ex.Message;
            }
        }
        protected void btnConfirm_Click(object sender, EventArgs e)
        {
            Staff  stf   = (Staff)Session["LoginStaff"];
            string DisId = (string)ViewState["DisID"];
            List <DisbursementDetail> DDList      = new List <DisbursementDetail>();
            List <ReceivedItemModel>  recItemList = new List <ReceivedItemModel>();

            for (int i = 0; i < dgvDisbursmentItem.Rows.Count; i++)
            {
                string itemCode = dgvDisbursmentItem.Rows[i].Cells[0].Text;
                string itemName = dgvDisbursmentItem.Rows[i].Cells[1].Text;
                int    needQty  = Convert.ToInt32(dgvDisbursmentItem.Rows[i].Cells[2].Text);
                txtQty = (TextBox)dgvDisbursmentItem.Rows[i].Cells[3].FindControl("txtQty");
                int    recQty = Convert.ToInt32(txtQty.Text);
                string uom    = dgvDisbursmentItem.Rows[i].Cells[4].Text;

                DisbursementDetail dd = new DisbursementDetail();
                dd.Disbursement_ID = DisId;
                dd.Item_ID         = itemCode;
                dd.Quantity        = recQty;
                DDList.Add(dd);

                ReceivedItemModel recItem = new ReceivedItemModel();
                recItem.itemCode = itemCode;
                recItem.itemName = itemName;
                recItem.needQty  = needQty;
                recItem.recQty   = recQty;
                recItem.restQty  = needQty - recQty;
                recItem.uom      = uom;
                recItemList.Add(recItem);
            }


            if (cbxReserved.Checked)
            {
                lblReqtype.Visible        = true;
                dgvSpeRequisition.Visible = true;
                btnCreate.Visible         = true;
                btnCancel.Visible         = true;


                List <ReceivedItemModel> restItemList = new List <ReceivedItemModel>();
                foreach (ReceivedItemModel recitem in recItemList)
                {
                    if (recitem.restQty > 0)
                    {
                        restItemList.Add(recitem);
                    }
                }
                Session["restItemList"]      = restItemList;
                dgvSpeRequisition.DataSource = restItemList;
                dgvSpeRequisition.DataBind();

                try
                {
                    ConfirmReceivedController.ConfirmRecivedItems(DisId, DDList, stf.Dept_ID);
                }
                catch (Exception ex)
                {
                    btnConfirm.Visible = false;
                    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Receive disbursement fail!')", true);
                }
                btnConfirm.Visible = false;
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Received success!')", true);
            }
            else
            {
                try
                {
                    ConfirmReceivedController.ConfirmRecivedItems(DisId, DDList, stf.Dept_ID);
                }
                catch (Exception ex)
                {
                    btnConfirm.Visible = false;
                    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Receive disbursement fail!')", true);
                    initPage();
                }

                btnConfirm.Visible = false;
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Received success!')", true);
                initPage();
            }
        }
        public void TestInitialize()
        {
            context = new ApplicationDbContext();

            stockmovementService = new StockMovementService(context);
            itemService          = new ItemService(context);

            stockmovementRepository = new StockMovementRepository(context);

            ddRepository           = new DisbursementDetailRepository(context);
            sadRepository          = new StockAdjustmentDetailRepository(context);
            dodRepository          = new DeliveryOrderDetailRepository(context);
            disbursementRepository = new DisbursementRepository(context);
            doRepository           = new DeliveryOrderRepository(context);
            saRepository           = new StockAdjustmentRepository(context);

            //create new test object and save into db
            StockMovement sm = new StockMovement()
            {
                StockMovementId   = IdService.GetNewStockMovementId(context),
                DisbursementId    = "TEST",
                StockAdjustmentId = "TEST",
                DeliveryOrderNo   = "TEST",
                Item             = context.Item.Where(x => x.ItemCode == "C003").First(),
                CreatedDateTime  = DateTime.Now,
                OriginalQuantity = 1,
                AfterQuantity    = 2
            };

            stockmovementRepository.Save(sm);

            //create new disbursement object and save into db
            Disbursement disbursement = new Disbursement();

            if (disbursementRepository.FindById("TEST") == null)
            {
                disbursement.DisbursementId  = "TEST";
                disbursement.CreatedDateTime = DateTime.Now;
            }
            else
            {
                disbursement = disbursementRepository.FindById("TEST");
            }
            disbursementRepository.Save(disbursement);

            //create new DisbursementDetail object and save into db
            DisbursementDetail detail = new DisbursementDetail()
            {
                DisbursementId = "TEST",
                Item           = context.Item.First(),
                PlanQuantity   = 3,
                ActualQuantity = 3
            };

            ddRepository.Save(detail);

            //create new DO object and save into db
            DeliveryOrder d = new DeliveryOrder();

            if (doRepository.FindById("TEST") == null)
            {
                d.DeliveryOrderNo = "TEST";
                d.CreatedDateTime = DateTime.Now;
            }
            else
            {
                d = doRepository.FindById("TEST");
            }
            doRepository.Save(d);

            //create new DO detail object and save into db
            DeliveryOrderDetail dod = new DeliveryOrderDetail()
            {
                DeliveryOrder  = d,
                Item           = context.Item.First(),
                PlanQuantity   = 4,
                ActualQuantity = 4
            };

            dodRepository.Save(dod);

            //create new SA object and save into db
            StockAdjustment SA = new StockAdjustment();

            if (saRepository.FindById("TEST") == null)
            {
                SA.StockAdjustmentId = "TEST";
                SA.CreatedDateTime   = DateTime.Now;
            }
            else
            {
                SA = saRepository.FindById("TEST");
            }
            saRepository.Save(SA);

            //create new SA detail object and save into db
            StockAdjustmentDetail SADetail = new StockAdjustmentDetail()
            {
                StockAdjustment  = SA,
                Item             = context.Item.First(),
                OriginalQuantity = 2,
                AfterQuantity    = 4
            };

            sadRepository.Save(SADetail);
        }
        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"));
        }
Пример #20
0
        /// <summary>
        /// CreateDisbursement
        /// </summary>
        /// <param name="EmpID">Employee ID(Clerk)</param>
        /// <returns></returns>
        public bool createDisbursement(string EmpID)
        {
            bool result = true;

            string[] deptId = new string[] { "ENGL", "CPSC", "COMM", "REGR", "ZOOL" };

            for (int i = 0; i < deptId.Length; i++)
            {
                string             deptID  = deptId[i];
                List <Requisition> reqList = ctx.Requisition.Where(x => x.StatusID == 3 && x.DeptID == deptID).ToList();

                if (reqList.FirstOrDefault() != null)
                {
                    Department dept    = ctx.Department.Where(x => x.DeptID == deptID).FirstOrDefault();
                    Employee   deptRep = ctx.Employee.Where(x => x.DeptID == deptID && x.RoleID == "DR").FirstOrDefault();


                    Disbursement disb = new Disbursement();
                    disb.Date       = DateTime.Now;
                    disb.EmpID      = Convert.ToInt32(EmpID);
                    disb.DeptID     = deptID;
                    disb.CPID       = dept.CPID;
                    disb.ReceivedBy = deptRep.EmpID;
                    disb.Status     = "PENDING";

                    ctx.Disbursement.Add(disb);
                    ctx.SaveChanges();

                    Disbursement lastDisb = ctx.Disbursement.ToList().Last();
                    int          DisID    = 1;
                    if (lastDisb != null)
                    {
                        DisID = lastDisb.DisID;
                    }

                    foreach (Requisition req in reqList)
                    {
                        req.DisID = DisID;
                        List <RequisitionDetail> reqDetailList = ctx.RequisitionDetail.Where(x => x.ReqID == req.ReqID).ToList();
                        foreach (RequisitionDetail reqDetail in reqDetailList)
                        {
                            DisbursementDetail disbDetail = new DisbursementDetail();
                            disbDetail.DisID  = DisID;
                            disbDetail.ItemID = reqDetail.ItemID;
                            disbDetail.Qty    = reqDetail.IssueQty;
                            ctx.DisbursementDetail.Add(disbDetail);
                        }
                    }
                }
            }
            try
            {
                ctx.SaveChanges();
            }
            catch
            {
                result = false;
            }

            if (result == true)
            {
                if (EmpID == null)
                {
                    EmpID = "0";
                }
                List <Requisition> reqList = ctx.Requisition.Where(x => x.StatusID == 3).ToList();
                foreach (Requisition req in reqList)
                {
                    //send notification to req holders:
                    NotificationController nt = new NotificationController();
                    nt.sendNotification(5, Convert.ToInt32(EmpID), Convert.ToString(req.ReqID));
                }
                //send notification about collection one day after.
                NotificationController nt2 = new NotificationController();
                DateTime d = DateTime.Now;
                nt2.sendNotification(11, Convert.ToInt32(EmpID), d.AddDays(1).ToString("dd'/'MM'/'yyyy"));
            }

            return(result);
        }
        static void Main(string[] args)
        {
            //Console.WriteLine(requestDetailsDAO.SearchRequestbyStatus("proce").ToList().Count);
            Disbursement d = new Disbursement();

            d.DisbursementCode    = "DBM180101162312124";
            d.DateCreated         = DateTime.ParseExact("2018-01-02", "yyyy-MM-dd", null);
            d.DepartmentCode      = "ENGL";
            d.DateDisbursed       = DateTime.ParseExact("2018-01-02", "yyyy-MM-dd", null);
            d.UserName            = "******";
            d.ReceivedBy          = "*****@*****.**";
            d.Notes               = "Test2";
            d.Status              = "not disbursed";
            d.DisbursementDetails = null;

            Disbursement dUpdate = GetDisbursementByCode(d.DisbursementCode);

            d.Notes = "Test Update disbursement.";

            Disbursement dUpdateDbmDetail = GetDisbursementByCode("DBMDisbDetailsTest");

            PrintDisbursement(dUpdateDbmDetail);
            //dUpdateDbmDetail.DisbursementDetails = new List<DisbursementDetail>();
            DisbursementDetail dd1 = new DisbursementDetail();

            dd1.RequestCode = "RQ123456789";
            dd1.ItemCode    = "P010";
            dd1.Quantity    = 20;
            DisbursementDetail dd2 = new DisbursementDetail();

            dd2.RequestCode = "RQ123456789";
            dd2.ItemCode    = "P011";
            dd2.Quantity    = 25;
            dUpdateDbmDetail.DisbursementDetails.Add(dd1);
            dUpdateDbmDetail.DisbursementDetails.Add(dd2);
            if (dUpdateDbmDetail.DisbursementDetails == null)
            {
                Console.WriteLine("Null");
            }


            DateTime date1 = DateTime.ParseExact("2017-12-01", "yyyy-MM-dd", null);
            DateTime date2 = DateTime.ParseExact("2018-01-04", "yyyy-MM-dd", null);

            Department department = new DepartmentDAO().GetDepartmentInfo("ISS1");


            Console.WriteLine("1. GetAllDisbursement");
            Console.WriteLine("2. GetDisbursementByCode");
            Console.WriteLine("3. SearchDisbursementByCode");
            Console.WriteLine("4. SearchDbmByDateDisbursed");
            Console.WriteLine("5. SearchDbmByPeriodDisbursed");
            Console.WriteLine("6. SearchDbmByDateCreated");
            Console.WriteLine("7. SearchDbmByPeriodCreated");
            Console.WriteLine("8. SearchDbmByDepartment");
            Console.WriteLine("9. SearchDbmByDepartmentCode");
            Console.WriteLine("10. SearchDbmByStatus");
            Console.WriteLine("11. UpdateDisbursement");
            Console.WriteLine("12. UpdateDbmDisbursementDetail");
            Console.WriteLine("13. AddDisbursement");
            Console.WriteLine("14. Collection Point");

            Console.WriteLine();

            Console.Write("Please enter the test case: ");
            String test = Console.ReadLine();

            switch (test)
            {
            case "1":
                PrintDisbursementList(GetAllDisbursement());
                break;

            case "2":
                PrintDisbursement(GetDisbursementByCode("DBMDisbDetailsTest"));
                break;

            case "3":
                PrintDisbursementList(SearchDisbursementByCode("18"));
                break;

            case "4":
                PrintDisbursementList(SearchDbmByDateDisbursed(date2));
                break;

            case "5":
                PrintDisbursementList(SearchDbmByPeriodDisbursed(date1, date2));
                break;

            case "6":
                PrintDisbursementList(SearchDbmByDateCreated(date1));
                break;

            case "7":
                PrintDisbursementList(SearchDbmByPeriodCreated(date1, date2));
                break;

            case "8":
                PrintDisbursementList(SearchDbmByDepartment(department));
                break;

            case "9":
                PrintDisbursementList(SearchDbmByDepartmentCode("ENGL"));
                break;

            case "10":
                PrintDisbursementList(SearchDbmByStatus("not disbursed"));
                break;

            case "11":
                Console.WriteLine(UpdateDisbursement(dUpdate));
                break;

            case "12":
                Console.WriteLine(UpdateDbmDisbursementDetail(dUpdateDbmDetail));
                break;

            case "13":
                Console.WriteLine(AddDisbursement(d));
                break;

            case "14":
                Console.WriteLine(CheckCollectionPointDAO());
                break;

            default:
                Console.WriteLine(UpdateDbmDisbursementDetail(dUpdateDbmDetail));
                break;
            }
        }
Пример #22
0
        private List <Disbursement> AddDisbursementDetailsForEachDisbursement(List <Disbursement> disbursementList, List <Requisition> requestList)
        {
            // Initialize inventory map
            Dictionary <string, int> inventory = new Dictionary <string, int>();

            // create Disbursement Details, one for each item by department
            foreach (Disbursement d in disbursementList)
            {
                // prepare to populate DisbursementDetails
                d.DisbursementDetails = new List <DisbursementDetail>();

                // populate them based on CreatedDate first
                foreach (Requisition rq in requestList.OrderBy(r => r.CreatedDateTime))
                {
                    if (rq.Department == d.Department)
                    {
                        foreach (RequisitionDetail rd in rq.RequisitionDetails)
                        {
                            var query = d.DisbursementDetails.Where(x => x.Item == rd.Item);

                            // Use quantity in inventory map if available, else get current inventory level in context
                            int currentQuantity;
                            if (inventory.ContainsKey(rd.ItemCode))
                            {
                                currentQuantity = inventory[rd.ItemCode];
                            }
                            else
                            {
                                inventory[rd.ItemCode] = new ItemService(context).FindInventoryByItemCode(rd.ItemCode).Quantity;
                                currentQuantity        = inventory[rd.ItemCode];
                            }

                            // if a DisbursementDetail has the same ItemCode as the RequisitionDetail
                            if (query.Count() > 0)
                            {
                                DisbursementDetail existingDD = query.ToList().First();
                                existingDD.PlanQuantity += Math.Min(rd.Quantity, inventory[rd.ItemCode]);

                                // Deduct quantity
                                inventory[rd.ItemCode] -= existingDD.PlanQuantity;
                            }
                            else // Create a DD with the RD
                            {
                                DisbursementDetail newDD = new DisbursementDetail();
                                newDD.Item         = rd.Item;
                                newDD.ItemCode     = rd.ItemCode;
                                newDD.PlanQuantity = Math.Min(rd.Quantity, inventory[rd.ItemCode]);
                                newDD.Bin          = rd.Item.Bin;
                                newDD.Status       = statusRepository.FindById(17);

                                // Deduct quantity
                                inventory[rd.ItemCode] -= newDD.PlanQuantity;

                                // Add to the Disbursement
                                d.DisbursementDetails.Add(newDD);
                            }
                        }
                    }
                }
            }

            return(disbursementList);
        }
        protected void btnAddToRetrial_Click(object sender, EventArgs e)
        {
            AddNewRetrieval();
            int retrId = myBz.FindRetrListByEmplIdAndStatus(storeClerkId, "In Progress").FirstOrDefault().RetrievalId;

            //Get all RequisitionDetails
            foreach (Requisition r in approvedReqList)
            {
                myBz.UpdateReqStatus(r.RequisitionId, "In Progress");
                reqDetList.AddRange(myBz.FindAllReqDetByReqId(r.RequisitionId));
            }

            //Use RequisitionDetails to Create Retrievals and Disbursement:
            //For Retrieval <----------Dictionary<ItemCode,TotalRequestedQty>
            Dictionary <string, int> retrItemQty = new Dictionary <string, int>();
            //For Disbursement <----------Dictionary<DepartmentId, Dictionary<ItemCode,TotalRequestedQty>>
            Dictionary <string, Dictionary <String, int> > deptDisbList = new Dictionary <string, Dictionary <String, int> >();

            foreach (RequisitionDetail reqDet in reqDetList)
            {
                //For retrieval
                if (!retrItemQty.Keys.Contains(reqDet.ItemCode))
                {
                    retrItemQty.Add(reqDet.ItemCode, reqDet.QuantityRequest);
                }
                else
                {
                    retrItemQty[reqDet.ItemCode] += reqDet.QuantityRequest;
                }

                //For Disbursement
                string deptId = myBz.FindDeptByReqId(reqDet.RequisitionId).DeptId;
                if (!deptDisbList.Keys.Contains(deptId))
                {
                    Dictionary <string, int> a = new Dictionary <string, int>();
                    a.Add(reqDet.ItemCode, reqDet.QuantityRequest);
                    deptDisbList.Add(deptId, a);
                }
                else
                {
                    if (!deptDisbList[deptId].Keys.Contains(reqDet.ItemCode))
                    {
                        deptDisbList[deptId].Add(reqDet.ItemCode, reqDet.QuantityRequest);
                    }
                    else
                    {
                        deptDisbList[deptId][reqDet.ItemCode] += reqDet.QuantityRequest;
                    }
                }
            }

            //Create Disbursement for each Dept and DisbursementDetails
            foreach (KeyValuePair <string, Dictionary <string, int> > entry in deptDisbList)
            {
                if (!HaveExistingDisbursement(entry.Key))
                {
                    AddDisbursement(entry.Key);
                }

                Disbursement currentDisb = myBz.FindDisbursementsByStatus("Pending").Where(x => x.StoreClerkId == storeClerkId && x.DeptId == entry.Key).First();
                if (currentDisb.Status == "Pending")
                {
                    foreach (KeyValuePair <string, int> disItemQty in entry.Value)
                    {
                        DisbursementDetail disbDet = new DisbursementDetail();
                        disbDet.ItemCode          = disItemQty.Key;
                        disbDet.DisbursementId    = currentDisb.DisbursementId;
                        disbDet.QuantityRequested = disItemQty.Value;
                        Stationery s = myBz.FindStationeryByItemCode(disItemQty.Key);
                        if (disItemQty.Value <= s.QuantityInStock)
                        {
                            disbDet.QuantityReceived = disItemQty.Value;
                        }
                        else
                        {
                            disbDet.QuantityReceived = s.QuantityInStock;
                        }
                        myBz.AddDisbDetail(disbDet);
                    }
                    currentDisb.Status = "In Progress";
                    myBz.UpdateDisbursement(currentDisb);
                }
            }

            //Sorting retdet by location
            var newRetrDetList = retrItemQty.Keys.ToList();

            newRetrDetList.Sort((x, y) => myBz.FindStationeryByItemCode(x).Bin.CompareTo(myBz.FindStationeryByItemCode(y).Bin));
            //Create Retrieval
            foreach (var key in newRetrDetList)
            {
                Stationery s = myBz.FindStationeryByItemCode(key);
                if (retrItemQty[key] <= s.QuantityInStock)
                {
                    myBz.AddNewRetrievalDetail(retrId, key, retrItemQty[key], retrItemQty[key]);
                }
                else
                {
                    myBz.AddNewRetrievalDetail(retrId, key, retrItemQty[key], s.QuantityInStock);
                }
            }

            //Redirect to retrieval form
            Response.Redirect("~/Store/RetrievalNew.aspx");
        }
        public Department FindDeptByDisbDetId(int disbDetId)
        {
            DisbursementDetail disbDet = disbDetService.SearchDisbursementDetailById(disbDetId);

            return(FindDeptByDisbId(disbDet.DisbursementId));
        }
Пример #25
0
 public void saveDisbursementDetail(DisbursementDetail currDB)
 {
     unitOfWork.GetRepository <DisbursementDetail>().Insert(currDB);
     unitOfWork.SaveChanges();
 }
        //webAPI for Requisition List
        public int CreateDisbursementList(List <Requisition> approvedReqList, int storeClerkId)
        {
            try
            {
                //Get all RequisitionDetails
                List <RequisitionDetail> reqDetList = GetReqDetsByListReqs(approvedReqList);

                //Use RequisitionDetails to Create Retrievals and Disbursement:
                //For Disbursement <----------Dictionary<DepartmentId, Dictionary<ItemCode,TotalRequestedQty>>
                Dictionary <string, Dictionary <String, int> > deptDisbList = new Dictionary <string, Dictionary <String, int> >();

                foreach (RequisitionDetail reqDet in reqDetList)
                {
                    string deptId = FindDeptByReqId(reqDet.RequisitionId).DeptId;
                    if (!deptDisbList.Keys.Contains(deptId))
                    {
                        Dictionary <string, int> a = new Dictionary <string, int>();
                        a.Add(reqDet.ItemCode, reqDet.QuantityRequest);
                        deptDisbList.Add(deptId, a);
                    }
                    else
                    {
                        if (!deptDisbList[deptId].Keys.Contains(reqDet.ItemCode))
                        {
                            deptDisbList[deptId].Add(reqDet.ItemCode, reqDet.QuantityRequest);
                        }
                        else
                        {
                            deptDisbList[deptId][reqDet.ItemCode] += reqDet.QuantityRequest;
                        }
                    }
                }

                //Create Disbursement for each Dept and DisbursementDetails
                foreach (KeyValuePair <string, Dictionary <string, int> > entry in deptDisbList)
                {
                    if (!HaveExistingDisbursement(storeClerkId, entry.Key))
                    {
                        Disbursement disb = new Disbursement();
                        disb.DeptId           = entry.Key;
                        disb.StoreClerkId     = storeClerkId;
                        disb.RepresentativeId = FindDeptByDeptId(entry.Key).RepresentativeId;
                        disb.DateCreated      = DateTime.Now;
                        disb.Status           = "Pending";
                        return(AddDisbursement(disb));
                    }

                    Disbursement currentDisb = FindDisbursementsByStatus("Pending").Where(x => x.StoreClerkId == storeClerkId && x.DeptId == entry.Key).First();

                    foreach (KeyValuePair <string, int> disItemQty in entry.Value)
                    {
                        DisbursementDetail disbDet = new DisbursementDetail();
                        disbDet.ItemCode          = disItemQty.Key;
                        disbDet.DisbursementId    = currentDisb.DisbursementId;
                        disbDet.QuantityRequested = disItemQty.Value;
                        Stationery s = FindStationeryByItemCode(disItemQty.Key);
                        if (disItemQty.Value <= s.QuantityInStock)
                        {
                            disbDet.QuantityReceived = disItemQty.Value;
                        }
                        else
                        {
                            disbDet.QuantityReceived = s.QuantityInStock;
                        }
                        AddDisbDetail(disbDet);
                    }
                    currentDisb.Status = "In Progress";
                    UpdateDisbursement(currentDisb);
                }
                return(1);
            }
            catch (Exception e)
            {
                return(0);
            }
        }
        protected void gvDepartments_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            GridViewRow row       = (GridViewRow)((Button)e.CommandSource).NamingContainer;
            Button      btnUpdate = (Button)row.FindControl("btnUpdateDisbQty");
            Button      btnChange = (Button)row.FindControl("btnChangeDisbQty");
            Button      btnCancel = (Button)row.FindControl("btnCancel");

            Label       lblDisbQty = (Label)row.FindControl("lblbDisbQty");
            TextBox     tbDisbQty  = (TextBox)row.FindControl("tbDisbQty");
            HiddenField hDDId      = (HiddenField)row.FindControl("hDDId");

            if (e.CommandName == "ChangeDisbQty")
            {
                btnChange.Visible  = false;
                lblDisbQty.Visible = false;
                btnUpdate.Visible  = true;
                btnCancel.Visible  = true;
                tbDisbQty.Visible  = true;
            }
            else
            {
                if (e.CommandName == "UpdateDisbQty")
                {
                    DisbursementDetail dd              = myBz.FindDisbursementDetailById(Int32.Parse(hDDId.Value));
                    Stationery         currentStat     = myBz.FindStationeryByItemCode(dd.ItemCode);
                    GridView           currentGridview = (GridView)row.Parent.Parent;
                    GridViewRow        rowParent       = (GridViewRow)currentGridview.NamingContainer;

                    Label totalRetrievedQty = (Label)rowParent.FindControl("lblRetrQty");

                    if (Int32.Parse(tbDisbQty.Text) > Int32.Parse(totalRetrievedQty.Text))
                    {
                        lblNotification.Text = "Please make sure Updating Receiving Quantity is not more than Total Retrieved Quantity";
                        row.ForeColor        = System.Drawing.Color.Red;
                        return;
                    }
                    else
                    {
                        row.ForeColor = System.Drawing.Color.Black;
                        List <DisbursementDetail> currentList = myBz.FindDisbDetsForNestedList(storeClerkId, "Allocating", dd.ItemCode);
                        int amountChange = Int32.Parse(tbDisbQty.Text) - dd.QuantityReceived;

                        //Find CurrentLocation of dd
                        int currentDDLocation = 0;
                        for (int i = 0; i < currentList.Count; i++)
                        {
                            if (currentList[i].DisbursementDetailsId == Int32.Parse(hDDId.Value))
                            {
                                currentDDLocation = i;
                                break;
                            }
                        }
                        currentList[currentDDLocation].QuantityReceived = Int32.Parse(tbDisbQty.Text);
                        myBz.UpdateDisbursementDetail(currentList[currentDDLocation]);

                        if (currentDDLocation != currentList.Count - 1)// if not the last dd in currentList
                        {
                            for (int i = currentDDLocation + 1; i < currentList.Count; i++)
                            {
                                if (amountChange > 0)
                                {
                                    if (currentList[i].QuantityReceived >= amountChange)
                                    {
                                        currentList[i].QuantityReceived -= amountChange;
                                        amountChange = 0;
                                        myBz.UpdateDisbursementDetail(currentList[i]);
                                        break;
                                    }
                                    else
                                    {
                                        currentList[i].QuantityReceived = 0;
                                        amountChange -= currentList[i].QuantityReceived;
                                        myBz.UpdateDisbursementDetail(currentList[i]);
                                    }
                                }
                            }

                            if (amountChange > 0)
                            {
                                for (int i = currentDDLocation - 1; i >= 0; i--)
                                {
                                    if (currentList[i].QuantityReceived >= amountChange)
                                    {
                                        currentList[i].QuantityReceived -= amountChange;
                                        amountChange = 0;
                                        break;
                                    }
                                    else
                                    {
                                        currentList[i].QuantityReceived = 0;
                                        amountChange -= currentList[i].QuantityReceived;
                                    }
                                    myBz.UpdateDisbursementDetail(currentList[i]);
                                }
                            }
                        }
                        else
                        {
                            if (amountChange > 0)
                            {
                                for (int i = currentDDLocation - 1; i >= 0; i--)
                                {
                                    if (currentList[i].QuantityReceived >= amountChange)
                                    {
                                        currentList[i].QuantityReceived -= amountChange;
                                        amountChange = 0;
                                    }
                                    else
                                    {
                                        currentList[i].QuantityReceived = 0;
                                        amountChange -= currentList[i].QuantityReceived;
                                    }

                                    myBz.UpdateDisbursementDetail(currentList[i]);
                                }
                            }
                        }
                        currentGridview.DataSource = currentList;
                        currentGridview.DataBind();
                        lblDisbQty.Text    = tbDisbQty.Text;
                        btnChange.Visible  = true;
                        lblDisbQty.Visible = true;
                        btnUpdate.Visible  = false;
                        btnCancel.Visible  = false;
                        tbDisbQty.Visible  = false;
                    }
                }
                else if (e.CommandName == "CancelUpdate")
                {
                    btnChange.Visible  = true;
                    lblDisbQty.Visible = true;
                    btnUpdate.Visible  = false;
                    btnCancel.Visible  = false;
                    tbDisbQty.Visible  = false;
                }
            }
        }
Пример #28
0
        //Irene
        public ActionResult Detail(int id)
        {
            //EVERYPAGE
            if (Session["user"] == null)
            {
                return(RedirectToAction("Login"));
            }
            Employee e = (Employee)Session["user"];

            if (e.RoleID != 3 && e.Authorization != "Representative" && e.RoleID != 2)
            {
                return(RedirectToAction("NotAuthorized"));
            }
            //EVERYPAGE
            ViewBag.user = e;

            if (Request.Form["save"] != null)
            {
                List <RequisitionDetail> rdList = BusinessLogic.GetRequisitionDetailItemList(id);

                String     s = Request.Form["ItemCode"]; //DisbursementDetailID
                int        dDetailItemID; int qty;
                bool       canupdate = false;
                List <int> l1        = new List <int>();
                List <int> l2        = new List <int>();
                for (int i = 0; i < s.Split(',').Count(); i++)
                {
                    dDetailItemID = Convert.ToInt32(s.Split(',')[i]);
                    qty           = Convert.ToInt32(Request.Form["ItemQty"].Split(',')[i]);

                    DisbursementDetail dd = BusinessLogic.GetDisbursementDetail(dDetailItemID);
                    for (int j = 0; j < rdList.Count; j++)
                    {
                        if (rdList[j].ItemCode == dd.ItemCode)
                        {
                            if (qty >= 0)
                            {
                                if (qty <= rdList[j].ItemQty && dd.TempQty == null)
                                {
                                    l1.Add(dDetailItemID);
                                    l2.Add(qty);
                                    if (l1.Count == s.Split(',').Count())
                                    {
                                        canupdate = true;
                                    }
                                }
                                else if (qty <= rdList[j].ItemQty && dd.TempQty != null)
                                {
                                    if (qty <= (dd.ItemQty - dd.TempQty))
                                    {
                                        l1.Add(dDetailItemID);
                                        l2.Add(qty);
                                        if (l1.Count == s.Split(',').Count())
                                        {
                                            canupdate = true;
                                        }
                                    }
                                    else
                                    {
                                        canupdate          = false;
                                        TempData["Notify"] = "Entered quantity should not be more than the quantity of the requisition item.";
                                    }
                                }
                                else if (qty > rdList[j].ItemQty)
                                {
                                    canupdate          = false;
                                    TempData["Notify"] = "Entered quantity should not be more than the quantity of the requisition item.";
                                }
                            }
                        }
                    }
                    if (canupdate != false)
                    {
                        for (int j = 0; j < l1.Count; j++)
                        {
                            BusinessLogic.UpdateQty(l1[j], l2[j]);
                        }
                        return(RedirectToAction("Outstanding", "Disbursement"));
                    }
                }
            }
            if (Request.Form["confirmed"] != null)
            {
                int    disitem = Convert.ToInt32(Request.Form["DisbursementID"]); //DisbursementID
                int    empid   = Convert.ToInt32(Request.Form["empID"]);
                String s       = Request.Form["ItemCode"];
                String itemcode;
                for (int i = 0; i < s.Split(',').Count(); i++)
                {
                    itemcode = s.Split(',')[i];
                    BusinessLogic.UpdateVerify(empid, disitem, itemcode);
                }

                List <DisbursementDetail> ddList = BusinessLogic.GetDisbursementDetailList(disitem);
                String itemCode, dept;
                int    qty, bal;

                for (int i = 0; i < ddList.Count; i++)
                {
                    itemCode = ddList[i].ItemCode;
                    dept     = ddList[i].Disbursement.DepartmentID;
                    if (ddList[i].TempQty != null)
                    {
                        qty = (int)ddList[i].TempQty;
                    }
                    else
                    {
                        qty = (int)ddList[i].ItemQty;
                    }
                    Catalogue c = BusinessLogic.getCatalogueByID(itemCode);
                    bal = (int)c.CurrentStockQty - qty;
                    BusinessLogic.UpdateDisburseStockCard(itemCode, dept, qty, bal);
                    BusinessLogic.UpdateCatalogue(itemCode, qty);
                }
                List <RequisitionDetail> rdlist = BusinessLogic.GetRequisitionDetailItemList(disitem);
                int quantity = 0;
                for (int i = 0; i < ddList.Count; i++)
                {
                    if (ddList[i].ItemQty != ddList[i].TempQty)
                    {
                        itemCode = ddList[i].ItemCode;
                        Catalogue c = BusinessLogic.getCatalogueByID(itemCode);
                        if (ddList[i].TempQty != null)
                        {
                            quantity = (int)(ddList[i].ItemQty - ddList[i].TempQty);
                        }
                        else
                        {
                            quantity = (int)(ddList[i].ItemQty);
                        }
                        BusinessLogic.CreateAdjustmentForDisbursement(itemCode, quantity, (int)ddList[i].Disbursement.Clerk);
                    }
                }
            }

            ViewBag.dlist    = BusinessLogic.GetDisbursementById(id);
            ViewBag.delist   = BusinessLogic.GetDisbursementDetailList(id);
            ViewBag.rlist    = BusinessLogic.GetApprovedRequisition();
            ViewBag.deptitem = BusinessLogic.GetDeptInfo(ViewBag.dlist.DepartmentID);
            ViewBag.rdList   = BusinessLogic.GetRequisitionDetailItemList(id);
            return(View());
        }
        protected void lvDetails_ItemUpdating(object sender, ListViewUpdateEventArgs e)
        {
            if (!Page.IsValid)
            {
                return;
            }

            ListView         listDetails = (ListView)sender;
            ListViewDataItem listItem    = (ListViewDataItem)listDetails.Parent;

            HiddenField hfItemCode = (HiddenField)listItem.FindControl("hfItemCode");

            List <DisbursementDetail> ddList = GetDisbursementDetailsPerItem(hfItemCode.Value);

            List <DisbursementDetail> sortedDDList = new List <DisbursementDetail>();

            foreach (DisbursementDetail dd in ddList)
            {
                DateTime dateRequested = GetRequestDateFromDD(dd);
                bool     isInserted    = false;
                for (int i = 0; i < sortedDDList.Count; i++)
                {
                    if (dateRequested < GetRequestDateFromDD(sortedDDList[i]))
                    {
                        //if earlier insert into index
                        sortedDDList.Insert(i, dd);
                        isInserted = true;
                        break;
                    }
                }
                if (!isInserted)
                {
                    sortedDDList.Add(dd);
                }
            }

            int updatedQty = Convert.ToInt32(e.NewValues["Quantity"]);

            RetrievalDetail retrievalDetail = retrieval.RetrievalDetails.Where(rd => rd.ItemCode == hfItemCode.Value).FirstOrDefault();
            int?            retrievedQty    = retrievalDetail.QuantityRetrieved;

            DisbursementDetail updatedDD = sortedDDList[e.ItemIndex];

            updatedDD.Quantity = updatedQty;
            sClerkCtrl.UpdateDisbursementDetail(updatedDD);

            retrievedQty -= updatedQty;
            sortedDDList.Remove(updatedDD);

            for (int i = 0; i < sortedDDList.Count; i++)
            {
                DisbursementDetail sortedDD      = sortedDDList[i];
                RequestDetail      requestDetail = GetRequestDetail(sortedDD.RequestCode, sortedDD.ItemCode);
                if (retrievedQty != 0)
                {
                    if (requestDetail.RemainingQuant < retrievedQty)
                    {
                        sortedDD.Quantity = requestDetail.RemainingQuant;
                        retrievedQty     -= requestDetail.RemainingQuant;
                    }
                    else
                    {
                        sortedDD.Quantity = retrievedQty;
                        retrievedQty     -= retrievedQty;
                    }
                }
                else
                {
                    sortedDD.Quantity = 0;
                }
                sClerkCtrl.UpdateDisbursementDetail(sortedDD);
            }

            listDetails.EditIndex  = -1;
            listDetails.DataSource = GetDisbursementDetailsPerItem(hfItemCode.Value);
            listDetails.DataBind();
        }
 //Disbursement Detail
 public int AddDisbDetail(DisbursementDetail disbursementDetail)
 {
     return(disbDetService.AddDisbursementDetail(disbursementDetail));
 }
        // mobile update retrieval list
        public void SaveRetrievalList(List <StationeryRetrievalUpdateList> deptItem)
        {
            //deptId itemId acutalquantity deptReqId
            foreach (var item in deptItem)
            {
                var itemId = context.Items.Where(i => i.ItemName == item.ItemName).FirstOrDefault().ItemId;
                var bal    = GetStockCardBalance(itemId);

                // Stock Card
                StockCard sc = new StockCard();
                sc.ItemId      = itemId;
                sc.Update_Date = DateTime.Now;
                sc.Description = context.Departments.Where(d => d.DepartmentId == item.DepartmentId).FirstOrDefault().DepartmentName;
                sc.Quantity    = item.ActualQuanity;
                sc.Balance     = bal - sc.Quantity;
                context.StockCards.Add(sc);
                context.SaveChanges();

                // departmentRequisition
                var deptReqRecord = context.DepartmentRequisitions.Where(d => d.DepartmentRequisitionId == item.DepartmentRequisitionId &&
                                                                         d.ItemId == itemId).FirstOrDefault();
                var previousActual = deptReqRecord.Actual;
                var currentNeeded  = deptReqRecord.Needed - deptReqRecord.Actual;
                if (currentNeeded >= item.ActualQuanity)
                {
                    deptReqRecord.Actual += item.ActualQuanity;
                    item.ActualQuanity    = 0;
                }
                else
                {
                    deptReqRecord.Actual = deptReqRecord.Needed;
                    item.ActualQuanity   = item.ActualQuanity - currentNeeded;
                }

                if (deptReqRecord.Needed == deptReqRecord.Actual)
                {
                    deptReqRecord.Status = StatusType.Completed.ToString();
                }


                context.SaveChanges();
                var nowActual = deptReqRecord.Actual;

                // staff requisition
                foreach (var deptReqId in context.DepartmentRequisitions.Select(dq => dq.DepartmentRequisitionId).Distinct())
                {
                    if (context.DepartmentRequisitions.Where(dq => dq.DepartmentRequisitionId == deptReqId &&
                                                             dq.Status != StatusType.Completed.ToString()).Count() == 0)
                    {
                        context.StaffRequisitions.Where(sq => sq.DepartmentRequisitionId == deptReqId)
                        .ToList().ForEach(sq => sq.Status = StatusType.Completed.ToString());
                    }
                }

                context.SaveChanges();

                // Disbursement
                var exist = from dq in context.DepartmentRequisitions
                            join d in context.Disbursements on dq.DepartmentRequisitionId equals d.DepReqId
                            where dq.DepartmentRequisitionId == item.DepartmentRequisitionId &&
                            dq.ItemId == itemId &&
                            dq.Actual == 0
                            select d;
                if (exist.Count() == 0)
                {
                    var    disbursement         = new Disbursement();
                    String disbursementIdFormat = "DB-xxx";
                    var    list = context.Disbursements.Select(a => a.DisbursementId).ToList();
                    String currentDisbursementId = "DB-100";
                    char[] chrArr = new char[] { '-' };
                    if (list.Count > 0)
                    {
                        var currentId = list
                                        .Select(a => a.Split(chrArr)[1])
                                        .Select(a => Convert.ToInt32(a)).Max() + 1;
                        currentDisbursementId = disbursementIdFormat.Replace("xxx", currentId.ToString());
                    }
                    disbursement.DisbursementId = currentDisbursementId;
                    disbursement.DepReqId       = item.DepartmentRequisitionId;
                    disbursement.Status         = StatusType.Pending.ToString();
                    disbursement.DepartmentId   = item.DepartmentId;
                    disbursement.CreateDate     = DateTime.Now;
                    context.Disbursements.Add(disbursement);
                    var disbursementDetail = new DisbursementDetail();
                    disbursementDetail.DisbursementId = currentDisbursementId;
                    disbursementDetail.Disbursement   = disbursement;
                    disbursementDetail.ItemId         = itemId;
                    disbursementDetail.Quantity       = nowActual - previousActual;
                    context.DisbursementDetails.Add(disbursementDetail);
                    context.SaveChanges();
                }
                else
                {
                    var disbursementDetail = new DisbursementDetail();
                    var disbursement       = context.Disbursements.Where(d => d.DepReqId == item.DepartmentRequisitionId &&
                                                                         d.DepartmentId == item.DepartmentId).FirstOrDefault();
                    disbursementDetail.DisbursementId = disbursement.DisbursementId;
                    disbursementDetail.ItemId         = itemId;
                    disbursementDetail.Quantity       = item.ActualQuanity;
                    disbursementDetail.Disbursement   = disbursement;
                    context.DisbursementDetails.Add(disbursementDetail);
                    context.SaveChanges();
                }
            }
        }
 public int UpdateDisbursementDetail(DisbursementDetail dd)
 {
     return(disbDetService.UpdateDisbursementDetail(dd));
 }