public ActionResult Reviewed(int Id, string IndexType, string UserRemark, string IsContinue)
        {
            SaleOrderHeader pd = new SaleOrderHeaderService(_unitOfWork).Find(Id);

            if (ModelState.IsValid)
            {
                pd.ReviewCount = (pd.ReviewCount ?? 0) + 1;
                pd.ReviewBy   += User.Identity.Name + ", ";

                _SaleOrderHeaderService.Update(pd);

                _unitOfWork.Save();

                LogActivity.LogActivityDetail(LogVm.Map(new ActiivtyLogViewModel
                {
                    DocTypeId    = pd.DocTypeId,
                    DocId        = pd.SaleOrderHeaderId,
                    ActivityType = (int)ActivityTypeContants.Reviewed,
                    UserRemark   = UserRemark,
                    DocNo        = pd.DocNo,
                    DocDate      = pd.DocDate,
                    DocStatus    = pd.Status,
                }));

                return(RedirectToAction("Index", new { id = pd.DocTypeId, IndexType = IndexType }).Success("Record reviewed successfully."));
            }

            return(RedirectToAction("Index", new { id = pd.DocTypeId, IndexType = IndexType }).Warning("Error in reviewing."));
        }
        public JsonResult GetUnitConversionDetailJson(int ProductId, string UnitId, string DeliveryUnitId, int HeaderId)
        {
            int UnitConversionForId = new SaleOrderHeaderService(_unitOfWork).Find(HeaderId).UnitConversionForId;

            UnitConversion        uc = new UnitConversionService(_unitOfWork).GetUnitConversionForUCF(ProductId, UnitId, DeliveryUnitId, UnitConversionForId);
            List <SelectListItem> UnitConversionJson = new List <SelectListItem>();

            if (uc != null)
            {
                UnitConversionJson.Add(new SelectListItem
                {
                    Text  = uc.Multiplier.ToString(),
                    Value = uc.Multiplier.ToString()
                });
            }
            else
            {
                UnitConversionJson.Add(new SelectListItem
                {
                    Text  = "0",
                    Value = "0"
                });
            }

            return(Json(UnitConversionJson));
        }
        public ActionResult Submitted(int Id, string IndexType, string UserRemark, string IsContinue)
        {
            SaleOrderHeader pd = new SaleOrderHeaderService(_unitOfWork).Find(Id);

            if (ModelState.IsValid)
            {
                if (User.Identity.Name == pd.ModifiedBy || UserRoles.Contains("Admin"))
                {
                    int ActivityType;

                    pd.ReviewBy  = null;
                    pd.Status    = (int)StatusConstants.Submitted;
                    ActivityType = (int)ActivityTypeContants.Submitted;


                    int LedgerHeaderId = 0;
                    LedgerHeaderId    = LedgerPost(pd);
                    pd.LedgerHeaderId = LedgerHeaderId;

                    _SaleOrderHeaderService.Update(pd);


                    _unitOfWork.Save();

                    LogActivity.LogActivityDetail(LogVm.Map(new ActiivtyLogViewModel
                    {
                        DocTypeId    = pd.DocTypeId,
                        DocId        = pd.SaleOrderHeaderId,
                        ActivityType = ActivityType,
                        UserRemark   = UserRemark,
                        DocNo        = pd.DocNo,
                        DocDate      = pd.DocDate,
                        DocStatus    = pd.Status,
                    }));

                    //SendEmail_PODrafted(Id);
                    if (pd.Status == (int)StatusConstants.Submitted)
                    {
                        SaleOrderEmailContents.SendSaleOrderSubmitEmail(Id);
                    }
                    //else if (pd.Status == (int)StatusConstants.ModificationSubmitted)
                    //    SaleOrderEmailContents.SendSaleOrderModifiedEmail(Id, UserRemark);

                    return(RedirectToAction("Index", new { id = pd.DocTypeId, IndexType = IndexType }).Success("Record Submitted successfully."));
                }
                else
                {
                    return(RedirectToAction("Index", new { id = pd.DocTypeId, IndexType = IndexType }).Warning("Record can be submitted by user " + pd.ModifiedBy + " only."));
                }
            }

            return(View());
        }
        private ActionResult _Modify(int id)
        {
            SaleOrderLine temp = _SaleOrderLineService.GetSaleOrderLine(id);

            if (temp == null)
            {
                return(HttpNotFound());
            }

            #region DocTypeTimeLineValidation
            try
            {
                TimePlanValidation = DocumentValidation.ValidateDocumentLine(new DocumentUniqueId {
                    LockReason = temp.LockReason
                }, User.Identity.Name, out ExceptionMsg, out Continue);
            }
            catch (Exception ex)
            {
                string message = _exception.HandleException(ex);
                TempData["CSEXCL"] += message;
                TimePlanValidation  = false;
            }

            if (!TimePlanValidation)
            {
                TempData["CSEXCL"] += ExceptionMsg;
            }
            #endregion

            if ((TimePlanValidation || Continue))
            {
                ViewBag.LineMode = "Edit";
            }

            SaleOrderHeader H = new SaleOrderHeaderService(_unitOfWork).GetSaleOrderHeader(temp.SaleOrderHeaderId);
            ViewBag.DocNo = H.DocNo;
            SaleOrderLineViewModel s = Mapper.Map <SaleOrderLine, SaleOrderLineViewModel>(temp);

            string BuyerSku = (_SaleOrderLineService.GetBuyerSKU(temp.ProductId, temp.SaleOrderHeaderId));

            s.BuyerSku = BuyerSku;

            var settings = new SaleOrderSettingsService(_unitOfWork).GetSaleOrderSettings(H.DocTypeId, H.DivisionId, H.SiteId);
            s.SaleOrderSettings = Mapper.Map <SaleOrderSettings, SaleOrderSettingsViewModel>(settings);

            s.DocumentTypeSettings = new DocumentTypeSettingsService(_unitOfWork).GetDocumentTypeSettingsForDocument(H.DocTypeId);

            s.UnitId = new ProductService(_unitOfWork).Find(temp.ProductId).UnitId;
            PrepareViewBag(H);

            return(PartialView("_Create", s));
        }
        public ActionResult _Create(int Id) //Id ==>Sale Order Header Id
        {
            SaleOrderHeader        H = new SaleOrderHeaderService(_unitOfWork).GetSaleOrderHeader(Id);
            SaleOrderLineViewModel s = new SaleOrderLineViewModel();

            s.SaleOrderHeaderId = H.SaleOrderHeaderId;
            ViewBag.DocNo       = H.DocNo;
            ViewBag.Status      = H.Status;
            ViewBag.LineMode    = "Create";


            var settings = new SaleOrderSettingsService(_unitOfWork).GetSaleOrderSettings(H.DocTypeId, H.DivisionId, H.SiteId);

            s.SaleOrderSettings = Mapper.Map <SaleOrderSettings, SaleOrderSettingsViewModel>(settings);

            s.DocumentTypeSettings = new DocumentTypeSettingsService(_unitOfWork).GetDocumentTypeSettingsForDocument(H.DocTypeId);

            PrepareViewBag(H);
            return(PartialView("_Create", s));
        }
        private ActionResult _Detail(int id)
        {
            SaleOrderLine temp = _SaleOrderLineService.GetSaleOrderLine(id);

            if (temp == null)
            {
                return(HttpNotFound());
            }

            SaleOrderHeader H = new SaleOrderHeaderService(_unitOfWork).GetSaleOrderHeader(temp.SaleOrderHeaderId);

            ViewBag.DocNo = H.DocNo;
            SaleOrderLineViewModel s = Mapper.Map <SaleOrderLine, SaleOrderLineViewModel>(temp);

            s.UnitId = new ProductService(_unitOfWork).Find(temp.ProductId).UnitId;
            PrepareViewBag(H);


            return(PartialView("_Create", s));
        }
        public ActionResult _CreatePost(SaleOrderLineViewModel svm)
        {
            SaleOrderLine   s    = Mapper.Map <SaleOrderLineViewModel, SaleOrderLine>(svm);
            SaleOrderHeader temp = new SaleOrderHeaderService(_unitOfWork).Find(s.SaleOrderHeaderId);
            //if (Command == "Submit" && (s.ProductId == 0))
            //    return RedirectToAction("Submit", "SaleOrderHeader", new { id = s.SaleOrderHeaderId }).Success("Data saved successfully");

            var settings = new SaleOrderSettingsService(_unitOfWork).GetSaleOrderSettingsForDocument(temp.DocTypeId, temp.DivisionId, temp.SiteId);

            if (svm.Qty <= 0)
            {
                ModelState.AddModelError("Qty", "Please Check Qty");
            }
            else if (svm.Rate <= 0 && settings.isMandatoryRate == true)
            {
                ModelState.AddModelError("Rate", "Please Check Rate");
            }
            else if (svm.Amount <= 0 && settings.isMandatoryRate == true)
            {
                ModelState.AddModelError("Amount", "Please Check Amount");
            }
            if (svm.DueDate < temp.DocDate)
            {
                ModelState.AddModelError("DueDate", "DueDate greater than DocDate");
            }

            if (svm.SaleOrderLineId <= 0)
            {
                ViewBag.LineMode = "Create";
            }
            else
            {
                ViewBag.LineMode = "Edit";
            }

            if (ModelState.IsValid)
            {
                if (svm.SaleOrderLineId <= 0)
                {
                    StockViewModel StockViewModel = new StockViewModel();
                    //Posting in Stock
                    if (settings.isPostedInStock.HasValue && settings.isPostedInStock == true)
                    {
                        StockViewModel.StockHeaderId      = temp.StockHeaderId ?? 0;
                        StockViewModel.DocHeaderId        = temp.SaleOrderHeaderId;
                        StockViewModel.DocLineId          = s.SaleOrderLineId;
                        StockViewModel.DocTypeId          = temp.DocTypeId;
                        StockViewModel.StockHeaderDocDate = temp.DocDate;
                        StockViewModel.StockDocDate       = temp.DocDate;
                        StockViewModel.DocNo              = temp.DocNo;
                        StockViewModel.DivisionId         = temp.DivisionId;
                        StockViewModel.SiteId             = temp.SiteId;
                        StockViewModel.CurrencyId         = null;
                        StockViewModel.HeaderProcessId    = null;
                        StockViewModel.PersonId           = temp.SaleToBuyerId;
                        StockViewModel.ProductId          = s.ProductId;
                        StockViewModel.HeaderFromGodownId = null;
                        StockViewModel.HeaderGodownId     = null;
                        StockViewModel.GodownId           = temp.GodownId ?? 0;
                        StockViewModel.ProcessId          = null;
                        StockViewModel.LotNo              = null;
                        StockViewModel.CostCenterId       = null;
                        StockViewModel.Qty_Iss            = 0;
                        StockViewModel.Qty_Rec            = s.Qty;
                        StockViewModel.Rate          = s.Rate;
                        StockViewModel.ExpiryDate    = null;
                        StockViewModel.Specification = s.Specification;
                        StockViewModel.Dimension1Id  = s.Dimension1Id;
                        StockViewModel.Dimension2Id  = s.Dimension2Id;
                        StockViewModel.Dimension3Id  = s.Dimension3Id;
                        StockViewModel.Dimension4Id  = s.Dimension4Id;
                        StockViewModel.Remark        = s.Remark;
                        StockViewModel.ProductUidId  = null;
                        StockViewModel.Status        = temp.Status;
                        StockViewModel.CreatedBy     = temp.CreatedBy;
                        StockViewModel.CreatedDate   = DateTime.Now;
                        StockViewModel.ModifiedBy    = temp.ModifiedBy;
                        StockViewModel.ModifiedDate  = DateTime.Now;

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

                        if (StockPostingError != "")
                        {
                            ModelState.AddModelError("", StockPostingError);
                            return(PartialView("_Create", svm));
                        }

                        s.StockId = StockViewModel.StockId;

                        if (temp.StockHeaderId == null)
                        {
                            temp.StockHeaderId = StockViewModel.StockHeaderId;
                        }
                    }

                    s.CreatedDate  = DateTime.Now;
                    s.ModifiedDate = DateTime.Now;
                    s.CreatedBy    = User.Identity.Name;
                    s.ModifiedBy   = User.Identity.Name;
                    s.ObjectState  = Model.ObjectState.Added;
                    _SaleOrderLineService.Create(s);

                    new SaleOrderLineStatusService(_unitOfWork).CreateLineStatus(s.SaleOrderLineId);

                    SaleOrderHeader header = new SaleOrderHeaderService(_unitOfWork).Find(s.SaleOrderHeaderId);

                    if (temp.StockHeaderId != null && temp.StockHeaderId != 0)
                    {
                        header.StockHeaderId = temp.StockHeaderId;
                    }

                    if (header.Status != (int)StatusConstants.Drafted && header.Status != (int)StatusConstants.Import)
                    {
                        header.Status       = (int)StatusConstants.Modified;
                        header.ModifiedDate = DateTime.Now;
                        header.ModifiedBy   = User.Identity.Name;
                    }

                    new SaleOrderHeaderService(_unitOfWork).Update(header);


                    try
                    {
                        _unitOfWork.Save();
                    }

                    catch (Exception ex)
                    {
                        string message = _exception.HandleException(ex);
                        TempData["CSEXCL"] += message;
                        PrepareViewBag(temp);
                        return(PartialView("_Create", svm));
                    }

                    LogActivity.LogActivityDetail(LogVm.Map(new ActiivtyLogViewModel
                    {
                        DocTypeId    = header.DocTypeId,
                        DocId        = header.SaleOrderHeaderId,
                        DocLineId    = s.SaleOrderLineId,
                        ActivityType = (int)ActivityTypeContants.Added,
                        DocNo        = header.DocNo,
                        DocDate      = header.DocDate,
                        DocStatus    = header.Status,
                    }));


                    return(RedirectToAction("_Create", new { id = s.SaleOrderHeaderId }));
                }
                else
                {
                    List <LogTypeViewModel> LogList = new List <LogTypeViewModel>();


                    SaleOrderHeader header    = new SaleOrderHeaderService(_unitOfWork).Find(svm.SaleOrderHeaderId);
                    StringBuilder   logstring = new StringBuilder();
                    int             status    = header.Status;
                    SaleOrderLine   temp1     = _SaleOrderLineService.Find(svm.SaleOrderLineId);

                    SaleOrderLine ExRec = new SaleOrderLine();
                    ExRec = Mapper.Map <SaleOrderLine>(temp1);

                    //End of Tracking the Modifications::


                    if (temp1.StockId != null)
                    {
                        StockViewModel StockViewModel = new StockViewModel();
                        StockViewModel.StockHeaderId      = temp.StockHeaderId ?? 0;
                        StockViewModel.StockId            = temp1.StockId ?? 0;
                        StockViewModel.DocHeaderId        = temp1.SaleOrderHeaderId;
                        StockViewModel.DocLineId          = temp1.SaleOrderLineId;
                        StockViewModel.DocTypeId          = temp.DocTypeId;
                        StockViewModel.StockHeaderDocDate = temp.DocDate;
                        StockViewModel.StockDocDate       = temp.DocDate;
                        StockViewModel.DocNo              = temp.DocNo;
                        StockViewModel.DivisionId         = temp.DivisionId;
                        StockViewModel.SiteId             = temp.SiteId;
                        StockViewModel.CurrencyId         = null;
                        StockViewModel.HeaderProcessId    = null;
                        StockViewModel.PersonId           = temp.SaleToBuyerId;
                        StockViewModel.ProductId          = s.ProductId;
                        StockViewModel.HeaderFromGodownId = null;
                        StockViewModel.HeaderGodownId     = temp.GodownId;
                        StockViewModel.GodownId           = temp.GodownId ?? 0;
                        StockViewModel.ProcessId          = null;
                        StockViewModel.LotNo              = null;
                        StockViewModel.CostCenterId       = null;
                        StockViewModel.Qty_Iss            = 0;
                        StockViewModel.Qty_Rec            = s.Qty;
                        StockViewModel.Rate          = temp1.Rate;
                        StockViewModel.ExpiryDate    = null;
                        StockViewModel.Specification = temp1.Specification;
                        StockViewModel.Dimension1Id  = temp1.Dimension1Id;
                        StockViewModel.Dimension2Id  = temp1.Dimension2Id;
                        StockViewModel.Dimension3Id  = temp1.Dimension3Id;
                        StockViewModel.Dimension4Id  = temp1.Dimension4Id;
                        StockViewModel.Remark        = s.Remark;
                        StockViewModel.ProductUidId  = null;
                        StockViewModel.Status        = temp.Status;
                        StockViewModel.CreatedBy     = temp1.CreatedBy;
                        StockViewModel.CreatedDate   = temp1.CreatedDate;
                        StockViewModel.ModifiedBy    = User.Identity.Name;
                        StockViewModel.ModifiedDate  = DateTime.Now;

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

                        if (StockPostingError != "")
                        {
                            ModelState.AddModelError("", StockPostingError);
                            return(PartialView("_Create", svm));
                        }
                    }

                    temp1.DueDate                  = svm.DueDate;
                    temp1.ProductId                = svm.ProductId ?? 0;
                    temp1.Specification            = svm.Specification;
                    temp1.Dimension1Id             = svm.Dimension1Id;
                    temp1.Dimension2Id             = svm.Dimension2Id;
                    temp1.Dimension3Id             = svm.Dimension3Id;
                    temp1.Dimension4Id             = svm.Dimension4Id;
                    temp1.Qty                      = svm.Qty ?? 0;
                    temp1.DealQty                  = svm.DealQty ?? 0;
                    temp1.DealUnitId               = svm.DealUnitId;
                    temp1.UnitConversionMultiplier = svm.UnitConversionMultiplier;
                    temp1.Rate                     = svm.Rate ?? 0;
                    temp1.Amount                   = svm.Amount ?? 0;
                    temp1.Remark                   = svm.Remark;
                    temp1.ModifiedDate             = DateTime.Now;
                    temp1.ModifiedBy               = User.Identity.Name;
                    _SaleOrderLineService.Update(temp1);

                    LogList.Add(new LogTypeViewModel
                    {
                        ExObj = ExRec,
                        Obj   = temp1,
                    });

                    if (header.Status != (int)StatusConstants.Drafted && header.Status != (int)StatusConstants.Import)
                    {
                        header.Status       = (int)StatusConstants.Modified;
                        header.ModifiedBy   = User.Identity.Name;
                        header.ModifiedDate = DateTime.Now;
                        new SaleOrderHeaderService(_unitOfWork).Update(header);
                    }
                    XElement Modifications = new ModificationsCheckService().CheckChanges(LogList);
                    try
                    {
                        _unitOfWork.Save();
                    }

                    catch (Exception ex)
                    {
                        string message = _exception.HandleException(ex);
                        TempData["CSEXCL"] += message;
                        PrepareViewBag(temp);
                        return(PartialView("_Create", svm));
                    }

                    //Saving the Activity Log

                    LogActivity.LogActivityDetail(LogVm.Map(new ActiivtyLogViewModel
                    {
                        DocTypeId       = temp.DocTypeId,
                        DocId           = temp1.SaleOrderHeaderId,
                        DocLineId       = temp1.SaleOrderLineId,
                        ActivityType    = (int)ActivityTypeContants.Modified,
                        DocNo           = temp.DocNo,
                        xEModifications = Modifications,
                        DocDate         = temp.DocDate,
                        DocStatus       = temp.Status,
                    }));

                    //End of Saving the Activity Log

                    return(Json(new { success = true }));
                }
            }

            ViewBag.Status = temp.Status;
            PrepareViewBag(temp);
            return(PartialView("_Create", svm));
        }
        public ActionResult DeletePost(SaleOrderLineViewModel vm)
        {
            List <LogTypeViewModel> LogList = new List <LogTypeViewModel>();

            SaleOrderLine SaleOrderLine = _SaleOrderLineService.Find(vm.SaleOrderLineId);

            int?StockId = 0;

            StockId = SaleOrderLine.StockId;

            if (StockId != null)
            {
                new StockService(_unitOfWork).DeleteStock((int)StockId);
            }

            if (SaleOrderLine.ReferenceDocLineId != null && SaleOrderLine.ReferenceDocLineId != 0 && SaleOrderLine.ReferenceDocTypeId != null && SaleOrderLine.ReferenceDocTypeId != 0)
            {
                var temp = (from L in db.SaleEnquiryLine
                            join H in db.SaleEnquiryHeader on L.SaleEnquiryHeaderId equals H.SaleEnquiryHeaderId into SaleEnquiryHeaderTable
                            from SaleEnquiryHeaderTab in SaleEnquiryHeaderTable.DefaultIfEmpty()
                            where SaleEnquiryHeaderTab.DocTypeId == SaleOrderLine.ReferenceDocTypeId && L.SaleEnquiryLineId == SaleOrderLine.ReferenceDocLineId
                            select L).FirstOrDefault();
                if (temp != null)
                {
                    SaleEnquiryLine SaleEnquiryLine = new SaleEnquiryLineService(_unitOfWork).Find(temp.SaleEnquiryLineId);
                    SaleEnquiryLine.LockReason = null;
                    new SaleEnquiryLineService(_unitOfWork).Update(SaleEnquiryLine);
                }
            }

            new SaleOrderLineStatusService(_unitOfWork).Delete(vm.SaleOrderLineId);



            _SaleOrderLineService.Delete(vm.SaleOrderLineId);
            SaleOrderHeader header = new SaleOrderHeaderService(_unitOfWork).Find(SaleOrderLine.SaleOrderHeaderId);

            if (header.Status != (int)StatusConstants.Drafted && header.Status != (int)StatusConstants.Import)
            {
                header.Status       = (int)StatusConstants.Modified;
                header.ModifiedBy   = User.Identity.Name;
                header.ModifiedDate = DateTime.Now;
                new SaleOrderHeaderService(_unitOfWork).Update(header);
            }



            LogList.Add(new LogTypeViewModel
            {
                Obj = SaleOrderLine,
            });

            XElement Modifications = new ModificationsCheckService().CheckChanges(LogList);

            try
            {
                _unitOfWork.Save();
            }
            catch (Exception ex)
            {
                string message = _exception.HandleException(ex);
                TempData["CSEXCL"]      += message;
                ViewBag.Docno            = header.DocNo;
                ViewBag.DeliveryUnitList = new UnitService(_unitOfWork).GetUnitList().ToList();
                return(PartialView("_Create", vm));
            }

            LogActivity.LogActivityDetail(LogVm.Map(new ActiivtyLogViewModel
            {
                DocTypeId       = header.DocTypeId,
                DocId           = header.SaleOrderHeaderId,
                DocLineId       = SaleOrderLine.SaleOrderLineId,
                ActivityType    = (int)ActivityTypeContants.Deleted,
                DocNo           = header.DocNo,
                xEModifications = Modifications,
                DocDate         = header.DocDate,
                DocStatus       = header.Status,
            }));

            return(Json(new { success = true }));
        }
        public void Post(int SaleEnquiryLineId, string ProductName)
        {
            SaleEnquiryLine         Line         = new SaleEnquiryLineService(_unitOfWork).Find(SaleEnquiryLineId);
            SaleEnquiryLineExtended LineExtended = new SaleEnquiryLineExtendedService(_unitOfWork).Find(SaleEnquiryLineId);

            Product Product = new ProductService(_unitOfWork).Find(ProductName);

            if (Product != null)
            {
                Line.ProductId    = Product.ProductId;
                Line.ModifiedDate = DateTime.Now;
                Line.ModifiedBy   = User.Identity.Name;
                Line.ObjectState  = Model.ObjectState.Modified;
                new SaleEnquiryLineService(_unitOfWork).Update(Line);

                SaleEnquiryHeader Header = new SaleEnquiryHeaderService(_unitOfWork).Find(Line.SaleEnquiryHeaderId);

                ProductBuyer PB = new ProductBuyerService(_unitOfWork).Find((int)Header.SaleToBuyerId, Product.ProductId);
                if (PB == null)
                {
                    string BuyerSku = LineExtended.BuyerSpecification.Replace("-", "") + "-" + LineExtended.BuyerSpecification1 + "-" + LineExtended.BuyerSpecification2;

                    ProductBuyer ProdBuyer = new ProductBuyer();
                    ProdBuyer.BuyerId             = (int)Header.SaleToBuyerId;
                    ProdBuyer.ProductId           = Product.ProductId;
                    ProdBuyer.BuyerSku            = LineExtended.BuyerSku == null ? BuyerSku : LineExtended.BuyerSku;
                    ProdBuyer.BuyerUpcCode        = LineExtended.BuyerUpcCode;
                    ProdBuyer.BuyerSpecification  = LineExtended.BuyerSpecification;
                    ProdBuyer.BuyerSpecification1 = LineExtended.BuyerSpecification1;
                    ProdBuyer.BuyerSpecification2 = LineExtended.BuyerSpecification2;
                    ProdBuyer.BuyerSpecification3 = LineExtended.BuyerSpecification3;
                    ProdBuyer.CreatedDate         = DateTime.Now;
                    ProdBuyer.CreatedBy           = User.Identity.Name;
                    ProdBuyer.ModifiedDate        = DateTime.Now;
                    ProdBuyer.ModifiedBy          = User.Identity.Name;
                    ProdBuyer.ObjectState         = Model.ObjectState.Added;
                    new ProductBuyerService(_unitOfWork).Create(ProdBuyer);
                }

                SaleOrderHeader SaleOrderHeader = new SaleOrderHeaderService(_unitOfWork).Find_ByReferenceDocId(Header.DocTypeId, Header.SaleEnquiryHeaderId);
                if (SaleOrderHeader == null)
                {
                    CreateSaleOrder(Header.SaleEnquiryHeaderId);
                }
                else
                {
                    CreateSaleOrderLine(Line.SaleEnquiryLineId, SaleOrderHeader.SaleOrderHeaderId);
                }


                try
                {
                    _unitOfWork.Save();
                }

                catch (Exception ex)
                {
                    string message = _exception.HandleException(ex);
                }
            }
        }
        public ActionResult Post(SaleEnquiryLineViewModel vm)
        {
            if (ModelState.IsValid)
            {
                List <LogTypeViewModel> LogList = new List <LogTypeViewModel>();

                SaleEnquiryLine temp = new SaleEnquiryLineService(_unitOfWork).Find(vm.SaleEnquiryLineId);

                SaleEnquiryLine ExRec = Mapper.Map <SaleEnquiryLine>(temp);

                temp.ProductId    = vm.ProductId;
                temp.ModifiedDate = DateTime.Now;
                temp.ModifiedBy   = User.Identity.Name;
                temp.ObjectState  = Model.ObjectState.Modified;
                new SaleEnquiryLineService(_unitOfWork).Update(temp);

                ProductBuyer PB = new ProductBuyerService(_unitOfWork).Find((int)vm.SaleToBuyerId, (int)vm.ProductId);
                if (PB == null)
                {
                    string BuyerSku = vm.BuyerSpecification.Replace("-", "") + "-" + vm.BuyerSpecification1 + "-" + vm.BuyerSpecification2;

                    ProductBuyer ProdBuyer = new ProductBuyer();
                    ProdBuyer.BuyerId             = (int)vm.SaleToBuyerId;
                    ProdBuyer.ProductId           = (int)vm.ProductId;
                    ProdBuyer.BuyerSku            = vm.BuyerSku == null ? BuyerSku : vm.BuyerSku;
                    ProdBuyer.BuyerUpcCode        = vm.BuyerUpcCode;
                    ProdBuyer.BuyerSpecification  = vm.BuyerSpecification;
                    ProdBuyer.BuyerSpecification1 = vm.BuyerSpecification1;
                    ProdBuyer.BuyerSpecification2 = vm.BuyerSpecification2;
                    ProdBuyer.BuyerSpecification3 = vm.BuyerSpecification3;
                    ProdBuyer.CreatedDate         = DateTime.Now;
                    ProdBuyer.CreatedBy           = User.Identity.Name;
                    ProdBuyer.ModifiedDate        = DateTime.Now;
                    ProdBuyer.ModifiedBy          = User.Identity.Name;
                    ProdBuyer.ObjectState         = Model.ObjectState.Added;
                    new ProductBuyerService(_unitOfWork).Create(ProdBuyer);
                }

                SaleEnquiryHeader SaleEnquiryHeader = new SaleEnquiryHeaderService(_unitOfWork).Find(temp.SaleEnquiryHeaderId);
                SaleOrderHeader   SaleOrderHeader   = new SaleOrderHeaderService(_unitOfWork).Find_ByReferenceDocId(SaleEnquiryHeader.DocTypeId, SaleEnquiryHeader.SaleEnquiryHeaderId);
                if (SaleOrderHeader == null)
                {
                    CreateSaleOrder(temp.SaleEnquiryHeaderId);
                }
                else
                {
                    CreateSaleOrderLine(temp.SaleEnquiryLineId, SaleOrderHeader.SaleOrderHeaderId);
                }

                LogList.Add(new LogTypeViewModel
                {
                    ExObj = ExRec,
                    Obj   = temp,
                });
                XElement Modifications = new ModificationsCheckService().CheckChanges(LogList);

                try
                {
                    _unitOfWork.Save();
                }

                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(TransactionDoctypeConstants.SaleEnquiryProductMapping).DocumentTypeId,
                    DocId           = temp.SaleEnquiryLineId,
                    ActivityType    = (int)ActivityTypeContants.Modified,
                    xEModifications = Modifications,
                }));

                //return RedirectToAction("Index").Success("Data saved successfully");

                //var SaleEnquiryProductMapping = _SaleEnquiryLineService.GetSaleEnquiryLineListForIndex().OrderBy(m => m.SaleEnquiryLineId).OrderBy(m => m.SaleEnquiryLineId).FirstOrDefault();

                //if (SaleEnquiryProductMapping != null)
                //{
                //    return RedirectToAction("Edit", new { id = SaleEnquiryProductMapping.SaleEnquiryLineId }).Success("Data saved successfully");
                //}
                //else
                //{
                //    return RedirectToAction("Index").Success("Data saved successfully");
                //}

                int SaleEnquiryId = _SaleEnquiryLineService.NextId(vm.SaleEnquiryLineId);

                if (SaleEnquiryId > 0)
                {
                    return(RedirectToAction("Edit", new { id = SaleEnquiryId }).Success("Data saved successfully"));
                }
                else
                {
                    return(RedirectToAction("Index").Success("Data saved successfully"));
                }
            }
            return(View("Create", vm));
        }