Generar ZIP

This commit is contained in:
Mauricio Baeza 2017-10-15 18:57:25 -05:00
parent 09e3b46eca
commit 28bb6a74d1
3 changed files with 35 additions and 0 deletions

View File

@ -14,6 +14,8 @@ import tempfile
import time
import unicodedata
import uuid
import zipfile
from io import BytesIO
from xml.etree import ElementTree as ET
import uno
@ -913,3 +915,14 @@ def get_data(invoice, rfc, values):
data['timbre'] = _timbre(doc, version, options)
return path, data
def to_zip(*files):
zip_buffer = BytesIO()
with zipfile.ZipFile(zip_buffer, 'a', zipfile.ZIP_DEFLATED, False) as zip_file:
for data, file_name in files:
zip_file.writestr(file_name, data)
return zip_buffer.getvalue()

View File

@ -122,5 +122,8 @@ class StorageEngine(object):
if type_doc == 'pdf':
data, file_name = main.Facturas.get_pdf(id, rfc)
content_type = 'application/pdf'
if type_doc == 'zip':
data, file_name = main.Facturas.get_zip(id, rfc)
content_type = 'application/octet-stream'
return data, file_name, content_type

View File

@ -1040,6 +1040,25 @@ class Facturas(BaseModel):
doc = util.to_pdf(path, data)
return doc, name
@classmethod
def get_zip(cls, id, rfc):
obj = Facturas.get(Facturas.id==id)
name_zip = '{}{}_{}.zip'.format(obj.serie, obj.folio, obj.cliente.rfc)
if obj.uuid is None:
return b'', name_zip
file_xml = cls.get_xml(id)
if not file_xml[0]:
return b'', name_zip
file_pdf = cls.get_pdf(id, rfc)
if not file_pdf[0]:
return b'', name_zip
file_zip = util.to_zip(file_xml, file_pdf)
return file_zip, name_zip
@classmethod
def get_(cls, values):
rows = tuple(Facturas