public void Deve_Remunerar_Linearmente_Proporcional_Ao_Percentual_Configurado_Para_a_Regra()
        {
            //Arrange
            Random  rnd           = new Random();
            decimal multiplicador = rnd.Next(0, 100) / 100.0M;
            var     valorHora     = new Dinheiro(valor: 100M, moeda: Moeda.Real);
            Mock <ITabelaDePreco <int> > tabelaMock = GeraTabelaMock(valorHora);
            Profissional   favorecido    = LOMock.GeraProfissionalMock(id: 1, categoria: new Categoria(), nome: "LeMock");
            IFavorecimento favorecimento = LOMock.GeraFavorecimentoMock(new[] { favorecido });
            ParametrosDeRegraDeRemuneracao parametrosRegra1 = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock(percentual: 100);
            ParametrosDeRegraDeRemuneracao parametrosRegra2 = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock(percentual: 100 * multiplicador);
            IRegraDeRemuneracao            regra1           = LOMock.ConstroiRegraPorHora(parametrosRegra1, favorecimento, tabelaMock.Object);
            IRegraDeRemuneracao            regra2           = LOMock.ConstroiRegraPorHora(parametrosRegra2, favorecimento, tabelaMock.Object);

            Mock <IHoraPreProcessada> entregaMock = ConfiguraMockEntregaRemuneravel(5, favorecido);

            //Act
            IEnumerable <IRemuneracao> remuneracoesA = regra1.CalculaRemuneracoes(new IEntregaPreProcessada[] { entregaMock.Object });
            IEnumerable <IRemuneracao> remuneracoesB = regra2.CalculaRemuneracoes(new IEntregaPreProcessada[] { entregaMock.Object });
            IEnumerator <IRemuneracao> enumeratorA   = remuneracoesA.GetEnumerator();
            IRemuneracao RemuneracaoA = remuneracoesA.First();
            IEnumerator <IRemuneracao> enumeratorB = remuneracoesB.GetEnumerator();
            IRemuneracao RemuneracaoB = remuneracoesB.First();

            //Assert
            Assert.AreEqual(multiplicador * RemuneracaoA.ValorAjustado.Valor, RemuneracaoB.ValorAjustado.Valor);
        }
        public RegraDeRemuneracaoBD(TipoDeRegraBD tipo, IRegraDeRemuneracao regra) : this()
        {
            Vigencia = new PeriodoSimples(regra.Vigencia.Inicio.Date, regra.Vigencia.Fim.Date);

            Id         = regra.Id;
            IdContrato = regra.Parametros.IdContrato;
            Nome       = regra.NomePrincipal;
            this.tipo  = tipo.Id;
        }
예제 #3
0
        public async Task <int> InserirAsync(IRegraDeRemuneracao modelo)
        {
            var tipoDaRegra            = TipoDeRegraBD.Get(modelo.Tipo.Id);
            RegraDeRemuneracaoBD regra = tipoDaRegra.ConverteDe(modelo);

            using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao))
            {
                EntityEntry <RegraDeRemuneracaoBD> insertedObject = await context.Regras.AddAsync(regra);

                await context.SaveChangesAsync();

                return(insertedObject.Entity.Id);
            }
        }
예제 #4
0
 public Remuneracao(int id, Dinheiro valorARemunerar, int iDFavorecido, Competencia competencia,
                    Vinculacao vinculacao, DateTime dataDaEntrega, bool foiFechada, string nomeFavorecido = null
                    , IRegraDeRemuneracao regraGeradora = null)
 {
     Id                   = id;
     ValorAjustado        = valorARemunerar;
     IdFavorecido         = iDFavorecido;
     CompetenciaDaEntrega = competencia;
     RegraGeradora        = regraGeradora;
     Vinculacao           = vinculacao;
     DataDaEntrega        = dataDaEntrega;
     FoiFechada           = foiFechada;
     NomeFavorecido       = nomeFavorecido;
 }
예제 #5
0
        public async Task <IActionResult> GetObtemAsync(int id)
        {
            //context = await ConfiguraGerenciador(context);
            IRegraDeRemuneracao regra = null;

            try
            {
                regra = await _gerenciadorDeRequisicoes.RequisicaoObtemRegraAsync(id);
            }
            catch (Exception ex)
            {
                return(BadRequest(ex));
            }

            return(Ok(regra));
        }
        public RegraDeRemuneracaoBD ConverterDe(IRegraDeRemuneracao regra)
        {
            if (!(regra is RegraPorHora))
            {
                throw new ArgumentException("Este conversor converte apenas regras por hora");
            }

            var regraPorHora = regra as RegraPorHora;

            RegraDeRemuneracaoBD regraConvertida = new RegraDeRemuneracaoBD(TipoDeRegraBD.Hora, regra);

            regraConvertida.Percentual         = regraPorHora.PercentualARemunerar;
            regraConvertida.PercentualDesconto = regraPorHora.PercentualDesconto;
            regraConvertida.Parametros         = JsonConvert.SerializeObject(regra.Parametros.ParametrosExtras);

            return(regraConvertida);
        }
예제 #7
0
        public Remuneracao(IEntregaPreProcessada entrega, IRegraDeRemuneracao regra, Vinculacao historicoDeVinculacao, Dinheiro valorARemunerar)
        {
            if (entrega is IHoraRecebidaPreProcessada)
            {
                DataDoFaturamento        = ((IHoraRecebidaPreProcessada)entrega).Faturamento.DataFaturamento;
                CompetenciaDoFaturamento = new CompetenciaMensal(DataDoFaturamento);
            }

            IdFavorecido         = entrega.Beneficiario.Id;
            NomeFavorecido       = entrega.Beneficiario.Nome;
            ValorBruto           = valorARemunerar;
            Vinculacao           = historicoDeVinculacao;
            RegraGeradora        = regra;
            DataDaEntrega        = entrega.DataDaEfetivacao;
            CompetenciaDaEntrega = new CompetenciaMensal(entrega.DataDaEfetivacao);
            IdEntrega            = entrega.Id;
            TipoDaEntrega        = entrega.Tipo;
        }
예제 #8
0
        public RegraDeRemuneracaoBD ConverterDe(IRegraDeRemuneracao regra)
        {
            if (!(regra is RegraFixaPorValor))
            {
                throw new ArgumentException("Este conversor converte apenas regras fixas");
            }

            var regraPorHora = regra as RegraFixaPorValor;

            RegraDeRemuneracaoBD regraConvertida = new RegraDeRemuneracaoBD(TipoDeRegraBD.Fixa, regra);

            regraConvertida.Parametros = JsonConvert.SerializeObject(regra.Parametros.ParametrosExtras);

            if (regraConvertida.Vigencia != null)
            {
                regraConvertida.Vigencia = new PeriodoSimples(regraConvertida.Vigencia.Inicio.Date, regraConvertida.Vigencia.Fim.Date);
            }

            return(regraConvertida);
        }
        public void Deve_Remunerar_Favorecido_Conforme_Tabela()
        {
            //Arrange
            Profissional   favorecido               = LOMock.GeraProfissionalMock(id: 1, categoria: new Categoria(), nome: "LeMock");
            IFavorecimento favorecimento            = LOMock.GeraFavorecimentoMock(new[] { favorecido });
            var            valorHora                = new Dinheiro(valor: 100M, moeda: Moeda.Real);
            Mock <ITabelaDePreco <int> > tabelaMock = GeraTabelaMock(valorHora);

            ParametrosDeRegraDeRemuneracao parametrosRegra = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock(percentual: 100M);

            IRegraDeRemuneracao       regra   = LOMock.ConstroiRegraPorHora(parametrosRegra, favorecimento, tabelaMock.Object);
            Mock <IHoraPreProcessada> entrega = ConfiguraMockEntregaRemuneravel(5, favorecido);

            //Act
            IEnumerable <IRemuneracao> remuneracoes = regra.CalculaRemuneracoes((new IEntregaPreProcessada[] { entrega.Object }));
            IRemuneracao Remuneracao = remuneracoes.First();

            //Assert
            Assert.AreEqual(favorecido.Id, Remuneracao.IdFavorecido);
            Assert.AreEqual(5 * valorHora.Valor, Remuneracao.ValorAjustado.Valor);
        }
        public void Nao_Remunerar_Entregas_De_Funcionarios_Que_Nao_Sao_Favorecidos()
        {
            //Arrange
            Profissional   favorecido               = LOMock.GeraProfissionalMock(id: 1, categoria: new Categoria(), nome: "LeMock");
            IFavorecimento favorecimento            = LOMock.GeraFavorecimentoMock(new[] { favorecido });
            Profissional   naoFavorecido            = LOMock.GeraProfissionalMock(id: 2, categoria: new Categoria(), nome: "LeNaoMock");
            var            valorHora                = new Dinheiro(valor: 100M, moeda: Moeda.Real);
            Mock <ITabelaDePreco <int> > tabelaMock = GeraTabelaMock(valorHora);

            var parametrosRegra = LOMock.GeraParametrosDeRegraDeRemuneracaoPorHoraMock();
            Mock <IHoraPreProcessada> entregaDeFavorecido    = ConfiguraMockEntregaRemuneravel(5, favorecido);
            Mock <IHoraPreProcessada> entregaDeNaoFavorecido = ConfiguraMockEntregaRemuneravel(5, naoFavorecido);

            IRegraDeRemuneracao regra = LOMock.ConstroiRegraPorHora(parametrosRegra, favorecimento, tabelaMock.Object);
            //Act
            IEnumerable <IRemuneracao> remuneracoes = regra.CalculaRemuneracoes(new IEntregaPreProcessada[] { entregaDeFavorecido.Object, entregaDeNaoFavorecido.Object });


            //Assert
            Assert.That(remuneracoes.Select(rem => rem.IdFavorecido), Has.No.Member(naoFavorecido.Id));
        }
예제 #11
0
 public RegraDeRemuneracaoBD ConverteDe(IRegraDeRemuneracao regra)
 {
     return(Conversor.ConverterDe(regra));
 }