Validate add products

This commit is contained in:
Mauricio Baeza 2021-06-14 23:41:39 -05:00
parent 585632882d
commit b9d87f0343
3 changed files with 139 additions and 9 deletions

View File

@ -792,6 +792,12 @@ def _products_from_xml(rfc, data):
return result
result['data'] = cfdi.data
# ~ result['data']['xml'] = cfdi.source
del result['data']['cfdi']['Certificado']
del result['data']['cfdi']['NoCertificado']
del result['data']['cfdi']['Sello']
del result['data']['timbre']['SelloCFD']
del result['data']['timbre']['SelloSAT']
emisor = result['data']['emisor']
emisor['rfc'] = emisor['Rfc']

View File

@ -9370,6 +9370,63 @@ class PartnerProducts(BaseModel):
return getattr(cls, method)(cls, filters)
class PartnerInvoices(BaseModel):
partner = ForeignKeyField(Socios)
serie = TextField(default='')
folio = TextField(default='')
cfdi_date = DateTimeField()
cfdi_stamp = DateTimeField()
pay_way = TextField(default='')
pay_conditions = TextField(default='')
pay_method = TextField(default='')
subtotal = DecimalField(default=0.0, max_digits=20, decimal_places=6,
auto_round=True)
discount = DecimalField(default=0.0, max_digits=20, decimal_places=6,
auto_round=True)
currency = TextField(default='MXN')
type_change = DecimalField(default=1.0, max_digits=15, decimal_places=6,
auto_round=True)
total = DecimalField(default=0.0, max_digits=20, decimal_places=6,
auto_round=True)
total_mn = DecimalField(default=0.0, max_digits=20, decimal_places=6,
auto_round=True)
type_cfdi = TextField(default='')
cfdi_use = TextField(default='')
total_retenciones = DecimalField(
max_digits=20, decimal_places=6, auto_round=True, null=True)
total_trasladados = DecimalField(
max_digits=20, decimal_places=6, auto_round=True, null=True)
xml = TextField(default='')
uuid = UUIDField()
status = TextField(default='Guardada')
status_sat = TextField(default='Vigente')
notes = TextField(default='')
balance = DecimalField(default=0.0, max_digits=20, decimal_places=6,
auto_round=True)
pagada = BooleanField(default=False)
cancelada = BooleanField(default=False)
date_cancel = DateTimeField(null=True)
error = TextField(default='')
class Meta:
order_by = ('-cfdi_date',)
class InventoryEntries(BaseModel):
storage = ForeignKeyField(Almacenes, null=True)
invoice = ForeignKeyField(PartnerInvoices, null=True)
product = ForeignKeyField(Productos)
date_add = DateTimeField(default=utils.now)
cant = DecimalField(default=0.0, max_digits=18, decimal_places=2,
auto_round=True)
class Meta:
order_by = ('-date_add',)
indexes = (
(('storage', 'product', 'date_add', 'cant'), True),
)
@util.run_in_thread
def _save_log(user, action, table):
data = {'usuario': user, 'accion': action, 'tabla': table}
@ -9586,6 +9643,8 @@ def _crear_tablas(rfc):
Productos.impuestos.get_through_model(),
Productos.tags.get_through_model(),
PartnerProducts,
InventoryEntries,
PartnerInvoices,
]
log.info('Creando tablas...')
database_proxy.create_tables(tablas, True)
@ -9638,7 +9697,10 @@ def _migrate_tables(rfc=''):
CfdiNominaOtroPago, CfdiNominaOtros, CfdiNominaPercepciones,
CfdiNominaRelacionados, CfdiNominaSeparacion, CfdiNominaSubcontratos,
CfdiNominaTotales, SATNivelesEducativos, Roles, Permisos,
SociosCuentasBanco, SATLeyendasFiscales, PartnerProducts
SociosCuentasBanco, SATLeyendasFiscales,
PartnerProducts,
InventoryEntries,
PartnerInvoices,
]
log.info('Creando tablas nuevas...')
database_proxy.create_tables(tablas, True)

View File

@ -449,11 +449,36 @@ function cmd_close_products_add_click(id, e, node){
grid.clearAll()
}
function _add_entries_inventory(data){
var grid = $$('grid_partner_products')
webix.ajax().sync().post('inventoryentries', data, {
error:function(text, data, XmlHttpRequest){
msg = 'Ocurrio un error, consulta a soporte técnico'
msg_error(msg)
},
success:function(text, data, XmlHttpRequest){
var values = data.json();
if (values.ok) {
$$('multi_invoices').setValue('products_home')
$$('lbl_partner').setValue('')
grid.clearAll()
}else{
msg_error(values.msg)
}
}
})
}
//~ Save add products
function cmd_save_products_add_click(id, e, node){
var grid = $$('grid_partner_products')
var count = 0
var products = []
var validate_import = false
var validate_cant = false
grid.eachRow(function(row){
var r = grid.getItem(row)
@ -466,6 +491,14 @@ function cmd_save_products_add_click(id, e, node){
p.unit_value = r.unit_value1
p.cant = r.cant1
products.push(p)
if(p.unit_value < parseFloat(r.unit_value)){
validate_import = true
}
if(p.cant > r.cant){
validate_cant = true
}
}
})
@ -475,9 +508,37 @@ function cmd_save_products_add_click(id, e, node){
return
}
$$('multi_invoices').setValue('products_home')
$$('lbl_partner').setValue('')
grid.clearAll()
if(validate_import){
msg = 'El Valor Unitario no puede ser menor al Valor Unitario del proveedor'
msg_error(msg)
return
}
if(validate_cant){
msg = 'La Cantidad no puede ser mayor a la Cantidad del proveedor'
msg_error(msg)
return
}
var data = {
partner: cfg_products['partner'],
products: products,
}
msg = '¿Estás seguro de ingresar estos productos? <br/><br/>\
Esta acción no se puede deshacer.'
webix.confirm({
title: 'Agregar entrada',
ok: 'Si',
cancel: 'No',
type: 'confirm-error',
text: msg,
callback:function(result){
if(result){
_add_entries_inventory(data)
}
}
})
}
//~ Import from xml
@ -545,8 +606,8 @@ function up_products_from_xml_upload_complete(response){
var grid = $$('grid_partner_products')
var data = response.data
cfg_products['partner_id'] = data.emisor.id
cfg_products['partner_rfc'] = data.emisor.rfc
cfg_products['partner'] = data.emisor
//~ cfg_products['xml'] = data.xml
var html = '<span class="webix_icon fa-user"></span><span class="lbl_partner">'
html += data.emisor.nombre + ' (' + data.emisor.rfc + ')</span>'
@ -562,14 +623,14 @@ function up_products_from_xml_upload_complete(response){
function get_partner_product(grid, row){
grid.refresh(row.id)
var partner_id = cfg_products['partner'].id
var filters = {
opt: 'product',
partner_id: cfg_products['partner_id'],
partner_rfc: cfg_products['partner_rfc'],
partner: cfg_products['partner'],
partner_key: row.key,
}
if(!filters['partner_id']){
if(!partner_id){
msg = 'El Proveedor no esta dado de alta'
msg_ok(msg)
return
@ -603,6 +664,7 @@ function grid_partner_products_select(row_id, state){
row['key_sat1'] = row.key_sat
row['description1'] = row.description
row['cant1'] = row.cant
row['unit_value1'] = 0.0
get_partner_product(grid, row)
}else{
row['key_sat1'] = ''