From fc997632866b653d95785b2693d3fe75f8502bd2 Mon Sep 17 00:00:00 2001 From: ulyssesBML Date: Fri, 25 Oct 2019 11:58:01 -0300 Subject: [PATCH] Colocando etiqueta de protocolo em texto original de materia legisativa Fix #2997 --- requirements/requirements.txt | 3 ++- sapl/materia/forms.py | 30 ++++++++++++++++++++++++++++++ sapl/relatorios/views.py | 26 +++++++++++++++----------- 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 93cb12778..1fbde2d07 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -34,7 +34,8 @@ celery-haystack==0.10 redis>=2.10.5,<2.11 django-celery-results==1.0.4 Whoosh==2.7.4 - +pdf2image==1.9.0 +PyMuPDF==1.16.5 pysolr==3.6.0 diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 4cf2d5314..6bd849c0d 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -53,6 +53,12 @@ from .models import (AcompanhamentoMateria, Anexada, Autoria, DespachoInicial, DocumentoAcessorio, Numeracao, Proposicao, Relatoria, TipoMateriaLegislativa, Tramitacao, UnidadeTramitacao) +from shutil import move +import fitz +from pdf2image import convert_from_bytes +from io import BytesIO +import tempfile +from PIL.Image import FLIP_TOP_BOTTOM def CHOICE_TRAMITACAO(): @@ -260,6 +266,8 @@ class MateriaLegislativaForm(FileFieldCheckMixin, ModelForm): return cleaned_data def save(self, commit=False): + from sapl.relatorios.views import gera_etiqueta_protocolo + if not self.instance.pk: primeiro_autor = True else: @@ -268,6 +276,28 @@ class MateriaLegislativaForm(FileFieldCheckMixin, ModelForm): materia = super(MateriaLegislativaForm, self).save(commit) materia.save() + if self.instance.numero_protocolo and self.instance.texto_original: + with tempfile.TemporaryDirectory() as tmp_dir: + input_file = self.instance.texto_original.path[:-4]+"_original.pdf" + output_file = "{}/{}.pdf".format(tmp_dir, self.instance.id) + move(self.instance.texto_original.path, input_file) + + etiqueta = gera_etiqueta_protocolo(self.instance.numero_protocolo, self.instance.ano) + + img = convert_from_bytes(etiqueta) + + aux_binary = BytesIO() + barcode_file = img[0].transpose(FLIP_TOP_BOTTOM).save(aux_binary,format="JPEG") + + image_rectangle = fitz.Rect(500,600,800,900) + file_handle = fitz.open(input_file) + first_page = file_handle[0] + first_page.insertImage(image_rectangle, stream=aux_binary.getvalue(),rotate=270,keep_proportion=False) + + file_handle.save(output_file) + move(output_file, self.instance.texto_original.path) + + if self.cleaned_data['autor']: autoria = Autoria() autoria.primeiro_autor = primeiro_autor diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index 4acc80ba0..b3cfebc05 100755 --- a/sapl/relatorios/views.py +++ b/sapl/relatorios/views.py @@ -1055,17 +1055,7 @@ def relatorio_protocolo(request): return response - -def relatorio_etiqueta_protocolo(request, nro, ano): - ''' - pdf_etiqueta_protocolo_gerar.py - ''' - - response = HttpResponse(content_type='application/pdf') - response[ - 'Content-Disposition'] = ( - 'inline; filename="relatorio_etiqueta_protocolo.pdf"') - +def gera_etiqueta_protocolo(nro, ano): casa = CasaLegislativa.objects.first() cabecalho = get_cabecalho(casa) @@ -1080,6 +1070,20 @@ def relatorio_etiqueta_protocolo(request, nro, ano): protocolo_data, cabecalho, rodape) + + return pdf + +def relatorio_etiqueta_protocolo(request, nro, ano): + ''' + pdf_etiqueta_protocolo_gerar.py + ''' + + response = HttpResponse(content_type='application/pdf') + response[ + 'Content-Disposition'] = ( + 'inline; filename="relatorio_etiqueta_protocolo.pdf"') + + pdf = gera_etiqueta_protocolo(nro,ano) response.write(pdf)