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();
            }
        }
예제 #3
0
        public async Task <ResponseDTO <PagedList <RentalApplicationSearchDTO> > > Search([FromUri] RentalApplicationSearchRequest search)
        {
            var resp = await _rentalApplicationApplicationService.SearchRentalApplicationAsync(search);

            return(resp);
        }