Esempio n. 1
0
        public ActionResult _FilterPostOrders(PurchaseInvoiceLineFilterViewModel vm)
        {
            List <PurchaseInvoiceLineViewModel> temp = _PurchaseInvoiceLineService.GetPurchaseOrderForFilters(vm).ToList();
            PurchaseInvoiceMasterDetailModel    svm  = new PurchaseInvoiceMasterDetailModel();

            svm.PurchaseInvoiceLineViewModel = temp;
            return(PartialView("_Results", svm));
        }
Esempio n. 2
0
        public ActionResult _ResultsPost(PurchaseInvoiceMasterDetailModel vm)
        {
            List <HeaderChargeViewModel> HeaderCharges = new List <HeaderChargeViewModel>();
            List <LineChargeViewModel>   LineCharges   = new List <LineChargeViewModel>();
            int  pk               = 0;
            int  Serial           = _PurchaseInvoiceLineService.GetMaxSr(vm.PurchaseInvoiceLineViewModel.FirstOrDefault().PurchaseInvoiceHeaderId);
            bool HeaderChargeEdit = false;

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

            PurchaseInvoiceHeader Header = new PurchaseInvoiceHeaderService(_unitOfWork).Find(vm.PurchaseInvoiceLineViewModel.FirstOrDefault().PurchaseInvoiceHeaderId);

            PurchaseInvoiceSetting Settings = new PurchaseInvoiceSettingService(_unitOfWork).GetPurchaseInvoiceSettingForDocument(Header.DocTypeId, Header.DivisionId, Header.SiteId);

            int?MaxLineId = new PurchaseInvoiceLineChargeService(_unitOfWork).GetMaxProductCharge(Header.PurchaseInvoiceHeaderId, "Web.PurchaseInvoiceLines", "PurchaseInvoiceHeaderId", "PurchaseInvoiceLineId");

            int PersonCount   = 0;
            int CalculationId = Settings.CalculationId;

            List <LineDetailListViewModel> LineList = new List <LineDetailListViewModel>();

            var RecptLineIds = vm.PurchaseInvoiceLineViewModel.Select(m => m.PurchaseGoodsReceiptLineId).ToArray();

            var RecptRecords = (from p in db.ViewPurchaseGoodsReceiptBalance
                                where RecptLineIds.Contains(p.PurchaseGoodsReceiptLineId)
                                select new
            {
                LineId = p.PurchaseGoodsReceiptLineId,
                BalQty = p.BalanceQty,
            }).ToList();

            bool BeforeSave = true;

            try
            {
                BeforeSave = PurchaseInvoiceDocEvents.beforeLineSaveBulkEvent(this, new PurchaseEventArgs(vm.PurchaseInvoiceLineViewModel.FirstOrDefault().PurchaseInvoiceHeaderId), ref db);
            }
            catch (Exception ex)
            {
                string message = _exception.HandleException(ex);
                TempData["CSEXCL"] += message;
                EventException      = true;
            }

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

            if (ModelState.IsValid && BeforeSave && !EventException)
            {
                foreach (var item in vm.PurchaseInvoiceLineViewModel)
                {
                    decimal balqty = RecptRecords.Where(m => m.LineId == item.PurchaseGoodsReceiptLineId).FirstOrDefault().BalQty;
                    if (item.DealQty > 0 && (Settings.isMandatoryRate == true ? item.Rate > 0 : 1 == 1) && item.Qty <= balqty)
                    {
                        PurchaseInvoiceLine line = new PurchaseInvoiceLine();
                        line.PurchaseInvoiceHeaderId    = item.PurchaseInvoiceHeaderId;
                        line.PurchaseGoodsReceiptLineId = item.PurchaseGoodsReceiptLineId;
                        line.UnitConversionMultiplier   = item.UnitConversionMultiplier;
                        line.Rate        = item.Rate;
                        line.DealUnitId  = item.DealUnitId;
                        line.DocQty      = item.DocQty;
                        line.DealQty     = item.DealQty;
                        line.DiscountPer = item.DiscountPer;
                        //line.Amount = (item.DealQty * item.RateAfterDiscount);
                        if (Settings.CalculateDiscountOnRate)
                        {
                            var temprate = item.Rate - (item.Rate * item.DiscountPer / 100);
                            line.Amount = line.DealQty * temprate ?? 0;
                        }
                        else
                        {
                            var DiscountAmt = (item.Rate * line.DealQty) * item.DiscountPer / 100;
                            line.Amount = (item.Rate * line.DealQty) - (DiscountAmt ?? 0);
                        }
                        line.CreatedDate           = DateTime.Now;
                        line.ModifiedDate          = DateTime.Now;
                        line.Sr                    = Serial++;
                        line.CreatedBy             = User.Identity.Name;
                        line.ModifiedBy            = User.Identity.Name;
                        line.PurchaseInvoiceLineId = pk;
                        line.ObjectState           = Model.ObjectState.Added;
                        db.PurchaseInvoiceLine.Add(line);
                        //_PurchaseInvoiceLineService.Create(line);

                        LineStatus.Add(line.PurchaseGoodsReceiptLineId, line.DocQty);


                        LineList.Add(new LineDetailListViewModel {
                            Amount = line.Amount, Rate = line.Rate, LineTableId = line.PurchaseInvoiceLineId, HeaderTableId = item.PurchaseInvoiceHeaderId, PersonID = Header.SupplierId, DealQty = line.DealQty
                        });
                        RefIds.Add(new LineReferenceIds {
                            LineId = line.PurchaseInvoiceLineId, RefLineId = line.PurchaseGoodsReceiptLineId
                        });
                        pk++;
                    }
                }

                int[] RecLineIds = null;
                RecLineIds = RefIds.Select(m => m.RefLineId).ToArray();

                var temp = (from p in db.PurchaseGoodsReceiptLine
                            where RecLineIds.Contains(p.PurchaseGoodsReceiptLineId)
                            join t in db.PurchaseOrderLine on p.PurchaseOrderLineId equals t.PurchaseOrderLineId
                            join LineCharge in db.PurchaseOrderLineCharge on p.PurchaseOrderLineId equals LineCharge.LineTableId
                            join HeaderCharge in db.PurchaseOrderHeaderCharges on t.PurchaseOrderHeaderId equals HeaderCharge.HeaderTableId
                            group new { p, LineCharge, HeaderCharge } by new { p.PurchaseGoodsReceiptLineId } into g
                            select new
                {
                    LineId = g.Key.PurchaseGoodsReceiptLineId,
                    HeaderCharges = g.Select(m => m.HeaderCharge).ToList(),
                    Linecharges = g.Select(m => m.LineCharge).ToList(),
                }).ToList();

                var temp2 = (from p in LineList
                             join t in RefIds on p.LineTableId equals t.LineId
                             join t2 in temp on t.RefLineId equals t2.LineId into table
                             from LineLis in table.DefaultIfEmpty()
                             orderby p.LineTableId
                             select new LineDetailListViewModel
                {
                    Amount = p.Amount,
                    DealQty = p.DealQty,
                    HeaderTableId = p.HeaderTableId,
                    LineTableId = p.LineTableId,
                    PersonID = p.PersonID,
                    Rate = p.Rate,
                    RLineCharges = (LineLis == null ? null : Mapper.Map <List <LineChargeViewModel> >(LineLis.Linecharges)),
                }).ToList();



                new ChargesCalculationService(_unitOfWork).CalculateCharges(temp2, vm.PurchaseInvoiceLineViewModel.FirstOrDefault().PurchaseInvoiceHeaderId, CalculationId, MaxLineId, out LineCharges, out HeaderChargeEdit, out HeaderCharges, "Web.PurchaseInvoiceHeaderCharges", "Web.PurchaseInvoiceLineCharges", out PersonCount, Header.DocTypeId, Header.SiteId, Header.DivisionId);

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


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

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

                if (Header.Status != (int)StatusConstants.Drafted)
                {
                    Header.Status       = (int)StatusConstants.Modified;
                    Header.ModifiedBy   = User.Identity.Name;
                    Header.ModifiedDate = DateTime.Now;
                    Header.ObjectState  = Model.ObjectState.Modified;
                    db.PurchaseInvoiceHeader.Add(Header);
                }


                try
                {
                    PurchaseInvoiceDocEvents.onLineSaveBulkEvent(this, new PurchaseEventArgs(vm.PurchaseInvoiceLineViewModel.FirstOrDefault().PurchaseInvoiceHeaderId), 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
                {
                    PurchaseInvoiceDocEvents.afterLineSaveBulkEvent(this, new PurchaseEventArgs(vm.PurchaseInvoiceLineViewModel.FirstOrDefault().PurchaseInvoiceHeaderId), ref db);
                }
                catch (Exception ex)
                {
                    string message = _exception.HandleException(ex);
                    TempData["CSEXC"] += message;
                }

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

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