Discussion:
[tryton-es] RFC (Registro Federal de Contribuyentes) party.py México
f***@gmail.com
2016-07-11 14:43:38 UTC
Permalink
Por si le interesa a alguien, hice una modificación al módulo party para
incluir el RFC mexicano (equivalente al número VAT mexicano). Esto es para
la version 4.0 de tryton (tryton-modules-party_4.0.1-1~8jessie+1_all.deb)

*** /tmp/ediff27895fd 2016-07-11 09:17:23.966602026 -0500
--- /usr/lib/python2.7/dist-packages/trytond/modules/party/party.py
2016-07-09 21:15:31.914255012 -0500
***************
*** 3,8 ****
--- 3,9 ----
from itertools import groupby

import stdnum.eu.vat as vat
+ import stdnum.mx.rfc as rfc
import stdnum.exceptions
from sql import Null
from sql.functions import CharLength
***************
*** 126,132 ****

@classmethod
def _vat_types(cls):
! return ['eu_vat']

def get_vat_code(self, name):
types = self._vat_types()
--- 127,133 ----

@classmethod
def _vat_types(cls):
! return ['eu_vat', 'mx_rfc']

def get_vat_code(self, name):
types = self._vat_types()
***************
*** 266,271 ****
--- 267,274 ----
type = None
if vat.is_valid(code):
type = 'eu_vat'
+ if rfc.is_valid(code):
+ type = 'mx_rfc'
identifiers.append(
cls(party=party_id, code=code, type=type))
cls.save(identifiers)
***************
*** 276,281 ****
--- 279,285 ----
def get_types(cls):
return [
(None, ''),
+ ('mx_rfc', 'RFC'),
('eu_vat', 'VAT'),
]

***************
*** 286,301 ****
return vat.compact(self.code)
except stdnum.exceptions.ValidationError:
pass
return self.code

def pre_validate(self):
super(PartyIdentifier, self).pre_validate()
self.check_code()

def check_code(self):
if self.type == 'eu_vat':
if not vat.is_valid(self.code):
! if self.party.id > 0:
party = self.party.rec_name
else:
party = ''
--- 290,323 ----
return vat.compact(self.code)
except stdnum.exceptions.ValidationError:
pass
+
+ if self.type == 'mx_rfc':
+ try:
+ return rfc.compact(self.code)
+ except stdnum.exceptions.ValidationError:
+ pass
return self.code

def pre_validate(self):
super(PartyIdentifier, self).pre_validate()
self.check_code()

+ @fields.depends('type', 'party', 'code')
def check_code(self):
if self.type == 'eu_vat':
if not vat.is_valid(self.code):
! if self.party and self.party.id > 0:
! party = self.party.rec_name
! else:
! party = ''
! self.raise_user_error('invalid_vat', {
! 'code': self.code,
! 'party': party,
! })
!
! if self.type == 'mx_rfc':
! if not rfc.is_valid(self.code):
! if self.party and self.party.id > 0:
party = self.party.rec_name
else:
party = ''
***************
*** 345,350 ****
--- 367,379 ----
parties = Party.browse(Transaction().context.get('active_ids'))
for party in parties:
for identifier in party.identifiers:
+ if identifier.type == 'mx_rfc':
+ if not rfc.is_valid(identifier.code):
+ parties_failed.append(party.id)
+ else:
+ parties_succeed.append(party.id)
+ continue
+
if identifier.type != 'eu_vat':
continue
try:
Sergi Almacellas Abellana
2016-07-11 14:48:03 UTC
Permalink
Por si le interesa a alguien, hice una modificación al módulo party para
incluir el RFC mexicano (equivalente al número VAT mexicano). Esto es
para la version 4.0 de tryton
(tryton-modules-party_4.0.1-1~8jessie+1_all.deb)
Hola,

En vez de hacer la modificación directamente al módulo party, lo suyo
seria hacer un módulo nuevo (por exemplo party_mex) que extendiera el
mòdulo original añadiendo el nuevo tipo.

De hecho el diseño de party esta pensado para que se puedan hacer estas
cosas.

Un saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
f***@gmail.com
2016-07-13 17:55:09 UTC
Permalink
En vez de hacer la modificación directamente al módulo party, lo suyo
seria hacer un módulo nuevo (por exemplo party_mex) que extendiera el
mòdulo original añadiendo el nuevo tipo.
Muchas gracias Sergi. En cuanto tenga tiempo, intentaré crear mi primer
módulo y será este. Si me permites una pregunta preliminar ¿puedo
simplemente redefinir las fucionnes? (sólo quiero copiar el contenido de
los archivos que modifique). Sé que puedo agregar valores a la estructura
de la base de datos, pero todavía no sé cómo (nunca lo he hecho).
Karla Stenger
2016-07-14 01:03:37 UTC
Permalink
En vez de hacer la modificación directamente al módulo party, lo suyo
seria hacer un módulo nuevo (por exemplo party_mex) que extendiera el
mòdulo original añadiendo el nuevo tipo.
Muchas gracias Sergi. En cuanto tenga tiempo, intentaré crear mi primer
módulo y será este. Si me permites una pregunta preliminar ¿puedo
simplemente redefinir las fucionnes? (sólo quiero copiar el contenido de
los archivos que modifique). Sé que puedo agregar valores a la estructura
de la base de datos, pero todavía no sé cómo (nunca lo he hecho).
Si estás por entrar en esa etapa, quiero sugerirte ​el modulo training
ubicado en http://hg.tryton.org (mira las instrucciones de uso en la
descripcion del propio repositorio).

También puedes ver la documentacion al respecto con pequeños modulos de
ejemplo:
http://tryton-documentation.readthedocs.io/en/latest/developer_guide/index.html

Verás que hacer pequeños cambios no es nada dificil.

Eso sí, en lugar de copiar y pegar todo el archivo que hayas modificado
puedes revisar con 'hg diff' aquellos métodos y clases que realmente hayas
modificado.

Cuanto más reducido y puntual sea tu módulo mejor, especialmente si planeas
publicarlo luego :-)

Lo más usual (creo) si piensas poner tryton en produccion es que tengas al
menos un módulo con tus personalizaciones.
Así cuando quieras actualizar a una nueva version de tryton solo tienes que
actualizar lo necesario de tu propio módulo, haciendo el proceso mil veces
más llevadero.

​Saludos,
Karla
--
-------------------------
Karla Mª Stenger Sábat
***@gmail.com
Sergi Almacellas Abellana
2016-07-14 07:44:49 UTC
Permalink
Post by Sergi Almacellas Abellana
En vez de hacer la modificación directamente al módulo party, lo suyo
seria hacer un módulo nuevo (por exemplo party_mex) que extendiera el
mòdulo original añadiendo el nuevo tipo.
Muchas gracias Sergi. En cuanto tenga tiempo, intentaré crear mi primer
módulo y será este. Si me permites una pregunta preliminar ¿puedo
simplemente redefinir las fucionnes? (sólo quiero copiar el contenido de
los archivos que modifique). Sé que puedo agregar valores a la
estructura de la base de datos, pero todavía no sé cómo (nunca lo he
hecho).
No es que puedas redefinir las funciones, sinó que *debes* redefinir las
funciones, pero teniendo en cuenta que tu módulo heredara las classes ya
existentes, y por lo tanto lo único que tendras que hacer es añadir tus
propios valores a las funciones que ya existen.

Un saludo,
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Loading...