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)); }
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); }
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; }
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)); }
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))); } }
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)); }