[MERGE] from trunk

bzr revid: stw@openerp.com-20140312102948-1n3b2d1vqedzojzb
This commit is contained in:
Stephane Wirtel 2014-03-12 11:29:48 +01:00
commit 4bbcfddc13
92 changed files with 689 additions and 381 deletions

View File

@ -40,6 +40,8 @@ conf['addons_path'] = '../../addons/trunk,../../web/trunk/addons'
#----------------------------------------------------------
application = openerp.service.wsgi_server.application
openerp.service.server.load_server_wide_modules()
#----------------------------------------------------------
# Gunicorn
#----------------------------------------------------------

View File

@ -24,7 +24,6 @@ import workflow
import module
import res
import report
import test
import tests
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:21+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:41+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:22+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:41+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:22+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:42+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:22+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:42+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:23+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:43+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:23+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:43+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:23+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:43+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:23+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:43+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:24+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:44+0000\n"
"X-Generator: Launchpad (build 16963)\n"
"X-Poedit-Language: Czech\n"
#. module: base
@ -64,7 +64,7 @@ msgstr "Zobrazení architektury"
#. module: base
#: model:ir.module.module,summary:base.module_sale_stock
msgid "Quotation, Sale Orders, Delivery & Invoicing Control"
msgstr "Nabídky, zakázky, řízení dopravy a fakturace"
msgstr "Nabídky, zakázky, řízení dodávek a fakturace"
#. module: base
#: selection:ir.sequence,implementation:0
@ -87,8 +87,7 @@ msgid ""
"Helps you manage your projects and tasks by tracking them, generating "
"plannings, etc..."
msgstr ""
"Pomůže vám spravovat projekty a úkoly jejich sledováním, generováním plánů, "
"apod."
"Pomůže vám řídit projekty a úkoly jejich sledováním, generováním plánů, aj."
#. module: base
#: model:ir.module.module,summary:base.module_point_of_sale
@ -158,7 +157,7 @@ msgstr ""
#. module: base
#: help:res.partner,employee:0
msgid "Check this box if this contact is an Employee."
msgstr "Zaškrtněte toto pole, pokud je kontakt zaměstnanec."
msgstr "Zaškrtněte toto pole, pokud je kontakt zaměstnancem."
#. module: base
#: help:ir.model.fields,domain:0
@ -11056,7 +11055,7 @@ msgstr "Úkoly"
#. module: base
#: model:ir.module.module,shortdesc:base.module_product_visible_discount
msgid "Prices Visible Discounts"
msgstr ""
msgstr "Zobrazení slevy u ceny"
#. module: base
#: field:ir.attachment,datas:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:24+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:44+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:26+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:46+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -12,8 +12,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:26+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:46+0000\n"
"X-Generator: Launchpad (build 16963)\n"
"X-Poedit-Country: GREECE\n"
"X-Poedit-Language: Greek\n"
"X-Poedit-SourceCharset: utf-8\n"

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:36+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:55+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:33+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:53+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:35+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:55+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:37+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:36+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:37+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n"
"X-Generator: Launchpad (build 16963)\n"
"Language: \n"
#. module: base

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:36+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:38+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:38+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:38+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:58+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:35+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:55+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:24+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:44+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:23+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:42+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -9,8 +9,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:30+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:50+0000\n"
"X-Generator: Launchpad (build 16963)\n"
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
"X-Poedit-Language: Persian\n"

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:38+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:58+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:25+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:45+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -405,6 +405,13 @@ msgid ""
"invoices from picking, OpenERP is able to add and compute the shipping "
"line.\n"
msgstr ""
"\n"
"Sallii toimitustapojen lisäämisen myyntitilauksille ja keräilyyn. \n"
"==============================================================\n"
"\n"
"Voit määritellä oman huolitsijan ja toimitustaulukon hinnoille. Kun laskut "
"luodaan \n"
"keräilyssä, OpenERP lisää lähetysrivit ja laskee nille hinnat.\n"
#. module: base
#: code:addons/base/ir/ir_filters.py:80
@ -550,7 +557,7 @@ msgstr ""
#. module: base
#: view:workflow.transition:0
msgid "Workflow Transition"
msgstr ""
msgstr "Työnkulun eteneminen"
#. module: base
#: model:res.country,name:base.gf
@ -599,6 +606,20 @@ msgid ""
"* Use emails to automatically confirm and send acknowledgements for any "
"event registration\n"
msgstr ""
"\n"
"Tapahtumien organisointi ja hallinta.\n"
"====================================\n"
"\n"
"Tapahtumamoduuli mahdollistaa tehokkaan tapahtumien organisoinnin ja niihin "
"liittyvien \n"
"töiden hallinnan: suunnittelun, rekisteröintien seurannan, osallistumisen "
"jne. \n"
"\n"
"Pääominaisuudet\n"
"------------\n"
"* Hallitse tapahtumia ja rekisteröintejä\n"
"* Käytä sähköpostia automatisoimaan vahvistuksia ja lähettämään kuittaus "
"jokaisesta rekisteröitymisestä.\n"
#. module: base
#: selection:base.language.install,lang:0
@ -1616,6 +1637,11 @@ msgid ""
"=============\n"
" "
msgstr ""
"\n"
"Tämä moduuli lisää palautevalikon ja toimii jos Palauteportaali on "
"asennettu. \n"
"=======================================================================\n"
" "
#. module: base
#: model:ir.actions.act_window,help:base.action_res_partner_bank_account_form
@ -1815,7 +1841,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal_project_issue
msgid "Portal Issue"
msgstr "Porttaaliongelma"
msgstr "Portaaliongelma"
#. module: base
#: model:ir.ui.menu,name:base.menu_tools
@ -1950,7 +1976,7 @@ msgstr "Alankomaat"
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal_event
msgid "Portal Event"
msgstr "Porttaalitapahtuma"
msgstr "Portaalitapahtuma"
#. module: base
#: selection:ir.translation,state:0
@ -6164,7 +6190,7 @@ msgstr "Ryhmän nimi ei voi alkaa \"-\""
#: view:ir.module.module:0
#: model:ir.ui.menu,name:base.module_mi
msgid "Apps"
msgstr "Sovellukset"
msgstr "Sovelluskauppa"
#. module: base
#: view:ir.ui.view_sc:0
@ -7726,7 +7752,7 @@ msgstr "Tämä ikkuna"
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal_anonymous
msgid "Anonymous portal"
msgstr "Yleinen porttaali"
msgstr "Anonyymiportaali"
#. module: base
#: field:base.language.export,format:0
@ -7784,7 +7810,7 @@ msgstr "Salasana"
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal_claim
msgid "Portal Claim"
msgstr "Reklmaatioporttaali"
msgstr "Palauteportaali"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_pe
@ -7837,7 +7863,7 @@ msgstr "RML sisäinen ylätunniste"
#. module: base
#: field:ir.actions.act_window,search_view_id:0
msgid "Search View Ref."
msgstr "Hae näytettävä viite"
msgstr "Hae näytettävä referenssi"
#. module: base
#: help:res.users,partner_id:0
@ -8029,7 +8055,7 @@ msgstr "Liike- ja analyyttinen kirjanpito"
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal_project
msgid "Portal Project"
msgstr "Porttaaliprojekti"
msgstr "Portaaliprojekti"
#. module: base
#: model:res.country,name:base.cc
@ -8538,7 +8564,7 @@ msgstr "Hongkong"
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal_sale
msgid "Portal Sale"
msgstr "Myyntiporttaali"
msgstr "Myyntiportaali"
#. module: base
#: field:ir.default,ref_id:0
@ -8662,7 +8688,7 @@ msgstr "Alavalikot"
#. module: base
#: report:ir.module.reference:0
msgid "Introspection report on objects"
msgstr "Introspektioraportti objekteista"
msgstr "Moduulin tekninen opas"
#. module: base
#: model:ir.module.module,shortdesc:base.module_web_analytics
@ -8814,7 +8840,7 @@ msgstr ""
#. module: base
#: model:ir.ui.menu,name:base.menu_view_base_module_update
msgid "Update Modules List"
msgstr "Päivitä lista moduuleista"
msgstr "Päivitä moduulilista"
#. module: base
#: code:addons/base/module/module.py:359
@ -10021,7 +10047,7 @@ msgstr "Kenttien kuvaukset"
#. module: base
#: model:ir.module.module,shortdesc:base.module_analytic_contract_hr_expense
msgid "Contracts Management: hr_expense link"
msgstr "Sopimushallint: hr_expense link"
msgstr "Sopimushallinat: hr_expense link"
#. module: base
#: view:ir.attachment:0
@ -10283,7 +10309,7 @@ msgstr "Väliyksikkö"
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal_stock
msgid "Portal Stock"
msgstr "Porttaalivarasto"
msgstr "Portaalivarasto"
#. module: base
#: field:workflow.activity,kind:0
@ -10351,7 +10377,7 @@ msgstr "Kohdetietueen ID tietokannassa"
#. module: base
#: model:ir.module.module,shortdesc:base.module_account_analytic_analysis
msgid "Contracts Management"
msgstr "Sopimustenhallinta"
msgstr "Sopimushallinta"
#. module: base
#: selection:base.language.install,lang:0
@ -10455,7 +10481,7 @@ msgstr "Moniyritys"
#: model:ir.module.category,name:base.module_category_portal
#: model:ir.module.module,shortdesc:base.module_portal
msgid "Portal"
msgstr "Porttaali"
msgstr "Portaali"
#. module: base
#: selection:ir.translation,state:0
@ -10656,7 +10682,7 @@ msgstr "Tehtävät"
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal_hr_employees
msgid "Portal HR employees"
msgstr "Henkilöstöhallinnon työntekijäporttaali"
msgstr "Henkilöstöhallinnon työntekijäportaali"
#. module: base
#: selection:base.language.install,lang:0
@ -12137,7 +12163,7 @@ msgstr "Menetelmälle välitettävät argumentit, esim. (uid,...)."
#. module: base
#: report:ir.module.reference:0
msgid "Reference Guide"
msgstr "Referenssiopaste"
msgstr "Tekninen opas"
#. module: base
#: model:ir.model,name:base.model_res_partner
@ -12595,7 +12621,7 @@ msgstr "Malediivit"
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal_crm
msgid "Portal CRM"
msgstr "CRM-porttaali"
msgstr "CRM-portaali"
#. module: base
#: model:ir.ui.menu,name:base.next_id_4
@ -14878,7 +14904,7 @@ msgstr "Bulgaria / български език"
#. module: base
#: model:ir.ui.menu,name:base.menu_aftersale
msgid "After-Sale Services"
msgstr "Jälkimarkkinapalvelut"
msgstr "Asiakaspalvelut"
#. module: base
#: field:base.language.import,code:0
@ -15623,7 +15649,7 @@ msgstr ""
#: model:ir.actions.act_window,name:base.open_module_tree
#: model:ir.ui.menu,name:base.menu_module_tree
msgid "Installed Modules"
msgstr "Asennetut moduulit"
msgstr "Asenna moduulit"
#. module: base
#: code:addons/base/res/res_users.py:170

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:25+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:45+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:36+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:26+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:46+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:26+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:46+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:26+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:47+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:27+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:47+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:32+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:52+0000\n"
"X-Generator: Launchpad (build 16963)\n"
"Language: hr\n"
#. module: base

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:27+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:47+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -9,8 +9,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:22+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:42+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:27+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:48+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -211,6 +211,15 @@ msgid ""
"revenue\n"
"reports."
msgstr ""
"\n"
"Bentuk tagihan anda dari entri Expenses, Timesheet.\n"
"========================================================\n"
"\n"
"Modul untuk menerbitkan tagihan berbasis biaya (sdm, biaya, dsb).\n"
"\n"
"Anda dapat mendefinisikan daftar harga pada akun analitik, membuat laporan "
"anggaran \n"
"penghasilan."
#. module: base
#: code:addons/base/ir/ir_sequence.py:134
@ -299,6 +308,12 @@ msgid ""
"\n"
" "
msgstr ""
"\n"
"Lokalisasi skema akunting dan pajak Chili.\n"
"==============================================\n"
"Plan contable chileno e impuestos de acuerdo a disposiciones vigentes\n"
"\n"
" "
#. module: base
#: model:ir.module.module,shortdesc:base.module_sale
@ -398,6 +413,15 @@ msgid ""
"invoices from picking, OpenERP is able to add and compute the shipping "
"line.\n"
msgstr ""
"\n"
"Mengizinkan anda untuk menambahkan metode deliveri pada order penjualan dan "
"pengambilan.\n"
"==============================================================\n"
"\n"
"Anda dapat menentukan carrier sendiri dan metode antar untuk harga tersebut. "
"Saat membuat\n"
"tagihan dari pengantaran, OpenERP dapat menambah dan menghitung biaya "
"pengiriman.\n"
#. module: base
#: code:addons/base/ir/ir_filters.py:80

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:27+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:47+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:28+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:48+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:28+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:48+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -411,7 +411,7 @@ msgstr "与信限度"
#: field:ir.model.data,date_update:0
#: field:ir.model.relation,date_update:0
msgid "Update Date"
msgstr "日付の更新"
msgstr "更新"
#. module: base
#: model:ir.module.module,shortdesc:base.module_base_action_rule
@ -3262,7 +3262,7 @@ msgstr "アルメニア"
#. module: base
#: model:ir.module.module,summary:base.module_hr_evaluation
msgid "Periodical Evaluations, Appraisals, Surveys"
msgstr ""
msgstr "定期評価、査定、調査"
#. module: base
#: model:ir.actions.act_window,name:base.ir_property_form
@ -4582,7 +4582,7 @@ msgstr "スペイン語(ホンジュラス)/ Español (HN)"
#. module: base
#: view:ir.sequence.type:0
msgid "Sequence Type"
msgstr "順序タイプ"
msgstr "付番タイプ"
#. module: base
#: view:base.language.export:0
@ -5141,7 +5141,7 @@ msgstr "銀行口座タイプ"
#. module: base
#: help:ir.sequence,suffix:0
msgid "Suffix value of the record for the sequence"
msgstr "順序のためのレコードのサフィックス値"
msgstr "この付番定義でレコードに適用するサフィックス値"
#. module: base
#: help:ir.mail_server,smtp_user:0
@ -5588,7 +5588,7 @@ msgstr "起動設定ウィザード"
#. module: base
#: model:ir.module.module,summary:base.module_mrp
msgid "Manufacturing Orders, Bill of Materials, Routing"
msgstr ""
msgstr "製造オーダ、部品表、工順"
#. module: base
#: field:ir.attachment,name:0
@ -6140,7 +6140,7 @@ msgstr "ショートカット"
#. module: base
#: field:ir.model.data,date_init:0
msgid "Init Date"
msgstr "整数データ"
msgstr "作成日"
#. module: base
#: selection:base.language.install,lang:0
@ -7630,7 +7630,7 @@ msgstr ""
#. module: base
#: help:ir.sequence,number_next:0
msgid "Next number of this sequence"
msgstr "この順序の次の番号"
msgstr "この付番定義の次の番号"
#. module: base
#: view:res.partner:0
@ -7954,7 +7954,7 @@ msgstr "カスタム項目"
#. module: base
#: model:ir.module.module,summary:base.module_account_accountant
msgid "Financial and Analytic Accounting"
msgstr ""
msgstr "財務会計、分析会計"
#. module: base
#: model:ir.module.module,shortdesc:base.module_portal_project
@ -8248,7 +8248,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,summary:base.module_hr_recruitment
msgid "Jobs, Recruitment, Applications, Job Interviews"
msgstr ""
msgstr "仕事、求人、応募、面接"
#. module: base
#: code:addons/base/module/module.py:539
@ -8657,7 +8657,7 @@ msgstr "グループのユーザは自動的にグループを継承します。
#. module: base
#: model:ir.module.module,summary:base.module_note
msgid "Sticky notes, Collaborative, Memos"
msgstr ""
msgstr "付箋、コラボレーション、メモ"
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_attendance
@ -9991,7 +9991,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,summary:base.module_hr_holidays
msgid "Holidays, Allocation and Leave Requests"
msgstr ""
msgstr "休暇割当、申請・承認"
#. module: base
#: model:ir.module.module,description:base.module_web_hello
@ -10135,7 +10135,7 @@ msgstr "発注分析計画"
#: model:ir.actions.act_window,name:base.ir_sequence_type
#: model:ir.ui.menu,name:base.menu_ir_sequence_type
msgid "Sequence Codes"
msgstr "順序コード"
msgstr "付番コード"
#. module: base
#: selection:base.language.install,lang:0
@ -10790,7 +10790,7 @@ msgstr "国の状態"
#. module: base
#: model:ir.ui.menu,name:base.next_id_5
msgid "Sequences & Identifiers"
msgstr "順序と識別子"
msgstr "付番定義とID"
#. module: base
#: model:ir.module.module,description:base.module_l10n_th
@ -10925,7 +10925,7 @@ msgstr "連絡先が会社の場合はチェックしてください。チェッ
#. module: base
#: view:ir.sequence.type:0
msgid "Sequences Type"
msgstr "順序タイプ"
msgstr "付番タイプ"
#. module: base
#: view:res.partner:0
@ -11282,7 +11282,7 @@ msgstr ""
#: view:ir.sequence:0
#: model:ir.ui.menu,name:base.menu_ir_sequence_form
msgid "Sequences"
msgstr "順序"
msgstr "付番"
#. module: base
#: help:res.lang,code:0
@ -11724,7 +11724,7 @@ msgstr "月:%(month)s"
#: field:multi_company.default,sequence:0
#: field:res.partner.bank,sequence:0
msgid "Sequence"
msgstr "順序"
msgstr "付番"
#. module: base
#: model:res.country,name:base.tn
@ -12190,7 +12190,7 @@ msgstr "ハード島とマクドナルド諸島"
msgid ""
"External Key/Identifier that can be used for data integration with third-"
"party systems"
msgstr "サードパーティシステムとのデータ統合のために利用する外部キー / 識別子"
msgstr "サードパーティシステムとのデータ統合のために利用する外部キー / ID"
#. module: base
#: field:ir.actions.act_window,view_id:0
@ -12519,7 +12519,7 @@ msgstr "CRMポータル"
#. module: base
#: model:ir.ui.menu,name:base.next_id_4
msgid "Low Level Objects"
msgstr "低レベルオブジェクト"
msgstr "低レベルオブジェクト"
#. module: base
#: help:ir.values,model:0
@ -12596,7 +12596,7 @@ msgstr ""
#: view:ir.model.data:0
#: model:ir.ui.menu,name:base.ir_model_data_menu
msgid "External Identifiers"
msgstr "外部識別子"
msgstr "外部ID"
#. module: base
#: selection:base.language.install,lang:0
@ -12898,7 +12898,7 @@ msgstr "ガボン"
#. module: base
#: model:ir.module.module,summary:base.module_stock
msgid "Inventory, Logistic, Storage"
msgstr ""
msgstr "在庫、経路、保管場所"
#. module: base
#: view:ir.actions.act_window:0
@ -13614,7 +13614,7 @@ msgstr ""
#: view:ir.model.data:0
#: field:ir.model.data,name:0
msgid "External Identifier"
msgstr "外部識別子"
msgstr "外部ID"
#. module: base
#: model:ir.module.module,description:base.module_audittrail
@ -14048,9 +14048,7 @@ msgid ""
"Two sequence object implementations are offered: Standard and 'No gap'. The "
"later is slower than the former but forbids any gap in the sequence (while "
"they are possible in the former)."
msgstr ""
"2つのシーケンスオブジェクトの実装が提供されます:標準と\"ギャップなし\"です。後者は前者よりも遅いですが、どんな順序のギャップを禁じます(前者は可能で"
"す)。"
msgstr "「標準」と「ギャップなし」の2種類の付番定義が可能です。後者の場合、付番ごとにギャップを設けることができません。"
#. module: base
#: model:res.country,name:base.gn
@ -14249,7 +14247,7 @@ msgstr "かつ"
#: help:ir.values,res_id:0
msgid ""
"Database identifier of the record to which this applies. 0 = for all records"
msgstr "これを適用するためのレコードのデータベース識別子。0 = 全てのレコードのため"
msgstr ""
#. module: base
#: field:ir.model.fields,relation:0
@ -14676,7 +14674,7 @@ msgstr "高度なレポート"
#. module: base
#: model:ir.module.module,summary:base.module_purchase
msgid "Purchase Orders, Receptions, Supplier Invoices"
msgstr ""
msgstr "発注、入荷、仕入先請求"
#. module: base
#: model:ir.module.module,description:base.module_hr_payroll
@ -14903,7 +14901,7 @@ msgstr "クック諸島"
#. module: base
#: field:ir.model.data,noupdate:0
msgid "Non Updatable"
msgstr "更新可能でない"
msgstr "更新可"
#. module: base
#: selection:base.language.install,lang:0
@ -15311,7 +15309,7 @@ msgstr ""
#. module: base
#: help:ir.sequence,prefix:0
msgid "Prefix value of the record for the sequence"
msgstr "順序のためのレコードのプレフィックス値"
msgstr "この付番定義でレコードに適用するプレフィックス値"
#. module: base
#: model:res.country,name:base.sc
@ -15353,7 +15351,7 @@ msgstr ""
#. module: base
#: field:ir.model.data,complete_name:0
msgid "Complete ID"
msgstr "完ID"
msgstr "完ID"
#. module: base
#: model:ir.module.module,description:base.module_stock
@ -15447,7 +15445,7 @@ msgstr "製造プロセスを管理し、それらのプロセスのレポート
#. module: base
#: help:ir.sequence,number_increment:0
msgid "The next number of the sequence will be incremented by this number"
msgstr "順序の次の番号はこの数値だけ増加します。"
msgstr "付番毎にこの数値分だけ番号が増加します。"
#. module: base
#: selection:workflow.activity,kind:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:25+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:45+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:28+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:48+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:28+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:49+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:29+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:49+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:29+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:49+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:29+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:49+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:29+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:50+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:29+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:50+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:24+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:44+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -13429,7 +13429,7 @@ msgstr ""
#. module: base
#: selection:res.currency,position:0
msgid "Before Amount"
msgstr "Voormalig bedrag"
msgstr "Voor bedrag"
#. module: base
#: field:res.request,act_from:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:36+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:56+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:30+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:51+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:30+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:51+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:35+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:55+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:31+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:51+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:31+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:51+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:32+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:52+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:32+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:52+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:22+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:41+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:31+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:52+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:38+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:58+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:33+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:53+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:33+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:53+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:33+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:53+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:34+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:34+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:34+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:34+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:37+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:35+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:54+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-02-22 06:37+0000\n"
"X-Generator: Launchpad (build 16926)\n"
"X-Launchpad-Export-Date: 2014-03-12 04:57+0000\n"
"X-Generator: Launchpad (build 16963)\n"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing

View File

@ -135,35 +135,42 @@ class ir_actions_report_xml(osv.osv):
_sequence = 'ir_actions_id_seq'
_order = 'name'
_columns = {
'name': fields.char('Name', size=64, required=True, translate=True),
'model': fields.char('Object', size=64, required=True),
'type': fields.char('Action Type', size=32, required=True),
'report_name': fields.char('Service Name', size=64, required=True),
'usage': fields.char('Action Usage', size=32),
'report_type': fields.char('Report Type', size=32, required=True, help="Report Type, e.g. pdf, html, raw, sxw, odt, html2html, mako2html, ..."),
'name': fields.char('Name', size=64, required=True, translate=True),
'model': fields.char('Model', required=True),
'report_type': fields.selection([('qweb-pdf', 'PDF'),
('qweb-html', 'HTML'),
('other', 'Other'),
('pdf', 'RML pdf (deprecated)'),
('sxw', 'RML sxw (deprecated)'),
('webkit', 'Webkit (deprecated)'),
], 'Report Type', required=True, help="PDF will use wkhtmltopdf to render html to pdf, HTML will directly show html, Other will force download the controller output keeping the MIME type."),
'report_name': fields.char('Controller Name', required=True, help="URL of the report will be /report/<controller name>/<ids>, the default controller also use this field to get the name of the qweb ir.ui.view to render. For RML reports, this is the LocalService name."),
'groups_id': fields.many2many('res.groups', 'res_groups_report_rel', 'uid', 'gid', 'Groups'),
# options
'multi': fields.boolean('On Multiple Doc.', help="If set to true, the action will not be displayed on the right toolbar of a form view."),
'attachment': fields.char('Save as Attachment Prefix', size=128, help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.'),
'attachment_use': fields.boolean('Reload from Attachment', help='If you check this, then the second time the user prints with same attachment name, it returns the previous report.'),
'attachment': fields.char('Save as Attachment Prefix', size=128, help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.'),
# Deprecated rml stuff
'usage': fields.char('Action Usage', size=32),
'header': fields.boolean('Add RML Header', help="Add or not the corporate RML header"),
'parser': fields.char('Parser Class'),
'auto': fields.boolean('Custom Python Parser'),
'header': fields.boolean('Add RML Header', help="Add or not the corporate RML header"),
'report_xsl': fields.char('XSL Path'),
'report_xml': fields.char('XML Path'),
'report_xsl': fields.char('XSL Path', size=256),
'report_xml': fields.char('XML Path', size=256, help=''),
# Pending deprecation... to be replaced by report_file as this object will become the default report object (not so specific to RML anymore)
'report_rml': fields.char('Main Report File Path', size=256, help="The path to the main report file (depending on Report Type) or NULL if the content is in another data field"),
# temporary related field as report_rml is pending deprecation - this field will replace report_rml after v6.0
'report_file': fields.related('report_rml', type="char", size=256, required=False, readonly=False, string='Report File', help="The path to the main report file (depending on Report Type) or NULL if the content is in another field", store=True),
'report_rml': fields.char('Main Report File Path', help="The path to the main report file (depending on Report Type) or NULL if the content is in another data field"),
'report_file': fields.related('report_rml', type="char", required=False, readonly=False, string='Report File', help="The path to the main report file (depending on Report Type) or NULL if the content is in another field", store=True),
'report_sxw': fields.function(_report_sxw, type='char', string='SXW Path'),
'report_sxw_content_data': fields.binary('SXW Content'),
'report_rml_content_data': fields.binary('RML Content'),
'report_sxw_content': fields.function(_report_content, fnct_inv=_report_content_inv, type='binary', string='SXW Content',),
'report_rml_content': fields.function(_report_content, fnct_inv=_report_content_inv, type='binary', string='RML Content'),
'parser': fields.char('Parser Class'),
}
_defaults = {
'type': 'ir.actions.report.xml',

View File

@ -57,39 +57,35 @@
<group>
<group>
<field name="name"/>
<field name="report_name"/>
<field name="model"/>
<field name="report_type"/>
<field name="report_name"/>
</group>
<group>
<field name="usage"/>
<field name="report_type"/>
<field name="report_file"/>
<field name="multi"/>
<field name="attachment_use"/>
<field name="attachment"/>
</group>
</group>
<notebook>
<page string="Other Configuration">
<page string="Security">
<field name="groups_id"/>
</page>
<page string="RML Configuration" attrs="{'invisible':[('report_type','not in',['pdf','sxw'])]}">
<group>
<group string="RML Report">
<field name="header"/>
<field name="report_file"/>
<field name="auto"/>
<field name="parser"/>
<field name="usage"/>
</group>
<group string="XML Report">
<field name="report_xsl"/>
<field name="report_xml"/>
</group>
<group string="Attachments">
<field name="attachment"/>
<field name="attachment_use"/>
</group>
<group string="Miscellaneous">
<field name="multi"/>
<field name="auto"/>
<field name="parser"/>
</group>
</group>
</page>
<page string="Security">
<field name="groups_id"/>
</page>
</notebook>
</form>
</field>
@ -117,7 +113,8 @@
filter_domain="['|', '|', '|', '|', ('name','ilike',self), ('model','ilike',self), ('type','ilike',self), ('report_name','ilike',self), ('report_type','ilike',self)]"
string="Report"/>
<group expand="0" string="Group By" colspan="4">
<filter string="Report Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'report_type'}"/>
<filter string="Report Type" domain="[]" context="{'group_by':'report_type'}"/>
<filter string="Report Model" domain="[]" context="{'group_by':'model'}"/>
</group>
</search>
</field>

View File

@ -225,12 +225,21 @@ class ir_cron(osv.osv):
lock_cr = db.cursor()
try:
# Try to grab an exclusive lock on the job row from within the task transaction
# Restrict to the same conditions as for the search since the job may have already
# been run by an other thread when cron is running in multi thread
lock_cr.execute("""SELECT *
FROM ir_cron
WHERE id=%s
WHERE numbercall != 0
AND active
AND nextcall <= (now() at time zone 'UTC')
AND id=%s
FOR UPDATE NOWAIT""",
(job['id'],), log_exceptions=False)
locked_job = lock_cr.fetchone()
if not locked_job:
# job was already executed by another parallel process/thread, skipping it.
continue
# Got the lock on the job row, run its code
_logger.debug('Starting job `%s`.', job['name'])
job_cr = db.cursor()

View File

@ -53,8 +53,8 @@ class ir_http(osv.AbstractModel):
def _get_converters(self):
return {'model': ModelConverter, 'models': ModelsConverter}
def _find_handler(self):
return self.routing_map().bind_to_environ(request.httprequest.environ).match()
def _find_handler(self, return_rule=False):
return self.routing_map().bind_to_environ(request.httprequest.environ).match(return_rule=return_rule)
def _auth_method_user(self):
request.uid = request.session.uid
@ -77,7 +77,9 @@ class ir_http(osv.AbstractModel):
# what if error in security.check()
# -> res_users.check()
# -> res_users.check_credentials()
except Exception:
except (openerp.exceptions.AccessDenied, openerp.http.SessionExpiredException):
# All other exceptions mean undetermined status (e.g. connection pool full),
# let them bubble up
request.session.logout()
getattr(self, "_auth_method_%s" % auth_method)()
return auth_method
@ -89,7 +91,8 @@ class ir_http(osv.AbstractModel):
def _dispatch(self):
# locate the controller method
try:
func, arguments = self._find_handler()
rule, arguments = self._find_handler(return_rule=True)
func = rule.endpoint
except werkzeug.exceptions.NotFound, e:
return self._handle_exception(e)
@ -102,7 +105,7 @@ class ir_http(osv.AbstractModel):
convert_exception_to(
werkzeug.exceptions.Forbidden))
processing = self._postprocess_args(arguments)
processing = self._postprocess_args(arguments, rule)
if processing:
return processing
@ -118,7 +121,7 @@ class ir_http(osv.AbstractModel):
return result
def _postprocess_args(self, arguments):
def _postprocess_args(self, arguments, rule):
""" post process arg to set uid on browse records """
for arg in arguments.itervalues():
if isinstance(arg, orm.browse_record) and arg._uid is UID_PLACEHOLDER:

View File

@ -1117,6 +1117,10 @@ class ir_model_data(osv.osv):
# Don't remove the LOG_ACCESS_COLUMNS unless _log_access
# has been turned off on the model.
field = self.pool[model].browse(cr, uid, [res_id], context=context)[0]
if not field.exists():
_logger.info('Deleting orphan external_ids %s', external_ids)
self.unlink(cr, uid, external_ids)
continue
if field.name in openerp.osv.orm.LOG_ACCESS_COLUMNS and self.pool[field.model]._log_access:
continue
if field.name == 'id':

View File

@ -32,7 +32,7 @@ class QWebException(Exception):
class QWebTemplateNotFound(QWebException):
pass
def convert_to_qweb_exception(etype=None, **kw):
def raise_qweb_exception(etype=None, **kw):
if etype is None:
etype = QWebException
orig_type, original, tb = sys.exc_info()
@ -43,7 +43,7 @@ def convert_to_qweb_exception(etype=None, **kw):
e.qweb[k] = v
# Will use `raise foo from bar` in python 3 and rename cause to __cause__
e.qweb['cause'] = original
return e
raise
class QWebContext(dict):
def __init__(self, cr, uid, data, loader=None, templates=None, context=None):
@ -166,7 +166,7 @@ class QWeb(orm.AbstractModel):
try:
xml_doc = qwebcontext.loader(name)
except ValueError:
raise convert_to_qweb_exception(QWebTemplateNotFound, message="Loader could not find template %r" % name, template=origin_template)
raise_qweb_exception(QWebTemplateNotFound, message="Loader could not find template %r" % name, template=origin_template)
self.load_document(xml_doc, qwebcontext=qwebcontext)
if name in qwebcontext.templates:
@ -179,7 +179,7 @@ class QWeb(orm.AbstractModel):
return qwebcontext.safe_eval(expr)
except Exception:
template = qwebcontext.get('__template__')
raise convert_to_qweb_exception(message="Could not evaluate expression %r" % expr, expression=expr, template=template)
raise_qweb_exception(message="Could not evaluate expression %r" % expr, expression=expr, template=template)
def eval_object(self, expr, qwebcontext):
return self.eval(expr, qwebcontext)
@ -207,7 +207,7 @@ class QWeb(orm.AbstractModel):
return str(expr % qwebcontext)
except Exception:
template = qwebcontext.get('__template__')
raise convert_to_qweb_exception(message="Format error for expression %r" % expr, expression=expr, template=template)
raise_qweb_exception(message="Format error for expression %r" % expr, expression=expr, template=template)
def eval_bool(self, expr, qwebcontext):
return int(bool(self.eval(expr, qwebcontext)))
@ -292,7 +292,7 @@ class QWeb(orm.AbstractModel):
raise
except Exception:
template = qwebcontext.get('__template__')
raise convert_to_qweb_exception(message="Could not render element %r" % element.nodeName, node=element, template=template)
raise_qweb_exception(message="Could not render element %r" % element.nodeName, node=element, template=template)
name = str(element.nodeName)
inner = "".join(g_inner)
trim = template_attributes.get("trim", 0)
@ -611,6 +611,9 @@ class DateTimeConverter(osv.AbstractModel):
strftime_pattern = (u"%s %s" % (lang.date_format, lang.time_format))
pattern = openerp.tools.posix_to_ldml(strftime_pattern, locale=locale)
if options and options.get('hide_seconds'):
pattern = pattern.replace(":ss", "").replace(":s", "")
return babel.dates.format_datetime(value, format=pattern, locale=locale)
class TextConverter(osv.AbstractModel):

View File

@ -728,9 +728,26 @@ class view(osv.osv):
def clear_cache(self):
self.read_template.clear_cache(self)
def _contains_branded(self, node):
return node.tag == 't'\
or 't-raw' in node.attrib\
or any(self.is_node_branded(child) for child in node.iterdescendants())
def _pop_view_branding(self, element):
distributed_branding = dict(
(attribute, element.attrib.pop(attribute))
for attribute in MOVABLE_BRANDING
if element.get(attribute))
return distributed_branding
def distribute_branding(self, e, branding=None, parent_xpath='',
index_map=misc.ConstantMapping(1)):
if e.get('t-ignore') or e.tag == 'head':
# remove any view branding possibly injected by inheritance
attrs = set(MOVABLE_BRANDING)
for descendant in e.iterdescendants(tag=etree.Element):
if not attrs.intersection(descendant.attrib): continue
self._pop_view_branding(descendant)
# TODO: find a better name and check if we have a string to boolean helper
return
@ -742,15 +759,15 @@ class view(osv.osv):
e.set('data-oe-xpath', node_path)
if not e.get('data-oe-model'): return
# if a branded element contains branded elements distribute own
# branding to children unless it's t-raw, then just remove branding
# on current element
if e.tag == 't' or 't-raw' in e.attrib or \
any(self.is_node_branded(child) for child in e.iterdescendants()):
distributed_branding = dict(
(attribute, e.attrib.pop(attribute))
for attribute in MOVABLE_BRANDING
if e.get(attribute))
if set(('t-esc', 't-escf', 't-raw', 't-rawf')).intersection(e.attrib):
# nodes which fully generate their content and have no reason to
# be branded because they can not sensibly be edited
self._pop_view_branding(e)
elif self._contains_branded(e):
# if a branded element contains branded elements distribute own
# branding to children unless it's t-raw, then just remove branding
# on current element
distributed_branding = self._pop_view_branding(e)
if 't-raw' not in e.attrib:
# TODO: collections.Counter if remove p2.6 compat
@ -760,11 +777,12 @@ class view(osv.osv):
if child.get('data-oe-xpath'):
# injected by view inheritance, skip otherwise
# generated xpath is incorrect
continue
indexes[child.tag] += 1
self.distribute_branding(child, distributed_branding,
parent_xpath=node_path,
index_map=indexes)
self.distribute_branding(child)
else:
indexes[child.tag] += 1
self.distribute_branding(
child, distributed_branding,
parent_xpath=node_path, index_map=indexes)
def is_node_branded(self, node):
""" Finds out whether a node is branded or qweb-active (bears a

View File

@ -208,20 +208,19 @@ class res_company(osv.osv):
res['value'] = {'currency_id': currency_id}
return res
def _search(self, cr, uid, args, offset=0, limit=None, order=None,
context=None, count=False, access_rights_uid=None):
def name_search(self, cr, uid, name='', args=None, operator='ilike', context=None, limit=100):
if context is None:
context = {}
if context.get('user_preference'):
if context.pop('user_preference', None):
# We browse as superuser. Otherwise, the user would be able to
# select only the currently visible companies (according to rules,
# which are probably to allow to see the child companies) even if
# she belongs to some other companies.
user = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context)
cmp_ids = list(set([user.company_id.id] + [cmp.id for cmp in user.company_ids]))
return cmp_ids
return super(res_company, self)._search(cr, uid, args, offset=offset, limit=limit, order=order,
context=context, count=count, access_rights_uid=access_rights_uid)
uid = SUPERUSER_ID
args = (args or []) + [('id', 'in', cmp_ids)]
return super(res_company, self).name_search(cr, uid, name=name, args=args, operator=operator, context=context, limit=limit)
def _company_default_get(self, cr, uid, object=False, field=False, context=None):
"""

View File

@ -350,6 +350,7 @@ class res_partner(osv.osv, format_address):
def copy(self, cr, uid, id, default=None, context=None):
if default is None:
default = {}
default['user_ids'] = False
name = self.read(cr, uid, [id], ['name'], context)[0]['name']
default.update({'name': _('%s (copy)') % name})
return super(res_partner, self).copy(cr, uid, id, default, context)

View File

@ -282,7 +282,7 @@
<group name="preferences" col="4">
<field name="lang" readonly="0"/>
<field name="tz" readonly="0"/>
<field name="company_id" widget="selection" readonly="0"
<field name="company_id" options="{'no_create': True}" readonly="0"
groups="base.group_multi_company"/>
</group>
<group string="Email Preferences">

View File

@ -179,3 +179,51 @@ class TestPropertyField(common.TransactionCase):
self.partner.write(cr, alice, [partner_id], {'property_country': country_be})
self.assertEqual(self.partner.browse(cr, alice, partner_id).property_country.id, country_be, "Alice does not see the value he has set on the property field")
self.assertEqual(self.partner.browse(cr, bob, partner_id).property_country.id, country_fr, "Changes made by Alice have overwritten Bob's value")
class TestHtmlField(common.TransactionCase):
def setUp(self):
super(TestHtmlField, self).setUp()
self.partner = self.registry('res.partner')
def test_00_sanitize(self):
cr, uid, context = self.cr, self.uid, {}
old_columns = self.partner._columns
self.partner._columns = dict(old_columns)
self.partner._columns.update({
'comment': fields.html('Secure Html', sanitize=False),
})
some_ugly_html = """<p>Oops this should maybe be sanitized
% if object.some_field and not object.oriented:
<table>
% if object.other_field:
<tr>
${object.mako_thing}
<td>
</tr>
% endif
<tr>
%if object.dummy_field:
<p>Youpie</p>
%endif"""
pid = self.partner.create(cr, uid, {
'name': 'Raoul Poilvache',
'comment': some_ugly_html,
}, context=context)
partner = self.partner.browse(cr, uid, pid, context=context)
self.assertEqual(partner.comment, some_ugly_html, 'Error in HTML field: content was sanitized but field has sanitize=False')
self.partner._columns.update({
'comment': fields.html('Unsecure Html', sanitize=True),
})
self.partner.write(cr, uid, [pid], {
'comment': some_ugly_html,
}, context=context)
partner = self.partner.browse(cr, uid, pid, context=context)
# sanitize should have closed tags left open in the original html
self.assertIn('</table>', partner.comment, 'Error in HTML field: content does not seem to have been sanitized despise sanitize=True')
self.assertIn('</td>', partner.comment, 'Error in HTML field: content does not seem to have been sanitized despise sanitize=True')
self.partner._columns = old_columns

View File

@ -1,6 +1,8 @@
# -*- encoding: utf-8 -*-
from functools import partial
import unittest2
from lxml import etree as ET
from lxml.builder import E
@ -8,6 +10,24 @@ from openerp.tests import common
Field = E.field
class ViewCase(common.TransactionCase):
def setUp(self):
super(ViewCase, self).setUp()
self.addTypeEqualityFunc(ET._Element, self.assertTreesEqual)
def assertTreesEqual(self, n1, n2, msg=None):
self.assertEqual(n1.tag, n2.tag)
self.assertEqual((n1.text or '').strip(), (n2.text or '').strip(), msg)
self.assertEqual((n1.tail or '').strip(), (n2.tail or '').strip(), msg)
# Because lxml uses ordereddicts in which order is important to
# equality (!?!?!?!)
self.assertEqual(dict(n1.attrib), dict(n2.attrib), msg)
for c1, c2 in zip(n1, n2):
self.assertTreesEqual(c1, c2, msg)
class TestNodeLocator(common.BaseCase):
"""
The node locator returns None when it can not find a node, and the first
@ -98,7 +118,7 @@ class TestNodeLocator(common.BaseCase):
E.foo(attr='1', version='3'))
self.assertIsNone(node)
class TestViewInheritance(common.TransactionCase):
class TestViewInheritance(ViewCase):
def arch_for(self, name, view_type='form', parent=None):
""" Generates a trivial view of the specified ``view_type``.
@ -206,7 +226,7 @@ class TestViewInheritance(common.TransactionCase):
self.View.default_view(
self.cr, self.uid, model=self.model, view_type='graph'))
class TestApplyInheritanceSpecs(common.TransactionCase):
class TestApplyInheritanceSpecs(ViewCase):
""" Applies a sequence of inheritance specification nodes to a base
architecture. IO state parameters (cr, uid, model, context) are used for
error reporting
@ -230,8 +250,8 @@ class TestApplyInheritanceSpecs(common.TransactionCase):
spec, None)
self.assertEqual(
ET.tostring(self.base_arch),
ET.tostring(E.form(Field(name="replacement"), string="Title")))
self.base_arch,
E.form(Field(name="replacement"), string="Title"))
def test_delete(self):
spec = Field(name="target", position="replace")
@ -241,8 +261,8 @@ class TestApplyInheritanceSpecs(common.TransactionCase):
spec, None)
self.assertEqual(
ET.tostring(self.base_arch),
ET.tostring(E.form(string="Title")))
self.base_arch,
E.form(string="Title"))
def test_insert_after(self):
spec = Field(
@ -254,12 +274,12 @@ class TestApplyInheritanceSpecs(common.TransactionCase):
spec, None)
self.assertEqual(
ET.tostring(self.base_arch),
ET.tostring(E.form(
self.base_arch,
E.form(
Field(name="target"),
Field(name="inserted"),
string="Title"
)))
))
def test_insert_before(self):
spec = Field(
@ -271,11 +291,11 @@ class TestApplyInheritanceSpecs(common.TransactionCase):
spec, None)
self.assertEqual(
ET.tostring(self.base_arch),
ET.tostring(E.form(
self.base_arch,
E.form(
Field(name="inserted"),
Field(name="target"),
string="Title")))
string="Title"))
def test_insert_inside(self):
default = Field(Field(name="inserted"), name="target")
@ -289,13 +309,13 @@ class TestApplyInheritanceSpecs(common.TransactionCase):
spec, None)
self.assertEqual(
ET.tostring(self.base_arch),
ET.tostring(E.form(
self.base_arch,
E.form(
Field(
Field(name="inserted"),
Field(name="inserted 2"),
name="target"),
string="Title")))
string="Title"))
def test_unpack_data(self):
spec = E.data(
@ -310,15 +330,15 @@ class TestApplyInheritanceSpecs(common.TransactionCase):
spec, None)
self.assertEqual(
ET.tostring(self.base_arch),
ET.tostring(E.form(
self.base_arch,
E.form(
Field(
Field(name="inserted 0"),
Field(name="inserted 1"),
Field(name="inserted 2"),
Field(name="inserted 3"),
name="target"),
string="Title")))
string="Title"))
def test_invalid_position(self):
spec = Field(
@ -350,18 +370,18 @@ class TestApplyInheritanceSpecs(common.TransactionCase):
self.base_arch,
spec, None)
class TestApplyInheritedArchs(common.TransactionCase):
class TestApplyInheritedArchs(ViewCase):
""" Applies a sequence of modificator archs to a base view
"""
class TestViewCombined(common.TransactionCase):
class TestViewCombined(ViewCase):
"""
Test fallback operations of View.read_combined:
* defaults mapping
* ?
"""
class TestNoModel(common.TransactionCase):
class TestNoModel(ViewCase):
def test_create_view_nomodel(self):
View = self.registry('ir.ui.view')
view_id = View.create(self.cr, self.uid, {
@ -411,13 +431,11 @@ class TestNoModel(common.TransactionCase):
'value': translated_text,
})
sarch = View.translate_qweb(self.cr, self.uid, None, self.arch, 'fr_FR')
self.text_para.text = translated_text
self.assertEqual(
ET.tostring(sarch, encoding='utf-8'),
ET.tostring(self.arch, encoding='utf-8'))
class TestTemplating(common.TransactionCase):
self.text_para.text = translated_text
self.assertEqual(sarch, self.arch)
class TestTemplating(ViewCase):
def setUp(self):
import openerp.modules
super(TestTemplating, self).setUp()
@ -473,7 +491,126 @@ class TestTemplating(common.TransactionCase):
second.get('data-oe-id'),
"second should come from the extension view")
class test_views(common.TransactionCase):
def test_branding_distribute_inner(self):
""" Checks that the branding is correctly distributed within a view
extension
"""
Views = self.registry('ir.ui.view')
id = Views.create(self.cr, self.uid, {
'name': "Base view",
'type': 'qweb',
'arch': """<root>
<item order="1"/>
</root>"""
})
id2 = Views.create(self.cr, self.uid, {
'name': "Extension",
'type': 'qweb',
'inherit_id': id,
'arch': """<xpath expr="//item" position="before">
<item order="2">
<content t-att-href="foo">bar</content>
</item>
</xpath>"""
})
arch_string = Views.read_combined(
self.cr, self.uid, id, fields=['arch'],
context={'inherit_branding': True})['arch']
arch = ET.fromstring(arch_string)
Views.distribute_branding(arch)
self.assertEqual(
arch,
E.root(
E.item(
E.content("bar", {
't-att-href': "foo",
'data-oe-model': 'ir.ui.view',
'data-oe-id': str(id2),
'data-oe-field': 'arch',
'data-oe-xpath': '/xpath/item/content[1]',
}), {
'order': '2',
'data-oe-source-id': str(id)
}),
E.item({
'order': '1',
'data-oe-model': 'ir.ui.view',
'data-oe-id': str(id),
'data-oe-field': 'arch',
'data-oe-xpath': '/root[1]/item[1]'
})
)
)
def test_esc_no_branding(self):
Views = self.registry('ir.ui.view')
id = Views.create(self.cr, self.uid, {
'name': "Base View",
'type': 'qweb',
'arch': """<root>
<item><span t-esc="foo"/></item>
</root>""",
})
arch_string = Views.read_combined(
self.cr, self.uid, id, fields=['arch'],
context={'inherit_branding': True})['arch']
arch = ET.fromstring(arch_string)
Views.distribute_branding(arch)
self.assertEqual(arch, E.root(E.item(E.span({'t-esc': "foo"}))))
def test_ignore_unbrand(self):
Views = self.registry('ir.ui.view')
id = Views.create(self.cr, self.uid, {
'name': "Base view",
'type': 'qweb',
'arch': """<root>
<item order="1" t-ignore="true">
<t t-esc="foo"/>
</item>
</root>"""
})
id2 = Views.create(self.cr, self.uid, {
'name': "Extension",
'type': 'qweb',
'inherit_id': id,
'arch': """<xpath expr="//item[@order='1']" position="inside">
<item order="2">
<content t-att-href="foo">bar</content>
</item>
</xpath>"""
})
arch_string = Views.read_combined(
self.cr, self.uid, id, fields=['arch'],
context={'inherit_branding': True})['arch']
arch = ET.fromstring(arch_string)
Views.distribute_branding(arch)
self.assertEqual(
arch,
E.root(
E.item(
{'t-ignore': 'true', 'order': '1'},
E.t({'t-esc': 'foo'}),
E.item(
{'order': '2', 'data-oe-source-id': str(id)},
E.content(
{'t-att-href': 'foo'},
"bar")
)
)
),
"t-ignore should apply to injected sub-view branding, not just to"
" the main view's"
)
class test_views(ViewCase):
def test_nonexistent_attribute_removal(self):
Views = self.registry('ir.ui.view')
@ -589,16 +726,17 @@ class test_views(common.TransactionCase):
})
self.assertEqual(view['type'], 'form')
self.assertEqual(
ET.tostring(ET.fromstring(
ET.fromstring(
view['arch'],
parser=ET.XMLParser(remove_blank_text=True)
)),
'<form string="Replacement title" version="7.0">'
'<p>Replacement data</p>'
'<footer thing="bob">'
'<button name="action_next" type="object" string="New button"/>'
'</footer>'
'</form>')
),
E.form(
E.p("Replacement data"),
E.footer(
E.button(name="action_next", type="object", string="New button"),
thing="bob"
),
string="Replacement title", version="7.0"))
def test_view_inheritance_divergent_models(self):
Views = self.registry('ir.ui.view')
@ -656,14 +794,13 @@ class test_views(common.TransactionCase):
})
self.assertEqual(view['type'], 'form')
self.assertEqual(
ET.tostring(ET.fromstring(
ET.fromstring(
view['arch'],
parser=ET.XMLParser(remove_blank_text=True)
)),
'<form string="Replacement title" version="7.0">'
'<p>Replacement data</p>'
'<footer>'
'<button name="action_next" type="object" string="New button"/>'
'</footer>'
'</form>')
),
E.form(
E.p("Replacement data"),
E.footer(
E.button(name="action_next", type="object", string="New button")),
string="Replacement title", version="7.0"
))

View File

@ -283,20 +283,19 @@ class WebRequest(object):
# Backward for 7.0
if self.endpoint.first_arg_is_req:
args = (request,) + args
# Correct exception handling and concurency retry
@service_model.check
def checked_call(___dbname, *a, **kw):
return self.endpoint(*a, **kw)
# FIXME: code and rollback management could be cleaned
try:
if self.db:
return checked_call(self.db, *args, **kwargs)
return self.endpoint(*args, **kwargs)
except Exception:
# The decorator can call us more than once if there is an database error. In this
# case, the request cursor is unusable. Rollback transaction to create a new one.
if self._cr:
self._cr.rollback()
raise
return self.endpoint(*a, **kw)
if self.db:
return checked_call(self.db, *args, **kwargs)
return self.endpoint(*args, **kwargs)
@property
def debug(self):
@ -807,7 +806,7 @@ class OpenERPSession(werkzeug.contrib.sessions.Session):
self.setdefault("uid", None)
self.setdefault("login", None)
self.setdefault("password", None)
self.setdefault("context", {'tz': "UTC", "uid": None})
self.setdefault("context", {})
def get_context(self):
"""

View File

@ -236,15 +236,24 @@ class char(_column):
class text(_column):
_type = 'text'
class html(text):
_type = 'html'
_symbol_c = '%s'
def _symbol_f(x):
if x is None or x == False:
def _symbol_set_html(self, value):
if value is None or value is False:
return None
return html_sanitize(x)
_symbol_set = (_symbol_c, _symbol_f)
if not self._sanitize:
return value
return html_sanitize(value)
def __init__(self, string='unknown', sanitize=True, **args):
super(html, self).__init__(string=string, **args)
self._sanitize = sanitize
# symbol_set redefinition because of sanitize specific behavior
self._symbol_f = self._symbol_set_html
self._symbol_set = (self._symbol_c, self._symbol_f)
import __builtin__

View File

@ -9,7 +9,10 @@ import os.path
import platform
import psutil
import random
import resource
if os.name == 'posix':
import resource
else:
resource = None
import select
import signal
import socket
@ -285,8 +288,9 @@ class ThreadedServer(CommonServer):
_logger.info("Initiating shutdown")
_logger.info("Hit CTRL-C again or send a second signal to force the shutdown.")
self.httpd.shutdown()
self.close_socket(self.httpd.socket)
if self.httpd:
self.httpd.shutdown()
self.close_socket(self.httpd.socket)
# Manually join() all threads before calling sys.exit() to allow a second signal
# to trigger _force_quit() in case some non-daemon threads won't exit cleanly.
@ -637,6 +641,8 @@ class Worker(object):
raise
def process_limit(self):
if resource is None:
return
# If our parent changed sucide
if self.ppid != os.getppid():
_logger.info("Worker (%s) Parent changed", self.pid)
@ -845,7 +851,8 @@ def load_test_file_py(registry, test_file):
stream = openerp.modules.module.TestStream()
result = unittest2.TextTestRunner(verbosity=2, stream=stream).run(suite)
success = result.wasSuccessful()
registry._assertion_report.report_result(success)
if hasattr(registry._assertion_report,'report_result'):
registry._assertion_report.report_result(success)
if not success:
_logger.error('%s: at least one error occurred in a test', test_file)

View File

@ -13,8 +13,11 @@ import subprocess
import threading
import time
import unittest2
import urllib2
import xmlrpclib
from datetime import datetime, timedelta
import openerp
_logger = logging.getLogger(__name__)
@ -150,7 +153,7 @@ class SingleTransactionCase(BaseCase):
class HttpCase(TransactionCase):
""" Transactionnal HTTP TestCase with a phantomjs helper.
""" Transactionnal HTTP TestCase with url_open and phantomjs helpers.
"""
def __init__(self, methodName='runTest'):
@ -171,11 +174,17 @@ class HttpCase(TransactionCase):
self.cr._test_lock = threading.RLock()
HTTP_SESSION[self.session_id] = self.cr
def tearDown(self):
del HTTP_SESSION[self.session_id]
super(HttpCase, self).tearDown()
def url_open(self, url, data=None, timeout=10):
opener = urllib2.build_opener()
opener.addheaders.append(('Cookie', 'session_id=%s' % self.session_id))
if url.startswith('/'):
url = "http://localhost:%s%s" % (PORT, url)
return opener.open(url, data, timeout)
def phantom_poll(self, phantom, timeout):
""" Phantomjs Test protocol.
@ -187,11 +196,12 @@ class HttpCase(TransactionCase):
Other lines are relayed to the test log.
"""
t0 = time.time()
t0 = datetime.now()
td = timedelta(seconds=timeout)
buf = bytearray()
while True:
# timeout
self.assertLess(time.time(), t0 + timeout,
self.assertLess(datetime.now() - t0, td,
"PhantomJS tests should take less than %s seconds" % timeout)
# read a byte

View File

@ -2,22 +2,17 @@
function waitFor (ready, callback, timeout, timeoutMessageCallback) {
timeout = timeout || 10000;
var start = new Date().getTime();
var condition = ready();
var interval = setInterval(function() {
if ((new Date().getTime() - start < timeout) && !condition ) {
condition = ready();
var start = new Date;
(function waitLoop() {
if(new Date - start > timeout) {
error(timeoutMessageCallback ? timeoutMessageCallback() : "Timeout after "+timeout+" ms");
} else if (ready()) {
callback();
} else {
if(!condition) {
var message = timeoutMessageCallback ? timeoutMessageCallback() : "Timeout after "+timeout+" ms";
console.log("Waiting for " + ready);
error(message);
} else {
clearInterval(interval);
callback();
}
setTimeout(waitLoop, 250);
}
}, 250);
}());
}
function error(message) {
@ -103,12 +98,12 @@ function PhantomTest() {
// ----------------------------------------------------
this.run = function(url_path, code, ready) {
if(self.options.login) {
qp = [];
var qp = [];
qp.push('db=' + self.options.db);
qp.push('login=' + self.options.login);
qp.push('key=' + self.options.password);
qp.push('redirect=' + encodeURIComponent(url_path));
var url_path = "/login?" + qp.join('&');
url_path = "/login?" + qp.join('&');
}
var url = self.origin + url_path;
self.page.open(url, function(status) {
@ -118,13 +113,15 @@ function PhantomTest() {
console.log('loaded', url, status);
// process ready
waitFor(function() {
return self.page.evaluate(function (ready) {
console.log("waiting for: calling page evaluate");
return self.page.evaluate(function (ready) {
console.log("waiting for", ready);
var r = false;
try {
console.log("waiting for: page evaluating ", ready);
r = !!eval(ready);
} catch(ex) {
console.log("waiting for " + ready);
}
} catch(ex) { }
console.log("waiting for: returning from page evaluate");
return r;
}, ready);
// run test

View File

@ -260,7 +260,8 @@ class configmanager(object):
# Advanced options
group = optparse.OptionGroup(parser, "Advanced options")
group.add_option('--auto-reload', dest='auto_reload', action='store_true', my_default=False, help='enable auto reload')
if os.name == 'posix':
group.add_option('--auto-reload', dest='auto_reload', action='store_true', my_default=False, help='enable auto reload')
group.add_option('--debug', dest='debug_mode', action='store_true', my_default=False, help='enable debug mode')
group.add_option("--stop-after-init", action="store_true", dest="stop_after_init", my_default=False,
help="stop the server after its initialization")
@ -282,27 +283,28 @@ class configmanager(object):
help="Use the unaccent function provided by the database when available.")
parser.add_option_group(group)
group = optparse.OptionGroup(parser, "Multiprocessing options")
# TODO sensible default for the three following limits.
group.add_option("--workers", dest="workers", my_default=0,
help="Specify the number of workers, 0 disable prefork mode.",
type="int")
group.add_option("--limit-memory-soft", dest="limit_memory_soft", my_default=2048 * 1024 * 1024,
help="Maximum allowed virtual memory per worker, when reached the worker be reset after the current request (default 671088640 aka 640MB).",
type="int")
group.add_option("--limit-memory-hard", dest="limit_memory_hard", my_default=2560 * 1024 * 1024,
help="Maximum allowed virtual memory per worker, when reached, any memory allocation will fail (default 805306368 aka 768MB).",
type="int")
group.add_option("--limit-time-cpu", dest="limit_time_cpu", my_default=60,
help="Maximum allowed CPU time per request (default 60).",
type="int")
group.add_option("--limit-time-real", dest="limit_time_real", my_default=120,
help="Maximum allowed Real time per request (default 120).",
type="int")
group.add_option("--limit-request", dest="limit_request", my_default=8192,
help="Maximum number of request to be processed per worker (default 8192).",
type="int")
parser.add_option_group(group)
if os.name == 'posix':
group = optparse.OptionGroup(parser, "Multiprocessing options")
# TODO sensible default for the three following limits.
group.add_option("--workers", dest="workers", my_default=0,
help="Specify the number of workers, 0 disable prefork mode.",
type="int")
group.add_option("--limit-memory-soft", dest="limit_memory_soft", my_default=2048 * 1024 * 1024,
help="Maximum allowed virtual memory per worker, when reached the worker be reset after the current request (default 671088640 aka 640MB).",
type="int")
group.add_option("--limit-memory-hard", dest="limit_memory_hard", my_default=2560 * 1024 * 1024,
help="Maximum allowed virtual memory per worker, when reached, any memory allocation will fail (default 805306368 aka 768MB).",
type="int")
group.add_option("--limit-time-cpu", dest="limit_time_cpu", my_default=60,
help="Maximum allowed CPU time per request (default 60).",
type="int")
group.add_option("--limit-time-real", dest="limit_time_real", my_default=120,
help="Maximum allowed Real time per request (default 120).",
type="int")
group.add_option("--limit-request", dest="limit_request", my_default=8192,
help="Maximum number of request to be processed per worker (default 8192).",
type="int")
parser.add_option_group(group)
# Copy all optparse options (i.e. MyOption) into self.options.
for group in parser.option_groups:
@ -413,12 +415,22 @@ class configmanager(object):
'list_db', 'xmlrpcs', 'proxy_mode',
'test_file', 'test_enable', 'test_commit', 'test_report_directory',
'osv_memory_count_limit', 'osv_memory_age_limit', 'max_cron_threads', 'unaccent',
'workers', 'limit_memory_hard', 'limit_memory_soft', 'limit_time_cpu', 'limit_time_real', 'limit_request',
'auto_reload', 'data_dir',
'data_dir',
]
posix_keys = [
'auto_reload', 'workers',
'limit_memory_hard', 'limit_memory_soft',
'limit_time_cpu', 'limit_time_real', 'limit_request',
]
if os.name == 'posix':
keys += posix_keys
else:
self.options.update(dict.fromkeys(posix_keys, None))
# Copy the command-line arguments...
for arg in keys:
# Copy the command-line argument...
if getattr(opt, arg) is not None:
self.options[arg] = getattr(opt, arg)
# ... or keep, but cast, the config file value.

View File

@ -75,7 +75,7 @@ def py2exe_options():
"skip_archive": 1,
"optimize": 0, # keep the assert running, because the integrated tests rely on them.
"dist_dir": 'dist',
"packages": [ "DAV", "HTMLParser", "PIL", "asynchat", "asyncore", "commands", "dateutil", "decimal", "docutils", "email", "encodings", "imaplib", "jinja2", "lxml", "lxml._elementpath", "lxml.builder", "lxml.etree", "lxml.objectify", "mako", "openerp", "poplib", "pychart", "pydot", "pyparsing", "pytz", "reportlab", "select", "simplejson", "smtplib", "uuid", "vatnumber", "vobject", "xml", "xml.dom", "yaml", ],
"packages": ["HTMLParser", "PIL", "asynchat", "asyncore", "commands", "dateutil", "decimal", "docutils", "email", "encodings", "imaplib", "jinja2", "lxml", "lxml._elementpath", "lxml.builder", "lxml.etree", "lxml.objectify", "mako", "openerp", "poplib", "pychart", "pydot", "pyparsing", "pytz", "reportlab", "select", "simplejson", "smtplib", "uuid", "vatnumber", "vobject", "xml", "xml.dom", "yaml", ],
"excludes" : ["Tkconstants","Tkinter","tcl"],
}
}