Country, Subdivision and City for Colombia
This commit is contained in:
parent
8c4f584b7a
commit
f527c562e6
|
@ -1,10 +1,17 @@
|
|||
from trytond.pool import Pool
|
||||
from . import party
|
||||
from . import country
|
||||
|
||||
__all__ = ['register']
|
||||
|
||||
|
||||
def register():
|
||||
Pool.register(
|
||||
party.Party,
|
||||
party.PartyIdentifier,
|
||||
party.Address,
|
||||
country.Subdivision,
|
||||
country.City,
|
||||
module='account_co_co', type_='model')
|
||||
Pool.register(
|
||||
module='account_co_co', type_='wizard')
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="address_view_tree">
|
||||
<field name="model">party.address</field>
|
||||
<field name="inherit" ref="party.address_view_form"/>
|
||||
<field name="name">address_form</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
|
@ -0,0 +1,55 @@
|
|||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from trytond.model import ModelView, ModelSQL, fields, DeactivableMixin
|
||||
from trytond.pool import PoolMeta, Pool
|
||||
from trytond.pyson import Eval
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
|
||||
__all__ = ['Subdivision', 'City']
|
||||
|
||||
|
||||
|
||||
|
||||
class Subdivision(ModelSQL, ModelView):
|
||||
"Subdivision"
|
||||
|
||||
__metaclass__ = PoolMeta
|
||||
__name__ = 'country.subdivision'
|
||||
|
||||
city = fields.One2Many('country.city', 'subdivision', 'Citys')
|
||||
dane_code = fields.Char('Codigo Dane',
|
||||
help="Codigo Dane, usado en Colombia"
|
||||
)
|
||||
|
||||
|
||||
class City(DeactivableMixin, ModelSQL, ModelView):
|
||||
"City"
|
||||
__name__ = 'country.city'
|
||||
subdivision = fields.Many2One('country.subdivision', 'Subdivision',
|
||||
required=True, select=True,
|
||||
help="The suddivision where this City is.")
|
||||
name = fields.Char('Name', required=True, select=True, translate=True,
|
||||
help="The main identifier of the City.")
|
||||
code = fields.Char('Code', required=True, select=True,
|
||||
help="The ISO code of the City.")
|
||||
dane_code = fields.Char('Codigo Dane',
|
||||
help="Codigo Dane, usado en Colombia"
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(City, cls).__setup__()
|
||||
cls._order.insert(0, ('code', 'ASC'))
|
||||
|
||||
@classmethod
|
||||
def __register__(cls, module_name):
|
||||
pool = Pool()
|
||||
Data = pool.get('ir.model.data')
|
||||
data = Data.__table__()
|
||||
cursor = Transaction().connection.cursor()
|
||||
|
||||
super().__register__(module_name)
|
||||
|
||||
cursor.execute(*data.delete(where=(data.module == 'subdivision')
|
||||
& (data.model == cls.__name__)))
|
|
@ -0,0 +1,210 @@
|
|||
<?xml version="1.0"?>
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="country.country" id="50">
|
||||
<field name="name">Colombia</field>
|
||||
<field name="code">CO</field>
|
||||
<field name="code3">COL</field>
|
||||
<field name="code_numeric">170</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-91">
|
||||
<field name="name">Amazonas</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-91</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-05">
|
||||
<field name="name">Antioquia</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-05</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-81">
|
||||
<field name="name">Arauca</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-81</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-08">
|
||||
<field name="name">Atlántico</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-08</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-13">
|
||||
<field name="name">Bolívar</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-13</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-15">
|
||||
<field name="name">Boyacá</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-15</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-17">
|
||||
<field name="name">Caldas</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-17</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-18">
|
||||
<field name="name">Caquetá</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-18</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-85">
|
||||
<field name="name">Casanare</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-85</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-19">
|
||||
<field name="name">Cauca</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-19</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-20">
|
||||
<field name="name">Cesar</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-20</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-27">
|
||||
<field name="name">Chocó</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-27</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-23">
|
||||
<field name="name">Córdoba</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-23</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-25">
|
||||
<field name="name">Cundinamarca</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-25</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-11">
|
||||
<field name="name">Bogotá</field>
|
||||
<field name="type">capital district</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-11</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-94">
|
||||
<field name="name">Guainía</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-94</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-95">
|
||||
<field name="name">Guaviare</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-95</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-41">
|
||||
<field name="name">Huila</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-41</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-44">
|
||||
<field name="name">La Guajira</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-44</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-47">
|
||||
<field name="name">Magdalena</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-47</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-50">
|
||||
<field name="name">Meta</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-50</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-52">
|
||||
<field name="name">Nariño</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-52</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-54">
|
||||
<field name="name">Norte de Santander</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-54</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-86">
|
||||
<field name="name">Putumayo</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-86</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-63">
|
||||
<field name="name">Quindío</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-63</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-66">
|
||||
<field name="name">Risaralda</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-66</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-88">
|
||||
<field name="name">San Andrés y Providencia</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-88</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-68">
|
||||
<field name="name">Santander</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-68</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-70">
|
||||
<field name="name">Sucre</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-70</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-73">
|
||||
<field name="name">Tolima</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-73</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-76">
|
||||
<field name="name">Valle del Cauca</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-76</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-97">
|
||||
<field name="name">Vaupés</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-97</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-99">
|
||||
<field name="name">Vichada</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-99</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</tryton>
|
|
@ -0,0 +1,34 @@
|
|||
Department,HASC,ISO,FIPS,NUTE,DANE,Dane #,Iso-country,Type,Population,Area(km.²),Area(mi.²),Capital
|
||||
Amazonas,CO.AM,AMA,CO01,20491,91,91,co-91,department,"46,95","109,665","42,342",Leticia
|
||||
Antioquia,CO.AN,ANT,CO02,20505,05,05,co-5,department,"5,601,507","63,612","24,561",Medellín
|
||||
Arauca,CO.AR,ARA,CO03,20781,81,81,co-81,department,"153,028","23,818","9,196",Arauca
|
||||
Atlántico,CO.AT,ATL,CO04,20208,08,08,co-8,department,"2,112,001","3,388","1,308",Barranquilla
|
||||
Bolívar,CO.BL,BOL,CO35,20213,13,13,co-13,department,"1,836,640","25,978","10,03",Cartagena
|
||||
Boyacá,CO.BY,BOY,CO36,20615,15,15,co-15,department,"1,210,982","23,189","8,953",Tunja
|
||||
Caldas,CO.CL,CAL,CO37,20617,17,17,co-17,department,"898,49","7,888","3,046",Manizales
|
||||
Caquetá,CO.CQ,CAQ,CO08,20418,18,18,co-18,department,"337,932","88,965","34,35",Florencia
|
||||
Casanare,CO.CS,CAS,CO32,20785,85,85,co-85,department,"281,294","44,64","17,236",Yopal
|
||||
Cauca,CO.CA,CAU,CO09,20319,19,19,co-19,department,"1,182,022","29,308","11,316",Popayán
|
||||
Cesar,CO.CE,CES,CO10,20220,20,20,co-20,department,"878,437","22,905","8,844",Valledupar
|
||||
Chocó,CO.CH,CHO,CO11,20327,27,27,co-27,department,"388,476","46,53","17,965",Quibdó
|
||||
Córdoba,CO.CO,COR,CO12,20223,23,23,co-23,department,"1,462,909","25,02","9,66",Montería
|
||||
Cundinamarca,CO.CU,CUN,CO33,20625,25,25,co-25,department,"2,228,682","22,478","8,679",Bogotá
|
||||
Bogotá,CO.DC,DC,CO34,20111,11,11,co-11,capital district,"6,778,691","1,732",669,Bogotá
|
||||
Guainía,CO.GN,GUA,CO15,20494,94,94,co-94,department,"18,797","72,238","27,891",Puerto Inírida
|
||||
Guaviare,CO.GV,GUV,CO14,20495,95,95,co-95,department,"56,758","42,327","16,343",San José del Guaviare
|
||||
Huila,CO.HU,HUI,CO16,20641,41,41,co-41,department,"1,001,476","19,89","7,68",Neiva
|
||||
La Guajira,CO.LG,LAG,CO17,20244,44,44,co-44,department,"655,943","20,848","8,049",Riohacha
|
||||
Magdalena,CO.MA,MAG,CO38,20247,47,47,co-47,department,"1,136,819","23,188","8,953",Santa Marta
|
||||
Meta,CO.ME,MET,CO19,20750,50,50,co-50,department,"713,772","85,635","33,064",Villavicencio
|
||||
Nariño,CO.NA,NAR,CO20,20352,52,52,co-52,department,"1,498,234","33,268","12,845",Pasto
|
||||
Norte de Santander,CO.NS,NSA,CO21,20554,54,54,co-54,department,"1,208,336","21,658","8,362",Cúcuta
|
||||
Putumayo,CO.PU,PUT,CO22,20486,86,86,co-86,department,"237,197","24,885","9,608",Mocoa
|
||||
Quindío,CO.QD,QUI,CO23,20663,63,63,co-63,department,"518,691","1,845",712,Armenia
|
||||
Risaralda,CO.RI,RIS,CO24,20666,66,66,co-66,department,"859,666","4,14","1,598",Pereira
|
||||
San Andrés y Providencia,CO.SA,SAP,CO25,20288,88,88,co-88,department,"59,573",44,17,San Andrés
|
||||
Santander,CO.ST,SAN,CO26,20568,68,68,co-68,department,"1,913,444","30,537","11,79",Bucaramanga
|
||||
Sucre,CO.SU,SUC,CO27,20270,70,70,co-70,department,"762,263","10,917","4,215",Sincelejo
|
||||
Tolima,CO.TO,TOL,CO28,20673,73,73,co-73,department,"1,312,304","23,562","9,097",Ibagué
|
||||
Valle del Cauca,CO.VC,VAC,CO29,20376,76,76,co-76,department,"4,052,535","22,14","8,548",Cali
|
||||
Vaupés,CO.VP,VAU,CO30,20497,97,97,co-97,department,"19,943","65,268","25,2",Mitú
|
||||
Vichada,CO.VD,VID,CO31,20799,99,99,co-99,department,"44,592","100,242","38,704",Puerto Carreño
|
|
|
@ -0,0 +1,209 @@
|
|||
<?xml version="1.0"?>
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="country.country" id="50">
|
||||
<field name="name">Colombia</field>
|
||||
<field name="code">CO</field>
|
||||
<field name="code3">COL</field>
|
||||
<field name="code_numeric">170</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-91">
|
||||
<field name="name">Amazonas</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-91</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-05">
|
||||
<field name="name">Antioquia</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-05</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-81">
|
||||
<field name="name">Arauca</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-81</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-08">
|
||||
<field name="name">Atlántico</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-08</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-13">
|
||||
<field name="name">Bolívar</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-13</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-15">
|
||||
<field name="name">Boyacá</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-15</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-17">
|
||||
<field name="name">Caldas</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-17</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-18">
|
||||
<field name="name">Caquetá</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-18</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-85">
|
||||
<field name="name">Casanare</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-85</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-19">
|
||||
<field name="name">Cauca</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-19</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-20">
|
||||
<field name="name">Cesar</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-20</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-27">
|
||||
<field name="name">Chocó</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-27</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-23">
|
||||
<field name="name">Córdoba</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-23</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-25">
|
||||
<field name="name">Cundinamarca</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-25</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-11">
|
||||
<field name="name">Bogotá</field>
|
||||
<field name="type">capital district</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-11</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-94">
|
||||
<field name="name">Guainía</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-94</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-95">
|
||||
<field name="name">Guaviare</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-95</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-41">
|
||||
<field name="name">Huila</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-41</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-44">
|
||||
<field name="name">La Guajira</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-44</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-47">
|
||||
<field name="name">Magdalena</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-47</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-50">
|
||||
<field name="name">Meta</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-50</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-52">
|
||||
<field name="name">Nariño</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-52</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-54">
|
||||
<field name="name">Norte de Santander</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-54</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-86">
|
||||
<field name="name">Putumayo</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-86</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-63">
|
||||
<field name="name">Quindío</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-63</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-66">
|
||||
<field name="name">Risaralda</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-66</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-88">
|
||||
<field name="name">San Andrés y Providencia</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-88</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-68">
|
||||
<field name="name">Santander</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-68</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-70">
|
||||
<field name="name">Sucre</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-70</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-73">
|
||||
<field name="name">Tolima</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-73</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-76">
|
||||
<field name="name">Valle del Cauca</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-76</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-97">
|
||||
<field name="name">Vaupés</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-97</field>
|
||||
</record>
|
||||
<record model="country.subdivision" id="CO-99">
|
||||
<field name="name">Vichada</field>
|
||||
<field name="type">department</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">CO-99</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
|
@ -0,0 +1,53 @@
|
|||
"""
|
||||
Convierte el archivo departamentos_colombia.csv
|
||||
en subdivision_colombia.xml
|
||||
"""
|
||||
|
||||
import csv
|
||||
model = 'country.subdivision'
|
||||
departamentos = open('departamentos_colombia.csv','r')
|
||||
|
||||
departamentos_xml = open('departamentos_colombia.xml','w')
|
||||
|
||||
departamentos_reader = csv.reader(departamentos)
|
||||
departamentos_header = next(departamentos_reader)
|
||||
d_fields = {departamentos_header[x]:x for x in range(0,len(departamentos_header))}
|
||||
|
||||
Departamentos = {}
|
||||
|
||||
departamentos_xml.write('''<?xml version="1.0"?>
|
||||
<tryton>
|
||||
<data>
|
||||
''')
|
||||
departamentos_xml.write(''' <record model="country.country" id="50">
|
||||
<field name="name">Colombia</field>
|
||||
<field name="code">CO</field>
|
||||
<field name="code3">COL</field>
|
||||
<field name="code_numeric">170</field>
|
||||
</record>
|
||||
''')
|
||||
|
||||
|
||||
for row in departamentos_reader:
|
||||
dane_code = row[d_fields['DANE']]
|
||||
country_id = "50"
|
||||
departamentos_xml.write(''' <record model="{model}" id="{id}">
|
||||
<field name="name">{name}</field>
|
||||
<field name="type">{types}</field>
|
||||
<field name="country" ref="50"/>
|
||||
<field name="code">{code}</field>
|
||||
</record>
|
||||
'''.format(
|
||||
model=model,
|
||||
id="CO-"+str(dane_code),
|
||||
name=row[d_fields['Department']],
|
||||
types = row[d_fields['Type']],
|
||||
code="CO-"+str(dane_code),
|
||||
dane_code=dane_code
|
||||
))
|
||||
departamentos_xml.write(""" </data>
|
||||
</tryton>
|
||||
"""
|
||||
)
|
||||
departamentos.close()
|
||||
departamentos_xml.close()
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,56 @@
|
|||
"""
|
||||
Convierte el archivo municipios_colombia.csv y departamentos_colombia.csv
|
||||
en municipios_colombia.xml
|
||||
"""
|
||||
|
||||
import csv
|
||||
model = 'country.city'
|
||||
municipios = open('municipios_colombia.csv','r')
|
||||
departamentos = open('departamentos_colombia.csv','r')
|
||||
|
||||
municipios_xml = open('municipios_colombia.xml','w')
|
||||
#departamentos_xml = open('departamentos_colombia.xml','w')
|
||||
|
||||
municipios_reader = csv.reader(municipios)
|
||||
departamentos_reader = csv.reader(departamentos)
|
||||
departamentos_header = next(departamentos_reader)
|
||||
d_fields = {departamentos_header[x]:x for x in range(0,len(departamentos_header))}
|
||||
|
||||
Departamentos = {}
|
||||
for departamento in departamentos_reader:
|
||||
#iso_id = 'co-' + str(departamento[d_fields['ISO']]).lower
|
||||
dane_code = int(departamento[d_fields['DANE']])
|
||||
Departamentos [dane_code] = dict(zip(list(d_fields.keys()),departamento))
|
||||
departamentos.close()
|
||||
|
||||
municipios_header = next(municipios_reader)
|
||||
m_fields = {municipios_header[x]:x for x in range(0,len(municipios_header))}
|
||||
|
||||
municipios_xml.write("""<?xml version="1.0"?>
|
||||
<tryton>
|
||||
<data>
|
||||
""")
|
||||
for row in municipios_reader:
|
||||
dane_code = row[m_fields['department']] + row[m_fields['code']]
|
||||
depto_id = "CO-" + Departamentos[int(row[m_fields['department']])]['DANE']
|
||||
municipios_xml.write(""" <record model="{model}" id="{id}">
|
||||
<field name="name">{name}</field>
|
||||
<field name="dane_code">{dane_code}</field>
|
||||
<field name="subdivision" ref="{depto_id}"/>
|
||||
<field name="code">{code}</field>
|
||||
</record>
|
||||
""".format(
|
||||
model=model,
|
||||
id="CO-"+str(dane_code),
|
||||
name=row[m_fields['name']],
|
||||
code="CO-"+str(dane_code),
|
||||
dane_code=dane_code,
|
||||
depto_id=depto_id,
|
||||
))
|
||||
municipios_xml.write("""
|
||||
</data>
|
||||
</tryton>
|
||||
"""
|
||||
)
|
||||
municipios.close()
|
||||
municipios_xml.close()
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,308 @@
|
|||
from trytond.model import fields, ModelSQL, ModelView, Unique, sequence_ordered
|
||||
from trytond.pool import PoolMeta, Pool
|
||||
from trytond.pyson import Eval, Not, Equal
|
||||
import logging
|
||||
from trytond.exceptions import UserError
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
__all__ = ['PartyIdentifier','Party','ContactMechanism','Address']
|
||||
|
||||
|
||||
CO_IDENTIFIERS = [
|
||||
(None, ''),
|
||||
('11', 'Registro Civil'),
|
||||
('12', 'Tarjeta de Identidad'),
|
||||
('13', 'Cedula de Ciudadania'),
|
||||
('21', 'Tarjeta de Extranjeria'),
|
||||
('22', 'Cedula de Extranjeria'),
|
||||
('31', 'NIT'),
|
||||
('41', 'Pasaporte'),
|
||||
('42', 'Tipo de Documento Extrangero'),
|
||||
('43', 'Documento de identificación extranjero'),
|
||||
('50', 'NIT de otro país'),
|
||||
('91', 'NUIP')
|
||||
]
|
||||
CO_CONTACT_MECHANISM_TYPES = [
|
||||
('sms','SMS')
|
||||
]
|
||||
|
||||
class Party(ModelSQL,ModelView):
|
||||
"Party Colombian"
|
||||
|
||||
__name__='party.party'
|
||||
__metaclass__ = PoolMeta
|
||||
|
||||
first_name = fields.Char("Primer Nombre",states={
|
||||
'invisible': Not(Eval('type_person') == 'persona_natural'),}
|
||||
)
|
||||
second_name = fields.Char("Segundo Nombre",states={
|
||||
'invisible': Not(Eval('type_person') == 'persona_natural'),}
|
||||
)
|
||||
first_surname = fields.Char("Primer Apellido",states={
|
||||
'invisible': Not(Eval('type_person') == 'persona_natural'),}
|
||||
)
|
||||
second_surname = fields.Char("Segundo Apellido",states={
|
||||
'invisible': Not(Eval('type_person') == 'persona_natural'),},
|
||||
depends=['type_person'])
|
||||
birth_date = fields.Date('Fecha de nacimiento')
|
||||
regime_tax = fields.Selection([
|
||||
(None, ''),
|
||||
('regimen_simplificado', 'Regimen Simplificado'),
|
||||
('regimen_comun', 'Regimen Comun'),
|
||||
('gran_contribuyente', 'Gran Contribuyente'),
|
||||
('entidad_estatal', 'Entidad Estatal'),
|
||||
('domiciliado_extranjero', 'Domiciliado en Extranjero'),
|
||||
], 'Regimen de Impuestos')
|
||||
type_person = fields.Selection([
|
||||
(None, ''),
|
||||
('persona_natural', 'Persona Natural'),
|
||||
('persona_juridica', 'Persona Juridica'),
|
||||
], 'Tipo de Persona')
|
||||
self_withholding = fields.Boolean('Self Withholding')
|
||||
declarant = fields.Boolean('Declarant')
|
||||
main_ciiu_code = fields.Char('Main CIIU Code', size=4)
|
||||
secondary_ciiu_code = fields.Char('Secondary CIIU Code', size=4)
|
||||
other_ciiu_code = fields.Char('Other CIIU Code', size=4)
|
||||
age = fields.Function(fields.Integer('Edad'),'on_change_with_age')
|
||||
type_tax_identifier = fields.Function(fields.Selection('get_types_identifier','Tipo de Identidad'),'on_change_with_type_tax_identifier')
|
||||
|
||||
|
||||
@staticmethod
|
||||
def default_type_person():
|
||||
return 'persona_natural'
|
||||
|
||||
@classmethod
|
||||
def tax_identifier_types(cls):
|
||||
#return ['11', '12', '13', '21', '22', '31', '41', '42', '43', '50', '91']
|
||||
return ['31']
|
||||
|
||||
@fields.depends('birth_date')
|
||||
def on_change_with_age(self,name=None):
|
||||
if self.birth_date:
|
||||
Date = Pool().get('ir.date')
|
||||
today = Date.today()
|
||||
age = today.year - self.birth_date.year
|
||||
age -= (today.month, today.day) < (self.birth_date.month, self.birth_date.day)
|
||||
return age
|
||||
|
||||
@fields.depends('name','first_name','second_name','first_surname',
|
||||
'second_surname','type_person')
|
||||
def on_change_type_person(self):
|
||||
if self.type_person == 'persona_natural':
|
||||
self.on_change_name()
|
||||
if self.type_person == 'persona_juridica':
|
||||
pass
|
||||
|
||||
@fields.depends('name','first_name','second_name','first_surname',
|
||||
'second_surname','type_person')
|
||||
def on_change_name(self):
|
||||
self.rebuild_name()
|
||||
|
||||
@fields.depends('name','first_name','second_name','first_surname',
|
||||
'second_surname','type_person')
|
||||
def on_change_first_name(self):
|
||||
self.rebuild_name()
|
||||
|
||||
@fields.depends('name','first_name','second_name','first_surname',
|
||||
'second_surname','type_person')
|
||||
def on_change_second_name(self):
|
||||
self.rebuild_name()
|
||||
|
||||
@fields.depends('name','first_name','second_name','first_surname',
|
||||
'second_surname','type_person')
|
||||
def on_change_second_surname(self):
|
||||
self.rebuild_name()
|
||||
|
||||
@fields.depends('name','first_name','second_name','first_surname',
|
||||
'second_surname','type_person')
|
||||
def on_change_first_surname(self):
|
||||
self.rebuild_name()
|
||||
|
||||
def rebuild_name(self):
|
||||
"""reconstruye los campos relacionados con el nombre dependiendo de
|
||||
estos y del tipo de persona."""
|
||||
|
||||
if self.type_person == 'persona_natural':
|
||||
if not (self.first_name or self.second_name \
|
||||
or self.first_surname or self.second_surname):
|
||||
if self.name:
|
||||
self.first_name, self.second_name, self.first_surname, \
|
||||
self.second_surname = self.split_name(self.name)
|
||||
else:
|
||||
return
|
||||
else:
|
||||
self.name = self.get_full_name()
|
||||
if self.type_person == 'persona_juridica':
|
||||
if self.name:
|
||||
self.clean_split_name()
|
||||
else:
|
||||
self.name = self.get_full_name()
|
||||
|
||||
def clean_split_name(self):
|
||||
self.first_name = self.second_name = self.first_surname = self.second_surname = ''
|
||||
|
||||
@staticmethod
|
||||
def split_name(name):
|
||||
"""Divide un nombre completo en una lista de 4 elementos"""
|
||||
|
||||
second_surname = None
|
||||
first_surname = None
|
||||
second_name = None
|
||||
first_name = None
|
||||
names = name.split(' ')
|
||||
if len(names) > 0:
|
||||
first_name = names[0]
|
||||
if len(names) == 2:
|
||||
second_surname = None
|
||||
first_surname = names[1]
|
||||
elif len(names) == 3:
|
||||
first_surname = names[1]
|
||||
second_surname = names[2]
|
||||
elif len(names) >= 4:
|
||||
second_name = names[1]
|
||||
first_surname = names[2]
|
||||
second_surname = " ".join(names[3:])
|
||||
return [first_name,second_name,first_surname, second_surname]
|
||||
|
||||
@fields.depends('identifiers')
|
||||
def on_change_with_type_tax_identifier(self,name=None):
|
||||
types = self._tax_identifier_types()
|
||||
if self.identifiers:
|
||||
for identifier in self.identifiers:
|
||||
if identifier.type in types:
|
||||
return identifier.type
|
||||
|
||||
@fields.depends('identifiers')
|
||||
def on_change_with_tax_identifier(self,name=None):
|
||||
if self.identifiers:
|
||||
return self.get_tax_identifier(name)
|
||||
|
||||
@classmethod
|
||||
def _tax_identifier_types(cls):
|
||||
types = super(Party, cls).tax_identifier_types()
|
||||
types.extend(['31','13'])
|
||||
return types
|
||||
|
||||
def get_full_name(self, name=None):
|
||||
if self.type_person == 'persona_natural':
|
||||
name_list = [self.first_name, self.second_name,
|
||||
self.first_surname,self.second_surname]
|
||||
return " ".join([x for x in name_list if x])
|
||||
return self.name
|
||||
|
||||
@staticmethod
|
||||
def get_types_identifier():
|
||||
PartyIdentifier = Pool().get('party.identifier')
|
||||
return PartyIdentifier.type.selection
|
||||
|
||||
def pre_validate(self):
|
||||
super(Party, self).pre_validate()
|
||||
if not self.identifiers:
|
||||
self.raise_user_error("El tercero debe tener un documento de identidad")
|
||||
|
||||
class PartyIdentifier(ModelSQL, ModelView):
|
||||
"Party Identifier Colombian"
|
||||
|
||||
__name__ = "party.identifier"
|
||||
__metaclass__ = PoolMeta
|
||||
|
||||
expedition_city = fields.Many2One("country.subdivision",
|
||||
'Ciudad de Expedicion',
|
||||
help="Lugar donde fue expedido el documento de identidad",
|
||||
domain=[('parent', '!=', None)],
|
||||
states = {'invisible':Not(Equal(Eval('type'),'13'))}
|
||||
)
|
||||
rut = fields.Boolean('Rut')
|
||||
check_digit = fields.Function(fields.Integer('DV',
|
||||
help='Digito de Verificacion colombiano',
|
||||
states = {'invisible':Not(Equal(Eval('type'),'31'))})
|
||||
,'on_change_with_check_digit')
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(PartyIdentifier, cls).__setup__()
|
||||
cls.type.selection = CO_IDENTIFIERS
|
||||
table = cls.__table__()
|
||||
cls._sql_constraints += [
|
||||
('UniqueIdentifier', Unique(table, table.code,table.type),
|
||||
'La identificacion ya existe')
|
||||
]
|
||||
|
||||
|
||||
@fields.depends('type','code')
|
||||
def on_change_with_check_digit(self,name=None):
|
||||
try:
|
||||
import stdnum.co.nit #la version debe ser mayor a la 1.2 o 1.3
|
||||
except:
|
||||
self.raise_user_error('Se requiere modulo stdnum.co.nit')
|
||||
if self.type and self.code:
|
||||
if self.type in ('31'):
|
||||
return int(stdnum.co.nit.calc_check_digit(self.code))
|
||||
|
||||
@fields.depends('type', 'party', 'code')
|
||||
def check_code(self):
|
||||
super(PartyIdentifier, self).check_code()
|
||||
if self.type == '31':
|
||||
#generalizar multiples paises
|
||||
#puede ser por el country del party de la company actual
|
||||
try:
|
||||
import stdnum.co.nit #la version debe ser mayor a la 1.2 o 1.3
|
||||
except:
|
||||
self.raise_user_error('Se requiere modulo stdnum.co.nit')
|
||||
|
||||
if not stdnum.co.nit.is_valid(self.code + str(self.check_digit)):
|
||||
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 in ['12','13','31'] and not self.code.isdigit():
|
||||
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
|
||||
})
|
||||
|
||||
@staticmethod
|
||||
def default_type_document():
|
||||
return '13'
|
||||
|
||||
def get_rec_name(self,name=None):
|
||||
if self.code:
|
||||
return self.code
|
||||
elif self.id:
|
||||
return self.id
|
||||
return ''
|
||||
|
||||
class ContactMechanism(sequence_ordered(), ModelSQL, ModelView):
|
||||
"Contact Mechanism"
|
||||
__name__ = 'party.contact_mechanism'
|
||||
__metaclass__ = PoolMeta
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(ContactMechanism, cls).__setup__()
|
||||
cls.type.selection.extend(CO_CONTACT_MECHANISM_TYPES)
|
||||
|
||||
|
||||
class Address(ModelSQL, ModelView):
|
||||
"Address"
|
||||
|
||||
__metaclass__ = PoolMeta
|
||||
__name__ = 'party.address'
|
||||
|
||||
citys = fields.Many2One("country.city",
|
||||
'City',
|
||||
domain=[
|
||||
('subdivision', '=', Eval('subdivision', 0))],
|
||||
depends=['subdivision']
|
||||
)
|
||||
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<!-- Inicio Party -->
|
||||
<record model="ir.ui.view" id="party_view_form">
|
||||
<field name="model">party.party</field>
|
||||
<field name="inherit" ref="party.party_view_form"/>
|
||||
<field name="name">party_form</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="party_view_tree">
|
||||
<field name="model">party.party</field>
|
||||
<field name="inherit" ref="party.party_view_tree"/>
|
||||
<field name="name">party_tree</field>
|
||||
</record>
|
||||
<!-- Fin Party -->
|
||||
<!-- Inicio Identification -->
|
||||
<record model="ir.ui.view" id="identifier_view_form">
|
||||
<field name="model">party.identifier</field>
|
||||
<field name="inherit" ref="party.identifier_form"/>
|
||||
<field name="name">identifier_form</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="identifier_view_tree">
|
||||
<field name="model">party.identifier</field>
|
||||
<field name="inherit" ref="party.identifier_list"/>
|
||||
<field name="name">identifier_tree</field>
|
||||
</record>
|
||||
<!-- Fin Identification -->
|
||||
</tryton>
|
|
@ -2,4 +2,9 @@
|
|||
version=5.4
|
||||
depends:
|
||||
ir
|
||||
party
|
||||
xml:
|
||||
party.xml
|
||||
address.xml
|
||||
departamentos_colombia.xml
|
||||
municipios_colombia.xml
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0"?>
|
||||
<data>
|
||||
<xpath expr="//label[@name='city']" position="replace"></xpath>
|
||||
<xpath expr="//field[@name='city']" position="replace"></xpath>
|
||||
<xpath expr="//field[@name='subdivision']" position="after">
|
||||
<label name="citys"/>
|
||||
<field name="citys" widget="selection"/>
|
||||
</xpath>
|
||||
</data>
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0"?>
|
||||
<data>
|
||||
<xpath
|
||||
expr="/form/field[@name='code']"
|
||||
position="after">
|
||||
<label name="expedition_city"/>
|
||||
<field name="expedition_city"/>
|
||||
<label name="check_digit"/>
|
||||
<field name="check_digit"/>
|
||||
<label name="rut"/>
|
||||
<field name="rut"/>
|
||||
</xpath>
|
||||
</data>
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0"?>
|
||||
<data>
|
||||
<xpath
|
||||
expr="/tree/field[@name='code']"
|
||||
position="after">
|
||||
<field name="expedition_city"/>
|
||||
<field name="check_digit"/>
|
||||
</xpath>
|
||||
</data>
|
|
@ -0,0 +1,51 @@
|
|||
<?xml version="1.0"?>
|
||||
<data>
|
||||
<xpath
|
||||
expr="/form/group[@id='checkboxes']"
|
||||
position="after">
|
||||
<label name="first_name"/>
|
||||
<field name="first_name"/>
|
||||
<label name="second_name"/>
|
||||
<field name="second_name"/>
|
||||
<label name="first_surname"/>
|
||||
<field name="first_surname"/>
|
||||
|
||||
<label name="second_surname"/>
|
||||
<field name="second_surname"/>
|
||||
<label name="type_tax_identifier"/>
|
||||
<field name="type_tax_identifier"/>
|
||||
|
||||
<label name="tax_identifier"/>
|
||||
<field name="tax_identifier"/>
|
||||
<label name="type_person"/>
|
||||
<field name="type_person"/>
|
||||
|
||||
<label name="birth_date"/>
|
||||
<field name="birth_date"/>
|
||||
<label name="age"/>
|
||||
<field name="age"/>
|
||||
<label name="age"/>
|
||||
<field name="age"/>
|
||||
</xpath>
|
||||
<xpath
|
||||
expr="/form/notebook/page[@name='identifiers']"
|
||||
position="after">
|
||||
<page string="Colombia" id="party_co">
|
||||
|
||||
<label name="regime_tax"/>
|
||||
<field name="regime_tax"/>
|
||||
|
||||
<label name="self_withholding"/>
|
||||
<field name="self_withholding"/>
|
||||
<label name="declarant"/>
|
||||
<field name="declarant"/>
|
||||
<label name="main_ciiu_code"/>
|
||||
<field name="main_ciiu_code"/>
|
||||
<label name="secondary_ciiu_code"/>
|
||||
<field name="secondary_ciiu_code"/>
|
||||
<label name="other_ciiu_code"/>
|
||||
<field name="other_ciiu_code"/>
|
||||
</page>
|
||||
|
||||
</xpath>
|
||||
</data>
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0"?>
|
||||
<data>
|
||||
<xpath
|
||||
expr="/tree/field[@name='name']"
|
||||
position="after">
|
||||
<field name="first_name"/>
|
||||
<field name="second_name"/>
|
||||
<field name="first_surname"/>
|
||||
<field name="second_surname"/>
|
||||
<field name="age"/>
|
||||
</xpath>
|
||||
<xpath
|
||||
expr="/tree/field[@name='tax_identifier']"
|
||||
position="before">
|
||||
<field name="type_tax_identifier"/>
|
||||
</xpath>
|
||||
</data>
|
Loading…
Reference in New Issue