commit
2170da5e1e
|
@ -37,7 +37,6 @@ There are two types of views:
|
|||
|
||||
.. note:: Since OpenERP 4.1, form views can also contain graphs.
|
||||
|
||||
|
||||
Form views
|
||||
----------
|
||||
|
||||
|
@ -388,6 +387,33 @@ The easiest method to compute real statistics on objects is:
|
|||
You can get en example in all modules of the form: report\_.... Example: report_crm.
|
||||
|
||||
|
||||
Controlling view actions
|
||||
------------------------
|
||||
|
||||
When defining a view, the following attributes can be added on the
|
||||
opening element of the view (i.e. ``<form>``, ``<tree>``...)
|
||||
|
||||
``create``
|
||||
set to ``false`` to hide the link / button which allows to create a new
|
||||
record.
|
||||
|
||||
``delete``
|
||||
set to ``false`` to hide the link / button which allows to remove a
|
||||
record.
|
||||
|
||||
``edit``
|
||||
set to ``false`` to hide the link / button which allows to
|
||||
edit a record.
|
||||
|
||||
|
||||
These attributes are available on form, tree, kanban and gantt
|
||||
views. They are normally automatically set from the access rights of
|
||||
the users, but can be forced globally in the view definition. A
|
||||
possible use case for these attributes is to define an inner tree view
|
||||
for a one2many relation inside a form view, in which the user cannot
|
||||
add or remove related records, but only edit the existing ones (which
|
||||
are presumably created through another way, such as a wizard).
|
||||
|
||||
|
||||
Calendar Views
|
||||
--------------
|
||||
|
@ -680,6 +706,7 @@ toolbar
|
|||
its descendants will be displayed in the main tree. The value is ignored
|
||||
for flat lists.
|
||||
|
||||
|
||||
Grouping Elements
|
||||
+++++++++++++++++
|
||||
|
||||
|
@ -1351,12 +1378,22 @@ When you add a one2many field in a form view, you do something like this :
|
|||
|
||||
If you want to specify the views to use, you can add a *context* attribute, and
|
||||
specify a view id for each type of view supported, exactly like the action's
|
||||
*view_id* attribute:
|
||||
*view_id* attribute, except that the provided view id must always be
|
||||
fully-qualified with the module name, even if it belongs to the same module:
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<field name="order_line" colspan="4" nolabel="1"
|
||||
context="{'form_view_ref' : 'module.view_id', 'tree_view_ref' : 'model.view_id'}"/>
|
||||
context="{'form_view_ref': 'module.view_id',
|
||||
'tree_view_ref': 'module.view_id'}"/>
|
||||
|
||||
.. note::
|
||||
|
||||
You *have to* put the module name in the view_id, because this
|
||||
is evaluated when the view is displayed, and not when the XML file
|
||||
is parsed, so the module name information is not available. Failing
|
||||
to do so will result in the default view being selected (see
|
||||
below).
|
||||
|
||||
If you don't specify the views, OpenERP will choose one in this order :
|
||||
|
||||
|
|
|
@ -6,6 +6,8 @@ Changelog
|
|||
`trunk`
|
||||
-------
|
||||
|
||||
- Added support of custom group_by format and display format when using group_by
|
||||
on a datetime field, using datetime_format context key
|
||||
- Improved ``html_email_clean`` in tools: better quote and signature finding,
|
||||
added shortening.
|
||||
- Cleaned and slightly refactored ``ir.actions.server``. The ``loop``, ``sms``
|
||||
|
|
|
@ -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: 2013-09-06 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
"X-Poedit-Language: Czech\n"
|
||||
|
||||
#. module: base
|
||||
|
@ -4544,7 +4544,7 @@ msgstr "Nauru"
|
|||
#: code:addons/base/res/res_company.py:166
|
||||
#, python-format
|
||||
msgid "Reg"
|
||||
msgstr ""
|
||||
msgstr "IČ"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_property
|
||||
|
|
|
@ -8,14 +8,14 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2012-08-20 15:44+0000\n"
|
||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
||||
"PO-Revision-Date: 2013-09-26 21:06+0000\n"
|
||||
"Last-Translator: Morten Schou <ms@msteknik.dk>\n"
|
||||
"Language-Team: Danish <da@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-27 05:48+0000\n"
|
||||
"X-Generator: Launchpad (build 16774)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -252,12 +252,12 @@ msgstr "Swaziland"
|
|||
#: code:addons/orm.py:4485
|
||||
#, python-format
|
||||
msgid "created."
|
||||
msgstr ""
|
||||
msgstr "Oprettet"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.report.xml,report_xsl:0
|
||||
msgid "XSL Path"
|
||||
msgstr ""
|
||||
msgstr "XLS sti"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_tr
|
||||
|
@ -283,7 +283,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:res.groups,name:base.group_multi_currency
|
||||
msgid "Multi Currencies"
|
||||
msgstr ""
|
||||
msgstr "Flere valutaer"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_cl
|
||||
|
@ -299,7 +299,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_sale
|
||||
msgid "Sales Management"
|
||||
msgstr ""
|
||||
msgstr "Salgs administration"
|
||||
|
||||
#. module: base
|
||||
#: help:res.partner,user_id:0
|
||||
|
@ -307,6 +307,7 @@ msgid ""
|
|||
"The internal user that is in charge of communicating with this contact if "
|
||||
"any."
|
||||
msgstr ""
|
||||
"Den interne bruger som er ansvarlig for kommunikationen med denne kontakt"
|
||||
|
||||
#. module: base
|
||||
#: view:res.partner:0
|
||||
|
@ -321,7 +322,7 @@ msgstr "Antal moduler"
|
|||
#. module: base
|
||||
#: help:multi_company.default,company_dest_id:0
|
||||
msgid "Company to store the current record"
|
||||
msgstr ""
|
||||
msgstr "Firma som denne post skal gemmes i"
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner.bank.type.field,size:0
|
||||
|
@ -349,7 +350,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: sql_constraint:res.lang:0
|
||||
msgid "The name of the language must be unique !"
|
||||
msgstr ""
|
||||
msgstr "Sprogets navn skal være unik"
|
||||
|
||||
#. module: base
|
||||
#: selection:res.request,state:0
|
||||
|
@ -377,7 +378,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.category,name:base.module_category_customer_relationship_management
|
||||
msgid "Customer Relationship Management"
|
||||
msgstr ""
|
||||
msgstr "Kundestyring (CRM)"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_delivery
|
||||
|
@ -432,12 +433,12 @@ msgstr ""
|
|||
#: view:ir.attachment:0
|
||||
#: field:ir.attachment,create_uid:0
|
||||
msgid "Owner"
|
||||
msgstr ""
|
||||
msgstr "Ejer"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.act_window:0
|
||||
msgid "Source Object"
|
||||
msgstr ""
|
||||
msgstr "Kilde objekt"
|
||||
|
||||
#. module: base
|
||||
#: model:res.partner.bank.type,format_layout:base.bank_normal
|
||||
|
@ -475,6 +476,8 @@ msgid ""
|
|||
"One of the records you are trying to modify has already been deleted "
|
||||
"(Document type: %s)."
|
||||
msgstr ""
|
||||
"En af de poster du prøver at ændre, er allerede blevet slettet (dokument "
|
||||
"type:%s)"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.act_window,views:0
|
||||
|
@ -488,12 +491,12 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:ir.model.relation,name:0
|
||||
msgid "Relation Name"
|
||||
msgstr ""
|
||||
msgstr "Relationens navn"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.rule:0
|
||||
msgid "Create Access Right"
|
||||
msgstr ""
|
||||
msgstr "Opret adgangs rettighed"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.tv
|
||||
|
@ -541,7 +544,7 @@ msgstr "Fransk Guyana"
|
|||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_hr
|
||||
msgid "Jobs, Departments, Employees Details"
|
||||
msgstr ""
|
||||
msgstr "Jobs, Afdelinger, Ansattes detaljer"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_analytic
|
||||
|
@ -561,7 +564,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_idea
|
||||
msgid "Ideas"
|
||||
msgstr ""
|
||||
msgstr "Ideer"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_event
|
||||
|
@ -584,7 +587,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Bosnian / bosanski jezik"
|
||||
msgstr ""
|
||||
msgstr "Bosnisk"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.report.xml,attachment_use:0
|
||||
|
@ -622,12 +625,12 @@ msgstr "Spansk (VE) / Español (VE)"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_hr_timesheet_invoice
|
||||
msgid "Invoice on Timesheets"
|
||||
msgstr ""
|
||||
msgstr "Faktura fra timesedler"
|
||||
|
||||
#. module: base
|
||||
#: view:base.module.upgrade:0
|
||||
msgid "Your system will be updated."
|
||||
msgstr ""
|
||||
msgstr "Systemet bliver opdateret"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.todo,note:0
|
||||
|
@ -648,7 +651,7 @@ msgstr "Colombia"
|
|||
#. module: base
|
||||
#: model:res.partner.title,name:base.res_partner_title_mister
|
||||
msgid "Mister"
|
||||
msgstr ""
|
||||
msgstr "Hr."
|
||||
|
||||
#. module: base
|
||||
#: help:res.country,code:0
|
||||
|
@ -656,26 +659,28 @@ msgid ""
|
|||
"The ISO country code in two chars.\n"
|
||||
"You can use this field for quick search."
|
||||
msgstr ""
|
||||
"ISO landekoden i 2 tegn.\n"
|
||||
"Kan bruges til hurtig søgning"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.pw
|
||||
msgid "Palau"
|
||||
msgstr ""
|
||||
msgstr "Palau"
|
||||
|
||||
#. module: base
|
||||
#: view:res.partner:0
|
||||
msgid "Sales & Purchases"
|
||||
msgstr ""
|
||||
msgstr "Salg og Indkøb"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.translation:0
|
||||
msgid "Untranslated"
|
||||
msgstr ""
|
||||
msgstr "ikke oversat"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.mail_server:0
|
||||
msgid "Outgoing Mail Server"
|
||||
msgstr ""
|
||||
msgstr "server til udgående post"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.act_window,context:0
|
||||
|
@ -708,12 +713,12 @@ msgstr ""
|
|||
#. module: base
|
||||
#: sql_constraint:ir.config_parameter:0
|
||||
msgid "Key must be unique."
|
||||
msgstr ""
|
||||
msgstr "Nøglen skal være unik"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_plugin_outlook
|
||||
msgid "Outlook Plug-In"
|
||||
msgstr ""
|
||||
msgstr "Outlook Plug-In"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account
|
||||
|
@ -751,7 +756,7 @@ msgstr ""
|
|||
#: view:ir.model:0
|
||||
#: field:ir.model,name:0
|
||||
msgid "Model Description"
|
||||
msgstr ""
|
||||
msgstr "Model beskrivelse"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_marketing
|
||||
|
@ -798,7 +803,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: help:ir.cron,nextcall:0
|
||||
msgid "Next planned execution date for this job."
|
||||
msgstr ""
|
||||
msgstr "Næste planlagte kørsel for dette job"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_ui_view
|
||||
|
@ -813,7 +818,7 @@ msgstr "Eritrea"
|
|||
#. module: base
|
||||
#: sql_constraint:res.company:0
|
||||
msgid "The company name must be unique !"
|
||||
msgstr ""
|
||||
msgstr "Firmanavnet skal være unik!"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.ui.menu,name:base.menu_base_action_rule_admin
|
||||
|
@ -849,7 +854,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:ir.mail_server:0
|
||||
msgid "Security and Authentication"
|
||||
msgstr ""
|
||||
msgstr "Sikkerhed og godkendelse"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_web_calendar
|
||||
|
@ -865,7 +870,7 @@ msgstr "Svensk / Swedish"
|
|||
#: field:base.language.export,name:0
|
||||
#: field:ir.attachment,datas_fname:0
|
||||
msgid "File Name"
|
||||
msgstr ""
|
||||
msgstr "Filnavn"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.rs
|
||||
|
@ -886,7 +891,7 @@ msgstr ""
|
|||
#: field:base.language.import,overwrite:0
|
||||
#: field:base.language.install,overwrite:0
|
||||
msgid "Overwrite Existing Terms"
|
||||
msgstr ""
|
||||
msgstr "Overskriv eksisterende betingelser"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_hr_holidays
|
||||
|
@ -941,6 +946,7 @@ msgstr "Papua Ny Guinea"
|
|||
#: help:ir.actions.report.xml,report_type:0
|
||||
msgid "Report Type, e.g. pdf, html, raw, sxw, odt, html2html, mako2html, ..."
|
||||
msgstr ""
|
||||
"Rapport Type, eks. pdf, html, raw, sxw, odt, html2html, mako2html, ..."
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_document_webdav
|
||||
|
@ -950,7 +956,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:res.users:0
|
||||
msgid "Email Preferences"
|
||||
msgstr ""
|
||||
msgstr "Email indstillinger"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_fields.py:195
|
||||
|
@ -993,7 +999,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.model,name:base.model_base_module_upgrade
|
||||
msgid "Module Upgrade"
|
||||
msgstr ""
|
||||
msgstr "Opgrader modul"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -1013,7 +1019,7 @@ msgstr "Oman"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_mrp
|
||||
msgid "MRP"
|
||||
msgstr ""
|
||||
msgstr "MRP"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_hr_attendance
|
||||
|
@ -1035,7 +1041,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_membership
|
||||
msgid "Membership Management"
|
||||
msgstr ""
|
||||
msgstr "Medlems håndtering"
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.module.module,license:0
|
||||
|
@ -1051,7 +1057,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:base.act_menu_create
|
||||
#: view:wizard.ir.model.menu.create:0
|
||||
msgid "Create Menu"
|
||||
msgstr ""
|
||||
msgstr "Opret Menu"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.in
|
||||
|
@ -1067,12 +1073,12 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_google_base_account
|
||||
msgid "Google Users"
|
||||
msgstr ""
|
||||
msgstr "Google brugere"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_fleet
|
||||
msgid "Fleet Management"
|
||||
msgstr ""
|
||||
msgstr "Bilpark håndtering"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.server.object.lines,value:0
|
||||
|
@ -1143,6 +1149,8 @@ msgstr ""
|
|||
msgid ""
|
||||
"Users added to this group are automatically added in the following groups."
|
||||
msgstr ""
|
||||
"Brugere tilføjet denne gruppe, bliver automatisk tilføjet i de følgende "
|
||||
"grupper."
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_model.py:732
|
||||
|
@ -1154,12 +1162,12 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:res.users:0
|
||||
msgid "Change the user password."
|
||||
msgstr ""
|
||||
msgstr "Skift brugerens adgangskode."
|
||||
|
||||
#. module: base
|
||||
#: view:res.lang:0
|
||||
msgid "%B - Full month name."
|
||||
msgstr ""
|
||||
msgstr "%B - Fulde navn på måned."
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.todo,type:0
|
||||
|
@ -1174,12 +1182,12 @@ msgstr ""
|
|||
#: view:ir.values:0
|
||||
#: field:ir.values,key:0
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
msgstr "Type"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.mail_server,smtp_user:0
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
msgstr "Brugernavn"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_br
|
||||
|
@ -1235,6 +1243,8 @@ msgid ""
|
|||
"Language with code \"%s\" is not defined in your system !\n"
|
||||
"Define it through the Administration menu."
|
||||
msgstr ""
|
||||
"Sproget med koden \"%s\" er ikke indlæst i systemet !\n"
|
||||
"Indlæs gennem Administrations menuen."
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.gu
|
||||
|
@ -1244,17 +1254,17 @@ msgstr "Guam (USA)"
|
|||
#. module: base
|
||||
#: sql_constraint:res.country:0
|
||||
msgid "The name of the country must be unique !"
|
||||
msgstr ""
|
||||
msgstr "Landets navn skal være unikt!"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.module.module,installed_version:0
|
||||
msgid "Latest Version"
|
||||
msgstr ""
|
||||
msgstr "Seneste version"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.rule:0
|
||||
msgid "Delete Access Right"
|
||||
msgstr ""
|
||||
msgstr "Slet adgangs rettighed"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_mail_server.py:214
|
||||
|
@ -1271,7 +1281,7 @@ msgstr "Attrap"
|
|||
#. module: base
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
msgstr "Ugyldig XML for View Architecture!"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.ky
|
||||
|
@ -1297,32 +1307,32 @@ msgstr ""
|
|||
#: code:addons/orm.py:4920
|
||||
#, python-format
|
||||
msgid "Record #%d of %s not found, cannot copy!"
|
||||
msgstr ""
|
||||
msgstr "Post #%d of %s ikke fundet, kan ikke kopiere!"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.module.module,contributors:0
|
||||
msgid "Contributors"
|
||||
msgstr ""
|
||||
msgstr "Bidragsydere"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.rule,perm_unlink:0
|
||||
msgid "Apply for Delete"
|
||||
msgstr ""
|
||||
msgstr "Godkend for slet"
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.property,type:0
|
||||
msgid "Char"
|
||||
msgstr ""
|
||||
msgstr "Tegn"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.module.category,visible:0
|
||||
msgid "Visible"
|
||||
msgstr ""
|
||||
msgstr "Synlig"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.client,name:base.action_client_base_menu
|
||||
msgid "Open Settings Menu"
|
||||
msgstr ""
|
||||
msgstr "Åben konfigurations menu"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -1337,7 +1347,7 @@ msgstr "Uganda"
|
|||
#. module: base
|
||||
#: field:ir.model.access,perm_unlink:0
|
||||
msgid "Delete Access"
|
||||
msgstr ""
|
||||
msgstr "Slet adgang"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.ne
|
||||
|
@ -1367,12 +1377,12 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:ir.mail_server,smtp_port:0
|
||||
msgid "SMTP Port"
|
||||
msgstr ""
|
||||
msgstr "SMTP port"
|
||||
|
||||
#. module: base
|
||||
#: help:res.users,login:0
|
||||
msgid "Used to log into the system"
|
||||
msgstr ""
|
||||
msgstr "Bruges til at logge ind i systemet"
|
||||
|
||||
#. module: base
|
||||
#: view:base.language.export:0
|
||||
|
@ -1395,12 +1405,12 @@ msgstr ""
|
|||
#: code:addons/base/module/wizard/base_language_install.py:53
|
||||
#, python-format
|
||||
msgid "Language Pack"
|
||||
msgstr ""
|
||||
msgstr "Sprog pakke"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_web_tests
|
||||
msgid "Tests"
|
||||
msgstr ""
|
||||
msgstr "Test"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.report.xml,attachment:0
|
||||
|
@ -1463,25 +1473,25 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:ir.module.category,parent_id:0
|
||||
msgid "Parent Application"
|
||||
msgstr ""
|
||||
msgstr "Overordnet Applikation"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.ir_action_wizard
|
||||
#: view:ir.actions.wizard:0
|
||||
#: model:ir.ui.menu,name:base.menu_ir_action_wizard
|
||||
msgid "Wizards"
|
||||
msgstr ""
|
||||
msgstr "Wizards"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/res/res_users.py:131
|
||||
#, python-format
|
||||
msgid "Operation Canceled"
|
||||
msgstr ""
|
||||
msgstr "Funktion afbrudt"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_document
|
||||
msgid "Document Management System"
|
||||
msgstr ""
|
||||
msgstr "Dokument styring system"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_crm_claim
|
||||
|
@ -1524,7 +1534,7 @@ msgstr ""
|
|||
#: model:ir.module.category,name:base.module_category_purchase_management
|
||||
#: model:ir.ui.menu,name:base.menu_purchase_root
|
||||
msgid "Purchases"
|
||||
msgstr ""
|
||||
msgstr "Indkøb"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.md
|
||||
|
@ -1587,11 +1597,13 @@ msgid ""
|
|||
"If specified, this action will be opened at logon for this user, in addition "
|
||||
"to the standard menu."
|
||||
msgstr ""
|
||||
"Hvis specificeret, vil denne funktion blive udført, når brugeren logger på, "
|
||||
"sammen med standard menuen."
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.mf
|
||||
msgid "Saint Martin (French part)"
|
||||
msgstr ""
|
||||
msgstr "Sankt Martin (Fransk del)"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_exports
|
||||
|
@ -1616,28 +1628,28 @@ msgstr ""
|
|||
#: code:addons/base/module/wizard/base_update_translations.py:39
|
||||
#, python-format
|
||||
msgid "No language with code \"%s\" exists"
|
||||
msgstr ""
|
||||
msgstr "Der eksisterer ikke noget sprog med denne kode \"%s\""
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.category,name:base.module_category_social_network
|
||||
#: model:ir.module.module,shortdesc:base.module_mail
|
||||
msgid "Social Network"
|
||||
msgstr ""
|
||||
msgstr "Socialt netværk"
|
||||
|
||||
#. module: base
|
||||
#: view:res.lang:0
|
||||
msgid "%Y - Year with century."
|
||||
msgstr ""
|
||||
msgstr "%Y - År med århundrede."
|
||||
|
||||
#. module: base
|
||||
#: view:res.company:0
|
||||
msgid "Report Footer Configuration"
|
||||
msgstr ""
|
||||
msgstr "Konfiguration af rapport foden"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.translation,comments:0
|
||||
msgid "Translation comments"
|
||||
msgstr ""
|
||||
msgstr "Kommenterer til oversættelsen"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_lunch
|
||||
|
@ -1667,7 +1679,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:wizard.ir.model.menu.create:0
|
||||
msgid "Create _Menu"
|
||||
msgstr ""
|
||||
msgstr "Opret menu"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.server,trigger_obj_id:0
|
||||
|
@ -1694,6 +1706,8 @@ msgid ""
|
|||
"Helps you manage your purchase-related processes such as requests for "
|
||||
"quotations, supplier invoices, etc..."
|
||||
msgstr ""
|
||||
"Hjælper dig med at styre dine indkøbsrelaterede processer som anmodninger om "
|
||||
"tilbud, leverandørfakturaer, osv. .."
|
||||
|
||||
#. module: base
|
||||
#: help:res.partner,website:0
|
||||
|
@ -1760,7 +1774,7 @@ msgstr "Værktøj"
|
|||
#. module: base
|
||||
#: selection:ir.property,type:0
|
||||
msgid "Float"
|
||||
msgstr ""
|
||||
msgstr "Kommatal"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.todo,type:0
|
||||
|
@ -1774,12 +1788,12 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:res.partner,image_small:0
|
||||
msgid "Small-sized image"
|
||||
msgstr ""
|
||||
msgstr "Lille billede"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_stock
|
||||
msgid "Warehouse Management"
|
||||
msgstr ""
|
||||
msgstr "Lager administration"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_res_request_link
|
||||
|
@ -1795,7 +1809,7 @@ msgstr ""
|
|||
#: model:ir.actions.act_window,name:base.action_wizard_lang_export
|
||||
#: model:ir.ui.menu,name:base.menu_wizard_lang_export
|
||||
msgid "Export Translation"
|
||||
msgstr ""
|
||||
msgstr "Exporter oversættelse"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.action_server_action
|
||||
|
@ -1819,12 +1833,12 @@ msgstr "Øst Timor"
|
|||
#: view:ir.module.module:0
|
||||
#, python-format
|
||||
msgid "Install"
|
||||
msgstr ""
|
||||
msgstr "Installer"
|
||||
|
||||
#. module: base
|
||||
#: field:res.currency,accuracy:0
|
||||
msgid "Computational Accuracy"
|
||||
msgstr ""
|
||||
msgstr "Beregnet nøjagtighed"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_l10n_at
|
||||
|
@ -1859,7 +1873,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:ir.sequence:0
|
||||
msgid "Day: %(day)s"
|
||||
msgstr ""
|
||||
msgstr "Dag:%(day)s"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.category,description:base.module_category_point_of_sale
|
||||
|
@ -1868,6 +1882,8 @@ msgid ""
|
|||
"simplified payment mode encoding, automatic picking lists generation and "
|
||||
"more."
|
||||
msgstr ""
|
||||
"Hjælper dig med at få det bedste ud af dit detailhandelssystem med hurtigt "
|
||||
"salg, enkel betaling, automatisk plukliste m.m."
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_fields.py:164
|
||||
|
@ -1888,7 +1904,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: selection:ir.translation,state:0
|
||||
msgid "Translation in Progress"
|
||||
msgstr ""
|
||||
msgstr "Oversættelse i gang"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_rule
|
||||
|
@ -1903,13 +1919,13 @@ msgstr "Dage"
|
|||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_fleet
|
||||
msgid "Vehicle, leasing, insurances, costs"
|
||||
msgstr ""
|
||||
msgstr "Køretøj,leasing,forsikring,omkostning"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.model.access:0
|
||||
#: field:ir.model.access,perm_read:0
|
||||
msgid "Read Access"
|
||||
msgstr ""
|
||||
msgstr "Læse adgang"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.attachment,res_id:0
|
||||
|
@ -1979,7 +1995,7 @@ msgstr ""
|
|||
#: view:res.partner:0
|
||||
#: field:res.partner.category,partner_ids:0
|
||||
msgid "Partners"
|
||||
msgstr ""
|
||||
msgstr "Partnere"
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner.category,parent_left:0
|
||||
|
@ -1995,12 +2011,12 @@ msgstr ""
|
|||
#: code:addons/base/ir/ir_model.py:320
|
||||
#, python-format
|
||||
msgid "This column contains module data and cannot be removed!"
|
||||
msgstr ""
|
||||
msgstr "Kolonnen indeholder modul data som ikke kan slettes"
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner.bank,footer:0
|
||||
msgid "Display on Reports"
|
||||
msgstr ""
|
||||
msgstr "Vis på rapporter"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_project_timesheet
|
||||
|
@ -2126,7 +2142,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:base.language.export:0
|
||||
msgid "The next step depends on the file format:"
|
||||
msgstr ""
|
||||
msgstr "Næste skridt afhænger af fil formatet:"
|
||||
|
||||
#. module: base
|
||||
#: view:res.lang:0
|
||||
|
@ -2158,7 +2174,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:ir.actions.server:0
|
||||
msgid "Create / Write / Copy"
|
||||
msgstr ""
|
||||
msgstr "Opret/ Gem/ Kopier"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.sequence:0
|
||||
|
@ -2176,6 +2192,8 @@ msgid ""
|
|||
"Display this bank account on the footer of printed documents like invoices "
|
||||
"and sales orders."
|
||||
msgstr ""
|
||||
"Vis denne bankkonto i foden af udskrevne dokumenter, på fakturaer og salgs "
|
||||
"ordre."
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -2253,7 +2271,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:base.module.update,update:0
|
||||
msgid "Number of modules updated"
|
||||
msgstr ""
|
||||
msgstr "Antallet af opdaterede moduler"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.cron,function:0
|
||||
|
@ -2475,7 +2493,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: sql_constraint:ir.ui.view_sc:0
|
||||
msgid "Shortcut for this menu already exists!"
|
||||
msgstr ""
|
||||
msgstr "Genvej til denne menu, eksisterer allerede!"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.rule:0
|
||||
|
@ -9076,7 +9094,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.category,name:base.module_category_warehouse_management
|
||||
msgid "Warehouse"
|
||||
msgstr ""
|
||||
msgstr "Lagerstyrning"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.exports,resource:0
|
||||
|
@ -10622,7 +10640,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_sale_stock
|
||||
msgid "Sales and Warehouse Management"
|
||||
msgstr ""
|
||||
msgstr "Salg og lager opsætning"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_hr_recruitment
|
||||
|
|
|
@ -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: 2013-09-06 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
"X-Poedit-Country: GREECE\n"
|
||||
"X-Poedit-Language: Greek\n"
|
||||
"X-Poedit-SourceCharset: utf-8\n"
|
||||
|
|
|
@ -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: 2013-09-06 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -354,6 +354,8 @@ msgid ""
|
|||
"Database ID of record to open in form view, when ``view_mode`` is set to "
|
||||
"'form' only"
|
||||
msgstr ""
|
||||
"Database ID of record to open in form view, when ``view_mode`` is set to "
|
||||
"'form' only"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.values,key2:0
|
||||
|
@ -399,6 +401,14 @@ msgid ""
|
|||
"document and Wiki based Hidden.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Installer for knowledge-based Hidden.\n"
|
||||
"=====================================\n"
|
||||
"\n"
|
||||
"Makes the Knowledge Application Configuration available from where you can "
|
||||
"install\n"
|
||||
"document and Wiki based Hidden.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.category,name:base.module_category_customer_relationship_management
|
||||
|
@ -417,6 +427,14 @@ msgid ""
|
|||
"invoices from picking, OpenERP is able to add and compute the shipping "
|
||||
"line.\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Allows you to add delivery methods in sale orders and picking.\n"
|
||||
"==============================================================\n"
|
||||
"\n"
|
||||
"You can define your own carrier and delivery grids for prices. When creating "
|
||||
"\n"
|
||||
"invoices from picking, OpenERP is able to add and compute the shipping "
|
||||
"line.\n"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_filters.py:80
|
||||
|
@ -595,6 +613,16 @@ msgid ""
|
|||
"that have no counterpart in the general financial accounts.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Module for defining analytic accounting object.\n"
|
||||
"===============================================\n"
|
||||
"\n"
|
||||
"In OpenERP, analytic accounts are linked to general accounts but are "
|
||||
"treated\n"
|
||||
"totally independently. So, you can enter various different analytic "
|
||||
"operations\n"
|
||||
"that have no counterpart in the general financial accounts.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_idea
|
||||
|
@ -699,7 +727,7 @@ msgstr "Colombia"
|
|||
#. module: base
|
||||
#: model:res.partner.title,name:base.res_partner_title_mister
|
||||
msgid "Mister"
|
||||
msgstr ""
|
||||
msgstr "Mister"
|
||||
|
||||
#. module: base
|
||||
#: help:res.country,code:0
|
||||
|
@ -728,7 +756,7 @@ msgstr "Untranslated"
|
|||
#. module: base
|
||||
#: view:ir.mail_server:0
|
||||
msgid "Outgoing Mail Server"
|
||||
msgstr ""
|
||||
msgstr "Outgoing Mail Server"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.act_window,context:0
|
||||
|
@ -741,7 +769,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:res.company,logo_web:0
|
||||
msgid "Logo Web"
|
||||
msgstr ""
|
||||
msgstr "Logo Web"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_model.py:344
|
||||
|
@ -843,6 +871,12 @@ msgid ""
|
|||
"Contains the installer for marketing-related modules.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Menu for Marketing.\n"
|
||||
"===================\n"
|
||||
"\n"
|
||||
"Contains the installer for marketing-related modules.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_web_linkedin
|
||||
|
@ -914,7 +948,7 @@ msgstr "Romania - Accounting"
|
|||
#. module: base
|
||||
#: model:ir.model,name:base.model_res_config_settings
|
||||
msgid "res.config.settings"
|
||||
msgstr ""
|
||||
msgstr "res.config.settings"
|
||||
|
||||
#. module: base
|
||||
#: help:res.partner,image_small:0
|
||||
|
@ -946,7 +980,7 @@ msgstr "Security and Authentication"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_web_calendar
|
||||
msgid "Web Calendar"
|
||||
msgstr ""
|
||||
msgstr "Web Calendar"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
|
@ -957,7 +991,7 @@ msgstr "Swedish / svenska"
|
|||
#: field:base.language.export,name:0
|
||||
#: field:ir.attachment,datas_fname:0
|
||||
msgid "File Name"
|
||||
msgstr ""
|
||||
msgstr "File Name"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.rs
|
||||
|
@ -1090,6 +1124,7 @@ msgstr "Zimbabwe"
|
|||
msgid ""
|
||||
"Type of the constraint: `f` for a foreign key, `u` for other constraints."
|
||||
msgstr ""
|
||||
"Type of the constraint: `f` for a foreign key, `u` for other constraints."
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.report.xml:0
|
||||
|
@ -1170,7 +1205,7 @@ msgstr "Other OSI Approved Licence"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_web_gantt
|
||||
msgid "Web Gantt"
|
||||
msgstr ""
|
||||
msgstr "Web Gantt"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.act_menu_create
|
||||
|
@ -1197,7 +1232,7 @@ msgstr "Google Users"
|
|||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_fleet
|
||||
msgid "Fleet Management"
|
||||
msgstr ""
|
||||
msgstr "Fleet Management"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.server.object.lines,value:0
|
||||
|
@ -1309,7 +1344,7 @@ msgstr ""
|
|||
#: code:addons/base/ir/ir_model.py:735
|
||||
#, python-format
|
||||
msgid "Document model"
|
||||
msgstr ""
|
||||
msgstr "Document model"
|
||||
|
||||
#. module: base
|
||||
#: view:res.users:0
|
||||
|
|
|
@ -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: 2013-09-06 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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: 2013-09-06 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
"Language: \n"
|
||||
|
||||
#. module: base
|
||||
|
|
|
@ -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: 2013-09-06 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:28+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -15,8 +15,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
|
||||
"X-Poedit-Language: Persian\n"
|
||||
|
||||
|
|
|
@ -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: 2013-09-06 05:28+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:28+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -38,7 +38,7 @@ msgstr "Muut määritykset"
|
|||
#. module: base
|
||||
#: selection:ir.property,type:0
|
||||
msgid "DateTime"
|
||||
msgstr "PäivämääräKellonaika"
|
||||
msgstr "Päivämäärä ja kellonaika"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/fields.py:652
|
||||
|
@ -47,8 +47,8 @@ msgid ""
|
|||
"The second argument of the many2many field %s must be a SQL table !You used "
|
||||
"%s, which is not a valid SQL table name."
|
||||
msgstr ""
|
||||
"Many2many kentän %s toisen argumentin pitää olla SQL taulu! Suottämäsi arvo "
|
||||
"%s, ei ole käypä SQL taulun nimi."
|
||||
"Monen-suhde-moneen kentän %s toisen argumentin pitää olla SQL taulu! "
|
||||
"Syöttämäsi arvo %s, ei ole käypä SQL taulun nimi."
|
||||
|
||||
#. module: base
|
||||
#: field:ir.ui.view,arch:0
|
||||
|
@ -88,7 +88,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: model:ir.module.module,summary:base.module_point_of_sale
|
||||
msgid "Touchscreen Interface for Shops"
|
||||
msgstr ""
|
||||
msgstr "Kosketusnäytöille tarkoitettu käyttöliittymä kaupoille"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_in_hr_payroll
|
||||
|
@ -138,7 +138,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: help:res.partner,employee:0
|
||||
msgid "Check this box if this contact is an Employee."
|
||||
msgstr ""
|
||||
msgstr "Valitse tämä, jos kontakti on työntekijä."
|
||||
|
||||
#. module: base
|
||||
#: help:ir.model.fields,domain:0
|
||||
|
@ -239,12 +239,12 @@ msgstr "luotu."
|
|||
#. module: base
|
||||
#: field:ir.actions.report.xml,report_xsl:0
|
||||
msgid "XSL Path"
|
||||
msgstr ""
|
||||
msgstr "XSL Polku"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_l10n_tr
|
||||
msgid "Turkey - Accounting"
|
||||
msgstr ""
|
||||
msgstr "Turkki - Kirjanpito"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.sequence,number_increment:0
|
||||
|
|
|
@ -8,13 +8,13 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2012-12-06 10:07+0000\n"
|
||||
"Last-Translator: Quentin THEURET <Unknown>\n"
|
||||
"Last-Translator: Quentin THEURET @TeMPO Consulting <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
"Language: hr\n"
|
||||
|
||||
#. module: base
|
||||
|
@ -1736,7 +1736,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: help:res.partner,website:0
|
||||
msgid "Website of Partner or Company"
|
||||
msgstr "Webs tranice Partnera ili Tvrtke"
|
||||
msgstr "Web stranice partnera ili tvrtke"
|
||||
|
||||
#. module: base
|
||||
#: help:base.language.install,overwrite:0
|
||||
|
|
|
@ -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: 2013-09-06 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -68,12 +68,12 @@ msgstr "ekkert bil"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Hungarian / Magyar"
|
||||
msgstr ""
|
||||
msgstr "Ungverska"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Spanish (PY) / Español (PY)"
|
||||
msgstr ""
|
||||
msgstr "Spænska (PY) / Español (PY)"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.category,description:base.module_category_project_management
|
||||
|
@ -137,7 +137,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: help:res.partner,employee:0
|
||||
msgid "Check this box if this contact is an Employee."
|
||||
msgstr ""
|
||||
msgstr "Merkið við ef tengiliður er stafsmaður."
|
||||
|
||||
#. module: base
|
||||
#: help:ir.model.fields,domain:0
|
||||
|
|
|
@ -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: 2013-09-06 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -8,13 +8,13 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||
"PO-Revision-Date: 2012-12-22 07:41+0000\n"
|
||||
"Last-Translator: Erwin van der Ploeg (Endian Solutions) <Unknown>\n"
|
||||
"Last-Translator: Erwin van der Ploeg (BAS Solutions) <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-06 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:22+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:26+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:28+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:28+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:24+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
@ -790,32 +790,6 @@ msgid ""
|
|||
"module named account_voucher.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"会计和财务管理\n"
|
||||
"=====================================\n"
|
||||
"Financial and accounting module that covers:\n"
|
||||
"--------------------------------------------\n"
|
||||
"* General Accounting\n"
|
||||
"* Cost/Analytic accounting\n"
|
||||
"* Third party accounting\n"
|
||||
"* Taxes management\n"
|
||||
"* Budgets\n"
|
||||
"* Customer and Supplier Invoices\n"
|
||||
"* Bank statements\n"
|
||||
"* Reconciliation process by partner\n"
|
||||
"\n"
|
||||
"Creates a dashboard for accountants that includes:\n"
|
||||
"--------------------------------------------------\n"
|
||||
"* List of Customer Invoice to Approve\n"
|
||||
"* Company Analysis\n"
|
||||
"* Graph of Treasury\n"
|
||||
"\n"
|
||||
"The processes like maintaining of general ledger is done through the defined "
|
||||
"financial Journals (entry move line orgrouping is maintained through "
|
||||
"journal)\n"
|
||||
"for a particular financial year and for preparation of vouchers there is a "
|
||||
"module named account_voucher.\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
#: view:ir.model:0
|
||||
|
@ -1247,7 +1221,7 @@ msgstr ""
|
|||
"邮件。\n"
|
||||
"OpenERP将接管其余的事,诸如发送感谢信、自动转发到相关人员并确保之后相应的回复能准确送达。\n"
|
||||
"\n"
|
||||
"CRM 仪表盘(Dashboard) 包括:\n"
|
||||
"CRM 控制面板(Dashboard) 包括:\n"
|
||||
"---------------------------------------\n"
|
||||
"* 可按阶段和用户分类的预计收益图表\n"
|
||||
"* 按阶段分类的商机图表\n"
|
||||
|
@ -3002,7 +2976,7 @@ msgstr ""
|
|||
"* *发运前*:先创建发票草稿,待支付后发货\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"销售经理的仪表盘(Dashboard)包括:\n"
|
||||
"销售经理的控制面板(Dashboard)包括:\n"
|
||||
"------------------------------------------------\n"
|
||||
"* 我的报价单\n"
|
||||
"* 月成交量(图表)\n"
|
||||
|
@ -5064,7 +5038,7 @@ msgstr "瑞士 - 会计"
|
|||
#: field:res.partner,zip:0
|
||||
#: field:res.partner.bank,zip:0
|
||||
msgid "Zip"
|
||||
msgstr "邮政编码"
|
||||
msgstr "邮编"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.module.module:0
|
||||
|
@ -6341,10 +6315,7 @@ msgid ""
|
|||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
"让用户建立自定义的仪表板\n"
|
||||
"========================================\n"
|
||||
"\n"
|
||||
"允许用户建立自定义的仪表板\n"
|
||||
"让用户自定义控制面板\n"
|
||||
" "
|
||||
|
||||
#. module: base
|
||||
|
@ -11069,7 +11040,7 @@ msgstr "找不到币别 %s 日期 %s 的汇率。"
|
|||
msgid ""
|
||||
"Customized views are used when users reorganize the content of their "
|
||||
"dashboard views (via web client)"
|
||||
msgstr "自定义视图用于用户重新组织他们的控制台视图内容(通过 Web 客户端)"
|
||||
msgstr "如果用户重新组织过他的控制面板视图,则使用其自定义的视图。"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_sale_stock
|
||||
|
@ -11567,7 +11538,7 @@ msgstr "采购多次审核"
|
|||
#: field:res.company,street2:0
|
||||
#: field:res.partner,street2:0
|
||||
msgid "Street2"
|
||||
msgstr "街区地址2"
|
||||
msgstr "次要街道"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.action_view_base_module_update
|
||||
|
@ -12670,7 +12641,7 @@ msgstr "爱沙尼亚"
|
|||
#: model:ir.module.module,shortdesc:base.module_board
|
||||
#: model:ir.ui.menu,name:base.menu_reporting_dashboard
|
||||
msgid "Dashboards"
|
||||
msgstr "控制台"
|
||||
msgstr "控制面板"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,shortdesc:base.module_procurement
|
||||
|
|
|
@ -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: 2013-09-06 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:25+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -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: 2013-09-06 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16760)\n"
|
||||
"X-Launchpad-Export-Date: 2013-09-25 05:27+0000\n"
|
||||
"X-Generator: Launchpad (build 16771)\n"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.module.module,description:base.module_account_check_writing
|
||||
|
|
|
@ -110,7 +110,7 @@ class report_xml(osv.osv):
|
|||
kwargs = {}
|
||||
new_report = report_sxw('report.'+r['report_name'], r['model'],
|
||||
opj('addons',r['report_rml'] or '/'), header=r['header'], register=False, **kwargs)
|
||||
elif r['report_xsl']:
|
||||
elif r['report_xsl'] and r['report_xml']:
|
||||
new_report = report_rml('report.'+r['report_name'], r['model'],
|
||||
opj('addons',r['report_xml']),
|
||||
r['report_xsl'] and opj('addons',r['report_xsl']), register=False)
|
||||
|
|
|
@ -404,8 +404,10 @@ class ir_mail_server(osv.osv):
|
|||
|
||||
# The email's "Envelope From" (Return-Path), and all recipient addresses must only contain ASCII characters.
|
||||
from_rfc2822 = extract_rfc2822_addresses(smtp_from)
|
||||
assert len(from_rfc2822) == 1, "Malformed 'Return-Path' or 'From' address - it may only contain plain ASCII characters"
|
||||
smtp_from = from_rfc2822[0]
|
||||
assert from_rfc2822, ("Malformed 'Return-Path' or 'From' address: %r - "
|
||||
"It should contain one valid plain ASCII email") % smtp_from
|
||||
# use last extracted email, to support rarities like 'Support@MyComp <support@mycompany.com>'
|
||||
smtp_from = from_rfc2822[-1]
|
||||
email_to = message['To']
|
||||
email_cc = message['Cc']
|
||||
email_bcc = message['Bcc']
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
import logging
|
||||
from lxml import etree
|
||||
from operator import itemgetter
|
||||
import os
|
||||
|
||||
from openerp import tools
|
||||
|
@ -127,10 +128,15 @@ class view(osv.osv):
|
|||
try:
|
||||
fvg = self.pool[view.model].fields_view_get(cr, uid, view_id=view.id, view_type=view.type, context=context)
|
||||
return fvg['arch']
|
||||
except:
|
||||
except Exception:
|
||||
_logger.exception('cannot render view %s', view.xml_id)
|
||||
return False
|
||||
|
||||
def _check_xml(self, cr, uid, ids, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
context['check_view_ids'] = ids
|
||||
|
||||
for view in self.browse(cr, uid, ids, context):
|
||||
# Sanity check: the view should not break anything upon rendering!
|
||||
view_arch_utf8 = self._check_render_view(cr, uid, view, context=context)
|
||||
|
@ -183,13 +189,15 @@ class view(osv.osv):
|
|||
:rtype: list of tuples
|
||||
:return: [(view_arch,view_id), ...]
|
||||
"""
|
||||
|
||||
user_groups = frozenset(self.pool.get('res.users').browse(cr, 1, uid, context).groups_id)
|
||||
if self.pool._init:
|
||||
# Module init currently in progress, only consider views from modules whose code was already loaded
|
||||
check_view_ids = context and context.get('check_view_ids') or (0,)
|
||||
query = """SELECT v.id FROM ir_ui_view v LEFT JOIN ir_model_data md ON (md.model = 'ir.ui.view' AND md.res_id = v.id)
|
||||
WHERE v.inherit_id=%s AND v.model=%s AND (md.module IS NULL or md.module in %s)
|
||||
WHERE v.inherit_id=%s AND v.model=%s AND (md.module in %s OR v.id in %s)
|
||||
ORDER BY priority"""
|
||||
query_params = (view_id, model, tuple(self.pool._init_modules))
|
||||
query_params = (view_id, model, tuple(self.pool._init_modules), tuple(check_view_ids))
|
||||
else:
|
||||
# Modules fully loaded, consider all views
|
||||
query = """SELECT v.id FROM ir_ui_view v
|
||||
|
@ -282,6 +290,22 @@ class view(osv.osv):
|
|||
'blank_nodes': blank_nodes,
|
||||
'node_parent_field': _Model_Field,}
|
||||
|
||||
def _validate_custom_views(self, cr, uid, model):
|
||||
"""Validate architecture of custom views (= without xml id) for a given model.
|
||||
This method is called at the end of registry update.
|
||||
"""
|
||||
cr.execute("""SELECT max(v.id)
|
||||
FROM ir_ui_view v
|
||||
LEFT JOIN ir_model_data md ON (md.model = 'ir.ui.view' AND md.res_id = v.id)
|
||||
WHERE md.module IS NULL
|
||||
AND v.model = %s
|
||||
GROUP BY coalesce(v.inherit_id, v.id)
|
||||
""", (model,))
|
||||
|
||||
ids = map(itemgetter(0), cr.fetchall())
|
||||
return self._check_xml(cr, uid, ids)
|
||||
|
||||
|
||||
class view_sc(osv.osv):
|
||||
_name = 'ir.ui.view_sc'
|
||||
_columns = {
|
||||
|
|
|
@ -24,6 +24,7 @@ from docutils.transforms import Transform, writer_aux
|
|||
from docutils.writers.html4css1 import Writer
|
||||
import imp
|
||||
import logging
|
||||
from operator import attrgetter
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
|
@ -178,9 +179,6 @@ class module(osv.osv):
|
|||
def _get_views(self, cr, uid, ids, field_name=None, arg=None, context=None):
|
||||
res = {}
|
||||
model_data_obj = self.pool.get('ir.model.data')
|
||||
view_obj = self.pool.get('ir.ui.view')
|
||||
report_obj = self.pool.get('ir.actions.report.xml')
|
||||
menu_obj = self.pool.get('ir.ui.menu')
|
||||
|
||||
dmodels = []
|
||||
if field_name is None or 'views_by_module' in field_name:
|
||||
|
@ -192,7 +190,7 @@ class module(osv.osv):
|
|||
assert dmodels, "no models for %s" % field_name
|
||||
|
||||
for module_rec in self.browse(cr, uid, ids, context=context):
|
||||
res[module_rec.id] = {
|
||||
res_mod_dic = res[module_rec.id] = {
|
||||
'menus_by_module': [],
|
||||
'reports_by_module': [],
|
||||
'views_by_module': []
|
||||
|
@ -212,28 +210,20 @@ class module(osv.osv):
|
|||
for imd_res in model_data_obj.read(cr, uid, imd_ids, ['model', 'res_id'], context=context):
|
||||
imd_models[imd_res['model']].append(imd_res['res_id'])
|
||||
|
||||
# For each one of the models, get the names of these ids.
|
||||
# We use try except, because views or menus may not exist.
|
||||
try:
|
||||
res_mod_dic = res[module_rec.id]
|
||||
view_ids = imd_models.get('ir.ui.view', [])
|
||||
for v in view_obj.browse(cr, uid, view_ids, context=context):
|
||||
aa = v.inherit_id and '* INHERIT ' or ''
|
||||
res_mod_dic['views_by_module'].append('%s%s (%s)' % (aa, v.name, v.type))
|
||||
def browse(model):
|
||||
M = self.pool[model]
|
||||
# as this method is called before the module update, some xmlid may be invalid at this stage
|
||||
# explictly filter records before reading them
|
||||
ids = M.exists(cr, uid, imd_models.get(model, []), context)
|
||||
return M.browse(cr, uid, ids, context)
|
||||
|
||||
report_ids = imd_models.get('ir.actions.report.xml', [])
|
||||
for rx in report_obj.browse(cr, uid, report_ids, context=context):
|
||||
res_mod_dic['reports_by_module'].append(rx.name)
|
||||
def format_view(v):
|
||||
aa = v.inherit_id and '* INHERIT ' or ''
|
||||
return '%s%s (%s)' % (aa, v.name, v.type)
|
||||
|
||||
menu_ids = imd_models.get('ir.ui.menu', [])
|
||||
for um in menu_obj.browse(cr, uid, menu_ids, context=context):
|
||||
res_mod_dic['menus_by_module'].append(um.complete_name)
|
||||
except KeyError, e:
|
||||
_logger.warning('Data not found for items of %s', module_rec.name)
|
||||
except AttributeError, e:
|
||||
_logger.warning('Data not found for items of %s %s', module_rec.name, str(e))
|
||||
except Exception, e:
|
||||
_logger.warning('Unknown error while fetching data of %s', module_rec.name, exc_info=True)
|
||||
res_mod_dic['views_by_module'] = map(format_view, browse('ir.ui.view'))
|
||||
res_mod_dic['reports_by_module'] = map(attrgetter('name'), browse('ir.actions.report.xml'))
|
||||
res_mod_dic['menus_by_module'] = map(attrgetter('complete_name'), browse('ir.ui.menu'))
|
||||
|
||||
for key in res.iterkeys():
|
||||
for k, v in res[key].iteritems():
|
||||
|
@ -624,7 +614,7 @@ class module(osv.osv):
|
|||
# wsgi handlers, so they can react accordingly
|
||||
if tuple(res) != (0, 0):
|
||||
for handler in openerp.service.wsgi_server.module_handlers:
|
||||
if hasattr(handler,'load_addons'):
|
||||
if hasattr(handler, 'load_addons'):
|
||||
handler.load_addons()
|
||||
|
||||
return res
|
||||
|
|
|
@ -20,14 +20,15 @@
|
|||
##############################################################################
|
||||
|
||||
import os
|
||||
|
||||
import re
|
||||
import openerp
|
||||
from openerp import SUPERUSER_ID, tools
|
||||
from openerp.osv import fields, osv
|
||||
from openerp.tools.translate import _
|
||||
from openerp.tools.safe_eval import safe_eval as eval
|
||||
from openerp.tools import image_resize_image
|
||||
|
||||
from openerp.report.render.rml2pdf import customfonts
|
||||
|
||||
class multi_company_default(osv.osv):
|
||||
"""
|
||||
Manage multi company default value
|
||||
|
@ -74,7 +75,7 @@ class res_company(osv.osv):
|
|||
_name = "res.company"
|
||||
_description = 'Companies'
|
||||
_order = 'name'
|
||||
|
||||
|
||||
def _get_address_data(self, cr, uid, ids, field_names, arg, context=None):
|
||||
""" Read the 'address' functional fields. """
|
||||
result = {}
|
||||
|
@ -108,9 +109,12 @@ class res_company(osv.osv):
|
|||
size = (180, None)
|
||||
result[record.id] = image_resize_image(record.partner_id.image, size)
|
||||
return result
|
||||
|
||||
|
||||
def _get_companies_from_partner(self, cr, uid, ids, context=None):
|
||||
return self.pool['res.company'].search(cr, uid, [('partner_id', 'in', ids)], context=context)
|
||||
|
||||
def _get_font(self, cr, uid, context=None):
|
||||
return sorted(customfonts.RegisterCustomFonts())
|
||||
|
||||
_columns = {
|
||||
'name': fields.related('partner_id', 'name', string='Company Name', size=128, required=True, store=True, type='char'),
|
||||
|
@ -124,6 +128,7 @@ class res_company(osv.osv):
|
|||
'rml_footer': fields.text('Report Footer', help="Footer text displayed at the bottom of all reports."),
|
||||
'rml_footer_readonly': fields.related('rml_footer', type='text', string='Report Footer', readonly=True),
|
||||
'custom_footer': fields.boolean('Custom Footer', help="Check this to define the report footer manually. Otherwise it will be filled in automatically."),
|
||||
'font': fields.selection(_get_font, "Font",help="Set the font into the report header, will be used for every RML report of the company"),
|
||||
'logo': fields.related('partner_id', 'image', string="Logo", type="binary"),
|
||||
'logo_web': fields.function(_get_logo_web, string="Logo Web", type="binary", store={
|
||||
'res.company': (lambda s, c, u, i, x: i, ['partner_id'], 10),
|
||||
|
@ -178,6 +183,21 @@ class res_company(osv.osv):
|
|||
if state_id:
|
||||
return {'value':{'country_id': self.pool.get('res.country.state').browse(cr, uid, state_id, context).country_id.id }}
|
||||
return {}
|
||||
|
||||
def onchange_font_name(self, cr, uid, ids, font, rml_header, rml_header2, rml_header3, context=None):
|
||||
""" To change default header style of all <para> and drawstring. """
|
||||
|
||||
def _change_header(header,font):
|
||||
""" Replace default fontname use in header and setfont tag """
|
||||
|
||||
default_para = re.sub('fontName.?=.?".*"', 'fontName="%s"'% font,header)
|
||||
return re.sub('(<setFont.?name.?=.?)(".*?")(.)', '\g<1>"%s"\g<3>'% font,default_para)
|
||||
return {'value':{
|
||||
'rml_header': _change_header(rml_header,font),
|
||||
'rml_header2':_change_header(rml_header2,font),
|
||||
'rml_header3':_change_header(rml_header3,font)
|
||||
}}
|
||||
|
||||
def on_change_country(self, cr, uid, ids, country_id, context=None):
|
||||
res = {'domain': {'state_id': []}}
|
||||
currency_id = self._get_euro(cr, uid, context=context)
|
||||
|
@ -374,7 +394,8 @@ class res_company(osv.osv):
|
|||
'rml_header':_get_header,
|
||||
'rml_header2': _header2,
|
||||
'rml_header3': _header3,
|
||||
'logo':_get_logo
|
||||
'logo':_get_logo,
|
||||
'font':'Helvetica',
|
||||
}
|
||||
|
||||
_constraints = [
|
||||
|
|
|
@ -80,6 +80,7 @@
|
|||
<field name="custom_footer" on_change="onchange_footer(custom_footer, phone, fax, email, website, vat, company_registry, bank_ids)"/>
|
||||
<field name="rml_footer" attrs="{'invisible': [('custom_footer','=',False)]}"/>
|
||||
<field name="rml_footer_readonly" attrs="{'invisible': [('custom_footer','=',True)]}"/>
|
||||
<field name="font" on_change="onchange_font_name(font, rml_header, rml_header2, rml_header3)"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Header/Footer" groups="base.group_no_one">
|
||||
|
|
|
@ -49,10 +49,10 @@ class res_config_module_installation_mixin(object):
|
|||
to_install_missing_names.append(name)
|
||||
elif module.state == 'uninstalled':
|
||||
to_install_ids.append(module.id)
|
||||
|
||||
result = None
|
||||
if to_install_ids:
|
||||
ir_module.button_immediate_install(cr, uid, to_install_ids, context=context)
|
||||
|
||||
result = ir_module.button_immediate_install(cr, uid, to_install_ids, context=context)
|
||||
#FIXME: if result is not none, the corresponding todo will be skipped because it was just marked done
|
||||
if to_install_missing_names:
|
||||
return {
|
||||
'type': 'ir.actions.client',
|
||||
|
@ -60,7 +60,7 @@ class res_config_module_installation_mixin(object):
|
|||
'params': {'modules': to_install_missing_names},
|
||||
}
|
||||
|
||||
return None
|
||||
return result
|
||||
|
||||
class res_config_configurable(osv.osv_memory):
|
||||
''' Base classes for new-style configuration items
|
||||
|
|
|
@ -481,7 +481,11 @@ class res_partner(osv.osv, format_address):
|
|||
if partner.child_ids:
|
||||
# 2a. Commercial Fields: sync if commercial entity
|
||||
if partner.commercial_partner_id == partner:
|
||||
self._commercial_sync_to_children(cr, uid, partner, context=context)
|
||||
commercial_fields = self._commercial_fields(cr, uid,
|
||||
context=context)
|
||||
if any(field in update_values for field in commercial_fields):
|
||||
self._commercial_sync_to_children(cr, uid, partner,
|
||||
context=context)
|
||||
# 2b. Address fields: sync if address changed
|
||||
address_fields = self._address_fields(cr, uid, context=context)
|
||||
if any(field in update_values for field in address_fields):
|
||||
|
@ -504,6 +508,16 @@ class res_partner(osv.osv, format_address):
|
|||
def write(self, cr, uid, ids, vals, context=None):
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
#res.partner must only allow to set the company_id of a partner if it
|
||||
#is the same as the company of all users that inherit from this partner
|
||||
#(this is to allow the code from res_users to write to the partner!) or
|
||||
#if setting the company_id to False (this is compatible with any user company)
|
||||
if vals.get('company_id'):
|
||||
for partner in self.browse(cr, uid, ids, context=context):
|
||||
if partner.user_ids:
|
||||
user_companies = set([user.company_id.id for user in partner.user_ids])
|
||||
if len(user_companies) > 1 or vals['company_id'] not in user_companies:
|
||||
raise osv.except_osv(_("Warning"),_("You can not change the company as the partner/user has multiple user linked with different companies."))
|
||||
result = super(res_partner,self).write(cr, uid, ids, vals, context=context)
|
||||
for partner in self.browse(cr, uid, ids, context=context):
|
||||
self._fields_sync(cr, uid, partner, vals, context)
|
||||
|
@ -604,14 +618,15 @@ class res_partner(osv.osv, format_address):
|
|||
if operator in ('=ilike', '=like'):
|
||||
operator = operator[1:]
|
||||
query_args = {'name': search_name}
|
||||
limit_str = ''
|
||||
query = ('''SELECT id FROM res_partner
|
||||
WHERE email ''' + operator + ''' %(name)s
|
||||
OR display_name ''' + operator + ''' %(name)s
|
||||
ORDER BY display_name
|
||||
''')
|
||||
if limit:
|
||||
limit_str = ' limit %(limit)s'
|
||||
query += ' limit %(limit)s'
|
||||
query_args['limit'] = limit
|
||||
cr.execute('''SELECT partner.id FROM res_partner partner
|
||||
LEFT JOIN res_partner company ON partner.parent_id = company.id
|
||||
WHERE partner.email ''' + operator +''' %(name)s OR
|
||||
partner.display_name ''' + operator + ' %(name)s ' + limit_str, query_args)
|
||||
cr.execute(query, query_args)
|
||||
ids = map(lambda x: x[0], cr.fetchall())
|
||||
ids = self.search(cr, uid, [('id', 'in', ids)] + args, limit=limit, context=context)
|
||||
if ids:
|
||||
|
|
|
@ -283,6 +283,13 @@ class res_users(osv.osv):
|
|||
|
||||
return result
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
user_id = super(res_users, self).create(cr, uid, vals, context=context)
|
||||
user = self.browse(cr, uid, user_id, context=context)
|
||||
if user.partner_id.company_id:
|
||||
user.partner_id.write({'company_id': user.company_id.id})
|
||||
return user_id
|
||||
|
||||
def write(self, cr, uid, ids, values, context=None):
|
||||
if not hasattr(ids, '__iter__'):
|
||||
ids = [ids]
|
||||
|
@ -297,7 +304,11 @@ class res_users(osv.osv):
|
|||
uid = 1 # safe fields only, so we write as super-user to bypass access rights
|
||||
|
||||
res = super(res_users, self).write(cr, uid, ids, values, context=context)
|
||||
|
||||
if 'company_id' in values:
|
||||
for user in self.browse(cr, uid, ids, context=context):
|
||||
# if partner is global we keep it that way
|
||||
if user.partner_id.company_id and user.partner_id.company_id.id != values['company_id']:
|
||||
user.partner_id.write({'company_id': user.company_id.id})
|
||||
# clear caches linked to the users
|
||||
self.pool['ir.model.access'].call_cache_clearing_methods(cr)
|
||||
clear = partial(self.pool['ir.rule'].clear_cache, cr)
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
"access_ir_model_relation","ir_model_relation","model_ir_model_relation",,1,0,0,0
|
||||
"access_ir_model_access_all","ir_model_access_all","model_ir_model_access",,1,0,0,0
|
||||
"access_ir_model_data_all","ir_model_data all","model_ir_model_data",,1,0,0,0
|
||||
"access_ir_model_data_user","ir_model_data user","model_ir_model_data",base.group_user,1,0,1,0
|
||||
"access_ir_model_fields_all","ir_model_fields all","model_ir_model_fields",,1,0,0,0
|
||||
"access_ir_module_category_group_user","ir_module_category group_user","model_ir_module_category",,1,0,0,0
|
||||
"access_ir_module_module_group_user","ir_module_module group_user","model_ir_module_module","group_system",1,1,1,1
|
||||
|
@ -110,9 +111,7 @@
|
|||
"access_res_bank_user","res_bank user","model_res_bank","group_user",1,0,0,0
|
||||
"access_multi_company_default user","multi_company_default all","model_multi_company_default",,1,0,0,0
|
||||
"access_multi_company_default manager","multi_company_default Manager","model_multi_company_default","group_erp_manager",1,1,1,1
|
||||
"access_ir_filter all","ir_filters all","model_ir_filters",,1,0,0,0
|
||||
"access_ir_filter employee","ir_filters employee","model_ir_filters","group_user",1,1,1,1
|
||||
"access_ir_filters","ir_filters_all","model_ir_filters",,1,1,1,1
|
||||
"access_ir_filter all","ir_filters all","model_ir_filters",,1,1,1,1
|
||||
"access_ir_config_parameter","ir_config_parameter","model_ir_config_parameter",,1,0,0,0
|
||||
"access_ir_mail_server","ir_mail_server","model_ir_mail_server","group_system",1,1,1,1
|
||||
"access_ir_actions_client","ir_actions_client all","model_ir_actions_client",,1,0,0,0
|
||||
|
|
|
|
@ -7,6 +7,7 @@ import test_menu
|
|||
import test_res_config
|
||||
import test_res_lang
|
||||
import test_search
|
||||
import test_views
|
||||
|
||||
checks = [
|
||||
test_base,
|
||||
|
@ -18,4 +19,5 @@ checks = [
|
|||
test_res_config,
|
||||
test_res_lang,
|
||||
test_search,
|
||||
test_views,
|
||||
]
|
||||
|
|
|
@ -0,0 +1,105 @@
|
|||
from functools import partial
|
||||
import unittest2
|
||||
|
||||
import openerp.tests.common as common
|
||||
from openerp.osv.orm import except_orm
|
||||
from openerp.tools import mute_logger
|
||||
|
||||
class test_views(common.TransactionCase):
|
||||
|
||||
@mute_logger('openerp.osv.orm', 'openerp.addons.base.ir.ir_ui_view')
|
||||
def test_00_init_check_views(self):
|
||||
Views = self.registry('ir.ui.view')
|
||||
|
||||
self.assertTrue(Views.pool._init)
|
||||
|
||||
error_msg = "The model name does not exist or the view architecture cannot be rendered"
|
||||
# test arch check is call for views without xmlid during registry initialization
|
||||
with self.assertRaisesRegexp(except_orm, error_msg):
|
||||
Views.create(self.cr, self.uid, {
|
||||
'name': 'Test View #1',
|
||||
'model': 'ir.ui.view',
|
||||
'arch': """<?xml version="1.0"?>
|
||||
<tree>
|
||||
<field name="test_1"/>
|
||||
</tree>
|
||||
""",
|
||||
})
|
||||
|
||||
# same for inherited views
|
||||
with self.assertRaisesRegexp(except_orm, error_msg):
|
||||
# Views.pudb = True
|
||||
Views.create(self.cr, self.uid, {
|
||||
'name': 'Test View #2',
|
||||
'model': 'ir.ui.view',
|
||||
'inherit_id': self.browse_ref('base.view_view_tree').id,
|
||||
'arch': """<?xml version="1.0"?>
|
||||
<xpath expr="//field[@name='name']" position="after">
|
||||
<field name="test_2"/>
|
||||
</xpath>
|
||||
""",
|
||||
})
|
||||
|
||||
def _insert_view(self, **kw):
|
||||
"""Insert view into database via a query to passtrough validation"""
|
||||
kw.pop('id', None)
|
||||
|
||||
keys = sorted(kw.keys())
|
||||
fields = ','.join('"%s"' % (k.replace('"', r'\"'),) for k in keys)
|
||||
params = ','.join('%%(%s)s' % (k,) for k in keys)
|
||||
|
||||
query = 'INSERT INTO ir_ui_view(%s) VALUES(%s) RETURNING id' % (fields, params)
|
||||
self.cr.execute(query, kw)
|
||||
return self.cr.fetchone()[0]
|
||||
|
||||
def test_10_validate_custom_views(self):
|
||||
Views = self.registry('ir.ui.view')
|
||||
model = 'ir.actions.act_url'
|
||||
|
||||
validate = partial(Views._validate_custom_views, self.cr, self.uid, model)
|
||||
|
||||
# validation of a single view
|
||||
vid = self._insert_view(**{
|
||||
'name': 'base view',
|
||||
'model': model,
|
||||
'priority': 1,
|
||||
'arch': """<?xml version="1.0"?>
|
||||
<tree string="view">
|
||||
<field name="url"/>
|
||||
</tree>
|
||||
""",
|
||||
})
|
||||
self.assertTrue(validate()) # single view
|
||||
|
||||
# validation of a inherited view
|
||||
self._insert_view(**{
|
||||
'name': 'inherited view',
|
||||
'model': model,
|
||||
'priority': 1,
|
||||
'inherit_id': vid,
|
||||
'arch': """<?xml version="1.0"?>
|
||||
<xpath expr="//field[@name='url']" position="before">
|
||||
<field name="name"/>
|
||||
</xpath>
|
||||
""",
|
||||
})
|
||||
self.assertTrue(validate()) # inherited view
|
||||
|
||||
# validation of a bad inherited view
|
||||
self._insert_view(**{
|
||||
'name': 'bad inherited view',
|
||||
'model': model,
|
||||
'priority': 2,
|
||||
'inherit_id': vid,
|
||||
'arch': """<?xml version="1.0"?>
|
||||
<xpath expr="//field[@name='url']" position="after">
|
||||
<field name="bad"/>
|
||||
</xpath>
|
||||
""",
|
||||
})
|
||||
with mute_logger('openerp.osv.orm', 'openerp.addons.base.ir.ir_ui_view'):
|
||||
self.assertFalse(validate()) # bad inherited view
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest2.main()
|
|
@ -315,13 +315,21 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
|
|||
# they are part of the "currently installed" modules. They will
|
||||
# be dropped in STEP 6 later, before restarting the loading
|
||||
# process.
|
||||
states_to_load = ['installed', 'to upgrade', 'to remove']
|
||||
processed = load_marked_modules(cr, graph, states_to_load, force, status, report, loaded_modules, update_module)
|
||||
processed_modules.extend(processed)
|
||||
if update_module:
|
||||
states_to_load = ['to install']
|
||||
processed = load_marked_modules(cr, graph, states_to_load, force, status, report, loaded_modules, update_module)
|
||||
processed_modules.extend(processed)
|
||||
# IMPORTANT 2: We have to loop here until all relevant modules have been
|
||||
# processed, because in some rare cases the dependencies have
|
||||
# changed, and modules that depend on an uninstalled module
|
||||
# will not be processed on the first pass.
|
||||
# It's especially useful for migrations.
|
||||
previously_processed = -1
|
||||
while previously_processed < len(processed_modules):
|
||||
previously_processed = len(processed_modules)
|
||||
processed_modules += load_marked_modules(cr, graph,
|
||||
['installed', 'to upgrade', 'to remove'],
|
||||
force, status, report, loaded_modules, update_module)
|
||||
if update_module:
|
||||
processed_modules += load_marked_modules(cr, graph,
|
||||
['to install'], force, status, report,
|
||||
loaded_modules, update_module)
|
||||
|
||||
# load custom models
|
||||
cr.execute('select model from ir_model where state=%s', ('manual',))
|
||||
|
@ -392,12 +400,22 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
|
|||
_logger.info('Reloading registry once more after uninstalling modules')
|
||||
return openerp.modules.registry.RegistryManager.new(cr.dbname, force_demo, status, update_module)
|
||||
|
||||
# STEP 7: verify custom views on every model
|
||||
if update_module:
|
||||
Views = registry['ir.ui.view']
|
||||
custom_view_test = True
|
||||
for model in registry.models.keys():
|
||||
if not Views._validate_custom_views(cr, SUPERUSER_ID, model):
|
||||
custom_view_test = False
|
||||
_logger.error('invalid custom view(s) for model %s', model)
|
||||
report.record_result(custom_view_test)
|
||||
|
||||
if report.failures:
|
||||
_logger.error('At least one test failed when loading the modules.')
|
||||
else:
|
||||
_logger.info('Modules loaded.')
|
||||
|
||||
# STEP 7: call _register_hook on every model
|
||||
# STEP 8: call _register_hook on every model
|
||||
for model in registry.models.values():
|
||||
model._register_hook(cr)
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ class MigrationManager(object):
|
|||
'post': '[%s>]',
|
||||
}
|
||||
|
||||
if not (hasattr(pkg, 'update') or pkg.state == 'to upgrade'):
|
||||
if not (hasattr(pkg, 'update') or pkg.state == 'to upgrade') or pkg.installed_version is None:
|
||||
return
|
||||
|
||||
def convert_version(version):
|
||||
|
|
|
@ -1114,7 +1114,9 @@ class expression(object):
|
|||
if left == 'id':
|
||||
instr = ','.join(['%s'] * len(params))
|
||||
else:
|
||||
instr = ','.join([model._columns[left]._symbol_set[0]] * len(params))
|
||||
ss = model._columns[left]._symbol_set
|
||||
instr = ','.join([ss[0]] * len(params))
|
||||
params = map(ss[1], params)
|
||||
query = '(%s."%s" %s (%s))' % (table_alias, left, operator, instr)
|
||||
else:
|
||||
# The case for (left, 'in', []) or (left, 'not in', []).
|
||||
|
|
|
@ -39,7 +39,6 @@
|
|||
|
||||
"""
|
||||
|
||||
import babel.dates
|
||||
import calendar
|
||||
import collections
|
||||
import copy
|
||||
|
@ -54,6 +53,8 @@ import time
|
|||
import traceback
|
||||
import types
|
||||
|
||||
import babel.dates
|
||||
import dateutil.parser
|
||||
import psycopg2
|
||||
from lxml import etree
|
||||
|
||||
|
@ -2191,7 +2192,7 @@ class BaseModel(object):
|
|||
are applied
|
||||
|
||||
"""
|
||||
sql_inherit = self.pool.get('ir.ui.view').get_inheriting_views_arch(cr, user, inherit_id, self._name)
|
||||
sql_inherit = self.pool.get('ir.ui.view').get_inheriting_views_arch(cr, user, inherit_id, self._name, context=context)
|
||||
for (view_arch, view_id) in sql_inherit:
|
||||
source = apply_inheritance_specs(source, view_arch, view_id)
|
||||
source = apply_view_inheritance(cr, user, source, view_id)
|
||||
|
@ -2601,7 +2602,18 @@ class BaseModel(object):
|
|||
:param list groupby: fields by which the records will be grouped
|
||||
:param int offset: optional number of records to skip
|
||||
:param int limit: optional max number of records to return
|
||||
:param dict context: context arguments, like lang, time zone
|
||||
:param dict context: context arguments, like lang, time zone. A special
|
||||
context key exist for datetime fields : ``datetime_format``.
|
||||
context[``datetime_format``] = {
|
||||
'field_name': {
|
||||
groupby_format: format for to_char (default: yyyy-mm)
|
||||
display_format: format for displaying the value
|
||||
in the result (default: MMM yyyy)
|
||||
interval: day, month or year; used for begin
|
||||
and end date of group_by intervals
|
||||
computation (default: month)
|
||||
}
|
||||
}
|
||||
:param list orderby: optional ``order by`` specification, for
|
||||
overriding the natural sort ordering of the
|
||||
groups, see also :py:meth:`~osv.osv.osv.search`
|
||||
|
@ -2641,11 +2653,26 @@ class BaseModel(object):
|
|||
fget = self.fields_get(cr, uid, fields)
|
||||
flist = ''
|
||||
group_count = group_by = groupby
|
||||
group_by_params = {}
|
||||
if groupby:
|
||||
if fget.get(groupby):
|
||||
groupby_type = fget[groupby]['type']
|
||||
if groupby_type in ('date', 'datetime'):
|
||||
qualified_groupby_field = "to_char(%s,'yyyy-mm')" % qualified_groupby_field
|
||||
if context.get('datetime_format') and isinstance(context['datetime_format'], dict) \
|
||||
and context['datetime_format'].get(groupby) and isinstance(context['datetime_format'][groupby], dict):
|
||||
groupby_format = context['datetime_format'][groupby].get('groupby_format', 'yyyy-mm')
|
||||
display_format = context['datetime_format'][groupby].get('display_format', 'MMMM yyyy')
|
||||
interval = context['datetime_format'][groupby].get('interval', 'month')
|
||||
else:
|
||||
groupby_format = 'yyyy-mm'
|
||||
display_format = 'MMMM yyyy'
|
||||
interval = 'month'
|
||||
group_by_params = {
|
||||
'groupby_format': groupby_format,
|
||||
'display_format': display_format,
|
||||
'interval': interval,
|
||||
}
|
||||
qualified_groupby_field = "to_char(%s,%%s)" % qualified_groupby_field
|
||||
flist = "%s as %s " % (qualified_groupby_field, groupby)
|
||||
elif groupby_type == 'boolean':
|
||||
qualified_groupby_field = "coalesce(%s,false)" % qualified_groupby_field
|
||||
|
@ -2672,6 +2699,8 @@ class BaseModel(object):
|
|||
gb = groupby and (' GROUP BY ' + qualified_groupby_field) or ''
|
||||
|
||||
from_clause, where_clause, where_clause_params = query.get_sql()
|
||||
if group_by_params and group_by_params.get('groupby_format'):
|
||||
where_clause_params = [group_by_params['groupby_format']] + where_clause_params + [group_by_params['groupby_format']]
|
||||
where_clause = where_clause and ' WHERE ' + where_clause
|
||||
limit_str = limit and ' limit %d' % limit or ''
|
||||
offset_str = offset and ' offset %d' % offset or ''
|
||||
|
@ -2708,14 +2737,21 @@ class BaseModel(object):
|
|||
d['__context'] = {'group_by': groupby_list[1:]}
|
||||
if groupby and groupby in fget:
|
||||
if d[groupby] and fget[groupby]['type'] in ('date', 'datetime'):
|
||||
dt = datetime.datetime.strptime(alldata[d['id']][groupby][:7], '%Y-%m')
|
||||
days = calendar.monthrange(dt.year, dt.month)[1]
|
||||
|
||||
date_value = datetime.datetime.strptime(d[groupby][:10], '%Y-%m-%d')
|
||||
_default = datetime.datetime(1970, 1, 1) # force starts of month
|
||||
groupby_datetime = dateutil.parser.parse(alldata[d['id']][groupby], default=_default)
|
||||
d[groupby] = babel.dates.format_date(
|
||||
date_value, format='MMMM yyyy', locale=context.get('lang', 'en_US'))
|
||||
d['__domain'] = [(groupby, '>=', alldata[d['id']][groupby] and datetime.datetime.strptime(alldata[d['id']][groupby][:7] + '-01', '%Y-%m-%d').strftime('%Y-%m-%d') or False),\
|
||||
(groupby, '<=', alldata[d['id']][groupby] and datetime.datetime.strptime(alldata[d['id']][groupby][:7] + '-' + str(days), '%Y-%m-%d').strftime('%Y-%m-%d') or False)] + domain
|
||||
groupby_datetime, format=group_by_params.get('display_format', 'MMMM yyyy'), locale=context.get('lang', 'en_US'))
|
||||
if group_by_params.get('interval') == 'month':
|
||||
days = calendar.monthrange(groupby_datetime.year, groupby_datetime.month)[1]
|
||||
domain_dt_begin = groupby_datetime.replace(day=1)
|
||||
domain_dt_end = groupby_datetime.replace(day=days)
|
||||
elif group_by_params.get('interval') == 'day':
|
||||
domain_dt_begin = groupby_datetime.replace(hour=0, minute=0)
|
||||
domain_dt_end = groupby_datetime.replace(hour=23, minute=59, second=59)
|
||||
else:
|
||||
domain_dt_begin = groupby_datetime.replace(month=1, day=1)
|
||||
domain_dt_end = groupby_datetime.replace(month=12, day=31)
|
||||
d['__domain'] = [(groupby, '>=', domain_dt_begin.strftime('%Y-%m-%d')), (groupby, '<=', domain_dt_end.strftime('%Y-%m-%d'))] + domain
|
||||
del alldata[d['id']][groupby]
|
||||
d.update(alldata[d['id']])
|
||||
del d['id']
|
||||
|
@ -5083,6 +5119,8 @@ class BaseModel(object):
|
|||
"""
|
||||
if type(ids) in (int, long):
|
||||
ids = [ids]
|
||||
if not ids:
|
||||
return []
|
||||
query = 'SELECT id FROM "%s"' % self._table
|
||||
cr.execute(query + "WHERE ID IN %s", (tuple(ids),))
|
||||
return [x[0] for x in cr.fetchall()]
|
||||
|
|
|
@ -20,14 +20,13 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
import glob
|
||||
import logging
|
||||
import os
|
||||
import platform
|
||||
from reportlab import rl_config
|
||||
from reportlab.lib import fonts
|
||||
from reportlab.pdfbase import pdfmetrics, ttfonts
|
||||
import logging
|
||||
import os,platform
|
||||
|
||||
from openerp.tools import config
|
||||
|
||||
# .apidoc title: TTF Font Table
|
||||
|
||||
"""This module allows the mapping of some system-available TTF fonts to
|
||||
the reportlab engine.
|
||||
|
@ -38,103 +37,127 @@ should have the same filenames, only need the code below).
|
|||
Due to an awful configuration that ships with reportlab at many Linux
|
||||
and Ubuntu distros, we have to override the search path, too.
|
||||
"""
|
||||
|
||||
_fonts_cache = {'registered_fonts': [], 'total_system_fonts': 0}
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
CustomTTFonts = [ ('Helvetica',"DejaVu Sans", "DejaVuSans.ttf", 'normal'),
|
||||
('Helvetica',"DejaVu Sans Bold", "DejaVuSans-Bold.ttf", 'bold'),
|
||||
('Helvetica',"DejaVu Sans Oblique", "DejaVuSans-Oblique.ttf", 'italic'),
|
||||
('Helvetica',"DejaVu Sans BoldOblique", "DejaVuSans-BoldOblique.ttf", 'bolditalic'),
|
||||
('Times',"Liberation Serif", "LiberationSerif-Regular.ttf", 'normal'),
|
||||
('Times',"Liberation Serif Bold", "LiberationSerif-Bold.ttf", 'bold'),
|
||||
('Times',"Liberation Serif Italic", "LiberationSerif-Italic.ttf", 'italic'),
|
||||
('Times',"Liberation Serif BoldItalic", "LiberationSerif-BoldItalic.ttf", 'bolditalic'),
|
||||
('Times-Roman',"Liberation Serif", "LiberationSerif-Regular.ttf", 'normal'),
|
||||
('Times-Roman',"Liberation Serif Bold", "LiberationSerif-Bold.ttf", 'bold'),
|
||||
('Times-Roman',"Liberation Serif Italic", "LiberationSerif-Italic.ttf", 'italic'),
|
||||
('Times-Roman',"Liberation Serif BoldItalic", "LiberationSerif-BoldItalic.ttf", 'bolditalic'),
|
||||
('Courier',"FreeMono", "FreeMono.ttf", 'normal'),
|
||||
('Courier',"FreeMono Bold", "FreeMonoBold.ttf", 'bold'),
|
||||
('Courier',"FreeMono Oblique", "FreeMonoOblique.ttf", 'italic'),
|
||||
('Courier',"FreeMono BoldOblique", "FreeMonoBoldOblique.ttf", 'bolditalic'),
|
||||
|
||||
# Sun-ExtA can be downloaded from http://okuc.net/SunWb/
|
||||
('Sun-ExtA',"Sun-ExtA", "Sun-ExtA.ttf", 'normal'),
|
||||
# Basic fonts familly included in PDF standart, will always be in the font list
|
||||
BasePDFFonts = [
|
||||
('Helvetica', 'Helvetica'),
|
||||
('Times', 'Times'),
|
||||
('Courier', 'Courier'),
|
||||
]
|
||||
|
||||
# List of fonts found on the disk
|
||||
CustomTTFonts = []
|
||||
|
||||
TTFSearchPath_Linux = [
|
||||
# Search path for TTF files, in addition of rl_config.TTFSearchPath
|
||||
TTFSearchPath = [
|
||||
'/usr/share/fonts/truetype', # SuSE
|
||||
'/usr/share/fonts/dejavu', '/usr/share/fonts/liberation', # Fedora, RHEL
|
||||
'/usr/share/fonts/truetype/*', # Ubuntu,
|
||||
'/usr/share/fonts/truetype/*','/usr/local/share/fonts' # Ubuntu,
|
||||
'/usr/share/fonts/TTF/*', # at Mandriva/Mageia
|
||||
'/usr/share/fonts/TTF', # Arch Linux
|
||||
]
|
||||
'/usr/lib/openoffice/share/fonts/truetype/',
|
||||
'~/.fonts',
|
||||
'~/.local/share/fonts',
|
||||
|
||||
TTFSearchPath_Windows = [
|
||||
'c:/winnt/fonts',
|
||||
'c:/windows/fonts'
|
||||
]
|
||||
|
||||
TTFSearchPath_Darwin = [
|
||||
#mac os X - from
|
||||
#http://developer.apple.com/technotes/tn/tn2024.html
|
||||
# mac os X - from
|
||||
# http://developer.apple.com/technotes/tn/tn2024.html
|
||||
'~/Library/Fonts',
|
||||
'/Library/Fonts',
|
||||
'/Network/Library/Fonts',
|
||||
'/System/Library/Fonts',
|
||||
]
|
||||
|
||||
TTFSearchPathMap = {
|
||||
'Darwin': TTFSearchPath_Darwin,
|
||||
'Windows': TTFSearchPath_Windows,
|
||||
'Linux': TTFSearchPath_Linux,
|
||||
}
|
||||
# windows
|
||||
'c:/winnt/fonts',
|
||||
'c:/windows/fonts'
|
||||
]
|
||||
|
||||
# ----- The code below is less distro-specific, please avoid editing! -------
|
||||
__foundFonts = None
|
||||
|
||||
def FindCustomFonts():
|
||||
"""Fill the __foundFonts list with those filenames, whose fonts
|
||||
can be found in the reportlab ttf font path.
|
||||
|
||||
This process needs only be done once per loading of this module,
|
||||
it is cached. But, if the system admin adds some font in the
|
||||
meanwhile, the server must be restarted eventually.
|
||||
def all_sysfonts_list():
|
||||
"""
|
||||
dirpath = []
|
||||
global __foundFonts
|
||||
__foundFonts = {}
|
||||
searchpath = []
|
||||
|
||||
if config.get('fonts_search_path'):
|
||||
searchpath += map(str.strip, config.get('fonts_search_path').split(','))
|
||||
|
||||
local_platform = platform.system()
|
||||
if local_platform in TTFSearchPathMap:
|
||||
searchpath += TTFSearchPathMap[local_platform]
|
||||
|
||||
# Append the original search path of reportlab (at the end)
|
||||
searchpath += rl_config.TTFSearchPath
|
||||
This function returns list of font directories of system.
|
||||
"""
|
||||
filepath = []
|
||||
|
||||
# Perform the search for font files ourselves, as reportlab's
|
||||
# TTFOpenFile is not very good at it.
|
||||
for dirglob in searchpath:
|
||||
dirglob = os.path.expanduser(dirglob)
|
||||
for dirname in glob.iglob(dirglob):
|
||||
abp = os.path.abspath(dirname)
|
||||
if os.path.isdir(abp):
|
||||
dirpath.append(abp)
|
||||
searchpath = list(set(TTFSearchPath + rl_config.TTFSearchPath))
|
||||
for dirname in searchpath:
|
||||
dirname = os.path.expanduser(dirname)
|
||||
if os.path.exists(dirname):
|
||||
for filename in [x for x in os.listdir(dirname) if x.lower().endswith('.ttf')]:
|
||||
filepath.append(os.path.join(dirname, filename))
|
||||
return filepath
|
||||
|
||||
for k, (name, font, filename, mode) in enumerate(CustomTTFonts):
|
||||
if filename in __foundFonts:
|
||||
continue
|
||||
for d in dirpath:
|
||||
abs_filename = os.path.join(d, filename)
|
||||
if os.path.exists(abs_filename):
|
||||
_logger.debug("Found font %s at %s", filename, abs_filename)
|
||||
__foundFonts[filename] = abs_filename
|
||||
break
|
||||
def init_new_font(familyName, name, font_dir):
|
||||
return {
|
||||
'regular':(familyName, name, font_dir, 'regular'),
|
||||
'italic':(),
|
||||
'bold':(familyName, name, font_dir, 'bold'),
|
||||
'bolditalic':(),
|
||||
}
|
||||
|
||||
def RegisterCustomFonts():
|
||||
"""
|
||||
This function prepares a list for all system fonts to be registered
|
||||
in reportlab and returns the updated list with new fonts.
|
||||
"""
|
||||
global CustomTTFonts
|
||||
all_system_fonts = all_sysfonts_list()
|
||||
if len(all_system_fonts) != _fonts_cache['total_system_fonts']:
|
||||
font_modes, last_family, registered_font_list, _fonts_cache['registered_fonts'] = {}, "", [], list(BasePDFFonts)
|
||||
|
||||
#Prepares a list of registered fonts. Remove such fonts those don't have cmap for Unicode.
|
||||
for dirname in all_system_fonts:
|
||||
try:
|
||||
font_info = ttfonts.TTFontFile(dirname)
|
||||
if font_info.styleName in ('Regular','Normal','Book','Medium', 'Roman'):
|
||||
_fonts_cache['registered_fonts'].append((font_info.name, font_info.fullName))
|
||||
registered_font_list.append((font_info.familyName, font_info.name, dirname, font_info.styleName.lower().replace(" ", "")))
|
||||
_logger.debug("Found font %s at %s", font_info.name, dirname)
|
||||
except:
|
||||
_logger.warning("Could not register Font %s", dirname)
|
||||
|
||||
#Prepare font list for mapping.Each font family requires four type of modes(regular,bold,italic,bolditalic).
|
||||
#If all modes are not found, dummy entries are made for remaining modes.
|
||||
for familyName, name, font_dir, mode in sorted(registered_font_list):
|
||||
if not last_family or not font_modes:
|
||||
last_family = familyName
|
||||
font_modes = init_new_font(familyName, name, font_dir)
|
||||
|
||||
if last_family != familyName:
|
||||
# new font familly, adding previous to the list of fonts
|
||||
if not font_modes['italic']:
|
||||
font_modes['italic'] = font_modes['regular'][:3]+('italic',)
|
||||
if not font_modes['bolditalic']:
|
||||
font_modes['bolditalic'] = font_modes['bold'][:3]+('bolditalic',)
|
||||
CustomTTFonts.extend(font_modes.values())
|
||||
font_modes = init_new_font(familyName, name, font_dir)
|
||||
|
||||
if (mode== 'normal') or (mode == 'regular') or (mode == 'medium') or (mode == 'book') or (mode == 'roman'):
|
||||
font_modes['regular'] = (familyName, name, font_dir, 'regular')
|
||||
elif (mode == 'italic') or (mode == 'oblique'):
|
||||
font_modes['italic'] = (familyName, name, font_dir, 'italic')
|
||||
elif mode == 'bold':
|
||||
font_modes['bold'] = (familyName, name, font_dir, 'bold')
|
||||
elif (mode == 'bolditalic') or (mode == 'boldoblique'):
|
||||
font_modes['bolditalic'] = (familyName, name, font_dir, 'bolditalic')
|
||||
last_family = familyName
|
||||
|
||||
# add the last one
|
||||
if font_modes:
|
||||
if not font_modes['italic']:
|
||||
font_modes['italic'] = font_modes['regular'][:3]+('italic',)
|
||||
if not font_modes['bolditalic']:
|
||||
font_modes['bolditalic'] = font_modes['bold'][:3]+('bolditalic',)
|
||||
CustomTTFonts.extend(font_modes.values())
|
||||
|
||||
_fonts_cache['total_system_fonts'] = len(all_system_fonts)
|
||||
|
||||
# remove duplicates
|
||||
CustomTTFonts = sorted(list(set(CustomTTFonts)))
|
||||
_fonts_cache['registered_fonts'] = sorted(list(set(_fonts_cache['registered_fonts'])))
|
||||
return _fonts_cache['registered_fonts']
|
||||
|
||||
def SetCustomFonts(rmldoc):
|
||||
""" Map some font names to the corresponding TTF fonts
|
||||
|
@ -144,16 +167,11 @@ def SetCustomFonts(rmldoc):
|
|||
This function is called once per report, so it should
|
||||
avoid system-wide processing (cache it, instead).
|
||||
"""
|
||||
global __foundFonts
|
||||
if __foundFonts is None:
|
||||
FindCustomFonts()
|
||||
if not _fonts_cache['registered_fonts']:
|
||||
RegisterCustomFonts()
|
||||
for name, font, filename, mode in CustomTTFonts:
|
||||
if os.path.isabs(filename) and os.path.exists(filename):
|
||||
rmldoc.setTTFontMapping(name, font, filename, mode)
|
||||
elif filename in __foundFonts:
|
||||
rmldoc.setTTFontMapping(name, font, __foundFonts[filename], mode)
|
||||
return True
|
||||
|
||||
#eof
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
from collections import defaultdict
|
||||
from openerp.tools import mute_logger
|
||||
import common
|
||||
|
||||
|
@ -100,6 +101,57 @@ class TestORM(common.TransactionCase):
|
|||
found = self.partner.search_read(self.cr, UID, [['name', '=', 'Does not exists']], ['name'])
|
||||
self.assertEqual(len(found), 0)
|
||||
|
||||
def test_groupby_date(self):
|
||||
partners = dict(
|
||||
A='2012-11-19',
|
||||
B='2012-12-17',
|
||||
C='2012-12-31',
|
||||
D='2013-01-07',
|
||||
E='2013-01-14',
|
||||
F='2013-01-28',
|
||||
G='2013-02-11',
|
||||
)
|
||||
|
||||
all_partners = []
|
||||
partners_by_day = defaultdict(set)
|
||||
partners_by_month = defaultdict(set)
|
||||
partners_by_year = defaultdict(set)
|
||||
|
||||
for name, date in partners.items():
|
||||
p = self.partner.create(self.cr, UID, dict(name=name, date=date))
|
||||
all_partners.append(p)
|
||||
partners_by_day[date].add(p)
|
||||
partners_by_month[date.rsplit('-', 1)[0]].add(p)
|
||||
partners_by_year[date.split('-', 1)[0]].add(p)
|
||||
|
||||
def read_group(interval, domain=None):
|
||||
main_domain = [('id', 'in', all_partners)]
|
||||
if domain:
|
||||
domain = ['&'] + main_domain + domain
|
||||
else:
|
||||
domain = main_domain
|
||||
|
||||
display_format, groupby_format = {
|
||||
'year': ('YYYY', 'yyyy'),
|
||||
'month': ('YYYY-MM', 'yyyy-mm'),
|
||||
'day': ('yyyy-MM-dd', 'yyyy-mm-dd'),
|
||||
}[interval]
|
||||
|
||||
datetime_format = {
|
||||
'date': dict(interval=interval, display_format=display_format, groupby_format=groupby_format)
|
||||
}
|
||||
context = dict(datetime_format=datetime_format)
|
||||
|
||||
rg = self.partner.read_group(self.cr, self.uid, domain, ['date'], 'date', context=context)
|
||||
result = {}
|
||||
for r in rg:
|
||||
result[r['date']] = set(self.partner.search(self.cr, self.uid, r['__domain']))
|
||||
return result
|
||||
|
||||
self.assertDictEqual(read_group('day'), partners_by_day)
|
||||
self.assertDictEqual(read_group('month'), partners_by_month)
|
||||
self.assertDictEqual(read_group('year'), partners_by_year)
|
||||
|
||||
|
||||
class TestInherits(common.TransactionCase):
|
||||
""" test the behavior of the orm for models that use _inherits;
|
||||
|
|
|
@ -43,6 +43,9 @@ _logger = logging.getLogger(__name__)
|
|||
tags_to_kill = ["script", "head", "meta", "title", "link", "style", "frame", "iframe", "base", "object", "embed"]
|
||||
tags_to_remove = ['html', 'body', 'font']
|
||||
|
||||
# allow new semantic HTML5 tags
|
||||
allowed_tags = clean.defs.tags | frozenset('article section header footer hgroup nav aside figure'.split())
|
||||
safe_attrs = clean.defs.safe_attrs | frozenset(['style'])
|
||||
|
||||
def html_sanitize(src, silent=True):
|
||||
if not src:
|
||||
|
@ -59,6 +62,8 @@ def html_sanitize(src, silent=True):
|
|||
'page_structure': True,
|
||||
'style': False, # do not remove style attributes
|
||||
'forms': True, # remove form tags
|
||||
'remove_unknown_tags': False,
|
||||
'allow_tags': allowed_tags,
|
||||
}
|
||||
if etree.LXML_VERSION >= (2, 3, 1):
|
||||
# kill_tags attribute has been added in version 2.3.1
|
||||
|
@ -72,7 +77,7 @@ def html_sanitize(src, silent=True):
|
|||
if etree.LXML_VERSION >= (3, 1, 0):
|
||||
kwargs.update({
|
||||
'safe_attrs_only': True,
|
||||
'safe_attrs': clean.defs.safe_attrs | set(['style']),
|
||||
'safe_attrs': safe_attrs,
|
||||
})
|
||||
else:
|
||||
# lxml < 3.1.0 does not allow to specify safe_attrs. We keep all attributes in order to keep "style"
|
||||
|
@ -443,6 +448,11 @@ command_re = re.compile("^Set-([a-z]+) *: *(.+)$", re.I + re.UNICODE)
|
|||
# group(1) = the record ID ; group(2) = the model (if any) ; group(3) = the domain
|
||||
reference_re = re.compile("<.*-open(?:object|erp)-(\\d+)(?:-([\w.]+))?.*@(.*)>", re.UNICODE)
|
||||
|
||||
# Bounce regex
|
||||
# Typical form of bounce is bounce-128-crm.lead-34@domain
|
||||
# group(1) = the mail ID; group(2) = the model (if any); group(3) = the record ID
|
||||
bounce_re = re.compile("[\w]+-(\d+)-?([\w.]+)?-?(\d+)?", re.UNICODE)
|
||||
|
||||
def generate_tracking_message_id(res_id):
|
||||
"""Returns a string that can be used in the Message-ID RFC822 header field
|
||||
|
||||
|
|
|
@ -832,8 +832,11 @@ def trans_generate(lang, modules, cr):
|
|||
if module:
|
||||
src_file = open(fabsolutepath, 'r')
|
||||
try:
|
||||
for lineno, message, comments in extract.extract(extract_method, src_file,
|
||||
keywords=extract_keywords):
|
||||
for extracted in extract.extract(extract_method, src_file,
|
||||
keywords=extract_keywords):
|
||||
# Babel 0.9.6 yields lineno, message, comments
|
||||
# Babel 1.3 yields lineno, message, comments, context
|
||||
lineno, message, comments = extracted[:3]
|
||||
push_translation(module, trans_type, display_path, lineno,
|
||||
encode(message), comments + extra_comments)
|
||||
except Exception:
|
||||
|
|
Loading…
Reference in New Issue