public EntregaDeHoraRecebida ConverterDe(EntregaDeHorasRecebidasBD entrega)
        {
            EntregaDeHoraRecebida entregaHora = new EntregaDeHoraRecebida()
            {
                Id = entrega.Id,
                DataDaEfetivacao     = entrega.DataDaEfetivacao,
                Executor             = new Profissional(entrega.IdFuncionario, null, null),
                Vinculacao           = entrega.Vinculacao,
                PercentualDisponivel = entrega.Percentual,
                QuantidadeDeMinutos  = entrega.QtdtMinutos,
                Procedimentos        = entrega.Procedimentos == null ?  new List <ProcedimentoBD>().Select(proc => proc.ConverteParaModelo()).ToArray() : entrega.Procedimentos.Select(proc => proc.ConverteParaModelo()).ToArray(),
                //Competencia = _gerenciadorFinanceiro.ConverteStringEmCompetenciasAsync(new string[] { entrega.Competencia.ToString() }).Result.First(),

                //instanciar objetos
                Categoria = new Categoria()
                {
                    IdCategoria = entrega.IdCategoria
                },
                //Faturamento = ConverterDe(entrega.Faturamento),
                //IdRecebimento = new Recebimento(){},
                IdTabelaPreco = entrega.IdTabelaPreco,
                TipoDeEvento  = entrega.TipoDeEvento,
                valorHora     = entrega.valorHora,
                valorRecebido = entrega.valorRecebido
            };


            return(entregaHora);
        }
        //private IGerenciadorDeRequisicoesFinanceiras _gerenciadorFinanceiro;

        //public ConversorDeEntregaDeHoraRecebida(IGerenciadorDeRequisicoesFinanceiras gerenciadorFinanceiro)
        //{
        //    _gerenciadorFinanceiro = gerenciadorFinanceiro;
        //}

        public IEntregaBD ConverteDe(IEntrega entrega)
        {
            if (!(entrega is EntregaDeHoraRecebida))
            {
                throw new ArgumentException("Necessário entrada de regras por hora recebida para este conversor");
            }

            EntregaDeHorasRecebidasBD entregaConvertida = new EntregaDeHorasRecebidasBD(TipoDeEntregaModeloBD.HoraRecebida);
            EntregaDeHoraRecebida     entragaHora       = entrega as EntregaDeHoraRecebida;

            entregaConvertida.Id = entragaHora.Id;

            entregaConvertida.DataDaEfetivacao = entragaHora.DataDaEfetivacao;

            throw new NotImplementedException();

            return(entregaConvertida);
        }
 public HoraRecebidaProcessada(EntregaDeHoraRecebida entrega, Decimal percentualPermitido, DateTime dataDeEfetivacao, Competencia competencia)
 {
     Id                    = entrega.Id;
     Beneficiario          = entrega.Executor;
     PercentualRemuneravel = percentualPermitido;
     DataDaEfetivacao      = dataDeEfetivacao;
     Vinculacao            = entrega.Vinculacao;
     QuantidadeDeMinutos   = entrega.QuantidadeDeMinutos;
     CompetenciaDaEntrega  = competencia;
     IdTabelaPreco         = entrega.IdTabelaPreco;
     valorHora             = entrega.valorHora;
     Categoria             = entrega.Categoria;
     HistoricoPagamento    = entrega.HistoricoPagamento;
     IdHistoricoPagamento  = entrega.IdHistoricoPagamento;
     Faturamento           = entrega.Faturamento;
     Recebimento           = entrega.Recebimento;
     ValorMaximoRegra      = entrega.ValorMaximoRegra;
     ValorMinimoRegra      = entrega.ValorMinimoRegra;
 }
        public IEntrega ConverteParaEntrega(IEntregaBD entregaModeloBanco)
        {
            //Em regra tem ParametrosDeRegraDeRemuneracaoPorHora, criado a partir do argumento do método, provavelmente será assim com entrega também
            if (entregaModeloBanco is EntregaDeHorasRecebidasBD)
            {
                EntregaDeHorasRecebidasBD entregaDeHorasDoBanco = (EntregaDeHorasRecebidasBD)entregaModeloBanco;

                EntregaDeHoraRecebida entregaHora = new EntregaDeHoraRecebida()
                {
                    Id = entregaDeHorasDoBanco.Id,
                    DataDaEfetivacao     = entregaDeHorasDoBanco.DataDaEfetivacao,
                    Executor             = new Profissional(entregaDeHorasDoBanco.IdFuncionario, null, null),
                    Vinculacao           = entregaDeHorasDoBanco.Vinculacao,
                    PercentualDisponivel = entregaDeHorasDoBanco.Percentual,
                    QuantidadeDeMinutos  = entregaDeHorasDoBanco.QtdtMinutos,
                    Procedimentos        = entregaDeHorasDoBanco.Procedimentos == null ? new List <ProcedimentoBD>().Select(proc => proc.ConverteParaModelo()).ToArray() : entregaDeHorasDoBanco.Procedimentos.Select(proc => proc.ConverteParaModelo()).ToArray(),
                    //Competencia = _gerenciadorFinanceiro.ConverteStringEmCompetenciasAsync(new string[] { entregaDeHorasDoBanco.Competencia.ToString() }).Result.First(),
                    Categoria = new Categoria()
                    {
                        IdCategoria = entregaDeHorasDoBanco.IdCategoria
                    },
                    Faturamento = ConverterDe(entregaDeHorasDoBanco.Faturamento),
                    Recebimento = new Recebimento()
                    {
                        IdRecebimento = entregaDeHorasDoBanco.IdRecebimento, ValorRecebido = entregaDeHorasDoBanco.valorRecebido
                    },
                    IdTabelaPreco        = entregaDeHorasDoBanco.IdTabelaPreco,
                    TipoDeEvento         = entregaDeHorasDoBanco.TipoDeEvento,
                    HistoricoPagamento   = entregaDeHorasDoBanco.HistoricoPagamento,
                    IdHistoricoPagamento = entregaDeHorasDoBanco.IdHistoricoPagamento,
                    valorHora            = entregaDeHorasDoBanco.valorHora,
                    valorRecebido        = entregaDeHorasDoBanco.valorRecebido,
                    ValorMaximoRegra     = entregaDeHorasDoBanco.ValorMaximoRegra,
                    ValorMinimoRegra     = entregaDeHorasDoBanco.ValorMinimoRegra
                };

                return(entregaHora);
            }
            throw new InvalidOperationException("Conversão de entrega de horas recebida chamada para converter entrega que não é de horas recebidas");
        }
        protected virtual IEnumerable <IEntregaPreProcessada> ConverteEntregaEmRemuneravel(EntregaDeHoraRecebida entrega)
        {
            IEnumerable <IEntregaPreProcessada> remuneraveis = entrega.Procedimentos.Select((proc) =>
            {
                decimal percentualPermitido       = 100.0M;
                IEnumerable <decimal> percentuais = ObtemModificacoesDasAcoesFeitasNoProcedimento(proc);

                percentualPermitido = proc.PercentualPermitido * (percentuais.Sum(p => p / 100.0M));

                IEntregaPreProcessada remuneravel = entrega.Tipo.CriarEntregaPreProcessada(entrega, percentualPermitido, proc.DataDaOcorrencia, entrega.Competencia);

                remuneravel.Vinculacao.Adicionar(new Vinculo(Constantes.HISTORICO_TIPO_PROCEDIMENTO, proc.Id, proc.Tipo.ToString()));

                return(remuneravel);
            });

            var remun = remuneraveis.ToList();

            return(remuneraveis);
        }