Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 3
0
 public async Task <ActionResult <List <ParamModelView> > > GetAllByParamType(int paramTypeId)
 {
     return(await _paramService.FindAllByParamType(paramTypeId));
 }