From 3e3c4be720508300daaafb76263a6f6dc518ce55 Mon Sep 17 00:00:00 2001 From: Mauricio Baeza Date: Wed, 7 Mar 2018 23:24:35 -0600 Subject: [PATCH] Fix - Issue #157 --- source/app/controllers/util.py | 6 +++- source/app/models/db.py | 2 +- source/app/models/main.py | 39 ++++++++++++++++++++++++-- source/static/js/controller/tickets.js | 2 +- 4 files changed, 43 insertions(+), 6 deletions(-) diff --git a/source/app/controllers/util.py b/source/app/controllers/util.py index f3d582f..2a32b14 100644 --- a/source/app/controllers/util.py +++ b/source/app/controllers/util.py @@ -1109,7 +1109,7 @@ class LIBO(object): def pdf(self, path, data, ods=False): options = {'AsTemplate': True, 'Hidden': True} - log.info('Abrir plantilla...') + log.debug('Abrir plantilla...') self._template = self._doc_open(path, options) if self._template is None: return b'' @@ -1844,6 +1844,10 @@ def send_mail(data): return {'ok': is_connect, 'msg': msg} +def exists(path): + return os.path.exists(path) + + def get_path_info(path): path, filename = os.path.split(path) name, extension = os.path.splitext(filename) diff --git a/source/app/models/db.py b/source/app/models/db.py index 201d503..00176ca 100644 --- a/source/app/models/db.py +++ b/source/app/models/db.py @@ -372,7 +372,7 @@ class StorageEngine(object): return main.PreFacturas.get_(values) def _get_timbrar(self, values): - return main.Facturas.timbrar(int(values['id'])) + return main.Facturas.timbrar(values) def _get_anticipoegreso(self, values): return main.Facturas.anticipo_egreso(int(values['id'])) diff --git a/source/app/models/main.py b/source/app/models/main.py index 1edfc31..31c09d8 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -3090,6 +3090,7 @@ class Productos(BaseModel): 'descripcion': obj.descripcion, 'unidad': obj.unidad.name, 'valor_unitario': obj.valor_unitario, + 'existencia': obj.existencia, } data = {'ok': True, 'row': row, 'new': False} return data @@ -3210,6 +3211,7 @@ class Facturas(BaseModel): obj.fecha_cancelacion = result['Fecha'] obj.acuse = result['Acuse'] self._actualizar_saldo_cliente(self, obj, True) + self._update_inventory(self, obj, True) else: obj.error = data['msg'] obj.save() @@ -4156,8 +4158,26 @@ class Facturas(BaseModel): } return + @util.run_in_thread + def _update_inventory(self, invoice, cancel=False): + if invoice.tipo_comprobante != 'I': + return + + products = FacturasDetalle.get_by_invoice(invoice.id) + for p in products: + if p.producto.inventario: + if cancel: + p.producto.existencia += Decimal(p.cantidad) + else: + p.producto.existencia -= Decimal(p.cantidad) + p.producto.save() + return + @classmethod - def timbrar(cls, id): + def timbrar(cls, values): + id = int(values['id']) + update = util.loads(values.get('update', 'true')) + auth = Emisor.get_auth() obj = Facturas.get(Facturas.id == id) obj.xml = cls._make_xml(cls, obj, auth) @@ -4169,7 +4189,6 @@ class Facturas(BaseModel): anticipo = False msg = 'Factura timbrada correctamente' result = util.timbra_xml(obj.xml, auth) - # ~ print (result) if result['ok']: obj.xml = result['xml'] obj.uuid = result['uuid'] @@ -4183,6 +4202,8 @@ class Facturas(BaseModel): if obj.tipo_comprobante == 'I' and obj.tipo_relacion == '07': anticipo = True cls._actualizar_saldo_cliente(cls, obj) + if update: + cls._update_inventory(cls, obj) cls._sync(cls, id, auth) else: msg = result['error'] @@ -4859,6 +4880,10 @@ class FacturasDetalle(BaseModel): .where(model_pt.productos_id==id).dicts()) return impuestos + @classmethod + def get_by_invoice(cls, id): + return FacturasDetalle.select().where(FacturasDetalle.factura==id) + @classmethod def reinvoice(cls, id): data = [] @@ -8089,8 +8114,16 @@ def _exportar_documentos(): msg = 'Extrayendo factura {} de {}: {}-{}'.format( i+1, t, row['serie'], row['folio']) log.info(msg) - Facturas.get_xml(row['id']) + _, name = Facturas.get_xml(row['id']) + msg = '\tXML extraido...' + log.info(msg) + # ~ name = name[:-3] + 'pdf' + # ~ path = '/home/mau/facturas/{}/{}/{}/{}'.format(rfc, year, month, name) + # ~ if util.exists(path): + # ~ continue Facturas.get_pdf(row['id'], rfc, True) + msg = '\tPDF generado...' + log.info(msg) log.info('Documentos exportados...') return diff --git a/source/static/js/controller/tickets.js b/source/static/js/controller/tickets.js index 6c228f2..113a345 100644 --- a/source/static/js/controller/tickets.js +++ b/source/static/js/controller/tickets.js @@ -521,7 +521,7 @@ function chk_is_invoice_day_change(new_value, old_value){ function send_timbrar_invoice(id){ - webix.ajax().get('/values/timbrar', {id: id}, function(text, data){ + webix.ajax().get('/values/timbrar', {id: id, update: false}, function(text, data){ var values = data.json() if(values.ok){ msg_ok(values.msg)