public ActionResult _FilterPost(PurchaseOrderAmendmentFilterViewModel vm)
        {
            List <PurchaseOrderRateAmendmentLineViewModel> temp = _PurchaseOrderRateAmendmentLineService.GetPurchaseOrderLineForMultiSelect(vm).ToList();
            PurchaseOrderAmendmentMasterDetailModel        svm  = new PurchaseOrderAmendmentMasterDetailModel();

            svm.PurchaseOrderRateAmendmentLineViewModel = temp;
            return(PartialView("_Results", svm));
        }
        public ActionResult _ResultsPost(PurchaseOrderAmendmentMasterDetailModel vm)
        {
            List <HeaderChargeViewModel> HeaderCharges = new List <HeaderChargeViewModel>();
            List <LineChargeViewModel>   LineCharges   = new List <LineChargeViewModel>();
            int  pk               = 0;
            int  Serial           = _PurchaseOrderRateAmendmentLineService.GetMaxSr(vm.PurchaseOrderRateAmendmentLineViewModel.FirstOrDefault().PurchaseOrderAmendmentHeaderId);
            bool HeaderChargeEdit = false;
            var  Header           = new PurchaseOrderAmendmentHeaderService(db).Find(vm.PurchaseOrderRateAmendmentLineViewModel.FirstOrDefault().PurchaseOrderAmendmentHeaderId);

            PurchaseOrderSetting Settings = new PurchaseOrderSettingService(_unitOfWork).GetPurchaseOrderSettingForDocument(Header.DocTypeId, Header.DivisionId, Header.SiteId);

            int?MaxLineId = new PurchaseOrderRateAmendmentLineChargeService(_unitOfWork).GetMaxProductCharge(Header.PurchaseOrderAmendmentHeaderId, "Web.PurchaseOrderRateAmendmentLines", "PurchaseOrderAmendmentHeaderId", "PurchaseOrderRateAmendmentLineId");

            int PersonCount = 0;

            if (!Settings.CalculationId.HasValue)
            {
                throw new Exception("Calculation not configured in purchase order settings");
            }
            int CalculationId = Settings.CalculationId ?? 0;
            List <LineDetailListViewModel> LineList = new List <LineDetailListViewModel>();

            Dictionary <int, decimal> LineStatus = new Dictionary <int, decimal>();

            #region BeforeSave
            bool BeforeSave = true;
            try
            {
                BeforeSave = PurchaseOrderAmendmentDocEvents.beforeLineSaveBulkEvent(this, new PurchaseEventArgs(vm.PurchaseOrderRateAmendmentLineViewModel.FirstOrDefault().PurchaseOrderAmendmentHeaderId), ref db);
            }
            catch (Exception ex)
            {
                string message = _exception.HandleException(ex);
                TempData["CSEXCL"] += message;
                EventException      = true;
            }

            if (!BeforeSave)
            {
                ModelState.AddModelError("", "Validation failed before save");
            }
            #endregion

            if (ModelState.IsValid && BeforeSave && !EventException)
            {
                foreach (var item in vm.PurchaseOrderRateAmendmentLineViewModel.Where(m => (m.AmendedRate - m.PurchaseOrderRate) != 0 && m.AAmended == false))
                {
                    PurchaseOrderRateAmendmentLine line = new PurchaseOrderRateAmendmentLine();

                    line.PurchaseOrderAmendmentHeaderId = item.PurchaseOrderAmendmentHeaderId;
                    line.PurchaseOrderLineId            = item.PurchaseOrderLineId;
                    line.Qty               = item.Qty;
                    line.AmendedRate       = item.AmendedRate;
                    line.Rate              = item.AmendedRate - item.PurchaseOrderRate;
                    line.Amount            = item.DealQty * line.Rate;
                    line.PurchaseOrderRate = item.PurchaseOrderRate;
                    line.Sr           = Serial++;
                    line.CreatedDate  = DateTime.Now;
                    line.ModifiedDate = DateTime.Now;
                    line.CreatedBy    = User.Identity.Name;
                    line.ModifiedBy   = User.Identity.Name;
                    line.Remark       = item.Remark;
                    LineStatus.Add(line.PurchaseOrderLineId, line.Rate);

                    line.ObjectState = Model.ObjectState.Added;
                    db.PurchaseOrderRateAmendmentLine.Add(line);

                    LineList.Add(new LineDetailListViewModel {
                        Amount = line.Amount, Rate = line.Rate, LineTableId = line.PurchaseOrderRateAmendmentLineId, HeaderTableId = item.PurchaseOrderAmendmentHeaderId, PersonID = Header.SupplierId, DealQty = item.DealQty
                    });

                    pk++;
                }

                new PurchaseOrderLineStatusService(_unitOfWork).UpdatePurchaseRateOnAmendmentMultiple(LineStatus, Header.DocDate, ref db);


                new ChargesCalculationService(_unitOfWork).CalculateCharges(LineList, vm.PurchaseOrderRateAmendmentLineViewModel.FirstOrDefault().PurchaseOrderAmendmentHeaderId, CalculationId, MaxLineId, out LineCharges, out HeaderChargeEdit, out HeaderCharges, "Web.PurchaseOrderAmendmentHeaderCharges", "Web.PurchaseOrderRateAmendmentLineCharges", out PersonCount, Header.DocTypeId, Header.SiteId, Header.DivisionId);

                //Saving Charges
                foreach (var item in LineCharges)
                {
                    PurchaseOrderRateAmendmentLineCharge PoLineCharge = Mapper.Map <LineChargeViewModel, PurchaseOrderRateAmendmentLineCharge>(item);
                    PoLineCharge.ObjectState = Model.ObjectState.Added;
                    //new PurchaseOrderLineChargeService(_unitOfWork).Create(PoLineCharge);
                    db.PurchaseOrderRateAmendmentLineCharge.Add(PoLineCharge);
                }


                //Saving Header charges
                for (int i = 0; i < HeaderCharges.Count(); i++)
                {
                    if (!HeaderChargeEdit)
                    {
                        PurchaseOrderAmendmentHeaderCharge POHeaderCharge = Mapper.Map <HeaderChargeViewModel, PurchaseOrderAmendmentHeaderCharge>(HeaderCharges[i]);
                        POHeaderCharge.HeaderTableId = vm.PurchaseOrderRateAmendmentLineViewModel.FirstOrDefault().PurchaseOrderAmendmentHeaderId;
                        POHeaderCharge.PersonID      = Header.SupplierId;
                        POHeaderCharge.ObjectState   = Model.ObjectState.Added;
                        //new PurchaseOrderHeaderChargeService(_unitOfWork).Create(POHeaderCharge);
                        db.PurchaseOrderAmendmentHeaderCharges.Add(POHeaderCharge);
                    }
                    else
                    {
                        var footercharge = new PurchaseOrderAmendmentHeaderChargeService(_unitOfWork).Find(HeaderCharges[i].Id);
                        footercharge.Rate        = HeaderCharges[i].Rate;
                        footercharge.Amount      = HeaderCharges[i].Amount;
                        footercharge.ObjectState = Model.ObjectState.Modified;
                        //new PurchaseOrderHeaderChargeService(_unitOfWork).Update(footercharge);
                        db.PurchaseOrderAmendmentHeaderCharges.Add(footercharge);
                    }
                }


                try
                {
                    PurchaseOrderAmendmentDocEvents.onLineSaveBulkEvent(this, new PurchaseEventArgs(vm.PurchaseOrderRateAmendmentLineViewModel.FirstOrDefault().PurchaseOrderAmendmentHeaderId), ref db);
                }
                catch (Exception ex)
                {
                    string message = _exception.HandleException(ex);
                    TempData["CSEXCL"] += message;
                    EventException      = true;
                }

                try
                {
                    if (EventException)
                    {
                        throw new Exception();
                    }
                    db.SaveChanges();
                    //_unitOfWork.Save();
                }

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

                try
                {
                    PurchaseOrderAmendmentDocEvents.afterLineSaveBulkEvent(this, new PurchaseEventArgs(vm.PurchaseOrderRateAmendmentLineViewModel.FirstOrDefault().PurchaseOrderAmendmentHeaderId), ref db);
                }
                catch (Exception ex)
                {
                    string message = _exception.HandleException(ex);
                    TempData["CSEXC"] += message;
                }

                LogActivity.LogActivityDetail(LogVm.Map(new ActiivtyLogViewModel
                {
                    DocTypeId    = Header.DocTypeId,
                    DocId        = Header.PurchaseOrderAmendmentHeaderId,
                    ActivityType = (int)ActivityTypeContants.MultipleCreate,
                    DocNo        = Header.DocNo,
                    DocDate      = Header.DocDate,
                    DocStatus    = Header.Status,
                }));

                return(Json(new { success = true }));
            }
            return(PartialView("_Results", vm));
        }