public async Task <IOperationResult <ParentAuthorization> > CreateParentAuthorization(int meetingId, ParentAuthorization answer)
        {
            var meeting = await _meetingRepository.Find(m => m.Id == meetingId,
                                                        m => m.Tutor, m => m.Student, m => m.Subject);

            if (meeting == null)
            {
                return(BasicOperationResult <ParentAuthorization> .Fail("La tutoría agendada no fue encontrada"));
            }

            var authorization = new ParentAuthorization
            {
                AuthorizationDate = DateTime.Now,
                ParentId          = answer.ParentId,
                Status            = answer.Status,
                Reason            = answer.Reason
            };

            _parentAuthorizationRepository.Create(authorization);
            await _parentAuthorizationRepository.Save();

            meeting.ParentAuthorizationId = authorization.Id;
            meeting.Status = authorization.Status == ParentAuthorizationStatus.Approved
                ? MeetingStatus.Approved
                : MeetingStatus.Rejected;
            _meetingRepository.Update(meeting);

            ParentAuthorizationStatus status = answer.Status;

            await _meetingRepository.Save();

            await _notificationActions[status](meeting, authorization);

            return(BasicOperationResult <ParentAuthorization> .Ok(authorization));
        }
        private async Task NotifyStuentAndTutorOfApprovedMeeting(Meeting meeting, ParentAuthorization authorization)
        {
            var student = meeting.Student;
            var tutor   = meeting.Tutor;

            await _notificationManager.NotifyTutorOfSolicitedMeeting(tutor.Id, meeting.Subject, student, meeting.Id);

            string studentMessage =
                $"Su padre ha autorizado su tutoría con {tutor.FullName} para la materia {meeting.Subject.Name}";

            string title = "Tutoría Aprobada";

            await _notificationService.SendNotificationToUser(student, studentMessage, title);
        }
        private async Task NotifyStudentOfRejectedMeeting(Meeting meeting, ParentAuthorization authorization)
        {
            var student = meeting.Student;

            string message = $"Su tutoría con {meeting.Tutor.FullName} ha sido rechazada por su padre.";

            if (authorization.Reason != null)
            {
                message += " " + authorization.Reason;
            }


            string title = "Tutoría Denegada";

            await _notificationService.SendNotificationToUser(student, message, title, new Dictionary <string, string>
            {
                { "rejectedMeeting", "true" },
            });
        }
Example #4
0
        public async Task <IActionResult> RespondToStudentSolicitudeMeeting([FromRoute] int meetingId, [FromBody] ParentMeetingAnswer answer)
        {
            int parentId = GetUserId();

            var authorization = new ParentAuthorization
            {
                Status   = answer.StatusAnswer,
                Reason   = answer.Reason,
                ParentId = parentId
            };

            IOperationResult <ParentAuthorization> result =
                await _parentAuthorizationManager.CreateParentAuthorization(meetingId, authorization);

            if (!result.Success)
            {
                return(BadRequest(result.Message));
            }

            var mapped = _mapper.Map <ParentAuthorizationResponse>(result.Entity);

            return(Ok(mapped));
        }