示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#4
0
 public ILogDeOperacaoDeRemuneracao CriaLogDeDesconto(IFechamentoDeRemuneracao fechamentoDeRemuneracao, Dinheiro desconto)
 {
     return(new LogDeOperacaoDeRemuneracao()
     {
         DataDaExecucao = Constantes.ServerTime(), EntidadesAlteradas = new IEntidade[] { fechamentoDeRemuneracao }, Operacao = OperacaoDeRemuneracao.AdicionarDescontoAFechamento
     });
 }
示例#5
0
        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());
        }
示例#6
0
        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);
        }
示例#8
0
        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);
        }
示例#9
0
        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;
        }
示例#12
0
        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;
 }
示例#16
0
 private void Initialize(IFechamentoDeRemuneracao fechamento)
 {
     _repositorio = LOMock.ConfiguraRepositorioDeRemuneracoesParaFechamento(fechamento, NUMERO_DE_FECHAMENTOS_ADICIONAIS);
     _diretor     = new DiretorDeRevisao(_repositorio, LOMock.ConfiguraLoggerSimples());
 }
示例#17
0
 private FechamentoDeRemuneracaoBD ConverteParaModeloSQLBD(IFechamentoDeRemuneracao fechamento)
 {
     return(new FechamentoDeRemuneracaoBD(fechamento));
 }