538 lines
25 KiB
Python
Executable File
538 lines
25 KiB
Python
Executable File
# -*- coding: utf-8 -*-
|
|
|
|
from odoo import models, fields, modules, api,_
|
|
import os
|
|
import requests
|
|
import json
|
|
from odoo.exceptions import AccessError, UserError, RedirectWarning, ValidationError, Warning
|
|
from datetime import datetime, timedelta
|
|
from datetime import time as datetime_time
|
|
|
|
class tabla_nomina(models.Model):
|
|
_name = 'tabla_nomina.tabla_nomina'
|
|
_description = 'tabla_nomina.tabla_nomina'
|
|
# _inherit = 'mail.message'
|
|
|
|
name = fields.Char('Nombre')
|
|
fecha_pago = fields.Date("Fecha de Pago")
|
|
xml = fields.Text("XML")
|
|
transaccionID = fields.Char("transaccionID")
|
|
impreso = fields.Boolean("Impreso")
|
|
prefijo = fields.Char("Prefijo")
|
|
consecutivo = fields.Char("consecutivo")
|
|
paisgeneracion = fields.Char("Pais de generacion")
|
|
departamentoestado = fields.Char("Departamento")
|
|
municipiociudad = fields.Char("Ciudad")
|
|
Idioma = fields.Char("Idioma",default="es")
|
|
|
|
version = fields.Char("Version",default="")
|
|
ambiente = fields.Selection([
|
|
('1', 'Produccion'),
|
|
('2', 'Pruebas'),
|
|
], string='Ambiente',default="1")
|
|
tipoXML = fields.Char("Tipo XML",default="102")
|
|
Algoritmo = fields.Char("Algoritmo",default="CUNE-384")
|
|
PeriodoNomina = fields.Selection([
|
|
('1', 'Semanal'),
|
|
('2', 'Decenal'),
|
|
('3', 'Catorcenal'),
|
|
('4', 'Quincenal'),
|
|
('5', 'Mensual'),
|
|
], string='Periodo Nomina')
|
|
TipoMoneda = fields.Char('TipoMoneda', default="COP")
|
|
##EMPLEADOR
|
|
RazonSocial = fields.Char('RazonSocial')
|
|
PrimerApellido = fields.Char('PrimerApellido')
|
|
SegundoApellido = fields.Char('SegundoApellido')
|
|
PrimerNombre = fields.Char('PrimerNombre')
|
|
OtrosNombres = fields.Char('OtrosNombres')
|
|
NIT = fields.Char('NIT')
|
|
DV = fields.Char('DV')
|
|
PaisEmpleador = fields.Char('Pais')
|
|
MunicipioCiudadEmpleador = fields.Char('MunicipioCiudad')
|
|
DepartamentoEstadoEmpleador = fields.Char('DepartamentoEstado')
|
|
DireccionEmpleador = fields.Char('Direccion')
|
|
|
|
tipocontrato = fields.Selection([
|
|
('1', 'Termino Fijo'),
|
|
('2', 'Termino Indefinido'),
|
|
('3', 'Obra o Labor'),
|
|
('4', 'Aprendizaje'),
|
|
('5', 'Practicas'),
|
|
], string='Tipo de contrato')
|
|
|
|
id_plataforma = fields.Char('id_plataforma')
|
|
password = fields.Char('password')
|
|
|
|
mp_id = fields.One2many('tabla_nomina.line','mp_id', ondelete='cascade')
|
|
|
|
|
|
class line_nomina(models.Model):
|
|
_name = 'tabla_nomina.line'
|
|
_description = 'tabla_nomina.line'
|
|
|
|
name = fields.Char('Nombre')
|
|
categoria = fields.Char('Categoria')
|
|
codigo = fields.Char('Codigo')
|
|
dias = fields.Boolean('Son dias?')
|
|
horas = fields.Boolean('Son horas?')
|
|
porcentaje = fields.Boolean('Es porcentaje?')
|
|
subcategoria = fields.Char('Sub Categoria')
|
|
obligatorio = fields.Boolean('Obligatorio')
|
|
detalle = fields.Char('Detalle')
|
|
mensaje = fields.Char('Mensaje')
|
|
campo_tecnico = fields.Char('Campo tecnico')
|
|
titulo = fields.Char('Titulo')
|
|
link = fields.Char('Link')
|
|
|
|
mp_id = fields.Many2one('tabla_nomina.tabla_nomina', string='Campos',ondelete='restrict', index=True)
|
|
|
|
|
|
class nomina_input_lines(models.Model):
|
|
_name = 'hr.salary.rule'
|
|
_inherit = 'hr.salary.rule'
|
|
|
|
porcentaje = fields.Integer("Porcentaje")
|
|
|
|
|
|
class nomina_electronica(models.Model):
|
|
_name = 'hr.payslip'
|
|
_inherit = 'hr.payslip'
|
|
|
|
|
|
fecha_pago = fields.Date("Fecha de Pago")
|
|
xml = fields.Text("XML")
|
|
transaccionID = fields.Char("transaccionID")
|
|
estado = fields.Selection([
|
|
('No_generada', 'No_generada'),
|
|
('Generada_correctamente', 'Generada_correctamente'),
|
|
('Generada_con_errores', 'Generada_con_errores'),
|
|
], string='Estado',default="No_generada")
|
|
prefijo = fields.Char("Prefijo")
|
|
consecutivo = fields.Char("consecutivo")
|
|
paisgeneracion = fields.Char("Pais de generacion")
|
|
departamentoestado = fields.Char("Departamento")
|
|
municipiociudad = fields.Char("Ciudad")
|
|
Idioma = fields.Char("Idioma",default="es")
|
|
|
|
version = fields.Char("Version",default="")
|
|
ambiente = fields.Selection([
|
|
('1', 'Produccion'),
|
|
('2', 'Pruebas'),
|
|
], string='Ambiente',default="1")
|
|
tipoXML = fields.Char("Tipo XML",default="102")
|
|
Algoritmo = fields.Char("Algoritmo",default="CUNE-384")
|
|
PeriodoNomina = fields.Selection([
|
|
('1', 'Semanal'),
|
|
('2', 'Decenal'),
|
|
('3', 'Catorcenal'),
|
|
('4', 'Quincenal'),
|
|
('5', 'Mensual'),
|
|
], string='Periodo Nomina')
|
|
TipoMoneda = fields.Char('TipoMoneda', default="COP")
|
|
Notas = fields.Char('Notas')
|
|
##EMPLEADOR
|
|
RazonSocial = fields.Char('RazonSocial')
|
|
PrimerApellido = fields.Char('PrimerApellido')
|
|
SegundoApellido = fields.Char('SegundoApellido')
|
|
PrimerNombre = fields.Char('PrimerNombre')
|
|
OtrosNombres = fields.Char('OtrosNombres')
|
|
NIT = fields.Char('NIT')
|
|
DV = fields.Char('DV')
|
|
PaisEmpleador = fields.Char('Pais')
|
|
MunicipioCiudadEmpleador = fields.Char('MunicipioCiudad')
|
|
DepartamentoEstadoEmpleador = fields.Char('DepartamentoEstado')
|
|
DireccionEmpleador = fields.Char('Direccion')
|
|
|
|
tipocontrato = fields.Selection([
|
|
('1', 'Termino Fijo'),
|
|
('2', 'Termino Indefinido'),
|
|
('3', 'Obra o Labor'),
|
|
('4', 'Aprendizaje'),
|
|
('5', 'Practicas'),
|
|
], string='Tipo de contrato')
|
|
|
|
FechaGen = fields.Char('Fecha Generacion')
|
|
HoraGen = fields.Char('Hora Generacion')
|
|
id_plataforma = fields.Char('id_plataforma')
|
|
password = fields.Char('password')
|
|
# PeriodoNomina = fields.Char('Periodo Nomina')
|
|
# TipoMoneda = fields.Char('TipoMoneda', default="COP")
|
|
|
|
# Notas = fields.Char('Notas')
|
|
|
|
@api.onchange('employee_id')
|
|
def on_change_employee(self):
|
|
for record in self:
|
|
valores = self.env['tabla_nomina.tabla_nomina'].search([('name', '=', 'Nómina electrónica')])
|
|
if valores:
|
|
self.prefijo = valores.prefijo
|
|
self.consecutivo = valores.consecutivo
|
|
self.paisgeneracion = valores.paisgeneracion
|
|
self.departamentoestado = valores.departamentoestado
|
|
self.municipiociudad = valores.municipiociudad
|
|
self.Idioma = valores.Idioma
|
|
self.ambiente = valores.ambiente
|
|
self.tipoXML = valores.tipoXML
|
|
self.PeriodoNomina = valores.PeriodoNomina
|
|
##Empleador
|
|
self.RazonSocial = valores.RazonSocial
|
|
self.PrimerApellido = valores.PrimerApellido
|
|
self.SegundoApellido = valores.SegundoApellido
|
|
self.PrimerNombre = valores.PrimerNombre
|
|
self.OtrosNombres = valores.OtrosNombres
|
|
self.NIT = valores.NIT
|
|
self.DV = valores.DV
|
|
self.PaisEmpleador = valores.PaisEmpleador
|
|
self.MunicipioCiudadEmpleador = valores.MunicipioCiudadEmpleador
|
|
self.DepartamentoEstadoEmpleador = valores.DepartamentoEstadoEmpleador
|
|
self.DireccionEmpleador = valores.DireccionEmpleador
|
|
self.id_plataforma = valores.id_plataforma
|
|
self.password = valores.password
|
|
|
|
|
|
def action_cfdi_generate(self):
|
|
urlini = "https://odoo15.navegasoft.com/admonclientes/status/"
|
|
headers = {'content-type': 'application/json'}
|
|
send = {"id_plataforma":self.id_plataforma,"transaccionID":self.transaccionID,"prefix":self.prefijo,"number":self.consecutivo}
|
|
result = requests.post(urlini,headers=headers,data = json.dumps(send))
|
|
#resultado = json.loads(result.text)
|
|
#print(result.text)
|
|
if result.status_code == 200:
|
|
resultado = json.loads(result.text)
|
|
if "documentBase64" in resultado:
|
|
final = resultado["documentBase64"]
|
|
return self.env['wk.wizard.message'].genrated_message('Documento impreso', 'listos')
|
|
else:
|
|
if "error" in resultado:
|
|
final = resultado["error"]
|
|
final_error = json.loads(json.dumps(final))
|
|
data = final_error["data"]
|
|
data_final = data['message']
|
|
final_data = json.loads(json.dumps(data_final))
|
|
archivo = final_data['code']
|
|
return self.env['wk.wizard.message'].genrated_message(data_final,"Los datos no estan correctos" ,"https://navegasoft.com")
|
|
else:
|
|
final = json.loads(json.dumps(resultado))
|
|
final2 = final['result']
|
|
final_data = json.loads(json.dumps(eval(final2)))
|
|
#archivo = final_data['code']
|
|
module_path = modules.get_module_path('tabla_nomina')
|
|
model = "facturas"
|
|
if '\\' in module_path:
|
|
src_path = '\\static\\'
|
|
src_model_path = "{0}{1}\\".format('\\static', model)
|
|
else:
|
|
src_path = '/static/'
|
|
src_model_path = "{0}{1}/".format('/static/', model)
|
|
|
|
# if "model" folder does not exists create it
|
|
os.chdir("{0}{1}".format(module_path, src_path))
|
|
if not os.path.exists(model):
|
|
os.makedirs(model)
|
|
extension = ".pdf"
|
|
#file_path = "{0}{1}".format(module_path + src_model_path + str(name), extension)
|
|
file_path = "{0}{1}".format(module_path + src_model_path + str(self.number), extension)
|
|
if not (os.path.exists(file_path)):
|
|
size =1
|
|
if size == 0:
|
|
os.remove(file_path)
|
|
raise UserError(_('imprimible se esta preparando intenta de nuevo, Factura preparandose.'))
|
|
else:
|
|
import base64
|
|
print(final_data)
|
|
if final_data['code'] == '400':
|
|
return self.env['wk.wizard.message'].genrated_message('Estamos recibiendo un codigo 400 Es necesario esperar para volver imprimir el documento', 'Es necesario esperar para volver a imprimir el documento')
|
|
else:
|
|
image_64_encode = base64.b64decode(final_data['documentBase64'])
|
|
i64 = base64.b64encode(image_64_encode)
|
|
att_id = self.env['ir.attachment'].create({
|
|
'name': self.number+extension,
|
|
'type': 'binary',
|
|
'datas': i64,
|
|
'datas_fname': self.number+extension,
|
|
'res_model': 'hr.payslip',
|
|
'res_id': self.id,
|
|
})
|
|
if att_id:
|
|
self.write({"impreso":True})
|
|
return self.env['wk.wizard.message'].genrated_message("Ve a attachment","Factura impresa" ,"https://navegasoft.com")
|
|
else:
|
|
raise UserError(_('Ve a attachment, Factura ya impresa.'))
|
|
|
|
final = resultado["error"]
|
|
final_error = json.loads(json.dumps(final))
|
|
data = final_error["data"]
|
|
data_final = data['message']
|
|
else:
|
|
raise Warning(result)
|
|
|
|
|
|
def envio_directo(self):
|
|
import time
|
|
now2 = datetime.now()
|
|
current_time = now2.strftime("%H:%M:%S")
|
|
numeracion = self.env['ir.sequence'].sudo().search([('code', '=', 'salary.slip')])
|
|
lon_prefix = len(numeracion.prefix)
|
|
long_total = len(self.number)
|
|
number = self.number[lon_prefix:long_total]
|
|
|
|
self.prefijo = numeracion.prefix
|
|
self.consecutivo = number
|
|
|
|
self.FechaGen = str(now2.date())
|
|
self.HoraGen = str(current_time)
|
|
urlini = "https://odoo15.navegasoft.com/admonclientes/objects/"
|
|
valores = self.env['tabla_nomina.tabla_nomina'].search([('name', '=', 'Nómina electrónica')])
|
|
response2={}
|
|
valores_lineas = valores.mp_id
|
|
send = {}
|
|
for linea in valores_lineas:
|
|
if linea.codigo:
|
|
if linea.dias == True:
|
|
for lineacomprobante in self.worked_days_line_ids:
|
|
if linea.codigo == lineacomprobante.code:
|
|
if lineacomprobante.number_of_days > 0.0:
|
|
send[linea.name] = lineacomprobante.number_of_days
|
|
elif linea.horas == True:
|
|
for lineacomprobante in self.worked_days_line_ids:
|
|
if linea.codigo == lineacomprobante.code:
|
|
if lineacomprobante.number_of_hours > 0.0:
|
|
send[linea.name] = lineacomprobante.number_of_hours
|
|
elif linea.porcentaje == True:
|
|
reglas = self.env['hr.salary.rule'].search([('code','=',linea.codigo)])
|
|
for regla in reglas:
|
|
if regla.porcentaje:
|
|
send[linea.name] = regla.porcentaje
|
|
else:
|
|
for lineacomprobante in self.line_ids:
|
|
if linea.codigo == lineacomprobante.code:
|
|
if lineacomprobante.amount != 0.00:
|
|
send[linea.name] = lineacomprobante.amount
|
|
elif linea.campo_tecnico:
|
|
#buscar en el comprobante el codigo
|
|
try:
|
|
if eval(linea.campo_tecnico):
|
|
send[linea.name] = eval(linea.campo_tecnico)
|
|
except SyntaxError:
|
|
return self.env['wk.wizard.message'].genrated_message("El campo tecnico no existe"+linea.campo_tecnico,"Error en el campo"+linea.name,"https://navegasoft.com")
|
|
#pass
|
|
# if linea.name == "DepartamentoEstado":
|
|
# print(linea.name)
|
|
# print(linea.campo_tecnico)
|
|
# print(eval(linea.campo_tecnico))
|
|
# else:
|
|
# send[linea.name] = None
|
|
# print(send)
|
|
headers = {'content-type': 'application/json'}
|
|
result = requests.post(urlini,headers=headers,data = json.dumps(send))
|
|
if result.status_code == 200:
|
|
resultado = json.loads(result.text)
|
|
if "result" in resultado:
|
|
final = resultado["result"]
|
|
if final.find("error") == -1:
|
|
self.write({"impreso":False,"transaccionID":final,"estado":"Generada_correctamente"})
|
|
return self.env['wk.wizard.message'].genrated_message("4 "+"el id "+final,"FACTURA ELECTRONICA ENVIADA CORRECTAMENTE" ,"https://navegasoft.com")
|
|
else:
|
|
final_error = json.loads(final) #.decode("utf-8")
|
|
final_text = final_error['error']
|
|
return self.env['wk.wizard.message'].genrated_message("2 "+final_text['mensaje'], final_text['titulo'],final_text['link'])
|
|
# else:
|
|
|
|
# return self.env['wk.wizard.message'].genrated_message('3 No hemos recibido una respuesta satisfactoria vuelve a enviarlo', 'Reenviar')
|
|
else:
|
|
if "error" in resultado:
|
|
final = resultado["error"]
|
|
final_error = json.loads(json.dumps(final))
|
|
data = final_error["data"]
|
|
data_final = data['message']
|
|
return self.env['wk.wizard.message'].genrated_message("1 "+data_final,"Los datos no estan correctos" ,"https://navegasoft.com")
|
|
else:
|
|
raise Warning(result)
|
|
return self.env['wk.wizard.message'].genrated_message('Existen problemas de coneccion debes reportarlo con navegasoft', 'Servidor')
|
|
|
|
|
|
|
|
|
|
class nomina_hr_contract(models.Model):
|
|
_name = 'hr.contract'
|
|
_inherit = 'hr.contract'
|
|
|
|
tipo_contrato = fields.Selection([
|
|
('1', 'Término Fijo'),
|
|
('2', 'Término Indefinido'),
|
|
('3', 'Obra o Labor'),
|
|
('4', 'Aprendizaje'),
|
|
('5', 'Practicas'),
|
|
], string='Tipo Contrato')
|
|
|
|
tipo_trabajador = fields.Selection([
|
|
('1', 'Dependiente'),
|
|
('2', 'Servicio domestico'),
|
|
('3', 'Independiente'),
|
|
('4', 'Madre comunitaria'),
|
|
('12', 'Aprendices del Sena en etapa lectiva'),
|
|
('16', 'Independiente agremiado o asociado'),
|
|
('18', 'Funcionarios públicos sin tope máximo de ibc'),
|
|
('19', 'Aprendices del SENA en etapa productiva'),
|
|
('20', 'Estudiantes (régimen especial ley 789 de 2002)'),
|
|
('21', 'Estudiantes de postgrado en salud'),
|
|
('22', 'Profesor de establecimiento particular'),
|
|
('23', 'Estudiantes aportes solo riesgos laborales'),
|
|
('30', 'Dependiente entidades o universidades públicas con régimen especial en salud'),
|
|
('31', 'Cooperados o pre cooperativas de trabajo asociado'),
|
|
('32', 'Cotizante miembro de la carrera diplomática o consular de un país extranjero o funcionario de organismo multilateral'),
|
|
('33', 'Beneficiario del fondo de solidaridad pensional'),
|
|
('34', 'Concejal municipal o distrital o edil de junta administrativa local que percibe honorarios amparado por póliza de salud'),
|
|
('35', 'Concejal municipal o distrital que percibe honorarios no amparado con póliza de salud'),
|
|
('36', 'Concejal municipal o distrital que percibe honorarios no amparado con póliza de salud beneficiario del fondo de solidaridad pensional'),
|
|
('40', 'Beneficiario upc adicional'),
|
|
('41', 'Beneficiario sin ingresos con pago por tercero'),
|
|
('42', 'Cotizante pago solo salud articulo 2 ley 1250 de 2008 (independientes de bajos ingresos)'),
|
|
('43', 'Cotizante voluntario a pensiones con pago por tercero'),
|
|
('44', 'Cotizante dependiente de empleo de emergencia con duración mayor o igual a un mes'),
|
|
('45', 'Cotizante dependiente de empleo de emergencia con duración menor a un mes'),
|
|
('47', 'Trabajador dependiente de entidad beneficiaria del sistema general de participaciones - aportes patronales'),
|
|
('51', 'Trabajador de tiempo parcial'),
|
|
('52', 'Beneficiario del mecanismo de protección al cesante'),
|
|
('53', 'Afiliado participe'),
|
|
('54', 'Pre pensionado de entidad en liquidación.'),
|
|
('55', 'Afiliado participe - dependiente'),
|
|
('56', 'Pre pensionado con aporte voluntario a salud'),
|
|
('57', 'Independiente voluntario al sistema de riesgos laborales'),
|
|
('58', 'Estudiantes de prácticas laborales en el sector público'),
|
|
('59', 'Independiente con contrato de prestación de servicios superior a 1 mes'),
|
|
('61', 'Beneficiario programa de reincorporación'),
|
|
], string='Tipo Trabajador')
|
|
sub_tipo_trabajador = fields.Selection([
|
|
('00', 'No Aplica'),
|
|
('1', 'Dependiente pensionado por vejez activo'),
|
|
('2', 'Independiente pensionado por vejez activo'),
|
|
('3', 'Cotizante no obligado a cotizar a pensión por edad'),
|
|
('4', 'Cotizante con requisitos cumplidos para pensión'),
|
|
('12', 'Cotizante a quien se le ha reconocido indemnización sustitutiva o devolución de saldos'),
|
|
('16', 'Cotizante perteneciente a un régimen de exceptuado de pensiones a entidades autorizadas para recibir aportes exclusivamente de un grupo de sus propios'),
|
|
('18', 'Cotizante pensionado con mesada superior a 25 smlmv'),
|
|
('19', 'Residente en el exterior afiliado voluntario al sistema general de pensiones y/o afiliado'),
|
|
('20', 'Conductores del servicio público de transporte terrestre automotor individual de pasajeros en vehículos taxi decreto 1047 de 2014'),
|
|
('21', 'Conductores servicio taxi no aporte pensión dec. 1047'),
|
|
], string='Subtipo de Trabajador')
|
|
AltoRiegoPension = fields.Selection([
|
|
('NO', 'NO'),
|
|
('SI', 'SI'),
|
|
], string='Alto Riego Pension',default='NO')
|
|
SalarioIntegral = fields.Selection([
|
|
('NO', 'NO'),
|
|
('SI', 'SI'),
|
|
], string='Salario Integral',default='NO')
|
|
banco = fields.Char("Banco")
|
|
tipo_cuenta = fields.Char("Tipo cuenta")
|
|
numero_cuenta = fields.Char("Numero de cuenta")
|
|
metodo_pago = fields.Selection([
|
|
('1', 'Instrumento no definido'),
|
|
('2', 'Crédito ACH'),
|
|
('3', 'Débito ACH'),
|
|
('4', 'Reversión débito de demanda ACH'),
|
|
('5', 'Reversión crédito de demanda ACH'),
|
|
('6', 'Crédito de demanda ACH'),
|
|
('7', 'Débito de demanda ACH'),
|
|
('8', 'Mantener'),
|
|
('9', 'Clearing Nacional o Regional'),
|
|
('10', 'Efectivo'),
|
|
('11', 'Reversión Crédito Ahorro'),
|
|
('12', 'Reversión Débito Ahorro'),
|
|
('13', 'Crédito Ahorro'),
|
|
('14', 'Débito Ahorro'),
|
|
('15', 'Bookentry Crédito'),
|
|
('16', 'Bookentry Débito'),
|
|
('17', 'Concentración de la demanda en efectivo Desembolso Crédito (CCD)'),
|
|
('18', 'Concentración de la demanda en efectivo Desembolso (CCD) débito'),
|
|
('19', 'Crédito Pago negocio corporativo (CTP)'),
|
|
('20', 'Cheque'),
|
|
('21', 'Proyecto bancario'),
|
|
('22', 'Proyecto bancario certificado'),
|
|
('23', 'Cheque bancario'),
|
|
('24', 'Nota cambiaria esperando aceptación'),
|
|
('25', 'Cheque certificado'),
|
|
('26', 'Cheque Local'),
|
|
('27', 'Débito Pago Negocio Corporativo (CTP)'),
|
|
('28', 'Crédito Negocio Intercambio Corporativo (CTX)'),
|
|
('29', 'Débito Negocio Intercambio Corporativo (CTX)'),
|
|
('30', 'Transferencia Crédito'),
|
|
('31', 'Transferencia Débito'),
|
|
('32', 'Concentración Efectivo / Desembolso Crédito plus (CCD+)'),
|
|
('33', 'Concentración Efectivo / Desembolso Débito plus (CCD+)'),
|
|
('34', 'Pago y depósito pre acordado (PPD)'),
|
|
('35', 'Concentración efectivo ahorros / Desembolso Crédito (CCD)'),
|
|
('36', 'Concentración efectivo ahorros / Desembolso Crédito (CCD)'),
|
|
('37', 'Pago Negocio Corporativo Ahorros Crédito (CTP)'),
|
|
('38', 'Pago Negocio Corporativo Ahorros Débito (CTP)'),
|
|
('39', 'Crédito Negocio Intercambio Corporativo (CTX)'),
|
|
('40', 'Débito Negocio Intercambio Corporativo (CTX)'),
|
|
('41', 'Concentración efectivo/Desembolso Crédito plus (CCD+)'),
|
|
('42', 'Consignación bancaria'),
|
|
('43', 'Concentración efectivo / Desembolso Débito plus (CCD+)'),
|
|
('44', 'Nota cambiaria'),
|
|
('45', 'Transferencia Crédito Bancario'),
|
|
('46', 'Transferencia Débito Interbancario'),
|
|
('47', 'Transferencia Débito Bancaria'),
|
|
('48', 'Tarjeta Crédito'),
|
|
('49', 'Tarjeta Débito'),
|
|
('50', 'Postgiro'),
|
|
('51', 'Telex estándar bancario francés'),
|
|
('52', 'Pago comercial urgente'),
|
|
('53', 'Pago Tesorería Urgente'),
|
|
('60', 'Nota promisoria'),
|
|
('61', 'Nota promisoria firmada por el acreedor'),
|
|
('62', 'Nota promisoria firmada por el acreedor, avalada por el banco'),
|
|
('63', 'Nota promisoria firmada por el acreedor, avalada por un tercero'),
|
|
('64', 'Nota promisoria firmada por el banco'),
|
|
('65', 'Nota promisoria firmada por un banco avalada por otro banco'),
|
|
('66', 'Nota promisoria firmada'),
|
|
('67', 'Nota promisoria firmada por un tercero avalada por un banco'),
|
|
('70', 'Retiro de nota por el por el acreedor'),
|
|
('71', 'Bonos'),
|
|
('72', 'Vales'),
|
|
('74', 'Retiro de nota por el por el acreedor sobre un banco'),
|
|
('75', 'Retiro de nota por el acreedor, avalada por otro banco'),
|
|
('76', 'Retiro de nota por el acreedor, sobre un banco avalada por un tercero'),
|
|
('77', 'Retiro de una nota por el acreedor sobre un tercero'),
|
|
('78', 'Retiro de una nota por el acreedor sobre un tercero avalada por un banco'),
|
|
('91', 'Nota bancaria transferible'),
|
|
('92', 'Cheque local trasferible'),
|
|
('93', 'Giro referenciado'),
|
|
('94', 'Giro urgente'),
|
|
('95', 'Giro formato abierto'),
|
|
('96', 'Método de pago solicitado no usado'),
|
|
('97', 'Clearing entre partners'),
|
|
('ZZZ', 'Acuerdo mutuo'),
|
|
], string='Metodo de pago',default='10')
|
|
|
|
#raise Warning(final["error"])
|
|
#print()
|
|
|
|
|
|
|
|
# for nombre in numeracion:
|
|
# print(nombre)
|
|
|
|
# print(result.message)
|
|
# print(result.messageError)
|
|
|
|
# clause_final = [('name', '=', 'primer')]
|
|
# valores = self.env['tabla_nomina.tabla_nomina'].search(clause_final)
|
|
# fields = self.env['tabla_nomina.tabla_nomina'].fields_get()
|
|
# #
|
|
# totalDays =100
|
|
# numero =1
|
|
# send = {}
|
|
# for k, v in fields.items():
|
|
# numero = numero + 1
|
|
# if numero < 6:
|
|
# print("nuevo valor")
|
|
# print(k)
|
|
# print(valores[k])
|
|
# if valores[k]:
|
|
# if not k == "name":
|
|
# send[k] = exec(valores[k])
|
|
# print(exec(valores[k])) |