Validar serie por usuario/sucursal

This commit is contained in:
Mauricio Baeza 2018-01-02 01:37:52 -06:00
parent d1158bc285
commit ba4c3d9dbd
6 changed files with 46 additions and 18 deletions

View File

@ -242,7 +242,8 @@ class AppInvoices(object):
def on_post(self, req, resp): def on_post(self, req, resp):
values = req.params 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 resp.status = falcon.HTTP_200
def on_delete(self, req, resp): def on_delete(self, req, resp):
@ -288,7 +289,8 @@ class AppTickets(object):
def on_post(self, req, resp): def on_post(self, req, resp):
values = req.params 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 resp.status = falcon.HTTP_200

View File

@ -923,7 +923,6 @@ def to_pdf(data, emisor_rfc):
if data['donativo']: if data['donativo']:
donativo = '_donativo' donativo = '_donativo'
name = '{}_{}{}.ods'.format(rfc.lower(), version, donativo) name = '{}_{}{}.ods'.format(rfc.lower(), version, donativo)
print (name)
path = get_template_ods(name) path = get_template_ods(name)
if path: if path:
return app.pdf(path, data) return app.pdf(path, data)

View File

@ -250,11 +250,12 @@ class StorageEngine(object):
return main.Productos.actualizar(values, id) return main.Productos.actualizar(values, id)
return main.Productos.add(values) return main.Productos.add(values)
def invoice(self, values): def invoice(self, values, user):
id = int(values.pop('id', '0')) id = int(values.pop('id', '0'))
if id: if id:
return main.Facturas.actualizar(values, id) return main.Facturas.actualizar(values, id)
return main.Facturas.add(values)
return main.Facturas.add(values, user)
def preinvoice(self, values): def preinvoice(self, values):
id = int(values.pop('id', '0')) id = int(values.pop('id', '0'))
@ -262,14 +263,14 @@ class StorageEngine(object):
#~ return main.PreFacturas.actualizar(values, id) #~ return main.PreFacturas.actualizar(values, id)
return main.PreFacturas.add(values) return main.PreFacturas.add(values)
def tickets(self, values): def tickets(self, values, user):
opt = values.pop('opt') opt = values.pop('opt')
if opt == 'add': if opt == 'add':
return main.Tickets.add(values) return main.Tickets.add(values, user)
if opt == 'cancel': if opt == 'cancel':
return main.Tickets.cancel(values) return main.Tickets.cancel(values)
if opt == 'invoice': if opt == 'invoice':
return main.Tickets.invoice(values) return main.Tickets.invoice(values, user)
if opt == 'print': if opt == 'print':
return main.Tickets.printer(values) return main.Tickets.printer(values)

View File

@ -17,7 +17,7 @@ if __name__ == '__main__':
from controllers import util from controllers import util
from settings import log, VERSION, PATH_CP, COMPANIES, PRE, CURRENT_CFDI, \ from settings import log, VERSION, PATH_CP, COMPANIES, PRE, CURRENT_CFDI, \
INIT_VALUES, DEFAULT_PASSWORD, DECIMALES, IMPUESTOS, DEFAULT_SAT_PRODUCTO, \ INIT_VALUES, DEFAULT_PASSWORD, DECIMALES, IMPUESTOS, DEFAULT_SAT_PRODUCTO, \
CANCEL_SIGNATURE, PUBLIC CANCEL_SIGNATURE, PUBLIC, DEFAULT_SERIE_TICKET
FORMAT = '{0:.2f}' FORMAT = '{0:.2f}'
@ -792,6 +792,11 @@ class Folios(BaseModel):
(('serie', 'inicio'), True), (('serie', 'inicio'), True),
) )
@classmethod
def get_default(cls):
folio = Folios.select()[0]
return folio.serie
@classmethod @classmethod
def get_all(cls): def get_all(cls):
rows = (Folios rows = (Folios
@ -2936,13 +2941,21 @@ class Facturas(BaseModel):
FacturasComplementos.create(**data) FacturasComplementos.create(**data)
return 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 @classmethod
def add(cls, values): def add(cls, values, user):
productos = util.loads(values.pop('productos')) productos = util.loads(values.pop('productos'))
relacionados = util.loads(values.pop('relacionados')) relacionados = util.loads(values.pop('relacionados'))
ine = values.pop('ine', {}) ine = values.pop('ine', {})
emisor = Emisor.select()[0] emisor = Emisor.select()[0]
values['serie'] = cls._get_serie(cls, user, values['serie'])
values['folio'] = cls._get_folio(cls, values['serie']) values['folio'] = cls._get_folio(cls, values['serie'])
values['tipo_cambio'] = float(values['tipo_cambio']) values['tipo_cambio'] = float(values['tipo_cambio'])
values['lugar_expedicion'] = emisor.cp_expedicion or emisor.codigo_postal values['lugar_expedicion'] = emisor.cp_expedicion or emisor.codigo_postal
@ -4053,10 +4066,23 @@ class Tickets(BaseModel):
} }
return data 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 @classmethod
def add(cls, values): def add(cls, values, user):
productos = util.loads(values.pop('productos')) productos = util.loads(values.pop('productos'))
values['serie'] = 'T' values['serie'] = cls._get_serie(cls, user)
values['folio'] = cls._get_folio(cls, values['serie']) values['folio'] = cls._get_folio(cls, values['serie'])
with database_proxy.atomic() as txn: with database_proxy.atomic() as txn:
@ -4099,8 +4125,7 @@ class Tickets(BaseModel):
.where(Tickets.id.in_(tickets)) .where(Tickets.id.in_(tickets))
) )
result = query.execute() result = query.execute()
print (result) return result
return
def _calculate_totals_invoice(self, invoice, tickets): def _calculate_totals_invoice(self, invoice, tickets):
subtotal = 0 subtotal = 0
@ -4186,7 +4211,7 @@ class Tickets(BaseModel):
return data return data
@classmethod @classmethod
def invoice(cls, values): def invoice(cls, values, user):
is_invoice_day = util.get_bool(values['is_invoice_day']) is_invoice_day = util.get_bool(values['is_invoice_day'])
id_client = int(values['client']) id_client = int(values['client'])
tickets = util.loads(values['tickets']) tickets = util.loads(values['tickets'])
@ -4207,7 +4232,7 @@ class Tickets(BaseModel):
emisor = Emisor.select()[0] emisor = Emisor.select()[0]
data = {} data = {}
data['cliente'] = client data['cliente'] = client
data['serie'] = 'T' data['serie'] = cls._get_serie(cls, user, True)
data['folio'] = cls._get_folio_invoice(cls, data['serie']) data['folio'] = cls._get_folio_invoice(cls, data['serie'])
data['forma_pago'] = client.forma_pago.key data['forma_pago'] = client.forma_pago.key
data['tipo_cambio'] = 1.00 data['tipo_cambio'] = 1.00

View File

@ -115,6 +115,7 @@ IMPUESTOS = {
'CEDULAR': '000', 'CEDULAR': '000',
} }
DEFAULT_SAT_PRODUCTO = '01010101' DEFAULT_SAT_PRODUCTO = '01010101'
DEFAULT_SERIE_TICKET = 'T'
DIR_FACTURAS = 'facturas' DIR_FACTURAS = 'facturas'
USAR_TOKEN = False USAR_TOKEN = False
CANCEL_SIGNATURE = False CANCEL_SIGNATURE = False

View File

@ -275,7 +275,7 @@ var grid_tickets_active_cols = [
{id: 'index', header: '#', adjust: 'data', css: 'right'}, {id: 'index', header: '#', adjust: 'data', css: 'right'},
{id: "id", header:"ID", hidden:true}, {id: "id", header:"ID", hidden:true},
{id: "serie", header: ["Serie", {content: "selectFilter"}], adjust: "data", {id: "serie", header: ["Serie", {content: "selectFilter"}], adjust: "data",
sort: "string", hidden: true}, sort: "string"},
{id: 'folio', header: ['Folio', {content: 'numberFilter'}], adjust: 'header', {id: 'folio', header: ['Folio', {content: 'numberFilter'}], adjust: 'header',
sort: 'int', css: 'right', footer: {content: 'countRows', css: 'right'}}, sort: 'int', css: 'right', footer: {content: 'countRows', css: 'right'}},
{id: "fecha", header: ["Fecha y Hora"], adjust: "data", sort: "string", {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: 'index', header: '#', adjust: 'data', css: 'right'},
{id: "id", header:"ID", hidden:true}, {id: "id", header:"ID", hidden:true},
{id: "serie", header: ["Serie", {content: "selectFilter"}], adjust: "data", {id: "serie", header: ["Serie", {content: "selectFilter"}], adjust: "data",
sort: "string", hidden: true}, sort: "string"},
{id: 'folio', header: ['Folio', {content: 'numberFilter'}], adjust: 'header', {id: 'folio', header: ['Folio', {content: 'numberFilter'}], adjust: 'header',
sort: 'int', css: 'right', footer: {content: 'countRows', css: 'right'}}, sort: 'int', css: 'right', footer: {content: 'countRows', css: 'right'}},
{id: "fecha", header: ["Fecha y Hora"], adjust: "data", sort: "string", {id: "fecha", header: ["Fecha y Hora"], adjust: "data", sort: "string",