From e9eeab8c2cf8705fe6e654ff6064ecbe930dd731 Mon Sep 17 00:00:00 2001 From: Mauricio Baeza Date: Tue, 1 Jun 2021 19:34:34 -0500 Subject: [PATCH] Validate stock when invoice --- CHANGELOG.md | 7 ++++- VERSION | 2 +- source/app/models/main.py | 10 +++++-- source/app/settings.py | 2 +- source/static/js/controller/invoices.js | 40 +++++++++++++++++++++---- source/static/js/ui/invoices.js | 2 ++ 6 files changed, 52 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf22d02..1b7e2d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ -v 1.42.1 [00-Jun-2021] +v 1.43.0 [00-Jun-2021] +---------------------- + - Soporte para multialmacen + + +v 1.42.1 [31-May-2021] ---------------------- - Error - Ticket #5 diff --git a/VERSION b/VERSION index 75c56b2..ed81e4f 100644 --- a/VERSION +++ b/VERSION @@ -1,2 +1,2 @@ -1.42.1 +1.43.0 diff --git a/source/app/models/main.py b/source/app/models/main.py index 3bb88b7..894150f 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # ~ Empresa Libre -# ~ Copyright (C) 2016-2018 Mauricio Baeza Servin (web@correolibre.net) +# ~ Copyright (C) 2016-2021 Mauricio Baeza Servin (public@correolibre.net) # ~ # ~ This program is free software: you can redistribute it and/or modify # ~ it under the terms of the GNU General Public License as published by @@ -16,6 +16,7 @@ # ~ You should have received a copy of the GNU General Public License # ~ along with this program. If not, see . + import argparse from decimal import Decimal import sqlite3 @@ -3553,7 +3554,9 @@ class Productos(BaseModel): Productos.descripcion, SATUnidades.id.alias('unidad'), Productos.valor_unitario, - Productos.descuento) + Productos.descuento, + Productos.inventario, + Productos.existencia) .join(SATUnidades).switch(Productos) .where((Productos.es_activo==True) & ((Productos.clave==clave) | (Productos.codigo_barras==clave))) @@ -3567,7 +3570,8 @@ class Productos(BaseModel): model_pt.productos_id.alias('product'), model_pt.satimpuestos_id.alias('tax')) .where(model_pt.productos_id==id).dicts()) - return {'ok': True, 'row': row[0], 'taxes': taxes} + product = row[0] + return {'ok': True, 'row': product, 'taxes': taxes} return {'ok': False} diff --git a/source/app/settings.py b/source/app/settings.py index bbd535e..0f707b8 100644 --- a/source/app/settings.py +++ b/source/app/settings.py @@ -42,7 +42,7 @@ except ImportError: DEBUG = DEBUG -VERSION = '1.42.1' +VERSION = '1.43.0' EMAIL_SUPPORT = ('soporte@empresalibre.mx',) TITLE_APP = '{} v{}'.format(TITLE_APP, VERSION) diff --git a/source/static/js/controller/invoices.js b/source/static/js/controller/invoices.js index dbb025b..82de42c 100644 --- a/source/static/js/controller/invoices.js +++ b/source/static/js/controller/invoices.js @@ -909,9 +909,9 @@ function calcular_impuestos(){ } -function set_product(values){ - var taxes = values.taxes - var values = values.row +function set_product(data){ + var taxes = data.taxes + var values = data.row var form = $$('form_invoice') var row = undefined @@ -928,17 +928,33 @@ function set_product(values){ if (row == undefined){ values['cantidad'] = 1 values['importe'] = values['valor_unitario'] - grid.add(values) + //~ grid.add(values) } else { values['cantidad'] = parseFloat(row.cantidad) + 1 values['descuento'] = parseFloat(row.descuento) values['valor_unitario'] = parseFloat(row.valor_unitario) var precio_final = values['valor_unitario'] - values['descuento'] values['importe'] = (precio_final * values['cantidad']).round(DECIMALES) - grid.updateItem(row.id, values) + //~ grid.updateItem(row.id, values) } form.setValues({search_product_id: '', search_product_name: ''}, true) + + //~ Validate stock + if(values.inventario){ + if(values.cantidad > values.existencia){ + msg_error('No hay suficiente existencia de este producto') + return + } + } + + + if(row == undefined){ + grid.add(values) + }else{ + grid.updateItem(row.id, values) + } + for(var v of taxes){ var pt = table_pt.findOne(v) if(pt === null){ @@ -1071,6 +1087,20 @@ function grid_details_before_edit_stop(state, editor){ } cantidad = cantidad.round(DECIMALES) + + //~ Validate stock + if(row['inventario']){ + if(cantidad > row['existencia']){ + msg = 'No hay suficiente existencia de este producto' + msg_error(msg) + grid.blockEvent() + state.value = state.old + grid.editCancel() + grid.unblockEvent() + return true + } + } + grid.blockEvent() state.value = cantidad grid.unblockEvent() diff --git a/source/static/js/ui/invoices.js b/source/static/js/ui/invoices.js index 797dca8..983e0c1 100644 --- a/source/static/js/ui/invoices.js +++ b/source/static/js/ui/invoices.js @@ -359,6 +359,8 @@ var grid_details_cols = [ format: webix.i18n.priceFormat, css: 'right'}, {id: "importe", header:{text: 'Importe', css: 'center'}, width: 150, format: webix.i18n.priceFormat, css: 'right'}, + {id: "inventario", hidden: true}, + {id: "existencia", hidden: true}, ]