From 15fe3d43b4b925a32b42eb46048a33987e10336b Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Tue, 26 Jan 2016 16:40:41 +0100 Subject: [PATCH] [IMP] base: add required state for address Some address have required state. We add by default moreover 500 new states. We try also to merge duplicated states wich have the same country and code. Once merge is done, we try to had the unicity constraint to avoid futur duplicates. Merge code, should be removed in v11. --- addons/website/controllers/main.py | 5 + openerp/addons/base/__openerp__.py | 1 + openerp/addons/base/res/post_base_data.xml | 6 + openerp/addons/base/res/res.country.state.csv | 585 ++++++++++++++++++ openerp/addons/base/res/res_country.py | 55 +- 5 files changed, 650 insertions(+), 2 deletions(-) create mode 100644 openerp/addons/base/res/post_base_data.xml diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index b161b5411fb..fbae3fd57ca 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -92,6 +92,11 @@ class Website(openerp.addons.web.controllers.main.Home): return request.render(page, values) + @http.route(['/website/country_infos/'], type='json', auth="public", methods=['POST'], website=True) + def country_infos(self, country, **kw): + fields = country.get_address_fields() + return dict(fields=fields, states=[(st.id, st.name, st.code) for st in country.state_ids], phone_code=country.phone_code) + @http.route(['/robots.txt'], type='http', auth="public") def robots(self): return request.render('website.robots', {'url_root': request.httprequest.url_root}, mimetype='text/plain') diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py index 4cd21782039..f9034441878 100644 --- a/openerp/addons/base/__openerp__.py +++ b/openerp/addons/base/__openerp__.py @@ -63,6 +63,7 @@ The kernel of Odoo, needed for all installation. 'res/ir_property_view.xml', 'res/res_security.xml', 'security/ir.model.access.csv', + 'res/post_base_data.xml', # End because post_process ], 'demo': [ 'base_demo.xml', diff --git a/openerp/addons/base/res/post_base_data.xml b/openerp/addons/base/res/post_base_data.xml new file mode 100644 index 00000000000..17aabd04e9c --- /dev/null +++ b/openerp/addons/base/res/post_base_data.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/openerp/addons/base/res/res.country.state.csv b/openerp/addons/base/res/res.country.state.csv index 1cb280a6121..e9f7670c2b7 100644 --- a/openerp/addons/base/res/res.country.state.csv +++ b/openerp/addons/base/res/res.country.state.csv @@ -58,3 +58,588 @@ state_us_48,us,"Washington","WA" state_us_49,us,"West Virginia","WV" state_us_50,us,"Wisconsin","WI" state_us_51,us,"Wyoming","WY" +state_us_as,us,"American Samoa","AS" +state_us_fm,us,"Federated States of Micronesia","FM" +state_us_gu,us,"Guam","GU" +state_us_mh,us,"Marshall Islands","MH" +state_us_mp,us,"Northern Mariana Islands","MP" +state_us_pw,us,"Palau","PW" +state_us_pr,us,"Puerto Rico","PR" +state_us_vi,us,"Virgin Islands","VI" +state_us_aa,us,"Armed Forces Americas","AA" +state_us_ae,us,"Armed Forces Europe","AE" +state_us_ap,us,"Armed Forces Pacific","AP" +state_br_al,br,"Alagoas","AL" +state_br_ap,br,"Amapá","AP" +state_br_am,br,"Amazonas","AM" +state_br_ba,br,"Bahia","BA" +state_br_ce,br,"Ceará","CE" +state_br_df,br,"Distrito Federal","DF" +state_br_es,br,"Espírito Santo","ES" +state_br_go,br,"Goiás","GO" +state_br_ma,br,"Maranhão","MA" +state_br_mt,br,"Mato Grosso","MT" +state_br_ms,br,"Mato Grosso do Sul","MS" +state_br_mg,br,"Minas Gerais","MG" +state_br_pa,br,"Pará","PA" +state_br_pb,br,"Paraíba","PB" +state_br_pr,br,"Paraná","PR" +state_br_pe,br,"Pernambuco","PE" +state_br_pi,br,"Piauí","PI" +state_br_rj,br,"Rio de Janeiro","RJ" +state_br_rn,br,"Rio Grande do Norte","RN" +state_br_rs,br,"Rio Grande do Sul","RS" +state_br_ro,br,"Rondônia","RO" +state_br_rr,br,"Roraima","RR" +state_br_sc,br,"Santa Catarina","SC" +state_br_sp,br,"São Paulo","SP" +state_br_se,br,"Sergipe","SE" +state_br_to,br,"Tocantins","TO" +state_ru_ad,ru,"Republic of Adygeya","AD" +state_ru_al,ru,"Altai Republic","AL" +state_ru_alt,ru,"Altai Krai","ALT" +state_ru_amu,ru,"Amur Oblast","AMU" +state_ru_ark,ru,"Arkhangelsk Oblast","ARK" +state_ru_ast,ru,"Astrakhan Oblast","AST" +state_ru_ba,ru,"Republic of Bashkortostan","BA" +state_ru_bel,ru,"Belgorod Oblast","BEL" +state_ru_bry,ru,"Bryansk Oblast","BRY" +state_ru_bu,ru,"Republic of Buryatia","BU" +state_ru_ce,ru,"Chechen Republic","CE" +state_ru_che,ru,"Chelyabinsk Oblast","CHE" +state_ru_chu,ru,"Chukotka Autonomous Okrug","CHU" +state_ru_cu,ru,"Chuvash Republic","CU" +state_ru_da,ru,"Republic of Dagestan","DA" +state_ru_in,ru,"Republic of Ingushetia","IN" +state_ru_irk,ru,"Irkutsk Oblast","IRK" +state_ru_iva,ru,"Ivanovo Oblast","IVA" +state_ru_kam,ru,"Kamchatka Krai","KAM" +state_ru_kb,ru,"Kabardino-Balkarian Republic","KB" +state_ru_kgd,ru,"Kaliningrad Oblast","KGD" +state_ru_kl,ru,"Republic of Kalmykia","KL" +state_ru_klu,ru,"Kaluga Oblast","KLU" +state_ru_kc,ru,"Karachay–Cherkess Republic","KC" +state_ru_kr,ru,"Republic of Karelia","KR" +state_ru_kem,ru,"Kemerovo Oblast","KEM" +state_ru_kha,ru,"Khabarovsk Krai","KHA" +state_ru_kk,ru,"Republic of Khakassia","KK" +state_ru_khm,ru,"Khanty-Mansi Autonomous Okrug","KHM" +state_ru_kir,ru,"Kirov Oblast","KIR" +state_ru_ko,ru,"Komi Republic","KO" +state_ru_kos,ru,"Kostroma Oblast","KOS" +state_ru_kda,ru,"Krasnodar Krai","KDA" +state_ru_kya,ru,"Krasnoyarsk Krai","KYA" +state_ru_kgn,ru,"Kurgan Oblast","KGN" +state_ru_krs,ru,"Kursk Oblast","KRS" +state_ru_len,ru,"Leningrad Oblast","LEN" +state_ru_lip,ru,"Lipetsk Oblast","LIP" +state_ru_mag,ru,"Magadan Oblast","MAG" +state_ru_me,ru,"Mari El Republic","ME" +state_ru_mo,ru,"Republic of Mordovia","MO" +state_ru_mos,ru,"Moscow Oblast","MOS" +state_ru_mow,ru,"Moscow","MOW" +state_ru_mur,ru,"Murmansk Oblast","MUR" +state_ru_niz,ru,"Nizhny Novgorod Oblast","NIZ" +state_ru_ngr,ru,"Novgorod Oblast","NGR" +state_ru_nvs,ru,"Novosibirsk Oblast","NVS" +state_ru_oms,ru,"Omsk Oblast","OMS" +state_ru_ore,ru,"Orenburg Oblast","ORE" +state_ru_orl,ru,"Oryol Oblast","ORL" +state_ru_pnz,ru,"Penza Oblast","PNZ" +state_ru_per,ru,"Perm Krai","PER" +state_ru_pri,ru,"Primorsky Krai","PRI" +state_ru_psk,ru,"Pskov Oblast","PSK" +state_ru_ros,ru,"Rostov Oblast","ROS" +state_ru_rya,ru,"Ryazan Oblast","RYA" +state_ru_sa,ru,"Sakha Republic (Yakutia)","SA" +state_ru_sak,ru,"Sakhalin Oblast","SAK" +state_ru_sam,ru,"Samara Oblast","SAM" +state_ru_spe,ru,"Saint Petersburg","SPE" +state_ru_sar,ru,"Saratov Oblast","SAR" +state_ru_se,ru,"Republic of North Ossetia–Alania","SE" +state_ru_smo,ru,"Smolensk Oblast","SMO" +state_ru_sta,ru,"Stavropol Krai","STA" +state_ru_sve,ru,"Sverdlovsk Oblast","SVE" +state_ru_tam,ru,"Tambov Oblast","TAM" +state_ru_ta,ru,"Republic of Tatarstan","TA" +state_ru_tom,ru,"Tomsk Oblast","TOM" +state_ru_tul,ru,"Tula Oblast","TUL" +state_ru_tve,ru,"Tver Oblast","TVE" +state_ru_tyu,ru,"Tyumen Oblast","TYU" +state_ru_ty,ru,"Tyva Republic","TY" +state_ru_ud,ru,"Udmurtia","UD" +state_ru_uly,ru,"Ulyanovsk Oblast","ULY" +state_ru_vla,ru,"Vladimir Oblast","VLA" +state_ru_vgg,ru,"Volgograd Oblast","VGG" +state_ru_vlg,ru,"Vologda Oblast","VLG" +state_ru_vor,ru,"Voronezh Oblast","VOR" +state_ru_yan,ru,"Yamalo-Nenets Autonomous Okrug","YAN" +state_ru_yar,ru,"Yaroslavl Oblast","YAR" +state_ru_yev,ru,"Jewish Autonomous Oblast","YEV" +state_gt_ave,gt,"Alta Verapaz","AVE" +state_gt_bve,gt,"Baja Verapaz","BVE" +state_gt_cmt,gt,"Chimaltenango","CMT" +state_gt_cqm,gt,"Chiquimula","CQM" +state_gt_epr,gt,"El Progreso","EPR" +state_gt_esc,gt,"Escuintla","ESC" +state_gt_gua,gt,"Guatemala","GUA" +state_gt_hue,gt,"Huehuetenango","HUE" +state_gt_iza,gt,"Izabal","IZA" +state_gt_jal,gt,"Jalapa","JAL" +state_gt_jut,gt,"Jutiapa","JUT" +state_gt_pet,gt,"Petén","PET" +state_gt_que,gt,"Quetzaltenango","QUE" +state_gt_qui,gt,"Quiché","QUI" +state_gt_ret,gt,"Retalhuleu","RET" +state_gt_sac,gt,"Sacatepéquez","SAC" +state_gt_sma,gt,"San Marcos","SMA" +state_gt_sro,gt,"Santa Rosa","SRO" +state_gt_sol,gt,"Sololá","SOL" +state_gt_suc,gt,"Suchitepéquez","SUC" +state_gt_tot,gt,"Totonicapán","TOT" +state_gt_zac,gt,"Zacapa","ZAC" +state_jp_jp-23,jp,"Aichi","JP-23" +state_jp_jp-05,jp,"Akita","JP-05" +state_jp_jp-02,jp,"Aomori","JP-02" +state_jp_jp-12,jp,"Chiba","JP-12" +state_jp_jp-38,jp,"Ehime","JP-38" +state_jp_jp-18,jp,"Fukui","JP-18" +state_jp_jp-40,jp,"Fukuoka","JP-40" +state_jp_jp-07,jp,"Fukushima","JP-07" +state_jp_jp-21,jp,"Gifu","JP-21" +state_jp_jp-10,jp,"Gunma","JP-10" +state_jp_jp-34,jp,"Hiroshima","JP-34" +state_jp_jp-01,jp,"Hokkaidō","JP-01" +state_jp_jp-28,jp,"Hyōgo","JP-28" +state_jp_jp-08,jp,"Ibaraki","JP-08" +state_jp_jp-17,jp,"Ishikawa","JP-17" +state_jp_jp-03,jp,"Iwate","JP-03" +state_jp_jp-37,jp,"Kagawa","JP-37" +state_jp_jp-46,jp,"Kagoshima","JP-46" +state_jp_jp-14,jp,"Kanagawa","JP-14" +state_jp_jp-39,jp,"Kōchi","JP-39" +state_jp_jp-43,jp,"Kumamoto","JP-43" +state_jp_jp-26,jp,"Kyōto","JP-26" +state_jp_jp-24,jp,"Mie","JP-24" +state_jp_jp-04,jp,"Miyagi","JP-04" +state_jp_jp-45,jp,"Miyazaki","JP-45" +state_jp_jp-20,jp,"Nagano","JP-20" +state_jp_jp-42,jp,"Nagasaki","JP-42" +state_jp_jp-29,jp,"Nara","JP-29" +state_jp_jp-15,jp,"Niigata","JP-15" +state_jp_jp-44,jp,"Ōita","JP-44" +state_jp_jp-33,jp,"Okayama","JP-33" +state_jp_jp-47,jp,"Okinawa","JP-47" +state_jp_jp-27,jp,"Ōsaka","JP-27" +state_jp_jp-41,jp,"Saga","JP-41" +state_jp_jp-11,jp,"Saitama","JP-11" +state_jp_jp-25,jp,"Shiga","JP-25" +state_jp_jp-32,jp,"Shimane","JP-32" +state_jp_jp-22,jp,"Shizuoka","JP-22" +state_jp_jp-09,jp,"Tochigi","JP-09" +state_jp_jp-36,jp,"Tokushima","JP-36" +state_jp_jp-31,jp,"Tottori","JP-31" +state_jp_jp-16,jp,"Toyama","JP-16" +state_jp_jp-13,jp,"Tōkyō","JP-13" +state_jp_jp-30,jp,"Wakayama","JP-30" +state_jp_jp-06,jp,"Yamagata","JP-06" +state_jp_jp-35,jp,"Yamaguchi","JP-35" +state_jp_jp-19,jp,"Yamanashi","JP-19" +state_pt_pt-01,pt,"Aveiro","PT-01" +state_pt_pt-02,pt,"Beja","PT-02" +state_pt_pt-03,pt,"Braga","PT-03" +state_pt_pt-04,pt,"Bragança","PT-04" +state_pt_pt-05,pt,"Castelo Branco","PT-05" +state_pt_pt-06,pt,"Coimbra","PT-06" +state_pt_pt-07,pt,"Évora","PT-07" +state_pt_pt-08,pt,"Faro","PT-08" +state_pt_pt-09,pt,"Guarda","PT-09" +state_pt_pt-10,pt,"Leiria","PT-10" +state_pt_pt-11,pt,"Lisboa","PT-11" +state_pt_pt-12,pt,"Portalegre","PT-12" +state_pt_pt-13,pt,"Porto","PT-13" +state_pt_pt-14,pt,"Santarém","PT-14" +state_pt_pt-15,pt,"Setúbal","PT-15" +state_pt_pt-16,pt,"Viana do Castelo","PT-16" +state_pt_pt-17,pt,"Vila Real","PT-17" +state_pt_pt-18,pt,"Viseu","PT-18" +state_pt_pt-20,pt,"Açores","PT-20" +state_pt_pt-30,pt,"Madeira","PT-30" +state_eg_dk,eg,"Dakahlia","DK" +state_eg_ba,eg,"Red Sea","BA" +state_eg_bh,eg,"Beheira","BH" +state_eg_fym,eg,"Faiyum","FYM" +state_eg_gh,eg,"Gharbia","GH" +state_eg_alx,eg,"Alexandria","ALX" +state_eg_is,eg,"Ismailia","IS" +state_eg_gz,eg,"Giza","GZ" +state_eg_mnf,eg,"Monufia","MNF" +state_eg_mn,eg,"Minya","MN" +state_eg_c,eg,"Cairo","C" +state_eg_kb,eg,"Qalyubia","KB" +state_eg_lx,eg,"Luxor","LX" +state_eg_wad,eg,"New Valley","WAD" +state_eg_shr,eg,"Al Sharqia","SHR" +state_eg_su,eg,"6th of October","SU" +state_eg_suz,eg,"Suez","SUZ" +state_eg_asn,eg,"Aswan","ASN" +state_eg_ast,eg,"Asyut","AST" +state_eg_bns,eg,"Beni Suef","BNS" +state_eg_pts,eg,"Port Said","PTS" +state_eg_dt,eg,"Damietta","DT" +state_eg_hu,eg,"Helwan","HU" +state_eg_js,eg,"South Sinai","JS" +state_eg_kfs,eg,"Kafr el-Sheikh","KFS" +state_eg_mt,eg,"Matrouh","MT" +state_eg_kn,eg,"Qena","KN" +state_eg_sin,eg,"North Sinai","SIN" +state_eg_shg,eg,"Sohag","SHG" +state_za_ec,za,"Eastern Cape","EC" +state_za_fs,za,"Free State","FS" +state_za_gt,za,"Gauteng","GT" +state_za_nl,za,"KwaZulu-Natal","NL" +state_za_lp,za,"Limpopo","LP" +state_za_mp,za,"Mpumalanga","MP" +state_za_nc,za,"Northern Cape","NC" +state_za_nw,za,"North West","NW" +state_za_wc,za,"Western Cape","WC" +state_it_ag,it,"Agrigento","AG" +state_it_al,it,"Alessandria","AL" +state_it_an,it,"Ancona","AN" +state_it_ao,it,"Aosta","AO" +state_it_ar,it,"Arezzo","AR" +state_it_ap,it,"Ascoli Piceno","AP" +state_it_at,it,"Asti","AT" +state_it_av,it,"Avellino","AV" +state_it_ba,it,"Bari","BA" +state_it_bt,it,"Barletta-Andria-Trani","BT" +state_it_bl,it,"Belluno","BL" +state_it_bn,it,"Benevento","BN" +state_it_bg,it,"Bergamo","BG" +state_it_bi,it,"Biella","BI" +state_it_bo,it,"Bologna","BO" +state_it_bz,it,"Bolzano","BZ" +state_it_bs,it,"Brescia","BS" +state_it_br,it,"Brindisi","BR" +state_it_ca,it,"Cagliari","CA" +state_it_cl,it,"Caltanissetta","CL" +state_it_cb,it,"Campobasso","CB" +state_it_ci,it,"Carbonia-Iglesias","CI" +state_it_ce,it,"Caserta","CE" +state_it_ct,it,"Catania","CT" +state_it_cz,it,"Catanzaro","CZ" +state_it_ch,it,"Chieti","CH" +state_it_co,it,"Como","CO" +state_it_cs,it,"Cosenza","CS" +state_it_cr,it,"Cremona","CR" +state_it_kr,it,"Crotone","KR" +state_it_cn,it,"Cuneo","CN" +state_it_en,it,"Enna","EN" +state_it_fm,it,"Fermo","FM" +state_it_fe,it,"Ferrara","FE" +state_it_fi,it,"Firenze","FI" +state_it_fg,it,"Foggia","FG" +state_it_fc,it,"Forlì-Cesena","FC" +state_it_fr,it,"Frosinone","FR" +state_it_ge,it,"Genova","GE" +state_it_go,it,"Gorizia","GO" +state_it_gr,it,"Grosseto","GR" +state_it_im,it,"Imperia","IM" +state_it_is,it,"Isernia","IS" +state_it_sp,it,"La Spezia","SP" +state_it_aq,it,"L'Aquila","AQ" +state_it_lt,it,"Latina","LT" +state_it_le,it,"Lecce","LE" +state_it_lc,it,"Lecco","LC" +state_it_li,it,"Livorno","LI" +state_it_lo,it,"Lodi","LO" +state_it_lu,it,"Lucca","LU" +state_it_mc,it,"Macerata","MC" +state_it_mn,it,"Mantova","MN" +state_it_ms,it,"Massa-Carrara","MS" +state_it_mt,it,"Matera","MT" +state_it_vs,it,"Medio Campidano","VS" +state_it_me,it,"Messina","ME" +state_it_mi,it,"Milano","MI" +state_it_mo,it,"Modena","MO" +state_it_mb,it,"Monza e Brianza","MB" +state_it_na,it,"Napoli","NA" +state_it_no,it,"Novara","NO" +state_it_nu,it,"Nuoro","NU" +state_it_og,it,"Ogliastra","OG" +state_it_ot,it,"Olbia-Tempio","OT" +state_it_or,it,"Oristano","OR" +state_it_pd,it,"Padova","PD" +state_it_pa,it,"Palermo","PA" +state_it_pr,it,"Parma","PR" +state_it_pv,it,"Pavia","PV" +state_it_pg,it,"Perugia","PG" +state_it_pu,it,"Pesaro e Urbino","PU" +state_it_pe,it,"Pescara","PE" +state_it_pc,it,"Piacenza","PC" +state_it_pi,it,"Pisa","PI" +state_it_pt,it,"Pistoia","PT" +state_it_pn,it,"Pordenone","PN" +state_it_pz,it,"Potenza","PZ" +state_it_po,it,"Prato","PO" +state_it_rg,it,"Ragusa","RG" +state_it_ra,it,"Ravenna","RA" +state_it_rc,it,"Reggio Calabria","RC" +state_it_re,it,"Reggio Emilia","RE" +state_it_ri,it,"Rieti","RI" +state_it_rn,it,"Rimini","RN" +state_it_rm,it,"Roma","RM" +state_it_ro,it,"Rovigo","RO" +state_it_sa,it,"Salerno","SA" +state_it_ss,it,"Sassari","SS" +state_it_sv,it,"Savona","SV" +state_it_si,it,"Siena","SI" +state_it_sr,it,"Siracusa","SR" +state_it_so,it,"Sondrio","SO" +state_it_ta,it,"Taranto","TA" +state_it_te,it,"Teramo","TE" +state_it_tr,it,"Terni","TR" +state_it_to,it,"Torino","TO" +state_it_tp,it,"Trapani","TP" +state_it_tn,it,"Trento","TN" +state_it_tv,it,"Treviso","TV" +state_it_ts,it,"Trieste","TS" +state_it_ud,it,"Udine","UD" +state_it_va,it,"Varese","VA" +state_it_ve,it,"Venezia","VE" +state_it_vb,it,"Verbano-Cusio-Ossola","VB" +state_it_vc,it,"Vercelli","VC" +state_it_vr,it,"Verona","VR" +state_it_vv,it,"Vibo Valentia","VV" +state_it_vi,it,"Vicenza","VI" +state_it_vt,it,"Viterbo","VT" +state_es_c,es,"A Coruña","C" +state_es_vi,es,"Álava","VI" +state_es_ab,es,"Albacete","AB" +state_es_a,es,"Alicante","A" +state_es_al,es,"Almería","AL" +state_es_o,es,"Asturias","O" +state_es_av,es,"Ávila","AV" +state_es_ba,es,"Badajoz","BA" +state_es_pm,es,"Balears","PM" +state_es_b,es,"Barcelona","B" +state_es_bu,es,"Burgos","BU" +state_es_cc,es,"Cáceres","CC" +state_es_ca,es,"Cádiz","CA" +state_es_s,es,"Cantabria","S" +state_es_cs,es,"Castellón","CS" +state_es_ce,es,"Ceuta","CE" +state_es_cr,es,"Ciudad Real","CR" +state_es_co,es,"Córdoba","CO" +state_es_cu,es,"Cuenca","CU" +state_es_gi,es,"Girona","GI" +state_es_gr,es,"Granada","GR" +state_es_gu,es,"Guadalajara","GU" +state_es_ss,es,"Guipúzcoa","SS" +state_es_h,es,"Huelva","H" +state_es_hu,es,"Huesca","HU" +state_es_j,es,"Jaén","J" +state_es_lo,es,"La Rioja","LO" +state_es_gc,es,"Las Palmas","GC" +state_es_le,es,"León","LE" +state_es_l,es,"Lleida","L" +state_es_lu,es,"Lugo","LU" +state_es_m,es,"Madrid","M" +state_es_ma,es,"Málaga","MA" +state_es_ml,es,"Melilla","ML" +state_es_mu,es,"Murcia","MU" +state_es_na,es,"Navarra","NA" +state_es_or,es,"Ourense","OR" +state_es_p,es,"Palencia","P" +state_es_po,es,"Pontevedra","PO" +state_es_sa,es,"Salamanca","SA" +state_es_tf,es,"Santa Cruz de Tenerife","TF" +state_es_sg,es,"Segovia","SG" +state_es_se,es,"Sevilla","SE" +state_es_so,es,"Soria","SO" +state_es_t,es,"Tarragona","T" +state_es_te,es,"Teruel","TE" +state_es_to,es,"Toledo","TO" +state_es_v,es,"Valencia","V" +state_es_va,es,"Valladolid","VA" +state_es_bi,es,"Vizcaya","BI" +state_es_za,es,"Zamora","ZA" +state_es_z,es,"Zaragoza","Z" +state_my_jhr,my,"Johor","JHR" +state_my_kdh,my,"Kedah","KDH" +state_my_ktn,my,"Kelantan","KTN" +state_my_kul,my,"Kuala Lumpur","KUL" +state_my_lbn,my,"Labuan","LBN" +state_my_mlk,my,"Melaka","MLK" +state_my_nsn,my,"Negeri Sembilan","NSN" +state_my_phg,my,"Pahang","PHG" +state_my_prk,my,"Perak","PRK" +state_my_pls,my,"Perlis","PLS" +state_my_png,my,"Pulau Pinang","PNG" +state_my_pjy,my,"Putrajaya","PJY" +state_my_sbh,my,"Sabah","SBH" +state_my_swk,my,"Sarawak","SWK" +state_my_sgr,my,"Selangor","SGR" +state_my_trg,my,"Terengganu","TRG" +state_mx_ags,mx,"Aguascalientes","AGS" +state_mx_bc,mx,"Baja California","BC" +state_mx_bcs,mx,"Baja California Sur","BCS" +state_mx_chih,mx,"Chihuahua","CHIH" +state_mx_col,mx,"Colima","COL" +state_mx_camp,mx,"Campeche","CAMP" +state_mx_coah,mx,"Coahuila","COAH" +state_mx_chis,mx,"Chiapas","CHIS" +state_mx_df,mx,"Distrito Federal","DF" +state_mx_dgo,mx,"Durango","DGO" +state_mx_gro,mx,"Guerrero","GRO" +state_mx_gto,mx,"Guanajuato","GTO" +state_mx_hgo,mx,"Hidalgo","HGO" +state_mx_jal,mx,"Jalisco","JAL" +state_mx_mich,mx,"Michoacán","MICH" +state_mx_mor,mx,"Morelos","MOR" +state_mx_mex,mx,"México","MEX" +state_mx_nay,mx,"Nayarit","NAY" +state_mx_nl,mx,"Nuevo León","NL" +state_mx_oax,mx,"Oaxaca","OAx" +state_mx_pue,mx,"Puebla","PUE" +state_mx_q roo,mx,"Quintana Roo","Q ROO" +state_mx_qro,mx,"Querétaro","QRO" +state_mx_sin,mx,"Sinaloa","SIN" +state_mx_slp,mx,"San Luis Potosí","SLP" +state_mx_son,mx,"Sonora","SON" +state_mx_tab,mx,"Tabasco","TAB" +state_mx_tlax,mx,"Tlaxcala","TLAX" +state_mx_tamps,mx,"Tamaulipas","TAMPS" +state_mx_ver,mx,"Veracruz","VER" +state_mx_yuc,mx,"Yucatán","YUC" +state_mx_zac,mx,"Zacatecas","ZAC" +state_nz_auk,nz,"Auckland","AUK" +state_nz_bop,nz,"Bay of Plenty","BOP" +state_nz_can,nz,"Canterbury","CAN" +state_nz_gis,nz,"Gisborne","GIS" +state_nz_hkb,nz,"Hawke's Bay","HKB" +state_nz_mwt,nz,"Manawatu-Wanganui","MWT" +state_nz_mbh,nz,"Marlborough","MBH" +state_nz_nsn,nz,"Nelson","NSN" +state_nz_ntl,nz,"Northland","NTL" +state_nz_ota,nz,"Otago","OTA" +state_nz_stl,nz,"Southland","STL" +state_nz_tki,nz,"Taranaki","TKI" +state_nz_tas,nz,"Tasman","TAS" +state_nz_wko,nz,"Waikato","WKO" +state_nz_wgn,nz,"Wellington","WGN" +state_nz_wtc,nz,"West Coast","WTC" +state_ca_ab,ca,"Alberta","AB" +state_ca_bc,ca,"British Columbia","BC" +state_ca_mb,ca,"Manitoba","MB" +state_ca_nb,ca,"New Brunswick","NB" +state_ca_nl,ca,"Newfoundland","NL" +state_ca_nt,ca,"Northwest Territories","NT" +state_ca_ns,ca,"Nova Scotia","NS" +state_ca_nu,ca,"Nunavut","NU" +state_ca_on,ca,"Ontario","ON" +state_ca_pe,ca,"Prince Edward Island","PE" +state_ca_qc,ca,"Quebec","QC" +state_ca_sk,ca,"Saskatchewan","SK" +state_ca_yt,ca,"Yukon","YT" +state_ae_az,ae,"Abu Dhabi","AZ" +state_ae_aj,ae,"Ajman","AJ" +state_ae_du,ae,"Dubai","DU" +state_ae_fu,ae,"Fujairah","FU" +state_ae_rk,ae,"Ras al-Khaimah","RK" +state_ae_sh,ae,"Sharjah","SH" +state_ae_uq,ae,"Umm al-Quwain","UQ" +state_ar_c,ar,"Buenos Aires City","C" +state_ar_b,ar,"Buenos Aires","B" +state_ar_k,ar,"Catamarca","K" +state_ar_h,ar,"Chaco","H" +state_ar_u,ar,"Chobut","U" +state_ar_x,ar,"Córdoba","X" +state_ar_w,ar,"Corrientes","W" +state_ar_e,ar,"Ente Ríos","E" +state_ar_p,ar,"Formosa","P" +state_ar_y,ar,"Jujuy","Y" +state_ar_l,ar,"La Pampa","L" +state_ar_f,ar,"La Rioja","F" +state_ar_m,ar,"Mendoza","M" +state_ar_n,ar,"Misiones","N" +state_ar_q,ar,"Neuquén","Q" +state_ar_r,ar,"Río Negro","R" +state_ar_a,ar,"Salta","A" +state_ar_j,ar,"San Juan","J" +state_ar_d,ar,"San Luis","D" +state_ar_z,ar,"Santa Cruz","Z" +state_ar_s,ar,"Santa Fe","S" +state_ar_g,ar,"Santiago Del Estero","G" +state_ar_v,ar,"Tierra del Fuego","V" +state_ar_t,ar,"Tucumán","T" +state_in_an,in,"Andaman and Nicobar","AN" +state_in_ap,in,"Andhra Pradesh","AP" +state_in_ar,in,"Arunachal Pradesh","AR" +state_in_as,in,"Assam","AS" +state_in_br,in,"Bihar","BR" +state_in_ch,in,"Chandigarh","CH" +state_in_cg,in,"Chattisgarh","CG" +state_in_dn,in,"Dadra and Nagar Haveli","DN" +state_in_dd,in,"Daman and Diu","DD" +state_in_dl,in,"Delhi","DL" +state_in_ga,in,"Goa","GA" +state_in_gj,in,"Gujarat","GJ" +state_in_hr,in,"Haryana","HR" +state_in_hp,in,"Himachal Pradesh","HP" +state_in_jk,in,"Jammu and Kashmir","JK" +state_in_jh,in,"Jharkhand","JH" +state_in_ka,in,"Karnataka","KA" +state_in_kl,in,"Kerala","KL" +state_in_ld,in,"Lakshadweep","LD" +state_in_mp,in,"Madhya Pradesh","MP" +state_in_mh,in,"Maharashtra","MH" +state_in_mn,in,"Manipur","MN" +state_in_ml,in,"Meghalaya","ML" +state_in_mz,in,"Mizoram","MZ" +state_in_nl,in,"Nagaland","NL" +state_in_or,in,"Orissa","OR" +state_in_py,in,"Puducherry","PY" +state_in_pb,in,"Punjab","PB" +state_in_rj,in,"Rajasthan","RJ" +state_in_sk,in,"Sikkim","SK" +state_in_tn,in,"Tamil Nadu","TN" +state_in_ts,in,"Telangana","TS" +state_in_tr,in,"Tripura","TR" +state_in_up,in,"Uttar Pradesh","UP" +state_in_uk,in,"Uttarakhand","UK" +state_in_wb,in,"West Bengal","WB" +state_id_ac,id,"Aceh","AC" +state_id_ba,id,"Bali","BA" +state_id_bb,id,"Bangka Belitung","BB" +state_id_bt,id,"Banten","BT" +state_id_be,id,"Bengkulu","BE" +state_id_go,id,"Gorontalo","GO" +state_id_jk,id,"Jakarta","JK" +state_id_ja,id,"Jambi","JA" +state_id_jb,id,"Jawa Barat","JB" +state_id_jt,id,"Jawa Tengah","JT" +state_id_ji,id,"Jawa Timur","JI" +state_id_kb,id,"Kalimantan Barat","KB" +state_id_ks,id,"Kalimantan Selatan","KS" +state_id_kt,id,"Kalimantan Tengah","KT" +state_id_ki,id,"Kalimantan Timur","KI" +state_id_ku,id,"Kalimantan Utara","KU" +state_id_kr,id,"Kepulauan Riau","KR" +state_id_la,id,"Lampung","LA" +state_id_ma,id,"Maluku","MA" +state_id_mu,id,"Maluku Utara","MU" +state_id_nb,id,"Nusa Tenggara Barat","NB" +state_id_nt,id,"Nusa Tenggara Timur","NT" +state_id_pa,id,"Papua","PA" +state_id_pb,id,"Papua Barat","PB" +state_id_ri,id,"Riau","RI" +state_id_sr,id,"Sulawesi Barat","SR" +state_id_sn,id,"Sulawesi Selatan","SN" +state_id_st,id,"Sulawesi Tengah","ST" +state_id_sg,id,"Sulawesi Tenggara","SG" +state_id_sa,id,"Sulawesi Utara","SA" +state_id_sb,id,"Sumatra Barat","SB" +state_id_ss,id,"Sumatra Selatan","SS" +state_id_su,id,"Sumatra Utara","SU" +state_id_yo,id,"Yogyakarta","YO" \ No newline at end of file diff --git a/openerp/addons/base/res/res_country.py b/openerp/addons/base/res/res_country.py index 2c48cc1bd7a..68d1074d5d7 100644 --- a/openerp/addons/base/res/res_country.py +++ b/openerp/addons/base/res/res_country.py @@ -2,7 +2,11 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. import re +import logging from odoo import api, fields, models +from psycopg2 import IntegrityError +from odoo.tools.translate import _ +_logger = logging.getLogger(__name__) @api.model @@ -69,7 +73,8 @@ addresses belonging to this country.\n\nYou can use the python-style string pate @api.multi def get_address_fields(self): - return {'country_id': re.findall(r'\((.+?)\)', country.address_format) for country in self} + self.ensure_one() + return re.findall(r'\((.+?)\)', self.address_format) class CountryGroup(models.Model): @@ -89,6 +94,52 @@ class CountryState(models.Model): country_id = fields.Many2one('res.country', string='Country', required=True) name = fields.Char(string='State Name', required=True, help='Administrative divisions of a country. E.g. Fed. State, Departement, Canton') - code = fields.Char(string='State Code', size=3, help='The state code in max. three chars.', required=True) + code = fields.Char(string='State Code', help='The state code.', required=True) name_search = location_name_search + + def merge_states(self, cr, uid, ids=None, context=None): + Imd = self.pool['ir.model.data'] + State = self.pool['res.country.state'] + + query = """ + SELECT st.id, st.oldid, imd.id, imd.name, imd2.id, ids + FROM ( + SELECT st.country_id, st.code, max(st.id) as id, min(st.id) as oldid, string_agg(cast(id as text), ',') as ids + FROM res_country_state st + GROUP BY st.country_id, st.code + HAVING count(*) > 1 + ) st + LEFT JOIN ir_model_data imd on (imd.model = 'res.country.state' and imd.res_id = st.id) + LEFT JOIN ir_model_data imd2 on (imd2.model = 'res.country.state' and imd2.res_id = st.oldid) + WHERE imd.module = 'base'; + """ + cr.execute(query) + data = cr.fetchall() + + for st_id, st_oldid, imd_id, imd_name, imd2_id, ids in data: + values = dict(module=self._module) + if imd2_id: + # If duplicated record had already a xml_id we update the old xml_id and + # force to delete the new xml_id created to avoid constraint error + keepid = imd2_id + Imd.unlink(cr, uid, imd_id, context=context) + values.update(name=imd_name) + else: + # Else we point the new xml_id to the oldest duplicated state + keepid = imd_id + values.update(res_id=st_oldid) + + Imd.write(cr, uid, keepid, values, context=context) + State.unlink(cr, uid, st_id, context=context) + + duplicated_ids = set(map(int, ids.split(','))) - set([st_id, st_oldid]) + if duplicated_ids: + _logger.warning(_('State with id [%s] (%s) seems to have duplicated code: %s' % (st_oldid, imd_name, ','.join(duplicated_ids)))) + + if data: + self._add_sql_constraints(cr) + + _sql_constraints = [ + ('name_code_uniq', 'unique(country_id, code)', 'The code of the state must be unique by country !') + ]