public async Task <IComandoResultado> ManipuladorAsync(DelMatriculaItemComando comando) { //Validar Comando AddNotifications(comando.Notifications); if (Invalid) { return(new ComandoResultado(false, "Por favor, corrija os campos abaixo", Notifications)); } //persistir dados //Deletar Tem item matricula var deletado = await _repositorio.DeletarItemMatriculaTemp(comando.IdMatricula, comando.IdTurma); //Atualizar Lista var turmas = (await _repositorio.ObterMatriculaItensTempPor(new Guid(comando.IdMatricula))).ToList(); //Aplicar regra desconto var desconto = Convert.ToInt32((await _configuracao.ObterPorChaveAsync("DescontoCurso")).Valor); var idTurmaMaiorValor = 0; if (turmas != null && turmas.Count() > 0) { idTurmaMaiorValor = turmas.MaxBy(t => t.Valor).FirstOrDefault().IdTurma; foreach (var item in turmas) { if (item.IdTurma != idTurmaMaiorValor) { item.ValorCalculado = ValorCalculado(item.Valor, desconto); item.ValorDesconto = desconto; item.Desconto = true; } else { item.ValorCalculado = item.Valor; item.ValorDesconto = 0; item.Desconto = false; } } } //Atualizar Item temp foreach (var item in turmas) { await _repositorio.AtualizaItemMatriculaTemp(new MatriculaItemTemp( item.IdMatriculaGuid, item.IdTurma, item.Valor, item.Desconto, item.ValorDesconto, item.ValorCalculado )); } //Obter lista de retorno var itens = turmas; var totalGeral = itens.Sum(t => t.Valor); var totalDesconto = itens.Sum(t => t.ValorCalculado); // Retornar o resultado para tela return(new ComandoResultado(true, "Item excluído com sucesso", new { itens, totalGeral, totalDesconto })); }
public async Task <IComandoResultado> ManipuladorAsync(MatricularComando comando) { //Obter itens matricula var turmas = (await _repositorio.ObterMatriculaItensTempPor(new Guid(comando.IdMatriculaGuid))).ToList(); if (turmas.Count() <= 0) { AddNotification("Turmas", $"Informe pelo menos uma turma"); } comando.ValorContrato = turmas.Sum(x => x.ValorCalculado); //Criar Entidade var matricula = new Matricula(comando.Id, comando.IdAluno, comando.TotalParcelas, comando.DataContrato, comando.PercentualDesconto, comando.ValorDesconto, comando.ValorMatricula, comando.ValorContrato, comando.DiaVencimento, comando.DataIncialPagamento, ChaveRegistro.Gerar(), comando.Ano, comando.MesInicioPagamento); //check Matricula Existe if (await _repositorio.CheckMatriculaExisteAsync(matricula)) { AddNotification("Matricula", $"Aluno informado ja possui matricula ativa para o ano de {comando.Ano} "); } //Validar Comando comando.Valido(); AddNotifications(comando.Notifications); if (Invalid) { return(new ComandoResultado(false, "Por favor, corrija os campos abaixo", Notifications)); } //Persistir Dados var id = await _repositorio.MatricularAsync(matricula); //Persistir Item foreach (var item in turmas) { await _repositorio.RegistrarItemMatricula(new MatriculaItem( id, item.IdTurma, item.Valor, item.Desconto, item.ValorDesconto, item.ValorCalculado )); //Enturmar Aluno await _repositorioAluno.SalvarTurmaAsync(new TurmaAluno(item.IdTurma, matricula.IdAluno)); } //Deletar Tem item matricula await _repositorio.DeletarItemMatriculaTemp(comando.IdMatriculaGuid, 0); //Persistir Boletos await _repositorio.GerarMensalidade(new Mensalidade(0, matricula.IdAluno, id, matricula.TotalParcelas, Convert.ToDecimal(matricula.ValorContrato), matricula.ValorDesconto, matricula.DataIncialPagamento, 2)); //Persistir Boleto Matricula await _repositorio.GerarMensalidade(new Mensalidade(0, matricula.IdAluno, id, 1, Convert.ToDecimal(matricula.ValorMaricula), matricula.ValorDesconto, matricula.DataIncialPagamento, 1)); // Retornar o resultado para tela return(new ComandoResultado(true, "Matricula realizada com sucesso", new { Id = id, Nome = "Matriculado", Status = true })); }