private LogRepasse AdicionarLogRepasse(int idRepasse, int idStatus, string motivo)
        {
            LogRepasse log = new LogRepasse
            {
                Id              = 0,
                IdRepasse       = idRepasse,
                IdStatusRepasse = idStatus,
                Descricao       = motivo,
            };

            _logRepasseRepository.Adicionar(log);
            return(log);
        }
        private void AtualizarRepasseQuandoAprovandoOuNegando(AprovarRepasseDto aprovarRepasseDto, RepasseNivelUm repasseNivelUm)
        {
            repasseNivelUm.Usuario = aprovarRepasseDto.Usuario;
            repasseNivelUm.Status  = aprovarRepasseDto.Status;

            LogRepasse log = new LogRepasse
            {
                IdStatusRepasse = repasseNivelUm.Status == StatusRepasseEacesso.NEGADO.GetDescription()
                    ? _dominioRepository.Buscar(x => x.DescricaoValor.Equals(StatusRepasseEacesso.NEGADO.GetDescription())).FirstOrDefault().Id
                    : _dominioRepository.Buscar(x => x.DescricaoValor.Equals(StatusRepasseEacesso.APROVADO_NIVEL_UM.GetDescription())).FirstOrDefault().Id,
                Descricao = repasseNivelUm.Status == StatusRepasseEacesso.NEGADO.GetDescription()
                    ? aprovarRepasseDto.Motivo
                    : string.Empty,
                DataAlteracao = DateTime.Now,
                Usuario       = repasseNivelUm.Usuario
            };

            repasseNivelUm.MotivoNegacao = repasseNivelUm.Status == StatusRepasseEacesso.NEGADO.GetDescription() ? aprovarRepasseDto.Motivo : null;
            repasseNivelUm.LogsRepasse.Add(log);

            if (aprovarRepasseDto.Status == StatusRepasseEacesso.APROVADO_NIVEL_DOIS.GetDescription() &&
                !CelulaDestinoPagadoraExterior(repasseNivelUm.IdCelulaDestino))
            {
                int idDominioRepasseAprovadoNivelDois = _dominioRepository.Buscar((int)StatusRepasseEacesso.APROVADO_NIVEL_DOIS, StatusRepasseEacesso.VL_TIPO_DOMINIO.GetDescription()).Id;
                log = new LogRepasse
                {
                    Id              = 0,
                    IdRepasse       = repasseNivelUm.Id,
                    IdStatusRepasse = idDominioRepasseAprovadoNivelDois,
                    Descricao       = string.Empty,
                    DataAlteracao   = DateTime.Now,
                    Usuario         = repasseNivelUm.Usuario
                };

                repasseNivelUm.LogsRepasse.Add(log);
            }

            _repasseNivelUmRepository.Update(repasseNivelUm);
            _unitOfWork.Commit();
        }
        public void RealizarMigracaoRepasseEacesso()
        {
            var repasses       = _repasseRepository.BuscarTodosMigracaoRepasse();
            var repasseSTFCORP = _repasseNivelUmRepository.BuscarTodos();

            List <RepasseNivelUm> repasseNivelUmLista = new List <RepasseNivelUm>();

            var periodoVigente = _periodoRepasseService.BuscarPeriodoVigente();

            var countAdd   = 0;
            var countTotal = 0;

            repasses.ForEach(r =>
            {
                var clienteOrigiem = obterNomeCliente(r.IdClienteOrigem);
                var clienteDestino = _clienteRepository.BuscarPorId(r.IdClienteDestino).NomeFantasia;

                var servicoOrigiem = obterNomeServico(r.IdServicoOrigem);
                var servicoDestino = _clienteServicoRepository.BuscarPorId(r.IdServicoDestino).Nome;

                var nomeProficiional = obterNomeProfissional(r.IdProfissional);


                var repasseNivelUm = new RepasseNivelUm
                {
                    IdClienteOrigem        = r.IdClienteOrigem.GetValueOrDefault(),
                    IdClienteDestino       = r.IdClienteDestino,
                    IdCelulaDestino        = r.IdCelulaDestino,
                    DataRepasse            = r.DataRepasse,
                    DescricaoProjeto       = r.DescricaoProjeto,
                    IdCelulaOrigem         = r.IdCelulaOrigem,
                    IdEpm                  = 0,//Não mapeado
                    IdMoeda                = r.IdMoeda,
                    IdOrigem               = r.IdOrigem,
                    IdProfissional         = r.IdProfissional,
                    IdRepasseEacesso       = r.Id,
                    IdRepasseMaeEAcesso    = r.IdRepasseMae,
                    IdServicoDestino       = r.IdServicoDestino,
                    IdServicoOrigem        = r.IdServicoOrigem.GetValueOrDefault(),
                    Justificativa          = r.Justificativa,
                    MotivoNegacao          = r.MotivoNegacao,
                    NomeClienteDestino     = clienteDestino,
                    NomeClienteOrigem      = clienteOrigiem,
                    NomeProfissional       = nomeProficiional,
                    NomeServicoDestino     = servicoDestino,
                    NomeServicoOrigem      = servicoOrigiem,
                    QuantidadeItens        = (int)r.QuantidadeItens,
                    RepasseInterno         = false, //não mapeado
                    Status                 = r.Status,
                    ValorCustoProfissional = r.ValorCustoProfissional,
                    ValorTotal             = r.ValorTotal,
                    ValorUnitario          = r.ValorUnitario,
                    DataAlteracao          = DateTime.Now,
                    Usuario                = "STFCORP"
                };


                //TODO IMPLEMENATAR e TESTAR
                LogRepasse log = new LogRepasse
                {
                    IdStatusRepasse = 4849,
                    Descricao       = SharedEnuns.StatusRepasseEacesso.NAO_ANALISADO.GetDescription(),
                    DataAlteracao   = repasseNivelUm.DataAlteracao,
                    Usuario         = repasseNivelUm.Usuario
                };

                repasseNivelUm.LogsRepasse.Add(log);

                repasseNivelUmLista.Add(repasseNivelUm);

                countAdd++;
                countTotal++;
                bool encontrado = false;

                if (countAdd == 100 || repasses.Count == countAdd)
                {
                    _repasseNivelUmRepository.AdicionarRange(repasseNivelUmLista);

                    foreach (var repasse in repasseSTFCORP)
                    {
                        if (repasseNivelUm.IdRepasseEacesso == repasse.IdRepasseEacesso)
                        {
                            encontrado = true;
                        }
                    }

                    if (!encontrado)
                    {
                        _unitOfWork.Commit();
                    }
                    else
                    {
                        encontrado = false;
                    }

                    countAdd            = 0;
                    repasseNivelUmLista = new List <RepasseNivelUm>();
                }
                ;
            });
        }