Ejemplo n.º 1
0
        public async Task <JsonResult> Invoices(GridModel model)
        {
            var respmodel = new GridModel();
            IEnumerable <InvoiceModel> invoices = await _invoicesServiceClient.GetInvoicesAsync(MerchantId);

            var orderedlist = invoices.OrderByDescending(i => i.StartDate.GetRepoDateTime()).ToList();

            if (model.Filter.Status != "All")
            {
                orderedlist = orderedlist.Where(i => i.Status == model.Filter.Status).ToList();
            }

            if (!string.IsNullOrEmpty(model.Filter.SearchValue))
            {
                orderedlist = orderedlist.Where(i =>
                                                i.ClientEmail != null && i.ClientEmail.Contains(model.Filter.SearchValue)
                                                ||
                                                i.InvoiceNumber != null && i.InvoiceNumber.Contains(model.Filter.SearchValue))
                              .OrderByDescending(i => i.StartDate.GetRepoDateTime())
                              .ToList();
            }

            respmodel.Filter.Status = model.Filter.Status;
            if (!string.IsNullOrEmpty(model.Filter.SortField))
            {
                switch (model.Filter.SortField)
                {
                case "number":
                    orderedlist = model.Filter.SortWay == 0
                            ? orderedlist.OrderBy(i => i.InvoiceNumber).ThenByDescending(i => i.StartDate).ToList()
                            : orderedlist.OrderByDescending(i => i.InvoiceNumber).ThenByDescending(i => i.StartDate.GetRepoDateTime())
                                  .ToList();
                    break;

                case "client":
                    orderedlist = model.Filter.SortWay == 0
                            ? orderedlist.OrderBy(i => i.ClientName).ThenByDescending(i => i.StartDate.GetRepoDateTime()).ToList()
                            : orderedlist.OrderByDescending(i => i.ClientName).ThenByDescending(i => i.StartDate.GetRepoDateTime())
                                  .ToList();
                    break;

                case "amount":
                    orderedlist = model.Filter.SortWay == 0
                            ? orderedlist.OrderBy(i => i.Amount).ThenByDescending(i => i.StartDate.GetRepoDateTime()).ToList()
                            : orderedlist.OrderByDescending(i => i.Amount).ThenByDescending(i => i.StartDate.GetRepoDateTime()).ToList();
                    break;

                case "currency":
                    orderedlist = model.Filter.SortWay == 0
                            ? orderedlist.OrderBy(i => i.Currency).ThenByDescending(i => i.StartDate.GetRepoDateTime()).ToList()
                            : orderedlist.OrderByDescending(i => i.Currency).ThenByDescending(i => i.StartDate.GetRepoDateTime())
                                  .ToList();
                    break;

                case "status":
                    orderedlist = model.Filter.SortWay == 0
                            ? orderedlist.OrderBy(i => i.Status).ThenByDescending(i => i.StartDate.GetRepoDateTime()).ToList()
                            : orderedlist.OrderByDescending(i => i.Status).ThenByDescending(i => i.StartDate.GetRepoDateTime()).ToList();
                    break;

                case "duedate":
                    orderedlist = model.Filter.SortWay == 0
                            ? orderedlist.OrderBy(i => i.DueDate.GetRepoDateTime()).ToList()
                            : orderedlist.OrderByDescending(i => i.DueDate.GetRepoDateTime()).ToList();
                    break;
                }
            }
            var period = DateTime.Now;
            var day    = period.Day - 1;

            period = period.AddDays(-day).SetTime(0, 0, 0);
            switch (model.Filter.Period)
            {
            case 1:
                orderedlist = orderedlist.Where(i => i.DueDate.GetRepoDateTime() >= period).ToList();
                break;

            case 2:
                var end   = period.AddDays(-1).SetTime(23, 59, 59);
                var start = period.AddMonths(-1);
                orderedlist = orderedlist.Where(i => i.DueDate.GetRepoDateTime() <= end && i.DueDate.GetRepoDateTime() >= start).ToList();
                break;

            case 3:
                var start3 = period.AddMonths(-3);
                var end3   = start3.AddMonths(1).AddDays(-1).SetTime(23, 59, 59);
                orderedlist = orderedlist.Where(i => i.DueDate.GetRepoDateTime() <= end3 && i.DueDate.GetRepoDateTime() >= start3).ToList();
                break;
            }

            if (model.Filter.Status == "All")
            {
                respmodel.Header.AllCount        = orderedlist.Count;
                respmodel.Header.DraftCount      = orderedlist.Count(i => i.Status == InvoiceStatus.Draft.ToString());
                respmodel.Header.PaidCount       = orderedlist.Count(i => i.Status == InvoiceStatus.Paid.ToString());
                respmodel.Header.UnpaidCount     = orderedlist.Count(i => i.Status == InvoiceStatus.Unpaid.ToString());
                respmodel.Header.RemovedCount    = orderedlist.Count(i => i.Status == InvoiceStatus.Removed.ToString());
                respmodel.Header.InProgressCount =
                    orderedlist.Count(i => i.Status == InvoiceStatus.InProgress.ToString());
                respmodel.Header.LatePaidCount  = orderedlist.Count(i => i.Status == InvoiceStatus.LatePaid.ToString());
                respmodel.Header.UnderpaidCount =
                    orderedlist.Count(i => i.Status == InvoiceStatus.Underpaid.ToString());
                respmodel.Header.OverpaidCount = orderedlist.Count(i => i.Status == InvoiceStatus.Overpaid.ToString());
            }

            respmodel.PageCount = Math.Ceiling((decimal)orderedlist.Count / 10);
            respmodel.Data      = orderedlist.ToPagedList(model.Page, 10).ToList();
            return(Json(respmodel));
        }