public async Task <ResponseDTO <PagedList <RentalApplicationSearchDTO> > > SearchRentalApplicationAsync(RentalApplicationSearchRequest search) { List <OrderExpression <RentalApplicationSearchDTO> > orderExpressionList = new List <OrderExpression <RentalApplicationSearchDTO> >(); orderExpressionList.Add(new OrderExpression <RentalApplicationSearchDTO>(OrderType.Asc, p => p.ApplicationDate)); Expression <Func <RentalApplicationSearchDTO, bool> > queryFilter = c => true; //APPLICATIONDATE if (search.ApplicationDateFrom.HasValue && search.ApplicationDateTo.HasValue) { var toPlusADay = search.ApplicationDateTo.Value.AddDays(1); queryFilter = queryFilter.And(p => p.ApplicationDate.Value >= search.ApplicationDateFrom); queryFilter = queryFilter.And(p => p.ApplicationDate.Value < toPlusADay); } else if (search.ApplicationDateFrom.HasValue && !search.ApplicationDateTo.HasValue) { queryFilter = queryFilter.And(p => p.ApplicationDate.Value >= search.ApplicationDateFrom); } else if (!search.ApplicationDateFrom.HasValue && search.ApplicationDateTo.HasValue) { var toPlusADay = search.ApplicationDateTo.Value.AddDays(1); queryFilter = queryFilter.And(p => p.ApplicationDate.Value < toPlusADay); } //CHECKIN if (search.CheckInFrom.HasValue && search.CheckInTo.HasValue) { var toPlusADay = search.CheckInTo.Value.AddDays(1); queryFilter = queryFilter.And(p => p.CheckIn.Value >= search.CheckInFrom); queryFilter = queryFilter.And(p => p.CheckIn.Value < toPlusADay); } else if (search.CheckInFrom.HasValue && !search.CheckInTo.HasValue) { queryFilter = queryFilter.And(p => p.CheckIn.Value >= search.CheckInFrom); } else if (!search.CheckInFrom.HasValue && search.CheckInTo.HasValue) { var toPlusADay = search.CheckInTo.Value.AddDays(1); queryFilter = queryFilter.And(p => p.CheckIn.Value < toPlusADay); } //CHECKOUT if (search.CheckOutFrom.HasValue && search.CheckOutTo.HasValue) { var toPlusADay = search.CheckOutTo.Value.AddDays(1); queryFilter = queryFilter.And(p => p.CheckOut.Value >= search.CheckOutFrom); queryFilter = queryFilter.And(p => p.CheckOut.Value < toPlusADay); } else if (search.CheckOutFrom.HasValue && !search.CheckOutTo.HasValue) { queryFilter = queryFilter.And(p => p.CheckOut.Value >= search.CheckOutFrom); } else if (!search.CheckOutFrom.HasValue && search.CheckOutTo.HasValue) { var toPlusADay = search.CheckOutTo.Value.AddDays(1); queryFilter = queryFilter.And(p => p.CheckOut.Value < toPlusADay); } if (search.PropertyTypeId.HasValue) { queryFilter = queryFilter.And(p => p.PropertyTypeId == search.PropertyTypeId); } if (search.PeriodId.HasValue) { queryFilter = queryFilter.And(p => p.PeriodId == search.PeriodId); } if (!string.IsNullOrEmpty(search.Email)) { queryFilter = queryFilter.And(p => p.Email.Contains(search.Email)); } if (!string.IsNullOrEmpty(search.FullName)) { queryFilter = queryFilter.And(p => p.FullName.Contains(search.FullName)); } if (search.ResidenseCountryId.HasValue) { queryFilter = queryFilter.And(p => p.ResidenseCountryId == search.ResidenseCountryId); } if (search.BudgetId.HasValue) { queryFilter = queryFilter.And(p => p.BudgetId == search.BudgetId); } if (search.ReferredById.HasValue) { queryFilter = queryFilter.And(p => p.ReferredById == search.ReferredById); } //TODO: City of Interest //TODO: Feature var rentalApplication = await _rentalApplicationSearchDataAccess.ListPagedAsync(queryFilter, search.Page, search.PageSize, orderExpressionList.ToArray()); var pagedResult = new PagedList <RentalApplicationSearchDTO>() { Items = rentalApplication.Items, PageSize = rentalApplication.PageSize, Page = rentalApplication.Page, Total = rentalApplication.Total }; return(ResponseBuilder.Correct(pagedResult)); }
//public async Task<ResponseDTO> ValidateEntityRegister(RentalApplicationRegisterRequest request) //{ // bool isValid = true; // Expression<Func<RentalApplicationRegisterRequest, bool>> queryFilter = p => true; // var errorMessage = ""; // queryFilter = queryFilter.And(p => p.RentalApplicationCode == request.RentalApplicationCode); // var rentalApplication = await _rentalApplicationDataAccess.FirstOrDefaultAsync(queryFilter); // if (rentalApplication != null) // { // isValid = false; // errorMessage = "RentalApplication already Exists"; // } // //Existe un Lease para el mismo tenant Activo o Futuro // if (isValid) // { // queryFilter = p => p.TenantId == request.TenantId; // queryFilter = queryFilter.And(p => p.RentalApplicationStatusCode == Constants.EntityStatus.RentalApplication.Active || p.RentalApplicationStatusCode == Constants.EntityStatus.RentalApplication.Future); // rentalApplication = await _rentalApplicationDataAccess.FirstOrDefaultAsync(queryFilter); // if (rentalApplication != null) // { // isValid = false; // errorMessage = "Already Exists a tenant associated to other Lease Active or Future"; // } // } // //Validate Period // if (isValid) // { // Expression<Func<PeriodDTO, bool>> queryFilterPeriod = p => true; // queryFilterPeriod = queryFilterPeriod.And(p => p.EndDate < request.EndDate); // var period = await _periodApplicationService.GetLastPeriodAsync(); // if (period != null && period.Data.EndDate < request.EndDate) // { // isValid = false; // errorMessage = "There is no period configurated to support the end date of this Lease, please create period"; // } // } // var response = new ResponseDTO() // { // IsValid = string.IsNullOrEmpty(errorMessage), // Messages = new List<ApplicationMessage>() // }; // response.Messages.Add(new ApplicationMessage() // { // Key = string.IsNullOrEmpty(errorMessage) ? "Ok" : "Error", // Message = errorMessage // }); // return response; //} //public async Task<ResponseDTO> ValidateEntityUpdate(RentalApplicationUpdateRequest request) //{ // var errorMessage = ""; // Expression<Func<RentalApplicationRegisterRequest, bool>> queryFilter = p => p.RowStatus; // queryFilter = queryFilter.And(p => p.RentalApplicationId != request.RentalApplicationId); // queryFilter = queryFilter.And(p => p.TenantId == request.TenantId); // queryFilter = queryFilter.And(p => p.RentalApplicationStatusCode == Constants.EntityStatus.RentalApplication.Active || p.RentalApplicationStatusCode == Constants.EntityStatus.RentalApplication.Future); // bool isValid = true; // var rentalApplication = await _rentalApplicationDataAccess.FirstOrDefaultAsync(queryFilter); // if (rentalApplication != null) // { // isValid = false; // errorMessage = "Already Exists a tenant associated to other Lease Active or Future"; // } // var response = new ResponseDTO() // { // IsValid = string.IsNullOrEmpty(errorMessage), // Messages = new List<ApplicationMessage>() // }; // response.Messages.Add(new ApplicationMessage() // { // Key = string.IsNullOrEmpty(errorMessage) ? "Ok" : "Error", // Message = errorMessage // }); // return response; //} /*EXCEL REPORT*/ public async Task GenerateDataCsvToReportExcel(Stream outputStream, HttpContent httpContent, TransportContext transportContext, RentalApplicationSearchRequest search) { var list = await SearchRentalApplicationAsync(search); try { if (list.Data.Items.Count > 0) { using (var writer = new StreamWriter(outputStream)) { var headers = new List <string> { "RentalApplication Code", "Period", "Tenant", "Property", "Start", "Finish", "Deposit", "Rent", "Unpaid periods", "Due Date", "Days to collect" }; await writer.WriteLineAsync(ExcelHelper.GetHeaderDetail(headers)); foreach (var item in list.Data.Items) { await writer.WriteLineAsync(ProcessCellDataToReport(item)); } } } } catch (HttpException ex) { } finally { outputStream.Close(); } }
public async Task <ResponseDTO <PagedList <RentalApplicationSearchDTO> > > Search([FromUri] RentalApplicationSearchRequest search) { var resp = await _rentalApplicationApplicationService.SearchRentalApplicationAsync(search); return(resp); }