Example #1
0
        public IHttpActionResult SaveUpdateFactorySalesDeliveryOrderMasterDetail(object[] data)
        {
            string                result      = string.Empty;
            vmSalFDODetail        Master      = JsonConvert.DeserializeObject <vmSalFDODetail>(data[0].ToString());
            List <vmSalFDODetail> Detail      = JsonConvert.DeserializeObject <List <vmSalFDODetail> >(data[1].ToString());
            vmCmnParameters       objcmnParam = JsonConvert.DeserializeObject <vmCmnParameters>(data[2].ToString());

            try
            {
                //if (ModelState.IsValid)
                //{
                result = objDOService.SaveUpdateFactorySalesDeliveryOrderMasterDetail(Master, Detail, objcmnParam);
                //}
            }
            catch (Exception e)
            {
                e.ToString();
                result = "";
            }
            return(Json(new
            {
                result
            }));
            //return Request.CreateResponse(HttpStatusCode.OK, result);
        }
        public string SaveUpdateFactorySalesDeliveryOrderMasterDetail(vmSalFDODetail Master, List <vmSalFDODetail> Detail, vmCmnParameters objcmnParam)
        {
            string result = string.Empty;

            using (var transaction = new TransactionScope())
            {
                GenericFactoryFor_HDOMaster_EF  = new SalHDOMaster_EF();
                GenericFactoryFor_HDODetails_EF = new SalHDODetail_EF();
                GenericFactoryFor_FDOMaster     = new SalFDOMaster_EF();
                GenericFactoryFor_FDODetails    = new SalFDODetail_EF();
                GFactory_EF_InvStockTransit     = new InvStocTransit_Sale_EF();
                GFactory_EF_InvStockMaster      = new InvStockMaster_Sale_EF();

                string CustomNo = string.Empty, FDONo = ""; decimal CurrentStock = 0, TransitQty = 0;
                long   FdoMasterId = 0, FdoDetailId = 0, FirstDigit = 0, OtherDigits = 0, NextId = 0;

                var Masteritem         = new SalFDOMaster();
                var FDODetail          = new List <SalFDODetail>();
                var UpdateHDODetail    = new List <SalHDODetail>();
                var InsertStockTransit = new List <InvStockTransit>();
                var item  = new vmSalFDODetail();
                var items = new vmSalFDODetail();

                //To Update Remaining Quantity in SalHDODetail
                var HdoDetail    = GenericFactoryFor_HDODetails_EF.GetAll();
                var StockMaster  = GFactory_EF_InvStockMaster.GetAll().Where(x => x.DepartmentID == objcmnParam.SelectedDepartmentID).ToList();
                var StockTransit = GFactory_EF_InvStockTransit.GetAll().Where(x => x.DepartmentID == objcmnParam.SelectedDepartmentID).ToList();
                //-------------------END----------------------

                if (Detail.Count() > 0)
                {
                    try
                    {
                        NextId = GFactory_EF_InvStockTransit.getMaxVal_int64("StockTransitID", "InvStockTransit");
                        //start new maxId
                        FdoMasterId = Convert.ToInt64(GenericFactoryFor_FDOMaster.getMaxID("SalFDOMaster"));
                        FdoDetailId = Convert.ToInt64(GenericFactoryFor_FDODetails.getMaxID("SalFDODetail"));
                        FirstDigit  = Convert.ToInt64(FdoDetailId.ToString().Substring(0, 1));
                        OtherDigits = Convert.ToInt64(FdoDetailId.ToString().Substring(1, FdoDetailId.ToString().Length - 1));
                        //end new maxId
                        CustomNo = GenericFactoryFor_FDOMaster.getCustomCode(objcmnParam.menuId, DateTime.Now, objcmnParam.loggedCompany, 1, 1); // // 1 for user id and 1 for db id --- work later
                        if (CustomNo != null)
                        {
                            FDONo = CustomNo;
                        }
                        else
                        {
                            FDONo = FdoMasterId.ToString();
                        }

                        Masteritem = new SalFDOMaster
                        {
                            FDOMasterID         = FdoMasterId,
                            TransactionTypeID   = objcmnParam.tTypeId,
                            FDONo               = FDONo,
                            FDODate             = DateTime.Today,
                            HDOID               = (Master.MHDOID).ToString(),
                            PartyID             = (int)Master.MPartyID,
                            DeliveryTo          = Master.MDeliveryTo,
                            BillNo              = Master.MBillNo,
                            BillDate            = Master.MBillDate,
                            DriverName          = Master.DriverName,
                            DriverPhoneNo       = Master.DriverPhoneNo,
                            BuyerContactName    = Master.BuyerContactName,
                            BuyerContactPhoneNo = Master.BuyerContactPhoneNo,
                            TruckNo             = Master.TruckNo,
                            CompanyID           = objcmnParam.loggedCompany,
                            DepartmentID        = objcmnParam.SelectedDepartmentID,
                            CreateBy            = objcmnParam.loggeduser,
                            CreateOn            = DateTime.Now,
                            CreatePc            = HostService.GetIP(),
                            IsActive            = true,
                            IsDeleted           = false,
                            StatusBy            = objcmnParam.loggeduser,
                            StatusID            = 1,
                            IsDCCompleted       = false
                        };

                        for (int i = 0; i < Detail.Count(); i++)
                        {
                            item = Detail[i];

                            CurrentStock = 0;
                            TransitQty   = 0;
                            //*************************To Check Stock Quantity in InvStockMaster************************

                            var StockMasterTemp1 = StockMaster.Where(s => item.BatchId == null ? true : s.BatchID == item.BatchId).ToList();

                            var StockMasterTemp2 = (from x in StockMasterTemp1.Where(x => item.LotId == null ? true : x.LotID == item.LotId)
                                                    where item.ItemGradeID == null ? true : x.GradeID == item.ItemGradeID
                                                    select new InvStockMaster
                            {
                                DepartmentID = x.DepartmentID,
                                LotID = x.LotID,
                                BatchID = x.BatchID,
                                GradeID = x.GradeID,
                                ItemID = x.ItemID,
                                CurrentStock = x.CurrentStock
                            }).ToList();
                            foreach (InvStockMaster j in StockMasterTemp2.Where(s => s.ItemID == item.ItemID))
                            {
                                CurrentStock = CurrentStock + (decimal)j.CurrentStock;
                                //break;
                            }

                            ///// checking transit table from database data//////////////
                            var TransitReal1 = StockTransit.Where(x => x.ItemID == item.ItemID).ToList();

                            var TransitReal2 = TransitReal1.Where(x => item.BatchId == null ? true : x.BatchID == item.BatchId).ToList();


                            var TransitReal = (from t in TransitReal2.Where(x => item.LotId == null ? true : x.LotID == item.LotId)
                                               where item.ItemGradeID == null ? true : t.GradeID == item.ItemGradeID
                                               select t.TransitQty).Sum();

                            /////////// checking data from FDO Detail///////////////////
                            var TransitTemp1 = InsertStockTransit.Where(x => x.ItemID == item.ItemID).ToList();

                            var TransitTemp2 = TransitTemp1.Where(x => item.BatchId == null ? true : x.BatchID == item.BatchId).ToList();

                            var TransitTemp = (from t in TransitTemp2.Where(x => item.LotId == null ? true : x.LotID == item.LotId)
                                               where item.ItemGradeID == null ? true : t.GradeID == item.ItemGradeID
                                               select t.TransitQty).Sum();

                            TransitQty = (decimal)(TransitReal + TransitTemp);
                            //***************************************END*******************************************

                            //**********************************Detail Entry***************************************
                            if ((CurrentStock - TransitQty) >= item.QuantityYds && item.QuantityYds > 0)
                            {
                                var Detailitem = new SalFDODetail
                                {
                                    FDODetailsID = Convert.ToInt64(FirstDigit + "" + OtherDigits),
                                    FDOMasterID  = FdoMasterId,
                                    ItemID       = (long)item.ItemID,
                                    NetQtyKg     = (decimal)item.NetQuantityKg,
                                    PIID         = (int)item.PIID,
                                    QuantitYds   = (decimal)item.QuantityYds,
                                    QuantityKg   = (decimal)item.Quantity,
                                    GrossQtyKg   = (decimal)item.GrossQuantityKg,
                                    Amount       = (decimal)item.Amount,
                                    Rate         = (decimal)item.UnitPrice,
                                    RollNo       = (decimal)item.Roll,
                                    LotID        = item.LotId,
                                    BatchID      = item.BatchId,
                                    GradeID      = item.ItemGradeID,

                                    CreateBy      = objcmnParam.loggeduser,
                                    CreateOn      = DateTime.Now,
                                    CreatePc      = HostService.GetIP(),
                                    IsDeleted     = false,
                                    IsDCCompleted = false
                                };
                                //***************************************END*******************************************
                                var InsertTran = new InvStockTransit
                                {
                                    StockTransitID    = NextId,
                                    TransactionID     = FdoMasterId,
                                    TransactionTypeID = objcmnParam.tTypeId,
                                    TransitQty        = item.QuantityYds,
                                    ItemID            = item.ItemID,
                                    DepartmentID      = objcmnParam.SelectedDepartmentID,
                                    LotID             = item.LotId ?? 0,
                                    BatchID           = item.BatchId ?? 0,
                                    GradeID           = Convert.ToInt16(item.ItemGradeID ?? 0),
                                    IsDeleted         = false,
                                    IsComplete        = false,

                                    CompanyID = objcmnParam.loggedCompany,
                                    CreateBy  = objcmnParam.loggeduser,
                                    CreateOn  = DateTime.Now,
                                    CreatePc  = HostService.GetIP()
                                };
                                InsertStockTransit.Add(InsertTran);
                                NextId = NextId + 1;
                                //******************To Update Remaining Quantity in SalHDODetail******************
                                foreach (SalHDODetail u in HdoDetail.Where(u => u.HDODetailID == item.HDODetailID))
                                {
                                    if (u.RemainingQty > 0)
                                    {
                                        if (item.RemainingQty > 0)
                                        {
                                            u.RemainingQty = item.RemainingQty;
                                        }
                                        else
                                        {
                                            u.RemainingQty   = item.RemainingQty;
                                            u.IsFDOCompleted = true;
                                        }
                                        UpdateHDODetail.Add(u);
                                        break;
                                    }
                                }
                                //************************************END************************************
                                FDODetail.Add(Detailitem);
                                OtherDigits++;
                            }
                            else
                            {
                                result = "1";
                                throw new Exception(); // if any product don't support by stock, go back.
                            }
                        }

                        if (Masteritem != null)
                        {
                            GenericFactoryFor_FDOMaster.Insert(Masteritem);
                            GenericFactoryFor_FDOMaster.Save();
                            GenericFactoryFor_FDOMaster.updateMaxID("SalFDOMaster", Convert.ToInt64(FdoMasterId));
                            GenericFactoryFor_FDOMaster.updateCustomCode(objcmnParam.menuId, DateTime.Now, objcmnParam.loggedCompany, 1, 1);
                        }
                        if (FDODetail != null && FDODetail.Count != 0)
                        {
                            GenericFactoryFor_FDODetails.InsertList(FDODetail.ToList());
                            GenericFactoryFor_FDODetails.Save();
                            GenericFactoryFor_FDODetails.updateMaxID("SalFDODetail", Convert.ToInt64(FirstDigit + "" + (OtherDigits - 1)));
                        }
                        if (UpdateHDODetail != null && UpdateHDODetail.Count != 0)
                        {
                            GenericFactoryFor_HDODetails_EF.UpdateList(UpdateHDODetail.ToList());
                            GenericFactoryFor_HDODetails_EF.Save();
                        }
                        if (InsertStockTransit != null || InsertStockTransit.Count() != 0)
                        {
                            GFactory_EF_InvStockTransit.InsertList(InsertStockTransit.ToList());
                            GFactory_EF_InvStockTransit.Save();
                        }

                        transaction.Complete();
                        result = FDONo;
                    }
                    catch (Exception e)
                    {
                        e.ToString();
                    }
                }
            }

            return(result);
        }