public virtual IActionResult RentalRequestsSearchGet([FromQuery] string localAreas, [FromQuery] string project, [FromQuery] string status, [FromQuery] DateTime?startDate, [FromQuery] DateTime?endDate) { int?[] localAreasArray = ArrayHelper.ParseIntArray(localAreas); // get initial results - must be limited to user's district int?districtId = UserAccountHelper.GetUsersDistrictId(_context, _httpContext); IQueryable <HetRentalRequest> data = _context.HetRentalRequest.AsNoTracking() .Include(x => x.LocalArea.ServiceArea.District.Region) .Include(x => x.DistrictEquipmentType) .ThenInclude(y => y.EquipmentType) .Include(x => x.Project.PrimaryContact) .Include(x => x.RentalRequestStatusType) .Include(x => x.HetRentalRequestRotationList) .OrderByDescending(x => x.AppCreateTimestamp) .Where(x => x.LocalArea.ServiceArea.DistrictId.Equals(districtId)); if (localAreasArray != null && localAreasArray.Length > 0) { data = data.Where(x => localAreasArray.Contains(x.LocalArea.LocalAreaId)); } if (project != null) { data = data.Where(x => x.Project.Name.ToLower().Contains(project.ToLower())); } if (startDate != null) { data = data.Where(x => x.ExpectedStartDate >= startDate); } if (endDate != null) { data = data.Where(x => x.ExpectedStartDate <= endDate); } if (status != null) { int?statusId = StatusHelper.GetStatusId(status, "rentalRequestStatus", _context); if (statusId != null) { data = data.Where(x => x.RentalRequestStatusTypeId == statusId); } } // convert Rental Request Model to the "RentalRequestLite" Model List <RentalRequestLite> result = new List <RentalRequestLite>(); foreach (HetRentalRequest item in data) { result.Add(RentalRequestHelper.ToLiteModel(item)); } // return to the client return(new ObjectResult(new HetsResponse(result))); }
public virtual IActionResult RentalRequestsIdHistoryGet([FromRoute] int id, [FromQuery] int?offset, [FromQuery] int?limit) { bool exists = _context.HetRentalRequest.Any(a => a.RentalRequestId == id); // not found if (!exists) { return(new NotFoundObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration)))); } return(new ObjectResult(new HetsResponse(RentalRequestHelper.GetHistoryRecords(id, offset, limit, _context)))); }
public virtual IActionResult RentalRequestsIdGet([FromRoute] int id) { bool exists = _context.HetRentalRequest.Any(a => a.RentalRequestId == id); // not found if (!exists) { return(new ObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration)))); } return(new ObjectResult(new HetsResponse(RentalRequestHelper.GetRecord(id, _context)))); }
public virtual IActionResult RentalRequestsIdRotationListIdGet([FromRoute] int id) { bool exists = _context.HetRentalRequest.Any(a => a.RentalRequestId == id); // not found if (!exists) { return(new NotFoundObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration)))); } // get the scoring rules SeniorityScoringRules scoringRules = new SeniorityScoringRules(_configuration); return(new ObjectResult(new HetsResponse(RentalRequestHelper.GetRecordWithRotationList(id, scoringRules, _context)))); }
public virtual IActionResult RentalRequestsIdHistoryPost([FromRoute] int id, [FromBody] HetHistory item) { bool exists = _context.HetRentalRequest.Any(a => a.RentalRequestId == id); if (exists) { HetHistory history = new HetHistory { HistoryId = 0, HistoryText = item.HistoryText, CreatedDate = item.CreatedDate, RentalRequestId = id }; _context.HetHistory.Add(history); _context.SaveChanges(); } return(new ObjectResult(new HetsResponse(RentalRequestHelper.GetHistoryRecords(id, null, null, _context)))); }
public virtual IActionResult RentalRequestIdRotationListIdPut([FromRoute] int id, [FromBody] HetRentalRequestRotationList item) { // not found if (item == null) { return(new NotFoundObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration)))); } bool exists = _context.HetRentalRequest.Any(a => a.RentalRequestId == id); // not found if (!exists) { return(new NotFoundObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration)))); } int?statusId = StatusHelper.GetStatusId(HetRentalRequest.StatusInProgress, "rentalRequestStatus", _context); if (statusId == null) { return(new NotFoundObjectResult(new HetsResponse("HETS-23", ErrorViewModel.GetDescription("HETS-23", _configuration)))); } // check if we have the rental request that is In Progress exists = _context.HetRentalRequest .Any(a => a.RentalRequestId == id && a.RentalRequestStatusTypeId == statusId); // rental request must be "in progress" if (!exists) { return(new BadRequestObjectResult(new HetsResponse("HETS-06", ErrorViewModel.GetDescription("HETS-06", _configuration)))); } // get rental request record HetRentalRequest request = _context.HetRentalRequest .Include(x => x.Project) .ThenInclude(x => x.District) .Include(x => x.LocalArea) .Include(x => x.HetRentalRequestRotationList) .ThenInclude(x => x.Equipment) .First(a => a.RentalRequestId == id); // get rotation list record HetRentalRequestRotationList requestRotationList = _context.HetRentalRequestRotationList .FirstOrDefault(a => a.RentalRequestRotationListId == item.RentalRequestRotationListId); // not found if (requestRotationList == null) { return(new NotFoundObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration)))); } // update rotation list record int tempEquipmentId = item.Equipment.EquipmentId; requestRotationList.ConcurrencyControlNumber = item.ConcurrencyControlNumber; requestRotationList.EquipmentId = tempEquipmentId; requestRotationList.IsForceHire = item.IsForceHire; requestRotationList.AskedDateTime = DateTime.UtcNow; requestRotationList.Note = item.Note; requestRotationList.OfferRefusalReason = item.OfferRefusalReason; requestRotationList.OfferResponse = item.OfferResponse; requestRotationList.OfferResponseDatetime = item.OfferResponseDatetime; requestRotationList.WasAsked = item.WasAsked; requestRotationList.OfferResponseNote = item.OfferResponseNote; // do we need to create or modify a Rental Agreement? if (item.IsForceHire == true || item.OfferResponse.Equals("Yes", StringComparison.InvariantCultureIgnoreCase)) { // get rental agreement record HetRentalAgreement rentalAgreement = _context.HetRentalAgreement .FirstOrDefault(a => a.RentalAgreementId == item.RentalAgreementId); // create rental agreement if it doesn't exist if (rentalAgreement == null) { // generate the rental agreement number string agreementNumber = RentalAgreementHelper.GetRentalAgreementNumber(item.Equipment, _context); // get user info - agreement city User user = UserAccountHelper.GetUser(_context, _httpContext); string agreementCity = user.AgreementCity; int?rateTypeId = StatusHelper.GetRatePeriodId(HetRatePeriodType.PeriodHourly, _context); if (rateTypeId == null) { return(new NotFoundObjectResult(new HetsResponse("HETS-24", ErrorViewModel.GetDescription("HETS-24", _configuration)))); } rentalAgreement = new HetRentalAgreement { ProjectId = request.ProjectId, DistrictId = request.Project.District.DistrictId, EquipmentId = tempEquipmentId, Number = agreementNumber, RatePeriodTypeId = (int)rateTypeId, AgreementCity = agreementCity }; // add overtime rates List <HetProvincialRateType> overtime = _context.HetProvincialRateType.AsNoTracking() .Where(x => x.Overtime) .ToList(); // agreement overtime records (default overtime flag) foreach (HetProvincialRateType rate in overtime) { // add the rate HetRentalAgreementRate newAgreementRate = new HetRentalAgreementRate { Comment = rate.Description, ComponentName = rate.RateType, Overtime = true, Active = rate.Active, IsIncludedInTotal = rate.IsIncludedInTotal, Rate = rate.Rate }; if (rentalAgreement.HetRentalAgreementRate == null) { rentalAgreement.HetRentalAgreementRate = new List <HetRentalAgreementRate>(); } rentalAgreement.HetRentalAgreementRate.Add(newAgreementRate); } _context.HetRentalAgreement.Add(rentalAgreement); } int?statusIdAgreement = StatusHelper.GetStatusId(HetRentalAgreement.StatusActive, "rentalAgreementStatus", _context); if (statusIdAgreement == null) { return(new NotFoundObjectResult(new HetsResponse("HETS-23", ErrorViewModel.GetDescription("HETS-23", _configuration)))); } // update rental agreement rentalAgreement.RentalAgreementStatusTypeId = (int)statusIdAgreement; rentalAgreement.DatedOn = DateTime.UtcNow; rentalAgreement.EstimateHours = request.ExpectedHours; rentalAgreement.EstimateStartWork = request.ExpectedStartDate; rentalAgreement.RentalRequestId = request.RentalRequestId; rentalAgreement.RentalRequestRotationListId = requestRotationList.RentalRequestRotationListId; // have to save the agreement _context.SaveChanges(); // relate the new rental agreement to the original rotation list record int tempRentalAgreementId = rentalAgreement.RentalAgreementId; requestRotationList.RentalAgreementId = tempRentalAgreementId; requestRotationList.RentalAgreement = rentalAgreement; } // can we "Complete" this rental request (if the Yes or Forced Hires = Request.EquipmentCount) int countOfYeses = 0; int equipmentRequestCount = request.EquipmentCount; foreach (HetRentalRequestRotationList rotationList in request.HetRentalRequestRotationList) { if (rotationList.OfferResponse != null && rotationList.OfferResponse.Equals("Yes", StringComparison.InvariantCultureIgnoreCase)) { countOfYeses = countOfYeses + 1; } else if (rotationList.IsForceHire != null && rotationList.IsForceHire == true) { countOfYeses = countOfYeses + 1; } } if (countOfYeses >= equipmentRequestCount) { int?statusIdComplete = StatusHelper.GetStatusId(HetRentalRequest.StatusComplete, "rentalRequestStatus", _context); if (statusIdComplete == null) { return(new NotFoundObjectResult(new HetsResponse("HETS-23", ErrorViewModel.GetDescription("HETS-23", _configuration)))); } request.RentalRequestStatusTypeId = (int)statusIdComplete; request.Status = "Complete"; request.FirstOnRotationList = null; } // 1. get the number of blocks for this equipment type // 2. set which rotation list record is currently "active" int numberOfBlocks = EquipmentHelper.GetNumberOfBlocks(item.Equipment, _configuration); RentalRequestHelper.UpdateRotationList(request, numberOfBlocks, _context); // save the changes _context.SaveChanges(); // get the scoring rules SeniorityScoringRules scoringRules = new SeniorityScoringRules(_configuration); return(new ObjectResult(new HetsResponse(RentalRequestHelper.GetRecordWithRotationList(id, scoringRules, _context)))); }
private IActionResult CreateRentalRequest(HetRentalRequest item, bool noProject = false) { // not found if (item == null) { return(new BadRequestObjectResult(new HetsResponse("HETS-04", ErrorViewModel.GetDescription("HETS-04", _configuration)))); } // check if we have an existing rental request for the same // local area and equipment type - if so - throw an error // Per discussion with the business (19 Jan 2018): // * Don't create a record as New if another Request exists // * Simply give the user an error and not allow the new request // // Note: leaving the "New" code in place in case this changes in the future int?statusIdInProgress = StatusHelper.GetStatusId(HetRentalRequest.StatusInProgress, "rentalRequestStatus", _context); if (statusIdInProgress == null) { return(new NotFoundObjectResult(new HetsResponse("HETS-23", ErrorViewModel.GetDescription("HETS-23", _configuration)))); } List <HetRentalRequest> requests = _context.HetRentalRequest .Where(x => x.DistrictEquipmentTypeId == item.DistrictEquipmentType.DistrictEquipmentTypeId && x.LocalAreaId == item.LocalArea.LocalAreaId && x.RentalRequestStatusTypeId == statusIdInProgress) .ToList(); // in Progress Rental Request already exists if (requests.Count > 0) { int quantity = requests[0].EquipmentCount; int hiredCount = 0; foreach (HetRentalRequestRotationList equipment in requests[0].HetRentalRequestRotationList) { if (equipment.OfferResponse != null && equipment.OfferResponse.Equals("Yes", StringComparison.InvariantCultureIgnoreCase)) { hiredCount++; } if (equipment.IsForceHire != null && equipment.IsForceHire == true) { hiredCount++; } } // ...Currently {0} of {1} requested equipment have been hired.... string message = string.Format(ErrorViewModel.GetDescription("HETS-28", _configuration), hiredCount, quantity); return(new BadRequestObjectResult(new HetsResponse("HETS-28", message))); } // create new rental request HetRentalRequest rentalRequest = new HetRentalRequest { LocalAreaId = item.LocalArea.LocalAreaId, DistrictEquipmentTypeId = item.DistrictEquipmentType.DistrictEquipmentTypeId, RentalRequestStatusTypeId = (int)statusIdInProgress, EquipmentCount = item.EquipmentCount, ExpectedEndDate = item.ExpectedEndDate, ExpectedStartDate = item.ExpectedStartDate, ExpectedHours = item.ExpectedHours }; // is this a "project-less" request? - can't be hired from if (!noProject) { rentalRequest.ProjectId = item.Project.ProjectId; } // build new list try { rentalRequest = RentalRequestHelper.CreateRotationList(rentalRequest, _context, _configuration); } catch (Exception e) { // check if this a "no available equipment exception" if (e.Message == "HETS-42") { return(new NotFoundObjectResult(new HetsResponse("HETS-42", ErrorViewModel.GetDescription("HETS-42", _configuration)))); } Console.WriteLine(e); throw; } // check if we have an existing "In Progress" request // for the same Local Area and Equipment Type string tempStatus = RentalRequestHelper.RentalRequestStatus(rentalRequest, _context); statusIdInProgress = StatusHelper.GetStatusId(tempStatus, "rentalRequestStatus", _context); if (statusIdInProgress == null) { return(new NotFoundObjectResult(new HetsResponse("HETS-23", ErrorViewModel.GetDescription("HETS-23", _configuration)))); } rentalRequest.RentalRequestStatusTypeId = (int)statusIdInProgress; if (item.HetRentalRequestAttachment != null && item.HetRentalRequestAttachment.Count > 0) { HetRentalRequestAttachment attachment = new HetRentalRequestAttachment { Attachment = item.HetRentalRequestAttachment.ElementAt(0).Attachment }; rentalRequest.HetRentalRequestAttachment.Add(attachment); } // save the changes _context.HetRentalRequest.Add(rentalRequest); _context.SaveChanges(); int id = rentalRequest.RentalRequestId; // retrieve updated rental request to return to ui return(new ObjectResult(new HetsResponse(RentalRequestHelper.GetRecord(id, _context)))); }
public virtual IActionResult RentalRequestsIdPut([FromRoute] int id, [FromBody] HetRentalRequest item) { if (item == null || id != item.RentalRequestId) { // not found return(new NotFoundObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration)))); } bool exists = _context.HetRentalRequest.Any(a => a.RentalRequestId == id); // not found if (!exists) { return(new NotFoundObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration)))); } // get record HetRentalRequest rentalRequest = _context.HetRentalRequest .Include(x => x.LocalArea.ServiceArea.District.Region) .Include(x => x.Project) .ThenInclude(c => c.PrimaryContact) .Include(x => x.HetRentalRequestAttachment) .Include(x => x.DistrictEquipmentType) .Include(x => x.HetRentalRequestRotationList) .ThenInclude(y => y.Equipment) .First(a => a.RentalRequestId == id); // need to check if we are going over the "count" and close this request int hiredCount = 0; foreach (HetRentalRequestRotationList equipment in rentalRequest.HetRentalRequestRotationList) { if (equipment.OfferResponse != null && equipment.OfferResponse.Equals("Yes", StringComparison.InvariantCultureIgnoreCase)) { hiredCount++; } if (equipment.IsForceHire != null && equipment.IsForceHire == true) { hiredCount++; } } // has the count changed - and is now less than the already "hired" equipment if (item.EquipmentCount != rentalRequest.EquipmentCount && hiredCount > item.EquipmentCount) { //"HETS-07": "Rental Request count cannot be less than equipment already hired" return(new BadRequestObjectResult(new HetsResponse("HETS-07", ErrorViewModel.GetDescription("HETS-07", _configuration)))); } // if the number of hired records is now "over the count" - then close if (hiredCount >= item.EquipmentCount) { int?statusIdComplete = StatusHelper.GetStatusId(HetRentalRequest.StatusComplete, "rentalRequestStatus", _context); if (statusIdComplete == null) { return(new BadRequestObjectResult(new HetsResponse("HETS-23", ErrorViewModel.GetDescription("HETS-23", _configuration)))); } item.RentalRequestStatusTypeId = (int)statusIdComplete; item.Status = "Complete"; item.FirstOnRotationList = null; } int?statusId = StatusHelper.GetStatusId(item.Status, "rentalRequestStatus", _context); if (statusId == null) { return(new BadRequestObjectResult(new HetsResponse("HETS-23", ErrorViewModel.GetDescription("HETS-23", _configuration)))); } // update rental request rentalRequest.ConcurrencyControlNumber = item.ConcurrencyControlNumber; rentalRequest.RentalRequestStatusTypeId = (int)statusId; rentalRequest.EquipmentCount = item.EquipmentCount; rentalRequest.ExpectedEndDate = item.ExpectedEndDate; rentalRequest.ExpectedStartDate = item.ExpectedStartDate; rentalRequest.ExpectedHours = item.ExpectedHours; rentalRequest.HetDigitalFile = item.HetDigitalFile; rentalRequest.FirstOnRotationList = item.FirstOnRotationList; // do we have any attachments (only a single string is ever stored) if (item.HetRentalRequestAttachment != null && item.HetRentalRequestAttachment.Count > 0) { if (rentalRequest.HetRentalRequestAttachment == null) { rentalRequest.HetRentalRequestAttachment = new List <HetRentalRequestAttachment>(); } HetRentalRequestAttachment attachment = new HetRentalRequestAttachment { Attachment = item.HetRentalRequestAttachment.ElementAt(0).Attachment }; if (rentalRequest.HetRentalRequestAttachment.Count > 0) { rentalRequest.HetRentalRequestAttachment.ElementAt(0).Attachment = attachment.Attachment; } else { rentalRequest.HetRentalRequestAttachment.Add(attachment); } } // save the changes _context.SaveChanges(); // retrieve updated rental request to return to ui return(new ObjectResult(new HetsResponse(RentalRequestHelper.GetRecord(id, _context)))); }
public virtual IActionResult RentalRequestsHiresGet([FromQuery] string localAreas, [FromQuery] string projects, [FromQuery] string owners, [FromQuery] string equipment) { int?[] localAreasArray = ArrayHelper.ParseIntArray(localAreas); int?[] projectArray = ArrayHelper.ParseIntArray(projects); int?[] ownerArray = ArrayHelper.ParseIntArray(owners); int?[] equipmentArray = ArrayHelper.ParseIntArray(equipment); // get initial results - must be limited to user's district int?districtId = UserAccountHelper.GetUsersDistrictId(_context, _httpContext); // get fiscal year HetDistrictStatus district = _context.HetDistrictStatus.AsNoTracking() .FirstOrDefault(x => x.DistrictId == districtId); if (district?.CurrentFiscalYear == null) { return(new BadRequestObjectResult(new HetsResponse("HETS-30", ErrorViewModel.GetDescription("HETS-30", _configuration)))); } int fiscalYear = (int)district.CurrentFiscalYear; // status table uses the start of the year DateTime fiscalStart = new DateTime(fiscalYear, 3, 31); // look for all records AFTER the 31st IQueryable <HetRentalRequestRotationList> data = _context.HetRentalRequestRotationList.AsNoTracking() .Include(x => x.RentalRequest) .ThenInclude(y => y.LocalArea) .ThenInclude(z => z.ServiceArea) .Include(x => x.RentalRequest) .ThenInclude(y => y.Project) .Include(x => x.Equipment) .ThenInclude(y => y.Owner) .Where(x => x.RentalRequest.LocalArea.ServiceArea.DistrictId.Equals(districtId) && x.AskedDateTime > fiscalStart && (x.IsForceHire == true || x.OfferResponse.ToLower() == "no")); if (localAreasArray != null && localAreasArray.Length > 0) { data = data.Where(x => localAreasArray.Contains(x.RentalRequest.LocalAreaId)); } if (projectArray != null && projectArray.Length > 0) { data = data.Where(x => projectArray.Contains(x.RentalRequest.ProjectId)); } if (ownerArray != null && ownerArray.Length > 0) { data = data.Where(x => ownerArray.Contains(x.Equipment.OwnerId)); } if (equipmentArray != null && equipmentArray.Length > 0) { data = data.Where(x => equipmentArray.Contains(x.EquipmentId)); } // convert Rental Request Model to the "RentalRequestHires" Model List <RentalRequestHires> result = new List <RentalRequestHires>(); foreach (HetRentalRequestRotationList item in data) { HetUser user = _context.HetUser.AsNoTracking() .FirstOrDefault(x => x.SmUserId == item.AppCreateUserid); result.Add(RentalRequestHelper.ToHiresModel(item, user)); } // return to the client return(new ObjectResult(new HetsResponse(result))); }