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 !') + ]