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)); }
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)); }
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); }
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); } }
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); }
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"); }