Esempio n. 1
0
        public IActionResult LoadActivity(string roomCode, int activityId)
        {
            var authenticatedPersonId = HttpContext.Session.GetSessionPersonId();
            var activity = _uActivity.GetById(activityId);
            var room = _uRoom.GetByCode(roomCode);
            var roomsIds = _uRelStudentRoom.GetRoomIdByPersonId(authenticatedPersonId);
            if (room == null)
                return BadRequest(ResponseContent.Create(null, HttpStatusCode.BadRequest, $"A sala com código \"{roomCode}\" não existe!"));

            if (activity == null)
                return BadRequest(ResponseContent.Create(null, HttpStatusCode.BadRequest, "A atividade não existe!"));

            if (room.CurrentState != (int)ERoomState.Open)
                return StatusCode((int)HttpStatusCode.Unauthorized, ResponseContent.Create(null, HttpStatusCode.Unauthorized, "Você não tem acesso a essa sala pois ela esta fechada!"));

            if (activity.CurrentState == (int)EActivityState.Building)
                return StatusCode((int)HttpStatusCode.Unauthorized, ResponseContent.Create(null, HttpStatusCode.Unauthorized, "Você não tem acesso a essa atividade!"));

            if (!roomsIds.Contains(room.Id))
                return StatusCode((int)HttpStatusCode.Unauthorized, ResponseContent.Create(null, HttpStatusCode.Unauthorized, "Você não tem acesso a essa sala/atividade!"));

            var answer = _uAnswer.GetByUser(activityId, authenticatedPersonId);
            var uploads = _uRelUploadActivity.GetByActivity(activity.Id);
            var attachments = answer != null ? _uRelUploadAnswer.GetByAnswer(answer.Id) : new List<RelUploadAnswer>();
            var response = new MViewActivity(activity, answer, null, uploads)
            {
                Answer =
                {
                    Attachments = attachments?.Select(a => a.Document.FileName).ToList()
                }
            };
            return Ok(ResponseContent.Create(response, HttpStatusCode.OK, null));
        }
Esempio n. 2
0
        public async Task ExecuteAsync(CancellationToken cancellationToken)
        {
            var serviceProvider = _serviceProvider.GetRequiredService <IServiceScopeFactory>();

            using (var scope = serviceProvider.CreateScope())
            {
                var sevenDaysFromNow = DateTime.Now.AddDays(7);

                var context  = scope.ServiceProvider.GetService <SIEContext>();
                var toExpire =
                    new UActivity(context)
                    .Get()
                    .Where(r => r.CurrentState == (int)EActivityState.InProgress && r.ExpirationDate != null && r.ExpirationDate <= sevenDaysFromNow)
                    .ToList();

                if (!toExpire.Any())
                {
                    return;
                }

                var uRelStudentRoom = new URelStudentRoom(context);
                var students        = (IEnumerable <RelStudentRoom>) new List <RelStudentRoom>();

                foreach (var activity in toExpire)
                {
                    students = students
                               .Concat(uRelStudentRoom.GetByRoom(activity.Room.Id));
                }

                students = students.DistinctBy(s => s.Person.Id);
                var sEmail  = new EmailService(_configuration);
                var uAnswer = new UAnswer(context);

                foreach (var student in students)
                {
                    var listActivities = toExpire
                                         .Where(a => a.Room.Id == student.Room.Id && uAnswer.GetByUser(a.Id, student.Person.Id) == null)
                                         .OrderBy(a => a.ExpirationDate)
                                         .ToList();
                    if (!listActivities.Any())
                    {
                        continue;
                    }

                    var body = "<h3>Atividades a serem entregues na próxima semana</h3><br/>" +
                               "<table border='1' cellpadding='2' cellspacing='0' height='100%' width='100%'>" +
                               "<thead>" +
                               "<tr><td>Título</td><td>Descrição</td><td>Data final para entrega</td></tr>" +
                               "</thead>" +
                               "<tbody>";

                    listActivities
                    .ForEach(t =>
                    {
                        body += "<tr>" +
                                $"<td><a href='http://localhost:8080/#/student/room/{t.Room.Code}/activity/{t.Id}'>{t.Title}</a></td>" +
                                $"<td>{(!string.IsNullOrEmpty(t.Description) ? t.Description : "-")}</td>" +
                                $"<td>{t.ExpirationDate:dd/MM/yyyy}</td>" +
                                "</tr>";
                    });

                    body += "</tbody>" +
                            "</table>";

                    sEmail.SendEmail("Suas atividades a serem entregues nos próximos dias", body, new List <string> {
                        student.Person.Email
                    });
                }
            }
        }