public async Task <Response> CreateReport([FromBody] InvoicingPrinterCriteria criteria, InvoicingPrinterVM report)
        {
            var viewResult     = compositeViewEngine.FindView(ControllerContext, "CreateReport", false);
            var viewDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
            {
                Model = report
            };
            var viewContext = new ViewContext(ControllerContext, viewResult.View, viewDictionary, TempData, new StringWriter(), new HtmlHelperOptions());
            var result      = repo.Get(criteria);

            return(await repo.CreatePDF(viewResult, viewContext, result));
        }
        public InvoicingPrinterVM Get(InvoicingPrinterCriteria criteria)
        {
            var record = context.Set <Reservation>()
                         .Include(x => x.Customer)
                         .Include(x => x.Destination)
                         .Include(x => x.PickupPoint).ThenInclude(x => x.CoachRoute)
                         .Include(x => x.Port)
                         .Include(x => x.Ship)
                         .Include(x => x.Passengers)
                         .Where(x => x.Date == Convert.ToDateTime(criteria.Date) && x.CustomerId == criteria.CustomerId)
                         .AsEnumerable()
                         .GroupBy(x => x.Customer).OrderBy(x => x.Key.Description)
                         .Select(x => new InvoicingPrinterDTO {
                Date     = criteria.Date,
                Customer = new SimpleResource {
                    Id = x.Key.Id, Description = x.Key.Description
                },
                Ports = x.GroupBy(x => x.Port).OrderBy(x => !x.Key.IsPrimary).Select(x => new InvoicingPrinterPortDTO {
                    Port             = x.Key.Description,
                    HasTransferGroup = x.GroupBy(x => x.PickupPoint.CoachRoute.HasTransfer).Select(x => new HasTransferGroupDTO {
                        HasTransfer     = x.Key,
                        Adults          = x.Sum(x => x.Adults),
                        Kids            = x.Sum(x => x.Kids),
                        Free            = x.Sum(x => x.Free),
                        TotalPersons    = x.Sum(x => x.TotalPersons),
                        TotalPassengers = x.Sum(x => x.Passengers.Count(x => x.IsCheckedIn))
                    }).OrderBy(x => !x.HasTransfer),
                    Adults          = x.Sum(x => x.Adults),
                    Kids            = x.Sum(x => x.Kids),
                    Free            = x.Sum(x => x.Free),
                    TotalPersons    = x.Sum(x => x.TotalPersons),
                    TotalPassengers = x.Sum(x => x.Passengers.Count(x => x.IsCheckedIn))
                }),
                Adults       = x.Sum(x => x.Adults),
                Kids         = x.Sum(x => x.Kids),
                Free         = x.Sum(x => x.Free),
                TotalPersons = x.Sum(x => x.TotalPersons),
                Reservations = x.OrderBy(x => !x.PickupPoint.CoachRoute.HasTransfer).ToList()
            }).FirstOrDefault();

            return(mapper.Map <InvoicingPrinterDTO, InvoicingPrinterVM>(record));
        }