/// <summary>
        ///
        /// </summary>
        /// <remarks>Add a History record to the RentalRequest</remarks>
        /// <param name="id">id of RentalRequest to add History for</param>
        /// <param name="item"></param>
        /// <response code="200">OK</response>
        /// <response code="201">History created</response>
        public virtual IActionResult RentalrequestsIdHistoryPostAsync(int id, History item)
        {
            HistoryViewModel result = new HistoryViewModel();

            bool exists = _context.RentalRequests.Any(a => a.Id == id);

            if (exists)
            {
                RentalRequest rentalRequest = _context.RentalRequests
                                              .Include(x => x.History)
                                              .First(a => a.Id == id);
                if (rentalRequest.History == null)
                {
                    rentalRequest.History = new List <History>();
                }
                // force add
                item.Id = 0;
                rentalRequest.History.Add(item);
                _context.RentalRequests.Update(rentalRequest);
                _context.SaveChanges();
            }

            result.HistoryText         = item.HistoryText;
            result.Id                  = item.Id;
            result.LastUpdateTimestamp = item.LastUpdateTimestamp;
            result.LastUpdateUserid    = item.LastUpdateUserid;
            result.AffectedEntityId    = id;

            return(new ObjectResult(result));
        }
Beispiel #2
0
        /// <summary>
        /// Rental request search results view model
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static RentalRequestSearchResultViewModel ToViewModel(this RentalRequest model)
        {
            var dto = new RentalRequestSearchResultViewModel();

            if (model != null)
            {
                if (model.DistrictEquipmentType != null)
                {
                    dto.EquipmentTypeName = model.DistrictEquipmentType.EquipmentType.Name;
                }

                dto.Id        = model.Id;
                dto.LocalArea = model.LocalArea;

                if (model.Project != null)
                {
                    dto.PrimaryContact = model.Project.PrimaryContact;
                    dto.ProjectName    = model.Project.Name;
                    dto.ProjectId      = model.Project.Id;
                }

                dto.Status            = model.Status;
                dto.EquipmentCount    = model.EquipmentCount;
                dto.ExpectedEndDate   = model.ExpectedEndDate;
                dto.ExpectedStartDate = model.ExpectedStartDate;
            }

            return(dto);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="item"></param>
        /// <response code="201">Project created</response>
        public virtual IActionResult RentalrequestsPostAsync(RentalRequest item)
        {
            if (item != null)
            {
                AdjustRecord(item);

                var exists = _context.RentalRequests.Any(a => a.Id == item.Id);
                if (exists)
                {
                    _context.RentalRequests.Update(item);
                }
                else
                {
                    // record not found
                    BuildRentalRequestRotationList(item);
                    _context.RentalRequests.Add(item);
                }
                // Save the changes
                _context.SaveChanges();
                return(new ObjectResult(item));
            }
            else
            {
                return(new StatusCodeResult(400));
            }
        }
        ///  <summary>
        ///
        ///  </summary>
        ///  <remarks>Returns History for a particular RentalRequest</remarks>
        ///  <param name="id">id of RentalRequest to fetch History for</param>
        /// <param name="offset"></param>
        /// <param name="limit"></param>
        /// <response code="200">OK</response>
        public virtual IActionResult RentalrequestsIdHistoryGetAsync(int id, int?offset, int?limit)
        {
            bool exists = _context.RentalRequests.Any(a => a.Id == id);

            if (exists)
            {
                RentalRequest rentalRequest = _context.RentalRequests
                                              .Include(x => x.History)
                                              .First(a => a.Id == id);

                List <History> data = rentalRequest.History.OrderByDescending(y => y.LastUpdateTimestamp).ToList();

                if (offset == null)
                {
                    offset = 0;
                }
                if (limit == null)
                {
                    limit = data.Count - offset;
                }
                List <HistoryViewModel> result = new List <HistoryViewModel>();

                for (int i = (int)offset; i < data.Count && i < offset + limit; i++)
                {
                    result.Add(data[i].ToViewModel(id));
                }

                return(new ObjectResult(result));
            }
            else
            {
                // record not found
                return(new StatusCodeResult(404));
            }
        }
Beispiel #5
0
        /// <summary>
        /// Basic file receiver for .NET Core
        /// </summary>
        /// <param name="id">Schoolbus Id</param>
        /// <param name="files">Files to add to attachments</param>
        /// <returns></returns>
        public IActionResult RentalRequestIdAttachmentsPostAsync(int id, IList <IFormFile> files)
        {
            // validate the bus id
            bool exists = _context.Equipments.Any(a => a.Id == id);

            if (exists)
            {
                RentalRequest rentalRequest = _context.RentalRequests
                                              .Include(x => x.Attachments)
                                              .First(a => a.Id == id);

                AddFilesToAttachments(rentalRequest.Attachments, files);

                _context.RentalRequests.Update(rentalRequest);
                _context.SaveChanges();

                List <AttachmentViewModel> result = MappingExtensions.GetAttachmentListAsViewModel(rentalRequest.Attachments);

                return(new ObjectResult(result));
            }
            else
            {
                // record not found
                return(new StatusCodeResult(404));
            }
        }
Beispiel #6
0
        public ActionResult Create([Bind(Include = "RentalRequestId,ContactPerson,ContactPhoneNumber,ContactEmail,Company,StartTime,EndTime,ProjectInfo,Requests,RentalCode,Accepted,ContractSigned")] RentalRequest rentalRequest)
        {
            long sec    = 10000000;                                             //DateTime ticks per second
            long hrSecs = 3600;                                                 //Seconds in an hour
            long Strtm  = Convert.ToInt64(rentalRequest.StartTime.Ticks) / sec; //divided ticks into seconds
            long Endtm  = Convert.ToInt64(rentalRequest.EndTime.Ticks) / sec;

            if (Endtm < (Strtm + hrSecs) && Endtm >= Strtm)    //Doesn't allow rentals < 1hr
            {
                ModelState.AddModelError("EndTime", "** Rental must be at least 1 hour.  **");
            }
            if (Endtm < Strtm)   //Keeps End time after start time
            {
                ModelState.AddModelError("StartTime", "** Start Time cannot occur after End Time.  **");
            }
            if (ModelState.IsValid)
            {
                db.RentalRequests.Add(rentalRequest);
                var randomNum = new Random();
                int codeNum   = randomNum.Next(10000, 99999);
                rentalRequest.RentalCode = codeNum;
                db.SaveChanges();
                if (rentalRequest.Accepted == true)
                {
                    RentalAddCalendar(rentalRequest);
                }
                return(RedirectToAction("Index"));
            }

            return(View(rentalRequest));
        }
Beispiel #7
0
        public RentalRequestDto Find(int id)
        {
            RentalRequest    rentalRequest    = _repository.Find(id);
            RentalRequestDto rentalRequestDto = _mapper.Map <RentalRequestDto>(rentalRequest);

            return(rentalRequestDto);
        }
Beispiel #8
0
        /// <summary>
        /// Delete rental request
        /// </summary>
        /// <param name="id">id of Project to delete</param>
        /// <response code="200">OK</response>
        /// <response code="404">Project not found</response>
        public virtual IActionResult RentalrequestsIdDeletePostAsync(int id)
        {
            RentalRequest item = _context.RentalRequests
                                 .Include(x => x.RentalRequestRotationList)
                                 .FirstOrDefault(a => a.Id == id);

            if (item != null)
            {
                // remove the rotation list if it exists
                if (item.RentalRequestRotationList != null)
                {
                    foreach (RentalRequestRotationList rentalRequestRotationList in item.RentalRequestRotationList)
                    {
                        _context.RentalRequestRotationLists.Remove(rentalRequestRotationList);
                    }
                }

                _context.RentalRequests.Remove(item);

                // save the changes
                _context.SaveChanges();

                return(new ObjectResult(new HetsResponse(item)));
            }

            // record not found
            return(new ObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration))));
        }
Beispiel #9
0
        /// <summary>
        /// Printed rental agreement view model
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static RentalRequestViewModel ToRentalRequestViewModel(this RentalRequest model)
        {
            var dto = new RentalRequestViewModel();

            if (model != null)
            {
                dto.Id                        = model.Id;
                dto.Project                   = model.Project;
                dto.LocalArea                 = model.LocalArea;
                dto.Status                    = model.Status;
                dto.DistrictEquipmentType     = model.DistrictEquipmentType;
                dto.EquipmentCount            = model.EquipmentCount;
                dto.ExpectedHours             = model.ExpectedHours;
                dto.ExpectedStartDate         = model.ExpectedStartDate;
                dto.ExpectedEndDate           = model.ExpectedEndDate;
                dto.FirstOnRotationList       = model.FirstOnRotationList;
                dto.Notes                     = model.Notes;
                dto.Attachments               = model.Attachments;
                dto.History                   = model.History;
                dto.RentalRequestAttachments  = model.RentalRequestAttachments;
                dto.RentalRequestRotationList = model.RentalRequestRotationList;

                // calculate the Yes Count based on the RentalRequestList
                dto.CalculateYesCount();
            }

            return(dto);
        }
        public ActionResult DeleteConfirmed(int id)
        {
            RentalRequest rentalRequest = db.RentalRequests.Find(id);

            db.RentalRequests.Remove(rentalRequest);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Beispiel #11
0
        public RentalRequestDto Update(RentalRequestDto rentalRequestDto)
        {
            RentalRequest rentalRequest = _mapper.Map <RentalRequest>(rentalRequestDto);

            _repository.Update(rentalRequest);
            _dal.Save();

            return(_mapper.Map <RentalRequestDto>(rentalRequest));
        }
Beispiel #12
0
        public void RentalDeleteCalendar(RentalRequest rentalRequest)
        {
            CalendarEvent calendar = db.CalendarEvent.Where(x => x.RentalRequestId == rentalRequest.RentalRequestId).FirstOrDefault();

            if (calendar != null)
            {
                db.CalendarEvent.Remove(calendar);
                db.SaveChanges();
            }
        }
Beispiel #13
0
        public RentalRequest Remove(int id)
        {
            RentalRequest request = _context.RentalRequests.Find(id);

            if (request != null)
            {
                request = _context.RentalRequests.Remove(request);
            }
            return(request);
        }
 public ActionResult Edit([Bind(Include = "RentalRequestID,ContactPerson,MyProperty,RequestedTime,StartTime,EndTime,ProjectInfo,RentalCode,Accepted,ContractSigned")] RentalRequest rentalRequest)
 {
     if (ModelState.IsValid)
     {
         db.Entry(rentalRequest).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(rentalRequest));
 }
        public RentalResponse Rent(RentalRequest request)
        {
            var pricing = pricingFactory.GetPolicyFor(request.CarType);

            return(new RentalResponse {
                Days = request.Days,
                EstimatedTotalKmPrice = request.Kilometers * pricing.GetKmPrice(),
                TotalDailyPrice = request.Days * pricing.GetDailyRentPrice(),
                AdditionalItemsPrice = GetAdditionalItemsPrice(request.OptionalItems, pricing)
            });
        }
Beispiel #16
0
        public void RentalAddCalendar(RentalRequest rentalRequest)
        {
            CalendarEvent calendar = new CalendarEvent();

            calendar.RentalRequestId = rentalRequest.RentalRequestId;
            calendar.Title           = rentalRequest.Company;
            calendar.StartDate       = rentalRequest.StartTime;
            calendar.EndDate         = rentalRequest.EndTime;
            db.CalendarEvent.Add(calendar);
            db.SaveChanges();
        }
Beispiel #17
0
        public ItemRenting RequestRent(RentalRequest request)
        {
            if (null == request)
            {
                throw new ArgumentNullException("request");
            }

            var userId = User.Identifier();

            return(this.rentCore.Request(request, userId));
        }
        public ActionResult Create([Bind(Include = "RentalRequestID,ContactPerson,Company,RequestedTime,StartTime,EndTime,ProjectInfo,RentalCode,Accepted,ContractSigned")] RentalRequest rentalRequest)
        {
            if (ModelState.IsValid)
            {
                db.RentalRequests.Add(rentalRequest);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(rentalRequest));
        }
Beispiel #19
0
    public override async Task HandleAsync(RequestRentalForPeriodCommand command)
    {
        RentalRequest rentalRequest = RentalRequest.RequestRental(
            command.CustomerId,
            command.Period,
            command.PricePerNight,
            command.RentalRequestedAt
            );

        await this.rentalRepository.Save(rentalRequest);
    }
Beispiel #20
0
        public ActionResult DeleteConfirmed(int id)
        {
            RentalRequest rentalRequest = db.RentalRequests.Find(id);

            if (rentalRequest.Accepted == true)
            {
                RentalDeleteCalendar(rentalRequest);
            }
            db.RentalRequests.Remove(rentalRequest);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Beispiel #21
0
        /// <summary>
        /// Create rental request
        /// </summary>
        /// <param name="item"></param>
        /// <response>Rental Request</response>
        /// <response code="200">Rental Request created</response>
        /// <response code="405">In Progress Rental Request already exists</response>
        public virtual IActionResult RentalrequestsPostAsync(RentalRequest item)
        {
            if (item != null)
            {
                AdjustRecord(item);

                bool exists = _context.RentalRequests.Any(a => a.Id == item.Id);

                if (exists)
                {
                    _context.RentalRequests.Update(item);
                }
                else
                {
                    // 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
                    List <RentalRequest> requests = _context.RentalRequests
                                                    .Where(x => x.DistrictEquipmentType == item.DistrictEquipmentType &&
                                                           x.LocalArea.Id == item.LocalArea.Id &&
                                                           x.Status.Equals("In Progress", StringComparison.CurrentCultureIgnoreCase))
                                                    .ToList();

                    if (requests.Count > 0)
                    {
                        // In Progress Rental Request already exists
                        return(new StatusCodeResult(405));
                    }

                    // record not found
                    BuildRentalRequestRotationList(item);

                    // check if we have an existing "In Progress" request
                    // for the same Loac Area and Equipment Type
                    SetRentalRequestStatusOnCreate(item);

                    _context.RentalRequests.Add(item);
                }

                // save the changes
                _context.SaveChanges();

                return(new ObjectResult(new HetsResponse(item)));
            }

            // no record to insert
            return(new ObjectResult(new HetsResponse("HETS-04", ErrorViewModel.GetDescription("HETS-04", _configuration))));
        }
Beispiel #22
0
        public RentalRequestDto Create(RentalRequestDto rentalRequestDto)
        {
            RentalRequest rentalRequest = _mapper.Map <RentalRequest>(rentalRequestDto);

            User user = _userManager.FindById(rentalRequestDto.UserId);

            rentalRequest.User = user;

            _repository.Create(rentalRequest);
            _dal.Save();

            return(_mapper.Map <RentalRequestDto>(rentalRequest));
        }
Beispiel #23
0
 public async Task Save(RentalRequest request)
 {
     await this.store.RentalRequests.InsertOneAsync(new RentalRequestEntity
     {
         Id            = request.Id.Value.ToString(),
         CustomerId    = request.CustomerId.Value.ToString(),
         PeriodStart   = request.Period.Start,
         PeriodEnd     = request.Period.End,
         Currency      = request.PricePerNight.Currency,
         PricePerNight = request.PricePerNight.Value,
         RequestedAt   = request.RequestedAt
     });
 }
Beispiel #24
0
        // GET: RentalRequest/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            RentalRequest rentalRequest = db.RentalRequests.Find(id);

            if (rentalRequest == null)
            {
                return(HttpNotFound());
            }
            return(View(rentalRequest));
        }
Beispiel #25
0
        private DetailResponse RentByHour(RentalRequest request)
        {
            var start    = DateTime.Now;
            var response = new DetailResponse()
            {
                Customer     = request.Customer,
                Quantity     = request.Quantity,
                RentalCost   = request.Quantity * 5,
                RentalOption = RentalDescriptionConstant.HOUR,
                RentalStart  = start,
                RentalEnd    = start.AddHours(request.Quantity)
            };

            return(response);
        }
Beispiel #26
0
        private DetailResponse RentByWeek(RentalRequest request)
        {
            var start    = DateTime.Now;
            var response = new DetailResponse()
            {
                Customer     = request.Customer,
                Quantity     = request.Quantity,
                RentalCost   = request.Quantity * 60,
                RentalOption = RentalDescriptionConstant.WEEK,
                RentalStart  = start,
                RentalEnd    = start.AddDays(request.Quantity * 7)
            };

            return(response);
        }
        /// <summary>
        /// Basic file receiver for .NET Core
        /// </summary>
        /// <param name="id">Schoolbus Id</param>
        /// <param name="files">Files to add to attachments</param>
        /// <returns></returns>
        public IActionResult RentalRequestIdAttachmentsPostAsync(int id, IList <IFormFile> files)
        {
            // validate the bus id
            bool exists = _context.RentalRequests.Any(a => a.Id == id);

            if (exists)
            {
                RentalRequest rentalRequest = _context.RentalRequests
                                              .Include(x => x.Attachments)
                                              .First(a => a.Id == id);

                foreach (var file in files)
                {
                    if (file.Length > 0)
                    {
                        Attachment attachment = new Attachment();

                        // strip out extra info in the file name
                        if (!string.IsNullOrEmpty(file.FileName))
                        {
                            attachment.FileName = Path.GetFileName(file.FileName);
                        }

                        // allocate storage for the file and create a memory stream
                        attachment.FileContents = new byte[file.Length];

                        using (MemoryStream fileStream = new MemoryStream(attachment.FileContents))
                        {
                            file.CopyTo(fileStream);
                        }

                        attachment.Type     = GetType(attachment.FileName);
                        attachment.MimeType = GetMimeType(attachment.Type);

                        rentalRequest.Attachments.Add(attachment);
                    }
                }

                _context.SaveChanges();

                List <AttachmentViewModel> result = MappingExtensions.GetAttachmentListAsViewModel(rentalRequest.Attachments);

                return(new ObjectResult(result));
            }

            // record not found
            return(new StatusCodeResult(404));
        }
Beispiel #28
0
        /// <summary>
        /// Create rental request rotation list
        /// </summary>
        /// <param name="rentalRequestId"></param>
        public virtual IActionResult RentalRequestsRotationListRecalcGetAsync(int rentalRequestId)
        {
            bool exists = _context.RentalRequests.Any(a => a.Id == rentalRequestId);

            if (exists)
            {
                // get rental request
                RentalRequest result = _context.RentalRequests
                                       .Include(x => x.DistrictEquipmentType)
                                       .Include(x => x.DistrictEquipmentType.EquipmentType)
                                       .Include(x => x.LocalArea)
                                       .Include(x => x.LocalArea.ServiceArea.District.Region)
                                       .Include(x => x.RentalRequestRotationList)
                                       .First(a => a.Id == rentalRequestId);

                if (result.Status.Equals("In Progress", StringComparison.InvariantCultureIgnoreCase))
                {
                    // delete any existing rotation list records
                    foreach (RentalRequestRotationList rentalRequestRotationList in result.RentalRequestRotationList)
                    {
                        _context.RentalRequestRotationLists.Remove(rentalRequestRotationList);
                    }

                    // update
                    _context.SaveChanges();

                    // generate rotation list
                    BuildRentalRequestRotationList(result);

                    // save the changes
                    _context.SaveChanges();

                    // repopulate the results with latest data
                    result = _context.RentalRequests
                             .Include(x => x.DistrictEquipmentType)
                             .Include(x => x.DistrictEquipmentType.EquipmentType)
                             .Include(x => x.LocalArea)
                             .Include(x => x.LocalArea.ServiceArea.District.Region)
                             .Include(x => x.RentalRequestRotationList)
                             .First(a => a.Id == rentalRequestId);
                }

                return(new ObjectResult(new HetsResponse(result.ToRentalRequestViewModel())));
            }

            // record not found
            return(new ObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration))));
        }
Beispiel #29
0
        public void RentalEditCalendar(RentalRequest rentalRequest)
        {
            CalendarEvent calendar = db.CalendarEvent.Where(x => x.RentalRequestId == rentalRequest.RentalRequestId).FirstOrDefault();

            if (calendar == null)
            {
                RentalAddCalendar(rentalRequest);
            }
            else if (rentalRequest.RentalRequestId == calendar.RentalRequestId)
            {
                calendar.Title           = rentalRequest.Company;
                calendar.StartDate       = rentalRequest.StartTime;
                calendar.EndDate         = rentalRequest.EndTime;
                db.Entry(calendar).State = EntityState.Modified;
                db.SaveChanges();
            }
        }
Beispiel #30
0
        public ActionResult Edit([Bind(Include = "RentalRequestId,ContactPerson,ContactPhoneNumber,ContactEmail,Company,StartTime,EndTime,ProjectInfo,Requests,Accepted,ContractSigned")] RentalRequest rentalRequest)
        {
            long sec    = 10000000;                                             //DateTime ticks per second
            long hrSecs = 3600;                                                 //Seconds in an hour
            long Strtm  = Convert.ToInt64(rentalRequest.StartTime.Ticks) / sec; //divided ticks into seconds
            long Endtm  = Convert.ToInt64(rentalRequest.EndTime.Ticks) / sec;

            if (Endtm < (Strtm + hrSecs) && Endtm >= Strtm)    //Doesn't allow rentals < 1hr
            {
                ModelState.AddModelError("EndTime", "** Rental must be at least 1 hour.  **");
            }
            if (Endtm < Strtm)   //Keeps End time after start time
            {
                ModelState.AddModelError("StartTime", "** Start Time cannot occur after End Time.  **");
            }
            if (ModelState.IsValid)
            {
                var currentRentalRequest = db.RentalRequests.Find(rentalRequest.RentalRequestId);

                currentRentalRequest.ContactPerson      = rentalRequest.ContactPerson;
                currentRentalRequest.ContactPhoneNumber = rentalRequest.ContactPhoneNumber;
                currentRentalRequest.ContactEmail       = rentalRequest.ContactEmail;
                currentRentalRequest.Company            = rentalRequest.Company;
                currentRentalRequest.StartTime          = rentalRequest.StartTime;
                currentRentalRequest.EndTime            = rentalRequest.EndTime;
                currentRentalRequest.ProjectInfo        = rentalRequest.ProjectInfo;
                currentRentalRequest.Requests           = rentalRequest.Requests;
                currentRentalRequest.Accepted           = rentalRequest.Accepted;
                currentRentalRequest.ContractSigned     = rentalRequest.ContractSigned;

                db.Entry(currentRentalRequest).State = EntityState.Modified;
                db.SaveChanges();

                if (rentalRequest.Accepted == true)
                {
                    RentalEditCalendar(rentalRequest);
                }
                else if (rentalRequest.Accepted == false)
                {
                    RentalDeleteCalendar(rentalRequest);
                }
                return(RedirectToAction("Index"));
            }
            return(View(rentalRequest));
        }