diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1f22756..99dbb19 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+v 1.18.0 [27-sep-2018]
+----------------------
+ - Fix #282 Factura de pago en otras monedas
+
+
v 1.17.0 [25-sep-2018]
----------------------
- Fix - Al generar factura de pago con documentos relacionados en otras monedas
diff --git a/VERSION b/VERSION
index 092afa1..84cc529 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.17.0
+1.18.0
diff --git a/docs/empresalibre/docs/bancos.md b/docs/empresalibre/docs/bancos.md
index 0ef2057..2b9e78e 100644
--- a/docs/empresalibre/docs/bancos.md
+++ b/docs/empresalibre/docs/bancos.md
@@ -102,7 +102,7 @@ botón de comando ***Solo marcar pagada***.
![Nuevo retiro](img/03/bancos_010.png)
* No captures ningún dato del formulario, solo selecciona la factura a marcar como pagada.
-* **IMPORTANTE**: Solo marca facturas pagadas que **estes 100% seguro que NO requeriras generarle Factura de pago**
+* **IMPORTANTE**: Solo marca facturas pagadas que **estes 100% seguro que NO requeriras generarle Factura de pago** y que no esten relacionadas con ningún depósito.
Al dar clic en el botón de comando ***Solo marcar pagada***, debes confirmar la
acción.
@@ -231,7 +231,7 @@ personalizar completamente esta plantilla.
### Facturas de pago con facturas en otras monedas
Cuando el sistema detecta que se están usando más de una moneda, automáticamente
-te mostrarás las columnas del ***Total*** y la ***Moneda*** respectiva.
+te mostrará las columnas del ***Total*** y la ***Moneda*** respectiva.
![Factura de pago](img/03/bancos_023.png)
@@ -265,5 +265,36 @@ Ahora si, puedes generar la ***Factura de Pago*** de este depósito.
![Factura de pago](img/03/bancos_027.png)
+
+### Cuenta de banco y facturas relacionadas en otras monedas
+
+Cuando la cuenta de banco no este en M.N (MXN) y los documentos relacionados
+esten en la misma moneda de la cuenta de banco, el procedimiento para generar
+la factura de pago es:
+
+Los campos que debes de modificar en la tabla ***Facturas a pagar en este depósito*** son:
+
+* **Este pago**: Si el valor pagado es el total de la factura, no lo modifiques, si es parcial, captura el valor pagado **en la moneda del documento**, en este ejemplo, en UDS. Este valor se usa para el estado de cuenta de la factura.
+* **Este Pago USD**: Captura el valor pagado en la moneda de la cuenta bancaria. En este ejemplo, sería el valor **real** del depósito. Este valor se usará para la ***Factura de pago***.
+* **T.C.**: Siempre debe ser 1.00 al ser la misma moneda de la cuente bancaria y del documento.
+
+Ahora, el tipo de cambio del movimiento, **si debes de capturarlo**, es el tipo de
+cambio de la moneda de la cuenta en relación con la M.N (MXN). Este valor se usará
+para la ***Factura de pago***.
+
+![Factura de pago](img/03/bancos_028.png)
+
+Guarda con el botón de comando ***+ Guardar Depósito***. Se te preguntara para
+confirmar la acción. **Asegurate que todos los datos sean correctos** y de que
+la cantidad y las facturas relacionadas son correctas.
+
+Si todo esta bien, el nuevo movimiento será agregado a la cuenta y actualizado
+el saldo de la misma.
+
+Ahora si, puedes generar la ***Factura de Pago*** de este depósito.
+
+![Factura de pago](img/03/bancos_029.png)
+
+
[1]: /administracion/#agregar-cuenta-bancaria
[2]: /administracion/#complementos
diff --git a/docs/empresalibre/docs/img/03/bancos_028.png b/docs/empresalibre/docs/img/03/bancos_028.png
new file mode 100644
index 0000000..dcb9dd8
Binary files /dev/null and b/docs/empresalibre/docs/img/03/bancos_028.png differ
diff --git a/docs/empresalibre/docs/img/03/bancos_029.png b/docs/empresalibre/docs/img/03/bancos_029.png
new file mode 100644
index 0000000..5fed862
Binary files /dev/null and b/docs/empresalibre/docs/img/03/bancos_029.png differ
diff --git a/docs/empresalibre/docs/notas.md b/docs/empresalibre/docs/notas.md
index 8555b8c..d6b2965 100644
--- a/docs/empresalibre/docs/notas.md
+++ b/docs/empresalibre/docs/notas.md
@@ -6,8 +6,11 @@ siempre actualizado.** Solo se da soporte sobre la ultima versión de **Empresa
Libre**.
+### 1.18.0 [27-sep-2018]
+- Fix [#282](https://gitlab.com/mauriciobaeza/empresa-libre/issues/282) Factura de pago en otras monedas
+
+
### 1.17.0 [25-sep-2018]
-----------------------
- Fix - Al generar factura de pago con documentos relacionados en otras monedas
- Fix - Al generar factura de pago sin serie en documentos relacionados
- Fix [#278](https://gitlab.com/mauriciobaeza/empresa-libre/issues/278)
diff --git a/source/app/models/main.py b/source/app/models/main.py
index 8cb10b0..3754f9a 100644
--- a/source/app/models/main.py
+++ b/source/app/models/main.py
@@ -35,7 +35,7 @@ from settings import log, DEBUG, VERSION, PATH_CP, COMPANIES, PRE, CURRENT_CFDI,
INIT_VALUES, DEFAULT_PASSWORD, DECIMALES, IMPUESTOS, DEFAULT_SAT_PRODUCTO, \
CANCEL_SIGNATURE, PUBLIC, DEFAULT_SERIE_TICKET, CURRENT_CFDI_NOMINA, \
DEFAULT_SAT_NOMINA, DECIMALES_TAX, TITLE_APP, MV, DECIMALES_PRECIOS, \
- DEFAULT_CFDIPAY
+ DEFAULT_CFDIPAY, CURRENCY_MN
FORMAT = '{0:.2f}'
@@ -1921,6 +1921,7 @@ class MovimientosBanco(BaseModel):
values['cuenta'] = int(values['cuenta'])
values['retiro'] = util.get_float(values['retiro'])
values['deposito'] = util.get_float(values['deposito'])
+ values['tipo_cambio'] = util.get_float(values['tipo_cambio'])
values['forma_pago'] = int(values['forma_pago'])
ultimo_saldo = self._ultimo_saldo(
@@ -5688,6 +5689,8 @@ class CfdiPagos(BaseModel):
'Monto': FORMAT.format(mov.deposito),
'relacionados': related_docs,
}
+ if currency != CURRENCY_MN:
+ pagos['TipoCambioP'] = FORMAT_TAX.format(mov.tipo_cambio)
complementos = {'pagos': pagos}
data = {
diff --git a/source/app/settings.py b/source/app/settings.py
index 4f92a3e..fba1be3 100644
--- a/source/app/settings.py
+++ b/source/app/settings.py
@@ -47,7 +47,7 @@ except ImportError:
DEBUG = DEBUG
-VERSION = '1.17.0'
+VERSION = '1.18.0'
EMAIL_SUPPORT = ('soporte@empresalibre.net',)
TITLE_APP = '{} v{}'.format(TITLE_APP, VERSION)
@@ -181,3 +181,4 @@ DEFAULT_SAT_NOMINA = {
API = 'https://api.empresalibre.net{}'
+CURRENCY_MN = 'MXN'
diff --git a/source/static/js/controller/bancos.js b/source/static/js/controller/bancos.js
index a33fe7d..6c490aa 100644
--- a/source/static/js/controller/bancos.js
+++ b/source/static/js/controller/bancos.js
@@ -17,7 +17,6 @@
var msg = ''
var msg_importe = ''
-//~ var is_mn = true
var current_currency = ''
var current_way_payment = ''
@@ -36,6 +35,7 @@ function init_config_bank(){
g2.showColumn('type_change')
}
show('cmd_complemento_pago', get_config('used_cfdi_pays'))
+ //~ show('cmd_show_invoice_pay', get_config('used_cfdi_pays'))
set_year_month()
}
@@ -237,6 +237,8 @@ function get_facturas_por_pagar(){
function cmd_agregar_retiro_click(){
get_bancos_forma_pago(true)
+ var title = 'Agregar retiro de banco a la cuenta ' + $$('lst_cuentas_banco').getText() + ' en ' + $$('txt_cuenta_moneda').getValue()
+ $$('title_bank_retiro').setValue(title)
$$('multi_bancos').setValue('banco_retiro')
}
@@ -248,6 +250,9 @@ function cmd_agregar_deposito_click(){
var g = $$('grid_cfdi_este_deposito')
g.config.columns[g.getColumnIndex('importe')].header = 'Este Pago ' + current_currency
g.refreshColumns()
+ show('deposit_type_change', current_currency!=CURRENCY_MN)
+ var title = 'Agregar depósito de banco a la cuenta ' + $$('lst_cuentas_banco').getText() + ' en ' + $$('txt_cuenta_moneda').getValue()
+ $$('title_bank_deposit').setValue(title)
$$('multi_bancos').setValue('banco_deposito')
}
@@ -401,20 +406,14 @@ function actualizar_deposito(grid){
descripcion += 'Pago de la factura: ' + obj.serie + obj.folio + ' del '
descripcion += 'cliente: ' + obj.cliente + '\n'
if(obj.importe == undefined){
- //~ if(is_mn){
- //~ obj.importe = obj.total_mn
- //~ }else{
obj.importe = obj.saldo
obj.this_pay = obj.saldo
}
suma += obj.importe.to_float()
if(obj.type_change == undefined){
- if(obj.currency==CURRENCY_MN){
+ if(obj.currency==CURRENCY_MN || obj.currency==current_currency){
obj.type_change = 1.00
}
- //~ else{
- //~ obj.type_change = get_type_change(obj.currency)
- //~ }
}
})
@@ -526,6 +525,7 @@ function grid_cfdi_este_deposito_before_edit_stop(state, editor){
function validate_deposito(values){
var grid = $$('grid_cfdi_este_deposito')
var importe = values.deposito_importe.to_float()
+ var type_change = values.deposit_type_change.to_float()
var msg_tc = ''
if(!importe){
@@ -546,6 +546,14 @@ function validate_deposito(values){
return false
}
+ if(grid.count() && current_currency!=CURRENCY_MN){
+ if(type_change <= 1.0){
+ msg = 'El Tipo de Cambio debe ser mayor a 1.00'
+ msg_error(msg)
+ return false
+ }
+ }
+
var today = new Date()
if(values.deposito_fecha > today){
msg = 'Fecha inválida, es una fecha futura'
@@ -588,7 +596,7 @@ function validate_deposito(values){
}
suma += tmp
- if(obj.currency!='MXN'){
+ if(obj.currency!=CURRENCY_MN && obj.currency!=current_currency){
if(obj.type_change==undefined){
msg_tc = 'Captura el Tipo de Cambio'
}else{
@@ -634,6 +642,7 @@ function guardar_deposito(values){
data['numero_operacion'] = values.deposito_referencia.trim()
data['forma_pago'] = $$('lst_deposito_forma_pago').getValue()
data['deposito'] = values.deposito_importe.to_float()
+ data['tipo_cambio'] = values.deposit_type_change.to_float()
data['retiro'] = 0.0
data['descripcion'] = values.deposito_descripcion
@@ -642,7 +651,6 @@ function guardar_deposito(values){
if(grid.count()){
var ids = new Object()
grid.data.each(function(obj){
- //~ ids[obj.id] = obj.importe.to_float()
ids[obj.id] = {
'this_pay': obj.this_pay.to_float(),
'importe': obj.importe.to_float(),
@@ -650,7 +658,6 @@ function guardar_deposito(values){
}
})
data['ids'] = ids
- //~ showvar(data['ids'])
}
webix.ajax().post('/movbanco', data, {
diff --git a/source/static/js/controller/util.js b/source/static/js/controller/util.js
index c1f66a2..9ad7812 100644
--- a/source/static/js/controller/util.js
+++ b/source/static/js/controller/util.js
@@ -145,8 +145,6 @@ Number.prototype.round = function(decimals){
String.prototype.is_number = function(){
return /^\d+$/.test(this)
}
-
-
String.prototype.to_float = function(){
return get_float(this)
}
@@ -212,7 +210,6 @@ webix.protoUI({
$setValue:function(value, raw){
this.config.raw = value
if(!raw){
- //~ value = webix.i18n.priceFormat(value)
value = format_currency(value)
}
this.getInputNode().value = value
@@ -220,6 +217,31 @@ webix.protoUI({
}, webix.ui.text)
+webix.protoUI({
+ $cssName: "text",
+ name: "currency4",
+ $init:function(){
+ this.attachEvent("onItemClick", function(){
+ this.$setValue(this.config.raw, true)
+ this.getInputNode().select()
+ })
+ this.attachEvent("onBlur", function(){
+ this.$setValue(this.config.value)
+ })
+ },
+ $render:function(){
+ this.$setValue(this.config.value)
+ },
+ $setValue:function(value, raw){
+ this.config.raw = value
+ if(!raw){
+ value = format_currency4(value)
+ }
+ this.getInputNode().value = value
+ }
+}, webix.ui.text)
+
+
webix.ui.datafilter.countRows = webix.extend({
refresh:function(master, node, value){
node.firstChild.innerHTML = master.count();
diff --git a/source/static/js/ui/bancos.js b/source/static/js/ui/bancos.js
index 9620d4d..4d94adc 100644
--- a/source/static/js/ui/bancos.js
+++ b/source/static/js/ui/bancos.js
@@ -43,6 +43,8 @@ var toolbar_movimientos_banco = [
{},
{view: 'button', id: 'cmd_complemento_pago', label: 'Factura de Pago',
type: 'iconButton', autowidth: true, icon: 'file-code-o'},
+ {view: 'button', id: 'cmd_show_invoice_pay', label: 'Ver Facturas de Pago',
+ type: 'iconButton', autowidth: true, icon: 'table', hidden: true},
{},
{view: 'button', id: 'cmd_cancelar_movimiento', label: 'Cancelar',
type: 'iconButton', autowidth: true, icon: 'ban'},
@@ -257,8 +259,7 @@ var grid_pay_related = {
var toolbar_banco_retiro = [
- {view: 'label', label: 'Agregar retiro de banco'},
- {},
+ {view: 'label', label: 'Agregar retiro de banco', id: 'title_bank_retiro'},
{view: 'button', id: 'cmd_guardar_retiro', label: 'Guardar Retiro',
type: 'iconButton', autowidth: true, icon: 'minus'},
{view: 'icon', click: '$$("multi_bancos").setValue("banco_home")',
@@ -267,8 +268,7 @@ var toolbar_banco_retiro = [
var toolbar_banco_deposito = [
- {view: 'label', label: 'Agregar depósito de banco'},
- {},
+ {view: 'label', label: 'Agregar depósito de banco', id: 'title_bank_deposit'},
{view: 'button', id: 'cmd_guardar_deposito', label: 'Guardar Depósito',
type: 'iconButton', autowidth: true, icon: 'plus'},
{view: 'icon', click: '$$("multi_bancos").setValue("banco_home")',
@@ -343,7 +343,11 @@ var controls_banco_deposito = [
{view: 'currency', type: 'text', id: 'txt_deposito_importe',
name: 'deposito_importe', label: 'Importe', labelAlign: 'right',
required: true, invalidMessage: 'Captura un valor númerico',
- inputAlign: 'right', value: ''}
+ inputAlign: 'right', value: ''},
+ {view: 'currency4', type: 'text', id: 'deposit_type_change',
+ name: 'deposit_type_change', label: 'T.C.', labelAlign: 'right',
+ required: false, invalidMessage: 'Captura un valor númerico',
+ inputAlign: 'right', value: '1.0000', width: 175, hidden: true}
]},
{cols: [
{view: 'textarea', id: 'deposito_descripcion', label: 'Descripción',
diff --git a/source/static/js/ui/main.js b/source/static/js/ui/main.js
index ce85949..d0f600e 100644
--- a/source/static/js/ui/main.js
+++ b/source/static/js/ui/main.js
@@ -60,6 +60,7 @@ var menu_user = {
var link_forum = "Foro de Soporte";
+var link_doc = "? ";
var ui_main = {
@@ -72,10 +73,11 @@ var ui_main = {
},
{view: 'label', id: 'lbl_title_main', label: 'Empresa Libre'},
{view: 'label', id: 'lbl_forum', label: link_forum, align: 'right'},
+ {view: 'label', id: 'lbl_doc', label: link_doc, align: 'left', width: 25},
menu_user,
{view: 'button', id: 'cmd_update_timbres', type: 'icon', width: 45,
css: 'app_button', icon: 'bell-o', badge: 0},
- {view: 'button', type: 'icon', width: 45, css: 'app_button',
+ {view: 'button', type: 'icon', width: 30, css: 'app_button',
icon: 'cogs', id: 'cmd_ir_al_admin', hidden: true,
click: 'cmd_ir_al_admin_click'}
]