public async Task <SendRoomTransferRespone> SendRequest(SendRoomTransferRequest request) { var roomTypes = await _paramService.FindAllByParamType(GlobalParams.ParamTypeRoomType); if (!roomTypes.Exists(t => t.ParamId == request.TargetRoomType)) { throw new HttpStatusCodeException(HttpStatusCode.NotFound, "RoomTransferService: Room Type is not found"); } //Find student in database var student = await _studentService.FindById(request.StudentId); if (student.RoomId == null) { throw new HttpStatusCodeException(HttpStatusCode.NotFound, "RoomTransferService: Student doesn't have any room'"); } //Check if there's active room transfer request var transfers = (List <RoomTransferRequestForm>) await _repoWrapper.RoomTransfer.FindAllAsyncWithCondition(r => r.StudentId == request.StudentId); if (transfers != null) { if (transfers.Exists(b => b.Status == RequestStatus.Pending || b.Status == RequestStatus.Approved)) { throw new HttpStatusCodeException(HttpStatusCode.Forbidden, "RoomTransferService: There are already active transfer requests for this account"); } } //Check if contract is active next month var thisTimeNextMonth = DateTime.Now.AddHours(GlobalParams.TimeZone).AddMonths(1); var contracts = (List <Contract>) await _repoWrapper.Contract.FindAllAsyncWithCondition(c => c.StudentId == student.StudentId && c.Status == ContractStatus.Active && thisTimeNextMonth <= c.EndDate); if (contracts == null || !contracts.Any()) { throw new HttpStatusCodeException(HttpStatusCode.Forbidden, "RoomTransferService: Contract isn't active next month"); } var maxDayForApproveRoomTransfer = await _repoWrapper.Param.FindByIdAsync(GlobalParams.MaxDayForApproveRoomTransfer); if (maxDayForApproveRoomTransfer?.Value == null) { throw new HttpStatusCodeException(HttpStatusCode.NotFound, "RoomTransferService: MaxDayForApproveRoomTransfer not found"); } //Create new room transfer from request var result = SendRoomTransferRequest.NewEntityFromRequest(request, maxDayForApproveRoomTransfer.Value.Value); //Create in database result = await _repoWrapper.RoomTransfer.CreateAsync(result); return(new SendRoomTransferRespone() { RoomTransferFormId = result.RoomTransferRequestFormId }); }
public async Task <SendRenewContractRequestResponse> SendRenewContract(SendRenewContractRequestRequest request) { var acceptableMonths = (await _paramService.FindAllByParamType(GlobalParams.ParamTypeContractParam)).Select(p => p.Value).ToList(); if (!acceptableMonths.Contains(request.Month)) { throw new HttpStatusCodeException(HttpStatusCode.Forbidden, "RenewContractService: Month is invalid"); } var student = await _studentService.FindById(request.StudentId); //Check if student has room if (student.RoomId == null) { throw new HttpStatusCodeException(HttpStatusCode.Forbidden, "RenewContractService: Student doesn't have room"); } //Check student's evaluation point is enough var contractRenewalEvaluationScoreMargin = (await _paramService.FindById(GlobalParams.ParamContractRenewalEvaluationPointMargin))?.Value ?? GlobalParams.DefaultContractRenewalEvaluationPointMargin; if (student.EvaluationScore < contractRenewalEvaluationScoreMargin) { throw new HttpStatusCodeException(HttpStatusCode.Forbidden, "RenewContractService: Student's evaluation is not enough"); } var contracts = (List <Contract>) await _repoWrapper.Contract.FindAllAsyncWithCondition(c => c.StudentId == student.StudentId && c.Status == ContractStatus.Active); if (contracts == null || !contracts.Any()) { throw new HttpStatusCodeException(HttpStatusCode.NotFound, "RenewContractService: Student doesn't have any active contract'"); } var renewContract = SendRenewContractRequestRequest.EntityFromRequest(request, contracts[0]); renewContract = await _repoWrapper.RenewContract.CreateAsync(renewContract); return(SendRenewContractRequestResponse.ResponseFromEntity(renewContract)); }
public async Task <ActionResult <List <ParamModelView> > > GetAllByParamType(int paramTypeId) { return(await _paramService.FindAllByParamType(paramTypeId)); }