diff --git a/source/app/models/main.py b/source/app/models/main.py index 17380c4..71e92e4 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -221,6 +221,7 @@ def config_timbrar(): 'cfdi_show_pedimento': Configuracion.get_bool('chk_config_show_pedimento'), 'cfdi_tax_locales': Configuracion.get_bool('chk_config_tax_locales'), 'cfdi_tax_decimals': Configuracion.get_bool('chk_config_tax_decimals'), + 'cfdi_with_taxes': Configuracion.get_bool('chk_config_price_with_taxes_in_invoice'), } return conf @@ -306,6 +307,8 @@ class Configuracion(BaseModel): 'chk_config_open_pdf', 'chk_config_show_pedimento', 'chk_config_tax_locales', + 'chk_config_tax_decimals', + 'chk_config_price_with_taxes_in_invoice', 'chk_config_anticipo', 'chk_config_cuenta_predial', 'chk_config_codigo_barras', diff --git a/source/static/js/controller/admin.js b/source/static/js/controller/admin.js index 248cc0f..b7a4ea5 100644 --- a/source/static/js/controller/admin.js +++ b/source/static/js/controller/admin.js @@ -59,6 +59,8 @@ var controllers = { $$('chk_config_open_pdf').attachEvent('onItemClick', chk_config_item_click) $$('chk_config_show_pedimento').attachEvent('onItemClick', chk_config_item_click) $$('chk_config_tax_locales').attachEvent('onItemClick', chk_config_item_click) + $$('chk_config_tax_decimals').attachEvent('onItemClick', chk_config_item_click) + $$('chk_config_price_with_taxes_in_invoice').attachEvent('onItemClick', chk_config_item_click) $$('chk_config_anticipo').attachEvent('onItemClick', chk_config_item_click) $$('chk_config_ine').attachEvent('onItemClick', chk_config_item_click) $$('chk_config_edu').attachEvent('onItemClick', chk_config_item_click) diff --git a/source/static/js/controller/invoices.js b/source/static/js/controller/invoices.js index 3881758..2bc88d4 100644 --- a/source/static/js/controller/invoices.js +++ b/source/static/js/controller/invoices.js @@ -164,6 +164,7 @@ function default_config(){ cfg_invoice['open_pdf'] = values.cfdi_open_pdf cfg_invoice['tax_locales'] = values.cfdi_tax_locales cfg_invoice['tax_decimals'] = values.cfdi_tax_decimals + cfg_invoice['with_taxes'] = values.cfdi_with_taxes if(values.cfdi_show_pedimento){ $$('grid_details').showColumn('pedimento') } @@ -171,6 +172,25 @@ function default_config(){ } +function price_without_taxes(price, id){ + var final_price = price + + query = table_pt.chain().find({'product': id}).data() + for(var tax of query){ + impuesto = table_taxes.findOne({'id': tax.tax}) + if(impuesto.tipo == 'E'){ + continue + } + + var tasa = 1.00 + impuesto.tasa.to_float() + if(impuesto.tipo == 'T' && impuesto.name == 'IVA'){ + final_price = (price / tasa).round(DECIMALES) + } + } + return final_price +} + + function cmd_new_invoice_click(id, e, node){ var form = $$('form_invoice') var grid_totals = $$('grid_totals') @@ -966,8 +986,7 @@ function grid_details_before_edit_stop(state, editor){ } if(editor.column == 'valor_unitario'){ - var valor_unitario = parseFloat(state.value) - if(isNaN(valor_unitario)){ + if(isNaN(state.value)){ msg = 'El valor unitario debe ser un nĂºmero' msg_error(msg) grid.blockEvent() @@ -976,6 +995,14 @@ function grid_details_before_edit_stop(state, editor){ grid.unblockEvent() return true } + + if(cfg_invoice['with_taxes']){ + var valor_unitario = price_without_taxes(parseFloat(state.value), row.id) + grid.blockEvent() + state.value = valor_unitario + grid.unblockEvent() + } + var valor_unitario = parseFloat(state.value) var cantidad = parseFloat(row['cantidad']) var descuento = parseFloat(row['descuento']) } @@ -999,7 +1026,6 @@ function grid_details_before_edit_stop(state, editor){ row['importe'] = (cantidad * precio_final).round(DECIMALES) grid.refresh() - //~ calculate_taxes() calcular_impuestos() } @@ -1009,7 +1035,6 @@ function grid_details_click(id, e, node){ return } grid.remove(id.row) - //~ calculate_taxes() calcular_impuestos() } diff --git a/source/static/js/ui/admin.js b/source/static/js/ui/admin.js index b5cd7b3..e5d454f 100644 --- a/source/static/js/ui/admin.js +++ b/source/static/js/ui/admin.js @@ -513,6 +513,10 @@ var options_admin_otros = [ {cols: [{maxWidth: 15}, {view: 'checkbox', id: 'chk_config_tax_locales', labelWidth: 0, labelRight: 'Impuestos locales, calcular antes del descuento'}, + {view: 'checkbox', id: 'chk_config_tax_decimals', labelWidth: 0, + labelRight: 'Calcular impuestos con 4 decimales'}, + {view: 'checkbox', id: 'chk_config_price_with_taxes_in_invoice', labelWidth: 0, + labelRight: 'Precio incluye impuestos'}, ]}, {maxHeight: 20}, {template: 'Ayudas varias', type: 'section'},