Example #1
0
        public string SaveUpdateDC(SalDCMaster DCInfo, List <SalDCDetail> DCDetailList, vmCmnParameters objcmnParam)
        {
            GenericFactory_EF_DCMaster  = new SalDCMaster_EF();
            GenericFactory_EF_DCDetail  = new SalDCDetail_EF();
            GFactory_EF_InvStockMaster  = new InvStockMaster_EF();
            GFactory_EF_InvStockDetail  = new InvStockDetail_EF();
            GenericFactory_EF_FDOMaster = new SalFDOMaster_EF();
            GenericFactory_EF_FDODetail = new SalFDODetail_EF();
            GFactory_EF_InvStockTransit = new InvStockTransit_EF();

            string result = "";

            long NextId = Convert.ToInt64(GenericFactory_EF_DCMaster.getMaxID("SalDCMaster"));

            long FirstDigit   = 0;
            long OtherDigits  = 0;
            long nextDetailId = Convert.ToInt64(GenericFactory_EF_DCDetail.getMaxID("SalDCDetail"));

            FirstDigit  = Convert.ToInt64(nextDetailId.ToString().Substring(0, 1));
            OtherDigits = Convert.ToInt64(nextDetailId.ToString().Substring(1, nextDetailId.ToString().Length - 1));


            string customCode = "";

            string CustomNo = customCode = GenericFactory_EF_DCMaster.getCustomCode(objcmnParam.menuId, DCInfo.DCDate,
                                                                                    DCInfo.CompanyID, objcmnParam.loggeduser, 1); // 1 for DB ID

            if (CustomNo != null)
            {
                customCode = CustomNo;
            }
            else
            {
                customCode = NextId.ToString();
            }

            try
            {
                DCInfo.DCID     = NextId;
                DCInfo.DCNo     = customCode;
                DCInfo.CreateOn = DateTime.Now;
                DCInfo.IsActive = true;

                List <SalDCDetail> lstSalDCDetail = new List <SalDCDetail>();
                foreach (SalDCDetail sdtl in DCDetailList)
                {
                    SalDCDetail objSalDCDetail = new SalDCDetail();
                    //objSalDCDetail.DCDetailID = nextDetailId;
                    objSalDCDetail.DCDetailID  = Convert.ToInt64(FirstDigit + "" + OtherDigits);
                    objSalDCDetail.DCID        = NextId;
                    objSalDCDetail.FDOID       = sdtl.FDOID;
                    objSalDCDetail.TruckNo     = sdtl.TruckNo;
                    objSalDCDetail.QuantityYds = sdtl.QuantityYds;
                    objSalDCDetail.Roll        = sdtl.Roll;
                    objSalDCDetail.CompanyID   = DCInfo.CompanyID;
                    objSalDCDetail.CreateBy    = DCInfo.CreateBy;
                    objSalDCDetail.CreateOn    = DateTime.Now;
                    objSalDCDetail.CreatePc    = HostService.GetIP();
                    objSalDCDetail.IsDeleted   = false;
                    objSalDCDetail.StatusBy    = 1;
                    objSalDCDetail.StatusID    = 1;
                    lstSalDCDetail.Add(objSalDCDetail);

                    OtherDigits++;
                }

                using (TransactionScope transaction = new TransactionScope())
                {
                    /////////////////////// Start FDOMaster and FDO Detail Table Update /////////////////////////////

                    foreach (SalDCDetail sdcd in DCDetailList)
                    {
                        SalFDOMaster objSalFDOMaster = GenericFactory_EF_FDOMaster.FindBy(m => m.FDOMasterID == sdcd.FDOID).FirstOrDefault();
                        objSalFDOMaster.IsDCCompleted = true;
                        GenericFactory_EF_FDOMaster.Update(objSalFDOMaster);
                        GenericFactory_EF_FDOMaster.Save();

                        List <SalFDODetail> objSalFDODetail = GenericFactory_EF_FDODetail.FindBy(m => m.FDOMasterID == sdcd.FDOID).ToList();
                        foreach (SalFDODetail sfdod in objSalFDODetail)
                        {
                            sfdod.IsDCCompleted = true;
                            GenericFactory_EF_FDODetail.Update(sfdod);
                            GenericFactory_EF_FDODetail.Save();
                        }
                    }

                    /////////////////////// End FDOMaster and FDO Detail Table Update /////////////////////////////



                    /////////////////////// Start Stock Table Update /////////////////////////////
                    //#region Stock Hit
                    //IEnumerable<SalFDODetail> objFDODetail = null;
                    ////string spQuery = string.Empty;
                    //try
                    //{
                    //    objFDODetail = GenericFactory_EF_FDODetail.GetAll().Select(m => new
                    //    SalFDODetail
                    //    {
                    //        ItemID = m.ItemID,
                    //        BatchID = m.BatchID,
                    //        LotID = m.LotID,
                    //        GradeID = m.GradeID,
                    //        QuantitYds = m.QuantitYds,
                    //        FDOMasterID = m.FDOMasterID,
                    //        CompanyID = m.CompanyID
                    //    }).
                    //    Where(m => m.FDOMasterID == DCInfo.FDOID).ToList();
                    //}
                    //catch (Exception e)
                    //{
                    //    e.ToString();
                    //}

                    //List<InvStockMaster> objInvStockMaster = GFactory_EF_InvStockMaster.FindBy(m => m.DepartmentID == objSalFDOMaster.DepartmentID).ToList();

                    //foreach (SalFDODetail sfdod in objFDODetail)
                    //{
                    //    InvStockMaster objStockMaster = new InvStockMaster();

                    //    var ItemBatchFilter = objInvStockMaster.Where(x => x.ItemID == sfdod.ItemID
                    //                           && sfdod.BatchID == null ? true : x.BatchID == sfdod.BatchID).ToArray();

                    //    var TransitBatch2 = ItemBatchFilter.Where(x => sfdod.LotID == null ? true : x.LotID == sfdod.LotID).ToArray();

                    //    objStockMaster = ItemBatchFilter.Where(x => sfdod.GradeID == null ? true : x.GradeID == sfdod.GradeID).FirstOrDefault();

                    //    objStockMaster.IssueQty = objStockMaster.IssueQty + sfdod.QuantitYds;
                    //    GFactory_EF_InvStockMaster.Update(objStockMaster);
                    //    GFactory_EF_InvStockMaster.Save();

                    //     ///////////////////////////////// detail insert /////////////////////////////////////

                    //    InvStockDetail objInvStockDetail = new InvStockDetail();
                    //    objInvStockDetail.StockID = objStockMaster.StockID;
                    //    objInvStockDetail.DepartmentID = objSalFDOMaster.DepartmentID;
                    //    objInvStockDetail.TransactionID = objSalFDOMaster.FDOMasterID;
                    //    objInvStockDetail.TransactionTypeID = objcmnParam.tTypeId??0;
                    //    objInvStockDetail.StockDate = DateTime.Now;
                    //    objInvStockDetail.ItemID = sfdod.ItemID;

                    //    objInvStockDetail.ItemTypeID = 1;
                    //    objInvStockDetail.LotID = sfdod.LotID == null ? 0 : (int)sfdod.LotID;
                    //    objInvStockDetail.BatchID = sfdod.BatchID == null ? 0 : (int)sfdod.BatchID;
                    //    objInvStockDetail.GradeID = sfdod.GradeID == null ? 0 : (int)sfdod.GradeID;
                    //    objInvStockDetail.LotNo = "";
                    //    objInvStockDetail.SupplierID = 0;
                    //    objInvStockDetail.ReceiveQty = 0;
                    //    objInvStockDetail.ReceiveValue = 0;
                    //    objInvStockDetail.ReceiveRate = 0;
                    //    objInvStockDetail.IssueQty = sfdod.QuantitYds;
                    //    objInvStockDetail.UOMID = 0;
                    //    objInvStockDetail.IssueRate = 0;
                    //    objInvStockDetail.IssueValue = 0;
                    //    objInvStockDetail.IsActive = true;
                    //    objInvStockDetail.IssueRate = 0;
                    //    objInvStockDetail.CompanyID = sfdod.CompanyID;
                    //    objInvStockDetail.CreateBy = objSalFDOMaster.CreateBy;
                    //    objInvStockDetail.CreateOn = DateTime.Now;
                    //    objInvStockDetail.CreatePc =  HostService.GetIP();

                    //    GFactory_EF_InvStockDetail.Insert(objInvStockDetail);
                    //    GFactory_EF_InvStockDetail.Save();

                    //}

                    //#endregion Stock Hit
                    /////////////////////// End Stock Table Update //////////////////////////////

                    /////////////////////// Stock Transit Table Data Delete /////////////////////
                    //#region Stock Transit Hit

                    //foreach (SalFDODetail sfdod in objFDODetail)
                    //{
                    //    List<InvStockTransit> objInvStockTransit =
                    //    GFactory_EF_InvStockTransit.FindBy(m => m.DepartmentID == objSalFDOMaster.DepartmentID
                    //                                       //&& m.LotID == sfdod.LotID && m.BatchID == sfdod.BatchID && m.GradeID == sfdod.GradeID
                    //                                       && m.ItemID == sfdod.ItemID && m.CompanyID == sfdod.CompanyID
                    //                                       && m.TransactionTypeID == objSalFDOMaster.FDOTypeID
                    //                                       && m.TransactionID == sfdod.FDOMasterID).ToList();

                    //    GFactory_EF_InvStockTransit.DeleteList(objInvStockTransit);
                    //    GFactory_EF_InvStockTransit.Save();
                    //}

                    //#endregion End Stock Transit Hit
                    /////////////////////// End Stock Transit Table Data Delete /////////////////////


                    GenericFactory_EF_DCMaster.Insert(DCInfo);
                    GenericFactory_EF_DCMaster.Save();

                    GenericFactory_EF_DCMaster.updateMaxID("SalDCMaster", Convert.ToInt64(NextId));

                    GenericFactory_EF_DCMaster.updateCustomCode(objcmnParam.menuId, DateTime.Now, DCInfo.CompanyID, 1, 1);

                    GenericFactory_EF_DCDetail.InsertList(lstSalDCDetail);
                    GenericFactory_EF_DCDetail.Save();
                    GenericFactory_EF_DCDetail.updateMaxID("SalDCDetail", Convert.ToInt64(FirstDigit + "" + (OtherDigits - 1)));
                    transaction.Complete();
                }
                result = customCode;
            }
            catch (Exception e)
            {
                e.ToString();
                result = "";
            }
            finally
            {
            }
            return(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);
        }