empresa-libre/source/static/js/controller/bancos.js

1426 lines
40 KiB
JavaScript

//~ Empresa Libre
//~ Copyright (C) 2016-2018 Mauricio Baeza Servin (web@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
//~ the Free Software Foundation, either version 3 of the License, or
//~ (at your option) any later version.
//~
//~ This program is distributed in the hope that it will be useful,
//~ but WITHOUT ANY WARRANTY; without even the implied warranty of
//~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//~ GNU General Public License for more details.
//~
//~ You should have received a copy of the GNU General Public License
//~ along with this program. If not, see <http://www.gnu.org/licenses/>.
var msg = ''
var msg_importe = ''
var current_currency = ''
var current_way_payment = ''
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')
g1.showColumn('currency')
g2.showColumn('total')
g2.showColumn('currency')
g2.showColumn('this_pay')
g2.showColumn('type_change')
g3.showColumn('total')
g3.showColumn('currency')
}
var used_cfdi_pays = get_config('used_cfdi_pays')
show('cmd_complemento_pago', used_cfdi_pays)
show('cmd_show_invoice_pay', used_cfdi_pays)
if(used_cfdi_pays){
show_column('grid_cuentabanco', 'invoice')
}
set_year_month()
}
var bancos_controllers = {
init: function(){
$$('lst_cuentas_banco').attachEvent('onChange', lst_cuentas_banco_change)
$$('cmd_agregar_retiro').attachEvent('onItemClick', cmd_agregar_retiro_click)
$$('cmd_agregar_deposito').attachEvent('onItemClick', cmd_agregar_deposito_click)
$$('cmd_complemento_pago').attachEvent('onItemClick', cmd_complemento_pago_click)
$$('cmd_guardar_retiro').attachEvent('onItemClick', cmd_guardar_retiro_click)
$$('cmd_guardar_deposito').attachEvent('onItemClick', cmd_guardar_deposito_click)
$$('cmd_cancelar_movimiento').attachEvent('onItemClick', cmd_cancelar_movimiento_click)
$$('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)
$$('grid_cfdi_este_deposito').attachEvent('onAfterEditStop', grid_cfdi_este_deposito_after_edit_stop)
$$('filter_cuenta_year').attachEvent('onChange', filter_cuenta_change)
$$('filter_cuenta_month').attachEvent('onChange', filter_cuenta_change)
$$('filter_cuenta_dates').attachEvent('onChange', filter_cuenta_dates_change)
$$('cmd_pay_stamp').attachEvent('onItemClick', cmd_pay_stamp_click)
$$('cmd_pay_cancel').attachEvent('onItemClick', cmd_pay_cancel_click)
$$('cmd_pay_delete').attachEvent('onItemClick', cmd_pay_delete_click)
$$('grid_cfdi_pay').attachEvent('onItemClick', grid_cfdi_pay_click)
$$('grid_cfdi_por_pagar').attachEvent('onItemDblClick', grid_cfdi_por_pagar_double_click)
$$('grid_cfdi_por_pagar').attachEvent('onAfterFilter', grid_cfdi_por_pagar_on_after_filter)
$$('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)
$$('grid_cuentabanco').attachEvent('onItemDblClick', grid_cuentabanco_double_click)
$$('cmd_invoice_pay_sat').attachEvent('onItemClick', cmd_invoice_pay_sat_click)
init_config_bank()
}
}
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', {
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()
y.getList().parse(values)
y2.getList().parse(values)
y.blockEvent()
m.blockEvent()
y.setValue(d.getFullYear())
m.setValue(d.getMonth() + 1)
y.unblockEvent()
m.unblockEvent()
}
})
}
function get_cuentas_banco(){
var list = $$('lst_cuentas_banco')
webix.ajax().get('/cuentasbanco', {'tipo': 1}, {
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){
list.getList().parse(values.rows)
list.blockEvent()
list.setValue(values.rows[0].id)
list.unblockEvent()
$$('txt_cuenta_moneda').setValue(values.moneda)
$$('txt_cuenta_saldo').setValue(values.saldo)
get_estado_cuenta()
current_currency = values.key_currency
//~ set_is_mn()
}else{
enable('cmd_agregar_retiro', false)
enable('cmd_agregar_deposito', false)
}
}
})
}
function get_estado_cuenta(rango){
if(rango == undefined){
var filtro = {
cuenta: $$('lst_cuentas_banco').getValue(),
year: $$('filter_cuenta_year').getValue(),
mes: $$('filter_cuenta_month').getValue(),
}
}else{
var filtro = {
cuenta: $$('lst_cuentas_banco').getValue(),
fechas: rango,
}
}
var grid = $$('grid_cuentabanco')
webix.ajax().get('/movbanco', 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')
}
}
})
}
function get_saldo_cuenta(){
var id = $$('lst_cuentas_banco').getValue()
webix.ajax().get('/values/saldocuenta', {id: id}, function(text, data){
var value = data.json()
if(value){
$$('txt_cuenta_saldo').setValue(value)
}else{
msg = 'No se pudo consultar el saldo'
msg_error(msg)
}
})
}
function get_account_currency(){
var id = $$('lst_cuentas_banco').getValue()
webix.ajax().get('/cuentasbanco', {'id': id, 'opt': 'currency'}, {
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){
$$('txt_cuenta_moneda').setValue(values.currency)
current_currency = values.key_currency
}
}
})
}
function lst_cuentas_banco_change(nv, ov){
get_saldo_cuenta()
get_estado_cuenta()
get_account_currency()
}
//~ function get_bancos_forma_pago(retiro){
//~ var values = table_waypayment.chain().find({'id': { '$ne' : '99' }}).data()
//~ if(retiro){
//~ lst = $$('lst_retiro_forma_pago')
//~ }else{
//~ lst = $$('lst_deposito_forma_pago')
//~ }
//~ lst.getList().parse(values)
//~ if(current_way_payment){
//~ lst.setValue(current_way_payment)
//~ }
//~ }
function get_facturas_por_pagar(){
var grid1 = $$('grid_cfdi_este_deposito')
var grid2 = $$('grid_cfdi_por_pagar')
var ids = []
grid1.data.each(function(obj){
ids.push(obj.id)
})
webix.ajax().get('/invoices', {'opt': 'porpagar', 'ids': ids}, {
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()
grid2.clearAll()
if (values.ok){
grid2.parse(values.rows, 'json')
}
}
})
}
function cmd_agregar_retiro_click(){
set_way_payment('lst_retiro_forma_pago', true, current_way_payment)
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')
}
function cmd_agregar_deposito_click(){
msg_importe = ''
get_facturas_por_pagar()
set_way_payment('lst_deposito_forma_pago', true, current_way_payment)
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 pays = get_config('used_cfdi_pays') && get_config('pays_data_bank')
show('lst_partner_account_bank', pays)
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')
}
function validate_retiro(values){
var importe = values.retiro_importe.replace('$', '').replace(',', '').trim()
if(!importe){
msg = 'El importe es requerido'
msg_error(msg)
return false
}
importe = parseFloat(importe).round(2)
if(importe <= 0){
msg = 'El importe debe ser mayor a cero'
msg_error(msg)
return false
}
if(!values.retiro_descripcion.trim()){
msg = 'La descripción es requerida'
msg_error(msg)
return false
}
var today = new Date()
if(values.retiro_fecha > today){
msg = 'Fecha inválida, es una fecha futura'
msg_error(msg)
return
}
var horas = $$('time_retiro').getText().split(':')
var seg = parseInt(horas[2])
var min = parseInt(horas[1])
var horas = parseInt(horas[0])
if(horas > 23){
focus('time_retiro')
msg = 'Hora inválida'
msg_error(msg)
return false
}
if(min > 59){
focus('time_retiro')
msg = 'Hora inválida'
msg_error(msg)
return false
}
if(seg > 59){
focus('time_retiro')
msg = 'Hora inválida'
msg_error(msg)
return false
}
return true
}
function guardar_retiro(values){
var form = $$('form_banco_retiro')
var importe = get_float(values.retiro_importe)
var data = new Object()
data['opt'] = 'add'
data['cuenta'] = $$('lst_cuentas_banco').getValue()
data['fecha'] = values.retiro_fecha
data['hora'] = $$('time_retiro').getText()
data['numero_operacion'] = values.retiro_referencia.trim()
data['forma_pago'] = $$('lst_retiro_forma_pago').getValue()
data['retiro'] = importe
data['deposito'] = 0.0
data['descripcion'] = values.retiro_descripcion
webix.ajax().post('/movbanco', 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){
$$('txt_cuenta_saldo').setValue(values.saldo)
get_estado_cuenta()
$$('multi_bancos').setValue('banco_home')
form.setValues({})
}else{
msg_error(values.msg)
}
}
})
}
function cmd_guardar_retiro_click(){
var form = $$('form_banco_retiro')
if(!form.validate()) {
msg_error('Valores inválidos')
return
}
var values = form.getValues()
if(!validate_retiro(values)){
return
}
msg = 'Todos los datos son correctos.<br><br>¿Deseas agregar este retiro?'
webix.confirm({
title: 'Guardar Retiro',
ok: 'Si',
cancel: 'No',
type: 'confirm-error',
text: msg,
callback:function(result){
if(result){
guardar_retiro(values)
}
}
})
}
function txt_retiro_importe_change(new_value, old_value){
if(!isFinite(new_value)){
this.config.value = old_value
this.refresh()
}
}
function txt_deposito_importe_change(new_value, old_value){
if(!isFinite(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()
}
}
function get_type_change(){
}
function actualizar_deposito(grid){
grid.sort("#fecha#", "desc", "date")
var suma = 0
var descripcion = ''
grid.data.each(function(obj){
descripcion += 'Pago de la factura: ' + obj.serie + obj.folio + ' del '
descripcion += 'cliente: ' + obj.cliente + '\n'
if(obj.importe == undefined){
obj.importe = obj.saldo
obj.this_pay = obj.saldo
}
suma += obj.importe.to_float()
if(obj.type_change == undefined){
//~ if(obj.currency==CURRENCY_MN || obj.currency==current_currency){
obj.type_change = 1.00
//~ }
}
})
$$('txt_deposito_importe').setValue(suma.round(DECIMALES))
$$('deposito_descripcion').setValue(descripcion.slice(0, -1))
grid.refresh()
}
function grid_cfdi_por_pagar_after_drop(context, native_event){
var grid = $$('grid_cfdi_este_deposito')
actualizar_deposito(grid)
}
function grid_cfdi_este_deposito_after_drop(context, native_event){
var grid = $$('grid_cfdi_este_deposito')
actualizar_deposito(grid)
}
function grid_cfdi_este_deposito_after_edit_stop(state, editor, ignoreUpdate){
var grid = $$('grid_cfdi_este_deposito')
var suma = 0
grid.data.each(function(obj){
suma += obj.importe.to_float()
})
$$('txt_deposito_importe').setValue(suma)
}
function grid_cfdi_este_deposito_before_edit_stop(state, editor){
var grid = $$('grid_cfdi_este_deposito')
var row = grid.getItem(editor.row)
if(editor.column == 'importe'){
var importe = parseFloat(state.value)
if(isNaN(importe)){
msg = 'El importe a pagar debe ser un número'
msg_error(msg)
grid.blockEvent()
state.value = state.old
grid.editCancel()
grid.unblockEvent()
return true
}
if(importe <= 0){
msg = 'El importe a pagar debe ser mayor a cero'
msg_error(msg)
grid.blockEvent()
state.value = state.old
grid.editCancel()
grid.unblockEvent()
return true
}
var saldo = row['saldo'].to_float()
if(row['currency']==CURRENCY_MN && importe > saldo){
msg = 'El importe a pagar no puede ser mayor al saldo de la factura'
msg_error(msg)
grid.blockEvent()
state.value = state.old
grid.editCancel()
grid.unblockEvent()
return true
}
var this_pay = row['this_pay'].to_float()
row['type_change'] = (importe / this_pay).round(DECIMALES_TAX)
}
if(editor.column == 'this_pay'){
var importe = parseFloat(state.value)
if(isNaN(importe)){
msg = 'El importe a pagar debe ser un número'
msg_error(msg)
grid.blockEvent()
state.value = state.old
grid.editCancel()
grid.unblockEvent()
return true
}
if(importe <= 0){
msg = 'El importe a pagar debe ser mayor a cero'
msg_error(msg)
grid.blockEvent()
state.value = state.old
grid.editCancel()
grid.unblockEvent()
return true
}
var saldo = row['saldo'].to_float()
if(importe > saldo){
msg = 'El importe a pagar no puede ser mayor al saldo de la factura'
msg_error(msg)
grid.blockEvent()
state.value = state.old
grid.editCancel()
grid.unblockEvent()
return true
}
}
}
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_float4()
var msg_tc = ''
if(!importe){
msg = 'El importe es requerido'
msg_error(msg)
return false
}
if(importe <= 0){
msg = 'El importe debe ser mayor a cero'
msg_error(msg)
return false
}
if(!values.deposito_descripcion.trim()){
msg = 'La descripción es requerida'
msg_error(msg)
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'
msg_error(msg)
return
}
var horas = $$('time_deposito').getText().split(':')
var seg = parseInt(horas[2])
var min = parseInt(horas[1])
var horas = parseInt(horas[0])
if(horas > 23){
focus('time_deposito')
msg = 'Hora inválida'
msg_error(msg)
return false
}
if(min > 59){
focus('time_deposito')
msg = 'Hora inválida'
msg_error(msg)
return false
}
if(seg > 59){
focus('time_deposito')
msg = 'Hora inválida'
msg_error(msg)
return false
}
if(grid.count()){
var suma = 0
grid.data.each(function(obj){
var tmp = obj.importe.to_float()
if(tmp <= 0){
msg = 'El importe de la factura: ' + obj.serie + obj.folio + ' no puede ser menor a cero'
msg_error(msg)
return false
}
suma += tmp
if(obj.currency!=CURRENCY_MN && obj.currency!=current_currency){
if(obj.type_change==undefined){
msg_tc = 'Captura el Tipo de Cambio'
}else{
var tc = obj.type_change
if(tc <= 1.0){
msg_tc = 'El Tipo de Cambio debe ser mayor a 1.00'
}
}
}
})
suma = suma.round(DECIMALES)
if(msg_tc){
msg_error(msg_tc)
return false
}
if(suma > importe){
msg = 'La suma del pago de facturas, no puede ser mayor al deposito'
msg_error(msg)
return false
}
if(suma < importe){
msg_importe = 'El importe del depósito en mayor a la suma de facturas. '
msg_importe += 'Asegurate de que esto sea correcto'
}
}
return true
}
function guardar_deposito(values){
var form = $$('form_banco_deposito')
var grid = $$('grid_cfdi_este_deposito')
var data = new Object()
data['opt'] = 'add'
data['cuenta'] = $$('lst_cuentas_banco').getValue()
data['fecha'] = values.deposito_fecha
data['hora'] = $$('time_deposito').getText()
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_float4()
data['retiro'] = 0.0
data['descripcion'] = values.deposito_descripcion
data['cuenta_socio'] = values.partner_account_bank
current_way_payment = data['forma_pago']
if(grid.count()){
var ids = new Object()
grid.data.each(function(obj){
ids[obj.id] = {
'this_pay': obj.this_pay.to_float(),
'importe': obj.importe.to_float(),
'type_change': obj.type_change,
}
})
data['ids'] = ids
}
webix.ajax().post('/movbanco', 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){
$$('txt_cuenta_saldo').setValue(values.saldo)
get_estado_cuenta()
$$('multi_bancos').setValue('banco_home')
form.setValues({})
grid.clearAll()
}else{
msg_error(values.msg)
}
}
})
}
function cmd_guardar_deposito_click(){
var form = $$('form_banco_deposito')
var grid = $$('grid_cfdi_este_deposito')
if(!form.validate()) {
msg_error('Valores inválidos')
return
}
var values = form.getValues()
if(!validate_deposito(values)){
return
}
msg = 'Todos los datos son correctos.<br><br>'
if(!grid.count()){
msg += 'El depósito no tiene facturas relacionadas<br>¿Estás '
msg += ' seguro de guardar el depósito sin facturas relacionadas?<br><br>'
}else{
if(!msg_importe){
if(grid.count()==1){
msg += 'Se va a relacionar 1 factura.<br><br>'
}else{
msg += 'Se van a relacionar ' + grid.count() + ' facturas.<br><br>'
}
}
}
if(get_config('pays_data_bank') && grid.count() && !values.partner_account_bank){
msg += 'NO seleccionaste cuenta origen.<br><br>'
}
msg += '¿Deseas agregar este depósito?'
webix.confirm({
title: 'Guardar depósito',
ok: 'Si',
cancel: 'No',
type: 'confirm-error',
text: msg,
callback:function(result){
if(result){
guardar_deposito(values)
}
}
})
}
function cancelar_movimiento(id){
var data = {'opt': 'cancel', 'id': id}
webix.ajax().post('/movbanco', 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){
get_estado_cuenta()
$$('txt_cuenta_saldo').setValue(values.balance)
msg_ok(values.msg)
}else{
msg_error(values.msg)
}
}
})
}
function cmd_cancelar_movimiento_click(){
var grid = $$('grid_cuentabanco')
var row = grid.getSelectedItem()
if(row == undefined){
msg_error('Selecciona un movimiento')
return
}
if(row.descripcion == 'Saldo inicial'){
msg_error('No es posible eliminar el saldo inicial')
return
}
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',
cancel: 'No',
type: 'confirm-error',
text: msg,
callback: function(result){
if (result){
cancelar_movimiento(row['id'])
}
}
})
}
function set_invoices_payed(rows){
var ids = []
for(var row of rows){
ids.push(row.id)
}
webix.ajax().post('/invoices', {opt: 'invoicepayed', ids: ids}, {
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){
msg = 'Facturas marcadas pagadas correctamente'
$$('grid_cfdi_por_pagar').remove(values.rows)
msg_ok(msg)
}else{
msg_error(values.msg)
}
}
})
}
function cmd_invoice_payed_click(){
var rows = $$('grid_cfdi_por_pagar').getSelectedItem(true)
if (rows.length == 0){
msg_error('Selecciona al menos una factura por pagar')
return
}
msg = '¿Estás seguro de marcar como pagadas las facturas seleccionadas?<BR><BR>'
msg += 'No se relacionará con ningún depósito y no podrás generarle Factura de pago.<BR><BR>ESTA ACCIÓN NO SE PUEDE DESHACER'
webix.confirm({
title: 'Facturas Pagadas',
ok: 'Si',
cancel: 'No',
type: 'confirm-error',
text: msg,
callback: function(result){
if (result){
set_invoices_payed(rows)
}
}
})
}
function filter_cuenta_change(){
get_estado_cuenta()
}
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)
}
}
function set_data_pay(row){
var form = $$('form_bank_pay')
var dt = row.fecha.split(' ')
var grid = $$('grid_pay_related')
grid.clearAll()
set_way_payment('pay_way_payment')
var wp = table_waypayment.findOne({'value': row.way_payment})
form.setValues({
id_mov: row.id,
pay_date: dt[0],
pay_time: dt[1],
pay_reference: row.numero_operacion,
pay_way_payment: wp.id,
pay_import: row.deposito,
pay_description: row.descripcion
})
webix.ajax().get('/invoicepay', {'opt': 'related', 'id': row.id}, {
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){
grid.parse(values.rows, 'json')
}
}
})
$$('grid_cfdi_pay').clearAll()
webix.ajax().get('/cfdipay', {'opt': 'related', 'id_mov': row.id}, {
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){
$$('grid_cfdi_pay').parse(values.rows, 'json')
}
}
})
}
function cmd_complemento_pago_click(){
var grid = $$('grid_cuentabanco')
var row = grid.getSelectedItem()
if(row == undefined){
msg_error('Selecciona un movimiento de depósito')
return
}
if(row.descripcion == 'Saldo inicial'){
msg_error('No es posible generar un pago del Saldo Inicial')
return
}
if(row.deposito == 0){
msg_error('Selecciona un movimiento de depósito')
return
}
set_data_pay(row)
$$('multi_bancos').setValue('bank_pay')
}
function validate_cfdi_pay(form){
if(!form.validate()) {
msg_error('Valores inválidos')
return false
}
var grid = $$('grid_pay_related')
if(grid.count() == 0){
msg_error('El depósito no tiene facturas relacionadas')
return false
}
return true
}
function update_grid_cfdi_pay(row){
var g = $$('grid_cfdi_pay')
g.add(result.row)
if (g.count() == 1){
g.adjustColumn('index')
g.adjustColumn('serie')
g.adjustColumn('folio')
g.adjustColumn('fecha')
g.adjustColumn('cliente')
g.adjustColumn('xml')
g.adjustColumn('pdf')
g.adjustColumn('email')
}
}
function send_stamp_cfdi_pay(id_mov){
var g = $$('grid_cfdi_pay')
var data = {'opt': 'stamp', 'id_mov': id_mov}
var close = $$('chk_pay_close_when_stamp').getValue()
//~ 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'
msg_error(msg)
},
success:function(text, data, XmlHttpRequest){
result = data.json();
if(result.ok){
g.updateItem(result.id, result.row)
msg_ok(result.msg)
}else{
msg_error(result.msg)
}
}
})
$$('multi_bancos').setValue('banco_home')
}
function save_cfdi_pay(form){
var values = form.getValues()
var data = {'opt': 'new', 'id_mov': values.id_mov}
webix.ajax().sync().post('cfdipay', data, {
error:function(text, data, XmlHttpRequest){
msg = 'Ocurrio un error, consulta a soporte técnico'
msg_error(msg)
},
success:function(text, data, XmlHttpRequest){
result = data.json();
if(result.ok){
if(result.new){
msg_ok('Factura guardada correctamente<BR>Enviando a timbrar...')
update_grid_cfdi_pay(result.row)
}else{
msg_ok('Enviando a timbrar...')
}
send_stamp_cfdi_pay(values.id_mov)
}else{
msg_error(result.msg)
}
}
})
}
function cmd_pay_stamp_click(){
var form = $$('form_bank_pay')
var title = 'Timbrar Factura de Pago'
msg = '¿Estás seguro de enviar a timbrar este pago?<BR><BR>EL MOVIMIENTO YA NO PODRÁ SER MODIFICADO'
if (!validate_cfdi_pay(form)){
return
}
webix.confirm({
title: title,
ok: 'Si',
cancel: 'No',
type: 'confirm-error',
text: msg,
callback:function(result){
if(result){
save_cfdi_pay(form)
}
}
})
}
function cmd_win_cancel_pay_close_click(){
$$('win_invoice_cancel_pay').close()
}
function send_invoice_cancel_pay(reason='', uuid=''){
var grid = $$('grid_cfdi_pay')
var form = $$('form_bank_pay')
var values = form.getValues()
var data = {
'opt': 'cancel',
'id_mov': values.id_mov,
args: {
reason: reason,
uuid: uuid,
}
}
webix.ajax().post('cfdipay', data, function(text, data){
var values = data.json()
if(values.ok){
msg_ok(values.msg)
grid.updateItem(values.id, {'estatus': 'Cancelada'})
}else{
msg_error('No fue posible cancelar')
webix.alert({
title: 'Error al Cancelar',
text: values.msg,
type: 'alert-error'
})
}
})
}
function cmd_invoice_cancel_pay_click(){
var reason = $$('lst_reasons_cancel').getValue()
var uuid = $$('txt_cancel_uuid').getValue()
if(!reason){
msg = 'Selecciona un motivo para esta cancelación'
msg_error(msg)
return
}
if(reason=='01' & !uuid){
msg = 'Debes de capturar el UUID que reemplaza a este CFDI'
msg_error(msg)
return
}
send_invoice_cancel_pay(reason, uuid)
$$('win_invoice_cancel_pay').close()
}
function cmd_pay_cancel_click(){
var form = $$('form_bank_pay')
var values = form.getValues()
var data = {'opt': 'cancel', 'id_mov': values.id_mov}
var grid = $$('grid_cfdi_pay')
if(grid.count() == 0){
msg_error('El depósito no tiene facturas de pago activas')
return
}
win_invoice_cancel_pay.init()
$$('win_invoice_cancel_pay').show()
}
function cmd_pay_delete_click(){
var form = $$('form_bank_pay')
var values = form.getValues()
var data = {'opt': 'delete', 'id_mov': values.id_mov}
var grid = $$('grid_cfdi_pay')
if(grid.count() == 0){
msg_error('El depósito no tiene facturas de pago')
return
}
msg = '¿Estás seguro de eliminar esta factura?<BR><BR>ASEGURATE QUE NO ESTE TIMBRADA<BR><BR>ESTA ACCIÓN NO SE PUEDE DESHACER'
webix.confirm({
title: 'Eliminar Factura',
ok: 'Si',
cancel: 'No',
type: 'confirm-error',
text: msg,
callback:function(result){
if(result){
webix.ajax().post('/cfdipay', data, {
error:function(text, data, XmlHttpRequest){
msg = 'Ocurrio un error, consulta a soporte técnico'
msg_error(msg)
},
success:function(text, data, XmlHttpRequest){
values = data.json();
if(values.ok){
grid.remove(grid.getFirstId())
msg_ok(values.msg)
}else{
msg_error(values.msg)
}
}
})
}
}
})
}
function send_cfdi_email(row){
if(!row.uuid){
msg_error('La factura no esta timbrada')
return
}
msg = '¿Estás seguro de enviar por correo esta factura?'
webix.confirm({
title: 'Enviar Factura',
ok: 'Si',
cancel: 'No',
type: 'confirm-error',
text: msg,
callback:function(result){
if(result){
webix.ajax().post('/cfdipay', {'opt': 'send', 'id': row.id}, {
error:function(text, data, XmlHttpRequest){
msg = 'Ocurrio un error, consulta a soporte técnico'
msg_error(msg)
},
success:function(text, data, XmlHttpRequest){
values = data.json();
if(values.ok){
msg_ok(values.msg)
}else{
msg_error(values.msg)
}
}
})
}
}
})
}
function grid_cfdi_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_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')
this.move(id.row, -1, grid)
actualizar_deposito(grid)
}
function grid_cfdi_este_deposito_double_click(id, e, node){
var grid = $$('grid_cfdi_este_deposito')
this.move(id.row, -1, $$('grid_cfdi_por_pagar'))
actualizar_deposito(grid)
}
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')
}
}
})
}
function grid_cfdi_por_pagar_on_after_filter(){
var partner = $$('grid_cfdi_por_pagar').getFilter('cliente').value
var lst = $$('lst_partner_account_bank')
lst_clear(lst)
if(partner){
var args = {opt: 'by_name', name: partner}
webix.ajax().get('/socioscb', args, {
error:function(text, data, XmlHttpRequest){
msg = 'Ocurrio un error, consulta a soporte técnico'
msg_error(msg)
},
success:function(text, data, XmlHttpRequest){
var result = data.json()
if (result.ok){
lst_parse(lst, result.values)
}else{
msg_error(result.msg)
}
}
})
}
}
function save_mov_description(value){
var row = $$('grid_cuentabanco').getSelectedId()
var data = new Object()
data['opt'] = 'update_description'
data['id'] = row.id
data['description'] = value
webix.ajax().post('/movbanco', data, {
error:function(text, data, XmlHttpRequest){
},
success:function(text, data, XmlHttpRequest){
values = data.json();
if(values.ok){
var item = $$('grid_cuentabanco').getItem(row.row)
item[row.column] = value
$$('grid_cuentabanco').updateItem(row.row, item)
msg_ok(values.msg)
}else{
msg_error(values.msg)
}
}
})
}
function grid_cuentabanco_double_click(id, e, node){
if(id.column != 'descripcion'){
return
}
var row = this.getSelectedItem()
win_mov_description.init()
$$('mov_description').setValue(row.descripcion)
$$('win_mov_description').show()
to_end('mov_description')
}
function cmd_save_mov_description_click(){
var value = $$('mov_description').getValue().trim()
if(!value){
focus('mov_description')
msg = 'La descripción no puede estar vacía'
msg_error(msg)
return
}
save_mov_description(value)
cmd_close_mov_description_click()
}
function cmd_close_mov_description_click(){
$$('win_mov_description').close()
}
function cmd_invoice_pay_sat_click(){
var g = $$('grid_bank_invoice_pay')
if(g.count() == 0){
return
}
var row = g.getSelectedItem()
if (row == undefined){
msg_error('Selecciona una factura de pago')
return
}
if (row instanceof Array){
msg_error('Selecciona solo una factura de pago')
return
}
if(!row.uuid){
msg_error('La factura de pago no esta timbrada, solo es posible \
consultar el estatus en el SAT de facturas timbradas')
return
}
var options = {opt: 'status_sat', id: row.id}
webix.ajax().get('/cfdipay', options, function(text, data){
var value = data.json()
if(value == 'Vigente'){
msg_ok(value)
}else{
msg_error(value)
}
})
}