예제 #1
0
        /// <summary>
        /// Get an Owner record
        /// </summary>
        /// <param name="id"></param>
        /// <param name="context"></param>
        /// <param name="configuration"></param>
        /// <returns></returns>
        public static HetOwner GetRecord(int id, DbAppContext context, IConfiguration configuration)
        {
            // get equipment status types
            int?statusIdArchived = StatusHelper.GetStatusId(HetEquipment.StatusArchived, "equipmentStatus", context);

            if (statusIdArchived == null)
            {
                throw new ArgumentException("Status Code not found");
            }

            // get owner record
            HetOwner owner = context.HetOwner.AsNoTracking()
                             .Include(x => x.OwnerStatusType)
                             .Include(x => x.LocalArea.ServiceArea.District.Region)
                             .Include(x => x.HetEquipment)
                             .ThenInclude(y => y.LocalArea.ServiceArea.District.Region)
                             .Include(x => x.HetEquipment)
                             .ThenInclude(y => y.DistrictEquipmentType)
                             .ThenInclude(z => z.EquipmentType)
                             .Include(x => x.HetEquipment)
                             .ThenInclude(y => y.Owner)
                             .ThenInclude(c => c.PrimaryContact)
                             .Include(x => x.HetEquipment)
                             .ThenInclude(y => y.EquipmentStatusType)
                             .Include(x => x.HetEquipment)
                             .ThenInclude(y => y.HetEquipmentAttachment)
                             .Include(x => x.HetContact)
                             .Include(x => x.PrimaryContact)
                             .FirstOrDefault(a => a.OwnerId == id);

            if (owner != null)
            {
                // remove any archived equipment
                owner.HetEquipment = owner.HetEquipment.Where(e => e.EquipmentStatusTypeId != statusIdArchived).ToList();

                // populate the "Status" description
                owner.Status = owner.OwnerStatusType.OwnerStatusTypeCode;

                foreach (HetEquipment equipment in owner.HetEquipment)
                {
                    equipment.IsHired         = EquipmentHelper.IsHired(id, context);
                    equipment.NumberOfBlocks  = EquipmentHelper.GetNumberOfBlocks(equipment, configuration);
                    equipment.HoursYtd        = EquipmentHelper.GetYtdServiceHours(id, context);
                    equipment.Status          = equipment.EquipmentStatusType.EquipmentStatusTypeCode;
                    equipment.EquipmentNumber = int.Parse(Regex.Match(equipment.EquipmentCode, @"\d+").Value);
                }

                // HETS-1115 - Do not allow changing seniority affecting entities if an active request exists
                owner.ActiveRentalRequest = RentalRequestStatus(id, context);
            }

            return(owner);
        }
예제 #2
0
        /// <summary>
        /// Get an Owner record
        /// </summary>
        /// <param name="id"></param>
        /// <param name="context"></param>
        /// <param name="configuration"></param>
        /// <returns></returns>
        public static HetOwner GetRecord(int id, DbAppContext context, IConfiguration configuration)
        {
            HetOwner owner = context.HetOwner.AsNoTracking()
                             .Include(x => x.OwnerStatusType)
                             .Include(x => x.LocalArea.ServiceArea.District.Region)
                             .Include(x => x.HetEquipment)
                             .ThenInclude(y => y.LocalArea.ServiceArea.District.Region)
                             .Include(x => x.HetEquipment)
                             .ThenInclude(y => y.DistrictEquipmentType)
                             .ThenInclude(z => z.EquipmentType)
                             .Include(x => x.HetEquipment)
                             .ThenInclude(y => y.Owner)
                             .ThenInclude(c => c.PrimaryContact)
                             .Include(x => x.HetEquipment)
                             .ThenInclude(y => y.EquipmentStatusType)
                             .Include(x => x.HetEquipment)
                             .ThenInclude(y => y.HetEquipmentAttachment)
                             .Include(x => x.HetContact)
                             .Include(x => x.PrimaryContact)
                             .FirstOrDefault(a => a.OwnerId == id);

            if (owner != null)
            {
                // remove any archived equipment
                owner.HetEquipment = owner.HetEquipment.Where(e => e.EquipmentStatusType.EquipmentStatusTypeCode != HetEquipment.StatusArchived).ToList();

                // populate the "Status" description
                owner.Status = owner.OwnerStatusType.OwnerStatusTypeCode;

                foreach (HetEquipment equipment in owner.HetEquipment)
                {
                    equipment.IsHired         = EquipmentHelper.IsHired(id, context);
                    equipment.NumberOfBlocks  = EquipmentHelper.GetNumberOfBlocks(equipment, configuration);
                    equipment.HoursYtd        = EquipmentHelper.GetYtdServiceHours(id, context);
                    equipment.Status          = equipment.EquipmentStatusType.EquipmentStatusTypeCode;
                    equipment.EquipmentNumber = int.Parse(Regex.Match(equipment.EquipmentCode, @"\d+").Value);
                }
            }

            return(owner);
        }
예제 #3
0
        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))));
        }