Merge branch 'develop'

Mejora #280
Mejora #288
Error #290
This commit is contained in:
Mauricio Baeza 2018-09-28 02:24:12 -05:00
commit 71d773f999
16 changed files with 424 additions and 42 deletions

View File

@ -1,3 +1,22 @@
v 1.19.0 [28-sep-2018]
----------------------
- Mejora #280
- Mejora #288
- Error #290
* IMPORTANTE: Es necesario realizar una migración, despues de actualizar la rama principal.
```
git pull origin master
cd source/app/models
python main.py -bk
python main.py -m
```
v 1.18.0 [27-sep-2018]
----------------------
- Fix #282 Factura de pago en otras monedas

View File

@ -1 +1 @@
1.18.0
1.19.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 712 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 B

View File

@ -18,7 +18,7 @@ diseñado para la legislación mexicana. **Empresa Libre** es totalmente
1. [Instalación y configuración](instalacion.md)
1. [Administración del sistema](administracion.md)
1. [Guía de usuario](guiadeusuario.md)
1. Preguntas más frecuentes
1. [Preguntas más frecuentes](preguntas.md)
### Como ayudar

View File

@ -6,6 +6,24 @@ siempre actualizado.** Solo se da soporte sobre la ultima versión de **Empresa
Libre**.
### 1.19.0 [28-sep-2018]
- Mejora [#280](https://gitlab.com/mauriciobaeza/empresa-libre/issues/280)
- Mejora [#288](https://gitlab.com/mauriciobaeza/empresa-libre/issues/288)
- Error [#290](https://gitlab.com/mauriciobaeza/empresa-libre/issues/290)
* IMPORTANTE: Es necesario realizar una migración, despues de actualizar la rama principal.
```
git pull origin master
cd source/app/models
python main.py -bk
python main.py -m
```
### 1.18.0 [27-sep-2018]
- Fix [#282](https://gitlab.com/mauriciobaeza/empresa-libre/issues/282) Factura de pago en otras monedas

View File

@ -0,0 +1,94 @@
## Preguntas más frecuentes
<div style="text-align: right">
<BR><B><FONT SIZE=+1>Software libre, no gratis</FONT></B>
<BR>
<BR>
<BR>
</div>
<BR>
### ¿Empresa Libre es gratis?
No, **Empresa Libre** no es gratis, es libre y es muy importante tener clara esta
diferencia. **Empresa Libre** es [software libre][1], lo que quiere decir que
puedes usarlo, copiarlo, mejorarlo y compartirlo con quien quieras. **Empresa
Libre** se sostiene de la venta de los folios para el timbrado y del soporte
técnico derivado de su uso, por eso, por favor, **no pidas soporte técnico gratis**.
<BR>
### Si es libre... ¿Por qué cobran el alta inicial?
Recuerda, **libre es diferente de gratis**, y el alta inicial de **Empresa Libre**,
es el costo inicial de 100 timbres fiscales, lo que estas pagando son timbres
fiscales, no el software. Nunca, reiteramos, nunca hemos cobrado el software.
<BR>
### Si el SAT dice que los PACs deben de dar timbrado gratuito... ¿Por que lo cobran Ustedes?
Efectivamente, por ley todos los PACs deben de tener una aplicación gratuita
para el timbrado. Nosotros **NO somos PAC**. Hacemos el timbrado por medio de
Finkok, el mejor PAC de México, puedes [timbrar gratuitamente en su página][2].
<BR>
### ¿Al contratar el servicio se incluye el soporte técnico?
No, no se incluye ningún tipo de soporte técnico. Dado que **Empresa Libre** es
[software libre][1] y se ofrece sin **ningún costo para todos**, el soporte técnico
es parte de los ingresos indispensables para poder seguir desarrollando y
manteniendo el sistema. Esto incluye cualquier tontería que se le ocurra al SAT.
Por eso, por favor, **no pidas soporte técnico gratis**.
<BR>
### ¿Qué alternativas tienen de soporte?
El ingreso por soporte técnico es una importante fuente de ingreso para sufragar
todas [nuestras actividades altruistas][3]. Cada vez que contratas nuestros
servicios, **estas ayudando a otros**.
1. **Soporte gratuito** en el [sistema de tickets del proyecto][4], un soporte
que hemos dado por años de forma profesional, además, otros entusiastas usuarios
del sistema, también pueden ayudarte con cualquier duda que tengas.
2. **Soporte de pago**, puedes contratar el servicio puntual por hora para un
problema en específico o contratar una póliza de soporte mensual. Ponte en
contacto con nosotros para tener más detalles.
3. Todos nuestros [donantes y patrocinadores][5] tienen todo el soporte técnico
que requieran para el sitema. Todas las [ONGs][6] que apoyamos, también tienen
todo el soporte técnico que requieran.
<BR>
### ¿Puedo probar el sistema antes de contratar el servicio?
Claro, de hecho, **es un requisito indispensable** para contratar, los datos de
acceso al sistema de pruebas son:
* **URL**: https://demo.empresalibre.net/
* **RFC**: LAN7008173R5
* **Usuario**: admin
* **Contraseña**: salgueiro3.3
Toma en cuenta que este sitio esta en constante actualización, los datos generados
se limpian de forma regular.
<BR>
### Después de actualizar, no veo los cambios esperados en pantalla
Un alto porcentaje de estos problemas, se arregla **forzando** el refresco de
tu pantalla, en la mayoría de los navegadores con la combinación de teclas
**CTRL+F5**. En raras ocasiones, es preciso limpiar el cache de tu navegador.
[1]: https://www.gnu.org/philosophy/free-sw.es.html
[2]: https://www.finkok.com/
[3]: http://universolibre.org/hacemos/
[4]: https://gitlab.com/mauriciobaeza/empresa-libre/issues
[5]:
[6]: https://universolibre.org/hacemos/

View File

@ -59,7 +59,7 @@ from settings import DEBUG, MV, log, template_lookup, COMPANIES, DB_SAT, \
PATH_XSLT, PATH_XSLTPROC, PATH_OPENSSL, PATH_TEMPLATES, PATH_MEDIA, PRE, \
PATH_XMLSEC, TEMPLATE_CANCEL, DEFAULT_SAT_PRODUCTO, DECIMALES, DIR_FACTURAS
from settings import DEBUG, SEAFILE_SERVER, USAR_TOKEN, API
from settings import SEAFILE_SERVER, USAR_TOKEN, API, DECIMALES_TAX
from .configpac import AUTH
@ -2310,7 +2310,9 @@ def get_bool(value):
return False
def get_float(value):
def get_float(value, four=False):
if four:
return round(float(value), DECIMALES_TAX)
return round(float(value), DECIMALES)

View File

@ -1665,7 +1665,7 @@ class CuentasBanco(BaseModel):
)
def __str__(self):
return '{} ({})'.format(self.banco.name, self.cuenta[-4:])
return '{} ({})'.format(self.nombre, self.cuenta[-4:])
@classmethod
def activate(cls, values):
@ -1732,13 +1732,14 @@ class CuentasBanco(BaseModel):
rows = (CuentasBanco
.select()
.where(CuentasBanco.de_emisor==True, CuentasBanco.activa==True)
.order_by(CuentasBanco.id)
)
if not (len(rows)):
return {'ok': False}
first = rows[0]
rows = [{'id': r.id, 'value': '{} ({})'.format(
r.banco.name, r.cuenta[-4:])} for r in rows]
r.nombre, r.cuenta[-4:])} for r in rows]
data = {
'ok': True,
'rows': tuple(rows),
@ -1917,11 +1918,14 @@ class MovimientosBanco(BaseModel):
else:
actualizar = True
hora = values.pop('hora')
account = CuentasBanco.get(CuentasBanco.id==int(values['cuenta']))
values['fecha'] = '{}T{}'.format(values['fecha'][:10], hora)
values['cuenta'] = int(values['cuenta'])
values['cuenta'] = account
values['moneda'] = account.moneda.key
values['retiro'] = util.get_float(values['retiro'])
values['deposito'] = util.get_float(values['deposito'])
values['tipo_cambio'] = util.get_float(values['tipo_cambio'])
values['tipo_cambio'] = util.get_float(
values.get('tipo_cambio', 1.00), True)
values['forma_pago'] = int(values['forma_pago'])
ultimo_saldo = self._ultimo_saldo(
@ -1959,11 +1963,11 @@ class MovimientosBanco(BaseModel):
msg = 'El movimiento esta conciliado, no se puede cancelar'
return {'ok': False, 'msg': msg}
filters = (CfdiPagos.movimiento==obj)
cp = CfdiPagos.select().where(filters).count()
if cp > 0:
msg = 'El movimiento tiene Factura de Pago, no se puede cancelar'
return {'ok': False, 'msg': msg}
# ~ filters = (CfdiPagos.movimiento==obj)
# ~ cp = CfdiPagos.select().where(filters).count()
# ~ if cp > 0:
# ~ msg = 'El movimiento tiene Factura de Pago, no se puede cancelar'
# ~ return {'ok': False, 'msg': msg}
with database_proxy.transaction():
obj.cancelado = True
@ -2481,6 +2485,7 @@ class Socios(BaseModel):
auto_round=True)
web = TextField(default='')
correo_facturas = TextField(default='')
correo_facturasp = TextField(default='')
forma_pago = ForeignKeyField(SATFormaPago, null=True)
condicion_pago = ForeignKeyField(CondicionesPago, null=True)
addenda = ForeignKeyField(Addendas, null=True)
@ -2525,6 +2530,7 @@ class Socios(BaseModel):
'correo_facturas', 'plantilla', 'id_fiscal')
for name in ft:
fields[name] = values.get(name, '')
fields['correo_facturasp'] = values.pop('partner_email_fp', '')
if fields['pais'] != 'México':
fields['pais'] = fields['pais'].upper()
@ -2543,6 +2549,7 @@ class Socios(BaseModel):
row['condicion_pago'] = \
str(CondicionesPago.get(id=row['condicion_pago']))
row['partner_balance'] = row.pop('saldo_cliente')
row['partner_email_fp'] = row.pop('correo_facturasp')
return row
#~ return {'data': data['rows'][:100], 'pos':0, 'total_count': 1300}
@ -5680,7 +5687,8 @@ class CfdiPagos(BaseModel):
impuestos = {}
mov = invoice.movimiento
currency = mov.cuenta.moneda.key
# ~ currency = mov.cuenta.moneda.key
currency = mov.moneda
related_docs = self._get_related_xml(self, invoice.movimiento, currency)
pagos = {
'FechaPago': mov.fecha.isoformat()[:19],
@ -5709,6 +5717,7 @@ class CfdiPagos(BaseModel):
def _stamp(self, values):
id_mov = int(values['id_mov'])
send_email = util.get_bool(Configuracion.get_('correo_directo'))
auth = Emisor.get_auth()
filters = (
(CfdiPagos.movimiento==id_mov) &
@ -5742,7 +5751,8 @@ class CfdiPagos(BaseModel):
'row': row,
}
if result['ok']:
self._sync(self, obj.id)
self._sync(self, obj.id, send_email)
return result
def _get_related(self, values):
@ -5833,9 +5843,10 @@ class CfdiPagos(BaseModel):
return doc, name
@util.run_in_thread
def _sync(self, id):
CfdiPagos.get_file_xml(id)
CfdiPagos.get_file_pdf(id)
def _sync(self, id, send_email=False):
files = (CfdiPagos.get_file_xml(id), CfdiPagos.get_file_pdf(id))
if send_email:
self._send(self, {'id': id}, files)
return
@util.run_in_thread
@ -5848,7 +5859,45 @@ class CfdiPagos(BaseModel):
opt = values.pop('opt')
return getattr(cls, '_get_{}'.format(opt))(cls, values)
def _send(self, values):
def _get_table(self, values):
# ~ print('\n\n', values, '\n')
if 'start' in values:
filters = CfdiPagos.fecha.between(
util.get_date(values['start']),
util.get_date(values['end'], True))
else:
if values['year'] == '-1':
fy = (CfdiPagos.fecha.year > 0)
else:
fy = (CfdiPagos.fecha.year == int(values['year']))
if values['month'] == '-1':
fm = (CfdiPagos.fecha.month > 0)
else:
fm = (CfdiPagos.fecha.month == int(values['month']))
filters = (fy & fm)
rows = tuple(CfdiPagos.select(
CfdiPagos.id,
CfdiPagos.serie,
CfdiPagos.folio,
CfdiPagos.uuid,
CfdiPagos.fecha,
CfdiPagos.tipo_comprobante,
CfdiPagos.estatus,
case(MovimientosBanco.cancelado, (
(True, 'Cancelado'),
(False, 'Activo'),
)).alias('movimiento'),
MovimientosBanco.deposito.alias('total'),
MovimientosBanco.moneda.alias('currency'),
(MovimientosBanco.deposito * MovimientosBanco.tipo_cambio).alias('total_mn'),
Socios.nombre.alias('cliente'))
.join(MovimientosBanco).switch(CfdiPagos)
.join(Socios).switch(CfdiPagos)
.where(filters).dicts())
return {'ok': True, 'rows': rows}
def _send(self, values, files=()):
id = int(values['id'])
values = Configuracion.get_({'fields': 'correo'})
@ -5861,12 +5910,13 @@ class CfdiPagos(BaseModel):
msg = 'La factura no esta timbrada'
return {'ok': False, 'msg': msg}
to = obj.socio.correo_facturas
to = obj.socio.correo_facturasp or obj.socio.correo_facturas
if not to:
msg = 'El cliente no tiene configurado el correo para facturas'
return {'ok': False, 'msg': msg}
files = (self.get_file_pdf(id), self.get_file_xml(id))
if not files:
files = (self.get_file_pdf(id), self.get_file_xml(id))
fields = util.make_fields(obj.xml)
server = {
@ -8142,12 +8192,15 @@ def _migrate_tables(rfc=''):
if not 'id_fiscal' in columns:
id_fiscal = TextField(default='')
migrations.append(
migrator.add_column(
'socios', 'id_fiscal', id_fiscal))
migrator.add_column('socios', 'id_fiscal', id_fiscal))
if not 'plantilla' in columns:
plantilla = TextField(default='')
migrations.append(
migrator.add_column('socios', 'plantilla', plantilla))
if not 'correo_facturasp' in columns:
correo_facturasp = TextField(default='')
migrations.append(
migrator.add_column('socios', 'correo_facturasp', correo_facturasp))
columns = [c.name for c in database_proxy.get_columns('folios')]
if not 'plantilla' in columns:

View File

@ -47,7 +47,7 @@ except ImportError:
DEBUG = DEBUG
VERSION = '1.18.0'
VERSION = '1.19.0'
EMAIL_SUPPORT = ('soporte@empresalibre.net',)
TITLE_APP = '{} v{}'.format(TITLE_APP, VERSION)

View File

@ -25,6 +25,7 @@ function init_config_bank(){
var multi_currency = get_config('multi_currency')
var g1 = $$('grid_cfdi_por_pagar')
var g2 = $$('grid_cfdi_este_deposito')
var g3 = $$('grid_bank_invoice_pay')
if(multi_currency){
g1.showColumn('total')
@ -33,9 +34,11 @@ function init_config_bank(){
g2.showColumn('currency')
g2.showColumn('this_pay')
g2.showColumn('type_change')
g3.showColumn('total')
g3.showColumn('currency')
}
show('cmd_complemento_pago', get_config('used_cfdi_pays'))
//~ show('cmd_show_invoice_pay', get_config('used_cfdi_pays'))
show('cmd_show_invoice_pay', get_config('used_cfdi_pays'))
set_year_month()
}
@ -52,6 +55,7 @@ var bancos_controllers = {
$$('cmd_invoice_payed').attachEvent('onItemClick', cmd_invoice_payed_click)
$$('txt_retiro_importe').attachEvent('onChange', txt_retiro_importe_change)
$$('txt_deposito_importe').attachEvent('onChange', txt_deposito_importe_change)
$$('deposit_type_change').attachEvent('onChange', deposit_type_change_change)
$$('grid_cfdi_este_deposito').attachEvent('onAfterDrop', grid_cfdi_este_deposito_after_drop)
$$('grid_cfdi_por_pagar').attachEvent('onAfterDrop', grid_cfdi_por_pagar_after_drop)
$$('grid_cfdi_este_deposito').attachEvent('onBeforeEditStop', grid_cfdi_este_deposito_before_edit_stop)
@ -66,6 +70,10 @@ var bancos_controllers = {
$$('grid_cfdi_pay').attachEvent('onItemClick', grid_cfdi_pay_click)
$$('grid_cfdi_por_pagar').attachEvent('onItemDblClick', grid_cfdi_por_pagar_double_click)
$$('grid_cfdi_este_deposito').attachEvent('onItemDblClick', grid_cfdi_este_deposito_double_click)
$$('cmd_show_invoice_pay').attachEvent('onItemClick', cmd_show_invoice_pay_click)
$$('filter_invoice_pay_year').attachEvent('onChange', filter_invoice_pay_change)
$$('filter_invoice_pay_month').attachEvent('onChange', filter_invoice_pay_change)
$$('grid_bank_invoice_pay').attachEvent('onItemClick', grid_bank_invoice_pay_click)
init_config_bank()
}
@ -75,6 +83,7 @@ var bancos_controllers = {
function set_year_month(){
var d = new Date()
var y = $$('filter_cuenta_year')
var y2 = $$('filter_invoice_pay_year')
var m = $$('filter_cuenta_month')
webix.ajax().get('/values/cuentayears', {
@ -85,6 +94,7 @@ function set_year_month(){
success:function(text, data, XmlHttpRequest){
var values = data.json()
y.getList().parse(values)
y2.getList().parse(values)
y.blockEvent()
m.blockEvent()
y.setValue(d.getFullYear())
@ -378,14 +388,22 @@ function cmd_guardar_retiro_click(){
function txt_retiro_importe_change(new_value, old_value){
if(!isFinite(new_value)){
if(!isFinite(new_value) || !new_value){
this.config.value = old_value
this.refresh()
}
}
function txt_deposito_importe_change(new_value, old_value){
if(!isFinite(new_value)){
if(!isFinite(new_value) || !new_value){
this.config.value = old_value
this.refresh()
}
}
function deposit_type_change_change(new_value, old_value){
if(!isFinite(new_value) || !new_value){
this.config.value = old_value
this.refresh()
}
@ -525,7 +543,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 type_change = values.deposit_type_change.to_float4()
var msg_tc = ''
if(!importe){
@ -642,7 +660,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['tipo_cambio'] = values.deposit_type_change.to_float4()
data['retiro'] = 0.0
data['descripcion'] = values.deposito_descripcion
@ -768,8 +786,9 @@ function cmd_cancelar_movimiento_click(){
return
}
var msg = '¿Estás seguro de cancelar el movimiento seleccionado?'
msg += '<BR><BR>ESTA ACCIÓN NO SE PUEDE DESHACER<BR><BR>'
var msg = '¿Estás seguro de cancelar el movimiento seleccionado?<BR><BR>'
msg += 'SI EL MOVIMIENTO TIENE FACTURA DE PAGO, QUEDARÁ HUERFANA<BR><BR>'
msg += 'ESTA ACCIÓN NO SE PUEDE DESHACER<BR><BR>'
webix.confirm({
title: 'Cancelar Movimiento',
ok: 'Si',
@ -841,6 +860,11 @@ function filter_cuenta_change(){
}
function filter_invoice_pay_change(){
get_invoices_pay()
}
function filter_cuenta_dates_change(range){
if(range.start != null && range.end != null){
get_estado_cuenta(range)
@ -955,6 +979,8 @@ function send_stamp_cfdi_pay(id_mov){
var g = $$('grid_cfdi_pay')
var data = {'opt': 'stamp', 'id_mov': id_mov}
//~ ToDo Actualizar cantidad de facturas de pago en el movimiento
webix.ajax().sync().post('cfdipay', data, {
error:function(text, data, XmlHttpRequest){
msg = 'Ocurrio un error, consulta a soporte técnico'
@ -1156,6 +1182,20 @@ function grid_cfdi_pay_click(id, e, node){
}
function grid_bank_invoice_pay_click(id, e, node){
var row = this.getItem(id)
if(id.column == 'xml'){
location = '/doc/xmlpago/' + row.id
}else if(id.column == 'pdf'){
window.open('/doc/pdfpago/' + row.id, '_blank')
}else if(id.column == 'email'){
send_cfdi_email(row)
}
}
function grid_cfdi_por_pagar_double_click(id, e, node){
var grid = $$('grid_cfdi_este_deposito')
@ -1172,9 +1212,47 @@ function grid_cfdi_este_deposito_double_click(id, e, node){
}
//~ function set_is_mn(){
//~ var c = $$('txt_cuenta_moneda').getValue()
//~ if(c!=CURRENCY_MN){
//~ is_mn = false
//~ }
//~ }
function cmd_show_invoice_pay_click(){
var y = $$('filter_invoice_pay_year')
var m = $$('filter_invoice_pay_month')
y.blockEvent()
m.blockEvent()
y.setValue($$('filter_cuenta_year').getValue())
m.setValue($$('filter_cuenta_month').getValue())
y.unblockEvent()
m.unblockEvent()
get_invoices_pay()
$$('multi_bancos').setValue('bank_invoice_pay')
}
function get_invoices_pay(rango){
if(rango == undefined){
var filtro = {
opt: 'table',
year: $$('filter_invoice_pay_year').getValue(),
month: $$('filter_invoice_pay_month').getValue(),
}
}else{
var filtro = {
opt: 'table',
fechas: rango,
}
}
var grid = $$('grid_bank_invoice_pay')
webix.ajax().get('/cfdipay', filtro, {
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()
grid.clearAll()
if (values.ok){
grid.parse(values.rows, 'json')
}
}
})
}

View File

@ -154,10 +154,20 @@ String.prototype.to_float4 = function(){
function get_float(value){
return parseFloat(value.replace('$', '').replace(',', '').trim()).round(DECIMALES)
var f = parseFloat(value.replace('$', '').replace(',', '').trim()).round(DECIMALES)
if(!f){
f = 0.00
}
return f
}
function get_float4(value){
return parseFloat(value.replace('$', '').replace(',', '').trim()).round(DECIMALES_TAX)
var f = parseFloat(value.replace('$', '').replace(',', '').trim()).round(DECIMALES_TAX)
if(!f){
f = 0.00
}
return f
}

View File

@ -41,10 +41,10 @@ var toolbar_movimientos_banco = [
{view: 'button', id: 'cmd_agregar_deposito', label: 'Depósito',
type: 'iconButton', autowidth: true, icon: 'plus'},
{},
{view: 'button', id: 'cmd_complemento_pago', label: 'Factura de Pago',
{view: 'button', id: 'cmd_complemento_pago', label: 'Generar 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},
type: 'iconButton', autowidth: true, icon: 'table'},
{},
{view: 'button', id: 'cmd_cancelar_movimiento', label: 'Cancelar',
type: 'iconButton', autowidth: true, icon: 'ban'},
@ -258,6 +258,69 @@ var grid_pay_related = {
}
var grid_bank_invoice_pay_cols = [
{id: 'index', header: '#', adjust: 'data', css: 'right',
footer: {content: 'countRows', colspan: 3, css: 'right'}},
{id: "id", header:"ID", hidden:true},
{id: 'serie', header: ["Serie"], adjust: "data", sort: 'string',
template: '{common.subrow()} #serie#'},
{id: 'folio', header: ['Folio', {content: 'numberFilter'}], adjust: 'header',
sort: 'int', css: 'right', footer: {text: 'Facturas', colspan: 3}},
{id: "uuid", header: ["UUID", {content: "textFilter"}], adjust: "data",
sort:"string", hidden:true},
{id: "fecha", header: ["Fecha y Hora"], width: 135,
sort: "string"},
{id: "tipo_comprobante", header: ["Tipo"], adjust: 'data',
sort: 'string'},
{id: "estatus", header: ["Estatus", {content: "selectFilter"}],
adjust: "header", sort:"string"},
{id: 'movimiento', header: ['Movimiento', {content: "selectFilter"}],
adjust: 'data', sort: 'string'},
{id: 'total', header: ['Total', {content: 'numberFilter'}],
width: 125, sort: 'int', format: webix.i18n.priceFormat, css: 'right',
hidden: true},
{id: 'currency', header: ['Moneda', {content: 'selectFilter'}],
adjust: 'data', sort: 'string', hidden: true},
{id: 'total_mn', header: ['Total M.N.', {content: 'numberFilter'}],
width: 150, sort: 'int', format: webix.i18n.priceFormat, css: 'right',
footer: {content: 'summTimbrada', css: 'right'}},
{id: 'cliente', header: ['Razón Social', {content: 'selectFilter'}],
fillspace: true, sort: 'string'},
{id: 'xml', header: 'XML', adjust: 'data', template: get_icon('xml')},
{id: 'pdf', header: 'PDF', adjust: 'data', template: get_icon('pdf')},
//~ {id: 'ods', header: 'ODS', adjust: 'data', template: get_icon('table')},
//~ {id: 'zip', header: 'ZIP', adjust: 'data', template: get_icon('zip')},
{id: 'email', header: '', adjust: 'data', template: get_icon('email')}
]
var grid_bank_invoice_pay = {
view: 'datatable',
id: 'grid_bank_invoice_pay',
//~ subview: sv_grid_invoices,
select: 'row',
adjust: true,
footer: true,
resizeColumn: true,
headermenu: true,
columns: grid_bank_invoice_pay_cols,
scheme:{
$change:function(item){
if (item.estatus == 'Cancelada'){
item.$css = 'cancel'
}
}
},
on:{
'data->onStoreUpdated':function(){
this.data.each(function(obj, i){
obj.index = i + 1
})
}
},
}
var toolbar_banco_retiro = [
{view: 'label', label: 'Agregar retiro de banco', id: 'title_bank_retiro'},
{view: 'button', id: 'cmd_guardar_retiro', label: 'Guardar Retiro',
@ -291,6 +354,25 @@ var toolbar_bank_pay = [
]
var toolbar_bank_invoice_pay = [
{view: 'label', label: 'Administración de Facturas de Pago'},
{},
{view: 'icon', click: '$$("multi_bancos").setValue("banco_home")',
icon: 'times-circle'}
]
var toolbar_bank_invoice_pay_filter = [
{view: 'richselect', id: 'filter_invoice_pay_year', label: 'Año',
labelAlign: 'right', labelWidth: 50, width: 150, options: []},
{view: 'richselect', id: 'filter_invoice_pay_month', label: 'Mes',
labelAlign: 'right', labelWidth: 50, width: 200, options: months},
{view: 'daterangepicker', id: 'filter_invoice_pay_dates', label: 'Fechas',
labelAlign: 'right', width: 300},
{},
]
var controls_banco_retiro = [
{view: 'toolbar', elements: toolbar_banco_retiro},
{cols: [
@ -401,6 +483,13 @@ var controls_bank_pay = [
]
var controls_bank_invoice_pay = [
{view: 'toolbar', elements: toolbar_bank_invoice_pay},
{view: 'toolbar', elements: toolbar_bank_invoice_pay_filter},
grid_bank_invoice_pay
]
var form_banco_retiro = {
type: 'space',
responsive: true,
@ -440,6 +529,19 @@ var form_bank_pay = {
}
var form_bank_invoice_pay = {
type: 'space',
responsive: true,
cols: [{
view: 'form',
id: 'form_bank_invoice_pay',
complexData: true,
scroll: true,
elements: controls_bank_invoice_pay,
}],
}
var multi_bancos = {
id: 'multi_bancos',
animate: true,
@ -452,7 +554,8 @@ var multi_bancos = {
]},
{id: 'banco_retiro', rows: [form_banco_retiro]},
{id: 'banco_deposito', rows: [form_banco_deposito]},
{id: 'bank_pay', rows: [form_bank_pay]}
{id: 'bank_pay', rows: [form_bank_pay]},
{id: 'bank_invoice_pay', rows: [form_bank_invoice_pay]}
],
}

View File

@ -133,9 +133,14 @@ var controls_others = [
label: 'Nombre Comercial: '},
{view: 'text', id: 'telefonos', name: 'telefonos', label: 'Teléfonos: '},
{view: 'text', id: 'web', name: 'web', label: 'Página Web: '},
{cols: [
{view: 'text', id: 'correo_facturas', name: 'correo_facturas',
label: 'Correos para Facturas: ', tooltip: 'Separados por comas',
bottomLabel: 'Uno o más correos electrónicos separados por comas'},
{view: 'text', id: 'partner_email_fp', name: 'partner_email_fp',
label: 'Para Facturas de pago: ', tooltip: 'Separados por comas',
bottomLabel: 'Uno o más correos electrónicos separados por comas'},
]},
{cols: [
{view: 'checkbox', id: 'es_cliente', name: 'es_cliente',
label: 'Es Cliente: ', value: true, width: 180},