public string AddShipToAddress(OutletViewModel ovm)
 {
     return "noma sana";
 }
        public ActionResult ImportOutlets(HttpPostedFileBase file)
        {
            try
            {

                // extract only the fielname
                var fileName = Path.GetFileName(file.FileName);

                // var pathh = Path.Combine(Server.MapPath("./Uploads"), fileName);
                var directory = Server.MapPath("~/Uploads");

                if (Directory.Exists(directory) == false)
                {
                    Directory.CreateDirectory(directory);
                }
                var path = Server.MapPath("~/Uploads") + "\\" + fileName;

                file.SaveAs(path);

                string fileExtension = Path.GetExtension(fileName);
                if (fileExtension == ".xlsx")
                {
                    ViewBag.msg = "Please wait. Upload in progress";

                    string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0;HDR=YES;'";

                    OleDbConnection conn = new OleDbConnection(connectionString);
                    try
                    {
                        conn.Open();
                        OleDbCommand command = new OleDbCommand("SELECT code,name,distributor,route,category,type,discountgroup,vatclass,tier FROM [Sheet1$]", conn);
                        OleDbDataReader reader = command.ExecuteReader();
                        OutletViewModel pdvm = new OutletViewModel();
                        while (reader.Read())
                        {
                            string outletCode = reader["code"].ToString().ToLower();
                            string name = reader["name"].ToString().ToLower();

                            string distributor = reader["distributor"].ToString();
                            string route = reader["route"].ToString();
                            string outletCategory = reader["Category"].ToString();
                            string outletType = reader["Type"].ToString();
                            string discountGroup = reader["discountGroup"].ToString();
                            string vatClass = reader["vatClass"].ToString();
                            string pricingTier = reader["tier"].ToString();
                //            bool hasDuplicateName = _outletViewModelBuilder.GetAll()
                //.Any(p => p.Username == username);


                //            if (hasDuplicateName)
                //            { }
                //            else
                //            {

                            pdvm.OutLetCode = outletCode;
                            pdvm.Name = name;
                            pdvm.DiscountGroupName = discountGroup;
                            pdvm.pricingTierCode = pricingTier;
                            pdvm.vatClassName = vatClass;
                            pdvm.OutletTypeCode =outletType;
                            pdvm.OutletCategoryCode = outletCategory;
                            pdvm.Code = route;
                            pdvm.DistributorName = distributor;
                            _outletViewModelBuilder.Save(pdvm);
                           // }
                        }
                    }
                    catch (OleDbException ex)
                    {
                        ViewBag.msg = ex.ToString();
                        return View();
                    }

                    finally
                    {
                        conn.Close();

                    }

                    fi = new FileInfo(path);

                    fi.Delete();
                    _auditLogViewModelBuilder.AddAuditLog(this.User.Identity.Name, "Import", "Users", DateTime.Now);
                    ViewBag.msg = "Upload Successful";
                    return RedirectToAction("ListOutlets");
                }

                else
                {
                    fi = new FileInfo(path);

                    fi.Delete();
                    ViewBag.msg = "Please upload excel file with extension .xlsx";
                    return View();
                }
            }
            catch (Exception ex)
            {

                ViewBag.msg = ex.ToString();
                return View();
            }


        }
        public ActionResult CreateOutlets(OutletViewModel ovm)
        {
            ViewBag.msg = null;
            ViewBag.RouteList = _outletViewModelBuilder.Route();
            ViewBag.OutletCategoryList = _outletViewModelBuilder.OutletCategory();
            ViewBag.OutletTypeList = _outletViewModelBuilder.OutletType();
            ViewBag.DistributorList = _outletViewModelBuilder.GetDistributor();
            ViewBag.DiscountGroupList = _outletViewModelBuilder.GetDiscountGroup();
            ViewBag.VatClassList = _outletViewModelBuilder.GetVatClass();
            ViewBag.PricingTierList = _outletViewModelBuilder.GetPricingTier();
            ViewBag.ASMList = _outletViewModelBuilder.ASM();
            ViewBag.SalesRepList = _outletViewModelBuilder.SalesRep();
            ViewBag.SurveyorList = _outletViewModelBuilder.Surveyor();
            try
            {
                if (ovm.RouteId == Guid.Empty)
                {
                    ModelState.AddModelError("Outlets", "Route Is Required For This Outlet:"+" "+ovm.Name);
                    return View();
                }
                else
                {
                    ovm.Id = Guid.Empty;
                    _outletViewModelBuilder.Save(ovm);
                    _auditLogViewModelBuilder.AddAuditLog(this.User.Identity.Name, "Create", "Outlet", DateTime.Now);
                    var lastAddedOutlet = _outletViewModelBuilder.GetLastCreatedOutlet();
                    return RedirectToAction("CreateContact", "Contact", new { CostCentre = lastAddedOutlet.Id, CostCentreName = lastAddedOutlet.Name, ContactFor = "Outlet" });
                }
            }
            catch (DomainValidationException dve)
            {

                
                ValidationSummary.DomainValidationErrors(dve,ModelState);
                //ViewBag.msg = dve.Message;
                _log.Debug("Failed to create outlet  " + dve.Message);
                _log.Error("Failed to create outlet " + dve.ToString());
                return View();
            }
            catch (Exception ex)
            {
                ViewBag.msg = ex.Message;
                _log.Debug("Failed to create outlet  " + ex.Message);
                _log.Error("Failed to create outlet " + ex.ToString());
                return View();
            }

        }
 public ActionResult EditOutlets(OutletViewModel ovm)
 {
     var regionId = _outletViewModelBuilder.GetRegionIdForDistributor(ovm.distributor);
     ViewBag.RouteList = _outletViewModelBuilder.Route(regionId);
     ViewBag.OutletCategoryList = _outletViewModelBuilder.OutletCategory();
     ViewBag.OutletTypeList = _outletViewModelBuilder.OutletType();
     ViewBag.DistributorList = _outletViewModelBuilder.GetDistributor();
     ViewBag.DiscountGroupList = _outletViewModelBuilder.GetDiscountGroup();
     ViewBag.VatClassList = _outletViewModelBuilder.GetVatClass();
     ViewBag.PricingTierList = _outletViewModelBuilder.GetPricingTier();
     ViewBag.ASMList = _outletViewModelBuilder.ASM();
     ViewBag.SalesRepList = _outletViewModelBuilder.SalesRep();
     ViewBag.SurveyorList = _outletViewModelBuilder.Surveyor();
     try
     {
         if (ovm.RouteId == Guid.Empty)
         {
             ModelState.AddModelError("Outlets", "Route Is Required For This Outlet:" + " " + ovm.Name);
             return View();
         }
         else
         {
             _outletViewModelBuilder.Save(ovm);
             _auditLogViewModelBuilder.AddAuditLog(this.User.Identity.Name, "Edit", "Outlet", DateTime.Now);
             return RedirectToAction("ListOutlets");
         }
     }
     catch (DomainValidationException dve)
     {
         ValidationSummary.DomainValidationErrors(dve, ModelState);
         OutletViewModel ovmErr = _outletViewModelBuilder.Get(ovm.Id);
         return View(ovmErr);
     }
     catch (Exception ex)
     {
         _log.Debug("Failed to edit outlet  " + ex.Message);
         _log.Error("Failed to edit outlet " + ex.ToString());
         OutletViewModel ovmErr = _outletViewModelBuilder.Get(ovm.Id);
         return View(ovmErr);
     }
 }
        public ActionResult ListOutlets(bool? showInactive, string searchText, string Distributor = "", int page = 1, int itemsperpage = 10)
        {
            try
            {
                Stopwatch stopWatch = new Stopwatch();
                stopWatch.Start();
                if (itemsperpage != null)
                {
                    ViewModelBase.ItemsPerPage = itemsperpage;
                }
                bool showinactive = false;
                if (showInactive != null)
                    showinactive = (bool)showInactive;

                ViewBag.showInactive = showinactive;
                ViewBag.DistributorList = _outletViewModelBuilder.GetDistributor();

                if (TempData["msg"] != null)
                {
                    ViewBag.msg = TempData["msg"].ToString();
                    TempData["msg"] = null;
                }
                ViewBag.searchText = searchText;
                stopWatch.Stop();
                TimeSpan ts = stopWatch.Elapsed;


                // Format and display the TimeSpan value.
                string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                    ts.Hours,
                    ts.Minutes,
                    ts.Seconds,
                    ts.TotalMilliseconds);


                stopWatch.Reset();

             
                _auditLogViewModelBuilder.AddAuditLog(this.User.Identity.Name, "Timestamp", "Outlet Controller:" + elapsedTime, DateTime.Now);
                //return View(outletsPagedListContainer);
                int currentPageIndex = page < 0 ? 0 : page - 1;
                int take = itemsperpage;
                int skip = currentPageIndex*take;

                var query = new QueryStandard()
                {
                    ShowInactive = showinactive,
                    Name = searchText,
                    Skip = skip,
                    Take = take
                };

                Guid dist = Guid.Empty;
                if (Distributor == null || Distributor == "")
                {
                    dist = Guid.Empty;
                }
                else
                {
                    Guid.TryParse(Distributor, out dist);
                }


                var ls = _outletViewModelBuilder.Query(query, dist);
                var data = ls.Data;
                var count = ls.Count;

                return View(data.ToPagedList(currentPageIndex,ViewModelBase.ItemsPerPage, count));
            }
            catch (Exception ex)
            {
                _log.Debug("Failed to list outlet  " + ex.Message);
                _log.Error("Failed to list outlet " + ex.ToString());
                OutletViewModel ovm = new OutletViewModel();
                ovm.ErrorText = ex.ToString();
                return View(ovm);
            }
        }