public async Task <IFechamentoDeRemuneracao> AdicionarFechamentoAsync(IFechamentoDeRemuneracao fechamento, ILogDeOperacaoDeRemuneracao informacaoDeAuditoria = null) { FechamentoDeRemuneracaoBD fechamentoBD = ConverteParaModeloSQLBD(fechamento); using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao)) { context.LancamentosDeFechamento.AddRange(fechamentoBD.LancamentosDeRemuneracao.ToArray()); await context.SaveChangesAsync(); foreach (var remFec in fechamentoBD.LancamentosDeRemuneracao) { remFec.IdRemuneracaoOriginal = remFec.Id; } context.LancamentosDeFechamento.UpdateRange(fechamentoBD.LancamentosDeRemuneracao); context.Fechamentos.Add(fechamentoBD); await context.SaveChangesAsync(); } IFechamentoDeRemuneracao fechamentoSalvo = ConverteDoModeloSQLBD(fechamentoBD); return(fechamentoSalvo); }
public static IEnumerable <object[]> CenariosComDescontoMaiorQueValorBruto() { List <object[]> casos = new List <object[]>(); Dinheiro zero = Dinheiro.Zero; try { IFechamentoDeRemuneracao fechamentoAlvo = LOMock.ConfiguraFechamento(LOMock.ID_FECHAMENTO_MOCK, LOMock.ID_FAVORECIDO, Dinheiro.EmReais(200), Dinheiro.EmReais(200)); var caso1 = new object[] { fechamentoAlvo, zero, zero }; var caso2 = new object[] { fechamentoAlvo, Dinheiro.EmReais(100), zero }; var caso3 = new object[] { fechamentoAlvo, Dinheiro.EmReais(300), zero }; casos.Add(caso1); casos.Add(caso2); casos.Add(caso3); } catch (Exception ex) { throw ex; } //Nao permitir casos zerados return(casos.Where(caso => (!caso[1].Equals(zero) || !caso[2].Equals(zero)) && ((IFechamentoDeRemuneracao)caso[0]).ValorBruto < (Dinheiro)caso[1])); }
public static IFechamentoDeRemuneracao ConfiguraFechamento(int idFechamento, int idFavorecido, Dinheiro valorBruto, Dinheiro valorLiquido) { ILancamentoDeFechamentoDeRemuneracao[] lancamentos = ConfiguraLancamentosDeFechamento(idFavorecido, valorBruto, valorLiquido); IFechamentoDeRemuneracao fechamentoDeRemuneracaoMock = FabricaDeFechamentos.CriaFechamento(idFechamento, lancamentos, ID_FAVORECIDO); return(fechamentoDeRemuneracaoMock); }
public ILogDeOperacaoDeRemuneracao CriaLogDeDesconto(IFechamentoDeRemuneracao fechamentoDeRemuneracao, Dinheiro desconto) { return(new LogDeOperacaoDeRemuneracao() { DataDaExecucao = Constantes.ServerTime(), EntidadesAlteradas = new IEntidade[] { fechamentoDeRemuneracao }, Operacao = OperacaoDeRemuneracao.AdicionarDescontoAFechamento }); }
public void Lanca_Excecao_Se_Desconto_For_Maior_Que_Valor_Bruto(IFechamentoDeRemuneracao fechamentoDeRemuneracao, Dinheiro desconto, Dinheiro bonus) { //Arrange Initialize(fechamentoDeRemuneracao); Dinheiro valorBruto = fechamentoDeRemuneracao.ValorBruto; //Act && Assert Assert.Throws(typeof(AggregateException), () => _diretor.AplicaAjustesA(fechamentoDeRemuneracao.Id, desconto, bonus).Wait()); }
public void Deve_Adicionar_Desconto_a_Remuneracao_Por_Favorecido(IFechamentoDeRemuneracao fechamentoDeRemuneracao, Dinheiro desconto, Dinheiro bonus) { //Arrange Initialize(fechamentoDeRemuneracao); //Act _diretor.AplicaAjustesA(fechamentoDeRemuneracao.Id, desconto, bonus).Wait(); IFechamentoDeRemuneracao remuneracoesAjustada = _repositorio.ObtemFechamento(fechamentoDeRemuneracao.Id).WaitForResult(); int numeroDeFavorecidos = remuneracoesAjustada.LancamentosDeRemuneracao.Select(lanc => lanc.IdFavorecido).Distinct().Count(); //Assert Assert.AreEqual(1, numeroDeFavorecidos); }
public static IFechamentoDeRemuneracao ConfiguraFechamentoMock(IFechamentoDeRemuneracao fechamento, int idAdicional = 0) { Dinheiro valorBruto = fechamento.ValorBruto; Dinheiro valorLiquido = fechamento.ValorLiquido; Dinheiro desconto = fechamento.Desconto; Dinheiro bonus = fechamento.Bonus; int idFavorecido = fechamento.LancamentosDeRemuneracao.First().IdFavorecido; int idConta = fechamento.ContaExecutoraDoInicioDoFechamento; int id = fechamento.Id + idAdicional; IFechamentoDeRemuneracao fechamentoNovo = FabricaDeFechamentos.CriaFechamento(id, ConfiguraLancamentosDeFechamento(idFavorecido, valorBruto, valorLiquido), idConta); return(fechamentoNovo); }
public void Valor_Ajustado_Deve_Ser_Calculado_A_Partir_Do_Valor_Bruto_Da_Remuneracao(IFechamentoDeRemuneracao fechamentoDeRemuneracao, Dinheiro desconto, Dinheiro bonus) { //Arrange Initialize(fechamentoDeRemuneracao); Dinheiro valorBruto = fechamentoDeRemuneracao.ValorBruto; Dinheiro ajuste = bonus - desconto; //Act _diretor.AplicaAjustesA(fechamentoDeRemuneracao.Id, desconto, bonus).Wait(); IFechamentoDeRemuneracao remuneracaoAjustada = _repositorio.ObtemFechamento(fechamentoDeRemuneracao.Id).WaitForResult(); //Assert Assert.AreEqual(remuneracaoAjustada.ValorBruto, remuneracaoAjustada.ValorLiquido - ajuste); }
public void Deve_Adicionar_Ajustes_a_Remuneracao_Por_Fechamento(IFechamentoDeRemuneracao fechamentoDeRemuneracao, Dinheiro desconto, Dinheiro bonus) { //Arrange Initialize(fechamentoDeRemuneracao); IEnumerable <IFechamentoDeRemuneracao> fechamentosAntes = _repositorio.ObtemFechamentos().WaitForResult().Where(fec => (fec.Desconto != Dinheiro.Zero || fec.Bonus != Dinheiro.Zero) && fec.Id != fechamentoDeRemuneracao.Id); int quantidadeAnterior = fechamentosAntes.Count(); //Act _diretor.AplicaAjustesA(fechamentoDeRemuneracao.Id, desconto, bonus).Wait(); IEnumerable <IFechamentoDeRemuneracao> fechamentosAjustados = _repositorio.ObtemFechamentos().WaitForResult().Where(fec => fec.Desconto != Dinheiro.Zero || fec.Bonus != Dinheiro.Zero).ToArray(); int quantidadeAtual = fechamentosAjustados.Count(); //Assert Assert.AreEqual(quantidadeAnterior + 1, quantidadeAtual); }
public async Task <IFechamentoDeRemuneracao> AplicaAjustesA(int idFechamentoDeRemuneracao, Dinheiro desconto = default(Dinheiro), Dinheiro bonus = default(Dinheiro)) { IFechamentoDeRemuneracao fechamento = await _repositorio.ObtemFechamento(idFechamentoDeRemuneracao); //IEnumerable<ILogDeOperacaoDeRemuneracao> logs = GeraLogsParaAuditoria(desconto, bonus, fechamento); IEnumerable <ILogDeOperacaoDeRemuneracao> logs = null; if (fechamento.ValorBruto < desconto) { throw new DescontoInvalidoException("O valor de desconto não pode ser maior que o valor bruto da remuneração"); } fechamento.AtualizaDesconto(desconto); fechamento.AtualizaBonus(bonus); return(await _repositorio.SalvaAlteracoesEm(fechamento, logs)); }
public FechamentoDeRemuneracaoBD(IFechamentoDeRemuneracao fechamento) { Id = fechamento.Id; ContaExecutoraDoInicioDoFechamento = fechamento.ContaExecutoraDoInicioDoFechamento; ContaExecutoraDaEmissao = fechamento.ContaExecutoraDaEmissao; DataDoInicioDoFechamento = fechamento.DataDoInicioDoFechamento; DataDaEmissao = fechamento.DataDaEmissao; DataDoCancelamento = fechamento.DataDoCancelamento; LancamentosDeRemuneracao = fechamento.LancamentosDeRemuneracao.Select(rem => new LancamentoDeFechamentoDeRemuneracaoBD(rem)).ToArray(); Bonus = fechamento.Bonus; Desconto = fechamento.Desconto; ValorBruto = fechamento.ValorBruto; ValorLiquido = fechamento.ValorLiquido; }
public async Task <IFechamentoDeRemuneracao> SalvaAlteracoesEm(IFechamentoDeRemuneracao fechamento, IEnumerable <ILogDeOperacaoDeRemuneracao> informacaoDeAuditoria = null) { IFechamentoDeRemuneracao fechamentoSalvo; using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao)) { var fechamentoBD = ConverteParaModeloSQLBD(fechamento); //IEnumerable<LogDeOperacaoDeRemuneracaoBD> logs = GeraLogsBD(informacaoDeAuditoria); context.Update(fechamentoBD); //context.AddRange(logs); await context.SaveChangesAsync(); fechamentoSalvo = ConverteDoModeloSQLBD(fechamentoBD); } return(fechamentoSalvo); }
public static IRepositorioDeRemuneracoes ConfiguraRepositorioDeRemuneracoesParaFechamento(IFechamentoDeRemuneracao fechamentoAlvo, int numeroDeFechamentosAdicionais) { IEnumerable <IFechamentoDeRemuneracao> fechamentosDeRemuneracaoMock = Enumerable.Range(1, numeroDeFechamentosAdicionais) .Select(i => ConfiguraFechamentoMock(fechamentoAlvo, i)) .Prepend(fechamentoAlvo); Mock <IRepositorioDeRemuneracoes> repositorio = new Mock <IRepositorioDeRemuneracoes>(); repositorio.Setup(x => x.SalvaAlteracoesEm(It.Is <IFechamentoDeRemuneracao>(fec => fec.Id == fechamentoAlvo.Id), It.IsAny <IEnumerable <ILogDeOperacaoDeRemuneracao> >())).Returns <IFechamentoDeRemuneracao, IEnumerable <ILogDeOperacaoDeRemuneracao> >((fec, logs) => { IFechamentoDeRemuneracao fechamentoDeRemuneracaoAlvoMock = ConfiguraFechamentoMock(fec); fechamentosDeRemuneracaoMock = fechamentosDeRemuneracaoMock.Where(f => f.Id != fec.Id).Prepend(fechamentoDeRemuneracaoAlvoMock); return(Task.FromResult(fechamentoDeRemuneracaoAlvoMock)); }); repositorio.Setup(x => x.ObtemFechamentos()).Returns(Task.FromResult(fechamentosDeRemuneracaoMock)); repositorio.Setup(x => x.ObtemFechamento(It.IsAny <int>())).Returns <int>(i => Task.FromResult(fechamentosDeRemuneracaoMock.Single(f => f.Id == i))); return(repositorio.Object); }
private IEnumerable <ILogDeOperacaoDeRemuneracao> GeraLogsParaAuditoria(Dinheiro desconto, Dinheiro bonus, IFechamentoDeRemuneracao fechamento) { List <ILogDeOperacaoDeRemuneracao> logs = new List <ILogDeOperacaoDeRemuneracao>(); if (desconto != default(Dinheiro)) { ILogDeOperacaoDeRemuneracao logDesconto = _logger.CriaLogDeDesconto(fechamento, desconto); logs.Add(logDesconto); } if (bonus != default(Dinheiro)) { ILogDeOperacaoDeRemuneracao logBonus = _logger.CriaLogDeBonus(fechamento, bonus); logs.Add(logBonus); } return(logs); }
public EmissaoDeRemuneracao(IFechamentoDeRemuneracao processamento) { IdProcessamento = processamento.Id; }
private void Initialize(IFechamentoDeRemuneracao fechamento) { _repositorio = LOMock.ConfiguraRepositorioDeRemuneracoesParaFechamento(fechamento, NUMERO_DE_FECHAMENTOS_ADICIONAIS); _diretor = new DiretorDeRevisao(_repositorio, LOMock.ConfiguraLoggerSimples()); }
private FechamentoDeRemuneracaoBD ConverteParaModeloSQLBD(IFechamentoDeRemuneracao fechamento) { return(new FechamentoDeRemuneracaoBD(fechamento)); }