public ActionResult Import(int id)//Document Type Id
        {
            int DivisionId = (int)System.Web.HttpContext.Current.Session["DivisionId"];
            int SiteId     = (int)System.Web.HttpContext.Current.Session["SiteId"];

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

            if (settings != null)
            {
                if (settings.ImportMenuId != null)
                {
                    MenuViewModel menuviewmodel = new MenuService(_unitOfWork).GetMenu((int)settings.ImportMenuId);

                    if (menuviewmodel == null)
                    {
                        return(View("~/Views/Shared/UnderImplementation.cshtml"));
                    }
                    else if (!string.IsNullOrEmpty(menuviewmodel.URL))
                    {
                        return(Redirect(System.Configuration.ConfigurationManager.AppSettings[menuviewmodel.URL] + "/" + menuviewmodel.ControllerName + "/" + menuviewmodel.ActionName + "/" + id + "?MenuId=" + menuviewmodel.MenuId));
                    }
                    else
                    {
                        return(RedirectToAction(menuviewmodel.ActionName, menuviewmodel.ControllerName, new { MenuId = menuviewmodel.MenuId, id = id }));
                    }
                }
            }
            return(RedirectToAction("Index", new { id = id }));
        }
        // GET: /SaleOrderCancelHeader/Create

        public ActionResult Create(int id)//DocTypeId
        {
            PrepareViewBag(id);
            SaleOrderCancelHeaderIndexViewModel s = new SaleOrderCancelHeaderIndexViewModel();

            s.DivisionId = (int)System.Web.HttpContext.Current.Session["DivisionId"];
            s.SiteId     = (int)System.Web.HttpContext.Current.Session["SiteId"];
            //s.DocNo = _SaleOrderCancelHeaderService.GetMaxDocNo();
            s.CreatedDate = DateTime.Now;
            s.DocDate     = DateTime.Now;
            s.DocTypeId   = id;
            s.DocNo       = new DocumentTypeService(_unitOfWork).FGetNewDocNo("DocNo", ConfigurationManager.AppSettings["DataBaseSchema"] + ".SaleOrderCancelHeaders", s.DocTypeId, s.DocDate, s.DivisionId, s.SiteId);
            SaleOrderSettings temp = new SaleOrderSettingsService(_unitOfWork).GetSaleOrderSettings(id, s.DivisionId, s.SiteId);

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

            if (temp == null && UserRoles.Contains("SysAdmin"))
            {
                return(RedirectToAction("CreateForCancel", "SaleOrderSettings", new { id = s.DocTypeId }).Warning("Please create Sale order Cancel settings"));
            }
            else if (temp == null && !UserRoles.Contains("SysAdmin"))
            {
                return(View("~/Views/Shared/InValidSettings.cshtml"));
            }

            if (new RolePermissionService(_unitOfWork).IsActionAllowed(UserRoles, id, null, this.ControllerContext.RouteData.Values["controller"].ToString(), "Create") == false)
            {
                return(View("~/Views/Shared/PermissionDenied.cshtml").Warning("You don't have permission to do this task."));
            }

            ViewBag.Mode = "Add";

            return(View("Create", s));
        }
        // GET: /SaleOrderSettingMaster/Create

        public ActionResult Create(int id)//DocTypeId
        {
            if (!UserRoles.Contains("SysAdmin"))
            {
                return(View("~/Views/Shared/InValidSettings.cshtml"));
            }
            var DivisionId = (int)System.Web.HttpContext.Current.Session["DivisionId"];
            var SiteId     = (int)System.Web.HttpContext.Current.Session["SiteId"];
            var settings   = new SaleOrderSettingsService(_unitOfWork).GetSaleOrderSettings(id, DivisionId, SiteId);

            if (settings == null)
            {
                SaleOrderSettingsViewModel vm = new SaleOrderSettingsViewModel();
                vm.DocTypeName = new DocumentTypeService(_unitOfWork).Find(id).DocumentTypeName;
                vm.SiteId      = SiteId;
                vm.DivisionId  = DivisionId;
                vm.DocTypeId   = id;
                PrepareViewBag(vm);
                return(View("Create", vm));
            }
            else
            {
                SaleOrderSettingsViewModel temp = AutoMapper.Mapper.Map <SaleOrderSettings, SaleOrderSettingsViewModel>(settings);
                temp.DocTypeName = new DocumentTypeService(_unitOfWork).Find(id).DocumentTypeName;
                PrepareViewBag(temp);
                return(View("Create", temp));
            }
        }
        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 _CreateMultiple(int id, int bid)
        {
            SaleOrderCancelFilterViewModel vm = new SaleOrderCancelFilterViewModel();

            vm.SaleOrderCancelHeaderId = id;
            vm.BuyerId = bid;
            SaleOrderCancelHeader H = new SaleOrderCancelHeaderService(_unitOfWork).Find(id);
            var settings            = new SaleOrderSettingsService(_unitOfWork).GetSaleOrderSettings(H.DocTypeId, H.DivisionId, H.SiteId);

            vm.SaleOrderSettings    = Mapper.Map <SaleOrderSettings, SaleOrderSettingsViewModel>(settings);
            vm.DocumentTypeSettings = new DocumentTypeSettingsService(_unitOfWork).GetDocumentTypeSettingsForDocument(H.DocTypeId);
            return(PartialView("_Filters", vm));
        }
        public ActionResult _Create(int Id, int bid) //Id ==>Sale Order Header Id
        {
            SaleOrderCancelLineViewModel svm = new SaleOrderCancelLineViewModel();
            var header = new SaleOrderCancelHeaderService(_unitOfWork).Find(Id);

            svm.SaleOrderCancelHeaderId = Id;
            svm.BuyerId = bid;
            var settings = new SaleOrderSettingsService(_unitOfWork).GetSaleOrderSettings(header.DocTypeId, header.DivisionId, header.SiteId);

            svm.SaleOrderSettings    = Mapper.Map <SaleOrderSettings, SaleOrderSettingsViewModel>(settings);
            svm.DocumentTypeSettings = new DocumentTypeSettingsService(_unitOfWork).GetDocumentTypeSettingsForDocument(header.DocTypeId);

            ViewBag.LineMode = "Create";
            return(PartialView("_Create", svm));
        }
        private void PrepareViewBagSettings(int id)
        {
            ViewBag.Name = new DocumentTypeService(_unitOfWork).Find(id).DocumentTypeName;
            ViewBag.id   = id;
            var DivisionId = (int)System.Web.HttpContext.Current.Session["DivisionId"];
            var SiteId     = (int)System.Web.HttpContext.Current.Session["SiteId"];
            var settings   = new SaleOrderSettingsService(_unitOfWork).GetSaleOrderSettings(id, DivisionId, SiteId);

            ViewBag.AdminSetting = UserRoles.Contains("Admin").ToString();
            if (settings != null)
            {
                ViewBag.ImportMenuId         = settings.ImportMenuId;
                ViewBag.SqlProcDocumentPrint = settings.SqlProcDocumentPrint;
                ViewBag.ExportMenuId         = settings.ExportMenuId;
            }
        }
        public ActionResult _Delete(int id)
        {
            SaleOrderCancelLineViewModel temp = _SaleOrderCancelLineService.GetSaleOrderCancelLineForEdit(id);


            SaleOrderCancelHeader Header = new SaleOrderCancelHeaderService(_unitOfWork).Find(temp.SaleOrderCancelHeaderId);

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

            temp.SaleOrderSettings    = Mapper.Map <SaleOrderSettings, SaleOrderSettingsViewModel>(settings);
            temp.DocumentTypeSettings = new DocumentTypeSettingsService(_unitOfWork).GetDocumentTypeSettingsForDocument(Header.DocTypeId);

            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 = "Delete";
            }

            return(PartialView("_Create", temp));
        }
        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));
        }
        // GET: /SaleOrderHeader/Create

        public ActionResult Create(int id)
        {
            SaleOrderHeaderIndexViewModel p = new SaleOrderHeaderIndexViewModel();

            p.DocDate     = DateTime.Now.Date;
            p.DueDate     = DateTime.Now.Date;
            p.CreatedDate = DateTime.Now;
            p.DivisionId  = (int)System.Web.HttpContext.Current.Session["DivisionId"];
            p.SiteId      = (int)System.Web.HttpContext.Current.Session["SiteId"];
            SaleOrderSettings settings = new SaleOrderSettingsService(_unitOfWork).GetSaleOrderSettings(id, p.DivisionId, p.SiteId);

            if (settings != null)
            {
                p.DocTypeId           = id;
                p.ShipMethodId        = settings.ShipMethodId;
                p.DeliveryTermsId     = settings.DeliveryTermsId;
                p.Priority            = settings.Priority;
                p.CurrencyId          = settings.CurrencyId;
                p.UnitConversionForId = settings.UnitConversionForId;
                p.ProcessId           = settings.ProcessId;
                PrepareViewBag(p);
            }
            else
            {
                return(RedirectToAction("Edit", "SaleOrderSettings", new { id = id }).Warning("Please create sale order settings"));
            }

            if (new RolePermissionService(_unitOfWork).IsActionAllowed(UserRoles, id, settings.ProcessId, this.ControllerContext.RouteData.Values["controller"].ToString(), "Create") == false)
            {
                return(View("~/Views/Shared/PermissionDenied.cshtml").Warning("You don't have permission to do this task."));
            }

            p.SaleOrderSettings = Mapper.Map <SaleOrderSettings, SaleOrderSettingsViewModel>(settings);
            ViewBag.Mode        = "Add";
            p.DocNo             = new DocumentTypeService(_unitOfWork).FGetNewDocNo("DocNo", ConfigurationManager.AppSettings["DataBaseSchema"] + ".SaleOrderHeaders", p.DocTypeId, p.DocDate, p.DivisionId, p.SiteId);
            return(View("Create", p));
        }
        public ActionResult Detail(int id, string transactionType, string IndexType)
        {
            ViewBag.transactionType = transactionType;
            ViewBag.IndexStatus     = IndexType;

            SaleOrderHeader s = _SaleOrderHeaderService.GetSaleOrderHeader(id);
            SaleOrderHeaderIndexViewModel svm = Mapper.Map <SaleOrderHeader, SaleOrderHeaderIndexViewModel>(s);


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

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


            PrepareViewBag(svm);
            if (s == null)
            {
                return(HttpNotFound());
            }

            if (String.IsNullOrEmpty(transactionType) || transactionType == "detail")
            {
                LogActivity.LogActivityDetail(LogVm.Map(new ActiivtyLogViewModel
                {
                    DocTypeId    = s.DocTypeId,
                    DocId        = s.SaleOrderHeaderId,
                    ActivityType = (int)ActivityTypeContants.Detail,
                    DocNo        = s.DocNo,
                    DocDate      = s.DocDate,
                    DocStatus    = s.Status,
                }));
            }


            return(View("Create", svm));
        }
        // GET: /SaleOrderHeader/Edit/5
        private ActionResult Edit(int id, string IndexType)
        {
            ViewBag.IndexStatus = IndexType;

            SaleOrderHeader s = _SaleOrderHeaderService.GetSaleOrderHeader(id);

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

            if (new RolePermissionService(_unitOfWork).IsActionAllowed(UserRoles, s.DocTypeId, null, this.ControllerContext.RouteData.Values["controller"].ToString(), "Edit") == false)
            {
                return(View("~/Views/Shared/PermissionDenied.cshtml").Warning("You don't have permission to do this task."));
            }

            #region DocTypeTimeLineValidation
            try
            {
                TimePlanValidation = DocumentValidation.ValidateDocument(Mapper.Map <DocumentUniqueId>(s), 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 ((!TimePlanValidation && !Continue))
            {
                return(RedirectToAction("DetailInformation", new { id = id, IndexType = IndexType }));
            }


            SaleOrderHeaderIndexViewModel svm = Mapper.Map <SaleOrderHeader, SaleOrderHeaderIndexViewModel>(s);
            PrepareViewBag(svm);
            ViewBag.Mode = "Edit";

            SaleOrderSettings temp = new SaleOrderSettingsService(_unitOfWork).GetSaleOrderSettings(s.DocTypeId, s.DivisionId, s.SiteId);
            svm.SaleOrderSettings = Mapper.Map <SaleOrderSettings, SaleOrderSettingsViewModel>(temp);
            svm.ProcessId         = temp.ProcessId;

            if (!(System.Web.HttpContext.Current.Request.UrlReferrer.PathAndQuery).Contains("Create"))
            {
                LogActivity.LogActivityDetail(LogVm.Map(new ActiivtyLogViewModel
                {
                    DocTypeId    = s.DocTypeId,
                    DocId        = s.SaleOrderHeaderId,
                    ActivityType = (int)ActivityTypeContants.Detail,
                    DocNo        = s.DocNo,
                    DocDate      = s.DocDate,
                    DocStatus    = s.Status,
                }));
            }

            return(View("Create", svm));
        }
        public ActionResult GeneratePrints(string Ids, int DocTypeId)
        {
            if (!string.IsNullOrEmpty(Ids))
            {
                int SiteId     = (int)System.Web.HttpContext.Current.Session["SiteId"];
                int DivisionId = (int)System.Web.HttpContext.Current.Session["DivisionId"];


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

                if (new RolePermissionService(_unitOfWork).IsActionAllowed(UserRoles, DocTypeId, Settings.ProcessId, this.ControllerContext.RouteData.Values["controller"].ToString(), "GeneratePrints") == false)
                {
                    return(View("~/Views/Shared/PermissionDenied.cshtml").Warning("You don't have permission to do this task."));
                }

                try
                {
                    List <byte[]> PdfStream = new List <byte[]>();
                    foreach (var item in Ids.Split(',').Select(Int32.Parse))
                    {
                        DirectReportPrint drp = new DirectReportPrint();

                        var pd = context.SaleOrderHeader.Find(item);

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

                        byte[] Pdf;

                        if (pd.Status == (int)StatusConstants.Drafted || pd.Status == (int)StatusConstants.Import || pd.Status == (int)StatusConstants.Modified)
                        {
                            //LogAct(item.ToString());
                            Pdf = drp.DirectDocumentPrint(Settings.SqlProcDocumentPrint, User.Identity.Name, item);

                            PdfStream.Add(Pdf);
                        }
                        else if (pd.Status == (int)StatusConstants.Submitted || pd.Status == (int)StatusConstants.ModificationSubmitted)
                        {
                            Pdf = drp.DirectDocumentPrint(Settings.SqlProcDocumentPrint_AfterSubmit, User.Identity.Name, item);

                            PdfStream.Add(Pdf);
                        }
                        else
                        {
                            Pdf = drp.DirectDocumentPrint(Settings.SqlProcDocumentPrint_AfterApprove, User.Identity.Name, item);
                            PdfStream.Add(Pdf);
                        }
                    }

                    PdfMerger pm = new PdfMerger();

                    byte[] Merge = pm.MergeFiles(PdfStream);

                    if (Merge != null)
                    {
                        return(File(Merge, "application/pdf"));
                    }
                }

                catch (Exception ex)
                {
                    string message = _exception.HandleException(ex);
                    return(Json(new { success = "Error", data = message }, JsonRequestBehavior.AllowGet));
                }


                return(Json(new { success = "Success" }, JsonRequestBehavior.AllowGet));
            }
            return(Json(new { success = "Error", data = "No Records Selected." }, JsonRequestBehavior.AllowGet));
        }
        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 SaleOrderExcelImport(int id)
        {
            int    BuyerId  = 0;
            var    file     = Request.Files[0];
            string filePath = Request.MapPath(ConfigurationManager.AppSettings["ExcelFilePath"] + file.FileName);

            file.SaveAs(filePath);
            var excel = new ExcelQueryFactory();

            //excel.FileName =ConfigurationManager.AppSettings["ExcelFilePath"]; //  @"C:\Users\guru\Downloads\PO.xls"; //TODO: Rempve hardcode
            excel.FileName = filePath;
            var SaleOrderRecordList = from c in excel.Worksheet <SaleOrderExcel>()  select c;

            StringBuilder strSku           = new StringBuilder();
            StringBuilder strSaleToBuyer   = new StringBuilder();
            StringBuilder strBillToBuyer   = new StringBuilder();
            StringBuilder strCurrency      = new StringBuilder();
            StringBuilder strShipMethod    = new StringBuilder();
            StringBuilder strDeliveryTerms = new StringBuilder();
            StringBuilder strPriority      = new StringBuilder();
            StringBuilder strOrderNo       = new StringBuilder();

            foreach (var SaleOrderRecord in SaleOrderRecordList)
            {
                if (_SaleOrderHeaderService.FindByDocNo(SaleOrderRecord.OrderNumber) != null)
                {
                    if (!strOrderNo.ToString().Contains("" + SaleOrderRecord.OrderNumber))
                    {
                        strOrderNo.Append(" " + SaleOrderRecord.OrderNumber + ",");
                    }
                }


                if (_ProductService.Find(SaleOrderRecord.Product) == null)
                {
                    if (!strSku.ToString().Contains("" + SaleOrderRecord.Product))
                    {
                        strSku.Append(" " + SaleOrderRecord.Product + ",");
                    }
                }
                if (SaleOrderRecord.SaleToBuyer != null)
                {
                    if (_BuyerService.GetBuyerByName(SaleOrderRecord.SaleToBuyer) == null)
                    {
                        if (!strSaleToBuyer.ToString().Contains("" + SaleOrderRecord.SaleToBuyer))
                        {
                            strSaleToBuyer.Append(" " + SaleOrderRecord.SaleToBuyer + ",");
                        }
                    }
                }
                if (SaleOrderRecord.BillToBuyer != null)
                {
                    if (_BuyerService.GetBuyerByName(SaleOrderRecord.BillToBuyer) == null)
                    {
                        if (!strBillToBuyer.ToString().Contains("" + SaleOrderRecord.BillToBuyer))
                        {
                            strBillToBuyer.Append(" " + SaleOrderRecord.BillToBuyer + ",");
                        }
                    }
                }
                if (SaleOrderRecord.Currency != null)
                {
                    if (_currencyService.GetCurrencyByName(SaleOrderRecord.Currency) == null)
                    {
                        if (!strCurrency.ToString().Contains("" + SaleOrderRecord.Currency))
                        {
                            strCurrency.Append(" " + SaleOrderRecord.Currency + ",");
                        }
                    }
                }
                if (SaleOrderRecord.ShipMethod != null)
                {
                    if (_ShipMethodService.GetShipMethodByName(SaleOrderRecord.ShipMethod) == null)
                    {
                        if (!strShipMethod.ToString().Contains("" + SaleOrderRecord.ShipMethod))
                        {
                            strShipMethod.Append(" " + SaleOrderRecord.ShipMethod + ",");
                        }
                    }
                }
                if (SaleOrderRecord.DeliveryTerms != null)
                {
                    if (_DeliveryTermsService.GetDeliveryTermsByName(SaleOrderRecord.DeliveryTerms) == null)
                    {
                        if (!strDeliveryTerms.ToString().Contains("" + SaleOrderRecord.DeliveryTerms))
                        {
                            strDeliveryTerms.Append(" " + SaleOrderRecord.DeliveryTerms + ",");
                        }
                    }
                }
                if (SaleOrderRecord.Priority != null)
                {
                    if (Enum.IsDefined(typeof(SaleOrderPriority), SaleOrderRecord.Priority) == false)
                    {
                        if (!strPriority.ToString().Contains("" + SaleOrderRecord.Priority))
                        {
                            strPriority.Append(" " + SaleOrderRecord.Priority + ",");
                        }
                    }
                }
            }
            if (!string.IsNullOrEmpty(strSku.ToString()) ||
                !string.IsNullOrEmpty(strOrderNo.ToString()) ||
                !string.IsNullOrEmpty(strSaleToBuyer.ToString()) ||
                !string.IsNullOrEmpty(strBillToBuyer.ToString()) ||
                !string.IsNullOrEmpty(strCurrency.ToString()) ||
                !string.IsNullOrEmpty(strShipMethod.ToString()) ||
                !string.IsNullOrEmpty(strDeliveryTerms.ToString()) ||
                !string.IsNullOrEmpty(strPriority.ToString()))
            {
                if (string.IsNullOrEmpty(strOrderNo.ToString()))
                {
                    ViewBag.orderno = null;
                }
                else
                {
                    ViewBag.orderno = strOrderNo;
                }
                if (string.IsNullOrEmpty(strSku.ToString()))
                {
                    ViewBag.product = null;
                }
                else
                {
                    ViewBag.product = strSku;
                }
                if (string.IsNullOrEmpty(strSaleToBuyer.ToString()))
                {
                    ViewBag.SaleToBuyer = null;
                }
                else
                {
                    ViewBag.SaleToBuyer = strSaleToBuyer;
                }
                if (string.IsNullOrEmpty(strBillToBuyer.ToString()))
                {
                    ViewBag.BillToBuyer = null;
                }
                else
                {
                    ViewBag.BillToBuyer = strBillToBuyer;
                }
                if (string.IsNullOrEmpty(strCurrency.ToString()))
                {
                    ViewBag.Currency = null;
                }
                else
                {
                    ViewBag.Currency = strCurrency;
                }
                if (string.IsNullOrEmpty(strShipMethod.ToString()))
                {
                    ViewBag.ShipMethod = null;
                }
                else
                {
                    ViewBag.ShipMethod = strShipMethod;
                }
                if (string.IsNullOrEmpty(strDeliveryTerms.ToString()))
                {
                    ViewBag.DeliveryTerms = null;
                }
                else
                {
                    ViewBag.DeliveryTerms = strDeliveryTerms;
                }
                if (string.IsNullOrEmpty(strPriority.ToString()))
                {
                    ViewBag.Priority = null;
                }
                else
                {
                    ViewBag.Priority = strPriority;
                }
                return(View());
            }
            else
            {
                string          previousRecord = null;
                int             count          = 0;
                SaleOrderHeader stemp          = new SaleOrderHeader();
                int             LinePk         = 0;
                foreach (var SaleOrderRecord in SaleOrderRecordList)
                {
                    if (count == 0 || SaleOrderRecord.OrderNumber != previousRecord)
                    {
                        //Object for SaleorderHeader Model to Save Order Num,Order Date, Ship Date and Supplier
                        SaleOrderHeader s = new SaleOrderHeader();

                        if (SaleOrderRecord.ShipAddress != null)
                        {
                            s.ShipAddress = SaleOrderRecord.ShipAddress;
                        }

                        s.DocDate       = SaleOrderRecord.OrderDate;
                        s.DocNo         = SaleOrderRecord.OrderNumber;
                        s.DueDate       = SaleOrderRecord.DueDate;
                        s.ActualDueDate = SaleOrderRecord.DueDate;
                        s.BuyerOrderNo  = SaleOrderRecord.BuyerOrderNo;
                        s.CreatedDate   = DateTime.Now;
                        s.ModifiedDate  = DateTime.Now;
                        s.CreatedBy     = User.Identity.Name;


                        s.ModifiedBy    = User.Identity.Name;
                        s.SaleToBuyerId = _BuyerService.GetBuyerByName(SaleOrderRecord.SaleToBuyer).PersonID;
                        if (SaleOrderRecord.BillToBuyer != null)
                        {
                            s.BillToBuyerId = _BuyerService.GetBuyerByName(SaleOrderRecord.BillToBuyer).PersonID;
                        }
                        else
                        {
                            s.BillToBuyerId = s.SaleToBuyerId;
                        }
                        BuyerId = s.SaleToBuyerId;

                        s.DivisionId = (int)System.Web.HttpContext.Current.Session["DivisionId"];
                        s.SiteId     = (int)System.Web.HttpContext.Current.Session["SiteId"];
                        SaleOrderSettings temp = new SaleOrderSettingsService(_unitOfWork).GetSaleOrderSettings(id, s.DivisionId, s.SiteId);

                        if (temp == null)
                        {
                            throw new Exception("Sale order settings is not configured");
                        }

                        if (SaleOrderRecord.Currency != null)
                        {
                            s.CurrencyId = _currencyService.GetCurrencyByName(SaleOrderRecord.Currency).ID;
                        }
                        else
                        {
                            s.CurrencyId = temp.CurrencyId;
                        }

                        if (SaleOrderRecord.ShipMethod == null)
                        {
                            s.ShipMethodId = temp.ShipMethodId;
                        }
                        else
                        {
                            s.ShipMethodId = _ShipMethodService.GetShipMethodByName(SaleOrderRecord.ShipMethod).ShipMethodId;
                        }

                        if (SaleOrderRecord.DeliveryTerms == null)
                        {
                            s.DeliveryTermsId = temp.DeliveryTermsId;
                        }
                        else
                        {
                            s.DeliveryTermsId = _DeliveryTermsService.GetDeliveryTermsByName(SaleOrderRecord.DeliveryTerms).DeliveryTermsId;
                        }

                        if (SaleOrderRecord.Priority == null)
                        {
                            s.Priority = temp.Priority;
                        }
                        else if (SaleOrderRecord.Priority == "Low")
                        {
                            s.Priority = (int)(SaleOrderPriority.Low);
                        }
                        else if (SaleOrderRecord.Priority == "High")
                        {
                            s.Priority = (int)(SaleOrderPriority.High);
                        }
                        else
                        {
                            s.Priority = (int)(SaleOrderPriority.Normal);
                        }

                        if (temp != null)
                        {
                            s.DocTypeId           = temp.DocTypeId;
                            s.UnitConversionForId = temp.UnitConversionForId;
                        }

                        _SaleOrderHeaderService.Create(s);
                        stemp = s;
                    }

                    //Object for SaleOrderLineDetail Model to Save Rate, Quantity, Product

                    Product       product = _ProductService.Find(SaleOrderRecord.Product);
                    SaleOrderLine sl      = new SaleOrderLine();
                    sl.SaleOrderHeaderId = stemp.SaleOrderHeaderId;
                    sl.Rate            = (decimal)SaleOrderRecord.Rate;
                    sl.Qty             = SaleOrderRecord.Quantity;
                    sl.ProductId       = product.ProductId;
                    sl.Specification   = product.ProductSpecification;
                    sl.DueDate         = SaleOrderRecord.DueDate;
                    sl.DealUnitId      = product.UnitId;
                    sl.CreatedDate     = DateTime.Now;
                    sl.ModifiedDate    = DateTime.Now;
                    sl.DealQty         = SaleOrderRecord.Quantity;
                    sl.CreatedBy       = User.Identity.Name;
                    sl.ModifiedBy      = User.Identity.Name;
                    sl.Amount          = sl.Rate * sl.Qty;
                    sl.SaleOrderLineId = LinePk++;

                    if (SaleOrderRecord.BuyerUpcCode != "" && SaleOrderRecord.BuyerUpcCode != null)
                    {
                        ProductBuyer productbuyer = new ProductBuyerService(_unitOfWork).Find(BuyerId, sl.ProductId);
                        if (productbuyer != null)
                        {
                            productbuyer.BuyerUpcCode = SaleOrderRecord.BuyerUpcCode;
                            new ProductBuyerService(_unitOfWork).Update(productbuyer);
                        }
                        else
                        {
                            ProductBuyer Temp = new ProductBuyer();
                            Temp.BuyerId      = BuyerId;
                            Temp.ProductId    = sl.ProductId;
                            Temp.BuyerUpcCode = SaleOrderRecord.BuyerUpcCode;
                            Temp.CreatedDate  = DateTime.Now;
                            Temp.ModifiedDate = DateTime.Now;
                            Temp.CreatedBy    = User.Identity.Name;
                            Temp.ModifiedBy   = User.Identity.Name;
                            Temp.ObjectState  = Model.ObjectState.Added;
                            new ProductBuyerService(_unitOfWork).Create(Temp);
                        }
                    }


                    _SaleOrderLineService.Create(sl);
                    new SaleOrderLineStatusService(_unitOfWork).CreateLineStatus(sl.SaleOrderLineId);

                    count++;
                    previousRecord = SaleOrderRecord.OrderNumber;

                    _unitOfWork.Save();
                }

                ViewBag.id = id;
                return(View("Sucess"));
            }
        }