From ba4c3d9dbd5878a6b35a6a1c94a330acbb346108 Mon Sep 17 00:00:00 2001 From: Mauricio Baeza Date: Tue, 2 Jan 2018 01:37:52 -0600 Subject: [PATCH] Validar serie por usuario/sucursal --- source/app/controllers/main.py | 6 +++-- source/app/controllers/util.py | 1 - source/app/models/db.py | 11 ++++----- source/app/models/main.py | 41 +++++++++++++++++++++++++++------- source/app/settings.py | 1 + source/static/js/ui/tickets.js | 4 ++-- 6 files changed, 46 insertions(+), 18 deletions(-) diff --git a/source/app/controllers/main.py b/source/app/controllers/main.py index 940c5b2..32234dc 100644 --- a/source/app/controllers/main.py +++ b/source/app/controllers/main.py @@ -242,7 +242,8 @@ class AppInvoices(object): def on_post(self, req, resp): values = req.params - req.context['result'] = self._db.invoice(values) + session = req.env['beaker.session'] + req.context['result'] = self._db.invoice(values, session['userobj']) resp.status = falcon.HTTP_200 def on_delete(self, req, resp): @@ -288,7 +289,8 @@ class AppTickets(object): def on_post(self, req, resp): values = req.params - req.context['result'] = self._db.tickets(values) + session = req.env['beaker.session'] + req.context['result'] = self._db.tickets(values, session['userobj']) resp.status = falcon.HTTP_200 diff --git a/source/app/controllers/util.py b/source/app/controllers/util.py index 51455ef..fe4f161 100644 --- a/source/app/controllers/util.py +++ b/source/app/controllers/util.py @@ -923,7 +923,6 @@ def to_pdf(data, emisor_rfc): if data['donativo']: donativo = '_donativo' name = '{}_{}{}.ods'.format(rfc.lower(), version, donativo) - print (name) path = get_template_ods(name) if path: return app.pdf(path, data) diff --git a/source/app/models/db.py b/source/app/models/db.py index 5d741d8..2df0136 100644 --- a/source/app/models/db.py +++ b/source/app/models/db.py @@ -250,11 +250,12 @@ class StorageEngine(object): return main.Productos.actualizar(values, id) return main.Productos.add(values) - def invoice(self, values): + def invoice(self, values, user): id = int(values.pop('id', '0')) if id: return main.Facturas.actualizar(values, id) - return main.Facturas.add(values) + + return main.Facturas.add(values, user) def preinvoice(self, values): id = int(values.pop('id', '0')) @@ -262,14 +263,14 @@ class StorageEngine(object): #~ return main.PreFacturas.actualizar(values, id) return main.PreFacturas.add(values) - def tickets(self, values): + def tickets(self, values, user): opt = values.pop('opt') if opt == 'add': - return main.Tickets.add(values) + return main.Tickets.add(values, user) if opt == 'cancel': return main.Tickets.cancel(values) if opt == 'invoice': - return main.Tickets.invoice(values) + return main.Tickets.invoice(values, user) if opt == 'print': return main.Tickets.printer(values) diff --git a/source/app/models/main.py b/source/app/models/main.py index 756e617..ce2f15f 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -17,7 +17,7 @@ if __name__ == '__main__': from controllers import util from settings import log, VERSION, PATH_CP, COMPANIES, PRE, CURRENT_CFDI, \ INIT_VALUES, DEFAULT_PASSWORD, DECIMALES, IMPUESTOS, DEFAULT_SAT_PRODUCTO, \ - CANCEL_SIGNATURE, PUBLIC + CANCEL_SIGNATURE, PUBLIC, DEFAULT_SERIE_TICKET FORMAT = '{0:.2f}' @@ -792,6 +792,11 @@ class Folios(BaseModel): (('serie', 'inicio'), True), ) + @classmethod + def get_default(cls): + folio = Folios.select()[0] + return folio.serie + @classmethod def get_all(cls): rows = (Folios @@ -2936,13 +2941,21 @@ class Facturas(BaseModel): FacturasComplementos.create(**data) return + + def _get_serie(self, user, default_serie): + if user.sucursal is None: + return default_serie + + return user.sucursal.serie_facturas or default_serie + @classmethod - def add(cls, values): + def add(cls, values, user): productos = util.loads(values.pop('productos')) relacionados = util.loads(values.pop('relacionados')) ine = values.pop('ine', {}) emisor = Emisor.select()[0] + values['serie'] = cls._get_serie(cls, user, values['serie']) values['folio'] = cls._get_folio(cls, values['serie']) values['tipo_cambio'] = float(values['tipo_cambio']) values['lugar_expedicion'] = emisor.cp_expedicion or emisor.codigo_postal @@ -4053,10 +4066,23 @@ class Tickets(BaseModel): } return data + def _get_serie(self, user, invoice=False): + default_serie = DEFAULT_SERIE_TICKET + if invoice: + default_serie = Folios.get_default() + + if user.sucursal is None: + return default_serie + + if invoice: + return user.sucursal.serie_facturas or default_serie + else: + return user.sucursal.serie_tickets or default_serie + @classmethod - def add(cls, values): + def add(cls, values, user): productos = util.loads(values.pop('productos')) - values['serie'] = 'T' + values['serie'] = cls._get_serie(cls, user) values['folio'] = cls._get_folio(cls, values['serie']) with database_proxy.atomic() as txn: @@ -4099,8 +4125,7 @@ class Tickets(BaseModel): .where(Tickets.id.in_(tickets)) ) result = query.execute() - print (result) - return + return result def _calculate_totals_invoice(self, invoice, tickets): subtotal = 0 @@ -4186,7 +4211,7 @@ class Tickets(BaseModel): return data @classmethod - def invoice(cls, values): + def invoice(cls, values, user): is_invoice_day = util.get_bool(values['is_invoice_day']) id_client = int(values['client']) tickets = util.loads(values['tickets']) @@ -4207,7 +4232,7 @@ class Tickets(BaseModel): emisor = Emisor.select()[0] data = {} data['cliente'] = client - data['serie'] = 'T' + data['serie'] = cls._get_serie(cls, user, True) data['folio'] = cls._get_folio_invoice(cls, data['serie']) data['forma_pago'] = client.forma_pago.key data['tipo_cambio'] = 1.00 diff --git a/source/app/settings.py b/source/app/settings.py index c1298c4..37d027f 100644 --- a/source/app/settings.py +++ b/source/app/settings.py @@ -115,6 +115,7 @@ IMPUESTOS = { 'CEDULAR': '000', } DEFAULT_SAT_PRODUCTO = '01010101' +DEFAULT_SERIE_TICKET = 'T' DIR_FACTURAS = 'facturas' USAR_TOKEN = False CANCEL_SIGNATURE = False diff --git a/source/static/js/ui/tickets.js b/source/static/js/ui/tickets.js index d113e02..d094e2d 100644 --- a/source/static/js/ui/tickets.js +++ b/source/static/js/ui/tickets.js @@ -275,7 +275,7 @@ var grid_tickets_active_cols = [ {id: 'index', header: '#', adjust: 'data', css: 'right'}, {id: "id", header:"ID", hidden:true}, {id: "serie", header: ["Serie", {content: "selectFilter"}], adjust: "data", - sort: "string", hidden: true}, + sort: "string"}, {id: 'folio', header: ['Folio', {content: 'numberFilter'}], adjust: 'header', sort: 'int', css: 'right', footer: {content: 'countRows', css: 'right'}}, {id: "fecha", header: ["Fecha y Hora"], adjust: "data", sort: "string", @@ -310,7 +310,7 @@ var grid_tickets_invoice_cols = [ {id: 'index', header: '#', adjust: 'data', css: 'right'}, {id: "id", header:"ID", hidden:true}, {id: "serie", header: ["Serie", {content: "selectFilter"}], adjust: "data", - sort: "string", hidden: true}, + sort: "string"}, {id: 'folio', header: ['Folio', {content: 'numberFilter'}], adjust: 'header', sort: 'int', css: 'right', footer: {content: 'countRows', css: 'right'}}, {id: "fecha", header: ["Fecha y Hora"], adjust: "data", sort: "string",