public async Task <List <GetServiceWithAddressResponse> > GetAllServices(Account account, GetServiceRequestsFilter filter) { // prepare filter predicate var predicate = PredicateBuilder.New <ServiceRequest>(true); if (!string.IsNullOrEmpty(filter?.SearchString)) { predicate = predicate.Or(p => p.Title.ToLower().Contains(filter.SearchString.ToLower())); predicate = predicate.Or(p => p.Customer.CompanyName.ToLower().Contains(filter.SearchString.ToLower())); predicate = predicate.Or(p => p.Address.Street.ToLower().Contains(filter.SearchString.ToLower())); predicate = predicate.Or(p => p.Address.City.ToLower().Contains(filter.SearchString.ToLower())); predicate = predicate.Or(p => p.Address.ZipCode.ToLower().Contains(filter.SearchString.ToLower())); } if (account.Role == Role.Customer) { // customer can get only his own service requests var customer = await _unitOfWork.Customers.GetByAccountId(account.Id); predicate = predicate.And(p => p.CustomerId == customer.Id); } if (!string.IsNullOrEmpty(filter?.DateRange)) { switch (filter.DateRange) { case "30-days": predicate = predicate.And(p => p.Created >= DateTime.UtcNow.AddDays(-30)); break; case "7-days": predicate = predicate.And(p => p.Created >= DateTime.UtcNow.AddDays(-7)); break; case "today": predicate = predicate.And(p => p.Created.Date == DateTime.UtcNow.Date); break; } } if (filter.Status is not null) { predicate = predicate.And(p => p.Status.Equals(filter.Status)); } var serviceRequests = await _unitOfWork.ServiceRequests.FindWithAddress(predicate); return(serviceRequests.Select(sr => new GetServiceWithAddressResponse() { Id = sr.Id, Title = sr.Title, Description = sr.Description, PlannedExecutionDate = sr.PlannedExecutionDate, CompletionDate = sr.CompletionDate, Created = sr.Created, CustomerId = sr.CustomerId, AddressId = sr.AddressId, Status = sr.Status.ToString(), CustomerAddress = _mapper.Map <GetCustomerAddressResponse>(sr.CustomerAddress) }) .ToList()); }
public async Task <List <GetServiceDetailsResponse> > GetAllServicesWithCustomerDetails( Account account, GetServiceRequestsFilter filter) { // prepare filter predicate var predicate = PredicateBuilder.New <ServiceRequest>(true); if (!string.IsNullOrEmpty(filter?.SearchString)) { predicate = predicate.Or(p => p.Title.ToLower().Contains(filter.SearchString.ToLower())); predicate = predicate.Or(p => p.Customer.CompanyName.ToLower().Contains(filter.SearchString.ToLower())); predicate = predicate.Or(p => p.Address.Street.ToLower().Contains(filter.SearchString.ToLower())); predicate = predicate.Or(p => p.Address.City.ToLower().Contains(filter.SearchString.ToLower())); predicate = predicate.Or(p => p.Address.ZipCode.ToLower().Contains(filter.SearchString.ToLower())); } if (account.Role == Role.Employee) { // employee can get only service requests he is assigned to var employee = await _unitOfWork.Employees.GetByAccountId(account.Id); predicate = predicate.And(p => p.ServiceRequestEmployees.Any(sre => sre.EmployeeId == employee.Id)); } if (!string.IsNullOrEmpty(filter?.DateRange)) { switch (filter.DateRange) { case "30-days": predicate = predicate.And(p => p.Created >= DateTime.UtcNow.AddDays(-30)); break; case "7-days": predicate = predicate.And(p => p.Created >= DateTime.UtcNow.AddDays(-7)); break; case "today": predicate = predicate.And(p => p.Created.Date == DateTime.UtcNow.Date); break; } } if (filter.Status is not null) { predicate = predicate.And(p => p.Status.Equals(filter.Status)); } var Id = new Guid(); if (!string.IsNullOrEmpty(filter?.EmployeeId) && Guid.TryParse(filter?.EmployeeId, out Id)) { predicate = predicate.And(sr => sr.ServiceRequestEmployees.Any(sre => sre.EmployeeId == Id)); } ; if (!string.IsNullOrEmpty(filter?.CustomerId) && Guid.TryParse(filter?.CustomerId, out Id)) { predicate = predicate.And(sr => sr.CustomerId == Id); } ; var serviceRequests = await _unitOfWork.ServiceRequests .FindWithCustomerAndAddressAndEmployees(predicate); return(serviceRequests.Select(sr => new GetServiceDetailsResponse() { Id = sr.Id, Title = sr.Title, Description = sr.Description, PlannedExecutionDate = sr.PlannedExecutionDate, CompletionDate = sr.CompletionDate, Created = sr.Created, CustomerId = sr.CustomerId, AddressId = sr.AddressId, Status = sr.Status.ToString(), Customer = new GetCustomerWithImageResponse() { Id = sr.CustomerAddress.Customer.Id, AccountId = sr.CustomerAddress.Customer.AccountId, CompanyName = sr.CustomerAddress.Customer.CompanyName, VatNumber = sr.CustomerAddress.Customer.VatNumber, Image = sr.CustomerAddress.Customer.Account.Image }, CustomerAddress = _mapper.Map <GetCustomerAddressResponse>(sr.CustomerAddress), }) .ToList()); }
public async Task <ActionResult <List <GetServiceResponse> > > GetServiceRequests([FromQuery] GetServiceRequestsFilter filter) { if (Account.Role == Role.Customer) { return(Ok(await _serviceRequestService.GetAllServices(Account, filter))); } else { return(Ok(await _serviceRequestService.GetAllServicesWithCustomerDetails(Account, filter))); } }