Пример #1
0
        public async Task <IActionResult> Leave(int id)
        {
            if (id == 0)
            {
                return(RedirectToAction(nameof(MyStays)));
            }

            var stay = await _unitOfWork.Stay.GetAsync(s => s.Id == id);

            if (stay == null)
            {
                return(RedirectToAction(nameof(MyStays)));
            }

            PGRequest request = new PGRequest()
            {
                PGId   = stay.PGId,
                StayId = stay.Id
            };

            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

            return(View(request));
        }
Пример #2
0
        public async Task StartStay(PGRequest request, int roomId, int bedId)
        {
            Stay stay = new Stay()
            {
                PGId          = request.PGId,
                TenantId      = request.ApplicantUserId,
                RoomId        = roomId,
                BedId         = bedId,
                StartDate     = request.Date.Date,
                JoinRequestId = request.Id
            };

            request.LastActionOn  = DateTime.Now;
            request.RequestStatus = RequestStatus.Accepted;

            var requests = await _db.PGRequests.Where(req => req.ApplicantUserId == request.ApplicantUserId && req.Id != request.Id).ToListAsync();

            if (requests != null)
            {
                foreach (var req in requests)
                {
                    req.RequestStatus = RequestStatus.AutoRejected;
                    req.LastActionOn  = DateTime.Now;
                }
            }

            await _db.Stays.AddAsync(stay);
        }
Пример #3
0
        public async Task EndStay(PGRequest request)
        {
            Stay stay = await _db.Stays.Where(s => s.Id == request.StayId).SingleAsync();

            stay.EndDate        = request.Date;
            stay.LeaveRequestId = request.Id;

            request.LastActionOn  = DateTime.Now;
            request.RequestStatus = RequestStatus.Accepted;
        }
Пример #4
0
        public async Task <IActionResult> Leave(PGRequest request)
        {
            var stay = await _unitOfWork.Stay.GetAsync(s => s.Id == request.StayId, includeProperties : "Tenant,Room");

            if (stay != null)
            {
                var claimsIdentity = (ClaimsIdentity)User.Identity;
                var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

                if (stay.TenantId != claim.Value)
                {
                    ModelState.AddModelError("", "Invalid Request");
                }
                if (stay.StartDate >= request.Date)
                {
                    ModelState.AddModelError("Date", "Date must be greater than joining date");
                }
                if (DateTime.Now.Date > request.Date)
                {
                    ModelState.AddModelError("Date", "Date cannot be in past");
                }
                if (ModelState.IsValid)
                {
                    PGRequest req = new PGRequest()
                    {
                        RequestType     = RequestType.Leave,
                        RequestStatus   = RequestStatus.Pending,
                        ApplicantUserId = claim.Value,
                        RequestOn       = request.LastActionOn = DateTime.Now,
                        Description     = request.Description,
                        Date            = request.Date,
                        PriceTierId     = stay.Room.PriceTierId,
                        PGId            = stay.PGId,
                        StayId          = stay.Id
                    };

                    await _unitOfWork.PGRequest.AddAsync(req);

                    _unitOfWork.Save();

                    return(RedirectToAction(nameof(MyStays)));
                }
            }

            return(View(request));
        }
Пример #5
0
        public async Task <IActionResult> Apply(PGRequest request)
        {
            if (!ModelState.IsValid)
            {
                var priceTiers = await _unitOfWork.PriceTier.GetAllAsync(pt => pt.PGId == request.PGId);

                IList <SelectListItem> tiers = priceTiers.Select(pt => new SelectListItem()
                {
                    Text  = $"{pt.Name} (₹{String.Format("{0:n2}", pt.Rent)})",
                    Value = pt.Id.ToString()
                }).ToList();

                ViewBag.PriceTiers = tiers;

                return(View(request));
            }
            else
            {
                var       claimsIdentity = (ClaimsIdentity)User.Identity;
                var       claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);
                PGRequest req            = new PGRequest()
                {
                    RequestType     = RequestType.Join,
                    RequestStatus   = RequestStatus.Pending,
                    ApplicantUserId = claim.Value,
                    RequestOn       = request.LastActionOn = DateTime.Now,
                    Description     = request.Description,
                    Date            = request.Date,
                    PriceTierId     = request.PriceTierId,
                    PGId            = request.PGId
                };
                await _unitOfWork.PGRequest.AddAsync(req);

                _unitOfWork.Save();

                return(RedirectToAction(nameof(Index)));
            }
        }
Пример #6
0
        public async Task <IActionResult> Apply(int id)
        {
            if (id == 0)
            {
                return(RedirectToAction(nameof(Index)));
            }

            var priceTiers = await _unitOfWork.PriceTier.GetAllAsync(pt => pt.PGId == id);

            IList <SelectListItem> tiers = priceTiers.Select(pt => new SelectListItem()
            {
                Text  = $"{pt.Name} (₹{String.Format("{0:n2}", pt.Rent)})",
                Value = pt.Id.ToString()
            }).ToList();

            ViewBag.PriceTiers = tiers;

            PGRequest request = new PGRequest()
            {
                PGId = id
            };

            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);
            //check
            bool activeStay = (await _unitOfWork.Stay.GetAsync(s => s.TenantId == claim.Value &&
                                                               (s.StartDate.Date >= DateTime.Now.Date ||
                                                                (s.EndDate == null && s.StartDate.Date <= DateTime.Now.Date) ||
                                                                (s.EndDate != null && ((DateTime)s.EndDate).Date >= DateTime.Now.Date)))) != null;

            if (activeStay)
            {
                ModelState.AddModelError("", "You cannot apply to other PG before exiting current one");
            }
            ViewBag.CurrentStay = activeStay;

            return(View(request));
        }