示例#1
0
        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))));
        }
示例#2
0
        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))));
        }