public ActionResult Index(int pageIndex = 1, string searchType = "", string searchString = "")
        {
            List <Invoice> invoices = unitOfWork.InvoiceRepository.GetAll().OrderBy(g => g.PaymentDay).ToList();

            if (!string.IsNullOrEmpty(searchString))
            {
                DateTime date;

                switch (searchType)
                {
                case "Company":
                    invoices = unitOfWork.InvoiceRepository.Find(g => g.Person.Name.Contains(searchString)).OrderByDescending(i => i.Person.Name).ToList();
                    break;

                case "PaymentDeadline":
                    if (DateTime.TryParse(searchString, out date))
                    {
                        invoices = unitOfWork.InvoiceRepository.Find(g => g.PaymentDay == date).OrderByDescending(i => i.PaymentDay).ToList();
                    }
                    else
                    {
                        ViewBag.SearchError = "You need to enter date in Month/Day/Year format (12/20/2018)";
                    }
                    break;

                case "CreationDate":
                    if (DateTime.TryParse(searchString, out date))
                    {
                        invoices = unitOfWork.InvoiceRepository.GetAll().Where(g => g.Date == DateTime.Parse(searchString)).ToList().OrderByDescending(i => i.Date).ToList();
                    }
                    else
                    {
                        ViewBag.SearchError = "You need to enter date in Month/Day/Year format (12/20/2018)";
                    }
                    break;

                default:
                    break;
                }
            }

            var products = unitOfWork.ProductRepository.Find(p => p.Quantity > 0).ToList();

            var persons = unitOfWork.PersonRepository.GetAll().ToList();

            InvoiceViewModelManager viewManager = new InvoiceViewModelManager();

            InvoiceDisplayViewModel displayViewModel = new InvoiceDisplayViewModel();

            InvoiceAddViewModel addViewModel = new InvoiceAddViewModel(persons, products);


            displayViewModel.InvoicesList = (PagedList <Invoice>)invoices.ToPagedList(pageIndex, 5);


            viewManager.AddViewModel     = addViewModel;
            viewManager.DisplayViewModel = displayViewModel;

            return(View(viewManager));
        }
        public ActionResult Details(int id)
        {
            var invoiceDetails            = unitOfWork.InvoiceRepository.Get(id);
            InvoiceDisplayViewModel model = new InvoiceDisplayViewModel()
            {
                Invoice = invoiceDetails
            };

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

            return(PartialView("Partials/InvoiceDetailsModal", model));
        }