Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update EventoController.cs #639

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Codigo/Core/Service/IEventoService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,7 @@ public interface IEventoService
Task<string> GetNomeInstrumento(int id);
Task<IEnumerable<FigurinoDropdownDTO>> GetAllFigurinoDropdown(int idGrupo);
Task<IEnumerable<Eventopessoa>> GetPessoas(int idGrupo);
Task<HttpStatusCode> CreateApresentacaoInstrumento(Apresentacaotipoinstrumento apresentacaotipoinstrumento);

}
}
127 changes: 102 additions & 25 deletions Codigo/GestaoGrupoMusicalWeb/Controllers/EventoController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,23 @@ namespace GestaoGrupoMusicalWeb.Controllers

public class EventoController : BaseController
{
private readonly IEventoService _evento;
private readonly IEventoService _eventoService;
private readonly IMapper _mapper;
private readonly IGrupoMusicalService _grupoMusical;
private readonly IGrupoMusicalService _grupoMusicalService;
private readonly IPessoaService _pessoaService;
private readonly IFigurinoService _figurino;
private readonly IInstrumentoMusicalService _tipoIntrumentoMusical;
private readonly IFigurinoService _figurinoService;
private readonly IInstrumentoMusicalService _tipoIntrumentoMusicalService;



public EventoController(IEventoService evento, IMapper mapper, IGrupoMusicalService grupoMusical, IPessoaService pessoaService, IFigurinoService figurino, IInstrumentoMusicalService tipoInstrumentoMusical)
{
_evento = evento;
_eventoService = evento;
_mapper = mapper;
_grupoMusical = grupoMusical;
_grupoMusicalService = grupoMusical;
_pessoaService = pessoaService;
_figurino = figurino;
_tipoIntrumentoMusical = tipoInstrumentoMusical;
_figurinoService = figurino;
_tipoIntrumentoMusicalService = tipoInstrumentoMusical;
}

// GET: EventoController
Expand All @@ -44,14 +44,14 @@ public ActionResult Index()

public async Task<IActionResult> GetDataPage(DatatableRequest request)
{
var response = _evento.GetDataPage(request, await _grupoMusical.GetIdGrupo(User.Identity.Name));
var response = _eventoService.GetDataPage(request, await _grupoMusicalService.GetIdGrupo(User.Identity.Name));
return Json(response);
}

// GET: EventoController/Details/5
public ActionResult Details(int id)
{
var evento = _evento.Get(id);
var evento = _eventoService.Get(id);
var eventoModel = _mapper.Map<EventoViewModel>(evento);
return View(eventoModel);
}
Expand All @@ -60,15 +60,15 @@ public ActionResult Details(int id)
public async Task<ActionResult> Create()
{

int idGrupoMusical = await _grupoMusical.GetIdGrupo(User.Identity.Name);
int idGrupoMusical = await _grupoMusicalService.GetIdGrupo(User.Identity.Name);

var listaPessoasAutoComplete = await _pessoaService.GetRegentesForAutoCompleteAsync(idGrupoMusical);
if (listaPessoasAutoComplete == null || !listaPessoasAutoComplete.Any())
{
Notificar("É necessário cadastrar pelo menos um Regente para então cadastrar um Evento Musical.", Notifica.Informativo);
return RedirectToAction(nameof(Index));
}
var figurinosDropdown = await _figurino.GetAllFigurinoDropdown(idGrupoMusical);
var figurinosDropdown = await _figurinoService.GetAllFigurinoDropdown(idGrupoMusical);

if (figurinosDropdown == null || !figurinosDropdown.Any())
{
Expand All @@ -94,7 +94,7 @@ public async Task<ActionResult> Create(EventoCreateViewlModel eventoModel)

if (ModelState.IsValid && eventoModel.IdRegentes != null)
{
int idGrupoMusical = await _grupoMusical.GetIdGrupo(User.Identity.Name);
int idGrupoMusical = await _grupoMusicalService.GetIdGrupo(User.Identity.Name);
eventoModel.IdGrupoMusical = idGrupoMusical;

int auxIdPessoa = (await _pessoaService.GetByCpf(User.Identity.Name))?.Id ?? 0;
Expand All @@ -103,7 +103,7 @@ public async Task<ActionResult> Create(EventoCreateViewlModel eventoModel)
Evento evento = _mapper.Map<Evento>(eventoModel);
evento.IdColaboradorResponsavel = auxIdPessoa;
string mensagem = "";
switch (await _evento.Create(evento, eventoModel.IdRegentes, eventoModel.IdFigurinoSelecionado))
switch (await _eventoService.Create(evento, eventoModel.IdRegentes, eventoModel.IdFigurinoSelecionado))
{
case HttpStatusCode.OK:
Notificar("Evento <b>Cadastrado</b> com <b>Sucesso</b>", Notifica.Sucesso);
Expand Down Expand Up @@ -134,7 +134,7 @@ public async Task<ActionResult> Create(EventoCreateViewlModel eventoModel)
// GET: EventoController/Edit/5
public async Task<ActionResult> Edit(int id)
{
var evento = _evento.Get(id);
var evento = _eventoService.Get(id);
if (evento == null)
{
Notificar("Evento <b>não</b> encontrado.", Notifica.Alerta);
Expand All @@ -146,7 +146,7 @@ public async Task<ActionResult> Edit(int id)
Notificar("É necessário cadastrar pelo menos um Regente para então cadastrar um Evento Musical.", Notifica.Informativo);
return RedirectToAction(nameof(Index));
}
var figurinosDropdown = await _figurino.GetAllFigurinoDropdown(evento.IdGrupoMusical);
var figurinosDropdown = await _figurinoService.GetAllFigurinoDropdown(evento.IdGrupoMusical);

if (figurinosDropdown == null || !figurinosDropdown.Any())
{
Expand Down Expand Up @@ -200,7 +200,7 @@ public async Task<ActionResult> Edit(EventoCreateViewlModel eventoModel)
}
evento.IdFigurinos.Add(new Figurino() { Id = eventoModel.IdFigurinoSelecionado });
}
switch (_evento.Edit(evento))
switch (_eventoService.Edit(evento))
{
case HttpStatusCode.OK:
Notificar("Evento <b>Editado</b> com <b>Sucesso</b>", Notifica.Sucesso);
Expand All @@ -226,7 +226,7 @@ public async Task<ActionResult> Edit(EventoCreateViewlModel eventoModel)
[ValidateAntiForgeryToken]
public ActionResult Delete(int id)
{
HttpStatusCode result = _evento.Delete(id);
HttpStatusCode result = _eventoService.Delete(id);
switch (result)
{
case HttpStatusCode.OK:
Expand All @@ -244,8 +244,8 @@ public ActionResult Delete(int id)

public async Task<ActionResult> NotificarEventoViaEmail(int id)
{
var pessoas = await _grupoMusical.GetAllPeopleFromGrupoMusical(await _grupoMusical.GetIdGrupo(User.Identity.Name));
switch (_evento.NotificarEventoViaEmail(pessoas, id))
var pessoas = await _grupoMusicalService.GetAllPeopleFromGrupoMusical(await _grupoMusicalService.GetIdGrupo(User.Identity.Name));
switch (_eventoService.NotificarEventoViaEmail(pessoas, id))
{
case HttpStatusCode.OK:
Notificar("Notificação de Evento foi <b>Enviada</b> com <b>Sucesso</b>.", Notifica.Sucesso);
Expand All @@ -270,7 +270,7 @@ public async Task<ActionResult> NotificarEventoViaEmail(int id)
public async Task<ActionResult> GerenciarInstrumentoEvento(int id)
{

int idGrupoMusical = await _grupoMusical.GetIdGrupo(User.Identity.Name);
int idGrupoMusical = await _grupoMusicalService.GetIdGrupo(User.Identity.Name);

var listaPessoasAutoComplete = await _pessoaService.GetRegentesForAutoCompleteAsync(idGrupoMusical);
if (listaPessoasAutoComplete == null || !listaPessoasAutoComplete.Any())
Expand All @@ -279,19 +279,19 @@ public async Task<ActionResult> GerenciarInstrumentoEvento(int id)
return RedirectToAction(nameof(Index));
}

var figurinosDropdown = await _figurino.GetAllFigurinoDropdown(idGrupoMusical);
var figurinosDropdown = await _figurinoService.GetAllFigurinoDropdown(idGrupoMusical);

if (figurinosDropdown == null || !figurinosDropdown.Any())
{

Notificar("É necessário cadastrar um Figurino para então cadastrar um Evento Musical.", Notifica.Informativo);
return RedirectToAction(nameof(Index));
}
var evento = _evento.Get(id);
var evento = _eventoService.Get(id);
EventoViewModel eventoView = _mapper.Map<EventoViewModel>(evento);

InstrumentoMusicalViewModel instrumentoMusicalViewModel = new InstrumentoMusicalViewModel();
IEnumerable<Tipoinstrumento> listaInstrumentos = await _tipoIntrumentoMusical.GetAllTipoInstrumento();
IEnumerable<Tipoinstrumento> listaInstrumentos = await _tipoIntrumentoMusicalService.GetAllTipoInstrumento();
instrumentoMusicalViewModel.ListaInstrumentos = new SelectList(listaInstrumentos, "Id", "Nome", null);

GerenciarInstrumentoEventoViewModel gerenciarInstrumentoEvento = new GerenciarInstrumentoEventoViewModel
Expand Down Expand Up @@ -323,9 +323,86 @@ public async Task<ActionResult> GerenciarInstrumentoEvento(GerenciarInstrumentoE
QuantidadePlanejada = gerenciarInstrumentoEventoViewModel.Quantidade
};

HttpStatusCode resul = await _evento.CreateApresentacaoInstrumento(apresentacaotipoinstrumento);
HttpStatusCode resul = await _eventoService.CreateApresentacaoInstrumento(apresentacaotipoinstrumento);

return RedirectToAction(nameof(GerenciarInstrumentoEvento), new { id = apresentacaotipoinstrumento.IdApresentacao });
}
[Authorize(Roles = "ADMINISTRADOR GRUPO,COLABORADOR,REGENTE")]
// GET: EventoController/RegistrarFrequencia/5
public async Task<ActionResult> RegistrarFrequencia(int idEvento)
{
int idGrupoMusical = await _grupoMusicalService.GetIdGrupo(User.Identity.Name);

var listaPessoasAutoComplete = await _pessoaService.GetRegentesForAutoCompleteAsync(idGrupoMusical);
if (listaPessoasAutoComplete == null || !listaPessoasAutoComplete.Any())
{
Notificar("É necessário cadastrar pelo menos um Regente para então registrar uma frequência.", Notifica.Informativo);
return RedirectToAction(nameof(Index));
}

var listaFigurinos = await _figurinoService.GetAllFigurinoDropdown(idGrupoMusical);
if (listaFigurinos == null || !listaFigurinos.Any())
{
Notificar("É necessário cadastrar pelo menos um Figurino para então registrar uma frequência.", Notifica.Informativo);
return RedirectToAction(nameof(Index));
}

var evento = _eventoService.Get(idEvento);
if (evento == null)
{
Notificar("Evento não encontrado.", Notifica.Erro);
return RedirectToAction(nameof(Index));
}

EventoViewModel eventoView = _mapper.Map<EventoViewModel>(evento);
if (eventoView == null)
{
Notificar("Erro ao mapear o evento.", Notifica.Erro);
return RedirectToAction(nameof(Index));
}

FrequenciaEventoViewModel frequenciaEvento = new()
{
IdGrupoMusical = idGrupoMusical,
DataHoraInicio = eventoView.DataHoraInicio,
DataHoraFim = eventoView.DataHoraFim,
ListaPessoa = new SelectList(listaPessoasAutoComplete, "Id", "Nome"),
ListaFigurino = new SelectList(listaFigurinos, "Id", "Nome"),
Local = eventoView.Local
};

ViewData["exemploRegente"] = listaPessoasAutoComplete.Select(p => p.Nome).FirstOrDefault()?.Split(" ")[0];
frequenciaEvento.JsonLista = listaPessoasAutoComplete.ToJson();

return View(frequenciaEvento);
}

[Authorize(Roles = "ADMINISTRADOR GRUPO,COLABORADOR,REGENTE")]
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> RegistrarFrequencia(List<EventoListaFrequenciaDTO> listaFrequencia)
{
switch (await _eventoService.RegistrarFrequenciaAsync(listaFrequencia))
{
case HttpStatusCode.OK:
Notificar("Lista de <b>Frequência</b> salva com <b>Sucesso</b>", Notifica.Sucesso);
break;
case HttpStatusCode.BadRequest:
Notificar("A <b>Lista</b> enviada <b>Não</b> possui registros", Notifica.Alerta);
return RedirectToAction(nameof(Index));
case HttpStatusCode.Conflict:
Notificar("A <b>Lista</b> enviada é <b>Inválida</b>", Notifica.Erro);
break;
case HttpStatusCode.NotFound:
Notificar("A <b>Lista</b> enviada não foi <b>Encontrada</b>", Notifica.Erro);
break;
case HttpStatusCode.InternalServerError:
Notificar("Desculpe, ocorreu um <b>Erro</b> ao registrar a Lista de <b>Frequência</b>.", Notifica.Erro);
break;
}
return RedirectToAction(nameof(RegistrarFrequencia), new { idEnsaio = listaFrequencia.First().IdEvento });
}


}
}
38 changes: 37 additions & 1 deletion Codigo/GestaoGrupoMusicalWeb/Models/EventoViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Core;
using Core;
using Core.DTO;
using Microsoft.AspNetCore.Mvc.Rendering;
using System.ComponentModel.DataAnnotations;
Expand Down Expand Up @@ -114,4 +114,40 @@ public class GerenciarInstrumentoEventoViewModel
public IEnumerable<GerenciarInstrumentoEventoDTO>? GerenciarInstrumentos { get; set; }

}
public class FrequenciaEventoViewModel
{
public int Id { get; set; }
public int IdGrupoMusical { get; set; }

[Display(Name = "Início")]
[Required(ErrorMessage = "O campo {0} é obrigatório")]
public DateTime? DataHoraInicio { get; set; }

[Display(Name = "Final")]
[Required(ErrorMessage = "O campo {0} é obrigatório")]
public DateTime? DataHoraFim { get; set; }

[Display(Name = "Tipo")]
[Required(ErrorMessage = "O campo {0} é obrigatório")]
public Tipo Tipo { get; set; }

[Display(Name = "Regentes")]
[Required(ErrorMessage = "O campo {0} é obrigatório")]
public IEnumerable<int>? IdRegentes { get; set; }

public SelectList? ListaPessoa { get; set; }

[Display(Name = "Figurino")]
[Required(ErrorMessage = "O campo {0} é obrigatório")]
public int IdFigurinoSelecionado { get; set; }

public SelectList? ListaFigurino { get; set; }

[Display(Name = "Local")]
[MaxLength(100, ErrorMessage = "O campo {0} deve ter no máximo 100 caracteres")]
public string? Local { get; set; }

public string? JsonLista { get; set; }
}

}
49 changes: 48 additions & 1 deletion Codigo/Service/EventoService.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Core;
using Core;
using Core.Datatables;
using Core.DTO;
using Core.Service;
Expand Down Expand Up @@ -419,5 +419,52 @@ public async Task<HttpStatusCode> CreateApresentacaoInstrumento(Apresentacaotipo
return HttpStatusCode.InternalServerError; //se tudo der errado
}
}
public async Task<HttpStatusCode> RegistrarFrequenciaAsync(List<EventoListaFrequenciaDTO> frequencias)
{
try
{
if (!frequencias.Any())
{
return HttpStatusCode.BadRequest;
}
int idEvento = frequencias.First().IdEvento;

var dbFrequencias = _context.Eventopessoas
.Where(ep => ep.IdEvento == frequencias.First().IdEvento)
.OrderBy(ep => ep.IdPessoaNavigation.Nome);

if (dbFrequencias == null)
{
return HttpStatusCode.NotFound;
}

if (dbFrequencias.Count() != frequencias.Count)
{
return HttpStatusCode.Conflict;
}

int pos = 0;
await dbFrequencias.ForEachAsync(dbFrequencia =>
{
if (dbFrequencia.IdEvento == frequencias[0].IdEvento && dbFrequencia.IdPessoa == frequencias[pos].IdPessoa)
{
dbFrequencia.JustificativaAceita = Convert.ToSByte(frequencias[pos].JustificativaAceita);
dbFrequencia.Presente = Convert.ToSByte(frequencias[pos].Presente);

_context.Update(dbFrequencia);
}
pos++;
});

await _context.SaveChangesAsync();

return HttpStatusCode.OK;
}
catch
{
return HttpStatusCode.InternalServerError;
}
}
}

}