public void Executar(AcaoDeSeparacao acao, LoteParaSeparacaoViewModel loteParaSeparacao)
        {
            var novoDocumentoId = this.ObterDocumentoDaPagina(acao.PrimeiraPagina, loteParaSeparacao);

            var pagina            = this.paginaRepositorio.ObterPorId(acao.PrimeiraPagina);
            var documentoAnterior = this.documentoRepositorio.ObterPorId(pagina.Documento.Id);

            var novoDocumento = documentoAnterior.Id == novoDocumentoId ?
                                documentoAnterior :
                                this.documentoRepositorio.ObterPorId(novoDocumentoId);

            if (novoDocumento.TipoDocumento.Id == TipoDocumento.CodigoDocumentoGeral)
            {
                novoDocumentoId = loteParaSeparacao.ObterDocumentoDaPagina(pagina.Id).Id;
                novoDocumento   = this.documentoRepositorio.ObterPorId(novoDocumentoId);
            }

            pagina.Status    = PaginaStatus.StatusParaReconhecimento;
            pagina.Documento = novoDocumento;
            this.paginaRepositorio.Salvar(pagina);

            this.MarcaDocumentoAlterado(novoDocumento, loteParaSeparacao);

            if (documentoAnterior.Id != novoDocumento.Id)
            {
                this.MarcaDocumentoAlterado(documentoAnterior, loteParaSeparacao);
            }

            this.gravaLogDoDocumentoServico.Executar(
                LogDocumento.AcaoPaginaRessucitada,
                pagina.Documento.Id,
                string.Format("Página {0} foi ressucitada na separação manual. Doc anterior #{1}", pagina.Id, documentoAnterior.Id));
        }
示例#2
0
        public static IList <AcaoDeSeparacao> MontarLista(string textoDeAcoes)
        {
            var lista  = new List <AcaoDeSeparacao>();
            var linhas = textoDeAcoes.Split('|');

            foreach (var linha in linhas.Where(x => string.IsNullOrEmpty(x) == false))
            {
                var colunas = linha.Split(';');

                var acao = new AcaoDeSeparacao
                {
                    Id                 = lista.Count,
                    Tipo               = colunas[0],
                    NovoDocumentoId    = colunas[1].ToInt(),
                    TipoDocumentoId    = colunas[2].ToInt(),
                    TextoDePaginas     = colunas[3],
                    LoteId             = colunas[4].ToInt(),
                    NovoDocumentoOrdem = colunas[5].ToInt()
                };

                if (string.IsNullOrEmpty(acao.TextoDePaginas) == false)
                {
                    acao.Paginas        = acao.TextoDePaginas.ToIntList(',');
                    acao.PrimeiraPagina = acao.Paginas.FirstOrDefault();
                }

                lista.Add(acao);
            }

            return(lista);
        }
        public void Executar(AcaoDeSeparacao acao, LoteParaSeparacaoViewModel loteParaSeparacao)
        {
            var documentacaoGeral = this.documentoRepositorio
                                    .ObterPorProcessoETipo(loteParaSeparacao.ProcessoId, TipoDocumento.CodigoDocumentoGeral)
                                    .FirstOrDefault();

            if (documentacaoGeral == null || documentacaoGeral.Id < 1)
            {
                return;
            }

            var pagina            = this.paginaRepositorio.ObterPorId(acao.PrimeiraPagina);
            var documentoOriginal = this.documentoRepositorio.ObterPorId(pagina.Documento.Id);

            pagina.Status    = PaginaStatus.StatusExcluida;
            pagina.Documento = new Documento {
                Id = documentacaoGeral.Id
            };

            this.paginaRepositorio.Salvar(pagina);

            this.documentoRepositorio.AlterarMarca(documentoOriginal.Id, Documento.MarcaDeAlteradoNaSeparacao);
            ////this.documentoRepositorio.AlterarStatus(documentoOriginal.Id, DocumentoStatus.TransmissaoOk);
            loteParaSeparacao.MarcaDocumentoManipulado(documentoOriginal.Id);

            this.gravaLogDaPaginaServico.Executar(LogPagina.AcaoPaginaExcluida,
                                                  pagina.Id,
                                                  pagina.Documento.Id,
                                                  "Página removida na separação. MDoc Anterior #" + documentoOriginal.Id);

            this.gravaLogDoDocumentoServico.Executar(
                LogDocumento.AcaoPaginaRemovida,
                documentoOriginal.Id,
                string.Format("Página #{0} foi removida na separação manual", pagina.Id));
        }
示例#4
0
        private Documento CriarDocumento(AcaoDeSeparacao acao, LoteParaSeparacaoViewModel loteParaSeparacao)
        {
            var processo = new Processo
            {
                Id   = loteParaSeparacao.ProcessoId,
                Lote = new Lote {
                    Id = loteParaSeparacao.LoteId
                }
            };

            var tipoDocumento = new TipoDocumento {
                Id = acao.TipoDocumentoId
            };

            var documento = this.documentoFabrica.Criar(processo, tipoDocumento, "1");

            documento.Ordem  = acao.NovoDocumentoOrdem;
            documento.Marca  = Documento.MarcaDeCriadoNaSeparacao;
            documento.Versao = "0";
            ////documento.Status = ????
            this.documentoRepositorio.Salvar(documento);

            this.gravaLogDoDocumentoServico.Executar(
                LogDocumento.AcaoDocumentoCriadoNaSeparacao,
                documento.Id,
                "Documento criado na separação");

            return(documento);
        }
示例#5
0
        public void Executar(AcaoDeSeparacao acao, LoteParaSeparacaoViewModel loteParaSeparacao)
        {
            var documento = this.CriarDocumento(acao, loteParaSeparacao);

            loteParaSeparacao.Documentos.Add(DocumentoParaSeparacaoViewModel.Criar(documento));
            loteParaSeparacao.DocumentosNovos.Add(documento);

            this.SalvarPaginas(documento, acao, loteParaSeparacao);
        }
        public void Executar(AcaoDeSeparacao acao, LoteParaSeparacaoViewModel loteParaSeparacao)
        {
            var tipoDocumento = this.tipoDocumentoRepositorio.ObterPorId(acao.TipoDocumentoId);

            var documento = this.documentoRepositorio.ObterPorId(acao.NovoDocumentoId);

            this.Reclassificar(documento, tipoDocumento);

            var documentosFilhos = this.documentoRepositorio.ObterFilhos(documento.Lote.Id, documento.Id);

            foreach (var documentoFilho in documentosFilhos)
            {
                this.Reclassificar(documentoFilho, tipoDocumento);
            }
        }
示例#7
0
        private void SalvarPaginas(Documento documento, AcaoDeSeparacao acao, LoteParaSeparacaoViewModel loteParaSeparacao)
        {
            var listaDocumentacaoGeral = this.documentoRepositorio.ObterDocumentosDoLotePorTipo(documento.Lote.Id, TipoDocumento.CodigoDocumentoGeral).Select(x => x.Id).ToList();

            foreach (var paginaId in acao.Paginas)
            {
                var pagina            = this.paginaRepositorio.ObterPorId(paginaId);
                var documentoOriginal = this.documentoRepositorio.ObterPorId(pagina.Documento.Id);

                //// manda refazer o PDF do documento original, se for diferente de 27
                if (listaDocumentacaoGeral.Any(x => x == documentoOriginal.Id) == false)
                {
                    loteParaSeparacao.MarcaDocumentoManipulado(documentoOriginal.Id);
                }

                var paginaParaSeparacaoAtual = loteParaSeparacao.ObterPagina(paginaId).Status;
                var paginaEstavaExcluida     = paginaParaSeparacaoAtual == null ||
                                               loteParaSeparacao.ObterPagina(paginaId).Status == PaginaStatus.StatusExcluida;

                if ((documentoOriginal.TipoDocumento.Id == TipoDocumento.CodigoDocumentoGeral &&
                     documentoOriginal.Status == DocumentoStatus.Excluido) ||
                    paginaEstavaExcluida)
                {
                    pagina.Status = PaginaStatus.StatusExcluida;
                }

                pagina.Documento = documento;
                this.paginaRepositorio.Salvar(pagina);

                documento.Paginas.Add(pagina);

                this.documentoRepositorio.AlterarMarca(documentoOriginal.Id, Documento.MarcaDeAlteradoNaSeparacao);

                this.gravaLogDaPaginaServico.Executar(LogPagina.AcaoDocumentoCriadoNaSeparacao,
                                                      pagina.Id,
                                                      pagina.Documento.Id,
                                                      string.Format("Página movida para documento #{0}, documento anterior era #{1}", documento.Id, documentoOriginal.Id));

                loteParaSeparacao.ObterPagina(paginaId).NovoDocumentoId = documento.Id;
            }
        }
        private void ExecutarAcao(AcaoDeSeparacao acao, LoteParaSeparacaoViewModel loteParaSeparacao)
        {
            switch (acao.Tipo)
            {
            case AcaoDeSeparacao.RessuscitarPagina:
                this.ressuscitaPaginaNaSeparacaoServico.Executar(acao, loteParaSeparacao);
                break;

            case AcaoDeSeparacao.ExcluirPagina:
                this.excluiPaginaNaSeparacaoServico.Executar(acao, loteParaSeparacao);
                break;

            case AcaoDeSeparacao.NovoDocumento:
                this.criaDocumentoNaSeparacaoServico.Executar(acao, loteParaSeparacao);
                break;

            case AcaoDeSeparacao.ReclassificarDocumento:
                this.reclassificaDocumentoNaSeparacaoServico.Executar(acao, loteParaSeparacao);
                break;
            }
        }
        private bool IgnorarAcao(AcaoDeSeparacao acao, IEnumerable <AcaoDeSeparacao> acoes)
        {
            switch (acao.Tipo)
            {
            case AcaoDeSeparacao.RessuscitarPagina:

                return(acoes.Any(x =>
                                 x.PrimeiraPagina == acao.PrimeiraPagina &&
                                 acao.Tipo == AcaoDeSeparacao.ExcluirPagina &&
                                 x.Id > acao.Id));

            case AcaoDeSeparacao.ExcluirPagina:

                return(acoes.Any(x =>
                                 x.PrimeiraPagina == acao.PrimeiraPagina &&
                                 acao.Tipo == AcaoDeSeparacao.RessuscitarPagina &&
                                 x.Id > acao.Id));
            }

            return(false);
        }
示例#10
0
        public void Executar(int loteId, int processoId, string textoDeAcoes)
        {
            this.validaSePodeSalvarAjustesServico.Validar(processoId);

            var acoes = AcaoDeSeparacao.MontarLista(textoDeAcoes);

            if (acoes.Any() == false)
            {
                return;
            }

            var loteParaSeparacao = this.obtemLoteParaSeparacaoServico.Executar(processoId);

            var acoesOrdenadas = acoes.OrderBy(x => x.Id);

            foreach (var acao in acoesOrdenadas)
            {
                if (this.IgnorarAcao(acao, acoes))
                {
                    continue;
                }

                this.ExecutarAcao(acao, loteParaSeparacao);
            }

            if (acoes.Any(x => x.Tipo == AcaoDeSeparacao.NovoDocumento))
            {
                this.reordenarDocumentosServico.Executar(loteParaSeparacao);
            }

            this.removeDocumentosSemPaginaServico.Executar(loteParaSeparacao);
            this.documentoRepositorio.LimparFraudes(loteParaSeparacao.LoteId);
            this.documentoRepositorio.SetarExcluidoAjusteTemporario(loteId);
            this.removePdfSeparadoServico.Executar(loteParaSeparacao);

            this.loteRepositorio.AlterarStatus(loteId, LoteStatus.SetaReconhecimento);
            this.processoRepositorio.AlterarStatus(loteId, ProcessoStatus.AguardandoTransmissao);

            this.gravaLogDoLoteServico.Executar(LogLote.AcaoSeparacaoRealizada, loteId, "Lote foi salvo na separação");
        }