14.0 [ADD] add branch 14.0
This commit is contained in:
parent
4cd0beea5c
commit
e5e10cbe65
4
tabla_nomina/__init__.py
Normal file
4
tabla_nomina/__init__.py
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import controllers
|
||||||
|
from . import models
|
||||||
36
tabla_nomina/__manifest__.py
Executable file
36
tabla_nomina/__manifest__.py
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
{
|
||||||
|
'name': "tabla_nomina",
|
||||||
|
|
||||||
|
'summary': """
|
||||||
|
Short (1 phrase/line) summary of the module's purpose, used as
|
||||||
|
subtitle on modules listing or apps.openerp.com""",
|
||||||
|
|
||||||
|
'description': """
|
||||||
|
Long description of module's purpose
|
||||||
|
""",
|
||||||
|
|
||||||
|
'author': "My Company",
|
||||||
|
'website': "http://www.yourcompany.com",
|
||||||
|
|
||||||
|
# Categories can be used to filter modules in modules listing
|
||||||
|
# Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml
|
||||||
|
# for the full list
|
||||||
|
'category': 'Uncategorized',
|
||||||
|
'version': '0.1',
|
||||||
|
|
||||||
|
# any module necessary for this one to work correctly
|
||||||
|
'depends': ['base','om_hr_payroll'],
|
||||||
|
|
||||||
|
# always loaded
|
||||||
|
'data': [
|
||||||
|
'security/ir.model.access.csv',
|
||||||
|
'data/data.xml',
|
||||||
|
'views/views.xml',
|
||||||
|
'views/templates.xml',
|
||||||
|
],
|
||||||
|
# only loaded in demonstration mode
|
||||||
|
'demo': [
|
||||||
|
'demo/demo.xml',
|
||||||
|
],
|
||||||
|
}
|
||||||
3
tabla_nomina/controllers/__init__.py
Normal file
3
tabla_nomina/controllers/__init__.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import controllers
|
||||||
21
tabla_nomina/controllers/controllers.py
Normal file
21
tabla_nomina/controllers/controllers.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# from odoo import http
|
||||||
|
|
||||||
|
|
||||||
|
# class TablaNomina(http.Controller):
|
||||||
|
# @http.route('/tabla_nomina/tabla_nomina/', auth='public')
|
||||||
|
# def index(self, **kw):
|
||||||
|
# return "Hello, world"
|
||||||
|
|
||||||
|
# @http.route('/tabla_nomina/tabla_nomina/objects/', auth='public')
|
||||||
|
# def list(self, **kw):
|
||||||
|
# return http.request.render('tabla_nomina.listing', {
|
||||||
|
# 'root': '/tabla_nomina/tabla_nomina',
|
||||||
|
# 'objects': http.request.env['tabla_nomina.tabla_nomina'].search([]),
|
||||||
|
# })
|
||||||
|
|
||||||
|
# @http.route('/tabla_nomina/tabla_nomina/objects/<model("tabla_nomina.tabla_nomina"):obj>/', auth='public')
|
||||||
|
# def object(self, obj, **kw):
|
||||||
|
# return http.request.render('tabla_nomina.object', {
|
||||||
|
# 'object': obj
|
||||||
|
# })
|
||||||
1711
tabla_nomina/data/data.xml
Executable file
1711
tabla_nomina/data/data.xml
Executable file
File diff suppressed because it is too large
Load Diff
30
tabla_nomina/demo/demo.xml
Normal file
30
tabla_nomina/demo/demo.xml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<!--
|
||||||
|
<record id="object0" model="tabla_nomina.tabla_nomina">
|
||||||
|
<field name="name">Object 0</field>
|
||||||
|
<field name="value">0</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="object1" model="tabla_nomina.tabla_nomina">
|
||||||
|
<field name="name">Object 1</field>
|
||||||
|
<field name="value">10</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="object2" model="tabla_nomina.tabla_nomina">
|
||||||
|
<field name="name">Object 2</field>
|
||||||
|
<field name="value">20</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="object3" model="tabla_nomina.tabla_nomina">
|
||||||
|
<field name="name">Object 3</field>
|
||||||
|
<field name="value">30</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="object4" model="tabla_nomina.tabla_nomina">
|
||||||
|
<field name="name">Object 4</field>
|
||||||
|
<field name="value">40</field>
|
||||||
|
</record>
|
||||||
|
-->
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
3
tabla_nomina/models/__init__.py
Normal file
3
tabla_nomina/models/__init__.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import models
|
||||||
536
tabla_nomina/models/models.py
Executable file
536
tabla_nomina/models/models.py
Executable file
@ -0,0 +1,536 @@
|
|||||||
|
# -*- 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
|
||||||
|
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
|
||||||
|
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 "error" in final:
|
||||||
|
final_error = json.loads(final)
|
||||||
|
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']
|
||||||
|
self.write({"impreso":False,"transactionID":self.transaccionID,"estado":"Generada_correctamente"})
|
||||||
|
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]))
|
||||||
3
tabla_nomina/security/ir.model.access.csv
Executable file
3
tabla_nomina/security/ir.model.access.csv
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
access_tabla_nomina_tabla_nomina,tabla_nomina.tabla_nomina,model_tabla_nomina_tabla_nomina,base.group_user,1,1,1,1
|
||||||
|
access_tabla_nomina_tabla_nomina_line,tabla_nomina.line,model_tabla_nomina_line,base.group_user,1,1,1,1
|
||||||
|
24
tabla_nomina/views/templates.xml
Normal file
24
tabla_nomina/views/templates.xml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<!--
|
||||||
|
<template id="listing">
|
||||||
|
<ul>
|
||||||
|
<li t-foreach="objects" t-as="object">
|
||||||
|
<a t-attf-href="#{ root }/objects/#{ object.id }">
|
||||||
|
<t t-esc="object.display_name"/>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
<template id="object">
|
||||||
|
<h1><t t-esc="object.display_name"/></h1>
|
||||||
|
<dl>
|
||||||
|
<t t-foreach="object._fields" t-as="field">
|
||||||
|
<dt><t t-esc="field"/></dt>
|
||||||
|
<dd><t t-esc="object[field]"/></dd>
|
||||||
|
</t>
|
||||||
|
</dl>
|
||||||
|
</template>
|
||||||
|
-->
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
291
tabla_nomina/views/views.xml
Executable file
291
tabla_nomina/views/views.xml
Executable file
@ -0,0 +1,291 @@
|
|||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<!-- explicit list view definition -->
|
||||||
|
|
||||||
|
<record model="ir.ui.view" id="tabla_nomina.form">
|
||||||
|
<field name="name">Documentos electronicos</field>
|
||||||
|
<field name="model">tabla_nomina.tabla_nomina</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form>
|
||||||
|
<group>
|
||||||
|
<group string="Datos Por defecto">
|
||||||
|
<field name="name"/>
|
||||||
|
<!-- <field name="prefijo"/>
|
||||||
|
<field name="consecutivo"/> -->
|
||||||
|
<field name="paisgeneracion"/>
|
||||||
|
<field name="departamentoestado"/>
|
||||||
|
<field name="municipiociudad"/>
|
||||||
|
<field name="Idioma"/>
|
||||||
|
<field name="version"/>
|
||||||
|
<field name="ambiente"/>
|
||||||
|
<field name="tipoXML"/>
|
||||||
|
<field name="Algoritmo"/>
|
||||||
|
<field name="TipoMoneda"/>
|
||||||
|
<field name="PeriodoNomina"/>
|
||||||
|
</group>
|
||||||
|
<group string="Empleador">
|
||||||
|
<field name="RazonSocial"/>
|
||||||
|
<field name="PrimerApellido"/>
|
||||||
|
<field name="SegundoApellido"/>
|
||||||
|
<field name="PrimerNombre"/>
|
||||||
|
<field name="OtrosNombres"/>
|
||||||
|
<field name="NIT"/>
|
||||||
|
<field name="DV"/>
|
||||||
|
<field name="PaisEmpleador"/>
|
||||||
|
<field name="MunicipioCiudadEmpleador"/>
|
||||||
|
<field name="DepartamentoEstadoEmpleador"/>
|
||||||
|
<field name="DireccionEmpleador"/>
|
||||||
|
<field name="id_plataforma"/>
|
||||||
|
<field name="password"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="mp_id" string="Campos">
|
||||||
|
<tree>
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="categoria"/>
|
||||||
|
<field name="subcategoria"/>
|
||||||
|
<field name="obligatorio"/>
|
||||||
|
<field name="detalle"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</group>
|
||||||
|
<!-- <button name="add_data" type="object" string="llenar default datos" /> -->
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<record model="ir.ui.view" id="tabla_nomina.form">
|
||||||
|
<field name="name">Documentos Configuracion</field>
|
||||||
|
<field name="model">tabla_nomina.tabla_nomina</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form>
|
||||||
|
<group>
|
||||||
|
<field name="name"/>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="mp_id" string="Campos">
|
||||||
|
<tree>
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="categoria"/>
|
||||||
|
<field name="subcategoria"/>
|
||||||
|
<field name="obligatorio"/>
|
||||||
|
<field name="detalle"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</group>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record> -->
|
||||||
|
|
||||||
|
<record model="ir.ui.view" id="tabla_nomina.list">
|
||||||
|
<field name="name">Listado documentos</field>
|
||||||
|
<field name="model">tabla_nomina.tabla_nomina</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree>
|
||||||
|
<field name="name"/>
|
||||||
|
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- <record model="ir.ui.view" id="tabla_nomina.list">
|
||||||
|
<field name="name">Listado documentos configuracion</field>
|
||||||
|
<field name="model">tabla_nomina.configuracion</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree>
|
||||||
|
<field name="name"/>
|
||||||
|
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record> -->
|
||||||
|
|
||||||
|
<!-- actions opening views on models -->
|
||||||
|
|
||||||
|
<record model="ir.actions.act_window" id="tabla_nomina.action_window">
|
||||||
|
<field name="name">Listado Documentos</field>
|
||||||
|
<field name="res_model">tabla_nomina.tabla_nomina</field>
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- <record model="ir.actions.act_window" id="tabla_nomina.configuracion">
|
||||||
|
<field name="name">Configuracion Documentos</field>
|
||||||
|
<field name="res_model">tabla_nomina.tabla_nomina</field>
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
</record> -->
|
||||||
|
|
||||||
|
<!-- server action to the one above -->
|
||||||
|
|
||||||
|
<!-- <record model="ir.actions.server" id="tabla_nomina.action_server">
|
||||||
|
<field name="name">tabla_nomina server</field>
|
||||||
|
<field name="model_id" ref="model_tabla_nomina_tabla_nomina"/>
|
||||||
|
<field name="state">code</field>
|
||||||
|
<field name="code">
|
||||||
|
action = {
|
||||||
|
"type": "ir.actions.act_window",
|
||||||
|
"view_mode": "tree,form",
|
||||||
|
"res_model": model._name,
|
||||||
|
}
|
||||||
|
</field>
|
||||||
|
</record> -->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Top menu item -->
|
||||||
|
|
||||||
|
<menuitem name="Documentos electronicos" id="tabla_nomina.menu_root"/>
|
||||||
|
|
||||||
|
<!-- menu categories -->
|
||||||
|
|
||||||
|
<menuitem name="Listado" id="tabla_nomina.menu_1" parent="tabla_nomina.menu_root"/>
|
||||||
|
<!-- <menuitem name="Configuracion" id="tabla_nomina.menu_2" parent="tabla_nomina.menu_root"/> -->
|
||||||
|
|
||||||
|
<!-- actions -->
|
||||||
|
|
||||||
|
<menuitem name="List" id="tabla_nomina.menu_1_list" parent="tabla_nomina.menu_1"
|
||||||
|
action="tabla_nomina.action_window"/>
|
||||||
|
<!-- <menuitem name="Server to list" id="tabla_nomina" parent="tabla_nomina.menu_2"
|
||||||
|
action="tabla_nomina.configuracion"/> -->
|
||||||
|
|
||||||
|
|
||||||
|
<record id="nomina_electronica_button" model="ir.ui.view">
|
||||||
|
<field name="name">nomina_electronica</field>
|
||||||
|
<field name="model">hr.payslip</field>
|
||||||
|
<field name="inherit_id" ref="om_hr_payroll.view_hr_payslip_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//button[@name='action_payslip_cancel']" position="after">
|
||||||
|
<!-- states="draft,open" -->
|
||||||
|
<button name="envio_directo" type="object" string="Generar Documento electrónico" groups="account.group_account_invoice" attrs="{'invisible':['|',('estado','in',('generada_correctamente')),('state','in',('draft'))]}"/>
|
||||||
|
<button name="action_cfdi_generate" type="object" string="Imprimir" groups="account.group_account_invoice" attrs="{'invisible':['|',('estado','in',('No_generada','generada_con_errores')),('state','in',('draft'))]}"/>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//field[@name='number']" position="after">
|
||||||
|
<!-- states="draft,open" attrs="{'invisible':['|',('estado_factura','in',('factura_correcta')),('state','in',('draft','open'))]}" -->
|
||||||
|
<field name="fecha_pago" />
|
||||||
|
</xpath>
|
||||||
|
<!-- <xpath expr="//field[@name='input_line_ids']" position="replace">
|
||||||
|
<field name="input_line_ids" colspan="5" nolabel="1">
|
||||||
|
<tree string="Input Data" editable="bottom">
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="code"/>
|
||||||
|
<field name="cantidad"/>
|
||||||
|
<field name="amount"/>
|
||||||
|
<field name="contract_id"/>
|
||||||
|
<field name="sequence" invisible="True"/>
|
||||||
|
</tree>
|
||||||
|
<form string="Payslip Line">
|
||||||
|
<group col="5">
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="code"/>
|
||||||
|
<field name="cantidad"/>
|
||||||
|
<field name="sequence"/>
|
||||||
|
<field name="amount"/>
|
||||||
|
<field name="contract_id"/>
|
||||||
|
</group>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</xpath> -->
|
||||||
|
<xpath expr="//page[4]" position="after">
|
||||||
|
<page string="Nomina electronica">
|
||||||
|
<group cols="2">
|
||||||
|
<group string="Datos Entrada">
|
||||||
|
|
||||||
|
<field name="prefijo"/>
|
||||||
|
<field name="consecutivo"/>
|
||||||
|
<field name="paisgeneracion"/>
|
||||||
|
<field name="departamentoestado"/>
|
||||||
|
<field name="municipiociudad"/>
|
||||||
|
<field name="Idioma"/>
|
||||||
|
<field name="ambiente"/>
|
||||||
|
<field name="tipoXML"/>
|
||||||
|
<field name="FechaGen"/>
|
||||||
|
<field name="HoraGen"/>
|
||||||
|
<field name="PeriodoNomina"/>
|
||||||
|
<field name="TipoMoneda"/>
|
||||||
|
<field name="Notas"/>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<!-- empleador -->
|
||||||
|
<field name="RazonSocial"/>
|
||||||
|
<field name="PrimerApellido"/>
|
||||||
|
<field name="SegundoApellido"/>
|
||||||
|
<field name="PrimerNombre"/>
|
||||||
|
<field name="OtrosNombres"/>
|
||||||
|
<field name="NIT"/>
|
||||||
|
<field name="DV"/>
|
||||||
|
<field name="PaisEmpleador"/>
|
||||||
|
<field name="MunicipioCiudadEmpleador"/>
|
||||||
|
<field name="DepartamentoEstadoEmpleador"/>
|
||||||
|
<field name="DireccionEmpleador"/>
|
||||||
|
<field name="id_plataforma"/>
|
||||||
|
<field name="password"/>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
</group>
|
||||||
|
<group string="Datos resultado">
|
||||||
|
<field name="estado"/>
|
||||||
|
<field name="transaccionID"/>
|
||||||
|
</group>
|
||||||
|
<!-- <div colspan="4">
|
||||||
|
<field name="note" placeholder="Add an internal note..."/>
|
||||||
|
</div> -->
|
||||||
|
</page>
|
||||||
|
<page string="XML">
|
||||||
|
<div colspan="4">
|
||||||
|
<field name="xml" placeholder="Al generar el documento se crea este..."/>
|
||||||
|
</div>
|
||||||
|
</page>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- <record id="nomina_rule_category" model="ir.ui.view">
|
||||||
|
<field name="name">nomina_rule_category</field>
|
||||||
|
<field name="model">hr.salary.rule.category</field>
|
||||||
|
<field name="inherit_id" ref="hr_payroll.hr_salary_rule_category_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='parent_id']" position="after">
|
||||||
|
|
||||||
|
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record> -->
|
||||||
|
|
||||||
|
<record id="nomina_hr_contract" model="ir.ui.view">
|
||||||
|
<field name="name">nomina_hr_contract</field>
|
||||||
|
<field name="model">hr.contract</field>
|
||||||
|
<field name="inherit_id" ref="hr_contract.hr_contract_view_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='resource_calendar_id']" position="after">
|
||||||
|
<group>
|
||||||
|
<field name="tipo_contrato"/>
|
||||||
|
<field name="tipo_trabajador"/>
|
||||||
|
<field name="sub_tipo_trabajador"/>
|
||||||
|
<field name="AltoRiegoPension"/>
|
||||||
|
<field name="metodo_pago"/>
|
||||||
|
<!-- <field name="banco"/> -->
|
||||||
|
<field name="tipo_cuenta"/>
|
||||||
|
<!-- <field name="numero_cuenta"/> -->
|
||||||
|
</group>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="nomina_rule_salary" model="ir.ui.view">
|
||||||
|
<field name="name">nomina_rule_salary</field>
|
||||||
|
<field name="model">hr.salary.rule</field>
|
||||||
|
<field name="inherit_id" ref="om_hr_payroll.hr_salary_rule_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='appears_on_payslip']" position="after">
|
||||||
|
<field name="porcentaje"/>
|
||||||
|
<!-- <field name="tipo_devengado"/>
|
||||||
|
<field name="tipo_deduccion"/> -->
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
Loading…
Reference in New Issue
Block a user