public ActionResult Delete(ReasonViewModel vm)
        {
            List <LogTypeViewModel> LogList = new List <LogTypeViewModel>();

            if (ModelState.IsValid)
            {
                //string temp = (Request["Redirect"].ToString());
                //first find the Purchase Order Object based on the ID. (sience this object need to marked to be deleted IE. ObjectState.Deleted)
                var ProductUidHeader = _ProductUidHeaderService.GetProductUidHeaderIndexViewModel(vm.id);

                LogList.Add(new LogTypeViewModel
                {
                    ExObj = ProductUidHeader,
                });

                //Then find all the Purchase Order Header Line associated with the above ProductType.
                var ProductUid = new ProductUidService(_unitOfWork).GetProductUidList(vm.id);

                //Mark ObjectState.Delete to all the Purchase Order Lines.
                foreach (var item in ProductUid)
                {
                    LogList.Add(new LogTypeViewModel
                    {
                        ExObj = item,
                    });
                    new ProductUidService(_unitOfWork).Delete(item.ProductUIDId);
                }

                // Now delete the Purhcase Order Header
                new ProductUidHeaderService(_unitOfWork).Delete(vm.id);
                XElement Modifications = new ModificationsCheckService().CheckChanges(LogList);
                //Commit the DB
                try
                {
                    _unitOfWork.Save();
                }

                catch (Exception ex)
                {
                    string message = _exception.HandleException(ex);
                    ModelState.AddModelError("", message);
                    return(PartialView("_Reason", vm));
                }

                LogActivity.LogActivityDetail(LogVm.Map(new ActiivtyLogViewModel
                {
                    DocTypeId       = new DocumentTypeService(_unitOfWork).FindByName(MasterDocTypeConstants.ProductUid).DocumentTypeId,
                    DocId           = vm.id,
                    ActivityType    = (int)ActivityTypeContants.Deleted,
                    UserRemark      = vm.Reason,
                    xEModifications = Modifications,
                }));

                return(Json(new { success = true }));
            }
            return(PartialView("_Reason", vm));
        }
        public JsonResult GetProductUIDDetailJson(string ProductUIDNo)
        {
            ProductUidDetail productuiddetail = new ProductUidService(_unitOfWork).FGetProductUidDetail(ProductUIDNo);

            List <ProductUidDetail> ProductUidDetailJson = new List <ProductUidDetail>();

            if (productuiddetail != null)
            {
                ProductUidDetailJson.Add(new ProductUidDetail()
                {
                    ProductId    = productuiddetail.ProductId,
                    ProductName  = productuiddetail.ProductName,
                    ProductUidId = productuiddetail.ProductUidId,
                });
            }

            return(Json(ProductUidDetailJson));
        }
Exemplo n.º 3
0
        public ActionResult Post(ProductUid vm)
        {
            if (ModelState.IsValid)
            {
                if (vm.ProductUIDId != 0)
                {
                    ProductUid P = new ProductUidService(_unitOfWork).Find(vm.ProductUIDId);
                    P.Dimension1Id             = vm.Dimension1Id;
                    P.Dimension2Id             = vm.Dimension2Id;
                    P.Dimension3Id             = vm.Dimension3Id;
                    P.Dimension4Id             = vm.Dimension4Id;
                    P.ProductUidSpecification  = vm.ProductUidSpecification;
                    P.ProductUidSpecification1 = vm.ProductUidSpecification1;
                    P.ModifiedDate             = DateTime.Now;
                    P.ModifiedBy  = User.Identity.Name;
                    P.ObjectState = Model.ObjectState.Modified;
                    db.ProductUid.Add(P);

                    try
                    {
                        db.SaveChanges();
                    }

                    catch (Exception ex)
                    {
                        string message = _exception.HandleException(ex);
                        ModelState.AddModelError("", message);
                        return(View("Create", vm));
                    }

                    LogActivity.LogActivityDetail(LogVm.Map(new ActiivtyLogViewModel
                    {
                        DocTypeId    = new DocumentTypeService(_unitOfWork).FindByName(MasterDocTypeConstants.ProductUid).DocumentTypeId,
                        DocId        = vm.ProductUIDId,
                        ActivityType = (int)ActivityTypeContants.Added,
                    }));

                    return(RedirectToAction("Create").Success("Data saved successfully"));
                }
            }
            return(View("Create", vm));
        }
        public ActionResult Delete(ReasonViewModel vm)
        {
            if (ModelState.IsValid)
            {
                List <LogTypeViewModel> LogList = new List <LogTypeViewModel>();

                int?StockHeaderId = 0;
                var PackingHeader = _PackingHeaderService.GetPackingHeader(vm.id);
                int status        = PackingHeader.Status;

                LogList.Add(new LogTypeViewModel
                {
                    ExObj = PackingHeader,
                });

                StockHeaderId = PackingHeader.StockHeaderId;

                new StockUidService(_unitOfWork).DeleteStockUidForDocHeader(PackingHeader.PackingHeaderId, PackingHeader.DocTypeId, PackingHeader.SiteId, PackingHeader.DivisionId);

                List <int> StockIssueIdList   = new List <int>();
                List <int> StockReceiveIdList = new List <int>();


                var PackingLine = new PackingLineService(_unitOfWork).GetPackingLineForHeaderId(vm.id).ToList();

                foreach (var item in PackingLine)
                {
                    LogList.Add(new LogTypeViewModel
                    {
                        ExObj = item,
                    });

                    if (item.StockIssueId != null)
                    {
                        StockIssueIdList.Add((int)item.StockIssueId);
                    }

                    if (item.StockReceiveId != null)
                    {
                        StockReceiveIdList.Add((int)item.StockReceiveId);
                    }


                    if (item.ProductUidId != null && item.ProductUidId != 0)
                    {
                        ProductUidDetail ProductUidDetail = new ProductUidService(_unitOfWork).FGetProductUidLastValues((int)item.ProductUidId, "Packing-" + vm.id.ToString());

                        ProductUid ProductUid = new ProductUidService(_unitOfWork).Find((int)item.ProductUidId);


                        ProductUid.LastTransactionDocDate   = item.ProductUidLastTransactionDocDate;
                        ProductUid.LastTransactionDocId     = item.ProductUidLastTransactionDocId;
                        ProductUid.LastTransactionDocNo     = item.ProductUidLastTransactionDocNo;
                        ProductUid.LastTransactionDocTypeId = item.ProductUidLastTransactionDocTypeId;
                        ProductUid.LastTransactionPersonId  = item.ProductUidLastTransactionPersonId;
                        ProductUid.CurrenctGodownId         = item.ProductUidCurrentGodownId;
                        ProductUid.CurrenctProcessId        = item.ProductUidCurrentProcessId;
                        ProductUid.Status = item.ProductUidStatus;

                        //ProductUid.LastTransactionDocDate = ProductUidDetail.LastTransactionDocDate;
                        //ProductUid.LastTransactionDocId = ProductUidDetail.LastTransactionDocId;
                        //ProductUid.LastTransactionDocNo = ProductUidDetail.LastTransactionDocNo;
                        //ProductUid.LastTransactionDocTypeId = ProductUidDetail.LastTransactionDocTypeId;
                        //ProductUid.LastTransactionPersonId = ProductUidDetail.LastTransactionPersonId;
                        //ProductUid.CurrenctGodownId = ProductUidDetail.CurrenctGodownId;
                        //ProductUid.CurrenctProcessId = ProductUidDetail.CurrenctProcessId;

                        new ProductUidService(_unitOfWork).Update(ProductUid);
                    }


                    new PackingLineService(_unitOfWork).Delete(item.PackingLineId);
                }


                foreach (var item in StockIssueIdList)
                {
                    new StockService(_unitOfWork).DeleteStock(item);
                }

                foreach (var item in StockReceiveIdList)
                {
                    new StockService(_unitOfWork).DeleteStock(item);
                }

                new PackingHeaderService(_unitOfWork).Delete(vm.id);


                if (StockHeaderId != null)
                {
                    new StockHeaderService(_unitOfWork).Delete((int)StockHeaderId);
                }

                XElement Modifications = new ModificationsCheckService().CheckChanges(LogList);
                //Commit the DB
                try
                {
                    _unitOfWork.Save();
                }

                catch (Exception ex)
                {
                    string message = _exception.HandleException(ex);
                    TempData["CSEXC"] += message;
                    return(PartialView("_Reason", vm));
                }

                LogActivity.LogActivityDetail(LogVm.Map(new ActiivtyLogViewModel
                {
                    DocTypeId       = PackingHeader.DocTypeId,
                    DocId           = PackingHeader.PackingHeaderId,
                    ActivityType    = (int)ActivityTypeContants.Deleted,
                    UserRemark      = vm.Reason,
                    DocNo           = PackingHeader.DocNo,
                    xEModifications = Modifications,
                    DocDate         = PackingHeader.DocDate,
                    DocStatus       = PackingHeader.Status,
                }));

                return(Json(new { success = true }));
            }
            return(PartialView("_Reason", vm));
        }
        public ActionResult PostSummary(JobInvoiceSummaryDetailViewModel vm)
        {
            //TempData["CSEXC"] = "Customize Test Exception";


            String ErrorMsg = "";

            foreach (var item in vm.JobInvoiceSummaryViewModel)
            {
                if (item.AdvanceAdjusted > item.InvoiceAmount + item.TanaAmount)
                {
                    string ProductUidName = "";
                    if (item.ProductUidId != null)
                    {
                        ProductUidName = new ProductUidService(_unitOfWork).Find((int)item.ProductUidId).ProductUidName;
                    }

                    ErrorMsg = "Total adjusted advance for barcode " + ProductUidName + " is exceeding invoice amount.";
                }
            }


            var AdvanceData = (from H in vm.JobInvoiceSummaryViewModel
                               group new { H } by new { H.CostCenterId } into Result
                               select new
            {
                CostCenterId = Result.Key.CostCenterId,
                TotalAdvanceAmount = Result.Max(m => m.H.AdvanceAmount),
                TotalAdvanceAdjusted = Result.Sum(m => m.H.AdvanceAdjusted)
            }).ToList();

            foreach (var item in AdvanceData)
            {
                if (item.TotalAdvanceAdjusted > item.TotalAdvanceAmount)
                {
                    string CostCenterName = new CostCenterService(_unitOfWork).Find(item.CostCenterId).CostCenterName;
                    ErrorMsg = "Total adjusted advance for purja " + CostCenterName + " is exceeding total advance amount.";
                }
            }



            var TdsData = (from H in vm.JobInvoiceSummaryViewModel
                           group new { H } by new { H.PersonId } into Result
                           select new
            {
                PersonId = Result.Key.PersonId,
                TotalTdsAmount = Result.Max(m => m.H.TdsAmount),
                TotalTdsAdjusted = Result.Sum(m => m.H.TdsAdjusted)
            }).ToList();

            foreach (var item in TdsData)
            {
                if (item.TotalTdsAdjusted > item.TotalTdsAmount)
                {
                    string PersonName = new PersonService(_unitOfWork).Find(item.PersonId).Name;
                    ErrorMsg = "Total adjusted tds for person " + PersonName + " is exceeding total tds amount.";
                }
            }

            if (ErrorMsg != "")
            {
                TempData["CSEXC"] = ErrorMsg;
                return(View("Summary", vm));
            }



            List <LogTypeViewModel> LogList = new List <LogTypeViewModel>();
            bool Modified = false;
            int  Id       = vm.JobInvoiceHeaderId;

            var Header = _JobInvoiceHeaderService.Find(Id);


            int LedgerHeaderId                   = 0;
            int LedgerLineId                     = 0;
            int LedgerId                         = 0;
            int LedgerAdjId                      = 0;
            int TanaPaymentDueCnt                = 0;
            int TdsCollectionCnt                 = 0;
            int SavedTanaLedgerHeaderId          = 0;
            int SavedTdsCollectionLedgerHeaderId = 0;
            int TanaPaymentDueAcId               = new LedgerAccountService(_unitOfWork).Find(TanaPaymentDueAccount).LedgerAccountId;


            DeleteLedgerTransaction(Header.JobInvoiceHeaderId);


            DataTable AdvanceAdjustedDataTable = new DataTable();

            AdvanceAdjustedDataTable.Columns.Add("Id");
            AdvanceAdjustedDataTable.Columns.Add("Qty");

            foreach (var item in vm.JobInvoiceSummaryViewModel)
            {
                if (item.TanaAmount > 0)
                {
                    #region "Tana Payment Due"
                    if (TanaPaymentDueCnt == 0)
                    {
                        LedgerHeader TanaLedgerHeader = new LedgerHeader();
                        TanaLedgerHeader.LedgerHeaderId  = LedgerHeaderId;
                        TanaLedgerHeader.DocTypeId       = new DocumentTypeService(_unitOfWork).Find(TanaPaymentDueDocType).DocumentTypeId;
                        TanaLedgerHeader.DocDate         = DateTime.Now.Date;
                        TanaLedgerHeader.DivisionId      = Header.DivisionId;
                        TanaLedgerHeader.SiteId          = Header.SiteId;
                        TanaLedgerHeader.DocNo           = new DocumentTypeService(_unitOfWork).FGetNewDocNo("DocNo", ConfigurationManager.AppSettings["DataBaseSchema"] + ".LedgerHeaders", TanaLedgerHeader.DocTypeId, TanaLedgerHeader.DocDate, TanaLedgerHeader.DivisionId, TanaLedgerHeader.SiteId);
                        TanaLedgerHeader.LedgerAccountId = TanaPaymentDueAcId;
                        TanaLedgerHeader.Narration       = "Tana Payment Due";
                        TanaLedgerHeader.Status          = (int)StatusConstants.Submitted;
                        TanaLedgerHeader.ProcessId       = new ProcessService(_unitOfWork).Find(ProcessConstants.Weaving).ProcessId;
                        TanaLedgerHeader.CostCenterId    = null;
                        TanaLedgerHeader.AdjustmentType  = "Due";
                        TanaLedgerHeader.PaymentFor      = DateTime.Now.Date;

                        TanaLedgerHeader.ReferenceDocId     = Header.JobInvoiceHeaderId;
                        TanaLedgerHeader.ReferenceDocTypeId = Header.DocTypeId;

                        TanaLedgerHeader.CreatedDate  = DateTime.Now;
                        TanaLedgerHeader.ModifiedDate = DateTime.Now;
                        TanaLedgerHeader.CreatedBy    = User.Identity.Name;
                        TanaLedgerHeader.ModifiedBy   = User.Identity.Name;
                        TanaLedgerHeader.ObjectState  = Model.ObjectState.Added;
                        new LedgerHeaderService(_unitOfWork).Create(TanaLedgerHeader);
                        LedgerHeaderId          = LedgerHeaderId - 1;
                        TanaPaymentDueCnt       = TanaPaymentDueCnt + 1;
                        SavedTanaLedgerHeaderId = TanaLedgerHeader.LedgerHeaderId;
                    }


                    LedgerLine TanaLedgerLine = new LedgerLine();
                    TanaLedgerLine.LedgerLineId       = LedgerLineId;
                    TanaLedgerLine.LedgerHeaderId     = SavedTanaLedgerHeaderId;
                    TanaLedgerLine.LedgerAccountId    = new LedgerAccountService(_unitOfWork).GetLedgerAccountByPersondId(item.PersonId).LedgerAccountId;
                    TanaLedgerLine.CostCenterId       = item.CostCenterId;
                    TanaLedgerLine.ProductUidId       = item.ProductUidId;
                    TanaLedgerLine.Amount             = item.TanaAmount;
                    TanaLedgerLine.ReferenceDocLineId = item.JobInvoiceLineId;
                    TanaLedgerLine.ReferenceDocTypeId = Header.DocTypeId;
                    TanaLedgerLine.CreatedDate        = DateTime.Now;
                    TanaLedgerLine.ModifiedDate       = DateTime.Now;
                    TanaLedgerLine.CreatedBy          = User.Identity.Name;
                    TanaLedgerLine.ModifiedBy         = User.Identity.Name;
                    TanaLedgerLine.ObjectState        = Model.ObjectState.Added;
                    new LedgerLineService(_unitOfWork).Create(TanaLedgerLine);
                    LedgerLineId = LedgerLineId - 1;


                    Ledger TanaLedgerDr = new Ledger();
                    TanaLedgerDr.LedgerId              = LedgerId;
                    TanaLedgerDr.LedgerHeaderId        = SavedTanaLedgerHeaderId;
                    TanaLedgerDr.LedgerAccountId       = TanaPaymentDueAcId;
                    TanaLedgerDr.ContraLedgerAccountId = TanaLedgerLine.LedgerAccountId;
                    TanaLedgerDr.CostCenterId          = null;
                    TanaLedgerDr.ProductUidId          = item.ProductUidId;
                    TanaLedgerDr.AmtDr        = TanaLedgerLine.Amount;
                    TanaLedgerDr.AmtCr        = 0;
                    TanaLedgerDr.Narration    = "Tana Payment Due";
                    TanaLedgerDr.LedgerLineId = TanaLedgerLine.LedgerLineId;
                    TanaLedgerDr.ObjectState  = Model.ObjectState.Added;
                    new LedgerService(_unitOfWork).Create(TanaLedgerDr);
                    LedgerId = LedgerId - 1;


                    Ledger TanaLedgerCr = new Ledger();
                    TanaLedgerDr.LedgerId              = LedgerId;
                    TanaLedgerCr.LedgerHeaderId        = SavedTanaLedgerHeaderId;
                    TanaLedgerCr.LedgerAccountId       = TanaLedgerLine.LedgerAccountId;
                    TanaLedgerCr.ContraLedgerAccountId = TanaPaymentDueAcId;
                    TanaLedgerCr.CostCenterId          = item.CostCenterId;
                    TanaLedgerDr.ProductUidId          = item.ProductUidId;
                    TanaLedgerCr.AmtDr        = 0;
                    TanaLedgerCr.AmtCr        = TanaLedgerLine.Amount;
                    TanaLedgerCr.Narration    = null;
                    TanaLedgerCr.LedgerLineId = TanaLedgerLine.LedgerLineId;
                    TanaLedgerCr.ObjectState  = Model.ObjectState.Added;
                    new LedgerService(_unitOfWork).Create(TanaLedgerCr);
                    LedgerId = LedgerId - 1;

                    #endregion
                }

                if (item.TdsAdjusted > 0)
                {
                    #region "Tds Collection"


                    var TdsRate = (from H in db.BusinessEntity
                                   join Tr in db.TdsRate on new { X1 = H.TdsCategoryId ?? 0, X2 = H.TdsGroupId ?? 0 } equals new { X1 = Tr.TdsCategoryId, X2 = Tr.TdsGroupId } into TdsRateTable
                                   from TdsRateTab in TdsRateTable.DefaultIfEmpty()
                                   where H.PersonID == item.PersonId
                                   select TdsRateTab).FirstOrDefault();


                    if (TdsCollectionCnt == 0)
                    {
                        LedgerHeader TdsLedgerHeader = new LedgerHeader();
                        TdsLedgerHeader.LedgerHeaderId  = LedgerHeaderId;
                        TdsLedgerHeader.DocTypeId       = new DocumentTypeService(_unitOfWork).Find(TdsCollectionDocType).DocumentTypeId;
                        TdsLedgerHeader.DocDate         = DateTime.Now.Date;
                        TdsLedgerHeader.DivisionId      = Header.DivisionId;
                        TdsLedgerHeader.SiteId          = Header.SiteId;
                        TdsLedgerHeader.DocNo           = new DocumentTypeService(_unitOfWork).FGetNewDocNo("DocNo", ConfigurationManager.AppSettings["DataBaseSchema"] + ".LedgerHeaders", TdsLedgerHeader.DocTypeId, TdsLedgerHeader.DocDate, TdsLedgerHeader.DivisionId, TdsLedgerHeader.SiteId);
                        TdsLedgerHeader.LedgerAccountId = TdsRate.LedgerAccountId;
                        TdsLedgerHeader.Narration       = "Tds Adjustment";
                        TdsLedgerHeader.Status          = (int)StatusConstants.Submitted;
                        TdsLedgerHeader.ProcessId       = new ProcessService(_unitOfWork).Find(ProcessConstants.Weaving).ProcessId;
                        TdsLedgerHeader.CostCenterId    = null;
                        TdsLedgerHeader.AdjustmentType  = "Due";
                        TdsLedgerHeader.PaymentFor      = DateTime.Now.Date;

                        TdsLedgerHeader.ReferenceDocId     = Header.JobInvoiceHeaderId;
                        TdsLedgerHeader.ReferenceDocTypeId = Header.DocTypeId;

                        TdsLedgerHeader.CreatedDate  = DateTime.Now;
                        TdsLedgerHeader.ModifiedDate = DateTime.Now;
                        TdsLedgerHeader.CreatedBy    = User.Identity.Name;
                        TdsLedgerHeader.ModifiedBy   = User.Identity.Name;
                        TdsLedgerHeader.ObjectState  = Model.ObjectState.Added;
                        new LedgerHeaderService(_unitOfWork).Create(TdsLedgerHeader);
                        LedgerHeaderId   = LedgerHeaderId - 1;
                        TdsCollectionCnt = TdsCollectionCnt + 1;
                        SavedTdsCollectionLedgerHeaderId = TdsLedgerHeader.LedgerHeaderId;
                    }


                    LedgerLine TdsLedgerLine = new LedgerLine();
                    TdsLedgerLine.LedgerLineId    = LedgerLineId;
                    TdsLedgerLine.LedgerHeaderId  = SavedTdsCollectionLedgerHeaderId;
                    TdsLedgerLine.LedgerAccountId = new LedgerAccountService(_unitOfWork).GetLedgerAccountByPersondId(item.PersonId).LedgerAccountId;
                    if (item.CostCenterId != 0)
                    {
                        TdsLedgerLine.CostCenterId = item.CostCenterId;
                    }
                    TdsLedgerLine.ProductUidId = item.ProductUidId;
                    TdsLedgerLine.BaseValue    = item.TdsAdjusted * 100 / TdsRate.Percentage;
                    TdsLedgerLine.Amount       = item.TdsAdjusted;
                    TdsLedgerLine.CreatedDate  = DateTime.Now;
                    TdsLedgerLine.ModifiedDate = DateTime.Now;
                    TdsLedgerLine.CreatedBy    = User.Identity.Name;
                    TdsLedgerLine.ModifiedBy   = User.Identity.Name;
                    TdsLedgerLine.ObjectState  = Model.ObjectState.Added;
                    new LedgerLineService(_unitOfWork).Create(TdsLedgerLine);
                    LedgerLineId = LedgerLineId - 1;


                    Ledger TdsLedgerDr = new Ledger();
                    TdsLedgerDr.LedgerId              = LedgerId;
                    TdsLedgerDr.LedgerHeaderId        = SavedTdsCollectionLedgerHeaderId;
                    TdsLedgerDr.LedgerAccountId       = TdsLedgerLine.LedgerAccountId;
                    TdsLedgerDr.ContraLedgerAccountId = TdsRate.LedgerAccountId;
                    if (item.CostCenterId != 0)
                    {
                        TdsLedgerDr.CostCenterId = item.CostCenterId;
                    }
                    TdsLedgerDr.ProductUidId = item.ProductUidId;
                    TdsLedgerDr.AmtDr        = TdsLedgerLine.Amount;
                    TdsLedgerDr.AmtCr        = 0;
                    TdsLedgerDr.Narration    = "Tds Adjusted.";
                    TdsLedgerDr.LedgerLineId = TdsLedgerLine.LedgerLineId;
                    TdsLedgerDr.ObjectState  = Model.ObjectState.Added;
                    new LedgerService(_unitOfWork).Create(TdsLedgerDr);
                    LedgerId = LedgerId - 1;


                    Ledger TdsLedgerCr = new Ledger();
                    TdsLedgerCr.LedgerId              = LedgerId;
                    TdsLedgerCr.LedgerHeaderId        = SavedTdsCollectionLedgerHeaderId;
                    TdsLedgerCr.LedgerAccountId       = (int)TdsRate.LedgerAccountId;
                    TdsLedgerCr.ContraLedgerAccountId = TdsLedgerLine.LedgerAccountId;
                    TdsLedgerCr.CostCenterId          = null;
                    TdsLedgerCr.ProductUidId          = item.ProductUidId;
                    TdsLedgerCr.AmtDr        = 0;
                    TdsLedgerCr.AmtCr        = TdsLedgerLine.Amount;
                    TdsLedgerCr.Narration    = null;
                    TdsLedgerCr.LedgerLineId = TdsLedgerLine.LedgerLineId;
                    TdsLedgerCr.ObjectState  = Model.ObjectState.Added;
                    new LedgerService(_unitOfWork).Create(TdsLedgerCr);
                    LedgerId = LedgerId - 1;


                    var TempLedger = (from L in db.Ledger
                                      where L.ReferenceDocLineId == item.JobInvoiceLineId && L.ReferenceDocTypeId == Header.DocTypeId
                                      select new
                    {
                        LedgerCrId = L.LedgerId
                    }).FirstOrDefault();

                    LedgerAdj LedgerAdj = new LedgerAdj();
                    LedgerAdj.LedgerAdjId  = LedgerAdjId;
                    LedgerAdj.DrLedgerId   = TdsLedgerDr.LedgerId;
                    LedgerAdj.CrLedgerId   = TempLedger == null ? 0 : TempLedger.LedgerCrId;
                    LedgerAdj.SiteId       = Header.SiteId;
                    LedgerAdj.Adj_Type     = "Tds Adjustment";
                    LedgerAdj.Amount       = TdsLedgerDr.AmtDr;
                    LedgerAdj.CreatedBy    = Header.CreatedBy;
                    LedgerAdj.CreatedDate  = DateTime.Now;
                    LedgerAdj.ModifiedBy   = Header.ModifiedBy;
                    LedgerAdj.ModifiedDate = DateTime.Now;
                    LedgerAdj.ObjectState  = Model.ObjectState.Added;
                    new LedgerAdjService(_unitOfWork).Create(LedgerAdj);
                    LedgerAdjId = LedgerAdjId - 1;

                    #endregion
                }

                if (item.AdvanceAdjusted > 0)
                {
                    var AdvanceAdjustedDataRow = AdvanceAdjustedDataTable.NewRow();
                    AdvanceAdjustedDataRow["Id"]  = item.JobInvoiceLineId;
                    AdvanceAdjustedDataRow["Qty"] = item.AdvanceAdjusted;
                    AdvanceAdjustedDataTable.Rows.Add(AdvanceAdjustedDataRow);
                }
            }


            if (AdvanceAdjustedDataTable.Rows.Count > 0)
            {
                string  ConnectionString = (string)System.Web.HttpContext.Current.Session["DefaultConnectionString"];
                DataSet ds = new DataSet();
                using (SqlConnection sqlConnection = new SqlConnection(ConnectionString))
                {
                    sqlConnection.Open();
                    using (SqlCommand cmd = new SqlCommand("" + ConfigurationManager.AppSettings["DataBaseSchema"] + ".spGetLedgerAdj"))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Connection  = sqlConnection;
                        cmd.Parameters.AddWithValue("@T", AdvanceAdjustedDataTable);
                        cmd.CommandTimeout = 1000;
                        using (SqlDataAdapter adp = new SqlDataAdapter(cmd))
                        {
                            adp.Fill(ds);
                        }
                    }
                }

                for (int j = 0; j <= ds.Tables[0].Rows.Count - 1; j++)
                {
                    LedgerAdj LedgerAdj = new LedgerAdj();
                    LedgerAdj.LedgerAdjId  = LedgerAdjId;
                    LedgerAdj.DrLedgerId   = (int)ds.Tables[0].Rows[j]["LedgerDrId"];
                    LedgerAdj.CrLedgerId   = (int)ds.Tables[0].Rows[j]["LedgerCrId"];
                    LedgerAdj.SiteId       = Header.SiteId;
                    LedgerAdj.Adj_Type     = "Advance Adjustment";
                    LedgerAdj.Amount       = (decimal)ds.Tables[0].Rows[j]["BalanceDr"];
                    LedgerAdj.CreatedBy    = Header.CreatedBy;
                    LedgerAdj.CreatedDate  = DateTime.Now;
                    LedgerAdj.ModifiedBy   = Header.ModifiedBy;
                    LedgerAdj.ModifiedDate = DateTime.Now;
                    LedgerAdj.ObjectState  = Model.ObjectState.Added;
                    new LedgerAdjService(_unitOfWork).Create(LedgerAdj);
                    LedgerAdjId = LedgerAdjId - 1;
                }
            }

            try
            {
                _unitOfWork.Save();
            }

            catch (Exception ex)
            {
                string message = _exception.HandleException(ex);
                ModelState.AddModelError("", message);
                PrepareViewBag(vm.JobInvoiceHeaderId);
                return(Json(new { Success = false }));
            }

            LogActivity.LogActivityDetail(LogVm.Map(new ActiivtyLogViewModel
            {
                DocTypeId    = Header.DocTypeId,
                DocId        = Header.JobInvoiceHeaderId,
                ActivityType = (int)ActivityTypeContants.Modified,
                DocNo        = Header.DocNo,
                //xEModifications = Modifications,
                DocDate   = Header.DocDate,
                DocStatus = Header.Status,
            }));

            string RetUrl = "";


            if (Header.Status == (int)StatusConstants.Drafted || Header.Status == (int)StatusConstants.Import)
            {
                RetUrl = System.Configuration.ConfigurationManager.AppSettings["JobsDomain"] + "/JobInvoiceHeader/Modify/" + Header.JobInvoiceHeaderId;
            }
            else if (Header.Status == (int)StatusConstants.Submitted || Header.Status == (int)StatusConstants.ModificationSubmitted || Header.Status == (int)StatusConstants.Modified)
            {
                RetUrl = System.Configuration.ConfigurationManager.AppSettings["JobsDomain"] + "/JobInvoiceHeader/ModifyAfter_Submit/" + Header.JobInvoiceHeaderId;
            }
            else if (Header.Status == (int)StatusConstants.Approved || Header.Status == (int)StatusConstants.Closed)
            {
                RetUrl = System.Configuration.ConfigurationManager.AppSettings["JobsDomain"] + "/JobInvoiceHeader/ModifyAfter_Approve/" + Header.JobInvoiceHeaderId;
            }
            else
            {
                RetUrl = System.Configuration.ConfigurationManager.AppSettings["JobsDomain"] + "/JobInvoiceHeader/Index/" + Header.DocTypeId;
            }

            return(Json(new { Success = true, Url = RetUrl }));
        }
        public ActionResult Post(JobReceiveHeaderViewModel svm)
        {
            bool   TimePlanValidation = true;
            string ExceptionMsg       = "";
            bool   Continue           = true;

            JobReceiveHeader s = Mapper.Map <JobReceiveHeaderViewModel, JobReceiveHeader>(svm);
            List <WeavingReceiveWizardViewModel> JobOrdersAndQtys = (List <WeavingReceiveWizardViewModel>)System.Web.HttpContext.Current.Session["BarCodesWeavingWizardJobOrder"];



            if (JobOrdersAndQtys.Count() <= 0)
            {
                ModelState.AddModelError("", "No Records Selected");
            }

            int JobWorkerCnt = (from l in JobOrdersAndQtys
                                group l by l.JobWorkerId into g
                                select new
            {
                JobWorkerId = g.Key,
            }).Distinct().Count();

            if (JobWorkerCnt > 1)
            {
                ModelState.AddModelError("", "Select any one Job Worker Orders.");
            }



            s.JobWorkerId   = JobOrdersAndQtys.FirstOrDefault().JobWorkerId;
            svm.JobWorkerId = JobOrdersAndQtys.FirstOrDefault().JobWorkerId;


            #region DocTypeTimeLineValidation

            try
            {
                if (svm.JobReceiveHeaderId <= 0)
                {
                    TimePlanValidation = DocumentValidation.ValidateDocument(Mapper.Map <DocumentUniqueId>(svm), DocumentTimePlanTypeConstants.Create, User.Identity.Name, out ExceptionMsg, out Continue);
                }
                else
                {
                    TimePlanValidation = DocumentValidation.ValidateDocument(Mapper.Map <DocumentUniqueId>(svm), DocumentTimePlanTypeConstants.Modify, User.Identity.Name, out ExceptionMsg, out Continue);
                }
            }
            catch (Exception ex)
            {
                string message = _exception.HandleException(ex);
                TempData["CSEXC"] += message;
                TimePlanValidation = false;
            }

            if (!TimePlanValidation)
            {
                TempData["CSEXC"] += ExceptionMsg;
            }

            #endregion

            if (ModelState.IsValid && (TimePlanValidation || Continue))
            {
                if (svm.JobReceiveHeaderId <= 0)
                {
                    if (JobOrdersAndQtys.Count() > 0)
                    {
                        s.CreatedDate  = DateTime.Now;
                        s.ModifiedDate = DateTime.Now;
                        s.CreatedBy    = User.Identity.Name;
                        s.ModifiedBy   = User.Identity.Name;
                        s.Status       = (int)StatusConstants.Drafted;
                        _JobReceiveHeaderService.Create(s);


                        int Cnt = 0;
                        int Sr  = 0;


                        JobReceiveSettings Settings = new JobReceiveSettingsService(_unitOfWork).GetJobReceiveSettingsForDocument(s.DocTypeId, s.DivisionId, s.SiteId);

                        int ProductUidCountForJobOrderLine = 0;
                        int pk = 0;

                        var JobOrderLineIds = JobOrdersAndQtys.Select(m => m.JobOrderLineId).ToArray();

                        var BalQtyandUnits = (from p in db.ViewJobOrderBalance
                                              join t in db.Product on p.ProductId equals t.ProductId
                                              where JobOrderLineIds.Contains(p.JobOrderLineId)
                                              select new
                        {
                            BalQty = p.BalanceQty,
                            JobOrderLineId = p.JobOrderLineId,
                            UnitId = t.UnitId,
                        }).ToList();

                        if (ModelState.IsValid)
                        {
                            foreach (var SelectedJobOrderLine in JobOrdersAndQtys)
                            {
                                if (SelectedJobOrderLine.JobOrderLineId > 0)
                                {
                                    if (SelectedJobOrderLine.ToProductUidName != "" && SelectedJobOrderLine.ToProductUidName != null && SelectedJobOrderLine.FromProductUidName != "" && SelectedJobOrderLine.FromProductUidName != null)
                                    {
                                        if (SelectedJobOrderLine.Qty != (Convert.ToInt32(SelectedJobOrderLine.ToProductUidName) - Convert.ToInt32(SelectedJobOrderLine.FromProductUidName) + 1))
                                        {
                                            string Msg = "";
                                            Msg = "Qty and Barcode series does not match.";
                                            ModelState.AddModelError("", Msg);
                                            PrepareViewBag();
                                            ViewBag.Mode = "Add";
                                            return(View("Create", svm));
                                        }
                                    }



                                    ProductUidCountForJobOrderLine = 0;
                                    var JobOrderLine = new JobOrderLineService(_unitOfWork).Find((SelectedJobOrderLine.JobOrderLineId));
                                    var Product      = new ProductService(_unitOfWork).Find(JobOrderLine.ProductId);

                                    var bal = BalQtyandUnits.Where(m => m.JobOrderLineId == SelectedJobOrderLine.JobOrderLineId).FirstOrDefault();

                                    if (SelectedJobOrderLine.Qty <= bal.BalQty)
                                    {
                                        for (int i = 0; i <= SelectedJobOrderLine.Qty - 1; i++)
                                        {
                                            int?ProductUidHeaderId = null;
                                            int?ProductUidId       = null;


                                            var SisterSite = (from S in db.Site where S.PersonId == s.JobWorkerId select S).FirstOrDefault();

                                            //if (!string.IsNullOrEmpty(Settings.SqlProcGenProductUID))
                                            if (SisterSite == null)
                                            {
                                                ProductUidHeader ProdUidHeader = new ProductUidHeader();

                                                ProdUidHeader.ProductUidHeaderId = Cnt;
                                                ProdUidHeader.ProductId          = JobOrderLine.ProductId;
                                                ProdUidHeader.Dimension1Id       = JobOrderLine.Dimension1Id;
                                                ProdUidHeader.Dimension2Id       = JobOrderLine.Dimension2Id;
                                                ProdUidHeader.GenDocId           = s.JobReceiveHeaderId;
                                                ProdUidHeader.GenDocNo           = s.DocNo;
                                                ProdUidHeader.GenDocTypeId       = s.DocTypeId;
                                                ProdUidHeader.GenDocDate         = s.DocDate;
                                                ProdUidHeader.GenPersonId        = s.JobWorkerId;
                                                ProdUidHeader.CreatedBy          = User.Identity.Name;
                                                ProdUidHeader.CreatedDate        = DateTime.Now;
                                                ProdUidHeader.ModifiedBy         = User.Identity.Name;
                                                ProdUidHeader.ModifiedDate       = DateTime.Now;
                                                ProdUidHeader.ObjectState        = Model.ObjectState.Added;
                                                new ProductUidHeaderService(_unitOfWork).Create(ProdUidHeader);
                                                ProductUidHeaderId = ProdUidHeader.ProductUidHeaderId;


                                                string ProductUidName = (Convert.ToInt32(SelectedJobOrderLine.FromProductUidName) + ProductUidCountForJobOrderLine).ToString();

                                                ProductUid ProdUid = new ProductUid();
                                                ProdUid.ProductUidHeaderId       = ProdUidHeader.ProductUidHeaderId;
                                                ProdUid.ProductUidName           = ProductUidName;
                                                ProdUid.ProductId                = JobOrderLine.ProductId;
                                                ProdUid.IsActive                 = true;
                                                ProdUid.CreatedBy                = User.Identity.Name;
                                                ProdUid.CreatedDate              = DateTime.Now;
                                                ProdUid.ModifiedBy               = User.Identity.Name;
                                                ProdUid.ModifiedDate             = DateTime.Now;
                                                ProdUid.GenLineId                = null;
                                                ProdUid.GenDocId                 = s.JobReceiveHeaderId;
                                                ProdUid.GenDocNo                 = s.DocNo;
                                                ProdUid.GenDocTypeId             = s.DocTypeId;
                                                ProdUid.GenDocDate               = s.DocDate;
                                                ProdUid.GenPersonId              = s.JobWorkerId;
                                                ProdUid.Dimension1Id             = JobOrderLine.Dimension1Id;
                                                ProdUid.Dimension2Id             = JobOrderLine.Dimension2Id;
                                                ProdUid.CurrenctProcessId        = s.ProcessId;
                                                ProdUid.CurrenctGodownId         = s.GodownId;
                                                ProdUid.Status                   = "Receive";
                                                ProdUid.LastTransactionDocId     = s.JobReceiveHeaderId;
                                                ProdUid.LastTransactionDocNo     = s.DocNo;
                                                ProdUid.LastTransactionDocTypeId = s.DocTypeId;
                                                ProdUid.LastTransactionDocDate   = s.DocDate;
                                                ProdUid.LastTransactionPersonId  = s.JobWorkerId;
                                                ProdUid.LastTransactionLineId    = null;
                                                ProdUid.ProductUIDId             = pk;
                                                new ProductUidService(_unitOfWork).Create(ProdUid);
                                                ProductUidId = ProdUid.ProductUIDId;
                                            }

                                            if (ProductUidId == null)
                                            {
                                                string ProductUidName = (Convert.ToInt32(SelectedJobOrderLine.FromProductUidName) + ProductUidCountForJobOrderLine).ToString();
                                                var    temp           = new ProductUidService(_unitOfWork).Find(ProductUidName);
                                                if (temp != null)
                                                {
                                                    ProductUidId = temp.ProductUIDId;
                                                }
                                                else
                                                {
                                                    string Msg = ProductUidName + " is not a valid barcode.";
                                                    ModelState.AddModelError("", Msg);
                                                    PrepareViewBag();
                                                    ViewBag.Mode = "Add";
                                                    return(View("Create", svm));
                                                }

                                                if (temp.CurrenctGodownId != null)
                                                {
                                                    string Msg = ProductUidName + " is already in Stock at Godown " + new GodownService(_unitOfWork).Find(temp.CurrenctGodownId ?? 0).GodownName;
                                                    ModelState.AddModelError("", Msg);
                                                    PrepareViewBag();
                                                    ViewBag.Mode = "Add";
                                                    return(View("Create", svm));
                                                }

                                                if (temp.LastTransactionPersonId != s.JobWorkerId)
                                                {
                                                    string Msg = ProductUidName + ProductUidName + " does not belong to this Job Worker";
                                                    ModelState.AddModelError("", Msg);
                                                    PrepareViewBag();
                                                    ViewBag.Mode = "Add";
                                                    return(View("Create", svm));
                                                }
                                            }


                                            StockViewModel StockViewModel = new StockViewModel();
                                            if (Cnt == 0)
                                            {
                                                StockViewModel.StockHeaderId = s.StockHeaderId ?? 0;
                                            }
                                            else
                                            {
                                                if (s.StockHeaderId != null && s.StockHeaderId != 0)
                                                {
                                                    StockViewModel.StockHeaderId = (int)s.StockHeaderId;
                                                }
                                                else
                                                {
                                                    StockViewModel.StockHeaderId = -1;
                                                }
                                            }

                                            StockViewModel.StockId            = -Cnt;
                                            StockViewModel.DocHeaderId        = s.JobReceiveHeaderId;
                                            StockViewModel.DocLineId          = null;
                                            StockViewModel.DocTypeId          = s.DocTypeId;
                                            StockViewModel.StockHeaderDocDate = s.DocDate;
                                            StockViewModel.StockDocDate       = s.DocDate;
                                            StockViewModel.DocNo      = s.DocNo;
                                            StockViewModel.DivisionId = s.DivisionId;
                                            StockViewModel.SiteId     = s.SiteId;
                                            StockViewModel.CurrencyId = null;
                                            StockViewModel.PersonId   = s.JobWorkerId;
                                            StockViewModel.ProductId  = JobOrderLine.ProductId;
                                            //StockViewModel.ProductUidId = ProdUid.ProductUIDId;
                                            StockViewModel.ProductUidId       = ProductUidId;
                                            StockViewModel.HeaderFromGodownId = null;
                                            StockViewModel.HeaderGodownId     = s.GodownId;
                                            StockViewModel.HeaderProcessId    = s.ProcessId;
                                            StockViewModel.GodownId           = (int)s.GodownId;
                                            StockViewModel.Remark             = s.Remark;
                                            StockViewModel.Status             = s.Status;
                                            StockViewModel.ProcessId          = s.ProcessId;
                                            StockViewModel.LotNo         = null;
                                            StockViewModel.CostCenterId  = SelectedJobOrderLine.CostCenterId;
                                            StockViewModel.Qty_Iss       = 0;
                                            StockViewModel.Qty_Rec       = 1;
                                            StockViewModel.Rate          = SelectedJobOrderLine.Rate;
                                            StockViewModel.ExpiryDate    = null;
                                            StockViewModel.Specification = JobOrderLine.Specification;
                                            StockViewModel.Dimension1Id  = JobOrderLine.Dimension1Id;
                                            StockViewModel.Dimension2Id  = JobOrderLine.Dimension2Id;
                                            StockViewModel.CreatedBy     = User.Identity.Name;
                                            StockViewModel.CreatedDate   = DateTime.Now;
                                            StockViewModel.ModifiedBy    = User.Identity.Name;
                                            StockViewModel.ModifiedDate  = DateTime.Now;

                                            string StockPostingError = "";
                                            StockPostingError = new StockService(_unitOfWork).StockPost(ref StockViewModel);

                                            if (StockPostingError != "")
                                            {
                                                string message = StockPostingError;
                                                ModelState.AddModelError("", message);
                                                return(View("Create", svm));
                                            }

                                            if (Cnt == 0)
                                            {
                                                s.StockHeaderId = StockViewModel.StockHeaderId;
                                            }


                                            JobReceiveLine line = new JobReceiveLine();
                                            line.StockId = StockViewModel.StockId;
                                            //line.ProductUidHeaderId = ProdUidHeader.ProductUidHeaderId;
                                            line.ProductUidHeaderId = ProductUidHeaderId;
                                            //line.ProductUidId = ProdUid.ProductUIDId;
                                            line.ProductUidId       = ProductUidId;
                                            line.JobReceiveHeaderId = s.JobReceiveHeaderId;
                                            line.JobOrderLineId     = JobOrderLine.JobOrderLineId;
                                            line.Qty     = 1;
                                            line.PassQty = 1;
                                            line.LossQty = 0;
                                            line.UnitConversionMultiplier = JobOrderLine.UnitConversionMultiplier;
                                            line.DealQty          = 1 * JobOrderLine.UnitConversionMultiplier;
                                            line.DealUnitId       = JobOrderLine.DealUnitId;
                                            line.Sr               = Sr++;
                                            line.CreatedDate      = DateTime.Now;
                                            line.ModifiedDate     = DateTime.Now;
                                            line.CreatedBy        = User.Identity.Name;
                                            line.ModifiedBy       = User.Identity.Name;
                                            line.JobReceiveLineId = pk;
                                            line.ObjectState      = Model.ObjectState.Added;
                                            new JobReceiveLineService(_unitOfWork).Create(line);

                                            new JobReceiveLineStatusService(_unitOfWork).CreateLineStatus(line.JobReceiveLineId, ref db, false);


                                            pk++;
                                            Cnt = Cnt + 1;
                                            ProductUidCountForJobOrderLine++;
                                        }
                                    }
                                }
                            }
                        }
                        string Errormessage = "";
                        try
                        {
                            _unitOfWork.Save();
                        }

                        catch (Exception ex)
                        {
                            Errormessage = _exception.HandleException(ex);
                            ModelState.AddModelError("", Errormessage);
                            PrepareViewBag();
                            ViewBag.Mode = "Add";
                            return(View("Create", svm));
                        }



                        IEnumerable <JobReceiveLine> JobReceiveLineList = new JobReceiveLineService(_unitOfWork).GetJobReceiveLineList(s.JobReceiveHeaderId);

                        foreach (JobReceiveLine Line in JobReceiveLineList)
                        {
                            if (Line.ProductUidId != null)
                            {
                                ProductUid ProductUid = new ProductUidService(_unitOfWork).Find((int)Line.ProductUidId);
                                ProductUid.GenDocId              = Line.JobReceiveHeaderId;
                                ProductUid.LastTransactionDocId  = Line.JobReceiveHeaderId;
                                ProductUid.GenLineId             = Line.JobReceiveLineId;
                                ProductUid.LastTransactionLineId = Line.JobReceiveLineId;
                                new ProductUidService(_unitOfWork).Update(ProductUid);
                            }
                        }

                        try
                        {
                            _unitOfWork.Save();
                        }

                        catch (Exception ex)
                        {
                            Errormessage = _exception.HandleException(ex);
                            ModelState.AddModelError("", Errormessage);
                            PrepareViewBag();
                            ViewBag.Mode = "Add";
                            return(View("Create", svm));
                        }

                        LogActivity.LogActivityDetail(LogVm.Map(new ActiivtyLogViewModel
                        {
                            DocTypeId    = s.DocTypeId,
                            DocId        = s.JobReceiveHeaderId,
                            ActivityType = (int)ActivityTypeContants.WizardCreate,
                            DocNo        = s.DocNo,
                            DocDate      = s.DocDate,
                            DocStatus    = s.Status,
                        }));

                        System.Web.HttpContext.Current.Session.Remove("BarCodesWeavingWizardJobOrder");

                        return(Redirect(System.Configuration.ConfigurationManager.AppSettings["JobsDomain"] + "/JobReceiveHeader/Modify/" + s.JobReceiveHeaderId));
                    }
                    else
                    {
                        return(Redirect(System.Configuration.ConfigurationManager.AppSettings["JobsDomain"] + "/JobReceiveHeader/Index/" + s.DocTypeId));
                    }
                }
                else
                {
                }
            }
            PrepareViewBag();
            ViewBag.Mode = "Add";
            //return Redirect(System.Configuration.ConfigurationManager.AppSettings["JobsDomain"] + "/JobReceiveHeader/Submit/"+s.JobReceiveHeaderId);
            return(View("Create", svm));
        }