summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruco (OpenERP) <uco@tinyerp.com>2010-11-15 10:19:34 +0530
committeruco (OpenERP) <uco@tinyerp.com>2010-11-15 10:19:34 +0530
commitf3a868e28d3a74bdff4bdfdbf9b3ec68e9c9dbb7 (patch)
tree1f953fde279e044c776653310a5f8cb7bc2615bf
parentf58df4820f36bfec3ffad087af275de5c2af7e5d (diff)
parent8ad87d0d946ecc5fcfc75f665409828921d2299b (diff)
[MERGE]: Merged with team1.
bzr revid: uco@tinyerp.com-20101112044246-qc1tp6ohth0kduie bzr revid: uco@tinyerp.com-20101115044934-pu05mgdtmmcqs2hz
-rw-r--r--addons/account/account_view.xml7
-rw-r--r--addons/account/i18n/bg.po4
-rw-r--r--addons/account/i18n/bs.po4
-rw-r--r--addons/account/i18n/ca.po4
-rw-r--r--addons/account/i18n/da.po4
-rw-r--r--addons/account/i18n/de.po4
-rw-r--r--addons/account/i18n/el.po4
-rw-r--r--addons/account/i18n/es.po4
-rw-r--r--addons/account/i18n/et.po4
-rw-r--r--addons/account/i18n/fi.po4
-rw-r--r--addons/account/i18n/fr.po4
-rw-r--r--addons/account/i18n/hr.po4
-rw-r--r--addons/account/i18n/it.po75
-rw-r--r--addons/account/i18n/lt.po4
-rw-r--r--addons/account/i18n/mn.po4
-rw-r--r--addons/account/i18n/nl.po4
-rw-r--r--addons/account/i18n/pl.po4
-rw-r--r--addons/account/i18n/pt.po4
-rw-r--r--addons/account/i18n/pt_BR.po4
-rw-r--r--addons/account/i18n/ro.po4
-rw-r--r--addons/account/i18n/ru.po4
-rw-r--r--addons/account/i18n/sr.po4
-rw-r--r--addons/account/i18n/sv.po4
-rw-r--r--addons/account/i18n/tr.po4
-rw-r--r--addons/account/i18n/zh_CN.po4
-rw-r--r--addons/account/report/account_analytic_entries_report_view.xml4
-rw-r--r--addons/account/report/account_entries_report_view.xml2
-rw-r--r--addons/account/report/account_invoice_report_view.xml2
-rw-r--r--addons/account/test/account_use_model.yml1
-rw-r--r--addons/account/wizard/account_report_aged_partner_balance_view.xml4
-rw-r--r--addons/account/wizard/account_report_partner_ledger_view.xml1
-rw-r--r--addons/account/wizard/account_vat_view.xml3
-rw-r--r--addons/account_analytic_default/i18n/el.po10
-rw-r--r--addons/account_coda/i18n/nl.po48
-rw-r--r--addons/account_followup/i18n/nl.po123
-rw-r--r--addons/account_followup/report/account_followup_report.xml1
-rw-r--r--addons/account_invoice_layout/i18n/nl.po20
-rw-r--r--addons/account_payment/i18n/nl.po47
-rw-r--r--addons/account_tax_include/i18n/it.po6
-rw-r--r--addons/account_voucher/i18n/el.po106
-rw-r--r--addons/base_calendar/base_calendar.py6
-rw-r--r--addons/base_calendar/i18n/el.po1591
-rw-r--r--addons/base_module_quality/i18n/nl.po6
-rw-r--r--addons/base_module_record/i18n/el.po22
-rw-r--r--addons/base_module_record/i18n/nl.po6
-rw-r--r--addons/base_report_creator/i18n/it.po21
-rw-r--r--addons/base_report_creator/i18n/nl.po6
-rw-r--r--addons/base_report_creator/i18n/ru.po12
-rw-r--r--addons/base_report_designer/i18n/it.po49
-rw-r--r--addons/base_report_designer/i18n/nl.po6
-rw-r--r--addons/base_setup/i18n/el.po20
-rw-r--r--addons/base_setup/i18n/nl.po6
-rw-r--r--addons/board/i18n/el.po16
-rw-r--r--addons/caldav/caldav_node.py23
-rw-r--r--addons/caldav/caldav_setup.xml12
-rw-r--r--addons/caldav/caldav_view.xml19
-rw-r--r--addons/crm/i18n/el.po120
-rw-r--r--addons/document/__openerp__.py2
-rw-r--r--addons/document/content_index.py12
-rw-r--r--addons/document/doc/access_permissions.rst65
-rw-r--r--addons/document/document.py6
-rw-r--r--addons/document/document_data.xml20
-rw-r--r--addons/document/document_directory.py48
-rw-r--r--addons/document/document_storage.py95
-rw-r--r--addons/document/nodes.py172
-rw-r--r--addons/document/security/document_security.xml24
-rw-r--r--addons/document/security/ir.model.access.csv1
-rw-r--r--addons/document_ftp/ftpserver/abstracted_fs.py4
-rw-r--r--addons/document_ftp/ftpserver/ftpserver.py1
-rw-r--r--addons/document_ftp/test/document_ftp_test2.yml31
-rw-r--r--addons/document_ftp/test/document_ftp_test4.yml29
-rw-r--r--addons/document_ftp/test/document_ftp_test5.yml30
-rw-r--r--addons/document_webdav/__openerp__.py2
-rw-r--r--addons/document_webdav/dav_fs.py125
-rw-r--r--addons/document_webdav/document_webdav.py1
-rw-r--r--addons/document_webdav/i18n/it.po38
-rw-r--r--addons/document_webdav/test/webdav_test1.yml59
-rw-r--r--addons/document_webdav/test_davclient.py702
-rw-r--r--addons/document_webdav/webdav_server.py19
-rw-r--r--addons/document_webdav/webdav_setup.xml11
-rw-r--r--addons/email_template/email_template_mailbox_view.xml1
-rw-r--r--addons/fetchmail/i18n/fr.po4
-rw-r--r--addons/google_map/i18n/el.po10
-rw-r--r--addons/google_map/i18n/it.po6
-rw-r--r--addons/hr/hr_view.xml4
-rw-r--r--addons/hr_attendance/wizard/hr_attendance_sign_in_out_view.xml4
-rw-r--r--addons/hr_timesheet/wizard/hr_timesheet_sign_in_out_view.xml6
-rw-r--r--addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml1
-rw-r--r--addons/hr_timesheet_invoice/i18n/nl.po123
-rw-r--r--addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml2
-rw-r--r--addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml1
-rw-r--r--addons/marketing_campaign/i18n/nl.po6
-rw-r--r--addons/marketing_campaign/marketing_campaign_view.xml2
-rw-r--r--addons/membership/i18n/it.po22
-rw-r--r--addons/membership/i18n/nl.po6
-rw-r--r--addons/multi_company/i18n/nl.po6
-rw-r--r--addons/outlook/README25
-rwxr-xr-xaddons/outlook/installer.py17
-rw-r--r--addons/outlook/plugin/openerp-outlook-plugin/addin.py15
-rw-r--r--addons/outlook/plugin/openerp-outlook-plugin/outlookaddin.iss107
-rw-r--r--addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py150
-rw-r--r--addons/product/i18n/el.po184
-rw-r--r--addons/product_expiry/i18n/el.po199
-rw-r--r--addons/product_manufacturer/i18n/el.po89
-rw-r--r--addons/product_margin/i18n/el.po26
-rw-r--r--addons/product_visible_discount/i18n/el.po76
-rw-r--r--addons/project_caldav/project_caldav.py38
-rw-r--r--addons/project_caldav/project_caldav_view.xml4
-rw-r--r--addons/project_scrum/board_project_scrum_view.xml4
-rw-r--r--addons/project_scrum/project_scrum_demo.xml11
-rw-r--r--addons/project_timesheet/i18n/de.po6
-rw-r--r--addons/project_timesheet/report/task_report_view.xml16
-rw-r--r--addons/purchase/i18n/el.po15
-rw-r--r--addons/sale_crm/i18n/el.po40
-rw-r--r--addons/stock/i18n/de.po6
-rw-r--r--addons/stock/i18n/el.po28
-rw-r--r--addons/stock/i18n/fr.po6
-rw-r--r--addons/thunderbird/partner/partner.py18
118 files changed, 4361 insertions, 913 deletions
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index aaabc86d865..41da96bdd98 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -77,6 +77,7 @@
<field name="res_model">account.fiscalyear</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,search</field>
+ <field name="help">Define your company's fiscal year depending on the period you have chosen to follow. A fiscal year is a 1 year period over which a company budgets its spending. It may run over any period of 12 months. The fiscal year is referred to by the date in which it ends. For example, if a company's fiscal year ends November 30, 2011, then everything between December 1, 2010 and November 30, 2011 would be referred to as FY 2011. Not using the actual calendar year gives many companies an advantage, allowing them to close their books at a time which is most convenient for them.</field>
</record>
<menuitem id="next_id_23" name="Periods" parent="account.menu_finance_accounting"/>
<menuitem action="action_account_fiscalyear_form" id="menu_action_account_fiscalyear_form" parent="next_id_23"/>
@@ -144,6 +145,7 @@
<field name="view_type">form</field>
<field name="view_mode">tree,form,search</field>
<field name="context">{'search_default_draft': 1}</field>
+ <field name="help">Here, you can define a period, an interval of time between successive closings of the books of your company. An accounting period typically is a month or a quarter, corresponding to the tax year used by the business. Create and manage them from here and decide whether a period should be left open or closed depending on your company's activities over a specific period.</field>
</record>
<menuitem action="action_account_period_form" id="menu_action_account_period_form" parent="account.next_id_23"/>
@@ -254,6 +256,7 @@
<field name="view_mode">tree,form,graph</field>
<field name="search_view_id" ref="view_account_search"/>
<field name="view_id" ref="view_account_list"/>
+ <field name="help">Create and manage accounts you will need to record financial entries in. Accounts are financial records of your company that register all financial transactions. Companies present their annual accounts in two main parts: the balance sheet and the income statement (profit and loss account). The annual accounts of a company are required by law to disclose a certain amount of information. They have to be certified by an external auditor yearly.</field>
</record>
<menuitem id="account_account_menu" name="Accounts" parent="menu_finance_accounting"/>
<menuitem action="action_account_form" id="menu_action_account_form" parent="account_account_menu"/>
@@ -351,6 +354,7 @@
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_account_journal_view_search"/>
+ <field name="help">Here you can personalize and create each view of your financial journals by selecting the fields you want to appear and the sequence they will appear.</field>
</record>
<menuitem action="action_account_journal_view" id="menu_action_account_journal_view" parent="account.menu_low_level"/>
@@ -463,6 +467,7 @@
<field name="res_model">account.journal</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
+ <field name="help">Create and manage your company's financial journals from this menu. A journal is a business diary in which all financial data related to the day to day business transactions of your company is recorded using double-entry book keeping system. Depending on the nature of its activities and number of daily transactions, a company may keep several types of specialized journals such as a cash journal, purchases journal, and sales journal.</field>
</record>
<menuitem action="action_account_journal_form" id="menu_action_account_journal_form" parent="account_account_menu"/>
@@ -742,6 +747,7 @@
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_account_type_search"/>
+ <field name="help">An account type is a name or code given to an account that indicates its purpose. For example, the account type could be linked to an asset account, expense account or payable account. From this view, you can create and manage the account types you need to be used for your company management.</field>
</record>
<menuitem action="action_account_type_form" groups="base.group_extended,group_account_manager" id="menu_action_account_type_form" parent="menu_low_level"/>
<!--
@@ -854,6 +860,7 @@
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_tax_code_tree"/>
<field name="search_view_id" ref="view_tax_code_search"/>
+ <field name="help">A tax code is a reference of a tax that will be taken out of a gross income depending on the country and sometimes industry sector. OpenERP allows you to define and manage them from this menu.</field>
</record>
<menuitem id="next_id_27" name="Taxes" parent="account.menu_finance_accounting"/>
<menuitem action="action_tax_code_list" id="menu_action_tax_code_list" parent="menu_low_level" sequence="12"/>
diff --git a/addons/account/i18n/bg.po b/addons/account/i18n/bg.po
index b467a496cf2..0a46ee887c5 100644
--- a/addons/account/i18n/bg.po
+++ b/addons/account/i18n/bg.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:00+0000\n"
+"PO-Revision-Date: 2010-11-11 08:29+0000\n"
"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\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: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/bs.po b/addons/account/i18n/bs.po
index 343f818d96b..c20e3d47322 100644
--- a/addons/account/i18n/bs.po
+++ b/addons/account/i18n/bs.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:38+0000\n"
+"PO-Revision-Date: 2010-11-11 09:41+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\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: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/ca.po b/addons/account/i18n/ca.po
index 7446b74198b..f10efb2397f 100644
--- a/addons/account/i18n/ca.po
+++ b/addons/account/i18n/ca.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:40+0000\n"
+"PO-Revision-Date: 2010-11-11 09:44+0000\n"
"Last-Translator: Jordi Esteve (www.zikzakmedia.com) "
"<jesteve@zikzakmedia.com>\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: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/da.po b/addons/account/i18n/da.po
index a23633d5521..52c0e249f0b 100644
--- a/addons/account/i18n/da.po
+++ b/addons/account/i18n/da.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:34+0000\n"
+"PO-Revision-Date: 2010-11-11 09:29+0000\n"
"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\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: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/de.po b/addons/account/i18n/de.po
index b9617dce079..e211ab0b67c 100644
--- a/addons/account/i18n/de.po
+++ b/addons/account/i18n/de.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 13:54+0000\n"
+"PO-Revision-Date: 2010-11-11 08:23+0000\n"
"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\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: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/el.po b/addons/account/i18n/el.po
index 4420f831c26..39693cba28e 100644
--- a/addons/account/i18n/el.po
+++ b/addons/account/i18n/el.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:24+0000\n"
+"PO-Revision-Date: 2010-11-11 09:23+0000\n"
"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\n"
"Language-Team: Greek <el@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: 2010-11-11 04:45+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/es.po b/addons/account/i18n/es.po
index c7f38ecb3f5..f9c9a4d9dd7 100644
--- a/addons/account/i18n/es.po
+++ b/addons/account/i18n/es.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:21+0000\n"
+"PO-Revision-Date: 2010-11-11 09:12+0000\n"
"Last-Translator: Jordi Esteve (www.zikzakmedia.com) "
"<jesteve@zikzakmedia.com>\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: 2010-11-11 04:46+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/et.po b/addons/account/i18n/et.po
index 82f086dfab0..7358f33d3e9 100644
--- a/addons/account/i18n/et.po
+++ b/addons/account/i18n/et.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:03+0000\n"
+"PO-Revision-Date: 2010-11-11 08:39+0000\n"
"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\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: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/fi.po b/addons/account/i18n/fi.po
index 6b55ad03b3a..26d666eb8eb 100644
--- a/addons/account/i18n/fi.po
+++ b/addons/account/i18n/fi.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:13+0000\n"
+"PO-Revision-Date: 2010-11-11 08:56+0000\n"
"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\n"
"Language-Team: Finnish <fi@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: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/fr.po b/addons/account/i18n/fr.po
index 5d189eff10d..a018ecb571e 100644
--- a/addons/account/i18n/fr.po
+++ b/addons/account/i18n/fr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:20+0000\n"
+"PO-Revision-Date: 2010-11-11 09:11+0000\n"
"Last-Translator: TeMPO <openerp@tempo-consulting.fr>\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: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/hr.po b/addons/account/i18n/hr.po
index d7b6461d182..35c2e0b4c49 100644
--- a/addons/account/i18n/hr.po
+++ b/addons/account/i18n/hr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:23+0000\n"
+"PO-Revision-Date: 2010-11-11 09:19+0000\n"
"Last-Translator: Goran Kliska (Aplikacija d.o.o.) <gkliska@gmail.com>\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: 2010-11-11 04:45+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/it.po b/addons/account/i18n/it.po
index bc3e5ac7666..414b71854f2 100644
--- a/addons/account/i18n/it.po
+++ b/addons/account/i18n/it.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:36+0000\n"
-"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\n"
+"PO-Revision-Date: 2010-11-11 19:48+0000\n"
+"Last-Translator: Lorenzo Battistini <lorenzo.battistini@domsense.com>\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: 2010-11-11 04:45+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@@ -274,7 +274,7 @@ msgid ""
"journal."
msgstr ""
"Imposta la vista da utilizzare quando si inseriscono o si consultano le "
-"registrazioni in questo registro. La vista dice a Open ERP quali campi "
+"registrazioni in questo libro giornale. La vista dice a Open ERP quali campi "
"dovranno essere visibili, richiesti o di sola lettura e in quale ordine. "
"Puoi creare la tua vista personale per velocizzare l'inserimento dei dati in "
"ogni giornale."
@@ -379,7 +379,7 @@ msgstr "Calcolo su tasse figlie"
#: rml:account.general.journal:0
#: field:account.journal,name:0
msgid "Journal Name"
-msgstr "Nome registro"
+msgstr "Nome libro giornale"
#. module: account
#: view:account.payment.term:0
@@ -416,7 +416,7 @@ msgstr "Riconciliazione dei pagamenti"
#. module: account
#: model:account.journal,name:account.expenses_journal
msgid "Journal de frais"
-msgstr "Registro acquisti"
+msgstr "Libro giornale acquisti"
#. module: account
#: model:ir.actions.act_window,name:account.act_acc_analytic_acc_5_report_hr_timesheet_invoice_journal
@@ -758,7 +758,7 @@ msgstr ""
#. module: account
#: field:account.fiscalyear,end_journal_period_id:0
msgid "End of Year Entries Journal"
-msgstr "Voci di registro di fine anno"
+msgstr "Voci di giornale di fine anno"
#. module: account
#: view:product.product:0
@@ -832,7 +832,7 @@ msgstr "Righe Movimentate"
#: model:ir.actions.act_window,name:account.report_account_analytic_journal_tree
#: model:ir.ui.menu,name:account.report_account_analytic_journal_print
msgid "Account cost and revenue by journal"
-msgstr "Bilancio costi e ricavi per registro"
+msgstr "Bilancio costi e ricavi per libro giornale"
#. module: account
#: help:account.account.template,user_type:0
@@ -870,7 +870,7 @@ msgstr "Conti analitici"
#: model:ir.actions.wizard,name:account.wizard_print_journal
#: model:ir.ui.menu,name:account.menu_print_journal
msgid "Print Journal"
-msgstr "Stampa registro"
+msgstr "Stampa libro giornale"
#. module: account
#: model:ir.model,name:account.model_account_bank_accounts_wizard
@@ -968,7 +968,7 @@ msgstr "Importo codice base"
#. module: account
#: help:account.journal,user_id:0
msgid "The user responsible for this journal"
-msgstr "L'utente responsabile per questo registro"
+msgstr "L'utente responsabile per questo libro giornale"
#. module: account
#: field:account.journal,default_debit_account_id:0
@@ -1088,7 +1088,7 @@ msgstr "Sequenza principale"
#: model:ir.actions.act_window,name:account.action_account_analytic_journal_tree
#: model:ir.ui.menu,name:account.account_analytic_journal_print
msgid "Print Analytic Journals"
-msgstr "Stampa registri analitici"
+msgstr "Stampa libri giornali analitici"
#. module: account
#: rml:account.tax.code.entries:0
@@ -1442,7 +1442,7 @@ msgstr "Tipi di conto"
#: wizard_field:populate_statement_from_inv,init,journal_id:0
#: field:report.hr.timesheet.invoice.journal,journal_id:0
msgid "Journal"
-msgstr "Registro"
+msgstr "Libro giornale"
#. module: account
#: field:account.account,child_id:0
@@ -1517,7 +1517,7 @@ msgstr "account.analytic.line.extended"
#. module: account
#: field:account.journal,refund_journal:0
msgid "Refund Journal"
-msgstr "Registro rimborsi"
+msgstr "Libro giornale rimborsi"
#. module: account
#: model:account.account.type,name:account.account_type_income
@@ -1549,7 +1549,7 @@ msgstr "Positivo"
#: model:ir.actions.wizard,name:account.wizard_general_journal
#: model:ir.ui.menu,name:account.menu_general_journal
msgid "Print General Journal"
-msgstr "Stampa Registro Generale"
+msgstr "Stampa Libro giornale Generale"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_chart_template_form
@@ -1588,7 +1588,7 @@ msgstr "Apri per la riconciliazione"
#. module: account
#: model:account.journal,name:account.bilan_journal
msgid "Journal d'ouverture"
-msgstr "Registro d'apertura"
+msgstr "Libro giornale d'apertura"
#. module: account
#: selection:account.tax,tax_group:0
@@ -1681,7 +1681,7 @@ msgstr "Bilancio di apertura"
#: model:ir.actions.act_window,name:account.action_account_journal_period_tree
#: model:ir.ui.menu,name:account.menu_action_account_journal_period_tree
msgid "Journals"
-msgstr "Registri"
+msgstr "Libri giornali"
#. module: account
#: rml:account.analytic.account.quantity_cost_ledger:0
@@ -1789,7 +1789,7 @@ msgstr "Riconciliazione di registrazioni da fattura/e e pagamento/i"
#: model:ir.actions.wizard,name:account.wizard_central_journal
#: model:ir.ui.menu,name:account.menu_central_journal
msgid "Print Central Journal"
-msgstr "Stampa registro principale"
+msgstr "Stampa libro giornale principale"
#. module: account
#: wizard_field:account.aged.trial.balance,init,period_length:0
@@ -2013,7 +2013,7 @@ msgstr " Data inizio"
#. module: account
#: wizard_view:account.analytic.account.journal.report,init:0
msgid "Analytic Journal Report"
-msgstr "Report Registro Analitico"
+msgstr "Report Libro giornale Analitico"
#. module: account
#: model:ir.actions.act_window,name:account.action_invoice_tree3
@@ -2432,7 +2432,7 @@ msgstr ""
#. module: account
#: rml:account.central.journal:0
msgid "Journal Code"
-msgstr "Codice registro"
+msgstr "Codice libro giornale"
#. module: account
#: help:account.tax,applicable_type:0
@@ -2745,7 +2745,7 @@ msgstr ""
#. module: account
#: wizard_view:account.move.validate,init:0
msgid "Select Period and Journal for Validation"
-msgstr "Seleziona periodo e registro per la validazione"
+msgstr "Seleziona periodo e libro giornale per la validazione"
#. module: account
#: field:account.invoice,number:0
@@ -2844,7 +2844,7 @@ msgstr ""
#: field:account.journal.view,name:0
#: model:ir.model,name:account.model_account_journal_view
msgid "Journal View"
-msgstr "Vista registro"
+msgstr "Vista libro giornale"
#. module: account
#: selection:account.move.line,centralisation:0
@@ -3021,7 +3021,7 @@ msgstr "Codice tassa"
#. module: account
#: rml:account.analytic.account.journal:0
msgid "Analytic Journal -"
-msgstr "Registro Analitico -"
+msgstr "Libro giornale Analitico -"
#. module: account
#: rml:account.analytic.account.analytic.check:0
@@ -3106,7 +3106,7 @@ msgstr "Cancella fattura selezionata"
#: model:ir.actions.report.xml,name:account.analytic_journal_print
#: model:ir.actions.wizard,name:account.account_analytic_account_journal_report
msgid "Analytic Journal"
-msgstr "Registro analitico"
+msgstr "Libro giornale analitico"
#. module: account
#: rml:account.general.ledger:0
@@ -3476,7 +3476,7 @@ msgid ""
"All draft account entries in this journal and period will be validated. It "
"means you won't be able to modify their accouting fields."
msgstr ""
-"Saranno validate il periodo e tutte le voci bozza di questo registro. "
+"Saranno validate il periodo e tutte le voci bozza di questo libro giornale. "
"Pertanto non si potranno più modificare i relativi campi."
#. module: account
@@ -3612,7 +3612,7 @@ msgstr "Abbonamento"
#. module: account
#: field:account.analytic.journal,code:0
msgid "Journal code"
-msgstr "Codice registro"
+msgstr "Codice libro giornale"
#. module: account
#: wizard_button:account.fiscalyear.close,init,close:0
@@ -3905,7 +3905,7 @@ msgstr ""
#: model:ir.actions.act_window,name:account.action_account_journal_form
#: model:ir.ui.menu,name:account.menu_action_account_journal_form
msgid "Financial Journals"
-msgstr "Registri finanziari"
+msgstr "Libri giornali finanziari"
#. module: account
#: selection:account.account.balance.report,checktype,state:0
@@ -4141,13 +4141,13 @@ msgstr ""
#. module: account
#: help:account.bank.statement.reconcile,total_second_currency:0
msgid "The currency of the journal"
-msgstr "La valuta del registro"
+msgstr "La valuta del libro giornale"
#. module: account
#: view:account.journal.column:0
#: model:ir.model,name:account.model_account_journal_column
msgid "Journal Column"
-msgstr "Colonna registro"
+msgstr "Colonna libro giornale"
#. module: account
#: selection:account.fiscalyear,state:0
@@ -4598,7 +4598,8 @@ msgid ""
"taxes and journals according to the selected template"
msgstr ""
"Questa operazione automaticamente configurerà il piano dei conti, i "
-"riferimenti bancari, le tasse ed i registri seguendo il modello selezionato."
+"riferimenti bancari, le tasse ed i libri giornali seguendo il modello "
+"selezionato."
#. module: account
#: view:account.bank.statement:0
@@ -4632,7 +4633,7 @@ msgstr "Tassa compresa nel prezzo"
#: model:ir.actions.act_window,name:account.action_account_analytic_journal_tree2
#: model:ir.ui.menu,name:account.account_analytic_journal_entries
msgid "Analytic Entries by Journal"
-msgstr "Voci analitiche divise per registro"
+msgstr "Voci analitiche divise per libro giornale"
#. module: account
#: model:process.transition,note:account.process_transition_suppliervalidentries0
@@ -4685,7 +4686,7 @@ msgstr ""
#. module: account
#: field:account.analytic.journal,name:0
msgid "Journal name"
-msgstr "Nome registro"
+msgstr "Nome libro giornale"
#. module: account
#: model:process.transition,note:account.process_transition_invoiceimport0
@@ -5049,7 +5050,7 @@ msgstr "Importo totale"
#. module: account
#: view:account.journal:0
msgid "Account Journal"
-msgstr "Registro contabile"
+msgstr "Libro giornale contabile"
#. module: account
#: view:account.subscription.line:0
@@ -5280,7 +5281,7 @@ msgstr "Filtro per data"
#. module: account
#: wizard_view:populate_statement_from_inv,init:0
msgid "Choose Journal and Payment Date"
-msgstr "Scegli registro e data di pagamento"
+msgstr "Scegli libro giornale e data di pagamento"
#. module: account
#: selection:account.analytic.account,state:0
@@ -5463,7 +5464,7 @@ msgstr "Registrazione Contabile"
#: rml:account.general.journal:0
#: model:ir.actions.report.xml,name:account.account_general_journal
msgid "General Journal"
-msgstr "Registro generale"
+msgstr "Libro giornale generale"
#. module: account
#: field:account.account,balance:0
@@ -5499,7 +5500,7 @@ msgstr ""
#: model:ir.actions.act_window,name:account.action_account_analytic_journal_form
#: model:ir.ui.menu,name:account.account_def_analytic_journal
msgid "Analytic Journal Definition"
-msgstr "Definizione dei registri analitici"
+msgstr "Definizione dei libri giornali analitici"
#. module: account
#: model:ir.model,name:account.model_account_tax_template
@@ -5609,7 +5610,7 @@ msgstr ""
#. module: account
#: model:ir.actions.act_window,name:account.action_account_analytic_journal_open_form
msgid "Entries of Open Analytic Journals"
-msgstr "Voci dei registri analitici aperti"
+msgstr "Voci dei libri giornali analitici aperti"
#. module: account
#: view:account.invoice.tax:0
@@ -5781,7 +5782,7 @@ msgstr "Registrazioni ordinate per"
#. module: account
#: rml:account.journal.period.print:0
msgid "Print Journal -"
-msgstr "Stampa registro -"
+msgstr "Stampa libro giornale -"
#. module: account
#: field:account.bank.accounts.wizard,bank_account_id:0
diff --git a/addons/account/i18n/lt.po b/addons/account/i18n/lt.po
index 44180c67d39..a2787590945 100644
--- a/addons/account/i18n/lt.po
+++ b/addons/account/i18n/lt.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:19+0000\n"
+"PO-Revision-Date: 2010-11-11 09:06+0000\n"
"Last-Translator: Giedrius Slavinskas <giedrius.slavinskas@gmail.com>\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: 2010-11-11 04:45+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/mn.po b/addons/account/i18n/mn.po
index cb1861dbcb0..28b72309afe 100644
--- a/addons/account/i18n/mn.po
+++ b/addons/account/i18n/mn.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 13:56+0000\n"
+"PO-Revision-Date: 2010-11-11 08:26+0000\n"
"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\n"
"Language-Team: Mongolian <mn@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: 2010-11-11 04:45+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/nl.po b/addons/account/i18n/nl.po
index bf057b445ab..80f349fbefb 100644
--- a/addons/account/i18n/nl.po
+++ b/addons/account/i18n/nl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:16+0000\n"
+"PO-Revision-Date: 2010-11-11 09:01+0000\n"
"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\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: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/pl.po b/addons/account/i18n/pl.po
index 67692a1e9e4..74e579b83e3 100644
--- a/addons/account/i18n/pl.po
+++ b/addons/account/i18n/pl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:18+0000\n"
+"PO-Revision-Date: 2010-11-11 09:04+0000\n"
"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\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: 2010-11-11 04:45+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/pt.po b/addons/account/i18n/pt.po
index 95518fd7a19..2061468e068 100644
--- a/addons/account/i18n/pt.po
+++ b/addons/account/i18n/pt.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:23+0000\n"
+"PO-Revision-Date: 2010-11-11 09:17+0000\n"
"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\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: 2010-11-11 04:45+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/pt_BR.po b/addons/account/i18n/pt_BR.po
index 63ea072e93b..52104241da4 100644
--- a/addons/account/i18n/pt_BR.po
+++ b/addons/account/i18n/pt_BR.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:34+0000\n"
+"PO-Revision-Date: 2010-11-11 09:26+0000\n"
"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\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: 2010-11-11 04:46+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/ro.po b/addons/account/i18n/ro.po
index 6bf33913e78..1368ed0ea4e 100644
--- a/addons/account/i18n/ro.po
+++ b/addons/account/i18n/ro.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:36+0000\n"
+"PO-Revision-Date: 2010-11-11 09:36+0000\n"
"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\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: 2010-11-11 04:45+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/ru.po b/addons/account/i18n/ru.po
index c95f7b46730..535307d6eef 100644
--- a/addons/account/i18n/ru.po
+++ b/addons/account/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:03+0000\n"
+"PO-Revision-Date: 2010-11-11 08:32+0000\n"
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\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: 2010-11-11 04:45+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/sr.po b/addons/account/i18n/sr.po
index 83c67bf9578..8be975a9d13 100644
--- a/addons/account/i18n/sr.po
+++ b/addons/account/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 13:53+0000\n"
+"PO-Revision-Date: 2010-11-11 08:21+0000\n"
"Last-Translator: qdp (OpenERP) <qdp-launchpad@tinyerp.com>\n"
"Language-Team: Serbian <sr@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: 2010-11-11 04:45+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/sv.po b/addons/account/i18n/sv.po
index 103cd46a2f5..9657762b5f8 100644
--- a/addons/account/i18n/sv.po
+++ b/addons/account/i18n/sv.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:23+0000\n"
+"PO-Revision-Date: 2010-11-11 09:13+0000\n"
"Last-Translator: Anders Eriksson (Mobila System) <ae@mobilasystem.se>\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: 2010-11-11 04:46+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/tr.po b/addons/account/i18n/tr.po
index acd274d2211..a3e5bf47c6a 100644
--- a/addons/account/i18n/tr.po
+++ b/addons/account/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:24+0000\n"
+"PO-Revision-Date: 2010-11-11 09:21+0000\n"
"Last-Translator: Omer Barlas <omer@barlas.com.tr>\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: 2010-11-11 04:46+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/i18n/zh_CN.po b/addons/account/i18n/zh_CN.po
index a3180dbfc10..52973936def 100644
--- a/addons/account/i18n/zh_CN.po
+++ b/addons/account/i18n/zh_CN.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 14:15+0000\n"
+"PO-Revision-Date: 2010-11-11 08:58+0000\n"
"Last-Translator: solar.xie@gmail.com <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: 2010-11-11 04:46+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
diff --git a/addons/account/report/account_analytic_entries_report_view.xml b/addons/account/report/account_analytic_entries_report_view.xml
index b1ac882dae7..d99cad9535e 100644
--- a/addons/account/report/account_analytic_entries_report_view.xml
+++ b/addons/account/report/account_analytic_entries_report_view.xml
@@ -95,10 +95,10 @@
<field name="view_mode">tree,graph</field>
<field name="context">{'search_default_month':1, 'group_by_no_leaf':1, 'search_default_Account':1, 'search_default_Month':1, 'group_by':[]}</field>
<field name="search_view_id" ref="view_analytic_entries_report_search"/>
- <field name="help">A tool search lets you know statistics on your analytics records that match your needs.</field>
+ <field name="help">From this view, have an analysis of your different analytic entries following the analytic account you defined matching your business need. Use the tool search to analyse information about analytic entries generated in the system.</field>
</record>
- <menuitem action="action_analytic_entries_report"
+ <menuitem action="action_analytic_entries_report"
id="menu_action_analytic_entries_report"
groups="analytic.group_analytic_accounting,group_account_manager"
parent="account.menu_finance_statistic_report_statement" sequence="4"/>
diff --git a/addons/account/report/account_entries_report_view.xml b/addons/account/report/account_entries_report_view.xml
index 0b4042b8681..8eefe75838f 100644
--- a/addons/account/report/account_entries_report_view.xml
+++ b/addons/account/report/account_entries_report_view.xml
@@ -130,7 +130,7 @@
<field name="search_view_id" ref="view_account_entries_report_search"/>
<field name="view_id" ref="view_account_entries_report_tree"/>
<field name="context">{'group_by':[], 'search_default_usertype':1, 'search_default_thisyear':1, 'group_by_no_leaf':1}</field>
- <field name="help">A tool search lets you know statistics on your different financial accounts that match your needs.</field>
+ <field name="help">From this view, have an analysis of your different financial accounts. The document shows your debit and credit taking in consideration some criteria you can choose by using the search tool.</field>
</record>
<menuitem action="action_account_entries_report_all" id="menu_action_account_entries_report_all"
parent="account.menu_finance_statistic_report_statement"
diff --git a/addons/account/report/account_invoice_report_view.xml b/addons/account/report/account_invoice_report_view.xml
index b8a3c126e11..d901f211ba0 100644
--- a/addons/account/report/account_invoice_report_view.xml
+++ b/addons/account/report/account_invoice_report_view.xml
@@ -141,7 +141,7 @@
<field name="view_mode">tree,graph</field>
<field name="context">{'search_default_current':1, 'search_default_partner':1, 'search_default_customer':1, 'search_default_date': time.strftime('%Y-01-01'), 'group_by':[], 'group_by_no_leaf':1,}</field>
<field name="search_view_id" ref="view_account_invoice_report_search"/>
- <field name="help">A tool search lets you know statistics on invoices that match your needs.</field>
+ <field name="help">From this report, you can have an overview of the amount invoiced to your customer as well as payment delays. The tool search can also be used to personalise your Invoices reports and so, match this analysis to your needs.</field>
</record>
diff --git a/addons/account/test/account_use_model.yml b/addons/account/test/account_use_model.yml
index 4eb03a13026..ddb18c1a7d4 100644
--- a/addons/account/test/account_use_model.yml
+++ b/addons/account/test/account_use_model.yml
@@ -10,6 +10,7 @@
name: test1
sequence: 0.0
quantity: 0.0
+ partner_id: base.res_partner_3
name: My Test Model
-
diff --git a/addons/account/wizard/account_report_aged_partner_balance_view.xml b/addons/account/wizard/account_report_aged_partner_balance_view.xml
index ad9c90b2e36..aea2fba2528 100644
--- a/addons/account/wizard/account_report_aged_partner_balance_view.xml
+++ b/addons/account/wizard/account_report_aged_partner_balance_view.xml
@@ -9,6 +9,9 @@
<!--<field name="inherit_id" ref="account_common_report_view" />-->
<field name="arch" type="xml">
<form string="Report Options">
+ <separator colspan="4" string="Aged Partner Balance"/>
+ <label colspan="4" nolabel="1" string="Aged Partner Balance is a more detailed report of your receivables by intervals. When opening that report, OpenERP asks for the name of the company, the fiscal period and the size of the interval to be analyzed (in days). OpenERP then calculates a table of credit balance by period. So if you request an interval of 30 days OpenERP generates an analysis of creditors for the past month, past two months, and so on. "/>
+ <newline/>
<field name="chart_account_id" widget='selection'/>
<field name="fiscalyear_id"/>
<newline/>
@@ -37,7 +40,6 @@
<field name="view_id" ref="account_aged_balance_view"/>
<field name="context">{'record_id':active_id}</field>
<field name="target">new</field>
- <field name="help">Aged Partner Balance is a more detailed report of your receivables by intervals. When opening that report, OpenERP asks for the name of the company, the fiscal period and the size of the interval to be analyzed (in days). OpenERP then calculates a table of credit balance by period. So if you request an interval of 30 days OpenERP generates an analysis of creditors for the past month, past two months, and so on. </field>
</record>
<menuitem icon="STOCK_PRINT"
diff --git a/addons/account/wizard/account_report_partner_ledger_view.xml b/addons/account/wizard/account_report_partner_ledger_view.xml
index 9418f7ede9a..459a9990c06 100644
--- a/addons/account/wizard/account_report_partner_ledger_view.xml
+++ b/addons/account/wizard/account_report_partner_ledger_view.xml
@@ -28,7 +28,6 @@
<field name="view_id" ref="account_partner_ledger_view"/>
<field name="context">{'record_id':active_id}</field>
<field name="target">new</field>
- <field name="help">To get detailed information about a partner you can ask for the Partner Ledgers.</field>
</record>
<menuitem icon="STOCK_PRINT"
diff --git a/addons/account/wizard/account_vat_view.xml b/addons/account/wizard/account_vat_view.xml
index c6d0307fbaa..359add59a83 100644
--- a/addons/account/wizard/account_vat_view.xml
+++ b/addons/account/wizard/account_vat_view.xml
@@ -8,6 +8,9 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Taxes Report">
+ <separator string="Taxes Report" colspan="4"/>
+ <label colspan="4" nolabel="1" string="This menu prints a VAT declaration based on invoices or payments. Select one or several periods of the fiscal year. The information required for a tax declaration is automatically generated by OpenERP from invoices (or payments, in some countries). This data is updated in real time. That’s very useful because it enables you to preview at any time the tax that you owe at the start and end of the month or quarter."/>
+ <newline/>
<field name="chart_tax_id" widget='selection'/>
<field name="fiscalyear_id"/>
<field name="based_on"/>
diff --git a/addons/account_analytic_default/i18n/el.po b/addons/account_analytic_default/i18n/el.po
index 735c9f71bc6..b6e790ca376 100644
--- a/addons/account_analytic_default/i18n/el.po
+++ b/addons/account_analytic_default/i18n/el.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-08-02 20:43+0000\n"
-"Last-Translator: mga (Open ERP) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 14:11+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
"Language-Team: Greek <el@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: 2010-10-30 05:36+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_analytic_default
@@ -53,12 +53,12 @@ msgstr "Κανόνες Αναλυτικής"
#. module: account_analytic_default
#: help:account.analytic.default,analytic_id:0
msgid "Analytical Account"
-msgstr ""
+msgstr "Λογαριασμός Αναλυτικής"
#. module: account_analytic_default
#: view:account.analytic.default:0
msgid "Current"
-msgstr ""
+msgstr "Τρέχον"
#. module: account_analytic_default
#: view:account.analytic.default:0
diff --git a/addons/account_coda/i18n/nl.po b/addons/account_coda/i18n/nl.po
index 9c06f923e78..1a9dd0c54fe 100644
--- a/addons/account_coda/i18n/nl.po
+++ b/addons/account_coda/i18n/nl.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-10-29 09:35+0000\n"
-"Last-Translator: OpenERP Administrators <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 08:38+0000\n"
+"Last-Translator: Douwe Wullink (Dypalio) <Unknown>\n"
"Language-Team: Dutch <nl@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: 2010-10-30 05:52+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_coda
@@ -38,7 +38,7 @@ msgstr "Ongeldige modelnaam in de definitie van de actie."
#. module: account_coda
#: model:ir.model,name:account_coda.model_account_coda_import
msgid "Account Coda Import"
-msgstr ""
+msgstr "Account Coda Import"
#. module: account_coda
#: field:account.coda,name:0
@@ -53,7 +53,7 @@ msgstr "Sorteren op"
#. module: account_coda
#: field:account.coda.import,awaiting_account:0
msgid "Default Account for Unrecognized Movement"
-msgstr ""
+msgstr "Standaard rekening voor niet-herkende boeking"
#. module: account_coda
#: help:account.coda,date:0
@@ -73,7 +73,7 @@ msgstr "Import logboek"
#. module: account_coda
#: view:account.coda.import:0
msgid "Import"
-msgstr ""
+msgstr "Importeren"
#. module: account_coda
#: view:account.coda:0
@@ -92,6 +92,8 @@ msgid ""
"Set here the default account that will be used, if the partner is found but "
"does not have the bank account, or if he is domiciled"
msgstr ""
+"Vul hier de standaard rekening die wordt gebruikt als de relatie niet wordt "
+"gevonden of geen bankrekening heeft of als hij is verhuist"
#. module: account_coda
#: view:account.coda:0
@@ -105,11 +107,13 @@ msgid ""
"Set here the payable account that will be used, by default, if the partner "
"is not found"
msgstr ""
+"Vul hier de betaalrekening in die wordt gebruikt als de relatie niet is "
+"gevonden"
#. module: account_coda
#: view:account.coda:0
msgid "Search Coda"
-msgstr ""
+msgstr "Coda zoeken"
#. module: account_coda
#: view:account.coda:0
@@ -126,7 +130,7 @@ msgstr "Datum"
#. module: account_coda
#: model:ir.ui.menu,name:account_coda.menu_account_coda_statement
msgid "Coda Import Logs"
-msgstr ""
+msgstr "Coda Import Logboek"
#. module: account_coda
#: constraint:ir.ui.view:0
@@ -151,12 +155,12 @@ msgstr "Detail bankafschriften opslaan"
#. module: account_coda
#: view:account.coda.import:0
msgid "Cancel"
-msgstr ""
+msgstr "Annuleren"
#. module: account_coda
#: view:account.coda.import:0
msgid "Open Statements"
-msgstr ""
+msgstr "Afschriften openen"
#. module: account_coda
#: model:ir.ui.menu,name:account_coda.menu_account_coda_import
@@ -172,12 +176,12 @@ msgstr "Importeer Coda afschrift"
#. module: account_coda
#: view:account.coda:0
msgid "Statements"
-msgstr ""
+msgstr "Afschriften"
#. module: account_coda
#: constraint:ir.rule:0
msgid "Rules are not supported for osv_memory objects !"
-msgstr ""
+msgstr "Regels worden niet ondersteund bij osv_memory objecten !"
#. module: account_coda
#: field:account.bank.statement,coda_id:0
@@ -192,7 +196,7 @@ msgstr "Resultaten :"
#. module: account_coda
#: view:account.coda.import:0
msgid "Result of Imported Coda Statements"
-msgstr ""
+msgstr "Resultaat van geïmporteerde Coda afschriften"
#. module: account_coda
#: help:account.coda.import,def_receivable:0
@@ -200,6 +204,8 @@ msgid ""
"Set here the receivable account that will be used, by default, if the "
"partner is not found"
msgstr ""
+"Vul hier de ontvangstrekening in die wordt gebruikt als de relatie niet is "
+"gevonden"
#. module: account_coda
#: field:account.coda.import,coda:0
@@ -215,7 +221,7 @@ msgstr "Bank Afschrift"
#. module: account_coda
#: model:ir.actions.act_window,name:account_coda.action_account_coda
msgid "Coda Logs"
-msgstr ""
+msgstr "Coda Logboek"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:0
@@ -226,12 +232,12 @@ msgstr "Resultaat"
#. module: account_coda
#: view:account.coda.import:0
msgid "Click on 'New' to select your file :"
-msgstr ""
+msgstr "Druk op 'Nieuw' om uw bestand te selecteren :"
#. module: account_coda
#: field:account.coda.import,def_receivable:0
msgid "Default Receivable Account"
-msgstr ""
+msgstr "Sandaard ontvangstrekening"
#. module: account_coda
#: view:account.coda.import:0
@@ -241,28 +247,28 @@ msgstr "Sluiten"
#. module: account_coda
#: field:account.coda,statement_ids:0
msgid "Generated Bank Statements"
-msgstr ""
+msgstr "Gegenereerde bankafschriften"
#. module: account_coda
#: model:ir.module.module,shortdesc:account_coda.module_meta_information
msgid "Account CODA - import bank statements from coda file"
-msgstr ""
+msgstr "Account CODA - bankafschriften importeren uit coda bestand"
#. module: account_coda
#: view:account.coda.import:0
msgid "Configure Your Journal and Account :"
-msgstr ""
+msgstr "Configureer uw dagboek en rekening :"
#. module: account_coda
#: view:account.coda:0
msgid "Coda Import"
-msgstr ""
+msgstr "Coda importeren"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:0
#, python-format
msgid "The bank account %s is not defined for the partner %s.\n"
-msgstr ""
+msgstr "Bankrekening %s is niet gedefinieerd bij relatie %s.\n"
#. module: account_coda
#: view:account.coda:0
diff --git a/addons/account_followup/i18n/nl.po b/addons/account_followup/i18n/nl.po
index cb19fc2ba06..3dfd455f202 100644
--- a/addons/account_followup/i18n/nl.po
+++ b/addons/account_followup/i18n/nl.po
@@ -7,30 +7,30 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-10-30 14:34+0000\n"
-"Last-Translator: OpenERP Administrators <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 13:57+0000\n"
+"Last-Translator: Douwe Wullink (Dypalio) <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: 2010-10-31 05:00+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_followup
#: code:addons/account_followup/wizard/account_followup_print.py:0
#, python-format
msgid "Follwoup Summary"
-msgstr ""
+msgstr "Samenvatting aanmaningen"
#. module: account_followup
#: view:account_followup.followup:0
msgid "Search Followup"
-msgstr ""
+msgstr "Aanmaning zoeken"
#. module: account_followup
#: view:account_followup.stat:0
msgid "Group By..."
-msgstr ""
+msgstr "Groepeer op..."
#. module: account_followup
#: view:res.company:0
@@ -126,17 +126,17 @@ msgstr "Relaties"
#. module: account_followup
#: model:ir.model,name:account_followup.model_account_followup_followup
msgid "Account Follow Up"
-msgstr ""
+msgstr "Aanmaningenbeheer"
#. module: account_followup
#: selection:account_followup.followup.line,start:0
msgid "End of Month"
-msgstr "Einde van de maand"
+msgstr "Einde maand"
#. module: account_followup
#: view:account_followup.stat:0
msgid "Not Litigation"
-msgstr ""
+msgstr "Geen geschil"
#. module: account_followup
#: view:account.followup.print.all:0
@@ -161,7 +161,7 @@ msgstr "Factuur"
#. module: account_followup
#: help:account_followup.followup.line,sequence:0
msgid "Gives the sequence order when displaying a list of follow-up lines."
-msgstr ""
+msgstr "Bepaalt de volgorde bij het afbeelden van de aanmaningregels"
#. module: account_followup
#: view:account.followup.print.all:0
@@ -202,6 +202,26 @@ msgid ""
"\n"
"Best Regards,\n"
msgstr ""
+"\n"
+"Geachte %(partner_name)s,\n"
+"\n"
+"We zijn teleurgesteld om te constateren dat, ondanks het versturen van een "
+"herinnering, u een aanzienlijke\n"
+"betalingsachterstand heeft.\n"
+"\n"
+"Het is van belang dat er direct betaling plaatsvindt, anders moeten we "
+"overwegen om uw rekening te blokkeren wat betekent dat we u niet langer "
+"kunnen voorzien van gogederen en diensten.\n"
+"Wilt u alstublieft maatregelen nemen om te zorgen voor betaling binnen 8 "
+"dagen.\n"
+"\n"
+"Als er problemen zijn met betaling van een factuur waar we niet van op de "
+"hoogte zijn, neem dan gerust contact op met onze debieturenafdeling op "
+"(+32).10.68.94.39. opdat we de kwestie spoedig kunnen oplossen.\n"
+"\n"
+"Een openstaande posten overzicht treft u hieronder aan.\n"
+"\n"
+"Met vriendelijke groeten,\n"
#. module: account_followup
#: constraint:ir.ui.view:0
@@ -259,6 +279,18 @@ msgid ""
"\n"
"Best Regards,\n"
msgstr ""
+"\n"
+"Beste %(partner_name)s,\n"
+"\n"
+"Uitgezonderd eventuele fouten onzerzijds lijkt het volgende bedrag onbetaald "
+"te zijn gebleven. Wilt u de nodige stappen zetten om deze betaling binnen 8 "
+"dagen te laten plaatsvinden.\n"
+"\n"
+"Als uw betaling al heeft plaatsgevonden, kunt u dit bericht als niet "
+"verzonden beschouwen. Neem gerust contact op met onze debiteurenbewaking op "
+"(+32).10.68.94.39.\n"
+"\n"
+"Met vriendelijke groeten,\n"
#. module: account_followup
#: code:addons/account_followup/wizard/account_followup_print.py:0
@@ -289,16 +321,33 @@ msgid ""
"\n"
"Best Regards,\n"
msgstr ""
+"\n"
+"Geachte %(partner_name)s,\n"
+"\n"
+"Ondanks verschillende herinneringen is uw openstaande saldo nog niet "
+"voldaan.\n"
+"\n"
+"Indien uw betaling niet binnen 8 dagen is doorgevoerd zullen we zonder "
+"verdere aankondiging overgaan tot het nemen van gerechtelijke stappen om het "
+"openstaande saldo in te vorderen.\n"
+"\n"
+"Wij vertrouwen erop dat deze actie niet nodig zal blijken. Details van de "
+"openstaande posten treft u heronder aan.\n"
+"\n"
+"Ingeval u nog vragen heeft omtrent deze kwestie, dan kunt u contact opnemen "
+"met onze debiteurenbewaking op (+32).10.68.94.39.\n"
+"\n"
+"Hoogachtend,\n"
#. module: account_followup
#: view:account.followup.print.all:0
msgid "Send Mails"
-msgstr ""
+msgstr "Mails versturen"
#. module: account_followup
#: report:account_followup.followup.print:0
msgid "Currency"
-msgstr ""
+msgstr "Valuta"
#. module: account_followup
#: model:ir.module.module,shortdesc:account_followup.module_meta_information
@@ -308,7 +357,7 @@ msgstr "Aanmaningenbeheer"
#. module: account_followup
#: field:account_followup.stat,blocked:0
msgid "Blocked"
-msgstr ""
+msgstr "Geblokkeerd"
#. module: account_followup
#: help:account.followup.print,date:0
@@ -327,12 +376,12 @@ msgstr "Bedrag"
#: code:addons/account_followup/wizard/account_followup_print.py:0
#, python-format
msgid "Select Partners"
-msgstr ""
+msgstr "Relaties selecteren"
#. module: account_followup
#: constraint:ir.ui.menu:0
msgid "Error ! You can not create recursive Menu."
-msgstr ""
+msgstr "Fout ! U kunt geen recursief menu maken."
#. module: account_followup
#: view:account.followup.print.all:0
@@ -347,7 +396,7 @@ msgstr "Ongeldige modelnaam in de actie-definitie."
#. module: account_followup
#: view:account.followup.print.all:0
msgid "Print Follow Ups"
-msgstr ""
+msgstr "Aanmaningen afdrukken"
#. module: account_followup
#: field:account.move.line,followup_date:0
@@ -367,7 +416,7 @@ msgstr "Saldo:"
#. module: account_followup
#: model:ir.model,name:account_followup.model_account_followup_stat
msgid "Followup Statistics"
-msgstr ""
+msgstr "Aanmaning statistieken"
#. module: account_followup
#: report:account_followup.followup.print:0
@@ -377,12 +426,12 @@ msgstr "Betaald"
#. module: account_followup
#: view:account_followup.followup.line:0
msgid "%(user_signature)s: User Name"
-msgstr ""
+msgstr "%(user_signature)s: Gebruikersnaam"
#. module: account_followup
#: model:ir.model,name:account_followup.model_account_move_line
msgid "Journal Items"
-msgstr ""
+msgstr "Boekingen"
#. module: account_followup
#: field:account.followup.print.all,email_conf:0
@@ -397,12 +446,12 @@ msgstr "%(company_name)s: Bedrijfsnaam gebruiker"
#. module: account_followup
#: model:ir.model,name:account_followup.model_res_company
msgid "Companies"
-msgstr ""
+msgstr "Bedrijven"
#. module: account_followup
#: view:account_followup.followup:0
msgid "Followup Lines"
-msgstr ""
+msgstr "Aanmaningsregels"
#. module: account_followup
#: field:account_followup.stat,credit:0
@@ -417,7 +466,7 @@ msgstr "Vervaldatum"
#. module: account_followup
#: view:account_followup.followup.line:0
msgid "%(partner_name)s: Partner Name"
-msgstr ""
+msgstr "%(partner_name)s: Relatienaam"
#. module: account_followup
#: view:account_followup.stat:0
@@ -444,7 +493,7 @@ msgstr "Soort termijn"
#: model:ir.model,name:account_followup.model_account_followup_print
#: model:ir.model,name:account_followup.model_account_followup_print_all
msgid "Print Followup & Send Mail to Customers"
-msgstr ""
+msgstr "Aanmaning afdrukken en email versturen naar klanten"
#. module: account_followup
#: field:account_followup.stat,date_move_last:0
@@ -459,7 +508,7 @@ msgstr "Overzicht aanmaningen"
#. module: account_followup
#: field:account_followup.stat,period_id:0
msgid "Period"
-msgstr ""
+msgstr "Periode"
#. module: account_followup
#: code:addons/account_followup/wizard/account_followup_print.py:0
@@ -476,7 +525,7 @@ msgstr ""
#: view:account.followup.print:0
#: view:account.followup.print.all:0
msgid "Cancel"
-msgstr "Annuleer"
+msgstr "Annuleren"
#. module: account_followup
#: view:account_followup.followup.line:0
@@ -500,7 +549,7 @@ msgstr ""
#. module: account_followup
#: view:account_followup.stat:0
msgid "Litigation"
-msgstr ""
+msgstr "Geschil"
#. module: account_followup
#: constraint:ir.model:0
@@ -512,7 +561,7 @@ msgstr ""
#. module: account_followup
#: model:ir.actions.act_window,name:account_followup.act_account_partner_account_move_payable_all
msgid "Payable Items"
-msgstr ""
+msgstr "Achterstallige posten"
#. module: account_followup
#: view:account.followup.print.all:0
@@ -528,7 +577,7 @@ msgstr "%(date)s: Huidige datum"
#. module: account_followup
#: view:account_followup.stat:0
msgid "Followup Level"
-msgstr ""
+msgstr "Aanmaningsniveau"
#. module: account_followup
#: view:account_followup.followup:0
@@ -540,7 +589,7 @@ msgstr "Omschrijving"
#. module: account_followup
#: view:account_followup.stat:0
msgid "This Fiscal year"
-msgstr ""
+msgstr "Dit fiscale jaar"
#. module: account_followup
#: view:account.move.line:0
@@ -553,18 +602,20 @@ msgid ""
"Do not change message text, if you want to send email in partner language, "
"or configure from company"
msgstr ""
+"Verander de berichttekst niet als u de email in de taal van uw relatie wilt "
+"sturen, of configureer bij bedrijf"
#. module: account_followup
#: model:ir.actions.act_window,name:account_followup.act_account_partner_account_move_all
msgid "Receivable Items"
-msgstr ""
+msgstr "Openstaande posten"
#. module: account_followup
#: view:account_followup.stat:0
#: model:ir.actions.act_window,name:account_followup.action_followup_stat
#: model:ir.ui.menu,name:account_followup.menu_action_followup_stat_follow
msgid "Follow-ups Sent"
-msgstr ""
+msgstr "Verstuurde aanmaningen"
#. module: account_followup
#: field:account_followup.followup,name:0
@@ -616,17 +667,17 @@ msgstr "Totaal credit"
#. module: account_followup
#: view:account.followup.print.all:0
msgid "%(line)s: Ledger Posting lines"
-msgstr ""
+msgstr "%(line)s: Boekingsregels"
#. module: account_followup
#: field:account_followup.followup.line,sequence:0
msgid "Sequence"
-msgstr "Reeks"
+msgstr "Volgnummer"
#. module: account_followup
#: view:account_followup.followup.line:0
msgid "%(company_name)s: User's Company Name"
-msgstr ""
+msgstr "%(company_name)s: Bedrijfsnaam gebruiker"
#. module: account_followup
#: report:account_followup.followup.print:0
@@ -641,12 +692,12 @@ msgstr "%(partner_name)s: Naam relatie"
#. module: account_followup
#: view:account_followup.stat:0
msgid "Latest Followup Date"
-msgstr ""
+msgstr "Laatste aanmaningsdatum"
#. module: account_followup
#: model:ir.model,name:account_followup.model_account_followup_followup_line
msgid "Follow-Up Criteria"
-msgstr ""
+msgstr "Aanmaningscriteria"
#~ msgid "All payable entries"
#~ msgstr "Alle crediteuren"
diff --git a/addons/account_followup/report/account_followup_report.xml b/addons/account_followup/report/account_followup_report.xml
index fdde1f9300f..55691cd9397 100644
--- a/addons/account_followup/report/account_followup_report.xml
+++ b/addons/account_followup/report/account_followup_report.xml
@@ -77,6 +77,7 @@
<field name="view_mode">tree,graph</field>
<field name="context">{'search_default_followup_level':1,'search_default_fiscalyear':1}</field>
<field name="search_view_id" ref="view_account_followup_stat_search"/>
+ <field name="help">Follow up on the reminders sent over to your partners for unpaid invoices.</field>
</record>
<menuitem action="action_followup_stat" id="menu_action_followup_stat_follow" parent="account.next_id_22" groups="account.group_account_user"/>
diff --git a/addons/account_invoice_layout/i18n/nl.po b/addons/account_invoice_layout/i18n/nl.po
index 67312483023..223b1699fe3 100644
--- a/addons/account_invoice_layout/i18n/nl.po
+++ b/addons/account_invoice_layout/i18n/nl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-10-30 14:27+0000\n"
-"Last-Translator: OpenERP Administrators <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 16:18+0000\n"
+"Last-Translator: Douwe Wullink (Dypalio) <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: 2010-10-31 05:02+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_invoice_layout
@@ -84,12 +84,12 @@ msgstr "Eenheidsprijs"
#. module: account_invoice_layout
#: constraint:ir.ui.menu:0
msgid "Error ! You can not create recursive Menu."
-msgstr ""
+msgstr "Fout ! U kunt geen recursief menu maken."
#. module: account_invoice_layout
#: model:notify.message,msg:account_invoice_layout.demo_message1
msgid "Be Expert with the Experts..."
-msgstr ""
+msgstr "Wees expert onder de experts..."
#. module: account_invoice_layout
#: constraint:ir.actions.act_window:0
@@ -131,7 +131,7 @@ msgstr "Product"
#. module: account_invoice_layout
#: help:account.invoice.line,sequence:0
msgid "Gives the sequence order when displaying a list of invoice lines."
-msgstr ""
+msgstr "Bepaalt de volgorde bij het afbeelden van de factuurregels"
#. module: account_invoice_layout
#: report:account.invoice.layout:0
@@ -181,7 +181,7 @@ msgstr "Bijzonder bericht:"
#. module: account_invoice_layout
#: help:account.invoice.special.msg,message:0
msgid "Message to Print at the bottom of report"
-msgstr ""
+msgstr "Bericht om onder op het overzicht af te drukken"
#. module: account_invoice_layout
#: report:account.invoice.layout:0
@@ -260,7 +260,7 @@ msgstr "Volgnummer"
#. module: account_invoice_layout
#: model:ir.model,name:account_invoice_layout.model_account_invoice_special_msg
msgid "Account Invoice Special Message"
-msgstr ""
+msgstr "Klantfactuur speciaal bericht"
#. module: account_invoice_layout
#: report:account.invoice.layout:0
@@ -281,7 +281,7 @@ msgstr "Scheidingslijn"
#. module: account_invoice_layout
#: model:ir.module.module,shortdesc:account_invoice_layout.module_meta_information
msgid "Invoices Layout Improvement"
-msgstr ""
+msgstr "Factuurlayout verbetering"
#. module: account_invoice_layout
#: report:account.invoice.layout:0
@@ -309,7 +309,7 @@ msgstr "BTW"
#. module: account_invoice_layout
#: model:ir.model,name:account_invoice_layout.model_account_invoice_line
msgid "Invoice Line"
-msgstr ""
+msgstr "Factuurregel"
#. module: account_invoice_layout
#: report:account.invoice.layout:0
diff --git a/addons/account_payment/i18n/nl.po b/addons/account_payment/i18n/nl.po
index 4e93d0a4956..ad459d3c6d3 100644
--- a/addons/account_payment/i18n/nl.po
+++ b/addons/account_payment/i18n/nl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-10-30 09:02+0000\n"
-"Last-Translator: OpenERP Administrators <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 18:05+0000\n"
+"Last-Translator: Douwe Wullink (Dypalio) <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: 2010-10-31 05:02+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_payment
@@ -40,7 +40,7 @@ msgstr "Kies de toe te passen betalingswijze"
#: view:payment.mode:0
#: view:payment.order:0
msgid "Group By..."
-msgstr ""
+msgstr "Groepeer op..."
#. module: account_payment
#: constraint:ir.actions.act_window:0
@@ -61,6 +61,9 @@ msgid ""
" Once the bank is confirmed the state is set to 'Confirmed'.\n"
" Then the order is paid the state is 'Done'."
msgstr ""
+"Wanneer een opdracht is geplaatst is de status 'Concept'.\n"
+" Als de bank heeft bevestigd wordt de status 'Bevestigd'.\n"
+" Als de betaling is gedaan wordt de status 'Klaar'."
#. module: account_payment
#: help:account.invoice,amount_to_pay:0
@@ -98,7 +101,7 @@ msgstr "Boekingen"
#. module: account_payment
#: report:payment.order:0
msgid "Used Account"
-msgstr ""
+msgstr "Gebruikte rekening"
#. module: account_payment
#: field:payment.line,ml_maturity_date:0
@@ -274,7 +277,7 @@ msgstr "Rekeningnummer bestemming"
#. module: account_payment
#: view:payment.order:0
msgid "Search Payment Orders"
-msgstr ""
+msgstr "Betalingsopdrachten zoeken"
#. module: account_payment
#: constraint:ir.ui.view:0
@@ -314,7 +317,7 @@ msgstr "Betalingsbeheer"
#. module: account_payment
#: field:payment.line,bank_statement_line_id:0
msgid "Bank statement line"
-msgstr ""
+msgstr "Bankafschriftregel"
#. module: account_payment
#: selection:payment.order,date_prefered:0
@@ -329,12 +332,12 @@ msgstr "Bedrag te betalen"
#. module: account_payment
#: report:payment.order:0
msgid "Currency"
-msgstr ""
+msgstr "Valuta"
#. module: account_payment
#: view:account.payment.make.payment:0
msgid "Yes"
-msgstr ""
+msgstr "Ja"
#. module: account_payment
#: help:payment.line,info_owner:0
@@ -344,7 +347,7 @@ msgstr "Adres van de hoofdrelatie"
#. module: account_payment
#: field:payment.mode,company_id:0
msgid "Company"
-msgstr ""
+msgstr "Bedrijf"
#. module: account_payment
#: model:ir.model,name:account_payment.model_account_payment_populate_statement
@@ -382,7 +385,7 @@ msgstr "Betaalregel"
#. module: account_payment
#: constraint:ir.ui.menu:0
msgid "Error ! You can not create recursive Menu."
-msgstr ""
+msgstr "Fout ! U kunt geen recursief menu maken."
#. module: account_payment
#: help:payment.line,communication2:0
@@ -442,7 +445,7 @@ msgstr "Deze regel wordt de informatie van de klant gerefereerd."
#. module: account_payment
#: view:payment.order.create:0
msgid "Search"
-msgstr ""
+msgstr "Zoeken"
#. module: account_payment
#: field:payment.line,date:0
@@ -452,7 +455,7 @@ msgstr "Betaaldatum"
#. module: account_payment
#: report:payment.order:0
msgid "Total:"
-msgstr ""
+msgstr "Totaal:"
#. module: account_payment
#: field:payment.order,date_created:0
@@ -492,7 +495,7 @@ msgstr ""
#. module: account_payment
#: report:payment.order:0
msgid "Invoice Ref"
-msgstr ""
+msgstr "Factuur ref"
#. module: account_payment
#: field:payment.line,name:0
@@ -524,7 +527,7 @@ msgstr "Gereed"
#. module: account_payment
#: model:ir.model,name:account_payment.model_account_invoice
msgid "Invoice"
-msgstr ""
+msgstr "Factuur"
#. module: account_payment
#: field:payment.line,communication:0
@@ -586,7 +589,7 @@ msgstr "Rekeningnummer bestemming"
#. module: account_payment
#: view:account.payment.make.payment:0
msgid "Are you sure you want to make payment?"
-msgstr ""
+msgstr "Weet u zeker dat u wilt betalen?"
#. module: account_payment
#: help:payment.mode,journal:0
@@ -619,7 +622,7 @@ msgstr "Betaling"
#. module: account_payment
#: report:payment.order:0
msgid "Payment Order / Payment"
-msgstr ""
+msgstr "Betaalopdracht / Betaling"
#. module: account_payment
#: field:payment.line,move_line_id:0
@@ -644,7 +647,7 @@ msgstr "Naam"
#. module: account_payment
#: report:payment.order:0
msgid "Bank Account"
-msgstr ""
+msgstr "Bankrekening"
#. module: account_payment
#: view:payment.line:0
@@ -655,7 +658,7 @@ msgstr "Boekingsinformatie"
#. module: account_payment
#: model:ir.model,name:account_payment.model_payment_order_create
msgid "payment.order.create"
-msgstr ""
+msgstr "payment.order.create"
#. module: account_payment
#: field:payment.line,order_id:0
@@ -670,13 +673,13 @@ msgstr "Totaal"
#. module: account_payment
#: constraint:ir.rule:0
msgid "Rules are not supported for osv_memory objects !"
-msgstr ""
+msgstr "Regels worden niet ondersteund bij osv_memory objecten !"
#. module: account_payment
#: view:account.payment.make.payment:0
#: model:ir.actions.act_window,name:account_payment.action_account_payment_make_payment
msgid "Make Payment"
-msgstr ""
+msgstr "Betaling maken"
#. module: account_payment
#: field:payment.line,partner_id:0
@@ -687,7 +690,7 @@ msgstr "Relatie"
#. module: account_payment
#: model:ir.actions.act_window,name:account_payment.action_create_payment_order
msgid "Populate Payment"
-msgstr ""
+msgstr "Betaling vullen"
#. module: account_payment
#: help:payment.mode,bank_id:0
diff --git a/addons/account_tax_include/i18n/it.po b/addons/account_tax_include/i18n/it.po
index b55377e929c..2c78a4b5fdf 100644
--- a/addons/account_tax_include/i18n/it.po
+++ b/addons/account_tax_include/i18n/it.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-11-10 20:39+0000\n"
-"Last-Translator: simone.sandri <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 08:50+0000\n"
+"Last-Translator: OpenERP Administrators <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: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_tax_include
diff --git a/addons/account_voucher/i18n/el.po b/addons/account_voucher/i18n/el.po
index 4b88610bea1..e82e2905aac 100644
--- a/addons/account_voucher/i18n/el.po
+++ b/addons/account_voucher/i18n/el.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-08-26 21:26+0000\n"
-"Last-Translator: Makis Nicolaou <mark.nicolaou@gmail.com>\n"
+"PO-Revision-Date: 2010-11-11 14:49+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
"Language-Team: Greek <el@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: 2010-10-30 05:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_voucher
@@ -35,7 +35,7 @@ msgstr ""
#. module: account_voucher
#: view:account.voucher:0
msgid "Open Customer Journal Entries"
-msgstr ""
+msgstr "Ανοχτές καταχωρήσεις Πελάτη στο ημερολόγιο"
#. module: account_voucher
#: report:voucher.cash_receipt.drcr:0
@@ -46,7 +46,7 @@ msgstr "Συγκεκριμένα"
#. module: account_voucher
#: view:account.voucher:0
msgid "Group By..."
-msgstr ""
+msgstr "Ομαδοποίηση Κατά..."
#. module: account_voucher
#: code:addons/account_voucher/account_voucher.py:0
@@ -67,7 +67,7 @@ msgstr "Σχετ. :"
#. module: account_voucher
#: view:account.voucher:0
msgid "Supplier"
-msgstr ""
+msgstr "Πριμηθευτής"
#. module: account_voucher
#: model:ir.actions.report.xml,name:account_voucher.report_account_voucher_print
@@ -90,7 +90,7 @@ msgstr ""
#: view:account.voucher:0
#: model:ir.actions.act_window,name:account_voucher.act_pay_bills
msgid "Bill Payment"
-msgstr ""
+msgstr "Πληρωμή Λογαριασμού"
#. module: account_voucher
#: field:account.voucher.line,amount_original:0
@@ -139,7 +139,7 @@ msgstr ""
#. module: account_voucher
#: view:account.voucher:0
msgid "Validate"
-msgstr ""
+msgstr "Επικύρωση"
#. module: account_voucher
#: view:account.voucher:0
@@ -149,7 +149,7 @@ msgstr ""
#. module: account_voucher
#: selection:account.voucher,type:0
msgid "Purchase"
-msgstr ""
+msgstr "Αγορά"
#. module: account_voucher
#: field:account.voucher,account_id:0
@@ -160,33 +160,33 @@ msgstr "Λογαριασμός"
#. module: account_voucher
#: field:account.voucher,line_dr_ids:0
msgid "Debits"
-msgstr ""
+msgstr "Χρεώσεις"
#. module: account_voucher
#: view:account.statement.from.invoice.lines:0
msgid "Ok"
-msgstr ""
+msgstr "ΟΚ"
#. module: account_voucher
#: field:account.voucher,date_due:0
#: field:account.voucher.line,date_due:0
msgid "Due Date"
-msgstr ""
+msgstr "Ημερομηνία Λήξης"
#. module: account_voucher
#: field:account.voucher,narration:0
msgid "Notes"
-msgstr ""
+msgstr "Σημειώσεις"
#. module: account_voucher
#: selection:account.voucher,type:0
msgid "Sale"
-msgstr ""
+msgstr "Πώληση"
#. module: account_voucher
#: field:account.voucher.line,move_line_id:0
msgid "Journal Item"
-msgstr ""
+msgstr "Στοιχείο Ημερολογίου"
#. module: account_voucher
#: field:account.voucher,reference:0
@@ -202,22 +202,22 @@ msgstr "Ποσό"
#. module: account_voucher
#: view:account.voucher:0
msgid "Payment Options"
-msgstr ""
+msgstr "Επιλογές Πληρωμής"
#. module: account_voucher
#: view:account.voucher:0
msgid "Bill Information"
-msgstr ""
+msgstr "Πληροφορίες Λογαριασμού"
#. module: account_voucher
#: selection:account.voucher,state:0
msgid "Cancelled"
-msgstr ""
+msgstr "Ακυρώθηκε"
#. module: account_voucher
#: field:account.statement.from.invoice,date:0
msgid "Date payment"
-msgstr ""
+msgstr "Ημερομηνία Πληρωμής"
#. module: account_voucher
#: report:voucher.cash_receipt.drcr:0
@@ -239,7 +239,7 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher,tax_id:0
msgid "Tax"
-msgstr ""
+msgstr "Φόρος"
#. module: account_voucher
#: report:voucher.cash_receipt.drcr:0
@@ -255,12 +255,12 @@ msgstr "Αναλυτικός Λογαριασμός"
#. module: account_voucher
#: report:voucher.cash_receipt.drcr:0
msgid "Journal:"
-msgstr ""
+msgstr "Ημερολόγιο:"
#. module: account_voucher
#: view:account.voucher:0
msgid "Payment Information"
-msgstr ""
+msgstr "Πληροφορίες Πληρωμής"
#. module: account_voucher
#: view:account.statement.from.invoice:0
@@ -277,7 +277,7 @@ msgstr "Συνεργάτης"
#. module: account_voucher
#: view:account.bank.statement:0
msgid "Import Invoices"
-msgstr ""
+msgstr "Εισαγωγή Τιμολογίων"
#. module: account_voucher
#: code:addons/account_voucher/account_voucher.py:0
@@ -294,7 +294,7 @@ msgstr "Λογαριασμός :"
#. module: account_voucher
#: selection:account.voucher,type:0
msgid "Receipt"
-msgstr ""
+msgstr "Απόδειξη"
#. module: account_voucher
#: report:voucher.cash_receipt.drcr:0
@@ -311,7 +311,7 @@ msgstr ""
#: report:voucher.cash_receipt.drcr:0
#: report:voucher.print:0
msgid "Date:"
-msgstr ""
+msgstr "Ημερομηνία:"
#. module: account_voucher
#: view:account.voucher:0
@@ -340,7 +340,7 @@ msgstr "Εγγραφές Παραστατικών"
#: code:addons/account_voucher/account_voucher.py:0
#, python-format
msgid "Error !"
-msgstr ""
+msgstr "Λάθος !"
#. module: account_voucher
#: view:account.voucher:0
@@ -363,7 +363,7 @@ msgstr "Αναγνωρισμένη Υπογραφή"
#: model:ir.actions.act_window,name:account_voucher.action_sale_receipt
#: model:ir.ui.menu,name:account_voucher.menu_action_sale_receipt
msgid "Sales Receipt"
-msgstr ""
+msgstr "Απόδειξη Πώλησης"
#. module: account_voucher
#: code:addons/account_voucher/account_voucher.py:0
@@ -374,7 +374,7 @@ msgstr "Άκυρη Ενέργεια!"
#. module: account_voucher
#: view:account.voucher:0
msgid "Other Information"
-msgstr ""
+msgstr "Άλλες Πληροφορίες"
#. module: account_voucher
#: view:account.voucher.unreconcile:0
@@ -390,14 +390,14 @@ msgstr "Άκυρο XML για Αρχιτεκτονική Όψης!"
#: model:ir.actions.act_window,name:account_voucher.action_vendor_payment
#: model:ir.ui.menu,name:account_voucher.menu_action_vendor_payment
msgid "Vendor Payment"
-msgstr ""
+msgstr "Πληρωμή Πωλητή"
#. module: account_voucher
#: view:account.invoice:0
#: code:addons/account_voucher/invoice.py:0
#, python-format
msgid "Pay Invoice"
-msgstr ""
+msgstr "Τιμολόγιο Πληρωμής"
#. module: account_voucher
#: code:addons/account_voucher/account_voucher.py:0
@@ -408,7 +408,7 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher,tax_amount:0
msgid "Tax Amount"
-msgstr ""
+msgstr "Ποσό Φόρου"
#. module: account_voucher
#: view:account.voucher:0
@@ -418,18 +418,18 @@ msgstr ""
#. module: account_voucher
#: view:account.voucher:0
msgid "Paid Amount"
-msgstr ""
+msgstr "Πληρωτέο Ποσό"
#. module: account_voucher
#: selection:account.voucher,pay_now:0
msgid "Pay Directly"
-msgstr ""
+msgstr "Απευθείας Πληρωμή"
#. module: account_voucher
#: field:account.statement.from.invoice,line_ids:0
#: field:account.statement.from.invoice.lines,line_ids:0
msgid "Invoices"
-msgstr ""
+msgstr "Τιμολόγια"
#. module: account_voucher
#: field:account.voucher.unreconcile,remove:0
@@ -450,7 +450,7 @@ msgstr "Νόμισμα"
#. module: account_voucher
#: view:account.statement.from.invoice.lines:0
msgid "Payable and Receivables"
-msgstr ""
+msgstr "Πληρωτές και Εισπρακτέα"
#. module: account_voucher
#: selection:account.voucher,pay_now:0
@@ -489,7 +489,7 @@ msgstr "ΠΡΟ-ΦΟΡΜΑ"
#. module: account_voucher
#: view:account.voucher:0
msgid "Total Amount"
-msgstr ""
+msgstr "Συνολικό Ποσό"
#. module: account_voucher
#: field:account.voucher.line,type:0
@@ -504,17 +504,17 @@ msgstr ""
#. module: account_voucher
#: view:account.voucher:0
msgid "Vendor"
-msgstr ""
+msgstr "Πωλητής"
#. module: account_voucher
#: view:account.voucher:0
msgid "Payment Terms"
-msgstr ""
+msgstr "Όροι Πληρωμής"
#. module: account_voucher
#: view:account.voucher:0
msgid "Compute Tax"
-msgstr ""
+msgstr "Υπολογισμός Φόρου"
#. module: account_voucher
#: field:account.voucher,date:0
@@ -525,13 +525,13 @@ msgstr "Ημερομηνία"
#. module: account_voucher
#: view:account.voucher:0
msgid "Post"
-msgstr ""
+msgstr "Αποστολή"
#. module: account_voucher
#: report:voucher.cash_receipt.drcr:0
#: report:voucher.print:0
msgid "Number:"
-msgstr ""
+msgstr "Αριθμός:"
#. module: account_voucher
#: field:account.bank.statement.line,amount_reconciled:0
@@ -546,7 +546,7 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher,pre_line:0
msgid "Previous Payments ?"
-msgstr ""
+msgstr "Προηγούμενες Πληρωμές ;"
#. module: account_voucher
#: model:ir.actions.act_window,name:account_voucher.action_voucher_list
@@ -622,7 +622,7 @@ msgstr ""
#. module: account_voucher
#: view:account.voucher:0
msgid "Sales Information"
-msgstr ""
+msgstr "Πληροφορίες Πώλησης"
#. module: account_voucher
#: view:account.voucher:0
@@ -639,7 +639,7 @@ msgstr "Παραστατικό"
#. module: account_voucher
#: model:ir.model,name:account_voucher.model_account_invoice
msgid "Invoice"
-msgstr ""
+msgstr "Τιμολόγιο"
#. module: account_voucher
#: view:account.voucher:0
@@ -672,7 +672,7 @@ msgstr ""
#: model:ir.actions.act_window,name:account_voucher.action_vendor_receipt
#: model:ir.ui.menu,name:account_voucher.menu_action_vendor_receipt
msgid "Customer Payment"
-msgstr ""
+msgstr "Πληρωμή Πελάτη"
#. module: account_voucher
#: constraint:ir.model:0
@@ -702,7 +702,7 @@ msgstr "Χρέωση"
#. module: account_voucher
#: view:account.voucher:0
msgid "Payment Method"
-msgstr ""
+msgstr "Τρόπος Πληρωμής"
#. module: account_voucher
#: field:account.voucher.line,name:0
@@ -736,13 +736,13 @@ msgstr "-"
#. module: account_voucher
#: view:account.voucher:0
msgid "Internal Notes"
-msgstr ""
+msgstr "Εσωτερικές Σημειώσεις"
#. module: account_voucher
#: view:account.voucher:0
#: field:account.voucher,line_cr_ids:0
msgid "Credits"
-msgstr ""
+msgstr "Πιστώσεις"
#. module: account_voucher
#: report:voucher.cash_receipt.drcr:0
@@ -757,7 +757,7 @@ msgstr ""
#: field:account.voucher,pay_now:0
#: selection:account.voucher,type:0
msgid "Payment"
-msgstr ""
+msgstr "Πληρωμή"
#. module: account_voucher
#: view:account.voucher:0
@@ -770,7 +770,7 @@ msgstr "Posted"
#. module: account_voucher
#: view:account.voucher:0
msgid "Customer"
-msgstr ""
+msgstr "Πελάτες"
#. module: account_voucher
#: field:account.voucher,type:0
@@ -819,7 +819,7 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher.line,untax_amount:0
msgid "Untax Amount"
-msgstr ""
+msgstr "Αφορολόγητο Ποσό"
#. module: account_voucher
#: view:account.voucher:0
@@ -831,12 +831,12 @@ msgstr ""
#: view:account.voucher:0
#: field:account.voucher,amount:0
msgid "Total"
-msgstr ""
+msgstr "Σύνολο"
#. module: account_voucher
#: field:account.voucher,name:0
msgid "Memo"
-msgstr ""
+msgstr "Υπενθυμίσεις"
#~ msgid "Create"
#~ msgstr "Δημιουργία"
diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py
index c3aa7bb8720..ce5f7cfff8e 100644
--- a/addons/base_calendar/base_calendar.py
+++ b/addons/base_calendar/base_calendar.py
@@ -399,7 +399,7 @@ property or property parameter."),
res = None
def ics_datetime(idate, short=False):
if idate:
- if short:
+ if short or len(idate)<=10:
return date.fromtimestamp(time.mktime(time.strptime(idate, '%Y-%m-%d')))
else:
return datetime.strptime(idate, '%Y-%m-%d %H:%M:%S')
@@ -454,16 +454,16 @@ property or property parameter."),
if interval == 'minutes':
delta = timedelta(minutes=duration)
trigger.value = delta
-
# Compute other details
valarm.add('DESCRIPTION').value = alarm_data['name'] or 'OpenERP'
-
+
for attendee in event_obj.attendee_ids:
attendee_add = event.add('attendee')
attendee_add.params['CUTYPE'] = [str(attendee.cutype)]
attendee_add.params['ROLE'] = [str(attendee.role)]
attendee_add.params['RSVP'] = [str(attendee.rsvp)]
attendee_add.value = 'MAILTO:' + (attendee.email or '')
+
res = cal.serialize()
return res
diff --git a/addons/base_calendar/i18n/el.po b/addons/base_calendar/i18n/el.po
new file mode 100644
index 00000000000..983609ff112
--- /dev/null
+++ b/addons/base_calendar/i18n/el.po
@@ -0,0 +1,1591 @@
+# Greek translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2010-10-18 17:46+0000\n"
+"PO-Revision-Date: 2010-11-11 19:58+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
+"Language-Team: Greek <el@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: 2010-11-12 04:49+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_related:0
+#: selection:res.alarm,trigger_related:0
+msgid "The event starts"
+msgstr "Το γεγονός αρχίζει"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+msgid "Hourly"
+msgstr "Ωριαίο"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Required to Join"
+msgstr "Απαιτήται εισαγωγή"
+
+#. module: base_calendar
+#: help:calendar.event,exdate:0
+#: help:calendar.todo,exdate:0
+msgid ""
+"This property defines the list of date/time exceptions for a recurring "
+"calendar component."
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,vtimezone:0
+#: field:calendar.todo,vtimezone:0
+msgid "Timezone"
+msgstr "Ζώνη ώρας"
+
+#. module: base_calendar
+#: field:calendar.event.edit.all,name:0
+msgid "Title"
+msgstr "Τίτλος"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+#: selection:calendar.event,rrule_type:0
+#: selection:calendar.todo,rrule_type:0
+msgid "Monthly"
+msgstr "Μηνιαία"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Invited User"
+msgstr "Προσκαλούμενος Χρήστης"
+
+#. module: base_calendar
+#: view:base.calendar.set.exrule:0
+msgid "Select range to Exclude"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.actions.act_window,name:base_calendar.action_res_alarm_view
+#: model:ir.ui.menu,name:base_calendar.menu_crm_meeting_avail_alarm
+msgid "Alarms"
+msgstr "Υπενθυμίσεις"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Sunday"
+msgstr "Κυριακή"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: field:calendar.attendee,role:0
+msgid "Role"
+msgstr "Ρόλος"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Invitation details"
+msgstr "Λεπτομέρειες πρόσκλησης"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,byday:0
+#: selection:calendar.event,byday:0
+#: selection:calendar.todo,byday:0
+msgid "Fourth"
+msgstr "Τέταρτο"
+
+#. module: base_calendar
+#: help:calendar.event,count:0
+#: help:calendar.todo,count:0
+msgid "Repeat max that times"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,show_as:0
+#: field:calendar.todo,show_as:0
+msgid "Show as"
+msgstr "Εμφάνιση ως"
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,day:0
+#: selection:base.calendar.set.exrule,select1:0
+#: field:calendar.event,day:0
+#: selection:calendar.event,select1:0
+#: field:calendar.todo,day:0
+#: selection:calendar.todo,select1:0
+msgid "Date of month"
+msgstr "Ημερομηνία μήνα"
+
+#. module: base_calendar
+#: selection:calendar.event,class:0
+#: selection:calendar.todo,class:0
+msgid "Public"
+msgstr "Κοινόχρηστο"
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_interval:0
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+#: selection:res.alarm,trigger_interval:0
+msgid "Hours"
+msgstr "Ώρες"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "March"
+msgstr "Μάρτιος"
+
+#. module: base_calendar
+#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:0
+#, python-format
+msgid "Warning !"
+msgstr "Προειδοποίηση!"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Friday"
+msgstr "Παρασκευή"
+
+#. module: base_calendar
+#: field:calendar.event,allday:0
+#: field:calendar.todo,allday:0
+msgid "All Day"
+msgstr "Ολοήμερο"
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,select1:0
+#: field:calendar.event,select1:0
+#: field:calendar.todo,select1:0
+msgid "Option"
+msgstr "Επιλογή"
+
+#. module: base_calendar
+#: selection:calendar.attendee,availability:0
+#: selection:calendar.event,show_as:0
+#: selection:calendar.todo,show_as:0
+#: selection:res.users,availability:0
+msgid "Free"
+msgstr "Ελεύθερος/η"
+
+#. module: base_calendar
+#: help:calendar.attendee,rsvp:0
+msgid "Indicats whether the favor of a reply is requested"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_ir_attachment
+msgid "ir.attachment"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,delegated_to:0
+msgid "The users that the original request was delegated to"
+msgstr "Ο χρήστης ο οποίος εξουσιοδοτήθηκε από την αρχική αίτηση"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: field:calendar.attendee,delegated_to:0
+msgid "Delegated To"
+msgstr "Εξουσιοδότηση σε"
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,we:0
+#: field:calendar.event,we:0
+#: field:calendar.todo,we:0
+msgid "Wed"
+msgstr "Τετ"
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Show time as"
+msgstr "Εμφάνιση χρόνου ως"
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,tu:0
+#: field:calendar.event,tu:0
+#: field:calendar.todo,tu:0
+msgid "Tue"
+msgstr "Τρι"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+#: selection:calendar.event,rrule_type:0
+#: selection:calendar.todo,rrule_type:0
+msgid "Yearly"
+msgstr "Ετήσια"
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_related:0
+#: selection:res.alarm,trigger_related:0
+msgid "The event ends"
+msgstr "Το γεγονός λήγει"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,byday:0
+#: selection:calendar.event,byday:0
+#: selection:calendar.todo,byday:0
+msgid "Last"
+msgstr "Τελευταία"
+
+#. module: base_calendar
+#: help:calendar.attendee,state:0
+msgid "Status of the attendee's participation"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,cutype:0
+msgid "Room"
+msgstr "Δωμάτιο"
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_interval:0
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+#: selection:res.alarm,trigger_interval:0
+msgid "Days"
+msgstr "Μέρες"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+msgid "No Repeat"
+msgstr "Χωρίς Επανάληψη"
+
+#. module: base_calendar
+#: code:addons/base_calendar/base_calendar.py:0
+#: code:addons/base_calendar/wizard/base_calendar_invite_attendee.py:0
+#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:0
+#, python-format
+msgid "Error!"
+msgstr "Λάθος!"
+
+#. module: base_calendar
+#: selection:calendar.attendee,role:0
+msgid "Chair Person"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Exclude range"
+msgstr "Αποκλεισμός έκτασης"
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Select data for Custom Rule"
+msgstr "Επιλογή δεδομένων για προσαρμοσμένο κανόνα"
+
+#. module: base_calendar
+#: selection:calendar.event,state:0
+#: selection:calendar.todo,state:0
+msgid "Cancelled"
+msgstr "Ακυρώθηκε"
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_interval:0
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+#: selection:res.alarm,trigger_interval:0
+msgid "Minutes"
+msgstr "Λεπτά"
+
+#. module: base_calendar
+#: selection:calendar.alarm,action:0
+msgid "Display"
+msgstr "Εμφάνιση"
+
+#. module: base_calendar
+#: view:calendar.event.edit.all:0
+msgid "Edit all Occurrences"
+msgstr "Επεξεργασία όλων των επαναλήψεων"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Invitation type"
+msgstr "Τύπος πρόσκλησης"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+msgid "Secondly"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,event_date:0
+#: field:calendar.attendee,event_date:0
+#: view:calendar.event:0
+msgid "Event Date"
+msgstr "Ημερομηνία Γεγονότος"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Group By..."
+msgstr "Ομαδοποίηση Κατά..."
+
+#. module: base_calendar
+#: help:base_calendar.invite.attendee,email:0
+msgid "Provide external email address who will receive this invitation."
+msgstr ""
+"Πρόσθεςσε τις εξωτερικές διευθύνσεις email αυτών που θα λάβουνε αυτήν την "
+"πρόσκληση."
+
+#. module: base_calendar
+#: help:calendar.attendee,partner_id:0
+msgid "Partner related to contact"
+msgstr "Συνεργάτης συνδεδεμένος με επαφή"
+
+#. module: base_calendar
+#: help:calendar.attendee,cutype:0
+msgid "Specify the type of Invitation"
+msgstr "Προσδιόρισε τον τύπο της Πρόσκλησης"
+
+#. module: base_calendar
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+msgid "Years"
+msgstr "Έτη"
+
+#. module: base_calendar
+#: field:calendar.alarm,event_end_date:0
+#: field:calendar.attendee,event_end_date:0
+msgid "Event End Date"
+msgstr "Ημερομηνία Λήξης Γεγονότος"
+
+#. module: base_calendar
+#: selection:calendar.attendee,role:0
+msgid "Optional Participation"
+msgstr "Προαιρετική Συμμετοχή"
+
+#. module: base_calendar
+#: help:calendar.event,interval:0
+#: help:calendar.todo,interval:0
+msgid "Repeat every x"
+msgstr "Επανάληψη κάθε x"
+
+#. module: base_calendar
+#: field:calendar.event,date_deadline:0
+#: field:calendar.todo,date_deadline:0
+msgid "Deadline"
+msgstr "Προσθεσμία"
+
+#. module: base_calendar
+#: code:addons/base_calendar/base_calendar.py:0
+#, python-format
+msgid "Warning!"
+msgstr "Προειδοποίηση"
+
+#. module: base_calendar
+#: view:base.calendar.set.exrule:0
+msgid "_Cancel"
+msgstr "_Άκυρο"
+
+#. module: base_calendar
+#: model:ir.module.module,shortdesc:base_calendar.module_meta_information
+msgid "Basic Calendar Functionality"
+msgstr "Βασική Λειτουργία Ημερολογίου"
+
+#. module: base_calendar
+#: field:calendar.event,organizer:0
+#: field:calendar.event,organizer_id:0
+#: field:calendar.todo,organizer:0
+#: field:calendar.todo,organizer_id:0
+msgid "Organizer"
+msgstr ""
+
+#. module: base_calendar
+#: code:addons/base_calendar/base_calendar.py:0
+#: view:calendar.event:0
+#: model:res.request.link,name:base_calendar.request_link_meeting
+#, python-format
+msgid "Event"
+msgstr "Γεγονός"
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_occurs:0
+#: selection:res.alarm,trigger_occurs:0
+msgid "Before"
+msgstr "Πριν"
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: selection:calendar.event,state:0
+#: selection:calendar.todo,state:0
+msgid "Confirmed"
+msgstr "Ειβεβαιωμένο"
+
+#. module: base_calendar
+#: model:ir.actions.act_window,name:base_calendar.action_calendar_event_edit_all
+msgid "Edit all events"
+msgstr "Επεξεργασία όλων των γεγονότων"
+
+#. module: base_calendar
+#: field:calendar.alarm,attendee_ids:0
+#: field:calendar.event,attendee_ids:0
+#: field:calendar.todo,attendee_ids:0
+msgid "Attendees"
+msgstr "Παρεβρισκόμενοι"
+
+#. module: base_calendar
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Confirm"
+msgstr "Επιβεβαίωση"
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_calendar_todo
+msgid "Calendar Task"
+msgstr "Εργασία Ημερολογίου"
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,su:0
+#: field:calendar.event,su:0
+#: field:calendar.todo,su:0
+msgid "Sun"
+msgstr "Κυρ"
+
+#. module: base_calendar
+#: field:calendar.attendee,cutype:0
+msgid "Invite Type"
+msgstr "Τύπος Πρόσκλησης"
+
+#. module: base_calendar
+#: view:res.alarm:0
+msgid "Reminder details"
+msgstr "Λεπτομέρειες Υπενθύμισης"
+
+#. module: base_calendar
+#: field:calendar.attendee,parent_ids:0
+msgid "Delegrated From"
+msgstr "Εξουσιοδότηση από"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,select1:0
+#: selection:calendar.event,select1:0
+#: selection:calendar.todo,select1:0
+msgid "Day of month"
+msgstr "Μέρα του μήνα"
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: field:calendar.event,location:0
+#: field:calendar.event.edit.all,location:0
+#: field:calendar.todo,location:0
+msgid "Location"
+msgstr "Τοποθεσία"
+
+#. module: base_calendar
+#: field:base_calendar.invite.attendee,send_mail:0
+msgid "Send mail?"
+msgstr "Αποστολή mail;"
+
+#. module: base_calendar
+#: field:base_calendar.invite.attendee,email:0
+#: selection:calendar.alarm,action:0
+#: field:calendar.attendee,email:0
+msgid "Email"
+msgstr "Email"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Event Detail"
+msgstr "Λεπτομέρειες γεγονότος"
+
+#. module: base_calendar
+#: selection:calendar.alarm,state:0
+msgid "Run"
+msgstr "Έναρξη"
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_calendar_alarm
+msgid "Event alarm information"
+msgstr "Πληροφορίες Υπενθύμισης Γεγονότος"
+
+#. module: base_calendar
+#: selection:calendar.event,class:0
+#: selection:calendar.todo,class:0
+msgid "Confidential"
+msgstr "Εμπιστευτικό"
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,end_date:0
+#: field:calendar.event,end_date:0
+#: field:calendar.todo,end_date:0
+msgid "Repeat Until"
+msgstr "Επανάληψη μέχρι"
+
+#. module: base_calendar
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+msgid "Seconds"
+msgstr "Δευτερόλεπτα"
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Visibility"
+msgstr "Ορατότητα"
+
+#. module: base_calendar
+#: field:calendar.attendee,rsvp:0
+msgid "Required Reply?"
+msgstr "Απαιτούμενη Απάντηση;"
+
+#. module: base_calendar
+#: field:calendar.event,base_calendar_url:0
+#: field:calendar.todo,base_calendar_url:0
+msgid "Caldav URL"
+msgstr "Caldav URL"
+
+#. module: base_calendar
+#: field:calendar.event,recurrent_uid:0
+#: field:calendar.todo,recurrent_uid:0
+msgid "Recurrent ID"
+msgstr "Περιοδικό ID"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "July"
+msgstr "Ιουλίος"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: selection:calendar.attendee,state:0
+msgid "Accepted"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,th:0
+#: field:calendar.event,th:0
+#: field:calendar.todo,th:0
+msgid "Thu"
+msgstr "Πεμπ"
+
+#. module: base_calendar
+#: field:calendar.attendee,child_ids:0
+msgid "Delegrated To"
+msgstr "Εξουσιοδότηση σε"
+
+#. module: base_calendar
+#: constraint:ir.cron:0
+msgid "Invalid arguments"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Required Reply"
+msgstr "Απαιτούμενη Απάντηση"
+
+#. module: base_calendar
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Μη έγκυρο XML για προβολή Αρχιτεκτονικής"
+
+#. module: base_calendar
+#: selection:calendar.attendee,role:0
+msgid "Participation required"
+msgstr "Απαιτούμενη Συμμετοχή"
+
+#. module: base_calendar
+#: field:calendar.event,create_date:0
+#: field:calendar.todo,create_date:0
+msgid "Created"
+msgstr "Δημιουργήθηκε"
+
+#. module: base_calendar
+#: model:ir.actions.act_window,name:base_calendar.action_base_calendar_set_exrule
+msgid "Set Exclude range"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.event,class:0
+#: selection:calendar.todo,class:0
+msgid "Private"
+msgstr "Προσωπικό"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+#: selection:calendar.event,rrule_type:0
+#: selection:calendar.todo,rrule_type:0
+msgid "Daily"
+msgstr "Ημερήσια"
+
+#. module: base_calendar
+#: code:addons/base_calendar/base_calendar.py:0
+#, python-format
+msgid "Can not Duplicate"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,class:0
+#: field:calendar.todo,class:0
+msgid "Mark as"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: field:calendar.attendee,partner_address_id:0
+msgid "Contact"
+msgstr "Επαφή"
+
+#. module: base_calendar
+#: help:calendar.event,rrule_type:0
+#: help:calendar.todo,rrule_type:0
+msgid "Let the event automatically repeat at that interval"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Delegate"
+msgstr ""
+
+#. module: base_calendar
+#: field:base_calendar.invite.attendee,partner_id:0
+#: view:calendar.attendee:0
+#: field:calendar.attendee,partner_id:0
+msgid "Partner"
+msgstr "Συνεργάτης"
+
+#. module: base_calendar
+#: view:base_calendar.invite.attendee:0
+#: selection:base_calendar.invite.attendee,type:0
+msgid "Partner Contacts"
+msgstr ""
+
+#. module: base_calendar
+#: view:base.calendar.set.exrule:0
+msgid "_Ok"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,byday:0
+#: selection:calendar.event,byday:0
+#: selection:calendar.todo,byday:0
+msgid "First"
+msgstr "Πρώτο"
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Privacy"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Subject"
+msgstr "Θέμα"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "September"
+msgstr "Σεπτέμβριος"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "December"
+msgstr "Δεκέμβριος"
+
+#. module: base_calendar
+#: help:base_calendar.invite.attendee,send_mail:0
+msgid "Check this if you want to send an Email to Invited Person"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Availability"
+msgstr "Διαθεσιμότητα"
+
+#. module: base_calendar
+#: view:calendar.event.edit.all:0
+msgid "_Save"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,cutype:0
+msgid "Individual"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,user_id:0
+msgid "Owner"
+msgstr "Ιδιοκτήτης"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Delegation Info"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: field:calendar.event.edit.all,date:0
+msgid "Start Date"
+msgstr "Ημερομηνία Έναρξης"
+
+#. module: base_calendar
+#: field:calendar.attendee,cn:0
+msgid "Common name"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: selection:calendar.attendee,state:0
+msgid "Declined"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "My Role"
+msgstr "Ο ρόλος μου"
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "My Events"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Decline"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+msgid "Weeks"
+msgstr "Εβδομάδες"
+
+#. module: base_calendar
+#: selection:calendar.attendee,cutype:0
+msgid "Group"
+msgstr "Ομάδα"
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Edit All"
+msgstr "Επεξεργασία όλων"
+
+#. module: base_calendar
+#: field:base_calendar.invite.attendee,contact_ids:0
+msgid "Contacts"
+msgstr "Επαφές"
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_res_alarm
+msgid "Basic Alarm Information"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,fr:0
+#: field:calendar.event,fr:0
+#: field:calendar.todo,fr:0
+msgid "Fri"
+msgstr "Παρ"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Invitation Detail"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,member:0
+msgid "Member"
+msgstr "Μέλος"
+
+#. module: base_calendar
+#: help:calendar.event,location:0
+#: help:calendar.todo,location:0
+msgid "Location of Event"
+msgstr "Τοποθεσία Γεγονότος"
+
+#. module: base_calendar
+#: field:calendar.event,rrule:0
+#: field:calendar.todo,rrule:0
+msgid "Recurrent Rule"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,attach:0
+msgid "Attachment"
+msgstr ""
+
+#. module: base_calendar
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Invitation From"
+msgstr "Πρόσκληση Από"
+
+#. module: base_calendar
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: field:calendar.event.edit.all,alarm_id:0
+msgid "Reminder"
+msgstr "Υπενθύμιση"
+
+#. module: base_calendar
+#: view:base.calendar.set.exrule:0
+#: model:ir.model,name:base_calendar.model_base_calendar_set_exrule
+msgid "Set Exrule"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: model:ir.actions.act_window,name:base_calendar.action_view_event
+#: model:ir.ui.menu,name:base_calendar.menu_events
+msgid "Events"
+msgstr "Γεγονότα"
+
+#. module: base_calendar
+#: model:ir.actions.act_window,name:base_calendar.action_view_calendar_invite_attendee_wizard
+#: model:ir.model,name:base_calendar.model_base_calendar_invite_attendee
+msgid "Invite Attendees"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,email:0
+msgid "Email of Invited Person"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,repeat:0
+#: field:res.alarm,repeat:0
+msgid "Repeat"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,dir:0
+msgid ""
+"Reference to the URIthat points to the directory information corresponding "
+"to the attendee."
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "August"
+msgstr "Αύγουστος"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Monday"
+msgstr "Δευτέρα"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,byday:0
+#: selection:calendar.event,byday:0
+#: selection:calendar.todo,byday:0
+msgid "Third"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "June"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,alarm_id:0
+msgid "Basic Alarm"
+msgstr ""
+
+#. module: base_calendar
+#: view:base.calendar.set.exrule:0
+#: view:calendar.event:0
+msgid "The"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: field:calendar.attendee,delegated_from:0
+msgid "Delegated From"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,user_id:0
+msgid "User"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,active:0
+#: field:calendar.event,active:0
+#: field:calendar.todo,active:0
+#: field:res.alarm,active:0
+msgid "Active"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "November"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,member:0
+msgid "Indicate the groups that the attendee belongs to"
+msgstr ""
+
+#. module: base_calendar
+#: view:base_calendar.invite.attendee:0
+msgid "Data"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,mo:0
+#: field:calendar.event,mo:0
+#: field:calendar.todo,mo:0
+msgid "Mon"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,count:0
+#: field:calendar.event,count:0
+#: field:calendar.todo,count:0
+msgid "Count"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "October"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Uncertain"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,language:0
+msgid "Language"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,trigger_occurs:0
+#: field:res.alarm,trigger_occurs:0
+msgid "Triggers"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "January"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,trigger_related:0
+#: field:res.alarm,trigger_related:0
+msgid "Related to"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,interval:0
+#: field:calendar.alarm,trigger_interval:0
+#: field:calendar.event,interval:0
+#: field:calendar.todo,interval:0
+#: field:res.alarm,trigger_interval:0
+msgid "Interval"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Wednesday"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,name:0
+#: view:calendar.event:0
+msgid "Summary"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: field:calendar.event,date:0
+msgid "Date"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Invitation"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,action:0
+msgid "Action"
+msgstr ""
+
+#. module: base_calendar
+#: help:base_calendar.invite.attendee,type:0
+msgid "Select whom you want to Invite"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.alarm,duration:0
+#: help:res.alarm,duration:0
+msgid ""
+"Duration' and 'Repeat' are both optional, but if one occurs, so MUST the "
+"other"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_calendar_event_edit_all
+msgid "Calendar Edit all event"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,role:0
+msgid "Participation role for the calendar user"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,ref:0
+msgid "Event Ref"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.alarm,action:0
+msgid "Defines the action to be invoked when an alarm is triggered"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Search Events"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+#: selection:calendar.event,rrule_type:0
+#: selection:calendar.todo,rrule_type:0
+msgid "Weekly"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.alarm,active:0
+#: help:calendar.event,active:0
+#: help:calendar.todo,active:0
+#: help:res.alarm,active:0
+msgid ""
+"If the active field is set to true, it will allow you to hide the event "
+"alarm information without removing it."
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,recurrent_id:0
+#: field:calendar.todo,recurrent_id:0
+msgid "Recurrent ID date"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,state:0
+#: view:calendar.attendee:0
+#: field:calendar.attendee,state:0
+#: view:calendar.event:0
+#: field:calendar.event,state:0
+#: field:calendar.todo,state:0
+msgid "State"
+msgstr ""
+
+#. module: base_calendar
+#: view:res.alarm:0
+msgid "Reminder Details"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "To Review"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,freq:0
+#: field:calendar.event,freq:0
+#: field:calendar.todo,freq:0
+msgid "Frequency"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,state:0
+msgid "Done"
+msgstr ""
+
+#. module: base_calendar
+#: view:base_calendar.invite.attendee:0
+#: field:base_calendar.invite.attendee,user_ids:0
+msgid "Users"
+msgstr ""
+
+#. module: base_calendar
+#: view:base.calendar.set.exrule:0
+#: view:calendar.event:0
+msgid "of"
+msgstr ""
+
+#. module: base_calendar
+#: view:base_calendar.invite.attendee:0
+#: view:calendar.event:0
+#: view:calendar.event.edit.all:0
+msgid "Cancel"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_res_users
+msgid "res.users"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Tuesday"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,action:0
+msgid "Procedure"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.alarm,description:0
+msgid ""
+"Provides a more complete description of the "
+"calendar component, than that provided by the "
+"\"SUMMARY\" property"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Responsible User"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,availability:0
+#: selection:calendar.event,show_as:0
+#: selection:calendar.todo,show_as:0
+#: selection:res.users,availability:0
+msgid "Busy"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_calendar_event
+msgid "Calendar Event"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,state:0
+#: selection:calendar.event,state:0
+#: selection:calendar.todo,state:0
+msgid "Tentative"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+#: field:calendar.event,user_id:0
+#: field:calendar.todo,user_id:0
+msgid "Responsible"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: field:calendar.event,rrule_type:0
+#: field:calendar.todo,rrule_type:0
+msgid "Recurrency"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.actions.act_window,name:base_calendar.action_view_attendee_form
+#: model:ir.ui.menu,name:base_calendar.menu_attendee_invitations
+msgid "Event Invitations"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Thursday"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.event,rrule_type:0
+#: selection:calendar.todo,rrule_type:0
+msgid "Custom"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,exrule:0
+#: field:calendar.todo,exrule:0
+msgid "Exception Rule"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,language:0
+msgid ""
+"To specify the language for text values in aproperty or property parameter."
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Details"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.event,exrule:0
+#: help:calendar.todo,exrule:0
+msgid ""
+"Defines a rule or repeating pattern of time to exclude from the recurring "
+"rule."
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,month_list:0
+#: field:calendar.event,month_list:0
+#: field:calendar.todo,month_list:0
+msgid "Month"
+msgstr ""
+
+#. module: base_calendar
+#: view:base_calendar.invite.attendee:0
+#: view:calendar.event:0
+msgid "Invite People"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.event,rrule:0
+#: help:calendar.todo,rrule:0
+msgid ""
+"Defines a rule or repeating pattern for recurring events\n"
+"e.g.: Every other month on the last Sunday of the month for 10 occurrences: "
+" FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=-1SU"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,dir:0
+msgid "URI Reference"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,description:0
+#: view:calendar.event:0
+#: field:calendar.event,description:0
+#: field:calendar.event,name:0
+#: field:calendar.todo,description:0
+#: field:calendar.todo,name:0
+msgid "Description"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "May"
+msgstr ""
+
+#. module: base_calendar
+#: field:base_calendar.invite.attendee,type:0
+#: view:calendar.attendee:0
+msgid "Type"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Search Invitations"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_occurs:0
+#: selection:res.alarm,trigger_occurs:0
+msgid "After"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,state:0
+msgid "Stop"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_ir_values
+msgid "ir.values"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_ir_model
+msgid "Objects"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: selection:calendar.attendee,state:0
+msgid "Delegated"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,sa:0
+#: field:calendar.event,sa:0
+#: field:calendar.todo,sa:0
+msgid "Sat"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.module.module,description:base_calendar.module_meta_information
+msgid ""
+"Full featured calendar system that supports:\n"
+" - Calendar of events\n"
+" - Alerts (create requests)\n"
+" - Recurring events\n"
+" - Invitations to people"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+msgid "Minutely"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,sent_by:0
+msgid "Specify the user that is acting on behalf of the calendar user"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: field:calendar.event.edit.all,date_deadline:0
+msgid "End Date"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "February"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+msgid "Months"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,cutype:0
+msgid "Resource"
+msgstr ""
+
+#. module: base_calendar
+#: field:res.alarm,name:0
+msgid "Name"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,exdate:0
+#: field:calendar.todo,exdate:0
+msgid "Exception Date/Times"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.alarm,name:0
+msgid ""
+"Contains the text to be used as the message subject for "
+"email or contains the text to be used for display"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,alarm_id:0
+#: field:calendar.event,base_calendar_alarm_id:0
+#: field:calendar.todo,alarm_id:0
+#: field:calendar.todo,base_calendar_alarm_id:0
+msgid "Alarm"
+msgstr ""
+
+#. module: base_calendar
+#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:0
+#, python-format
+msgid "Please Apply Recurrency before applying Exception Rule."
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,sent_by_uid:0
+msgid "Sent By User"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "April"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,week_list:0
+#: field:calendar.event,week_list:0
+#: field:calendar.todo,week_list:0
+msgid "Weekday"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,byday:0
+#: field:calendar.event,byday:0
+#: field:calendar.todo,byday:0
+msgid "By day"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,model_id:0
+msgid "Model"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,action:0
+msgid "Audio"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,id:0
+#: field:calendar.todo,id:0
+msgid "ID"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,role:0
+msgid "For information Purpose"
+msgstr ""
+
+#. module: base_calendar
+#: view:base_calendar.invite.attendee:0
+msgid "Invite"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_calendar_attendee
+msgid "Attendee information"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,res_id:0
+msgid "Resource ID"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,state:0
+msgid "Needs Action"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,sent_by:0
+msgid "Sent By"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,sequence:0
+#: field:calendar.todo,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.event,alarm_id:0
+#: help:calendar.todo,alarm_id:0
+msgid "Set an alarm at this time, before the event occurs"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base_calendar.invite.attendee,type:0
+msgid "Internal User"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Accept"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Invitation To"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,byday:0
+#: selection:calendar.event,byday:0
+#: selection:calendar.todo,byday:0
+msgid "Second"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,availability:0
+#: field:res.users,availability:0
+msgid "Free/Busy"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,duration:0
+#: field:calendar.alarm,trigger_duration:0
+#: field:calendar.event,duration:0
+#: field:calendar.todo,date:0
+#: field:calendar.todo,duration:0
+#: field:res.alarm,duration:0
+#: field:res.alarm,trigger_duration:0
+msgid "Duration"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base_calendar.invite.attendee,type:0
+msgid "External Email"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,trigger_date:0
+msgid "Trigger Date"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Saturday"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,byday:0
+#: selection:calendar.event,byday:0
+#: selection:calendar.todo,byday:0
+msgid "Fifth"
+msgstr ""
diff --git a/addons/base_module_quality/i18n/nl.po b/addons/base_module_quality/i18n/nl.po
index cf9f807ba58..fcdaf4f40b2 100644
--- a/addons/base_module_quality/i18n/nl.po
+++ b/addons/base_module_quality/i18n/nl.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 10:56+0000\n"
-"Last-Translator: Douwe Wullink (Dypalio) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 09:24+0000\n"
+"Last-Translator: OpenERP Administrators <Unknown>\n"
"Language-Team: Dutch <nl@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: 2010-11-11 04:46+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_module_quality
diff --git a/addons/base_module_record/i18n/el.po b/addons/base_module_record/i18n/el.po
index a39078989d1..54c820c4a0e 100644
--- a/addons/base_module_record/i18n/el.po
+++ b/addons/base_module_record/i18n/el.po
@@ -6,13 +6,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2009-06-15 07:18+0000\n"
-"Last-Translator: Panagiotis Kranidiotis <kranidiotis@vatica.org>\n"
+"PO-Revision-Date: 2010-11-11 14:31+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
"Language-Team: nls@hellug.gr <nls@hellug.gr>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-30 05:20+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
"X-Poedit-Country: GREECE\n"
"X-Poedit-Language: Greek\n"
@@ -35,12 +35,16 @@ msgid ""
"publish it on OpenERP.com, in the 'Modules' section. You can do it through "
"the website or using features of the 'base_module_publish' module."
msgstr ""
+"Εάν νομίζεις ότι το πρόσθετο θα ενδιαφέρει και άλλους, θα θέλαμε να το "
+"δημοσιεύσουμε στο OpenERP.com, στο τμήμα 'Πρόσθετα'. Μπορείς να το κάνεις "
+"είται μέσω της ιστοσελίδας ή χρησιμοποιόντας το 'base_module_publish' "
+"πρόσθετο"
#. module: base_module_record
#: wizard_button:base_module_record.module_record_data,info,end:0
#: wizard_button:base_module_record.module_record_data,save_yaml,end:0
msgid "End"
-msgstr ""
+msgstr "Τέλος"
#. module: base_module_record
#: wizard_view:base_module_record.module_record_data,init:0
@@ -172,7 +176,7 @@ msgstr ""
#: wizard_view:base_module_record.module_record_data,info:0
#: wizard_view:base_module_record.module_record_data,save_yaml:0
msgid "Result, paste this to your module's xml"
-msgstr ""
+msgstr "Αποτέλεσμα, επικόλλησε αυτό στο xml του προσθέτου"
#. module: base_module_record
#: selection:base_module_record.module_record_data,init,filter_cond:0
@@ -206,7 +210,7 @@ msgstr "Εγγραφή"
#. module: base_module_record
#: model:ir.module.module,shortdesc:base_module_record.module_meta_information
msgid "Module Record"
-msgstr ""
+msgstr "Εγγραφή Προσθέτου"
#. module: base_module_record
#: wizard_button:base_module_record.module_record_objects,info,save:0
@@ -217,13 +221,13 @@ msgstr "Συνέχεια"
#: model:ir.actions.wizard,name:base_module_record.wizard_base_module_record_data
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_module_record_data
msgid "Export Customizations As Data File"
-msgstr ""
+msgstr "Εξαγωγή Παραμετροποίησης ως αρχείο"
#. module: base_module_record
#: code:addons/base_module_record/wizard/base_module_save.py:0
#, python-format
msgid "Error"
-msgstr ""
+msgstr "Λάθος"
#. module: base_module_record
#: selection:base_module_record.module_record_objects,info,data_kind:0
@@ -261,7 +265,7 @@ msgstr ""
#: wizard_field:base_module_record.module_record_data,info,res_text:0
#: wizard_field:base_module_record.module_record_data,save_yaml,res_text:0
msgid "Result"
-msgstr ""
+msgstr "Αποτέλεσμα"
#. module: base_module_record
#: wizard_button:base_module_record.module_record_data,init,end:0
diff --git a/addons/base_module_record/i18n/nl.po b/addons/base_module_record/i18n/nl.po
index c931ca2745f..f7fa4218b9d 100644
--- a/addons/base_module_record/i18n/nl.po
+++ b/addons/base_module_record/i18n/nl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 11:05+0000\n"
-"Last-Translator: Douwe Wullink (Dypalio) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 08:34+0000\n"
+"Last-Translator: OpenERP Administrators <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: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_module_record
diff --git a/addons/base_report_creator/i18n/it.po b/addons/base_report_creator/i18n/it.po
index 388194cbf89..3d838502ec8 100644
--- a/addons/base_report_creator/i18n/it.po
+++ b/addons/base_report_creator/i18n/it.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-03 07:45+0000\n"
-"Last-Translator: OpenERP Administrators <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 12:20+0000\n"
+"Last-Translator: Nicola Riolini - Micronaet <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: 2010-11-04 04:51+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_report_creator
@@ -298,7 +298,7 @@ msgstr "Configurazione generale"
#. module: base_report_creator
#: help:base_report_creator.report.fields,sequence:0
msgid "Gives the sequence order when displaying a list of fields."
-msgstr ""
+msgstr "Fornisce l'ordinamento quando viene visualizzata la lista dei campi"
#. module: base_report_creator
#: wizard_view:base_report_creator.report_filter.fields,init:0
@@ -332,6 +332,8 @@ msgid ""
"If the active field is set to true, it will allow you to hide the report "
"without removing it."
msgstr ""
+"Se il campo attivo è impostato a Vero, permetterà di nascondere il report "
+"senza rimuoverlo."
#. module: base_report_creator
#: selection:base_report_creator.report.fields,group_method:0
@@ -432,7 +434,7 @@ msgstr "Terza Vista"
#. module: base_report_creator
#: selection:base_report_creator.report.fields,calendar_mode:0
msgid "End Date"
-msgstr ""
+msgstr "Data fine"
#. module: base_report_creator
#: field:base_report_creator.report,name:0
@@ -452,7 +454,7 @@ msgstr "Media"
#. module: base_report_creator
#: view:base_report_creator.report:0
msgid "Use %(uid)s to filter by the connected user"
-msgstr ""
+msgstr "Usa %(uid)s per filtrare in funzione dell'utente connesso"
#. module: base_report_creator
#: selection:base_report_creator.report.fields,group_method:0
@@ -521,6 +523,13 @@ msgid ""
"After installing the module, it adds a menu to define custom report in\n"
"the \"Dashboard\" menu.\n"
msgstr ""
+"Questo modulo permette di creare qualsiasi report statistico\n"
+"con diversi oggetti. E' un costruttore di Query SQL e un Browser per \n"
+"utenti finali.\n"
+"\n"
+"Dopo l'installazione del modulo, sarà aggiunto un menù per definire i report "
+"personalizzati\n"
+"sotto il menù Dashboard.\n"
#~ msgid "State"
#~ msgstr "Stato"
diff --git a/addons/base_report_creator/i18n/nl.po b/addons/base_report_creator/i18n/nl.po
index b80dacfb32b..19577a9e6f7 100644
--- a/addons/base_report_creator/i18n/nl.po
+++ b/addons/base_report_creator/i18n/nl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 11:11+0000\n"
-"Last-Translator: Douwe Wullink (Dypalio) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 09:28+0000\n"
+"Last-Translator: OpenERP Administrators <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: 2010-11-11 04:46+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_report_creator
diff --git a/addons/base_report_creator/i18n/ru.po b/addons/base_report_creator/i18n/ru.po
index 14d6864438a..9a9dc0d331d 100644
--- a/addons/base_report_creator/i18n/ru.po
+++ b/addons/base_report_creator/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-10-30 14:34+0000\n"
-"Last-Translator: OpenERP Administrators <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 20:54+0000\n"
+"Last-Translator: Evgeniy Devyatkin <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: 2010-10-31 05:04+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_report_creator
@@ -63,7 +63,7 @@ msgstr ""
#. module: base_report_creator
#: view:base_report_creator.report:0
msgid "Legend"
-msgstr ""
+msgstr "Легенда"
#. module: base_report_creator
#: view:base_report_creator.report:0
@@ -390,7 +390,7 @@ msgstr ""
#. module: base_report_creator
#: field:base_report_creator.report,menu_id:0
msgid "Menu"
-msgstr ""
+msgstr "Меню"
#. module: base_report_creator
#: field:base_report_creator.report,view_type1:0
@@ -430,7 +430,7 @@ msgstr "Третий вид"
#. module: base_report_creator
#: selection:base_report_creator.report.fields,calendar_mode:0
msgid "End Date"
-msgstr ""
+msgstr "Дата окочания"
#. module: base_report_creator
#: field:base_report_creator.report,name:0
diff --git a/addons/base_report_designer/i18n/it.po b/addons/base_report_designer/i18n/it.po
index 7599e5c0f71..25726de7f30 100644
--- a/addons/base_report_designer/i18n/it.po
+++ b/addons/base_report_designer/i18n/it.po
@@ -7,30 +7,32 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-08-17 10:11+0000\n"
-"Last-Translator: OpenERP Administrators <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 11:52+0000\n"
+"Last-Translator: Nicola Riolini - Micronaet <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: 2010-10-30 05:35+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_report_designer
#: model:ir.model,name:base_report_designer.model_base_report_sxw
msgid "base.report.sxw"
-msgstr ""
+msgstr "base.report.sxw"
#. module: base_report_designer
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
+"Il nome dell'oggetto deve iniziare per \"x_\" e non contenere alcun "
+"carattere speciale!"
#. module: base_report_designer
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Nome del modello non valido nella definizione dell'azione"
#. module: base_report_designer
#: model:ir.module.module,shortdesc:base_report_designer.module_meta_information
@@ -40,7 +42,7 @@ msgstr "Modulo interfaccia di \"Report Designer\""
#. module: base_report_designer
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
-msgstr ""
+msgstr "XML non valido per la struttura della vista!"
#. module: base_report_designer
#: view:base.report.file.sxw:0
@@ -50,12 +52,12 @@ msgstr "Report .SXW"
#. module: base_report_designer
#: constraint:ir.ui.menu:0
msgid "Error ! You can not create recursive Menu."
-msgstr ""
+msgstr "Errore! Non è possibile creare un menù ricorsivo"
#. module: base_report_designer
#: model:ir.model,name:base_report_designer.model_base_report_designer_installer
msgid "base_report_designer.installer"
-msgstr ""
+msgstr "base_report_designer.installer"
#. module: base_report_designer
#: field:base_report_designer.installer,description:0
@@ -80,7 +82,7 @@ msgstr ""
#. module: base_report_designer
#: view:base_report_designer.installer:0
msgid "title"
-msgstr ""
+msgstr "titolo"
#. module: base_report_designer
#: field:base.report.file.sxw,report_id:0
@@ -91,7 +93,7 @@ msgstr "Report"
#. module: base_report_designer
#: model:ir.model,name:base_report_designer.model_base_report_rml_save
msgid "base.report.rml.save"
-msgstr ""
+msgstr "base.report.rml.save"
#. module: base_report_designer
#: model:ir.ui.menu,name:base_report_designer.menu_action_report_designer_wizard
@@ -106,11 +108,16 @@ msgid ""
"Don't forget to install the OpenERP SA OpenOffice package to modify it.\n"
"Once it is modified, re-upload it in OpenERP using this wizard."
msgstr ""
+"Questo è il modello del vostro Report richiesto\n"
+"Salvatelo come un file: .SXW e apritelo con OpenOffice.\n"
+"Non dimenticate di installare il pacchetto OpenERP SA OpenOffice per "
+"modificarlo.\n"
+"Una volta modificato, ricaricatelo in OpenERP utilizzando il wizard."
#. module: base_report_designer
#: field:base_report_designer.installer,name:0
msgid "File name"
-msgstr ""
+msgstr "Nome file"
#. module: base_report_designer
#: view:base.report.file.sxw:0
@@ -126,7 +133,7 @@ msgstr "Pubblica il tuo Report modificato"
#. module: base_report_designer
#: model:ir.actions.act_window,name:base_report_designer.action_report_designer_wizard
msgid "OpenERP Report Designer"
-msgstr ""
+msgstr "Report Designer di OpenERP"
#. module: base_report_designer
#: view:base.report.sxw:0
@@ -136,7 +143,7 @@ msgstr "Continua"
#. module: base_report_designer
#: field:base.report.rml.save,file_rml:0
msgid "Save As"
-msgstr ""
+msgstr "Salva come"
#. module: base_report_designer
#: help:base_report_designer.installer,plugin_file:0
@@ -144,11 +151,13 @@ msgid ""
"OpenObject Report Designer plug-in file. Save as this file and install this "
"plug-in in OpenOffice."
msgstr ""
+"Plug-in di OpenObject Report Designer. Salvare con nome questo file ed "
+"installarlo come plug-in in OpenOffice"
#. module: base_report_designer
#: view:base.report.rml.save:0
msgid "Save RML FIle"
-msgstr ""
+msgstr "Salva il file RML"
#. module: base_report_designer
#: field:base.report.file.sxw,file_sxw:0
@@ -159,7 +168,7 @@ msgstr "Il tuo file .SXW"
#. module: base_report_designer
#: view:base_report_designer.installer:0
msgid "Installation and Configuration Steps"
-msgstr ""
+msgstr "Passi per l'installazione e configurazione"
#. module: base_report_designer
#: field:base_report_designer.installer,progress:0
@@ -169,7 +178,7 @@ msgstr ""
#. module: base_report_designer
#: view:base_report_designer.installer:0
msgid "Skip"
-msgstr ""
+msgstr "Salta"
#. module: base_report_designer
#: field:base_report_designer.installer,config_logo:0
@@ -184,17 +193,17 @@ msgstr ""
#. module: base_report_designer
#: model:ir.model,name:base_report_designer.model_base_report_file_sxw
msgid "base.report.file.sxw"
-msgstr ""
+msgstr "base.report.file.sxw"
#. module: base_report_designer
#: field:base_report_designer.installer,plugin_file:0
msgid "OpenObject Report Designer Plug-in"
-msgstr ""
+msgstr "Plug in di OpenObject Report Designer"
#. module: base_report_designer
#: model:ir.actions.act_window,name:base_report_designer.action_report_designer_installer
msgid "OpenERP Report Designer Installation"
-msgstr ""
+msgstr "Installazione di OpenObject Report Designer"
#. module: base_report_designer
#: view:base.report.file.sxw:0
@@ -206,7 +215,7 @@ msgstr "Annulla"
#. module: base_report_designer
#: model:ir.model,name:base_report_designer.model_ir_actions_report_xml
msgid "ir.actions.report.xml"
-msgstr ""
+msgstr "ir.actions.report.xml"
#. module: base_report_designer
#: view:base.report.sxw:0
diff --git a/addons/base_report_designer/i18n/nl.po b/addons/base_report_designer/i18n/nl.po
index 33a289c64ce..417a2d7e557 100644
--- a/addons/base_report_designer/i18n/nl.po
+++ b/addons/base_report_designer/i18n/nl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 11:20+0000\n"
-"Last-Translator: Douwe Wullink (Dypalio) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 09:22+0000\n"
+"Last-Translator: OpenERP Administrators <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: 2010-11-11 04:46+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_report_designer
diff --git a/addons/base_setup/i18n/el.po b/addons/base_setup/i18n/el.po
index 64e2368d9ae..a076998ac29 100644
--- a/addons/base_setup/i18n/el.po
+++ b/addons/base_setup/i18n/el.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 08:56+0000\n"
+"PO-Revision-Date: 2010-11-11 14:07+0000\n"
"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
"Language-Team: Greek <el@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: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_setup
@@ -92,7 +92,7 @@ msgstr "Εντατική Λιανική"
#. module: base_setup
#: field:base.setup.installer,association:0
msgid "Associations"
-msgstr ""
+msgstr "Αντιστοιχήσεις"
#. module: base_setup
#: help:base.setup.installer,account_accountant:0
@@ -109,6 +109,8 @@ msgid ""
"You can start configuring the system or connect directly to the database as "
"an administrator."
msgstr ""
+"Μπορείς να ξεκινήσεις την παραμετροποίηση του συστήματος ή να συνδεθείς "
+"απευθείας στην βάση ως διαχειριστής"
#. module: base_setup
#: field:base.setup.company,progress:0
@@ -215,6 +217,8 @@ msgid ""
"Helps you manage your human resources by encoding your employees structure, "
"generating work sheets, tracking attendance and more."
msgstr ""
+"Σε βοηθά να διαχειριστείς τους ανθρώπινους πόρους καταγράφοντας τη δομή των "
+"υπαλήλων,δημιουργώντας φύλλα εργασιών, καταγραφή παρουσίας"
#. module: base_setup
#: help:base.setup.installer,account_voucher:0
@@ -222,6 +226,9 @@ msgid ""
"Allows you to create your invoices and track the payments. It is an easier "
"version of the accounting module for managers who are not accountants."
msgstr ""
+"Επιτρέπει να δημιουργήσεις τιμολόγια και να παρακολουθήσεις τις πληρωμές. "
+"Είναι μια πρώιμη έκδοση του πρόσθετου της Λογιστικής για διαχειριστές που "
+"δεν είναι λογιστές."
#. module: base_setup
#: constraint:ir.ui.view:0
@@ -317,6 +324,8 @@ msgstr "Διαχείρηση Αγορών"
#: help:base.setup.installer,sale:0
msgid "Helps you handle your quotations, sale orders and invoicing."
msgstr ""
+"Σε βοηθά να διαχειριστείς τις προσφορε΄ς, παραγγελίες πωλήσεων και την "
+"τιμολόγηση"
#. module: base_setup
#: field:base.setup.installer,stock:0
@@ -421,7 +430,7 @@ msgstr "Ιστοσελίδα Εταιρίας"
#. module: base_setup
#: view:base.setup.installer:0
msgid "Install Specific Industry Applications"
-msgstr ""
+msgstr "Εγκαθιστά Συγκεκριμένες Επιχειρησιακές Εφαρμογές"
#. module: base_setup
#: field:base.setup.company,street:0
@@ -450,6 +459,9 @@ msgid ""
"or issues. Can automatically send reminders, escalate requests or trigger "
"business-specific actions based on standard events."
msgstr ""
+"Σε βοηθά να καταγράψεις και και να διαχειριστείς τις σχέσεις με τους "
+"υποψήφιους πελάτες, αιτήσεις και θέματα. Μπορεί να στείλει υπενθυμίσεις "
+"αυτόματα, να κλημακώσει απαιτήσεις ή να ενεργήσει βάσει κάποιον γεγονότων."
#. module: base_setup
#: help:base.setup.installer,stock:0
diff --git a/addons/base_setup/i18n/nl.po b/addons/base_setup/i18n/nl.po
index e678dd797ae..480cd3c5753 100644
--- a/addons/base_setup/i18n/nl.po
+++ b/addons/base_setup/i18n/nl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 14:38+0000\n"
-"Last-Translator: Douwe Wullink (Dypalio) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 08:13+0000\n"
+"Last-Translator: OpenERP Administrators <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: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_setup
diff --git a/addons/board/i18n/el.po b/addons/board/i18n/el.po
index e5c1978c272..9316273d158 100644
--- a/addons/board/i18n/el.po
+++ b/addons/board/i18n/el.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-08-03 03:20+0000\n"
-"Last-Translator: mga (Open ERP) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 14:35+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
"Language-Team: nls@hellug.gr <nls@hellug.gr>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-30 05:40+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
"X-Poedit-Country: GREECE\n"
"X-Poedit-Language: Greek\n"
@@ -22,7 +22,7 @@ msgstr ""
#. module: board
#: model:ir.model,name:board.model_board_menu_create
msgid "Menu Create"
-msgstr ""
+msgstr "Δημιουργία Μενού"
#. module: board
#: constraint:ir.actions.act_window:0
@@ -44,7 +44,7 @@ msgstr "Κύριo άρθρωμα Πίνακα Αναφορών"
#: code:addons/board/wizard/board_menu_create.py:0
#, python-format
msgid "User Error!"
-msgstr ""
+msgstr "Λάθος Χρήστη!"
#. module: board
#: view:board.board:0
@@ -63,7 +63,7 @@ msgstr "Σημείωση"
#. module: board
#: view:board.note:0
msgid "Group By..."
-msgstr ""
+msgstr "Ομαδοποίηση Κατά..."
#. module: board
#: model:ir.model,name:board.model_board_board
@@ -115,7 +115,7 @@ msgstr "Πληροφορίες Μενού"
#: model:ir.actions.act_window,name:board.action_user_connection_tree
#: view:res.users:0
msgid "Latest Connections"
-msgstr ""
+msgstr "Τελευταίες Συνδέσεις"
#. module: board
#: field:board.note,type:0
@@ -210,7 +210,7 @@ msgstr "Όνομα Μενού"
#: view:board.board:0
#: model:ir.actions.act_window,name:board.action_latest_activities_tree
msgid "Latest Activities"
-msgstr ""
+msgstr "Τελευταίες Δραστηριότητες"
#. module: board
#: selection:board.board.line,position:0
diff --git a/addons/caldav/caldav_node.py b/addons/caldav/caldav_node.py
index b735d853025..70671507b01 100644
--- a/addons/caldav/caldav_node.py
+++ b/addons/caldav/caldav_node.py
@@ -19,17 +19,15 @@
#
##############################################################################
-import time
from document_webdav import nodes
-from document.nodes import _str2time
+from document.nodes import _str2time, nodefd_static
import logging
-import StringIO
from orm_utils import get_last_modified
try:
- from tools.dict_tools import dict_merge, dict_merge2
+ from tools.dict_tools import dict_merge2
except ImportError:
- from document.dict_tools import dict_merge, dict_merge2
+ from document.dict_tools import dict_merge2
# TODO: implement DAV-aware errors, inherit from IOError
@@ -381,6 +379,9 @@ class node_calendar(nodes.node_class):
res.append(child._get_caldav_calendar_data(cr))
return res
+ def open_data(self, cr, mode):
+ return nodefd_static(self, cr, mode)
+
def _get_caldav_calendar_description(self, cr):
uid = self.context.uid
calendar_obj = self.context._dirobj.pool.get('basic.calendar')
@@ -389,7 +390,7 @@ class node_calendar(nodes.node_class):
try:
calendar = calendar_obj.browse(cr, uid, self.calendar_id, context=ctx)
return calendar.description or calendar.name
- except Exception, e:
+ except Exception:
return None
def _get_dav_supported_report_set(self, cr):
@@ -458,14 +459,10 @@ class res_node_calendar(nodes.node_class):
self.model = res_model
self.res_id = res_id
- def open(self, cr, mode=False):
- if self.type in ('collection','database'):
- return False
- s = StringIO.StringIO(self.get_data(cr))
- s.name = self
- return s
+ def open_data(self, cr, mode):
+ return nodefd_static(self, cr, mode)
- def get_data(self, cr, fil_obj = None):
+ def get_data(self, cr, fil_obj=None):
uid = self.context.uid
calendar_obj = self.context._dirobj.pool.get('basic.calendar')
context = self.context.context.copy()
diff --git a/addons/caldav/caldav_setup.xml b/addons/caldav/caldav_setup.xml
index c33edbc75f7..e2e9d7eae5a 100644
--- a/addons/caldav/caldav_setup.xml
+++ b/addons/caldav/caldav_setup.xml
@@ -6,7 +6,7 @@
<field name="domain">[]</field>
<field eval="1" name="resource_find_all"/>
<field eval="0" name="ressource_tree"/>
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
<field name="company_id" ref="base.main_company"/>
<field name="storage_id" ref="document.storage_default"/>
<field name="type">directory</field>
@@ -17,6 +17,7 @@
<field name="domain">[]</field>
<field eval="1" name="resource_find_all"/>
<field eval="0" name="ressource_tree"/>
+ <field name="user_id" eval="False"/>
<field name="company_id" ref="base.main_company"/>
<field model="document.directory" name="parent_id" ref="document_directory_calendars0"/>
<field name="type">directory</field>
@@ -24,10 +25,10 @@
<field name="name">resources</field>
</record>
<record id="document_directory_uids0" model="document.directory">
- <field name="domain">[]</field>
+ <field name="domain">[('id','=',uid)]</field>
<field eval="1" name="resource_find_all"/>
<field eval="0" name="ressource_tree"/>
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
<field name="company_id" ref="base.main_company"/>
<field model="document.directory" name="parent_id" ref="document_directory_calendars0"/>
<field name="type">ressource</field>
@@ -36,9 +37,10 @@
<field name="name">__uids__</field>
</record>
<record id="document_directory_users0" model="document.directory">
- <field name="domain">[]</field>
+ <field name="domain">[('id','=',uid)]</field>
<field eval="1" name="resource_find_all"/>
<field eval="0" name="ressource_tree"/>
+ <field name="user_id" eval="False"/>
<field name="resource_field" ref="base.field_res_users_login"/>
<field name="company_id" ref="base.main_company"/>
<field model="document.directory" name="parent_id" ref="document_directory_calendars0"/>
@@ -56,7 +58,7 @@
<record id="document_directory_c0" model="document.directory">
<field name="domain">[]</field>
<field eval="1" name="resource_find_all"/>
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
<field name="company_id" ref="base.main_company"/>
<field model="document.directory" name="parent_id" ref="document_directory_users0"/>
<field name="storage_id" ref="document.storage_default"/>
diff --git a/addons/caldav/caldav_view.xml b/addons/caldav/caldav_view.xml
index 6bf9f31eb67..1081cb16a09 100644
--- a/addons/caldav/caldav_view.xml
+++ b/addons/caldav/caldav_view.xml
@@ -4,12 +4,16 @@
<record model="ir.ui.view" id="view_calendar_collection_form">
<field name="name">Calendar Collections : Form</field>
<field name="model">document.directory</field>
+ <field name="priority">40</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Calendar Collections">
<field name="name" select="1" colspan="4"/>
<field name="user_id"/>
<field name="parent_id"/>
+ <field name="type"/>
+ <field name="calendar_collection"/>
+ <field name="storage_id"/>
<field name="calendar_ids" colspan="4" nolabel="1"/>
</form>
</field>
@@ -19,12 +23,17 @@
<field name="name">Calendar Collections : Tree</field>
<field name="model">document.directory</field>
<field name="type">tree</field>
+ <field name="priority">40</field>
<field name="arch" type="xml">
<tree string="Calendar Collections" toolbar="1">
<field name="name"/>
+ <field name="parent_id"/>
<field name="user_id"/>
<field name="create_date"/>
<field name="write_date"/>
+ <field name="type"/>
+ <field name="calendar_collection"/>
+ <field name="storage_id"/>
</tree>
</field>
</record>
@@ -125,12 +134,10 @@
<field name="name"/>
<field name="type"/>
<field name="user_id"/>
- <field name="collection_id"/>
- <field name="calendar_color" />
- <field name="calendar_order"/>
- <field name="has_webcal" />
- <field name="create_date"/>
- <field name="write_date"/>
+ <field name="collection_id" required="1"/>
+ <field name="has_webcal" groups="base.group_extended" />
+ <field name="calendar_color" groups="base.group_extended" />
+ <field name="calendar_order" groups="base.group_extended" />
</tree>
</field>
</record>
diff --git a/addons/crm/i18n/el.po b/addons/crm/i18n/el.po
index 6fcbd9f09e7..1775000fd34 100644
--- a/addons/crm/i18n/el.po
+++ b/addons/crm/i18n/el.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 16:54+0000\n"
+"PO-Revision-Date: 2010-11-11 18:19+0000\n"
"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
"Language-Team: nls@hellug.gr <nls@hellug.gr>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-11-11 04:44+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
"X-Poedit-Country: GREECE\n"
"X-Poedit-Language: Greek\n"
@@ -34,7 +34,7 @@ msgstr "Υποψήφιος Πελάτης"
#. module: crm
#: model:crm.case.categ,name:crm.categ_oppor3
msgid "Need Services"
-msgstr ""
+msgstr "Απαίτηση Υπηρεσιών"
#. module: crm
#: selection:crm.meeting,rrule_type:0
@@ -49,7 +49,7 @@ msgstr "Προγραμμάτισε ένα Τηλεφώνημα"
#. module: crm
#: model:ir.model,name:crm.model_crm_case_stage
msgid "Stage of case"
-msgstr ""
+msgstr "στάδιο της υπόθεσης"
#. module: crm
#: view:crm.meeting:0
@@ -92,18 +92,18 @@ msgstr "Επιλογή Εκαιριών"
#: view:crm.phonecall2phonecall:0
#: view:crm.send.mail:0
msgid " "
-msgstr ""
+msgstr " "
#. module: crm
#: view:crm.lead.report:0
#: field:crm.phonecall.report,delay_close:0
msgid "Delay to close"
-msgstr ""
+msgstr "Καθηστέρηση για κλείσιμο"
#. module: crm
#: view:crm.lead:0
msgid "Previous Stage"
-msgstr ""
+msgstr "Προηγούμενο Στάδιο"
#. module: crm
#: code:addons/crm/wizard/crm_add_note.py:0
@@ -142,7 +142,7 @@ msgstr ""
#: code:addons/crm/crm_lead.py:0
#, python-format
msgid "The lead '%s' has been closed."
-msgstr ""
+msgstr "Ο Υποψήφιος Πελάτης '%s' έχει κλείσει"
#. module: crm
#: selection:crm.meeting,freq:0
@@ -267,7 +267,7 @@ msgstr ""
#: code:addons/crm/crm_opportunity.py:0
#, python-format
msgid "The opportunity '%s' has been marked as lost."
-msgstr ""
+msgstr "Αυτή η ευκαιρία '%s' χαρακτηρίστηκε χαμένη"
#. module: crm
#: view:crm.lead:0
@@ -298,7 +298,7 @@ msgstr "Τμήματα"
#. module: crm
#: view:crm.merge.opportunity:0
msgid "_Merge"
-msgstr ""
+msgstr "_Συγχώνευση"
#. module: crm
#: view:crm.lead.report:0
@@ -348,7 +348,7 @@ msgstr ""
#. module: crm
#: model:process.transition,name:crm.process_transition_leadpartner0
msgid "Prospect Partner"
-msgstr ""
+msgstr "Προσδοκούμενος Συνεργάτης"
#. module: crm
#: field:crm.lead,contact_name:0
@@ -372,7 +372,7 @@ msgstr "Επαφή"
#. module: crm
#: field:crm.case.stage,on_change:0
msgid "Change Probability Automatically"
-msgstr ""
+msgstr "Αλλαξε την Πιθανότητα Αυτόματα"
#. module: crm
#: field:base.action.rule,regex_history:0
@@ -383,7 +383,7 @@ msgstr ""
#: code:addons/crm/crm_lead.py:0
#, python-format
msgid "The lead '%s' has been opened."
-msgstr ""
+msgstr "Ο Υποψήφιος '%s' έχει ανοίξει"
#. module: crm
#: model:process.transition,name:crm.process_transition_opportunitymeeting0
@@ -399,12 +399,12 @@ msgstr "Ημέρες για το κλείσιμο της υπόθεσης"
#. module: crm
#: model:process.node,note:crm.process_node_opportunities0
msgid "When a real project/opportunity is detected"
-msgstr ""
+msgstr "Όταν ένα παραγματικό έργο/ευκαιρία εντοπίζεται"
#. module: crm
#: field:crm.installer,crm_fundraising:0
msgid "Fundraising"
-msgstr ""
+msgstr "Συλλογή Κεφαλαίου"
#. module: crm
#: view:res.partner:0
@@ -430,7 +430,7 @@ msgstr "Αλλαγή Υπεύθυνου"
#. module: crm
#: field:crm.merge.opportunity,state:0
msgid "Set State To"
-msgstr ""
+msgstr "Θέσε την Κατάσταση Σε"
#. module: crm
#: model:ir.model,name:crm.model_crm_lead2opportunity_action
@@ -451,7 +451,7 @@ msgstr ""
#: view:crm.lead2opportunity.action:0
#: field:crm.lead2opportunity.action,name:0
msgid "Select Action"
-msgstr ""
+msgstr "Επιλογή Ενέργειας"
#. module: crm
#: field:base.action.rule,trg_categ_id:0
@@ -499,7 +499,7 @@ msgstr "Τόπος Γεγονότος"
#. module: crm
#: field:crm.meeting,rrule:0
msgid "Recurrent Rule"
-msgstr ""
+msgstr "Επαναλαμβανόμενος Κανόνας"
#. module: crm
#: help:crm.installer,fetchmail:0
@@ -514,7 +514,7 @@ msgstr "Κανονική ή συνάντηση μέσω τηλεφώνου γιÎ
#. module: crm
#: model:process.node,note:crm.process_node_leads0
msgid "Very first contact with new prospect"
-msgstr ""
+msgstr "Προταρχική επαφή με νέα προοπτική"
#. module: crm
#: code:addons/crm/crm_lead.py:0
@@ -584,7 +584,7 @@ msgstr ""
#. module: crm
#: field:crm.meeting,count:0
msgid "Count"
-msgstr ""
+msgstr "Υπολόγισε"
#. module: crm
#: selection:crm.lead.report,month:0
@@ -674,7 +674,7 @@ msgstr ""
#: code:addons/crm/crm_meeting.py:0
#, python-format
msgid "The meeting '%s' has been confirmed."
-msgstr ""
+msgstr "Η Συνάντηση '%s' έχει επιβεβαιωθεί"
#. module: crm
#: field:crm.case.section,user_id:0
@@ -693,6 +693,8 @@ msgid ""
"The email address put in the 'Reply-To' of all emails sent by OpenERP about "
"cases in this sales team"
msgstr ""
+"Η διεύθυνση email που τοποθετήθηκε στο ' Απάντησε- Σε' όλα τα email που "
+"στάλθηκαν από το OpenERP σχετικά με υποθέσεις σε αυτή την ομάδα πώλησης"
#. module: crm
#: view:res.users:0
@@ -717,6 +719,8 @@ msgid ""
"If the active field is set to true, it will allow you to hide the event "
"alarm information without removing it."
msgstr ""
+"Εάν το ενεργό πεδίο είναι επιλεγμένο, σας επιτρέπει να κρύψεται την "
+"υπενθύμιση χωρίς να την απομακρύνεται."
#. module: crm
#: view:crm.lead:0
@@ -744,6 +748,8 @@ msgid ""
"Manages the suppliers and customers claims, including your corrective or "
"preventive actions."
msgstr ""
+"Διαχειρίζεται τους προμηθευτές τις απαιτήσεις πελατών, περιλαμβάνοντας "
+"διορθωτικές ή προληπτικές δράσεις"
#. module: crm
#: view:crm.lead:0
@@ -759,7 +765,7 @@ msgstr "Καταμερισμός Συνεργατών"
#. module: crm
#: field:crm.lead.report,probable_revenue:0
msgid "Probable Revenue"
-msgstr ""
+msgstr "Εκτιμώμενα Έσοδα"
#. module: crm
#: help:crm.segmentation,name:0
@@ -860,7 +866,7 @@ msgstr "Αποκλειστικά"
#: code:addons/crm/crm_opportunity.py:0
#, python-format
msgid "The opportunity '%s' has been won."
-msgstr ""
+msgstr "Η ευκαιρία '%s' κερδήθηκε"
#. module: crm
#: help:crm.case.section,active:0
@@ -868,6 +874,8 @@ msgid ""
"If the active field is set to true, it will allow you to hide the sales team "
"without removing it."
msgstr ""
+"Εάν το ενεργό πεδίο είναι επιλεγμένο, σας επιτρέπει να κρήψεται την ομάδα "
+"πωλήσεων χωρίς να την απομακρύνεται"
#. module: crm
#: help:crm.meeting,alarm_id:0
@@ -946,7 +954,7 @@ msgstr "Μετατροπή σε Ευκαιρία "
#. module: crm
#: help:crm.case.stage,sequence:0
msgid "Gives the sequence order when displaying a list of case stages."
-msgstr ""
+msgstr "Δίνει την σειρά που εμφανίζονται τα στάδια των υποθέσεων"
#. module: crm
#: view:crm.lead:0
@@ -976,7 +984,7 @@ msgstr "Προμηθευτής"
#. module: crm
#: help:crm.send.mail,reply_to:0
msgid "Reply-to of the Sales team defined on this case"
-msgstr ""
+msgstr "Απάντηση-στην ομάδα Πωλήσεων που ορίστικε σε αυτήν την υπόθεση"
#. module: crm
#: view:crm.lead:0
@@ -1004,7 +1012,7 @@ msgstr "Μάρτιος"
#: code:addons/crm/crm_lead.py:0
#, python-format
msgid "The opportunity '%s' has been closed."
-msgstr ""
+msgstr "Η ευκαιρία '%s' έχει κλείσει"
#. module: crm
#: field:crm.lead,day_open:0
@@ -1037,7 +1045,7 @@ msgstr "Κινητό"
#. module: crm
#: view:crm.lead:0
msgid "Next Stage"
-msgstr ""
+msgstr "Επόμενο Στάδιο"
#. module: crm
#: view:board.board:0
@@ -1080,12 +1088,12 @@ msgstr "Επόμενη Ενέργεια"
#. module: crm
#: field:crm.meeting,end_date:0
msgid "Repeat Until"
-msgstr ""
+msgstr "Επανάληψη Μέχρι"
#. module: crm
#: view:crm.meeting:0
msgid "Extended Options..."
-msgstr ""
+msgstr "Εκτεταμένες Επιλογές"
#. module: crm
#: field:crm.meeting,date_deadline:0
@@ -1127,12 +1135,12 @@ msgstr ""
#: view:crm.lead2opportunity.action:0
#: view:res.partner:0
msgid "Next"
-msgstr ""
+msgstr "Επόμενο"
#. module: crm
#: view:crm.lead:0
msgid "Stage:"
-msgstr ""
+msgstr "Στάδιο:"
#. module: crm
#: model:crm.case.stage,name:crm.stage_lead5
@@ -1202,7 +1210,7 @@ msgstr "Επανάληψη κάθε χ"
#. module: crm
#: model:crm.case.categ,name:crm.categ_oppor5
msgid "Need a Website Design"
-msgstr ""
+msgstr "Χρειάζεται Σχεδιαδμό Ιστοσελίδας"
#. module: crm
#: field:crm.meeting,recurrent_uid:0
@@ -1229,7 +1237,7 @@ msgstr ""
#: view:crm.lead.report:0
#: field:crm.lead.report,stage_id:0
msgid "Stage"
-msgstr ""
+msgstr "Στάδιο"
#. module: crm
#: view:crm.lead:0
@@ -1244,17 +1252,17 @@ msgstr "Άκυρο XML για Αρχιτεκτονική Όψης!"
#. module: crm
#: field:base.action.rule,act_mail_to_partner:0
msgid "Mail to Partner"
-msgstr ""
+msgstr "Αληλλογραφία σε Συνεργάτη"
#. module: crm
#: view:crm.lead:0
msgid "Mailings"
-msgstr ""
+msgstr "Αλληλογραφία"
#. module: crm
#: field:crm.meeting,class:0
msgid "Mark as"
-msgstr ""
+msgstr "Μαρκάρισμα ως"
#. module: crm
#: help:crm.meeting,rrule_type:0
@@ -1274,7 +1282,7 @@ msgstr ""
#: model:ir.actions.act_window,name:crm.crm_lead_stage_act
#: model:ir.ui.menu,name:crm.menu_crm_lead_stage_act
msgid "Stages"
-msgstr ""
+msgstr "Στάδια"
#. module: crm
#: field:crm.lead,planned_revenue:0
@@ -1282,7 +1290,7 @@ msgstr ""
#: field:crm.partner2opportunity,planned_revenue:0
#: field:crm.phonecall2opportunity,planned_revenue:0
msgid "Expected Revenue"
-msgstr ""
+msgstr "Προσδοκόμενα Έσοδα"
#. module: crm
#: selection:crm.lead.report,month:0
@@ -1306,7 +1314,7 @@ msgstr "Ανάλυση Τηλεφωνημάτων"
#: field:crm.lead.report,opening_date:0
#: field:crm.phonecall.report,opening_date:0
msgid "Opening Date"
-msgstr ""
+msgstr "Μέρα Έναρξης"
#. module: crm
#: help:crm.phonecall,duration:0
@@ -1387,14 +1395,14 @@ msgstr "Δευτέρα"
#. module: crm
#: field:crm.lead,day_close:0
msgid "Days to Close"
-msgstr ""
+msgstr "Μέρες για Κλείσιμο"
#. module: crm
#: field:crm.add.note,attachment_ids:0
#: field:crm.case.section,complete_name:0
#: field:crm.send.mail,attachment_ids:0
msgid "unknown"
-msgstr ""
+msgstr "άγνωστο"
#. module: crm
#: field:crm.lead,id:0
@@ -1424,7 +1432,7 @@ msgstr "Ημερ/νία"
#: view:crm.lead.report:0
#: view:crm.phonecall.report:0
msgid "Extended Filters..."
-msgstr ""
+msgstr "Εκτεταμένα Φίλτρα..."
#. module: crm
#: model:ir.model,name:crm.model_calendar_attendee
@@ -1473,7 +1481,7 @@ msgstr ""
#: view:crm.phonecall.report:0
#: field:crm.phonecall.report,state:0
msgid "State"
-msgstr ""
+msgstr "Κατάσταση"
#. module: crm
#: model:crm.case.resource.type,name:crm.type_lead1
@@ -1525,7 +1533,7 @@ msgstr ""
#: view:crm.meeting:0
#: view:crm.phonecall:0
msgid "Current"
-msgstr ""
+msgstr "Τρέχον"
#. module: crm
#: field:crm.meeting,exrule:0
@@ -1545,7 +1553,7 @@ msgstr "Κατηγορίες Τηλεφωνημάτων"
#. module: crm
#: view:crm.meeting:0
msgid "Invite People"
-msgstr ""
+msgstr "Κάλεσε Κόσμο"
#. module: crm
#: view:board.board:0
@@ -1555,7 +1563,7 @@ msgstr "Ευκαιρίες ανά Κατηγορία"
#. module: crm
#: constraint:crm.case.section:0
msgid "Error ! You cannot create recursive Sales team."
-msgstr ""
+msgstr "Λάθος! δεν μπορείς να δημιουργήσεις κενή ομάδα Πωλήσεων"
#. module: crm
#: view:crm.meeting:0
@@ -1640,7 +1648,7 @@ msgstr ""
#: view:crm.lead:0
#: view:crm.phonecall:0
msgid "Creation"
-msgstr ""
+msgstr "Δημιουργία"
#. module: crm
#: selection:crm.lead,priority:0
@@ -1668,7 +1676,7 @@ msgstr "Σάββατο"
#. module: crm
#: selection:crm.meeting,byday:0
msgid "Fifth"
-msgstr ""
+msgstr "Πέμπτος"
#. module: crm
#: view:crm.phonecall2phonecall:0
@@ -1702,7 +1710,7 @@ msgstr "Προγραμματισμένα Έσοδα"
#: view:crm.phonecall:0
#: view:crm.phonecall.report:0
msgid "Group By..."
-msgstr ""
+msgstr "Ομαδοποίσηση Κατά..."
#. module: crm
#: help:crm.lead,partner_id:0
@@ -1743,7 +1751,7 @@ msgstr "Τ.Κ."
#: code:addons/crm/crm_lead.py:0
#, python-format
msgid "The case '%s' has been opened."
-msgstr ""
+msgstr "Η Υπόθεση '%s' έχει ανοίξει"
#. module: crm
#: view:crm.installer:0
@@ -1845,7 +1853,7 @@ msgstr "Λεπτά"
#. module: crm
#: view:crm.case.section:0
msgid "Select stages for this Sales Team"
-msgstr ""
+msgstr "Επιλέξτε στάδια για αυτήν την Ομάδα Πωλήσεων"
#. module: crm
#: code:addons/crm/wizard/crm_merge_opportunities.py:0
@@ -1864,7 +1872,7 @@ msgstr ""
#: view:crm.partner2opportunity:0
#: model:ir.actions.act_window,name:crm.phonecall2opportunity_act
msgid "Convert To Opportunity"
-msgstr ""
+msgstr "Μετατροπή σε Ευκαιρία"
#. module: crm
#: view:crm.phonecall:0
@@ -1894,7 +1902,7 @@ msgstr "Συγχώνευση Ευκαιριών"
#. module: crm
#: model:crm.case.resource.type,name:crm.type_lead5
msgid "Google Adwords"
-msgstr ""
+msgstr "Google Adwords"
#. module: crm
#: model:ir.model,name:crm.model_crm_phonecall
@@ -1904,17 +1912,17 @@ msgstr ""
#. module: crm
#: model:crm.case.resource.type,name:crm.type_lead3
msgid "Mail Campaign 2"
-msgstr ""
+msgstr "Εξτρατεία Αλληλογραφίας 1"
#. module: crm
#: model:crm.case.resource.type,name:crm.type_lead2
msgid "Mail Campaign 1"
-msgstr ""
+msgstr "Εξτρατεία Αλληλογραφίας 1"
#. module: crm
#: view:crm.lead:0
msgid "Create"
-msgstr ""
+msgstr "Δημιουργία"
#. module: crm
#: code:addons/crm/crm.py:0
diff --git a/addons/document/__openerp__.py b/addons/document/__openerp__.py
index 5741a7223e0..5d0088579a1 100644
--- a/addons/document/__openerp__.py
+++ b/addons/document/__openerp__.py
@@ -22,7 +22,7 @@
{
'name': 'Integrated Document Management System',
- 'version': '2.0',
+ 'version': '2.1',
'category': 'Generic Modules/Others',
'description': """This is a complete document management system:
* User Authentication
diff --git a/addons/document/content_index.py b/addons/document/content_index.py
index df2b12b5456..6d49a29873f 100644
--- a/addons/document/content_index.py
+++ b/addons/document/content_index.py
@@ -71,8 +71,10 @@ class indexer(object):
pass
fp = open(realfile,'rb')
- content2 = fp.read()
- fp.close()
+ try:
+ content2 = fp.read()
+ finally:
+ fp.close()
# The not-handled exception may be raised here
return self._doIndexContent(content2)
@@ -164,8 +166,10 @@ class contentIndex(object):
os.close(fd)
fp = Popen(['file','-b','--mime',fname], shell=False, stdout=PIPE).stdout
- result = fp.read()
- fp.close()
+ try:
+ result = fp.read()
+ finally:
+ fp.close()
mime2 = result.split(';')[0]
self.__logger.debug('File gave us: %s', mime2)
# Note that the temporary file still exists now.
diff --git a/addons/document/doc/access_permissions.rst b/addons/document/doc/access_permissions.rst
new file mode 100644
index 00000000000..2cdc45dadab
--- /dev/null
+++ b/addons/document/doc/access_permissions.rst
@@ -0,0 +1,65 @@
+Access control in the Document Management system
+================================================
+
+The purpose is to let the DMS act as a real-life management system for
+the file handling of some small business.
+The key concept, there, is the separation of access according to users
+and groups.
+
+Fact 1: Users, in general, must NOT see each other's documents, not even
+their names (because they usually imply sensitive data, like eg. a doc:
+"Acme Company's Patent 012356 about fooobars.odf" )
+Fact 2: Users, sometimes, fail to comprehend complex ACL schemes, so we
+owe to keep things simple, a main principle applied all over the place.
+Fact 3: our system has both statically placed files and directories, as
+well as dynamic (aka "resources" in our terminology) nodes.
+
+We allow/limit the access based on 3 factors (fields):
+ - The "owner" field, which holds the user that created or "owns" the
+ file or directory.
+ - The "group_ids" field, on directories, which specifieds group-wise
+ access
+ - The "company_id" field, for multi-company access rules [1]
+
+[1] at multi-company setups, we may want the same file hierarchy to apply
+to different companies, and also nodes to be company-specific in it.
+
+Principle of "owner"
+----------------------
+Files or directories that have an empty "owner" field are public. All users
+will be able to _read_ them. Only the OpenERP Administrator or specified
+groups, however, will be able to modify them!
+Files or directories that have an "owner" are private. Only their users will
+be able to read or modify (including delete) them.
+By default, all user's files are created with "owner" field set, thus private.
+
+Principle of "group_ids"
+-------------------------
+Directories that have any group ids set will only (apart from their owner)
+allow members of these groups to read them.
+Directories that are created into the above directories will initially inherit
+(that is, copy) the group_ids of their parents, so that they also allow
+access to the same users.
+
+Implementation note
+---------------------
+Most of the principles are applied through record rules (see ir.rule object),
+so an administrator can actually readjust them.
+In order to have logical "areas" of folders, where different policies apply
+(like group folders, personal areas), default values for directories' owners
+and group_ids can be tuned (through the 'set default' functionality of
+fields).
+
+Summary
+--------
+
+Table of permissions and behavior
+
+|| Type | Owner set | Groups set | Description ||
+|| Public | - | - | Public-readable folders, admin can write ||
+|| Group | - | X | Group can read, write, delete in them ||
+|| Group-read | X | X | Group can read[2], owner can write/delete ||
+|| Private | X | - | Only owner can read, write, delete in. ||
+
+[2] hint: using a wide group, like "Internal users" at this setup creates the
+ effect of public-readable folders, with write permission to a non-admin user.
diff --git a/addons/document/document.py b/addons/document/document.py
index 470d67c582b..e3d810668b4 100644
--- a/addons/document/document.py
+++ b/addons/document/document.py
@@ -74,7 +74,7 @@ class document_file(osv.osv):
'create_uid': fields.many2one('res.users', 'Creator', readonly=True),
'write_date': fields.datetime('Date Modified', readonly=True),
'write_uid': fields.many2one('res.users', 'Last Modification User', readonly=True),
- 'res_model': fields.char('Attached Model', size=64, readonly=True),
+ 'res_model': fields.char('Attached Model', size=64, readonly=True, change_default=True),
'res_id': fields.integer('Attached ID', readonly=True),
# If ir.attachment contained any data before document is installed, preserve
@@ -86,7 +86,7 @@ class document_file(osv.osv):
'user_id': fields.many2one('res.users', 'Owner', select=1),
# 'group_ids': fields.many2many('res.groups', 'document_group_rel', 'item_id', 'group_id', 'Groups'),
# the directory id now is mandatory. It can still be computed automatically.
- 'parent_id': fields.many2one('document.directory', 'Directory', select=1, required=True),
+ 'parent_id': fields.many2one('document.directory', 'Directory', select=1, required=True, change_default=True),
'index_content': fields.text('Indexed Content'),
'partner_id':fields.many2one('res.partner', 'Partner', select=1),
'file_size': fields.integer('File Size', required=True),
@@ -245,7 +245,7 @@ class document_file(osv.osv):
# files to be unlinked, update the db (safer to do first, can be
# rolled back) and then unlink the files. The list wouldn't exist
# after we discard the objects
-
+ ids = self.search(cr, uid, [('id','in',ids)])
for f in self.browse(cr, uid, ids, context):
# TODO: update the node cache
par = f.parent_id
diff --git a/addons/document/document_data.xml b/addons/document/document_data.xml
index ef829b6e258..a4f546cbf83 100644
--- a/addons/document/document_data.xml
+++ b/addons/document/document_data.xml
@@ -16,13 +16,13 @@
<record model="document.directory" id="dir_root">
<field name="name">Documents</field>
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
<field name="storage_id" ref="storage_default"/>
<field name="ressource_id">0</field>
</record>
<record model="document.directory" id="dir_my_folder">
- <field name="name">My Folder</field>
+ <field name="name">Admin Folder</field>
<field name="parent_id" ref="dir_root"/>
<field name="user_id" ref="base.user_root"/>
<field name="ressource_id">0</field>
@@ -37,7 +37,7 @@
<field name="ressource_id">0</field>
<field name="ressource_type_id" search="[('model','=','res.partner.category')]" />
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
</record>
<record model="document.directory" id="dir_partner">
@@ -46,7 +46,7 @@
<field name="domain">[('category_id','in',[active_id])]</field>
<field name="ressource_type_id" search="[('model','=','res.partner')]" />
<field name="ressource_parent_type_id" search="[('model','=','res.partner.category')]" />
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
<field name="ressource_id">0</field>
</record>
@@ -55,14 +55,14 @@
<field name="name">Personal Folders</field>
<field name="parent_id" ref="dir_root"/>
<field name="type">ressource</field>
+ <field name="user_id" eval="False"/>
<field name="ressource_type_id" ref="base.model_res_users" />
<field name="ressource_id">0</field>
-
</record>
<record model="document.directory" id="dir_product">
<field name="name">Products</field>
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
<field name="parent_id" ref="dir_root"/>
<field name="ressource_id">0</field>
@@ -70,7 +70,7 @@
<record model="document.directory" id="dir_sale_order">
<field name="name">Sales Order</field>
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
<field name="parent_id" ref="dir_root"/>
<field name="ressource_id">0</field>
@@ -78,7 +78,7 @@
<record model="document.directory" id="dir_sale_order_all">
<field name="name">All Sales Order</field>
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
<field name="parent_id" ref="dir_sale_order"/>
<field name="ressource_id">0</field>
@@ -86,7 +86,7 @@
<record model="document.directory" id="dir_sale_order_quote">
<field name="name">Quotations</field>
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
<field name="parent_id" ref="dir_sale_order"/>
<field name="ressource_id">0</field>
@@ -94,7 +94,7 @@
<record model="document.directory" id="dir_project">
<field name="name">Projects</field>
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
<field name="parent_id" ref="dir_root"/>
<field name="ressource_id">0</field>
diff --git a/addons/document/document_directory.py b/addons/document/document_directory.py
index 9b7ba18b16f..9412527db22 100644
--- a/addons/document/document_directory.py
+++ b/addons/document/document_directory.py
@@ -21,8 +21,8 @@
from osv import osv, fields
+from osv.orm import except_orm
-import os
import nodes
from tools.translate import _
@@ -38,9 +38,9 @@ class document_directory(osv.osv):
'create_uid': fields.many2one('res.users', 'Creator', readonly=True),
'domain': fields.char('Domain', size=128, help="Use a domain if you want to apply an automatic filter on visible resources."),
'user_id': fields.many2one('res.users', 'Owner'),
- 'storage_id': fields.many2one('document.storage', 'Storage'),
+ 'storage_id': fields.many2one('document.storage', 'Storage', change_default=True),
'group_ids': fields.many2many('res.groups', 'document_directory_group_rel', 'item_id', 'group_id', 'Groups'),
- 'parent_id': fields.many2one('document.directory', 'Parent Directory', select=1),
+ 'parent_id': fields.many2one('document.directory', 'Parent Directory', select=1, change_default=True),
'child_ids': fields.one2many('document.directory', 'parent_id', 'Children'),
'file_ids': fields.one2many('ir.attachment', 'parent_id', 'Files'),
'content_ids': fields.one2many('document.directory.content', 'directory_id', 'Virtual Files'),
@@ -48,22 +48,24 @@ class document_directory(osv.osv):
('directory','Static Directory'),
('ressource','Folders per resource'),
],
- 'Type', required=True, select=1,
+ 'Type', required=True, select=1, change_default=True,
help="Each directory can either have the type Static or be linked to another resource. A static directory, as with Operating Systems, is the classic directory that can contain a set of files. The directories linked to systems resources automatically possess sub-directories for each of resource types defined in the parent directory."),
- 'ressource_type_id': fields.many2one('ir.model', 'Resource model',
+ 'ressource_type_id': fields.many2one('ir.model', 'Resource model', change_default=True,
help="Select an object here and there will be one folder per record of that resource."),
'resource_field': fields.many2one('ir.model.fields', 'Name field', help='Field to be used as name on resource directories. If empty, the "name" will be used.'),
'resource_find_all': fields.boolean('Find all resources', required=True,
help="If true, all attachments that match this resource will " \
" be located. If false, only ones that have this as parent." ),
- 'ressource_parent_type_id': fields.many2one('ir.model', 'Parent Model',
+ 'ressource_parent_type_id': fields.many2one('ir.model', 'Parent Model', change_default=True,
help="If you put an object here, this directory template will appear bellow all of these objects. " \
+ "Such directories are \"attached\" to the specific model or record, just like attachments. " \
"Don't put a parent directory if you select a parent model."),
- 'ressource_id': fields.integer('Resource ID'),
+ 'ressource_id': fields.integer('Resource ID',
+ help="Along with Parent Model, this ID attaches this folder to a specific record of Parent Model."),
'ressource_tree': fields.boolean('Tree Structure',
help="Check this if you want to use the same tree structure as the object selected in the system."),
'dctx_ids': fields.one2many('document.directory.dctx', 'dir_id', 'Context fields'),
- 'company_id': fields.many2one('res.company', 'Company'),
+ 'company_id': fields.many2one('res.company', 'Company', change_default=True),
}
@@ -98,10 +100,10 @@ class document_directory(osv.osv):
_defaults = {
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'document.directory', context=c),
'user_id': lambda self,cr,uid,ctx: uid,
- 'domain': lambda self,cr,uid,ctx: '[]',
- 'type': lambda *args: 'directory',
- 'ressource_id': lambda *a: 0,
- 'storage_id': _get_def_storage,
+ 'domain': '[]',
+ 'type': 'directory',
+ 'ressource_id': 0,
+ 'storage_id': _get_def_storage, # Still, it is bad practice to set it everywhere.
'resource_find_all': True,
}
_sql_constraints = [
@@ -188,7 +190,6 @@ class document_directory(osv.osv):
dbro = self.browse(cr, uid, ids, context=context)
if dynamic:
- assert dbro.type == 'directory'
return nodes.node_res_obj
elif dbro.type == 'directory':
return nodes.node_dir
@@ -211,22 +212,19 @@ class document_directory(osv.osv):
"""
return
- def get_dir_permissions(self, cr, uid, ids ):
+ def get_dir_permissions(self, cr, uid, ids, context=None ):
"""Check what permission user 'uid' has on directory 'id'
"""
assert len(ids) == 1
- id = ids[0]
- cr.execute( "SELECT count(dg.item_id) AS needs, count(ug.uid) AS has " \
- " FROM document_directory_group_rel dg " \
- " LEFT OUTER JOIN res_groups_users_rel ug " \
- " ON (dg.group_id = ug.gid AND ug.uid = %s) " \
- " WHERE dg.item_id = %s ", (uid, id))
- needs, has = cr.fetchone()
- if needs and not has:
- return 1 # still allow to descend into.
- else:
- return 15
+ res = 0
+ for pperms in [('read', 5), ('write', 2), ('unlink', 8)]:
+ try:
+ self.check_access_rule(cr, uid, ids, pperms[0], context=context)
+ res |= pperms[1]
+ except except_orm:
+ pass
+ return res
def _locate_child(self, cr, uid, root_id, uri,nparent, ncontext):
""" try to locate the node in uri,
diff --git a/addons/document/document_storage.py b/addons/document/document_storage.py
index 0ecc01941b4..aa2edb6b411 100644
--- a/addons/document/document_storage.py
+++ b/addons/document/document_storage.py
@@ -26,6 +26,7 @@ import tools
import base64
import errno
import logging
+import shutil
from StringIO import StringIO
import psycopg2
@@ -48,7 +49,7 @@ DMS_ROOT_PATH = tools.config.get('document_path', os.path.join(tools.config.get(
We have to consider 3 cases of data /retrieval/:
Given (context,path) we need to access the file (aka. node).
given (directory, context), we need one of its children (for listings, views)
- given (ir.attachment, context), we needs its data and metadata (node).
+ given (ir.attachment, context), we need its data and metadata (node).
For data /storage/ we have the cases:
Have (ir.attachment, context), we modify the file (save, update, rename etc).
@@ -100,10 +101,17 @@ class nodefd_file(nodes.node_descriptor):
if mode.endswith('b'):
mode = mode[:-1]
self.mode = mode
+ self._size = os.stat(path).st_size
- for attr in ('closed', 'read', 'write', 'seek', 'tell'):
+ for attr in ('closed', 'read', 'write', 'seek', 'tell', 'next'):
setattr(self,attr, getattr(self.__file, attr))
+ def size(self):
+ return self._size
+
+ def __iter__(self):
+ return self
+
def close(self):
# TODO: locking in init, close()
fname = self.__file.name
@@ -165,6 +173,7 @@ class nodefd_db(StringIO, nodes.node_descriptor):
"""
def __init__(self, parent, ira_browse, mode):
nodes.node_descriptor.__init__(self, parent)
+ self._size = 0L
if mode.endswith('b'):
mode = mode[:-1]
@@ -172,6 +181,8 @@ class nodefd_db(StringIO, nodes.node_descriptor):
cr = ira_browse._cr # reuse the cursor of the browse object, just now
cr.execute('SELECT db_datas FROM ir_attachment WHERE id = %s',(ira_browse.id,))
data = cr.fetchone()[0]
+ if data:
+ self._size = len(data)
StringIO.__init__(self, data)
elif mode in ('w', 'w+'):
StringIO.__init__(self, None)
@@ -184,6 +195,9 @@ class nodefd_db(StringIO, nodes.node_descriptor):
raise IOError(errno.EINVAL, "Invalid file mode")
self.mode = mode
+ def size(self):
+ return self._size
+
def close(self):
# we now open a *separate* cursor, to update the data.
# FIXME: this may be improved, for concurrency handling
@@ -241,11 +255,15 @@ class nodefd_db64(StringIO, nodes.node_descriptor):
"""
def __init__(self, parent, ira_browse, mode):
nodes.node_descriptor.__init__(self, parent)
+ self._size = 0L
if mode.endswith('b'):
mode = mode[:-1]
if mode in ('r', 'r+'):
- StringIO.__init__(self, base64.decodestring(ira_browse.db_datas))
+ data = base64.decodestring(ira_browse.db_datas)
+ if data:
+ self._size = len(data)
+ StringIO.__init__(self, data)
elif mode in ('w', 'w+'):
StringIO.__init__(self, None)
# at write, we start at 0 (= overwrite), but have the original
@@ -257,6 +275,9 @@ class nodefd_db64(StringIO, nodes.node_descriptor):
raise IOError(errno.EINVAL, "Invalid file mode")
self.mode = mode
+ def size(self):
+ return self._size
+
def close(self):
# we now open a *separate* cursor, to update the data.
# FIXME: this may be improved, for concurrency handling
@@ -452,11 +473,11 @@ class document_storage(osv.osv):
elif boo.type == 'realstore':
path, npath = self.__prepare_realpath(cr, file_node, ira, boo.path,
- do_create = (mode[1] in ('w','a')) )
+ do_create = (mode[0] in ('w','a')) )
fpath = os.path.join(path, npath[-1])
- if (not os.path.exists(fpath)) and mode[1] == 'r':
+ if (not os.path.exists(fpath)) and mode[0] == 'r':
raise IOError("File not found: %s" % fpath)
- elif mode[1] in ('w', 'a') and not ira.store_fname:
+ elif mode[0] in ('w', 'a') and not ira.store_fname:
store_fname = os.path.join(*npath)
cr.execute('UPDATE ir_attachment SET store_fname = %s WHERE id = %s',
(store_fname, ira.id))
@@ -541,9 +562,11 @@ class document_storage(osv.osv):
try:
store_fname = self.__get_random_fname(path)
fname = os.path.join(path, store_fname)
- fp = file(fname, 'wb')
- fp.write(data)
- fp.close()
+ fp = open(fname, 'wb')
+ try:
+ fp.write(data)
+ finally:
+ fp.close()
self._doclog.debug( "Saved data to %s" % fname)
filesize = len(data) # os.stat(fname).st_size
@@ -568,9 +591,11 @@ class document_storage(osv.osv):
try:
path, npath = self.__prepare_realpath(cr, file_node, ira, boo.path, do_create=True)
fname = os.path.join(path, npath[-1])
- fp = file(fname,'wb')
- fp.write(data)
- fp.close()
+ fp = open(fname,'wb')
+ try:
+ fp.write(data)
+ finally:
+ fp.close()
self._doclog.debug("Saved data to %s", fname)
filesize = len(data) # os.stat(fname).st_size
store_fname = os.path.join(*npath)
@@ -649,7 +674,7 @@ class document_storage(osv.osv):
if ktype == 'file':
try:
os.unlink(fname)
- except Exception, e:
+ except Exception:
self._doclog.warning("Could not remove file %s, please remove manually.", fname, exc_info=True)
else:
self._doclog.warning("Unknown unlink key %s" % ktype)
@@ -729,26 +754,34 @@ class document_storage(osv.osv):
# nothing to do for a rename, allow to change the db field
return { 'parent_id': ndir_bro.id }
elif sbro.type == 'realstore':
- raise NotImplementedError("Cannot move in realstore, yet") # TODO
- fname = fil_bo.store_fname
+ ira = self.pool.get('ir.attachment').browse(cr, uid, file_node.file_id, context=context)
+
+ path, opath = self.__prepare_realpath(cr, file_node, ira, sbro.path, do_create=False)
+ fname = ira.store_fname
+
if not fname:
- return ValueError("Tried to rename a non-stored file")
- path = sbro.path
- oldpath = os.path.join(path, fname)
+ self._doclog.warning("Trying to rename a non-stored file")
+ if fname != os.path.join(*opath):
+ self._doclog.warning("inconsistency in realstore: %s != %s" , fname, repr(opath))
+
+ oldpath = os.path.join(path, opath[-1])
- for ch in ('*', '|', "\\", '/', ':', '"', '<', '>', '?', '..'):
- if ch in new_name:
- raise ValueError("Invalid char %s in name %s" %(ch, new_name))
-
- file_node.fix_ppath(cr, ira)
- npath = file_node.full_path() or []
- dpath = [path,]
- dpath.extend(npath[:-1])
- dpath.append(new_name)
- newpath = os.path.join(*dpath)
- # print "old, new paths:", oldpath, newpath
- os.rename(oldpath, newpath)
- return { 'name': new_name, 'datas_fname': new_name, 'store_fname': new_name }
+ npath = [sbro.path,] + (ndir_bro.get_full_path() or [])
+ npath = filter(lambda x: x is not None, npath)
+ newdir = os.path.join(*npath)
+ if not os.path.isdir(newdir):
+ self._doclog.debug("Must create dir %s", newdir)
+ os.makedirs(newdir)
+ npath.append(opath[-1])
+ newpath = os.path.join(*npath)
+
+ self._doclog.debug("Going to move %s from %s to %s", opath[-1], oldpath, newpath)
+ shutil.move(oldpath, newpath)
+
+ store_path = npath[1:] + [opath[-1],]
+ store_fname = os.path.join(*store_path)
+
+ return { 'store_fname': store_fname }
else:
raise TypeError("No %s storage" % sbro.type)
diff --git a/addons/document/nodes.py b/addons/document/nodes.py
index 68220885dff..ee506d5eb2b 100644
--- a/addons/document/nodes.py
+++ b/addons/document/nodes.py
@@ -175,6 +175,23 @@ class node_descriptor(object):
def write(self, str):
raise NotImplementedError
+ def size(self):
+ raise NotImplementedError
+
+ def __len__(self):
+ return self.size()
+
+ def __nonzero__(self):
+ """ Ensure that a node_descriptor will never equal False
+
+ Since we do define __len__ and __iter__ for us, we must avoid
+ being regarded as non-true objects.
+ """
+ return True
+
+ def next(self, str):
+ raise NotImplementedError
+
class node_class(object):
""" this is a superclass for our inodes
It is an API for all code that wants to access the document files.
@@ -366,12 +383,14 @@ class node_class(object):
def create_child(self, cr, path, data=None):
""" Create a regular file under this node
"""
- raise NotImplementedError(repr(self))
+ logger.warning("Attempted to create a file under %r, not possible.", self)
+ raise IOError(errno.EPERM, "Not allowed to create files here")
def create_child_collection(self, cr, objname):
""" Create a child collection (directory) under self
"""
- raise NotImplementedError(repr(self))
+ logger.warning("Attempted to create a collection under %r, not possible.", self)
+ raise IOError(errno.EPERM, "Not allowed to create folders here")
def rm(self, cr):
raise NotImplementedError(repr(self))
@@ -433,12 +452,12 @@ class node_database(node_class):
return res[0]
return None
- def _child_get(self, cr, name=False, parent_id=False, domain=None):
+ def _child_get(self, cr, name=False, domain=None):
dirobj = self.context._dirobj
uid = self.context.uid
ctx = self.context.context.copy()
ctx.update(self.dctx)
- where = [('parent_id','=',parent_id)]
+ where = [('parent_id','=', False), ('ressource_parent_type_id','=',False)]
if name:
where.append(('name','=',name))
is_allowed = self.check_perms(1)
@@ -448,23 +467,14 @@ class node_database(node_class):
if not is_allowed:
raise IOError(errno.EPERM, "Permission into directory denied")
- if not domain:
- domain = []
-
- where2 = where + domain + ['|', ('type', '=', 'directory'), \
- '&', ('type', '=', 'ressource'), ('ressource_parent_type_id','=',False)]
- ids = dirobj.search(cr, uid, where2, context=ctx)
+ if domain:
+ where = where + domain
+ ids = dirobj.search(cr, uid, where, context=ctx)
res = []
for dirr in dirobj.browse(cr, uid, ids, context=ctx):
klass = dirr.get_node_class(dirr, context=ctx)
res.append(klass(dirr.name, self, self.context,dirr))
- fil_obj = dirobj.pool.get('ir.attachment')
- ids = fil_obj.search(cr, uid, where, context=ctx)
- if ids:
- for fil in fil_obj.browse(cr, uid, ids, context=ctx):
- klass = self.context.node_file_class
- res.append(klass(fil.name, self, self.context, fil))
return res
def _file_get(self,cr, nodename=False):
@@ -485,6 +495,22 @@ def mkdosname(company_name, default='noname'):
return n
+def _uid2unixperms(perms, has_owner):
+ """ Convert the uidperms and the owner flag to full unix bits
+ """
+ res = 0
+ if has_owner:
+ res |= (perms & 0x07) << 6
+ res |= (perms & 0x05) << 3
+ elif perms & 0x02:
+ res |= (perms & 0x07) << 6
+ res |= (perms & 0x07) << 3
+ else:
+ res |= (perms & 0x07) << 6
+ res |= (perms & 0x05) << 3
+ res |= 0x05
+ return res
+
class node_dir(node_database):
our_type = 'collection'
def __init__(self, path, parent, context, dirr, dctx=None):
@@ -499,13 +525,13 @@ class node_dir(node_database):
# TODO: the write date should be MAX(file.write)..
self.write_date = dirr and (dirr.write_date or dirr.create_date) or False
self.content_length = 0
- self.unixperms = 040750
try:
self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody'
except Exception:
self.uuser = 'nobody'
self.ugroup = mkdosname(dirr.company_id and dirr.company_id.name, default='nogroup')
self.uidperms = dirr.get_dir_permissions()
+ self.unixperms = 040000 | _uid2unixperms(self.uidperms, dirr and dirr.user_id)
if dctx:
self.dctx.update(dctx)
dc2 = self.context.context
@@ -516,7 +542,7 @@ class node_dir(node_database):
for dfld in dirr.dctx_ids:
try:
self.dctx['dctx_' + dfld.field] = safe_eval(dfld.expr,dc2)
- except Exception:
+ except Exception,e:
print "Cannot eval %s" % dfld.expr
print e
pass
@@ -559,7 +585,46 @@ class node_dir(node_database):
return res
def _child_get(self, cr, name=None, domain=None):
- return super(node_dir,self)._child_get(cr, name, self.dir_id, domain=domain)
+ dirobj = self.context._dirobj
+ uid = self.context.uid
+ ctx = self.context.context.copy()
+ ctx.update(self.dctx)
+ where = [('parent_id','=',self.dir_id)]
+ if name:
+ where.append(('name','=',name))
+ is_allowed = self.check_perms(1)
+ else:
+ is_allowed = self.check_perms(5)
+
+ if not is_allowed:
+ raise IOError(errno.EPERM, "Permission into directory denied")
+
+ if not domain:
+ domain = []
+
+ where2 = where + domain + [('ressource_parent_type_id','=',False)]
+ ids = dirobj.search(cr, uid, where2, context=ctx)
+ res = []
+ for dirr in dirobj.browse(cr, uid, ids, context=ctx):
+ klass = dirr.get_node_class(dirr, context=ctx)
+ res.append(klass(dirr.name, self, self.context,dirr))
+
+ # Static directories should never return files with res_model/res_id
+ # because static dirs are /never/ related to a record.
+ # In fact, files related to some model and parented by the root dir
+ # (the default), will NOT be accessible in the node system unless
+ # a resource folder for that model exists (with resource_find_all=True).
+ # Having resource attachments in a common folder is bad practice,
+ # because they would be visible to all users, and their names may be
+ # the same, conflicting.
+ where += [('res_model', '=', False)]
+ fil_obj = dirobj.pool.get('ir.attachment')
+ ids = fil_obj.search(cr, uid, where, context=ctx)
+ if ids:
+ for fil in fil_obj.browse(cr, uid, ids, context=ctx):
+ klass = self.context.node_file_class
+ res.append(klass(fil.name, self, self.context, fil))
+ return res
def rmcol(self, cr):
uid = self.context.uid
@@ -699,13 +764,13 @@ class node_res_dir(node_class):
# TODO: the write date should be MAX(file.write)..
self.write_date = dirr.write_date or dirr.create_date
self.content_length = 0
- self.unixperms = 040750
try:
self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody'
except Exception:
self.uuser = 'nobody'
self.ugroup = mkdosname(dirr.company_id and dirr.company_id.name, default='nogroup')
self.uidperms = dirr.get_dir_permissions()
+ self.unixperms = 040000 | _uid2unixperms(self.uidperms, dirr and dirr.user_id)
self.res_model = dirr.ressource_type_id and dirr.ressource_type_id.model or False
self.resm_id = dirr.ressource_id
self.res_find_all = dirr.resource_find_all
@@ -759,7 +824,7 @@ class node_res_dir(node_class):
ctx.update(self.dctx)
where = []
if self.domain:
- app = safe_eval(self.domain, self.dctx)
+ app = safe_eval(self.domain, ctx)
if not app:
pass
elif isinstance(app, list):
@@ -823,8 +888,8 @@ class node_res_obj(node_class):
# TODO: the write date should be MAX(file.write)..
self.write_date = parent.write_date
self.content_length = 0
- self.unixperms = 040750
self.uidperms = parent.uidperms & 15
+ self.unixperms = 040000 | _uid2unixperms(self.uidperms, True)
self.uuser = parent.uuser
self.ugroup = parent.ugroup
self.res_model = res_model
@@ -842,7 +907,7 @@ class node_res_obj(node_class):
for fld,expr in self.dctx_dict.items():
try:
self.dctx[fld] = safe_eval(expr, dc2)
- except Exception:
+ except Exception,e:
print "Cannot eval %s for %s" % (expr, fld)
print e
pass
@@ -953,9 +1018,9 @@ class node_res_obj(node_class):
where1 = []
if obj._parent_name in obj.fields_get(cr, uid):
where1 = where + [(obj._parent_name, '=', self.res_id)]
+ namefield = directory.resource_field.name or 'name'
resids = obj.search(cr, uid, where1, context=ctx)
for bo in obj.browse(cr, uid, resids, context=ctx):
- namefield = directory.resource_field.name or 'name'
if not bo:
continue
res_name = getattr(bo, namefield)
@@ -963,7 +1028,7 @@ class node_res_obj(node_class):
continue
# TODO Revise
klass = directory.get_node_class(directory, dynamic=True, context=ctx)
- res.append(klass(res_name, self.dir_id, self, self.context, self.res_model, res_bo = bo))
+ res.append(klass(res_name, dir_id=self.dir_id, parent=self, context=self.context, res_model=self.res_model, res_bo=bo))
where2 = where + [('parent_id','=',self.dir_id) ]
@@ -1361,11 +1426,13 @@ class nodefd_content(StringIO, node_descriptor):
def __init__(self, parent, cr, mode, ctx):
node_descriptor.__init__(self, parent)
self._context=ctx
+ self._size = 0L
if mode in ('r', 'r+'):
cntobj = parent.context._dirobj.pool.get('document.directory.content')
data = cntobj.process_read(cr, parent.context.uid, parent, ctx)
if data:
+ self._size = len(data)
parent.content_length = len(data)
StringIO.__init__(self, data)
elif mode in ('w', 'w+'):
@@ -1379,6 +1446,9 @@ class nodefd_content(StringIO, node_descriptor):
raise IOError(errno.EINVAL, "Invalid file mode")
self.mode = mode
+ def size(self):
+ return self._size
+
def close(self):
# we now open a *separate* cursor, to update the data.
# FIXME: this may be improved, for concurrency handling
@@ -1404,4 +1474,56 @@ class nodefd_content(StringIO, node_descriptor):
cr.close()
StringIO.close(self)
+class nodefd_static(StringIO, node_descriptor):
+ """ A descriptor to nodes with static data.
+ """
+ def __init__(self, parent, cr, mode, ctx=None):
+ node_descriptor.__init__(self, parent)
+ self._context=ctx
+ self._size = 0L
+
+ if mode in ('r', 'r+'):
+ data = parent.get_data(cr)
+ if data:
+ self._size = len(data)
+ parent.content_length = len(data)
+ StringIO.__init__(self, data)
+ elif mode in ('w', 'w+'):
+ StringIO.__init__(self, None)
+ # at write, we start at 0 (= overwrite), but have the original
+ # data available, in case of a seek()
+ elif mode == 'a':
+ StringIO.__init__(self, None)
+ else:
+ logging.getLogger('document.nodes').error("Incorrect mode %s specified", mode)
+ raise IOError(errno.EINVAL, "Invalid file mode")
+ self.mode = mode
+
+ def size(self):
+ return self._size
+
+ def close(self):
+ # we now open a *separate* cursor, to update the data.
+ # FIXME: this may be improved, for concurrency handling
+ if self.mode == 'r':
+ StringIO.close(self)
+ return
+
+ par = self._get_parent()
+ # uid = par.context.uid
+ cr = pooler.get_db(par.context.dbname).cursor()
+ try:
+ if self.mode in ('w', 'w+', 'r+'):
+ data = self.getvalue()
+ par.set_data(cr, data)
+ elif self.mode == 'a':
+ raise NotImplementedError
+ cr.commit()
+ except Exception:
+ logging.getLogger('document.nodes').exception('Cannot update db content #%d for close:', par.cnt_id)
+ raise
+ finally:
+ cr.close()
+ StringIO.close(self)
+
#eof \ No newline at end of file
diff --git a/addons/document/security/document_security.xml b/addons/document/security/document_security.xml
index 2bf1a2adb57..ca55a8219c1 100644
--- a/addons/document/security/document_security.xml
+++ b/addons/document/security/document_security.xml
@@ -14,6 +14,28 @@
<field name="groups_id" eval="[(6,0,[ref('base.group_system')])]"/>
</record>
-
+ <record id="ir_rule_readpublicdirectories0" model="ir.rule">
+ <field name="model_id" ref="document.model_document_directory"/>
+ <field name="domain_force">['|','|',('group_ids','in',[g.id for g in user.groups_id]), ('user_id', '=', user.id), '&amp;', ('user_id', '=', False), ('group_ids','=',False), '|', ('company_id','=',False), ('company_id','child_of',[user.company_id.id])]</field>
+ <field name="name">Read public directories</field>
+ <field eval="0" name="global"/>
+ <field eval="[(6,0,[ref('base.group_user')])]" name="groups"/>
+ <field eval="0" name="perm_unlink"/>
+ <field eval="0" name="perm_write"/>
+ <field eval="1" name="perm_read"/>
+ <field eval="0" name="perm_create"/>
+ </record>
+
+ <record id="ir_rule_documentmodifyowndirectories0" model="ir.rule">
+ <field name="model_id" ref="document.model_document_directory"/>
+ <field name="domain_force">[ '|', ('user_id', '=', user.id), '&amp;', ('group_ids','in',[g.id for g in user.groups_id]), ('user_id','=',False), '|', ('company_id','=',False), ('company_id','child_of',[user.company_id.id])]</field>
+ <field name="name">Document modify own directories</field>
+ <field eval="0" name="global"/>
+ <field eval="[(6,0,[ref('base.group_document_user')])]" name="groups"/>
+ <field eval="1" name="perm_unlink"/>
+ <field eval="1" name="perm_write"/>
+ <field eval="0" name="perm_read"/>
+ <field eval="1" name="perm_create"/>
+ </record>
</data>
</openerp>
diff --git a/addons/document/security/ir.model.access.csv b/addons/document/security/ir.model.access.csv
index 132daa1b7a6..d7aba7cbde7 100644
--- a/addons/document/security/ir.model.access.csv
+++ b/addons/document/security/ir.model.access.csv
@@ -1,6 +1,7 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_document_directory_all","document.directory all","model_document_directory",,1,0,0,0
"access_document_directory_group_document_manager","document.directory document manager","model_document_directory","base.group_system",1,1,1,1
+"access_document_directory_group_knowledge","document.directory modify","model_document_directory","base.group_document_user",1,1,1,1
"access_document_directory_group_system","document.directory group system","model_document_directory","base.group_system",1,1,1,1
"access_document_directory_content_all","document.directory.content all","model_document_directory_content",,1,0,0,0
"access_document_directory_content_group_document_manager","document.directory.content document manager","model_document_directory_content","base.group_system",1,1,1,1
diff --git a/addons/document_ftp/ftpserver/abstracted_fs.py b/addons/document_ftp/ftpserver/abstracted_fs.py
index 9c16e7dde55..65b17a52c51 100644
--- a/addons/document_ftp/ftpserver/abstracted_fs.py
+++ b/addons/document_ftp/ftpserver/abstracted_fs.py
@@ -146,16 +146,18 @@ class abstracted_fs(object):
ret = child.open_data(cr, mode)
cr.commit()
+ assert ret, "Cannot create descriptor for %r: %r" % (child, ret)
return ret
except EnvironmentError:
raise
- except Exception,e:
+ except Exception:
self._log.exception('Cannot locate item %s at node %s', objname, repr(node))
pass
try:
child = node.create_child(cr, objname, data=None)
ret = child.open_data(cr, mode)
+ assert ret, "cannot create descriptor for %r" % child
cr.commit()
return ret
except EnvironmentError:
diff --git a/addons/document_ftp/ftpserver/ftpserver.py b/addons/document_ftp/ftpserver/ftpserver.py
index 710494bb9db..bd727427541 100644
--- a/addons/document_ftp/ftpserver/ftpserver.py
+++ b/addons/document_ftp/ftpserver/ftpserver.py
@@ -2223,6 +2223,7 @@ class FTPHandler(asynchat.async_chat):
if self.restart_position:
mode = 'r+'
fd = self.try_as_current_user(self.fs.create, (datacr, datacr[2], mode + 'b'))
+ assert fd
except FTPExceptionSent:
self.fs.close_cr(datacr)
return
diff --git a/addons/document_ftp/test/document_ftp_test2.yml b/addons/document_ftp/test/document_ftp_test2.yml
index da55c353767..5da4bcd83ef 100644
--- a/addons/document_ftp/test/document_ftp_test2.yml
+++ b/addons/document_ftp/test/document_ftp_test2.yml
@@ -7,6 +7,7 @@
from document_ftp import test_easyftp as te
ftp = te.get_plain_ftp(timeout=2.0)
assert ftp.sock and (ftp.lastresp == '220'), ftp.lastresp
+ ftp.close()
-
I read the list of databases at port 8021 and confirm our db is
there
@@ -15,6 +16,7 @@
from document_ftp import test_easyftp as te
ftp = te.get_ftp_login(cr, uid, self)
assert cr.dbname in ftp.nlst("/")
+ ftp.close()
-
I try to locate the default "Documents" folder in the db.
-
@@ -22,6 +24,7 @@
from document_ftp import test_easyftp as te
ftp = te.get_ftp_login(cr, uid, self)
ftp.cwd('Documents')
+ ftp.close()
-
I create a "test.txt" file at the server (directly). The file
should have the "abcd" content
@@ -32,6 +35,7 @@
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
fdata = StringIO('abcd')
ftp.storbinary('STOR test.txt', fdata)
+ ftp.close()
-
I look for the "test.txt" file at the server
-
@@ -39,6 +43,7 @@
from document_ftp import test_easyftp as te
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
assert ftp.nlst("test.txt") == ['test.txt']
+ ftp.close()
-
I check that the content of "test.txt" is "abcd"
-
@@ -46,7 +51,9 @@
from document_ftp import test_easyftp as te
from cStringIO import StringIO
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
- assert te.get_ftp_fulldata(ftp, "test.txt") == 'abcd'
+ gotdata = te.get_ftp_fulldata(ftp, "test.txt")
+ ftp.close()
+ assert gotdata == 'abcd', 'Data: %r' % gotdata
-
I append the string 'defgh' to "test.txt"
-
@@ -56,6 +63,7 @@
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
fdata = StringIO('defgh')
ftp.storbinary('APPE test.txt', fdata)
+ ftp.close()
-
I check that the content of "text.txt" is 'abcddefgh'
-
@@ -63,7 +71,9 @@
from document_ftp import test_easyftp as te
from cStringIO import StringIO
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
- assert te.get_ftp_fulldata(ftp, "test.txt") == 'abcddefgh'
+ gotdata = te.get_ftp_fulldata(ftp, "test.txt")
+ ftp.close()
+ assert gotdata == 'abcddefgh', 'Data: %r' % gotdata
-
I try to cd into an non-existing folder 'Not-This'
-
@@ -77,7 +87,9 @@
except ftplib.error_perm:
pass
except OSError, err:
+ ftp.close()
assert err.errno == 2, err.errno
+ ftp.close()
-
I create a "test2.txt" file through FTP.
-
@@ -87,6 +99,7 @@
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
fdata = StringIO('abcd')
ftp.storbinary('STOR test2.txt', fdata)
+ ftp.close()
-
I look for the "test2.txt" file at the server
-
@@ -101,6 +114,7 @@
from cStringIO import StringIO
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
ftp.delete('test2.txt')
+ ftp.close()
-
I check at the server that test2.txt is deleted
-
@@ -116,6 +130,7 @@
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
fdata = StringIO('abcd')
ftp.storbinary('STOR test2.txt', fdata)
+ ftp.close()
-
I delete the test2.txt from the server (RPC).
-
@@ -137,6 +152,7 @@
except ftplib.error_perm: # 550 error: 'path not exists'
nlst_result = []
assert "test2.txt" not in nlst_result, "Files: %r" % nlst_result
+ ftp.close()
-
I create a "test-name.txt" file
-
@@ -146,6 +162,7 @@
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
fdata = StringIO('abcd')
ftp.storbinary('STOR test-name.txt', fdata)
+ ftp.close()
-
I rename the "test-name.txt" file through ftp.
-
@@ -153,6 +170,7 @@
from document_ftp import test_easyftp as te
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
ftp.rename("test-name.txt", "test-renamed.txt")
+ ftp.close()
-
I check that test-name.txt has been renamed.
-
@@ -166,6 +184,7 @@
except error_perm, e:
pass
assert ftp.nlst("test-renamed.txt") == ['test-renamed.txt']
+ ftp.close()
-
I create a new folder 'Test-Folder2' through FTP
-
@@ -173,6 +192,7 @@
from document_ftp import test_easyftp as te
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
ftp.mkd("Test-Folder2")
+ ftp.close()
-
I create a file 'test3.txt' at the 'Test-Folder2'
-
@@ -182,6 +202,7 @@
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2')
fdata = StringIO('abcd')
ftp.storbinary('STOR test3.txt', fdata)
+ ftp.close()
-
I try to retrieve test3.txt
-
@@ -189,6 +210,7 @@
from document_ftp import test_easyftp as te
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2')
assert ftp.nlst("test3.txt") == ['test3.txt'], "File test3.txt is not there!"
+ ftp.close()
-
I create a new folder, 'Test-Folder3', through FTP
I try to move test3.txt to 'Test-Folder3'
@@ -197,6 +219,7 @@
from document_ftp import test_easyftp as te
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
ftp.mkd("Test-Folder3")
+ ftp.close()
# TODO move
-
I remove the 'Test-Folder3'
@@ -205,6 +228,7 @@
from document_ftp import test_easyftp as te
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
ftp.rmd("Test-Folder3")
+ ftp.close()
-
I check that test3.txt is removed.
-
@@ -219,6 +243,7 @@
for i in range(0, 200):
fdata.seek(0)
ftp.storbinary('STOR test-name%s.txt' %i, fdata)
+ ftp.close()
-
I list the 200 files, check speed
-
@@ -245,6 +270,7 @@
ftp.delete('test3.txt')
for i in range(0, 200):
ftp.delete('test-name%s.txt' %i)
+ ftp.close()
-
I remove the 'Test-Folder2'
-
@@ -252,3 +278,4 @@
from document_ftp import test_easyftp as te
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
ftp.rmd("Test-Folder2")
+ ftp.close()
diff --git a/addons/document_ftp/test/document_ftp_test4.yml b/addons/document_ftp/test/document_ftp_test4.yml
index 2bb616dc1bd..2441be3bf92 100644
--- a/addons/document_ftp/test/document_ftp_test4.yml
+++ b/addons/document_ftp/test/document_ftp_test4.yml
@@ -114,6 +114,35 @@
- res_model == 'res.partner'
- res_id != False
-
+ I try to create a file directly under the Partners Testing folder
+-
+ !python {model: ir.attachment}: |
+ from document_ftp import test_easyftp as te
+ import ftplib
+ from cStringIO import StringIO
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Partners Testing')
+ fdata = StringIO('abcd')
+ try:
+ ftp.storbinary('STOR stray.txt', fdata)
+ assert False, "We should't be able to create files here"
+ except ftplib.error_perm:
+ # That's what should happen
+ pass
+-
+ I try to create a folder directly under the Partners Testing folder
+-
+ !python {model: ir.attachment}: |
+ from document_ftp import test_easyftp as te
+ import ftplib
+ from cStringIO import StringIO
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Partners Testing')
+ try:
+ ftp.mkd('Weird folder')
+ assert False, "We should't be able to create folders here"
+ except ftplib.error_perm:
+ # That's what should happen
+ pass
+-
I check that all/Partner1 also has the file
- |
Bonus Piste:
diff --git a/addons/document_ftp/test/document_ftp_test5.yml b/addons/document_ftp/test/document_ftp_test5.yml
new file mode 100644
index 00000000000..a66f409905b
--- /dev/null
+++ b/addons/document_ftp/test/document_ftp_test5.yml
@@ -0,0 +1,30 @@
+-
+ In order to check the permissions setup and functionality of the
+ document module:
+-
+ I create a testing user for the documents
+-
+ I assign some ... group to the testing user
+-
+ I create a "group testing" user, which also belongs to the same ... group
+-
+ I create a "blocked" user.
+-
+ I create (as root) a testing folder in the document hierarchy, and
+ assign ownership to the testing user, groups to the ... group.
+-
+ I create a "private" folder inside the testing folder.
+-
+ I try to read the testing folder as the testing user
+-
+ I try to read the folder as the group user, it should fail.
+-
+ I try to read the folder as the blocked user.
+-
+ I create a "group" folder, with the ... group.
+-
+ I try to read the "group" folder as the testing user
+-
+ I try to read the "group" folder as the group user
+-
+ I try to read the "group" folder as the blocked user
diff --git a/addons/document_webdav/__openerp__.py b/addons/document_webdav/__openerp__.py
index e6b8cfd3f94..6c1e24d1e96 100644
--- a/addons/document_webdav/__openerp__.py
+++ b/addons/document_webdav/__openerp__.py
@@ -57,6 +57,8 @@
'webdav_setup.xml',
],
"demo_xml" : [],
+ "test": [ #'test/webdav_test1.yml',
+ ],
"active": False,
"installable": True
}
diff --git a/addons/document_webdav/dav_fs.py b/addons/document_webdav/dav_fs.py
index 3e8e1c2b3e5..c34a323fadb 100644
--- a/addons/document_webdav/dav_fs.py
+++ b/addons/document_webdav/dav_fs.py
@@ -20,18 +20,16 @@
##############################################################################
import pooler
-import base64
-import sys
import os
import time
-from string import joinfields, split, lower
+import errno
import netsvc
import urlparse
-from DAV.constants import COLLECTION, OBJECT
-from DAV.errors import *
-from DAV.iface import *
+from DAV.constants import COLLECTION #, OBJECT
+from DAV.errors import DAV_Error, DAV_Forbidden, DAV_NotFound
+from DAV.iface import dav_interface
import urllib
from DAV.davcmd import copyone, copytree, moveone, movetree, delone, deltree
@@ -74,6 +72,89 @@ def _str2time(cre):
cre = cre[:fdot]
return time.mktime(time.strptime(cre,'%Y-%m-%d %H:%M:%S')) + frac
+class BoundStream2(object):
+ """Wraps around a seekable buffer, reads a determined range of data
+
+ Note that the supplied stream object MUST support a size() which
+ should return its data length (in bytes).
+
+ A variation of the class in websrv_lib.py
+ """
+
+ def __init__(self, stream, offset=None, length=None, chunk_size=None):
+ self._stream = stream
+ self._offset = offset or 0
+ self._length = length or self._stream.size()
+ self._rem_length = length
+ assert length and isinstance(length, (int, long))
+ assert length and length >= 0, length
+ self._chunk_size = chunk_size
+ if offset is not None:
+ self._stream.seek(offset)
+
+ def read(self, size=-1):
+ if not self._stream:
+ raise IOError(errno.EBADF, "read() without stream")
+
+ if self._rem_length == 0:
+ return ''
+ elif self._rem_length < 0:
+ raise EOFError()
+
+ rsize = self._rem_length
+ if size > 0 and size < rsize:
+ rsize = size
+ if self._chunk_size and self._chunk_size < rsize:
+ rsize = self._chunk_size
+
+ data = self._stream.read(rsize)
+ self._rem_length -= len(data)
+
+ return data
+
+ def __len__(self):
+ return self._length
+
+ def tell(self):
+ res = self._stream.tell()
+ if self._offset:
+ res -= self._offset
+ return res
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ return self.read(65536)
+
+ def seek(self, pos, whence=os.SEEK_SET):
+ """ Seek, computing our limited range
+ """
+ if whence == os.SEEK_SET:
+ if pos < 0 or pos > self._length:
+ raise IOError(errno.EINVAL,"Cannot seek")
+ self._stream.seek(pos - self._offset)
+ self._rem_length = self._length - pos
+ elif whence == os.SEEK_CUR:
+ if pos > 0:
+ if pos > self._rem_length:
+ raise IOError(errno.EINVAL,"Cannot seek past end")
+ elif pos < 0:
+ oldpos = self.tell()
+ if oldpos + pos < 0:
+ raise IOError(errno.EINVAL,"Cannot seek before start")
+ self._stream.seek(pos, os.SEEK_CUR)
+ self._rem_length -= pos
+ elif whence == os.SEEK_END:
+ if pos > 0:
+ raise IOError(errno.EINVAL,"Cannot seek past end")
+ else:
+ if self._length + pos < 0:
+ raise IOError(errno.EINVAL,"Cannot seek before start")
+ newpos = self._offset + self._length + pos
+ self._stream.seek(newpos, os.SEEK_SET)
+ self._rem_length = 0 - pos
+
class openerp_dav_handler(dav_interface):
"""
This class models a OpenERP interface for the DAV server
@@ -396,11 +477,28 @@ class openerp_dav_handler(dav_interface):
node = self.uri2object(cr, uid, pool, uri2)
if not node:
raise DAV_NotFound2(uri2)
+ # TODO: if node is a collection, for some specific set of
+ # clients ( web browsers; available in node context),
+ # we may return a pseydo-html page with the directory listing.
try:
+ res = node.open_data(cr,'r')
if rrange:
- self.parent.log_error("Doc get_data cannot use range")
- raise DAV_Error(409)
- datas = node.get_data(cr)
+ assert isinstance(rrange, (tuple,list))
+ start, end = map(long, rrange)
+ if not start:
+ start = 0
+ assert start >= 0
+ if end and end < start:
+ self.parent.log_error("Invalid range for data: %s-%s" %(start, end))
+ raise DAV_Error(416, "Invalid range for data")
+ if end:
+ if end >= res.size():
+ raise DAV_Error(416, "Requested data exceeds available size")
+ length = (end + 1) - start
+ else:
+ length = res.size() - start
+ res = BoundStream2(res, offset=start, length=length)
+
except TypeError,e:
# for the collections that return this error, the DAV standard
# says we'd better just return 200 OK with empty data
@@ -413,7 +511,7 @@ class openerp_dav_handler(dav_interface):
self.parent.log_error("GET exception: %s",str(e))
self.parent.log_message("Exc: %s", traceback.format_exc())
raise DAV_Error, 409
- return str(datas) # FIXME!
+ return res
finally:
if cr: cr.close()
@@ -584,8 +682,7 @@ class openerp_dav_handler(dav_interface):
node = False
objname = uri2[-1]
- ext = objname.find('.') >0 and objname.split('.')[1] or False
-
+
ret = None
if not node:
dir_node = self.uri2object(cr, uid, pool, uri2[:-1])
@@ -668,7 +765,7 @@ class openerp_dav_handler(dav_interface):
"""
if uri[-1]=='/':uri=uri[:-1]
res=delone(self,uri)
- parent='/'.join(uri.split('/')[:-1])
+ # parent='/'.join(uri.split('/')[:-1])
return res
def deltree(self, uri):
@@ -680,7 +777,7 @@ class openerp_dav_handler(dav_interface):
"""
if uri[-1]=='/':uri=uri[:-1]
res=deltree(self, uri)
- parent='/'.join(uri.split('/')[:-1])
+ # parent='/'.join(uri.split('/')[:-1])
return res
diff --git a/addons/document_webdav/document_webdav.py b/addons/document_webdav/document_webdav.py
index 28b70c8d7e4..2e1eb8cabd2 100644
--- a/addons/document_webdav/document_webdav.py
+++ b/addons/document_webdav/document_webdav.py
@@ -37,7 +37,6 @@ class document_davdir(osv.osv):
dbro = self.browse(cr, uid, ids, context=context)
if dynamic:
- assert dbro.type == 'directory'
return nodes.node_res_obj
elif dbro.type == 'directory':
return nodes.node_dir
diff --git a/addons/document_webdav/i18n/it.po b/addons/document_webdav/i18n/it.po
index 75c073edf1d..f384ee12f77 100644
--- a/addons/document_webdav/i18n/it.po
+++ b/addons/document_webdav/i18n/it.po
@@ -8,50 +8,52 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-08-18 10:32+0000\n"
-"Last-Translator: OpenERP Administrators <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 11:57+0000\n"
+"Last-Translator: Nicola Riolini - Micronaet <Unknown>\n"
"Language-Team: Italian <it@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: 2010-10-30 05:51+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: document_webdav
#: model:ir.model,name:document_webdav.model_document_webdav_dir_property
msgid "document.webdav.dir.property"
-msgstr ""
+msgstr "document.webdav.dir.property"
#. module: document_webdav
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
-msgstr ""
+msgstr "XML non valido per la struttura della vista!"
#. module: document_webdav
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
+"Il nome dell'oggetto deve iniziare per “x_” e non contenere alcun carattere "
+"speciale!"
#. module: document_webdav
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Nome del modello non valido nella definizione dell'azione"
#. module: document_webdav
#: constraint:document.directory:0
msgid "Error! You can not create recursive Directories."
-msgstr ""
+msgstr "Errore! Non è possibile creare directory ricorsive."
#. module: document_webdav
#: view:document.webdav.dir.property:0
msgid "Group By..."
-msgstr ""
+msgstr "Raggruppa per..."
#. module: document_webdav
#: model:ir.module.module,shortdesc:document_webdav.module_meta_information
msgid "WebDAV server for Document Management"
-msgstr ""
+msgstr "server WebDAV per Gestione Documentale"
#. module: document_webdav
#: view:document.webdav.dir.property:0
@@ -62,17 +64,17 @@ msgstr ""
#. module: document_webdav
#: field:document.directory,dav_prop_ids:0
msgid "DAV properties"
-msgstr ""
+msgstr "Proprietà DAV"
#. module: document_webdav
#: view:document.directory:0
msgid "Dynamic context"
-msgstr ""
+msgstr "Contesto dinamico"
#. module: document_webdav
#: view:document.directory:0
msgid "These properties will be added to WebDAV requests"
-msgstr ""
+msgstr "Queste proprietà verranno aggiunte alle richieste WebDAV"
#. module: document_webdav
#: field:document.webdav.dir.property,do_subst:0
@@ -82,18 +84,18 @@ msgstr ""
#. module: document_webdav
#: constraint:ir.ui.menu:0
msgid "Error ! You can not create recursive Menu."
-msgstr ""
+msgstr "Errore! Non è possibile creare un menù ricorsivo."
#. module: document_webdav
#: view:document.directory:0
msgid "WebDAV properties"
-msgstr ""
+msgstr "Proprietà WebDAV"
#. module: document_webdav
#: field:document.webdav.dir.property,dir_id:0
#: model:ir.model,name:document_webdav.model_document_directory
msgid "Directory"
-msgstr ""
+msgstr "Directory"
#. module: document_webdav
#: field:document.webdav.dir.property,value:0
@@ -108,18 +110,18 @@ msgstr ""
#. module: document_webdav
#: model:ir.ui.menu,name:document_webdav.menu_dir_props
msgid "DAV properties for folders"
-msgstr ""
+msgstr "Proprietà DAV per cartelle"
#. module: document_webdav
#: view:document.directory:0
#: view:document.webdav.dir.property:0
msgid "Properties"
-msgstr ""
+msgstr "Proprietà"
#. module: document_webdav
#: view:document.webdav.dir.property:0
msgid "Dir"
-msgstr ""
+msgstr "Dir"
#. module: document_webdav
#: field:document.webdav.dir.property,name:0
diff --git a/addons/document_webdav/test/webdav_test1.yml b/addons/document_webdav/test/webdav_test1.yml
new file mode 100644
index 00000000000..a0f15c10fc9
--- /dev/null
+++ b/addons/document_webdav/test/webdav_test1.yml
@@ -0,0 +1,59 @@
+-
+ In order to test the document_ftp functionality
+-
+ I open the HTTP port and perform an OPTIONS request to the server
+-
+ !python {model: ir.attachment}: |
+ from document_webdav import test_davclient as te
+ reload(te) # reload..
+ dc = te.DAVClient()
+ dc.gd_options()
+ dc.get_creds(self, cr, uid)
+ dc.gd_options(path=cr.dbname, expect={'DAV': ['1',]})
+-
+ I will test the propnames at the document root
+-
+ !python {model: ir.attachment}: |
+ from document_webdav import test_davclient as te
+ dc = te.DAVClient()
+ dc.get_creds(self, cr, uid)
+ dc.gd_propname(path=cr.dbname+'/Documents/')
+-
+ I will test the ETags of the document root
+-
+ !python {model: ir.attachment}: |
+ from document_webdav import test_davclient as te
+ dc = te.DAVClient()
+ dc.get_creds(self, cr, uid)
+ dc.gd_getetag(path=cr.dbname+'/Documents/')
+
+-
+ I will now ls -l the document root.
+-
+ !python {model: ir.attachment}: |
+ from document_webdav import test_davclient as te
+ dc = te.DAVClient()
+ dc.get_creds(self, cr, uid)
+ res = dc.gd_lsl(path=cr.dbname+'/Documents/')
+ for lin in res:
+ print "%(type)s\t%(uid)s\t%(gid)s\t%(size)s\t%(mtime)s\t%(name)s" % lin
+-
+ I will put a file to the server
+-
+ !python {model: ir.attachment}: |
+ from document_webdav import test_davclient as te
+ import addons
+ dc = te.DAVClient()
+ dc.get_creds(self, cr, uid)
+ tdp = addons.get_module_resource('document_webdav', 'test_davclient.py')
+ res = dc.gd_put(path=cr.dbname+'/Documents/test_davclient.py', srcpath=tdp)
+-
+ I will try to get the file from the root
+-
+ !python {model: ir.attachment}: |
+ from document_webdav import test_davclient as te
+ import addons
+ dc = te.DAVClient()
+ dc.get_creds(self, cr, uid)
+ tdp = addons.get_module_resource('document_webdav', 'test_davclient.py')
+ res = dc.gd_get(path=cr.dbname+'/Documents/test_davclient.py', crange=(4,508), compare=tdp)
diff --git a/addons/document_webdav/test_davclient.py b/addons/document_webdav/test_davclient.py
new file mode 100644
index 00000000000..ac40d1a3d30
--- /dev/null
+++ b/addons/document_webdav/test_davclient.py
@@ -0,0 +1,702 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+#
+# Copyright P. Christeas <p_christ@hol.gr> 2008,2009
+# Copyright OpenERP SA. (http://www.openerp.com) 2010
+#
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+###############################################################################
+
+""" A trivial HTTP/WebDAV client, used for testing the server
+"""
+# code taken from the 'http-client.py' script:
+# http://git.hellug.gr/?p=xrg/openerp;a=history;f=tests/http-client.py;hb=refs/heads/xrg-60
+
+import gzip
+import logging
+import xml.dom.minidom
+
+import httplib
+
+from tools import config
+from xmlrpclib import Transport, ProtocolError
+import StringIO
+import base64
+
+log = logging.getLogger('http-client')
+
+class HTTP11(httplib.HTTP):
+ _http_vsn = 11
+ _http_vsn_str = 'HTTP/1.1'
+
+class PersistentTransport(Transport):
+ """Handles an HTTP transaction to an XML-RPC server, persistently."""
+
+ def __init__(self, use_datetime=0):
+ self._use_datetime = use_datetime
+ self._http = {}
+ log.debug("Using persistent transport")
+
+ def make_connection(self, host):
+ # create a HTTP connection object from a host descriptor
+ if not self._http.has_key(host):
+ host, extra_headers, x509 = self.get_host_info(host)
+ self._http[host] = HTTP11(host)
+ log.debug("New connection to %s", host)
+ return self._http[host]
+
+ def get_host_info(self, host):
+ host, extra_headers, x509 = Transport.get_host_info(self,host)
+ if extra_headers == None:
+ extra_headers = []
+
+ extra_headers.append( ( 'Connection', 'keep-alive' ))
+
+ return host, extra_headers, x509
+
+ def _parse_response(self, file, sock, response):
+ """ read response from input file/socket, and parse it
+ We are persistent, so it is important to only parse
+ the right amount of input
+ """
+
+ p, u = self.getparser()
+
+ if response.msg.get('content-encoding') == 'gzip':
+ gzdata = StringIO.StringIO()
+ while not response.isclosed():
+ rdata = response.read(1024)
+ if not rdata:
+ break
+ gzdata.write(rdata)
+ gzdata.seek(0)
+ rbuffer = gzip.GzipFile(mode='rb', fileobj=gzdata)
+ while True:
+ respdata = rbuffer.read()
+ if not respdata:
+ break
+ p.feed(respdata)
+ else:
+ while not response.isclosed():
+ rdata = response.read(1024)
+ if not rdata:
+ break
+ p.feed(rdata)
+ if len(rdata)<1024:
+ break
+
+ p.close()
+ return u.close()
+
+ def request(self, host, handler, request_body, verbose=0):
+ # issue XML-RPC request
+
+ h = self.make_connection(host)
+ if verbose:
+ h.set_debuglevel(1)
+
+ self.send_request(h, handler, request_body)
+ self.send_host(h, host)
+ self.send_user_agent(h)
+ self.send_content(h, request_body)
+
+ resp = h._conn.getresponse()
+ # TODO: except BadStatusLine, e:
+
+ errcode, errmsg, headers = resp.status, resp.reason, resp.msg
+
+
+ if errcode != 200:
+ raise ProtocolError(
+ host + handler,
+ errcode, errmsg,
+ headers
+ )
+
+ self.verbose = verbose
+
+ try:
+ sock = h._conn.sock
+ except AttributeError:
+ sock = None
+
+ return self._parse_response(h.getfile(), sock, resp)
+
+class CompressedTransport(PersistentTransport):
+ def send_content(self, connection, request_body):
+ connection.putheader("Content-Type", "text/xml")
+
+ if len(request_body) > 512 or True:
+ buffer = StringIO.StringIO()
+ output = gzip.GzipFile(mode='wb', fileobj=buffer)
+ output.write(request_body)
+ output.close()
+ buffer.seek(0)
+ request_body = buffer.getvalue()
+ connection.putheader('Content-Encoding', 'gzip')
+
+ connection.putheader("Content-Length", str(len(request_body)))
+ connection.putheader("Accept-Encoding",'gzip')
+ connection.endheaders()
+ if request_body:
+ connection.send(request_body)
+
+ def send_request(self, connection, handler, request_body):
+ connection.putrequest("POST", handler, skip_accept_encoding=1)
+
+class SafePersistentTransport(PersistentTransport):
+ def make_connection(self, host):
+ # create a HTTP connection object from a host descriptor
+ if not self._http.has_key(host):
+ host, extra_headers, x509 = self.get_host_info(host)
+ self._http[host] = httplib.HTTPS(host, None, **(x509 or {}))
+ log.debug("New connection to %s", host)
+ return self._http[host]
+
+class AuthClient(object):
+ def getAuth(self, atype, realm):
+ raise NotImplementedError("Cannot authenticate for %s" % atype)
+
+ def resolveFailedRealm(self, realm):
+ """ Called when, using a known auth type, the realm is not in cache
+ """
+ raise NotImplementedError("Cannot authenticate for realm %s" % realm)
+
+class BasicAuthClient(AuthClient):
+ def __init__(self):
+ self._realm_dict = {}
+
+ def getAuth(self, atype, realm):
+ if atype != 'Basic' :
+ return super(BasicAuthClient,self).getAuth(atype, realm)
+
+ if not self._realm_dict.has_key(realm):
+ log.debug("realm dict: %r", self._realm_dict)
+ log.debug("missing key: \"%s\"" % realm)
+ self.resolveFailedRealm(realm)
+ return 'Basic '+ self._realm_dict[realm]
+
+ def addLogin(self, realm, username, passwd):
+ """ Add some known username/password for a specific login.
+ This function should be called once, for each realm
+ that we want to authenticate against
+ """
+ assert realm
+ auths = base64.encodestring(username + ':' + passwd)
+ if auths[-1] == "\n":
+ auths = auths[:-1]
+ self._realm_dict[realm] = auths
+
+class addAuthTransport:
+ """ Intermediate class that authentication algorithm to http transport
+ """
+
+ def setAuthClient(self, authobj):
+ """ Set the authentication client object.
+ This method must be called before any request is issued, that
+ would require http authentication
+ """
+ assert isinstance(authobj, AuthClient)
+ self._auth_client = authobj
+
+
+ def request(self, host, handler, request_body, verbose=0):
+ # issue XML-RPC request
+
+ h = self.make_connection(host)
+ if verbose:
+ h.set_debuglevel(1)
+
+ tries = 0
+ atype = None
+ realm = None
+
+ while(tries < 3):
+ self.send_request(h, handler, request_body)
+ self.send_host(h, host)
+ self.send_user_agent(h)
+ if atype:
+ # This line will bork if self.setAuthClient has not
+ # been issued. That is a programming error, fix your code!
+ auths = self._auth_client.getAuth(atype, realm)
+ log.debug("sending authorization: %s", auths)
+ h.putheader('Authorization', auths)
+ self.send_content(h, request_body)
+
+ resp = h._conn.getresponse()
+ # except BadStatusLine, e:
+ tries += 1
+
+ if resp.status == 401:
+ if 'www-authenticate' in resp.msg:
+ (atype,realm) = resp.msg.getheader('www-authenticate').split(' ',1)
+ data1 = resp.read()
+ if data1:
+ log.warning("Why have data on a 401 auth. message?")
+ if realm.startswith('realm="') and realm.endswith('"'):
+ realm = realm[7:-1]
+ log.debug("Resp: %r %r", resp.version,resp.isclosed(), resp.will_close)
+ log.debug("Want to do auth %s for realm %s", atype, realm)
+ if atype != 'Basic':
+ raise ProtocolError(host+handler, 403,
+ "Unknown authentication method: %s" % atype, resp.msg)
+ continue # with the outer while loop
+ else:
+ raise ProtocolError(host+handler, 403,
+ 'Server-incomplete authentication', resp.msg)
+
+ if resp.status != 200:
+ raise ProtocolError( host + handler,
+ resp.status, resp.reason, resp.msg )
+
+ self.verbose = verbose
+
+ try:
+ sock = h._conn.sock
+ except AttributeError:
+ sock = None
+
+ return self._parse_response(h.getfile(), sock, resp)
+
+ raise ProtocolError(host+handler, 403, "No authentication",'')
+
+class PersistentAuthTransport(addAuthTransport,PersistentTransport):
+ pass
+
+class PersistentAuthCTransport(addAuthTransport,CompressedTransport):
+ pass
+
+class HTTPSConnection(httplib.HTTPSConnection):
+ certs_file = None
+ def connect(self):
+ "Connect to a host on a given (SSL) port. check the certificate"
+ import socket, ssl
+
+ if HTTPSConnection.certs_file:
+ ca_certs = HTTPSConnection.certs_file
+ cert_reqs = ssl.CERT_REQUIRED
+ else:
+ ca_certs = None
+ cert_reqs = ssl.CERT_NONE
+ sock = socket.create_connection((self.host, self.port), self.timeout)
+ self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file,
+ ca_certs=ca_certs,
+ cert_reqs=cert_reqs)
+
+
+ def getpeercert(self):
+ import ssl
+ cert = None
+ if self.sock:
+ cert = self.sock.getpeercert()
+ else:
+ cert = ssl.get_server_certificate((self.host,self.port),
+ ssl_version=ssl.PROTOCOL_SSLv23 )
+ lf = (len(ssl.PEM_FOOTER)+1)
+ if cert[0-lf] != '\n':
+ cert = cert[:0-lf]+'\n'+cert[0-lf:]
+ log.debug("len-footer: %s cert: %r", lf, cert[0-lf])
+
+ return cert
+
+
+class DAVClient(object):
+ """An instance of a WebDAV client, connected to the OpenERP server
+ """
+
+ def __init__(self, user=None, passwd=None, dbg=0, use_ssl=False, useragent=False):
+ if use_ssl:
+ self.host = config.get_misc('httpsd', 'interface', False)
+ self.port = config.get_misc('httpsd', 'port', 8071)
+ if not self.host:
+ self.host = config.get('xmlrpcs_interface')
+ self.port = config.get('xmlrpcs_port')
+ else:
+ self.host = config.get_misc('httpd', 'interface')
+ self.port = config.get_misc('httpd', 'port', 8069)
+ if not self.host:
+ self.host = config.get('xmlrpc_interface')
+ self.port = config.get('xmlrpc_port') or self.port
+ if self.host == '0.0.0.0' or not self.host:
+ self.host = '127.0.0.1'
+ self.port = int(self.port)
+ if not config.get_misc('webdav','enable',True):
+ raise Exception("WebDAV is disabled, cannot continue")
+ self.davpath = '/' + config.get_misc('webdav','vdir','webdav')
+ self.user = user
+ self.passwd = passwd
+ self.dbg = dbg
+ self.hdrs = {}
+ if useragent:
+ self.set_useragent(useragent)
+
+ def get_creds(self, obj, cr, uid):
+ """Read back the user credentials from cr, uid
+
+ @param obj is any orm object, in order to use its pool
+ @param uid is the numeric id, which we will try to reverse resolve
+
+ note: this is a hackish way to get the credentials. It is expected
+ to break if "base_crypt" is used.
+ """
+ ruob = obj.pool.get('res.users')
+ res = ruob.read(cr, 1, [uid,], ['login', 'password'])
+ assert res, "uid %s not found" % uid
+ self.user = res[0]['login']
+ self.passwd = res[0]['password']
+ return True
+
+ def set_useragent(self, uastr):
+ """ Set the user-agent header to something meaningful.
+ Some shorthand names will be replaced by stock strings.
+ """
+ if uastr in ('KDE4', 'Korganizer'):
+ self.hdrs['User-Agent'] = "Mozilla/5.0 (compatible; Konqueror/4.4; Linux) KHTML/4.4.3 (like Gecko)"
+ elif uastr == 'iPhone3':
+ self.hdrs['User-Agent'] = "DAVKit/5.0 (765); iCalendar/5.0 (79); iPhone/4.1 8B117"
+ elif uastr == "MacOS":
+ self.hdrs['User-Agent'] = "WebDAVFS/1.8 (01808000) Darwin/9.8.0 (i386)"
+ else:
+ self.hdrs['User-Agent'] = uastr
+
+ def _http_request(self, path, method='GET', hdrs=None, body=None):
+ if not hdrs:
+ hdrs = {}
+ import base64
+ dbg = self.dbg
+ hdrs.update(self.hdrs)
+ log.debug("Getting %s http://%s:%d/%s", method, self.host, self.port, path)
+ conn = httplib.HTTPConnection(self.host, port=self.port)
+ conn.set_debuglevel(dbg)
+ if not path:
+ path = "/index.html"
+ if not hdrs.has_key('Connection'):
+ hdrs['Connection']= 'keep-alive'
+ conn.request(method, path, body, hdrs )
+ try:
+ r1 = conn.getresponse()
+ except httplib.BadStatusLine, bsl:
+ log.warning("Bad status line: %s", bsl.line)
+ raise Exception('Bad status line')
+ if r1.status == 401: # and r1.headers:
+ if 'www-authenticate' in r1.msg:
+ (atype,realm) = r1.msg.getheader('www-authenticate').split(' ',1)
+ data1 = r1.read()
+ if not self.user:
+ raise Exception('Must auth, have no user/pass!')
+ log.debug("Ver: %s, closed: %s, will close: %s", r1.version,r1.isclosed(), r1.will_close)
+ log.debug("Want to do auth %s for realm %s", atype, realm)
+ if atype == 'Basic' :
+ auths = base64.encodestring(self.user + ':' + self.passwd)
+ if auths[-1] == "\n":
+ auths = auths[:-1]
+ hdrs['Authorization']= 'Basic '+ auths
+ #sleep(1)
+ conn.request(method, path, body, hdrs )
+ r1 = conn.getresponse()
+ else:
+ raise Exception("Unknown auth type %s" %atype)
+ else:
+ log.warning("Got 401, cannot auth")
+ raise Exception('No auth')
+
+ log.debug("Reponse: %s %s",r1.status, r1.reason)
+ data1 = r1.read()
+ if method != 'GET':
+ log.debug("Body:\n%s\nEnd of body", data1)
+ try:
+ ctype = r1.msg.getheader('content-type')
+ if ctype and ';' in ctype:
+ ctype, encoding = ctype.split(';',1)
+ if ctype == 'text/xml':
+ doc = xml.dom.minidom.parseString(data1)
+ log.debug("XML Body:\n %s", doc.toprettyxml(indent="\t"))
+ except Exception:
+ log.warning("could not print xml", exc_info=True)
+ pass
+ conn.close()
+ return r1.status, r1.msg, data1
+
+ def _assert_headers(self, expect, msg):
+ """ Assert that the headers in msg contain the expect values
+ """
+ for k, v in expect.items():
+ hval = msg.getheader(k)
+ if not hval:
+ raise AssertionError("Header %s not defined in http response" % k)
+ if isinstance(v, (list, tuple)):
+ delim = ','
+ hits = map(str.strip, hval.split(delim))
+ mvits= []
+ for vit in v:
+ if vit not in hits:
+ mvits.append(vit)
+ if mvits:
+ raise AssertionError("HTTP header \"%s\" is missing: %s" %(k, ', '.join(mvits)))
+ else:
+ if hval.strip() != v.strip():
+ raise AssertionError("HTTP header \"%s: %s\"" % (k, hval))
+
+ def gd_options(self, path='*', expect=None):
+ """ Test the http options functionality
+ If a dictionary is defined in expect, those options are
+ asserted.
+ """
+ if path != '*':
+ path = self.davpath + path
+ hdrs = { 'Content-Length': 0
+ }
+ s, m, d = self._http_request(path, method='OPTIONS', hdrs=hdrs)
+ assert s == 200, "Status: %r" % s
+ assert 'OPTIONS' in m.getheader('Allow')
+ log.debug('Options: %r', m.getheader('Allow'))
+
+ if expect:
+ self._assert_headers(expect, m)
+
+ def _parse_prop_response(self, data):
+ """ Parse a propfind/propname response
+ """
+ def getText(node):
+ rc = []
+ for node in node.childNodes:
+ if node.nodeType == node.TEXT_NODE:
+ rc.append(node.data)
+ return ''.join(rc)
+
+ def getElements(node, namespaces=None, strict=False):
+ for cnod in node.childNodes:
+ if cnod.nodeType != node.ELEMENT_NODE:
+ if strict:
+ log.debug("Found %r inside <%s>", cnod, node.tagName)
+ continue
+ if namespaces and (cnod.namespaceURI not in namespaces):
+ log.debug("Ignoring <%s> in <%s>", cnod.tagName, node.localName)
+ continue
+ yield cnod
+
+ nod = xml.dom.minidom.parseString(data)
+ nod_r = nod.documentElement
+ res = {}
+ assert nod_r.localName == 'multistatus', nod_r.tagName
+ for resp in nod_r.getElementsByTagNameNS('DAV:', 'response'):
+ href = None
+ status = 200
+ res_nss = {}
+ for cno in getElements(resp, namespaces=['DAV:',]):
+ if cno.localName == 'href':
+ assert href is None, "Second href in same response"
+ href = getText(cno)
+ elif cno.localName == 'propstat':
+ for pno in getElements(cno, namespaces=['DAV:',]):
+ rstatus = None
+ if pno.localName == 'prop':
+ for prop in getElements(pno):
+ key = prop.localName
+ tval = getText(prop).strip()
+ val = tval or (True, rstatus or status)
+ if prop.namespaceURI == 'DAV:' and prop.localName == 'resourcetype':
+ val = 'plain'
+ for rte in getElements(prop, namespaces=['DAV:',]):
+ # Note: we only look at DAV:... elements, we
+ # actually expect only one DAV:collection child
+ val = rte.localName
+ res_nss.setdefault(prop.namespaceURI,{})[key] = val
+ elif pno.localName == 'status':
+ rstr = getText(pno)
+ htver, sta, msg = rstr.split(' ', 3)
+ assert htver == 'HTTP/1.1'
+ rstatus = int(sta)
+ else:
+ log.debug("What is <%s> inside a <propstat>?", pno.tagName)
+
+ else:
+ log.debug("Unknown node: %s", cno.tagName)
+
+ res.setdefault(href,[]).append((status, res_nss))
+
+ return res
+
+ def gd_propfind(self, path, props=None, depth=0):
+ if not props:
+ propstr = '<allprop/>'
+ else:
+ propstr = '<prop>'
+ nscount = 0
+ for p in props:
+ ns = None
+ if isinstance(p, tuple):
+ p, ns = p
+ if ns is None or ns == 'DAV:':
+ propstr += '<%s/>' % p
+ else:
+ propstr += '<ns%d:%s xmlns:ns%d="%s" />' %(nscount, p, nscount, ns)
+ nscount += 1
+ propstr += '</prop>'
+
+ body="""<?xml version="1.0" encoding="utf-8"?>
+ <propfind xmlns="DAV:">%s</propfind>""" % propstr
+ hdrs = { 'Content-Type': 'text/xml; charset=utf-8',
+ 'Accept': 'text/xml',
+ 'Depth': depth,
+ }
+
+ s, m, d = self._http_request(self.davpath + path, method='PROPFIND',
+ hdrs=hdrs, body=body)
+ assert s == 207, "Bad status: %s" % s
+ ctype = m.getheader('Content-Type').split(';',1)[0]
+ assert ctype == 'text/xml', m.getheader('Content-Type')
+ res = self._parse_prop_response(d)
+ if depth == 0:
+ assert len(res) == 1
+ res = res.values()[0]
+ else:
+ assert len(res) >= 1
+ return res
+
+
+ def gd_propname(self, path, depth=0):
+ body="""<?xml version="1.0" encoding="utf-8"?>
+ <propfind xmlns="DAV:"><propname/></propfind>"""
+ hdrs = { 'Content-Type': 'text/xml; charset=utf-8',
+ 'Accept': 'text/xml',
+ 'Depth': depth
+ }
+ s, m, d = self._http_request(self.davpath + path, method='PROPFIND',
+ hdrs=hdrs, body=body)
+ assert s == 207, "Bad status: %s" % s
+ ctype = m.getheader('Content-Type').split(';',1)[0]
+ assert ctype == 'text/xml', m.getheader('Content-Type')
+ res = self._parse_prop_response(d)
+ if depth == 0:
+ assert len(res) == 1
+ res = res.values()[0]
+ else:
+ assert len(res) >= 1
+ return res
+
+ def gd_getetag(self, path, depth=0):
+ return self.gd_propfind(path, props=['getetag',], depth=depth)
+
+ def gd_lsl(self, path):
+ """ Return a list of 'ls -l' kind of data for a folder
+
+ This is based on propfind.
+ """
+
+ lspairs = [ ('name', 'displayname', 'n/a'), ('size', 'getcontentlength', '0'),
+ ('type', 'resourcetype', '----------'), ('uid', 'owner', 'nobody'),
+ ('gid', 'group', 'nogroup'), ('mtime', 'getlastmodified', 'n/a'),
+ ('mime', 'getcontenttype', 'application/data'), ]
+
+ propnames = [ l[1] for l in lspairs]
+ propres = self.gd_propfind(path, props=propnames, depth=1)
+
+ res = []
+ for href, pr in propres.items():
+ lsline = {}
+ for st, nsdic in pr:
+ davprops = nsdic['DAV:']
+ if st == 200:
+ for lsp in lspairs:
+ if lsp[1] in davprops:
+ if lsp[1] == 'resourcetype':
+ if davprops[lsp[1]] == 'collection':
+ lsline[lsp[0]] = 'dr-xr-x---'
+ else:
+ lsline[lsp[0]] = '-r-xr-x---'
+ else:
+ lsline[lsp[0]] = davprops[lsp[1]]
+ elif st in (404, 403):
+ for lsp in lspairs:
+ if lsp[1] in davprops:
+ lsline[lsp[0]] = lsp[2]
+ else:
+ log.debug("Strange status: %s", st)
+
+ res.append(lsline)
+
+ return res
+
+ def gd_get(self, path, crange=None, mime=None, compare=None):
+ """ HTTP GET for path, supporting Partial ranges
+ """
+ hdrs = { 'Accept': mime or '*/*', }
+ if crange:
+ if isinstance(crange, tuple):
+ crange = [crange,]
+ if not isinstance(crange, list):
+ raise TypeError("Range must be a tuple or list of tuples")
+ rs = []
+ for r in crange:
+ rs.append('%d-%d' % r)
+ hdrs['Range'] = 'bytes='+ (','.join(rs))
+ s, m, d = self._http_request(self.davpath + path, method='GET', hdrs=hdrs)
+ assert s in (200, 206), "Bad status: %s" % s
+ ctype = m.getheader('Content-Type')
+ if ctype and ';' in ctype:
+ ctype = ctype.split(';',1)[0]
+ if mime:
+ assert ctype == mime, m.getheader('Content-Type')
+ rrange = None
+ rrh = m.getheader('Content-Range')
+ if rrh:
+ assert rrh.startswith('bytes '), rrh
+ rrh=rrh[6:].split('/',1)[0]
+ rrange = map(int, rrh.split('-',1))
+ if compare:
+ # we need to compare the returned data with that of compare
+ fd = open(compare, 'rb')
+ d2 = fd.read()
+ fd.close()
+ if crange:
+ if len(crange) > 1:
+ raise NotImplementedError
+ r = crange[0]
+ d2 = d2[r[0]:r[1]+1]
+ assert d2 == d, "Data does not match"
+ return ctype, rrange, d
+
+ def gd_put(self, path, body=None, srcpath=None, mime=None, noclobber=False, ):
+ """ HTTP PUT
+ @param noclobber will prevent overwritting a resource (If-None-Match)
+ @param mime will set the content-type
+ """
+ hdrs = { }
+ if not (body or srcpath):
+ raise ValueError("PUT must have something to send")
+ if (not body) and srcpath:
+ fd = open(srcpath, 'rb')
+ body = fd.read()
+ fd.close()
+ if mime:
+ hdrs['Content-Type'] = mime
+ if noclobber:
+ hdrs['If-None-Match'] = '*'
+ s, m, d = self._http_request(self.davpath + path, method='PUT',
+ hdrs=hdrs, body=body)
+ assert s == (201), "Bad status: %s" % s
+ etag = m.getheader('ETag')
+ return etag or True
+
+#eof \ No newline at end of file
diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py
index df2c4a871f6..0e5973c95b3 100644
--- a/addons/document_webdav/webdav_server.py
+++ b/addons/document_webdav/webdav_server.py
@@ -28,7 +28,6 @@
import netsvc
-import tools
from dav_fs import openerp_dav_handler
from tools.config import config
from DAV.WebDAVServer import DAVRequestHandler
@@ -36,10 +35,13 @@ from service.websrv_lib import HTTPDir, FixSendError, HttpOptions
from BaseHTTPServer import BaseHTTPRequestHandler
import urlparse
import urllib
-from string import atoi,split
+import re
+from string import atoi
from DAV.errors import *
# from DAV.constants import DAV_VERSION_1, DAV_VERSION_2
+khtml_re = re.compile(r' KHTML/([0-9\.]+) ')
+
def OpenDAVConfig(**kw):
class OpenDAV:
def __init__(self, **kw):
@@ -96,7 +98,6 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
""" Our uri scheme removes the /webdav/ component from there, so we
need to mangle the header, too.
"""
- dest = self.headers['Destination']
up = urlparse.urlparse(urllib.unquote(self.headers['Destination']))
if up.path.startswith(self.davpath):
self.headers['Destination'] = up.path[len(self.davpath):]
@@ -131,6 +132,16 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
# the BufferingHttpServer will send Connection: close , while
# the BaseHTTPRequestHandler will only accept int code.
# workaround both of them.
+ if self.command == 'PROPFIND' and int(code) == 404:
+ kh = khtml_re.search(self.headers.get('User-Agent',''))
+ if kh and (kh.group(1) < '4.5'):
+ # There is an ugly bug in all khtml < 4.5.x, where the 404
+ # response is treated as an immediate error, which would even
+ # break the flow of a subsequent PUT request. At the same time,
+ # the 200 response (rather than 207 with content) is treated
+ # as "path not exist", so we send this instead
+ # https://bugs.kde.org/show_bug.cgi?id=166081
+ code = 200
BaseHTTPRequestHandler.send_response(self, int(code), message)
def send_header(self, key, value):
@@ -216,7 +227,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
try:
location = dc.put(uri, body, ct)
except DAV_Error, (ec,dd):
- self._logger.warning("Cannot PUT to %s: %s", uri, dd, exc_info=True)
+ self.log_error("Cannot PUT to %s: %s", uri, dd)
return self.send_status(ec)
headers = {}
diff --git a/addons/document_webdav/webdav_setup.xml b/addons/document_webdav/webdav_setup.xml
index 2bd41ddb69c..6ea894b6a22 100644
--- a/addons/document_webdav/webdav_setup.xml
+++ b/addons/document_webdav/webdav_setup.xml
@@ -12,7 +12,7 @@
<field name="domain">[]</field>
<field eval="1" name="resource_find_all"/>
<field eval="0" name="ressource_tree"/>
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
<field name="company_id" ref="base.main_company"/>
<field name="storage_id" ref="document.storage_default"/>
<field name="type">directory</field>
@@ -24,7 +24,7 @@
<field name="domain">[]</field>
<field eval="1" name="resource_find_all"/>
<field eval="0" name="ressource_tree"/>
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
<field name="company_id" ref="base.main_company"/>
<field model="document.directory" name="parent_id" ref="document_directory_principals0"/>
<field name="storage_id" ref="document.storage_default"/>
@@ -45,9 +45,10 @@
<field name="name">resources</field>
</record>
<record id="document_directory_uids1" model="document.directory">
- <field name="domain">[]</field>
+ <field name="domain">[('id','=',uid)]</field>
<field eval="1" name="resource_find_all"/>
<field eval="0" name="ressource_tree"/>
+ <field name="user_id" eval="False"/>
<field name="resource_field" ref="base.field_res_users_login"/>
<field name="company_id" ref="base.main_company"/>
<field model="document.directory" name="parent_id" ref="document_directory_principals0"/>
@@ -58,10 +59,10 @@
<field name="name">__uids__</field>
</record>
<record id="document_directory_users1" model="document.directory">
- <field name="domain">[]</field>
+ <field name="domain">[('id','=',uid)]</field>
<field eval="1" name="resource_find_all"/>
<field eval="0" name="ressource_tree"/>
- <field name="user_id" ref="base.user_root"/>
+ <field name="user_id" eval="False"/>
<field name="resource_field" ref="base.field_res_users_login"/>
<field name="company_id" ref="base.main_company"/>
<field model="document.directory" name="parent_id" ref="document_directory_principals0"/>
diff --git a/addons/email_template/email_template_mailbox_view.xml b/addons/email_template/email_template_mailbox_view.xml
index 38757ba7d68..8f4d1fc8d60 100644
--- a/addons/email_template/email_template_mailbox_view.xml
+++ b/addons/email_template/email_template_mailbox_view.xml
@@ -106,6 +106,7 @@
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_email_template_mailbox_tree" />
<field name="context">{'group_by': [], 'search_default_outbox': 1}</field>
+ <field name="help">An email template is an email document that will be sent as part of a marketing campaign. You can personalize it based on specific customer profile fields so that their names or other partner related information can be automatically inserted in it.</field>
<field name="search_view_id" ref="view_email_template_mailbox_search"/>
</record>
diff --git a/addons/fetchmail/i18n/fr.po b/addons/fetchmail/i18n/fr.po
index b9f0a3ecd3a..088205d9054 100644
--- a/addons/fetchmail/i18n/fr.po
+++ b/addons/fetchmail/i18n/fr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 07:36+0000\n"
+"PO-Revision-Date: 2010-11-11 09:34+0000\n"
"Last-Translator: Open Net Sàrl <openerp@open-net.ch>\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: 2010-11-11 04:46+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: fetchmail
diff --git a/addons/google_map/i18n/el.po b/addons/google_map/i18n/el.po
index 1770ef53323..ed83753ca5b 100644
--- a/addons/google_map/i18n/el.po
+++ b/addons/google_map/i18n/el.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-08-03 06:15+0000\n"
-"Last-Translator: mga (Open ERP) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 14:10+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
"Language-Team: Greek <el@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: 2010-10-30 05:07+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: google_map
@@ -33,6 +33,8 @@ msgstr "Άκυρο XML για την Αρχιτεκτονική Όψης!"
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
+"Το αντικείμενο θα πρέπει να ξεκινά με x_ και ν μην περιέχει ειδικούς "
+"χαρακτήρες!"
#. module: google_map
#: view:res.partner:0
@@ -59,4 +61,4 @@ msgstr ""
#. module: google_map
#: model:ir.model,name:google_map.model_res_partner_address
msgid "Partner Addresses"
-msgstr ""
+msgstr "Διεύθυνση Συνεργάτη"
diff --git a/addons/google_map/i18n/it.po b/addons/google_map/i18n/it.po
index b7c1bc0ef98..29289c994f2 100644
--- a/addons/google_map/i18n/it.po
+++ b/addons/google_map/i18n/it.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 20:14+0000\n"
-"Last-Translator: simone.sandri <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 09:15+0000\n"
+"Last-Translator: OpenERP Administrators <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: 2010-11-11 04:43+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: google_map
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml
index e4bdad2c3d1..ce0a7193683 100644
--- a/addons/hr/hr_view.xml
+++ b/addons/hr/hr_view.xml
@@ -150,7 +150,7 @@
<field name="context">{"search_default_department_id": department_id,"search_default_active":eval('True')}</field>
<field name="view_id" ref="view_employee_tree"/>
<field name="search_view_id" ref="view_employee_filter"/>
- <field name="help">The employee directory contains all data related to your employees : from their photo up to their hourly estimated costs for the timesheets.Employees are managed by departments and can be linked to users to manage their access rights.</field>
+ <field name="help">Here you can manage your work force by creating employees and assigning them specific properties in the system. Maintain all employee related information and keep track of anything that needs to be recorded for them. The personal information tab will help you maintain their identity data. The Categories tab gives you the opportunity to assign them related employee categories depending on their position and activities within the company. A category can be a seniority level within the company or a department. The Timesheets tab allows to assign them a specific timesheet and analytic journal where they will be able to enter time through the system. In the note tab, you can enter text data that should be recorded for a specific employee.</field>
</record>
<menuitem action="open_view_employee_list_my" id="menu_open_view_employee_list_my" sequence="3" parent="menu_hr_main" groups="base.group_hr_manager,base.group_hr_user"/>
@@ -401,7 +401,7 @@
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_job_filter"/>
<field name="context">{"search_default_Current":1,"search_default_department_id": department_id}</field>
- <field name="help">Job Positions are used to define the jobs, the requirements. You can attach a survey to a job position. This survey will be used in the recruitement process to evaluate the applicants for this job position.</field>
+ <field name="help">JJob Positions is used to define jobs and their requirements. You can attach a survey to a job position. This survey will be used in the recruitment process to evaluate the applicants for this job position.</field>
</record>
<menuitem name="Recruitment" id="base.menu_crm_case_job_req_main" parent="menu_hr_root" groups="base.group_hr_user"/>
diff --git a/addons/hr_attendance/wizard/hr_attendance_sign_in_out_view.xml b/addons/hr_attendance/wizard/hr_attendance_sign_in_out_view.xml
index dbabd9463f1..5121a2d18a0 100644
--- a/addons/hr_attendance/wizard/hr_attendance_sign_in_out_view.xml
+++ b/addons/hr_attendance/wizard/hr_attendance_sign_in_out_view.xml
@@ -7,8 +7,10 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Sign in / Sign out">
+ <separator colspan="4" string="Sign in / Sign out"/>
+ <label colspan="4" nolabel="1" string="If you need your staff to sign in when they arrive at work and sign out again at the end of the day, OpenERP allows you to manage this with this tool. If each employee has been linked to a system user, then they can encode their time with this action button."/>
+ <newline/>
<group colspan="4" >
- <separator string="You are now ready to sign in or out of the attendance follow up" colspan="4" />
<field name="name" />
<field name="state" />
</group>
diff --git a/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out_view.xml b/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out_view.xml
index 99d9230a188..e9114e1fe3c 100644
--- a/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out_view.xml
+++ b/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out_view.xml
@@ -7,9 +7,9 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Sign In/Out By Project">
- <group colspan="4" >
- <separator string="This Wizard will make Sign In/Out By Project" colspan="4"/>
- </group>
+ <separator colspan="4" string="Sign In/Out By Project"/>
+ <label colspan="4" nolabel="1" string="Employees can encode their time spent on the different projects they are assigned on. A project is an analytic account and the time spent on a project generates costs on the analytic account. This feature allows to record at the same time the attendance and the timesheet."/>
+ <newline/>
<group colspan="4" col="6">
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
<button icon="gtk-ok" string="Sign in / Sign out" name="check_state" type="object"/>
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
index 408835fe993..87e8b8b0feb 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
@@ -169,6 +169,7 @@
<field name="view_type">form</field>
<field name="view_id" ref="view_hr_timesheet_invoice_factor_tree"/>
<field name="search_view_id" ref="view_hr_timesheet_invoice_factor_search"/>
+ <field name="help">OpenERP allows you to create default invoicing types. You could need to regularly make discounts based on a specific contract or agreement with a customer. From this menu, you can create additional default types of invoicing that will speed up your invoicing.</field>
</record>
<menuitem
action="action_hr_timesheet_invoice_factor_form"
diff --git a/addons/hr_timesheet_invoice/i18n/nl.po b/addons/hr_timesheet_invoice/i18n/nl.po
index 494008bd128..0f2f64518fb 100644
--- a/addons/hr_timesheet_invoice/i18n/nl.po
+++ b/addons/hr_timesheet_invoice/i18n/nl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-08-03 06:22+0000\n"
-"Last-Translator: mga (Open ERP) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 08:24+0000\n"
+"Last-Translator: Douwe Wullink (Dypalio) <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: 2010-10-30 05:34+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr_timesheet_invoice
@@ -36,7 +36,7 @@ msgstr "Winst"
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py:0
#, python-format
msgid "Analytic account incomplete"
-msgstr ""
+msgstr "Kostenplaats incompleet"
#. module: hr_timesheet_invoice
#: model:ir.model,name:hr_timesheet_invoice.model_hr_timesheet_invoice_create_final
@@ -51,7 +51,7 @@ msgstr "Forceer gebruik van een specifiek product"
#. module: hr_timesheet_invoice
#: view:report.timesheet.line:0
msgid " 7 Days "
-msgstr ""
+msgstr " 7 Dagen "
#. module: hr_timesheet_invoice
#: report:account.analytic.profit:0
@@ -61,7 +61,7 @@ msgstr "Inkomsten"
#. module: hr_timesheet_invoice
#: view:account.analytic.line:0
msgid "To Invoice"
-msgstr ""
+msgstr "Te factureren"
#. module: hr_timesheet_invoice
#: model:ir.model,name:hr_timesheet_invoice.model_report_timesheet_user
@@ -75,7 +75,7 @@ msgstr "Urenstaat per dag"
#: selection:report_timesheet.account.date,month:0
#: selection:report_timesheet.user,month:0
msgid "March"
-msgstr ""
+msgstr "Maart"
#. module: hr_timesheet_invoice
#: field:hr.timesheet.invoice.create.final,name:0
@@ -88,6 +88,8 @@ msgid ""
"The product to invoice is defined on the employee form, the price will be "
"deduced by this pricelist on the product."
msgstr ""
+"Het te factureren product is gedefinieerd op het medewerker formulier; de "
+"prijs wordt afgeleid van de prijslijst van het product."
#. module: hr_timesheet_invoice
#: model:ir.model,name:hr_timesheet_invoice.model_hr_timesheet_invoice_factor
@@ -101,7 +103,7 @@ msgstr ""
#: view:report_timesheet.account.date:0
#: view:report_timesheet.user:0
msgid "This Year"
-msgstr ""
+msgstr "Dit jaar"
#. module: hr_timesheet_invoice
#: help:hr.timesheet.invoice.create.final,time:0
@@ -111,13 +113,13 @@ msgstr "Toon tijd in de verricht werk-historie"
#. module: hr_timesheet_invoice
#: view:hr.timesheet.analytic.profit:0
msgid "Journals"
-msgstr ""
+msgstr "Dagboeken"
#. module: hr_timesheet_invoice
#: view:report.timesheet.line:0
#: field:report.timesheet.line,day:0
msgid "Day"
-msgstr ""
+msgstr "Dag"
#. module: hr_timesheet_invoice
#: field:random.timesheet.lines,uom_id:0
@@ -128,7 +130,7 @@ msgstr "ME"
#. module: hr_timesheet_invoice
#: view:report.timesheet.line:0
msgid "Account"
-msgstr ""
+msgstr "Rekening"
#. module: hr_timesheet_invoice
#: view:report.random.timesheet:0
@@ -179,7 +181,7 @@ msgstr "Willekeurige urenstaat"
#. module: hr_timesheet_invoice
#: model:ir.model,name:hr_timesheet_invoice.model_hr_timesheet_invoice_create
msgid "Create invoice from timesheet"
-msgstr ""
+msgstr "Factuur van urenstaat maken"
#. module: hr_timesheet_invoice
#: report:account.analytic.profit:0
@@ -195,7 +197,7 @@ msgstr "Te sluiten kostenplaatsen"
#: view:random.timesheet.lines:0
#: view:report.timesheet.line:0
msgid "Group By..."
-msgstr ""
+msgstr "Groepeer op..."
#. module: hr_timesheet_invoice
#: view:hr.timesheet.invoice.create:0
@@ -218,7 +220,7 @@ msgstr ""
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py:0
#, python-format
msgid "Analytic Account incomplete"
-msgstr ""
+msgstr "Kostenplaats incompleet"
#. module: hr_timesheet_invoice
#: model:ir.model,name:hr_timesheet_invoice.model_account_analytic_account
@@ -239,7 +241,7 @@ msgstr "Deadline"
#. module: hr_timesheet_invoice
#: model:ir.actions.act_window,name:hr_timesheet_invoice.act_my_account
msgid "Accounts to invoice"
-msgstr ""
+msgstr "Te factureren klanten"
#. module: hr_timesheet_invoice
#: field:report.analytic.account.close,partner_id:0
@@ -264,7 +266,7 @@ msgstr "Roosters"
#. module: hr_timesheet_invoice
#: model:ir.model,name:hr_timesheet_invoice.model_hr_timesheet_analytic_cost_ledger
msgid "hr.timesheet.analytic.cost.ledger"
-msgstr ""
+msgstr "hr.timesheet.analytic.cost.ledger"
#. module: hr_timesheet_invoice
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py:0
@@ -274,6 +276,9 @@ msgid ""
"Analytic Account:\n"
"%s"
msgstr ""
+"Vul aub de relatie of klant en verkoop prijslijst velden in bij de "
+"kostenplaats:\n"
+"%s"
#. module: hr_timesheet_invoice
#: model:ir.actions.act_window,name:hr_timesheet_invoice.action_hr_timesheet_invoice_create_final
@@ -313,7 +318,7 @@ msgstr "Status"
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_analytic_profit.py:0
#, python-format
msgid "Data Insufficient!"
-msgstr ""
+msgstr "Onvoldoende gegevens!"
#. module: hr_timesheet_invoice
#: report:hr.timesheet.invoice.account.analytic.account.cost_ledger:0
@@ -323,12 +328,12 @@ msgstr "Debet"
#. module: hr_timesheet_invoice
#: field:hr.timesheet.analytic.profit,employee_ids:0
msgid "Employee"
-msgstr "Werknemer"
+msgstr "Medewerker"
#. module: hr_timesheet_invoice
#: help:account.analytic.line,to_invoice:0
msgid "It allows to set the discount while making invoice"
-msgstr ""
+msgstr "Laat u een korting instellen bij het maken van de factuur"
#. module: hr_timesheet_invoice
#: help:hr.timesheet.invoice.create,price:0
@@ -336,11 +341,13 @@ msgid ""
"The cost of each work done will be displayed on the invoice. You probably "
"don't want to check this"
msgstr ""
+"De kostprijs van het verrichte werk wordt afgebeeld op de factuur. U wilt "
+"dit waarschijnlijk niet aanzetten."
#. module: hr_timesheet_invoice
#: field:hr_timesheet_invoice.factor,customer_name:0
msgid "Name"
-msgstr ""
+msgstr "Naam"
#. module: hr_timesheet_invoice
#: model:ir.actions.act_window,name:hr_timesheet_invoice.act_acc_analytic_acc_2_report_acc_analytic_line_to_invoice
@@ -351,12 +358,12 @@ msgstr "Te factureren boekingen"
#: code:addons/hr_timesheet_invoice/hr_timesheet_invoice.py:0
#, python-format
msgid "Error !"
-msgstr ""
+msgstr "Fout !"
#. module: hr_timesheet_invoice
#: model:hr_timesheet_invoice.factor,name:hr_timesheet_invoice.timesheet_invoice_factor3
msgid "Gratis"
-msgstr ""
+msgstr "Gratis"
#. module: hr_timesheet_invoice
#: help:account.analytic.account,to_invoice:0
@@ -378,7 +385,7 @@ msgstr "Winst urenstaat"
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py:0
#, python-format
msgid "Partner incomplete"
-msgstr ""
+msgstr "Relatie incompleet"
#. module: hr_timesheet_invoice
#: help:hr.timesheet.invoice.create.final,name:0
@@ -392,7 +399,7 @@ msgstr "Toon details van werkzaamheden in de factuurregel."
#: selection:report_timesheet.account.date,month:0
#: selection:report_timesheet.user,month:0
msgid "July"
-msgstr ""
+msgstr "Juli"
#. module: hr_timesheet_invoice
#: model:ir.model,name:hr_timesheet_invoice.model_report_random_timesheet
@@ -429,6 +436,9 @@ msgid ""
" 'in the analytic account:\n"
"%s"
msgstr ""
+"Vul aub de relatie en prijslijst velden '\n"
+" 'in de kostenplaats in:\n"
+"%s"
#. module: hr_timesheet_invoice
#: report:account.analytic.profit:0
@@ -439,7 +449,7 @@ msgstr "Theoretisch"
#: code:addons/hr_timesheet_invoice/hr_timesheet_invoice.py:0
#, python-format
msgid "You can not modify an invoiced analytic line!"
-msgstr ""
+msgstr "U kunt een gefactureerde kostenplaatsboeking niet wijzigen!"
#. module: hr_timesheet_invoice
#: model:ir.model,name:hr_timesheet_invoice.model_report_account_analytic_line_to_invoice
@@ -470,18 +480,18 @@ msgstr "Korting (%)"
#. module: hr_timesheet_invoice
#: model:hr_timesheet_invoice.factor,name:hr_timesheet_invoice.timesheet_invoice_factor1
msgid "Yes (100%)"
-msgstr ""
+msgstr "Ja (100%)"
#. module: hr_timesheet_invoice
#: report:account.analytic.profit:0
msgid "Employee or Journal Name"
-msgstr "Naam werknemer of dagboek"
+msgstr "Naam medewerker of dagboek"
#. module: hr_timesheet_invoice
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py:0
#, python-format
msgid "Invoices"
-msgstr ""
+msgstr "Facturen"
#. module: hr_timesheet_invoice
#: selection:report.account.analytic.line.to.invoice,month:0
@@ -490,7 +500,7 @@ msgstr ""
#: selection:report_timesheet.account.date,month:0
#: selection:report_timesheet.user,month:0
msgid "December"
-msgstr ""
+msgstr "December"
#. module: hr_timesheet_invoice
#: field:report.account.analytic.line.to.invoice,month:0
@@ -533,12 +543,12 @@ msgstr ""
#. module: hr_timesheet_invoice
#: view:report.timesheet.line:0
msgid "Non Assigned timesheets to users"
-msgstr ""
+msgstr "Niet aan gebruikers toegewezen urenstaten"
#. module: hr_timesheet_invoice
#: field:report.timesheet.line,invoice_id:0
msgid "Invoiced"
-msgstr ""
+msgstr "Gefactureerd"
#. module: hr_timesheet_invoice
#: field:report.analytic.account.close,quantity_max:0
@@ -558,7 +568,7 @@ msgstr "Facturatiesnelheid per gebruiker"
#. module: hr_timesheet_invoice
#: constraint:ir.ui.menu:0
msgid "Error ! You can not create recursive Menu."
-msgstr ""
+msgstr "Fout ! U kunt geen recursief menu maken."
#. module: hr_timesheet_invoice
#: field:hr.timesheet.analytic.profit,date_from:0
@@ -578,7 +588,7 @@ msgstr "Periode tot"
#. module: hr_timesheet_invoice
#: model:ir.model,name:hr_timesheet_invoice.model_account_analytic_line
msgid "Analytic Line"
-msgstr ""
+msgstr "Kostenplaatsboeking"
#. module: hr_timesheet_invoice
#: selection:report.account.analytic.line.to.invoice,month:0
@@ -587,7 +597,7 @@ msgstr ""
#: selection:report_timesheet.account.date,month:0
#: selection:report_timesheet.user,month:0
msgid "August"
-msgstr ""
+msgstr "Augustus"
#. module: hr_timesheet_invoice
#: report:hr.timesheet.invoice.account.analytic.account.cost_ledger:0
@@ -599,7 +609,7 @@ msgstr "Kostenstaat"
#. module: hr_timesheet_invoice
#: model:hr_timesheet_invoice.factor,name:hr_timesheet_invoice.timesheet_invoice_factor2
msgid "50%"
-msgstr ""
+msgstr "50%"
#. module: hr_timesheet_invoice
#: selection:report.account.analytic.line.to.invoice,month:0
@@ -608,7 +618,7 @@ msgstr ""
#: selection:report_timesheet.account.date,month:0
#: selection:report_timesheet.user,month:0
msgid "June"
-msgstr ""
+msgstr "Juni"
#. module: hr_timesheet_invoice
#: help:hr.timesheet.invoice.create.final,date:0
@@ -639,7 +649,7 @@ msgstr "Datum"
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py:0
#, python-format
msgid "Please fill in the Address field in the Partner: %s."
-msgstr ""
+msgstr "Vul aub het adresveld in in de relatie: %s."
#. module: hr_timesheet_invoice
#: selection:report.account.analytic.line.to.invoice,month:0
@@ -648,12 +658,12 @@ msgstr ""
#: selection:report_timesheet.account.date,month:0
#: selection:report_timesheet.user,month:0
msgid "November"
-msgstr ""
+msgstr "November"
#. module: hr_timesheet_invoice
#: view:report.timesheet.line:0
msgid "Extended Filters..."
-msgstr ""
+msgstr "Uitgebreide filters..."
#. module: hr_timesheet_invoice
#: field:report_timesheet.invoice,amount_invoice:0
@@ -688,7 +698,7 @@ msgstr "Totaal:"
#: selection:report_timesheet.account.date,month:0
#: selection:report_timesheet.user,month:0
msgid "January"
-msgstr ""
+msgstr "Januari"
#. module: hr_timesheet_invoice
#: report:hr.timesheet.invoice.account.analytic.account.cost_ledger:0
@@ -699,7 +709,7 @@ msgstr "Credit"
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py:0
#, python-format
msgid "Error"
-msgstr ""
+msgstr "Fout"
#. module: hr_timesheet_invoice
#: field:hr.timesheet.analytic.cost.ledger,date2:0
@@ -728,7 +738,7 @@ msgstr "Hoeveelheid"
#. module: hr_timesheet_invoice
#: report:hr.timesheet.invoice.account.analytic.account.cost_ledger:0
msgid "Date/Code"
-msgstr ""
+msgstr "Datum/code"
#. module: hr_timesheet_invoice
#: view:random.timesheet.lines:0
@@ -740,7 +750,7 @@ msgstr "Algemene rekening"
#. module: hr_timesheet_invoice
#: model:ir.model,name:hr_timesheet_invoice.model_hr_timesheet_analytic_profit
msgid "Print Timesheet Profit"
-msgstr ""
+msgstr "Urenstaat resultaat afdrukken"
#. module: hr_timesheet_invoice
#: field:account.analytic.account,to_invoice:0
@@ -779,7 +789,7 @@ msgstr "Max. factuurprijs"
#: selection:report_timesheet.account.date,month:0
#: selection:report_timesheet.user,month:0
msgid "September"
-msgstr ""
+msgstr "September"
#. module: hr_timesheet_invoice
#: field:account.analytic.line,invoice_id:0
@@ -802,7 +812,7 @@ msgstr "Annuleren"
#: model:ir.model,name:hr_timesheet_invoice.model_report_timesheet_line
#: view:report.timesheet.line:0
msgid "Timesheet Line"
-msgstr ""
+msgstr "Urenstaatregel"
#. module: hr_timesheet_invoice
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py:0
@@ -813,7 +823,7 @@ msgstr ""
#. module: hr_timesheet_invoice
#: view:hr.timesheet.invoice.create:0
msgid "Billing Data"
-msgstr ""
+msgstr "Factuur gegevens"
#. module: hr_timesheet_invoice
#: constraint:ir.model:0
@@ -830,12 +840,12 @@ msgstr "Urenstaat per rekening"
#. module: hr_timesheet_invoice
#: help:hr_timesheet_invoice.factor,customer_name:0
msgid "Label for the customer"
-msgstr ""
+msgstr "Naam van de klant"
#. module: hr_timesheet_invoice
#: view:random.timesheet.lines:0
msgid "Current"
-msgstr ""
+msgstr "Actueel"
#. module: hr_timesheet_invoice
#: view:hr.timesheet.analytic.cost.ledger:0
@@ -855,7 +865,7 @@ msgstr "Willekeurige urenstaat regels"
#: selection:report_timesheet.account.date,month:0
#: selection:report_timesheet.user,month:0
msgid "October"
-msgstr ""
+msgstr "Oktober"
#. module: hr_timesheet_invoice
#: help:hr.timesheet.invoice.create.final,price:0
@@ -872,7 +882,7 @@ msgstr ""
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py:0
#, python-format
msgid "At least one line has no product !"
-msgstr ""
+msgstr "Tenminste één regel heeft geen product !"
#. module: hr_timesheet_invoice
#: view:report_timesheet.invoice:0
@@ -934,7 +944,7 @@ msgstr "Facturatie"
#: selection:report_timesheet.account.date,month:0
#: selection:report_timesheet.user,month:0
msgid "May"
-msgstr ""
+msgstr "Mei"
#. module: hr_timesheet_invoice
#: field:hr.timesheet.analytic.profit,journal_ids:0
@@ -945,12 +955,13 @@ msgstr "Dagboek"
#: help:hr.timesheet.invoice.create.final,balance_product:0
msgid "The product that will be used to invoice the remaining amount"
msgstr ""
+"Het product dat gebruikt wordt voor het factureren van het resterende bedrag"
#. module: hr_timesheet_invoice
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_analytic_profit.py:0
#, python-format
msgid "No Records Found for Report!"
-msgstr ""
+msgstr "Geen gegevens gevonden voor overzicht!"
#. module: hr_timesheet_invoice
#: view:report_timesheet.invoice:0
@@ -969,12 +980,12 @@ msgstr "Deze maand"
#. module: hr_timesheet_invoice
#: model:ir.actions.act_window,name:hr_timesheet_invoice.action_random_timesheet_lines_board
msgid "Working Hours"
-msgstr ""
+msgstr "Werkuren"
#. module: hr_timesheet_invoice
#: view:hr.timesheet.analytic.cost.ledger:0
msgid "Select Period"
-msgstr ""
+msgstr "Periode selecteren"
#. module: hr_timesheet_invoice
#: report:account.analytic.profit:0
@@ -988,7 +999,7 @@ msgstr "Periode vanaf startdatum"
#: selection:report_timesheet.account.date,month:0
#: selection:report_timesheet.user,month:0
msgid "February"
-msgstr ""
+msgstr "Februari"
#. module: hr_timesheet_invoice
#: model:ir.module.module,shortdesc:hr_timesheet_invoice.module_meta_information
@@ -1008,7 +1019,7 @@ msgstr "Verkoopprijs"
#. module: hr_timesheet_invoice
#: view:hr.timesheet.analytic.profit:0
msgid "Employees"
-msgstr ""
+msgstr "Medewerkers"
#. module: hr_timesheet_invoice
#: field:report.account.analytic.line.to.invoice,name:0
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
index 644db3a8ce0..08fda12c073 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
@@ -174,7 +174,7 @@
<field name="view_id" eval="False"/>
<field name="context">{'search_default_my_timesheet':1, }</field>
<field name="search_view_id" ref="view_hr_timesheet_sheet_filter"/>
- <field name="help">Employees can encode their time spent on the different projects. A project is an analytic account and the time spent on a project generate costs on the analytic account.</field>
+ <field name="help">This view allows you to check timesheet sheets following a specific period. You can also encode time spent on a project that is an analytic account and the time spent on a project generate costs on the analytic account.</field>
</record>
<!--Time Tracking menu in project Management-->
diff --git a/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml b/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml
index 36ea5b6418a..52147d062ac 100644
--- a/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml
+++ b/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml
@@ -91,6 +91,7 @@
<field name="view_type">form</field>
<field name="view_mode">tree,graph</field>
<field name="context">{'search_default_month':1,'search_default_group_user_id':1,'group_by_no_leaf':1,'group_by':[]}</field>
+ <field name="help">This report performs analysis on timesheets created by your human resources in the system. It allows you to have a full overview of entries done by your employees. You can group them by specific selection criteria thanks to the search tool.</field>
</record>
<menuitem
action="action_hr_timesheet_report_stat_all"
diff --git a/addons/marketing_campaign/i18n/nl.po b/addons/marketing_campaign/i18n/nl.po
index c14031ccc24..a052284229f 100644
--- a/addons/marketing_campaign/i18n/nl.po
+++ b/addons/marketing_campaign/i18n/nl.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 14:36+0000\n"
-"Last-Translator: Douwe Wullink (Dypalio) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 09:42+0000\n"
+"Last-Translator: OpenERP Administrators <Unknown>\n"
"Language-Team: Dutch <nl@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: 2010-11-11 04:46+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: marketing_campaign
diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml
index 044746adc2c..2d9abc2230d 100644
--- a/addons/marketing_campaign/marketing_campaign_view.xml
+++ b/addons/marketing_campaign/marketing_campaign_view.xml
@@ -117,7 +117,7 @@
<field name="view_id" ref="view_marketing_campaign_tree"/>
<field name="context">{'group_by': []}</field>
<field name="search_view_id" ref="view_marketing_campaign_search"/>
- <field name="help">Campaigns are used to tag the source of the new business opportunities or leads. They are mainly used for reporting on the performance of each marketing campaign.</field>
+ <field name="help">A marketing campaign is an event or activity that will help you manage and reach your partners with specific messages. A campaign can have many activities that will be triggered based on a specific situation. One possible action could be sending an email template that has previously been created in the system.</field>
</record>
<menuitem name="Campaigns" id="menu_marketing_campaign" parent="base.marketing_menu"/>
diff --git a/addons/membership/i18n/it.po b/addons/membership/i18n/it.po
index 78c63a25945..2641571ddb9 100644
--- a/addons/membership/i18n/it.po
+++ b/addons/membership/i18n/it.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 08:48+0000\n"
-"Last-Translator: OpenERP Administrators <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 16:35+0000\n"
+"Last-Translator: Leonardo Pistone <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: 2010-11-11 04:43+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: membership
@@ -124,12 +124,12 @@ msgstr ""
#: model:ir.actions.act_window,name:membership.action_membership_invoice_view
#: view:res.partner:0
msgid "Join Membership"
-msgstr ""
+msgstr "Iscrivi"
#. module: membership
#: field:res.partner,associate_member:0
msgid "Associate member"
-msgstr "Associa Membro"
+msgstr "Iscrizione associata a"
#. module: membership
#: model:process.node,note:membership.process_node_associatedmember0
@@ -269,7 +269,7 @@ msgstr ""
#: view:report.membership:0
#: field:report.membership,membership_id:0
msgid "Membership Product"
-msgstr ""
+msgstr "Prodotto Iscrizione"
#. module: membership
#: model:process.transition,note:membership.process_transition_producttomember0
@@ -290,7 +290,7 @@ msgstr ""
#: model:ir.model,name:membership.model_account_invoice
#: field:membership.membership_line,account_invoice_id:0
msgid "Invoice"
-msgstr ""
+msgstr "Fattura"
#. module: membership
#: constraint:product.template:0
@@ -307,7 +307,7 @@ msgstr "Prodotti Iscrizione"
#. module: membership
#: field:membership.membership_line,date:0
msgid "Join Date"
-msgstr ""
+msgstr "Data di iscrizione"
#. module: membership
#: model:process.node,name:membership.process_node_setassociation0
@@ -317,12 +317,12 @@ msgstr "Imposta l'associazione"
#. module: membership
#: view:res.partner:0
msgid " Membership State"
-msgstr ""
+msgstr " Stato dell'iscrizione"
#. module: membership
#: view:res.partner:0
msgid "Memberships"
-msgstr ""
+msgstr "Iscrizioni"
#. module: membership
#: model:ir.model,name:membership.model_product_template
@@ -463,7 +463,7 @@ msgstr ""
#. module: membership
#: field:res.partner,membership_cancel:0
msgid "Cancel membership date"
-msgstr "Annulla Data Iscrizione"
+msgstr "Data di cancellazione"
#. module: membership
#: view:res.partner:0
diff --git a/addons/membership/i18n/nl.po b/addons/membership/i18n/nl.po
index 0bf3f6c9002..528d0a1ac70 100644
--- a/addons/membership/i18n/nl.po
+++ b/addons/membership/i18n/nl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 14:21+0000\n"
-"Last-Translator: Douwe Wullink (Dypalio) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 08:45+0000\n"
+"Last-Translator: OpenERP Administrators <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: 2010-11-11 04:43+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: membership
diff --git a/addons/multi_company/i18n/nl.po b/addons/multi_company/i18n/nl.po
index 7daf8dd1952..e141187880f 100644
--- a/addons/multi_company/i18n/nl.po
+++ b/addons/multi_company/i18n/nl.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 14:01+0000\n"
-"Last-Translator: Douwe Wullink (Dypalio) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 09:43+0000\n"
+"Last-Translator: OpenERP Administrators <Unknown>\n"
"Language-Team: Dutch <nl@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: 2010-11-11 04:46+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: multi_company
diff --git a/addons/outlook/README b/addons/outlook/README
index adfd4401cb3..a737a700496 100644
--- a/addons/outlook/README
+++ b/addons/outlook/README
@@ -2,31 +2,22 @@ OpenERP Outlook PLUG-IN Installation Guide
Pre requirements :
======================================================================================
-1.Python 2.6+ . python can be downloaded from http://www.python.org/download/releases/ .
-2.Python for Windows extensions - PyWin32 this module for python must be installed for appropriate version of the Python. It can be downloaded from http://sourceforge.net/projects/pywin32/files/ or http://starship.python.net/crew/mhammond/win32/
-3.If you are using MS Outlook 2007 than you are required to install "Microsoft Exchange Server MAPI Client and Collaboration Data Objects 1.2.1 (CDO 1.21)". It can be downloaded from http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e17e7f31-079a-43a9-bff2-0a110307611e&displaylang=en
+ 1.Python 2.6+ . python can be downloaded from http://www.python.org/download/releases/ .
+ 2.Python for Windows extensions - PyWin32 this module for python must be installed for appropriate version of the Python. It can be downloaded from http://sourceforge.net/projects/pywin32/files/ or http://starship.python.net/crew/mhammond/win32/
+ 3.If you are using MS Outlook 2007 than you are required to install "Microsoft Exchange Server MAPI Client and Collaboration Data Objects 1.2.1 (CDO 1.21)". It can be downloaded from http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e17e7f31-079a-43a9-bff2-0a110307611e&displaylang=en
How to install openerp-outlook plug-in?
======================================================================================
-1.Open your Python installation directory (e.g.: C:\Python26).
-2.Create folder named “openerp-outlook-plugin”.
-3.Extract your zip file “outlook-plugin.zip” to the folder.
-4.Open the folder outlook-plugin.
-5.And Run “Register-plugin.bat” file.
-6.Run Outlook and Check addin has been registered.
-7.Tools->OpenERP Configuration and test your connection.
-8.See User Guide for More.
+ 1. Save the executable plug-in file.
+ 2. Close Outlook Application if Running.
+ 3. Run executable plug-in file and the folllow the instruction.
How to uninstall openerp-outlook plug-in?
=====================================================================================
-1.Open the folder outlook-plugin.
-2.And Run “Unregister-plugin.bat” file.
+ 1. Go to Control Panel Click "Add/Remove Programmes"
+ 2. You will entry, you will find entry named 'OpenERP Outlook Addin 1.0' select it and click Uninstall.
Note : Plug In has been successfully tested with MS Office 2003 and MS Offcie 2007.
-
Enjoy Archiving your Outlook E-mails to OpenERP.
-
-
-
diff --git a/addons/outlook/installer.py b/addons/outlook/installer.py
index 0f71b6c33dc..3718b3687a0 100755
--- a/addons/outlook/installer.py
+++ b/addons/outlook/installer.py
@@ -32,7 +32,7 @@ class outlook_installer(osv.osv_memory):
def default_get(self, cr, uid, fields, context={}):
data = super(outlook_installer, self).default_get(cr, uid, fields, context)
data['doc_file'] = 'http://doc.openerp.com/book/2/2_6_Comms/2_6_Comms_outlook.html'
- file = open(addons.get_module_resource('outlook','plugin','openerp-outlook-plugin.zip'), 'r')
+ file = open(addons.get_module_resource('outlook','plugin','openerp-outlook-addin.exe'), 'r')
data['plugin_file'] = base64.encodestring(file.read())
return data
@@ -47,7 +47,7 @@ class outlook_installer(osv.osv_memory):
_defaults = {
'outlook' : True,
- 'name' : 'OpenERP-Outlook-PlugIn.zip',
+ 'name' : 'Openerp-Outlook-Addin.exe',
'doc_name' : 'Installation Guide to OpenERP Outlook Plug-in.doc',
'description' : """
* Save the Outlook plug­-in.
@@ -58,15 +58,10 @@ Pre-requirements :
3. If you are using MS Outlook 2007 than you are required to install "Microsoft Exchange Server MAPI Client and Collaboration Data Objects 1.2.1 (CDO 1.21)".
How to install openerp-outlook plug-in?
- 1. Extract zip file “openerp-outlook-plugin.zip” .
- 2. Open the folder openerp-outlook-plugin.
- 3. Run “Register-plugin.bat” file.
- 4. Run Outlook and Check addon has been registered.
- 5. Tools->OpenERP Configuration and test your connection.
- 6. See User Guide for more information.
- 7. Keep All extratced files in some safe places
- (e.g. python installation Directory "C:\pythonXX\" or Windows installation Directory "C:\Program Files\" ).
-
+ 1. Save the executable plug-in file.
+ 2. Close Outlook Application if Running.
+ 3. Run executable plug-in file and the folllow the instruction.
+
Note :
Please refer README file for dependecies external link, openobject-addons/outlook/README.
"""
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/addin.py b/addons/outlook/plugin/openerp-outlook-plugin/addin.py
index 549ee7b79d9..a86bcb88e6b 100644
--- a/addons/outlook/plugin/openerp-outlook-plugin/addin.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/addin.py
@@ -31,32 +31,24 @@ import sys
import os
from win32com.client import Dispatch
import win32con
-
sys.path.append(os.path.abspath(os.path.dirname(__file__))) #outlook
sys.path.append(os.path.abspath(__file__)) #outlook/addin
-
import manager
from win32com.client import CastTo
import win32ui
-from tiny_xmlrpc import *
-
+from tiny_xmlrpc import XMLRpcConn
import locale
locale.setlocale(locale.LC_NUMERIC, "C")
-
# Support for COM objects we use.
gencache.EnsureModule('{00062FFF-0000-0000-C000-000000000046}', 0, 9, 0, bForDemand=True) # Outlook 9
gencache.EnsureModule('{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}', 0, 2, 1, bForDemand=True) # Office 9
-
# The TLB defiining the interfaces we implement
universal.RegisterInterfaces('{AC0714F2-3D04-11D1-AE7D-00A0C90F26F4}', 0, 1, 0, ["_IDTExtensibility2"])
-
global NewConn
-
# Retrieves registered XMLRPC connection
def GetConn():
d=Dispatch("Python.OpenERP.XMLRpcConn")
return d
-
class Configuration:
def OnClick(self, button, cancel):
try:
@@ -259,14 +251,14 @@ def UnregisterAddin(klass):
import _winreg
try:
_winreg.DeleteKey(_winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Office\\Outlook\\Addins\\" + klass._reg_progid_)
- except WindowsError:
+ except:
pass
def UnregisterXMLConn(klass):
import _winreg
try:
_winreg.DeleteKey(_winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Office\\Outlook\\Addins\\XMLConnection" + klass._reg_progid_)
- except WindowsError:
+ except:
pass
def RegisterXMLConn(klass):
@@ -279,7 +271,6 @@ def RegisterXMLConn(klass):
_winreg.SetValueEx(subkey, "FriendlyName", 0, _winreg.REG_SZ, klass._reg_progid_)
if __name__ == '__main__':
-
import win32com.server.register
NewConn=XMLRpcConn()
win32com.server.register.UseCommandLine(OutlookAddin)
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/outlookaddin.iss b/addons/outlook/plugin/openerp-outlook-plugin/outlookaddin.iss
new file mode 100644
index 00000000000..b47f87c60d0
--- /dev/null
+++ b/addons/outlook/plugin/openerp-outlook-plugin/outlookaddin.iss
@@ -0,0 +1,107 @@
+; Script generated by the Inno Setup Script Wizard.
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
+
+[Setup]
+; NOTE: The value of AppId uniquely identifies this application.
+; Do not use the same AppId value in installers for other applications.
+; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
+AppId={{AF02E62E-3A5A-4E86-B4CF-03F2B2AC25BF}
+AppName=Openerp Outlook Addin
+AppVersion=1.0
+AppVerName=Openerp Outlook Addin 1.0
+AppPublisher=Openerp SA
+AppPublisherURL=http://www.openerp.com/
+AppSupportURL=http://www.openerp.com/
+AppUpdatesURL=http://www.openerp.com/
+DefaultDirName={pf}\Openerp Outlook Addin
+DefaultGroupName=Openerp Outlook Addin
+DisableProgramGroupPage=true
+OutputBaseFilename=openerp-outlook-addin
+Compression=lzma
+SolidCompression=true
+UserInfoPage=true
+UninstallDisplayIcon={app}\*
+VersionInfoVersion=1.0
+VersionInfoCompany=OpenERP
+VersionInfoDescription=OpenERP Outlook Addin
+VersionInfoProductName=OpenERP
+VersionInfoProductVersion=1.0
+ChangesAssociations=true
+
+[Languages]
+Name: "english"; MessagesFile: "compiler:Default.isl"
+Name: "basque"; MessagesFile: "compiler:Languages\Basque.isl"
+Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl"
+Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl"
+Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl"
+Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl"
+Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl"
+Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl"
+Name: "french"; MessagesFile: "compiler:Languages\French.isl"
+Name: "german"; MessagesFile: "compiler:Languages\German.isl"
+Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl"
+Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl"
+Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
+Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
+Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl"
+Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl"
+Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl"
+Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
+Name: "slovak"; MessagesFile: "compiler:Languages\Slovak.isl"
+Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl"
+Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
+
+[Files]
+Source: "C:\workspace\openerp-outlook-plugin\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
+; NOTE: Don't use "Flags: ignoreversion" on any shared system files
+
+[Messages]
+AboutSetupNote=Inno Setup Preprocessor home page:%nhttp://ispp.sourceforge.net/
+
+
+[Run]
+Filename: "{app}\Register-plugin.bat"; StatusMsg: "Registering Outlook Addin";
+[UninstallDelete]
+Type: files; Name: "{app}\Openerp Outlook Addin\*"
+Type: dirifempty; Name: "{app}\Openerp Outlook Addin"
+
+[UninstallRun]
+Filename: "{app}\Unregister-plugin.bat"; StatusMsg: "Unregistering Outlook Addin";
+
+
+[Code]
+function InitializeSetup(): Boolean;
+begin
+ Result := true;
+
+ if not RegKeyExists( HKLM, 'Software\Python\PythonCore') then begin
+ Result := MsgBox(
+ 'Python appears to not be installed.' + #13 + #13 +
+ 'This addin requires Python 2.5 or above installed with compatible pywin32 for python for working.'+ #13 + #13 +
+ 'If you know that Python is installed, you may with to continue.' + #13 + #13 +
+ 'Continue with installation?',
+ mbConfirmation, MB_YESNO) = idYes;
+ end;
+ if not RegKeyExists( HKCU, 'Software\Microsoft\Office\Outlook') then begin
+ Result := MsgBox(
+ 'Outlook appears to not be installed.' + #13 + #13 +
+ 'This addin only works with Microsoft Outlook 2000 and later - it' + #13 +
+ 'does not work with Outlook express.' + #13 + #13 +
+ 'If you know that Outlook is installed, you may with to continue.' + #13 + #13 +
+ 'Continue with installation?',
+ mbConfirmation, MB_YESNO) = idYes;
+ end;
+ while Result do begin
+ if not CheckForMutexes('_outlook_mutex_') then
+ break;
+
+ Result := MsgBox(
+ 'You must close Outlook before OpenERP Outlook Addin can be installed.' + #13 + #13 +
+ 'Please close all Outlook Windows (using "File->Exit and Log off"' + #13 +
+ 'if available) and click Retry, or click Cancel to exit the installation.'+ #13 + #13 +
+ 'If this message persists after closing all Outlook windows, you may' + #13 +
+ 'need to log off from Windows, and try again.',
+ mbConfirmation, MB_RETRYCANCEL) = idRetry;
+ end;
+end;
+
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py b/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py
index b8ed64d99dc..dc02d956f3c 100644
--- a/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py
@@ -32,16 +32,15 @@ import win32ui
waittime = 10
wait_count = 0
wait_limit = 12
-
def execute(connector, method, *args):
global wait_count
res = False
try:
- res = getattr(connector,method)(*args)
+ res = getattr(connector,method)(*args)
except socket.error,e:
if e.args[0] == 111:
if wait_count > wait_limit:
- print "Server is taking too long to start, it has exceeded the maximum limit of %d seconds."%(wait_limit)
+ print "Server is taking too long to start, it has exceeded the maximum limit of %d seconds."%(wait_limit)
clean()
sys.exit(1)
print 'Please wait %d sec to start server....'%(waittime)
@@ -49,7 +48,7 @@ def execute(connector, method, *args):
time.sleep(waittime)
res = execute(connector, method, *args)
else:
- return res
+ return res
wait_count = 0
return res
@@ -57,28 +56,28 @@ class XMLRpcConn(object):
__name__ = 'XMLRpcConn'
_com_interfaces_ = ['_IDTExtensibility2']
_public_methods_ = ['GetDBList', 'login', 'GetAllObjects', 'GetObjList', 'InsertObj', 'DeleteObject', 'GetCSList', \
- 'ArchiveToOpenERP', 'IsCRMInstalled', 'GetPartners', 'GetObjectItems', \
- 'CreateCase', 'MakeAttachment', 'CreateContact', 'CreatePartner', 'getitem', 'setitem', \
- 'SearchPartnerDetail', 'WritePartnerValues', 'GetAllState', 'GetAllCountry', 'SearchPartner', 'SearchEmailResources', \
- 'GetCountry', 'GetStates', 'FindCountryForState','CreateEmailAttachment']
+ 'ArchiveToOpenERP', 'IsCRMInstalled', 'GetPartners', 'GetObjectItems', \
+ 'CreateCase', 'MakeAttachment', 'CreateContact', 'CreatePartner', 'getitem', 'setitem', \
+ 'SearchPartnerDetail', 'WritePartnerValues', 'GetAllState', 'GetAllCountry', 'SearchPartner', 'SearchEmailResources', \
+ 'GetCountry', 'GetStates', 'FindCountryForState','CreateEmailAttachment']
_reg_clsctx_ = pythoncom.CLSCTX_INPROC_SERVER
_reg_clsid_ = "{C6399AFD-763A-400F-8191-7F9D0503CAE2}"
_reg_progid_ = "Python.OpenERP.XMLRpcConn"
_reg_policy_spec_ = "win32com.server.policy.EventHandlerPolicy"
def __init__(self,server='localhost',port=8069,uri='http://localhost:8069'):
- self._server=server
- self._port=port
- self._uri=uri
- self._obj_list=[]
- self._dbname=''
- self._uname='admin'
- self._pwd='a'
- self._login=False
- self._running=False
- self._uid=False
- self._iscrm=True
- self.partner_id_list=None
- self.protocol=None
+ self._server=server
+ self._port=port
+ self._uri=uri
+ self._obj_list=[]
+ self._dbname=''
+ self._uname='admin'
+ self._pwd='a'
+ self._login=False
+ self._running=False
+ self._uid=False
+ self._iscrm=True
+ self.partner_id_list=None
+ self.protocol=None
def getitem(self, attrib):
v=self.__getattribute__(attrib)
@@ -136,12 +135,10 @@ class XMLRpcConn(object):
def ArchiveToOpenERP(self, recs, mail):
import win32con
conn = xmlrpclib.ServerProxy(self._uri + '/xmlrpc/object')
- import eml
flag = False
new_msg = ext_msg =""
message_id = referances = None
try:
- outlook = win32com.client.Dispatch("Outlook.Application")
session = win32com.client.Dispatch("MAPI.session")
session.Logon('Outlook')
objMessage = session.GetMessage(mail.EntryID, mail.Parent.StoreID)
@@ -170,42 +167,41 @@ class XMLRpcConn(object):
return
attachments=mail.Attachments
for rec in recs: #[('res.partner', 3, 'Agrolait')]
- model = rec[0]
- res_id = rec[1]
- #Check if mailgate installed
- object_id = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=','mailgate.message')])
- if not object_id:
- win32ui.MessageBox("Mailgate is not installed on your configured database '%s' !!\n\nPlease install it to archive the mail."%(self._dbname),"Mailgate not installed",win32con.MB_ICONERROR)
- return
- object_ids = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=',model)])
- object_name = execute( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','read',object_ids,['name'])[0]['name']
- #Reading the Object ir.model Name
- ext_ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'mailgate.message','search',[('message_id','=',message_id),('model','=',model),('res_id','=',res_id)])
- if ext_ids:
- name = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,model,'read',res_id,['name'])['name']
- ext_msg += """This mail is already archived to {0} '{1}'.\n""".format(object_name,name)
- flag = True
- continue
- msg = {
- 'subject':mail.Subject,
- 'date':str(mail.ReceivedTime),
- 'body':mail.Body,
- 'cc':mail.CC,
- 'from':mail.SenderEmailAddress,
- 'to':mail.To,
- 'message-id':message_id,
- 'references':ustr(referances),
- }
- obj_list= ['crm.lead','project.issue','hr.applicant','res.partner']
- if rec[0] not in obj_list:
- ids = self.CreateEmailAttachment(rec,mail)
- result = {}
- if attachments:
- result = self.MakeAttachment([rec], mail)
- attachment_ids = result.get(model, {}).get(res_id, [])
- ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'email.server.tools','history',model, res_id, msg, attachment_ids)
- new_msg += """- {0} : {1}\n""".format(object_name,str(rec[2]))
- flag = True
+ model = rec[0]
+ res_id = rec[1]
+ #Check if mailgate installed
+ object_id = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=','mailgate.message')])
+ if not object_id:
+ win32ui.MessageBox("Mailgate is not installed on your configured database '%s' !!\n\nPlease install it to archive the mail."%(self._dbname),"Mailgate not installed",win32con.MB_ICONERROR)
+ return
+ object_ids = execute ( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','search',[('model','=',model)])
+ object_name = execute( conn,'execute',self._dbname,int(self._uid),self._pwd,'ir.model','read',object_ids,['name'])[0]['name']
+ #Reading the Object ir.model Name
+ ext_ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'mailgate.message','search',[('message_id','=',message_id),('model','=',model),('res_id','=',res_id)])
+ if ext_ids:
+ name = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,model,'read',res_id,['name'])['name']
+ ext_msg += """This mail is already archived to {0} '{1}'.\n""".format(object_name,name)
+ flag = True
+ continue
+ msg = {
+ 'subject':mail.Subject,
+ 'date':str(mail.ReceivedTime),
+ 'body':mail.Body,
+ 'cc':mail.CC,
+ 'from':mail.SenderEmailAddress,
+ 'to':mail.To,
+ 'message-id':message_id,
+ 'references':ustr(referances),
+ }
+ obj_list= ['crm.lead','project.issue','hr.applicant','res.partner']
+ if rec[0] not in obj_list:
+ ids = self.CreateEmailAttachment(rec,mail)
+ result = {}
+ if attachments:
+ result = self.MakeAttachment([rec], mail)
+ attachment_ids = result.get(model, {}).get(res_id, [])
+ new_msg += """- {0} : {1}\n""".format(object_name,str(rec[2]))
+ flag = True
if flag:
t = """Mail archived Successfully with attachments.\n"""+ext_msg
@@ -273,8 +269,7 @@ class XMLRpcConn(object):
try:
conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
email=eml.generateEML(mail)
- message_id = referances = None
- outlook = win32com.client.Dispatch("Outlook.Application")
+ message_id = None
session = win32com.client.Dispatch("MAPI.session")
session.Logon('Outlook')
objMessage = session.GetMessage(mail.EntryID, mail.Parent.StoreID)
@@ -375,7 +370,6 @@ class XMLRpcConn(object):
def SearchPartnerDetail(self, search_email_id):
res_vals = []
- address = {}
conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
address_id = execute(conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'search', [('email','ilike',ustr(search_email_id))])
if not address_id :
@@ -399,7 +393,6 @@ class XMLRpcConn(object):
address_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address', 'search', [('email','=',ustr(email))])
if not partner_id or not address_id or not country_id or not state_id:
return flag
- address = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'res.partner.address','read',address_id[0],['id','partner_id','state_id','country_id'])
vals_res_address={
'partner_id' : partner_id[0],
'name' : new_dict['name'],
@@ -450,13 +443,9 @@ class XMLRpcConn(object):
partner = add_rec.get('partner_id',False)
if partner:
return partner[0]
- else:
- return True
- return partner_id[0]
+ return True
def SearchEmailResources(self, message_id):
- import eml
-
conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
res_vals = []
mail_id = execute( conn, 'execute', self._dbname, int(self._uid), self._pwd, 'mailgate.message', 'search', [('message_id','=',message_id)])
@@ -506,6 +495,7 @@ class XMLRpcConn(object):
obj_list.append((object['id'], ustr(object['name'])))
obj_list.sort(lambda x, y: cmp(x[1],y[1]))
return obj_list
+
def FindCountryForState(self, state_search=''):
conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
ids = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','search',[('name','=',ustr(state_search))])
@@ -514,20 +504,15 @@ class XMLRpcConn(object):
object = execute(conn,'execute',self._dbname,int(self._uid),self._pwd,'res.country.state','read',ids)[0]
country = object['country_id'][1]
return country
- def CreateEmailAttachment(self, rec, email):
+
+ def CreateEmailAttachment(self, rec, mail):
conn = xmlrpclib.ServerProxy(self._uri+ '/xmlrpc/object')
- att_folder_path = os.path.abspath(os.path.dirname("%temp%\\"))
- if not os.path.exists(att_folder_path):
- os.makedirs(att_folder_path)
obj = rec[0]
obj_id = rec[1]
- res={}
+ res = {}
res['res_model'] = obj
ls = ['*', '/', '\\', '<', '>', ':', '?', '"', '|', '\t', '\n',':','~']
- sub = (email.Subject).replace(' ','')
- if sub.strip() == '':
- sub = 'NO SBUJECT'
- fn = sub
+ fn = (mail.Subject).replace(' ','')
for c in ls:
fn = fn.replace(c,'')
if len(fn) > 64:
@@ -538,14 +523,15 @@ class XMLRpcConn(object):
l = 64 - len(fn)
f = fn.split('.')
fn = f[0][0:l] + '.' + f[-1]
- fn = fn+'.txt'
- f=open(fn,"w")
- f.writelines(ustr(email.Body).encode('iso-8859-1'))
+ fn = fn[:-4]+'.txt'
+ f = open(fn,"w")
+ body = mail.Body.encode("utf-8")
+ f.writelines(body)
f.close()
- f=open(fn,"r")
+ f=open(fn,"rb")
content = "".join(f.readlines()).encode('base64')
f.close()
- res['name'] = ustr(sub)
+ res['name'] = ustr((mail.Subject).replace(' ',''))
res['datas_fname'] = ustr(fn)
res['datas'] = content
res['res_id'] = obj_id
diff --git a/addons/product/i18n/el.po b/addons/product/i18n/el.po
index 07b791d8e71..c74db098c6d 100644
--- a/addons/product/i18n/el.po
+++ b/addons/product/i18n/el.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-08-03 08:57+0000\n"
-"Last-Translator: mga (Open ERP) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 15:34+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
"Language-Team: Greek <el@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: 2010-10-30 05:30+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: product
@@ -64,16 +64,18 @@ msgstr "Mainboard ASUStek A7V8X-X"
#: help:product.template,seller_qty:0
msgid "This is minimum quantity to purchase from Main Supplier."
msgstr ""
+"Αυτή είναι η ελάχιστη ποσότητα που μπορεί να αγοραστεί από τον Κύριο "
+"Προμηθεύτή"
#. module: product
#: model:product.uom,name:product.uom_day
msgid "Day"
-msgstr ""
+msgstr "Ημέρα"
#. module: product
#: view:product.product:0
msgid "UoM"
-msgstr ""
+msgstr "Μ.Μ."
#. module: product
#: model:product.template,name:product.product_product_pc2_product_template
@@ -96,6 +98,8 @@ msgid ""
"This pricelist will be used, instead of the default one, for sales to the "
"current partner"
msgstr ""
+"Αυτός ο τιμοκατάλογος θα χρησιμοποιηθεί, αντί του προεπιλεγμένου , για "
+"πωλήσεις στον τρέχον συνεργάτη"
#. module: product
#: constraint:product.supplierinfo:0
@@ -103,11 +107,13 @@ msgid ""
"Error: The default UOM and the Supplier Product UOM must be in the same "
"category."
msgstr ""
+"Λάθος:Η προεπιλεγμένη Μ.Μ και η Μ.Μ του προϊόντος του Προμηθευτή πρέπει να "
+"είναι στην ίδια κατηγορία"
#. module: product
#: field:product.template,seller_qty:0
msgid "Supplier Quantity"
-msgstr ""
+msgstr "Ποσότητα προμηθευτή"
#. module: product
#: selection:product.template,mes_type:0
@@ -144,7 +150,7 @@ msgstr "Ονομασία Κανόνα"
#: field:product.product,code:0
#: field:product.product,default_code:0
msgid "Reference"
-msgstr ""
+msgstr "Αναφορά"
#. module: product
#: constraint:product.category:0
@@ -220,7 +226,7 @@ msgstr "Διάφορα"
#. module: product
#: model:product.template,name:product.product_product_worker0_product_template
msgid "Worker"
-msgstr ""
+msgstr "Εργάτης"
#. module: product
#: help:product.template,sale_ok:0
@@ -296,7 +302,7 @@ msgstr ""
#. module: product
#: model:process.node,note:product.process_node_supplier0
msgid "Supplier name, price, product code, ..."
-msgstr ""
+msgstr "Όνομα Προμηθευτή, τιμή, κωδικός προϊόντος,..."
#. module: product
#: model:product.template,name:product.product_product_hdd3_product_template
@@ -311,7 +317,7 @@ msgstr "EAN13"
#. module: product
#: field:product.template,seller_id:0
msgid "Main Supplier"
-msgstr ""
+msgstr "Κύριος Προμηθευτής"
#. module: product
#: model:ir.actions.act_window,name:product.product_ul_form_action
@@ -340,7 +346,7 @@ msgstr ""
#. module: product
#: model:product.template,name:product.product_product_woodmm0_product_template
msgid "Wood 2mm"
-msgstr ""
+msgstr "Ξύλο 2χιλ"
#. module: product
#: field:product.price_list,qty1:0
@@ -376,7 +382,7 @@ msgstr "Κατάσταση"
#. module: product
#: help:product.template,categ_id:0
msgid "Select category for the current product"
-msgstr ""
+msgstr "Επιλέξτε κατηγορία για το τρέχον προϊόν"
#. module: product
#: field:product.product,outgoing_qty:0
@@ -386,7 +392,7 @@ msgstr "Εξερχόμενο"
#. module: product
#: selection:product.uom,uom_type:0
msgid "Reference UoM for this category"
-msgstr ""
+msgstr "Αναφορά Μ.Μ. για αυτήν την κατηγορία"
#. module: product
#: model:product.price.type,name:product.list_price
@@ -411,7 +417,7 @@ msgstr "Διαχειριστής Προϊόντων"
#. module: product
#: field:product.supplierinfo,product_name:0
msgid "Supplier Product Name"
-msgstr ""
+msgstr "Όνομα Προϊόντος Προμηθευτή"
#. module: product
#: model:product.template,name:product.product_product_pc3_product_template
@@ -421,7 +427,7 @@ msgstr "Medium PC"
#. module: product
#: view:product.pricelist:0
msgid "Products Price Search"
-msgstr ""
+msgstr "Αναζήτηση Τιμών Προϊόντων"
#. module: product
#: view:product.product:0
@@ -505,12 +511,12 @@ msgstr "Πωλήσεις & Αγορές"
#. module: product
#: model:product.uom.categ,name:product.uom_categ_wtime
msgid "Working Time"
-msgstr ""
+msgstr "Εργάσιμες Ώρες"
#. module: product
#: model:product.template,name:product.product_product_metalcleats0_product_template
msgid "Metal Cleats"
-msgstr ""
+msgstr "Μεταλικά Στηρίγματα"
#. module: product
#: model:ir.model,name:product.model_product_uom_categ
@@ -543,6 +549,8 @@ msgid ""
"1 or several supplier(s) can be linked to a product. All information stands "
"in the product form."
msgstr ""
+"Ένας ή περισσότεροι προμηθευτές μπορούν να συνδεθούν με το προϊόν. Όλες οι "
+"πληροφορίες εμφανίζονται στην φόρμα προϊόντος."
#. module: product
#: help:product.uom,category_id:0
@@ -564,17 +572,17 @@ msgstr "Εικονικό Απόθεμα"
#. module: product
#: selection:product.category,type:0
msgid "View"
-msgstr ""
+msgstr "Προβολή"
#. module: product
#: model:ir.actions.act_window,name:product.product_template_action_tree
msgid "Product Templates"
-msgstr ""
+msgstr "Πρότηπα Προϊόντων"
#. module: product
#: model:product.template,name:product.product_product_restaurantexpenses0_product_template
msgid "Restaurant Expenses"
-msgstr ""
+msgstr "Έξοδα εστιατορίου"
#. module: product
#: constraint:product.product:0
@@ -589,7 +597,7 @@ msgstr "Ελάχιστη Ποσότητα"
#. module: product
#: model:ir.model,name:product.model_product_price_type
msgid "Price Type"
-msgstr ""
+msgstr "Τύπος Τιμής"
#. module: product
#: view:product.pricelist.item:0
@@ -625,17 +633,17 @@ msgstr ""
#. module: product
#: model:product.template,name:product.product_product_kitshelfofcm0_product_template
msgid "KIT Shelf of 100cm"
-msgstr ""
+msgstr "ΚΙΤ Ραφιού των 100εκ."
#. module: product
#: field:product.supplierinfo,name:0
msgid "Supplier"
-msgstr ""
+msgstr "Προμηθευτής"
#. module: product
#: model:product.template,name:product.product_product_sidepanel0_product_template
msgid "Side Panel"
-msgstr ""
+msgstr "Πλάγιος Πίνακας"
#. module: product
#: model:product.template,name:product.product_product_26_product_template
@@ -653,6 +661,8 @@ msgid ""
"If the active field is set to true, it will allow you to hide the pricelist "
"without removing it."
msgstr ""
+"Εάν το ενεργό πεδίο είναι επιλεγμένο, επιτέπεται να κρύψετε τον τιμοκατάλογο "
+"χωρίς να τον αφαιρέσετε."
#. module: product
#: model:product.template,name:product.product_product_cpu3_product_template
@@ -672,12 +682,12 @@ msgstr "Τιμοκατάλογος"
#: view:product.product:0
#: view:product.template:0
msgid "Suppliers"
-msgstr ""
+msgstr "Προμηθευτές"
#. module: product
#: view:product.product:0
msgid "To Purchase"
-msgstr ""
+msgstr "Προς Αγορά"
#. module: product
#: view:product.pricelist.item:0
@@ -702,7 +712,7 @@ msgstr "Προηγμένος χρόνος πελάτη"
#. module: product
#: model:process.transition,name:product.process_transition_supplierofproduct0
msgid "Supplier of the product"
-msgstr ""
+msgstr "Προμηθευτής του προϊόντος"
#. module: product
#: help:product.template,uos_id:0
@@ -753,7 +763,7 @@ msgstr "Σχετ. Πελάτη"
#. module: product
#: view:product.product:0
msgid "Miscellaneous"
-msgstr ""
+msgstr "Διάφορα"
#. module: product
#: field:product.pricelist.type,key:0
@@ -777,7 +787,7 @@ msgstr ""
#. module: product
#: model:product.template,name:product.product_product_kitchendesignproject0_product_template
msgid "Kitchen Design Project"
-msgstr ""
+msgstr "Έργο Σχεδιαμού Κουζίνας"
#. module: product
#: constraint:ir.ui.view:0
@@ -787,7 +797,7 @@ msgstr "Άκυρο XML για την αρχιτεκτονική όψης!"
#. module: product
#: model:product.uom,name:product.uom_hour
msgid "Hour"
-msgstr ""
+msgstr "Ώρα"
#. module: product
#: selection:product.template,state:0
@@ -797,17 +807,17 @@ msgstr "Σε Εξέλιξη"
#. module: product
#: model:product.template,name:product.product_product_shelfofcm1_product_template
msgid "Shelf of 200cm"
-msgstr ""
+msgstr "Ράφι των 200εκ."
#. module: product
#: view:product.uom:0
msgid "Ratio & Precision"
-msgstr ""
+msgstr "Αναλογία & Ακρίβεια"
#. module: product
#: model:product.uom,name:product.product_uom_gram
msgid "g"
-msgstr ""
+msgstr "γ"
#. module: product
#: model:product.category,name:product.product_category_11
@@ -818,7 +828,7 @@ msgstr "IT components kits"
#: selection:product.category,type:0
#: selection:product.template,state:0
msgid "Normal"
-msgstr ""
+msgstr "Κανονικό"
#. module: product
#: model:process.node,name:product.process_node_supplier0
@@ -894,7 +904,7 @@ msgstr "Πληροφορίες για έναν προμηθευτή προϊόν
#. module: product
#: view:product.product:0
msgid "Extended Filters..."
-msgstr ""
+msgstr "Εκτεταμένα Φίλτα.."
#. module: product
#: view:product.product:0
@@ -935,7 +945,7 @@ msgstr "Ακολουθία"
#. module: product
#: view:product.price_list:0
msgid "Calculate Product Price per unit base on pricelist version."
-msgstr ""
+msgstr "Υπολογισμός Τιμής Προϊόντος ανά μονάδα βάση έκδοσης τιμοκαταλόγου"
#. module: product
#: model:ir.model,name:product.model_product_ul
@@ -982,7 +992,7 @@ msgstr "Εϊδη Τιμοκαταλόγου"
#. module: product
#: selection:product.uom,uom_type:0
msgid "Bigger than the reference UoM"
-msgstr ""
+msgstr "Μεγαλύτερο από την αναφερόμενη Μ.Μ."
#. module: product
#: model:ir.module.module,shortdesc:product.module_meta_information
@@ -992,7 +1002,7 @@ msgstr "Προϊόντα και Τιμοκατάλογοι"
#. module: product
#: view:product.product:0
msgid "To Sell"
-msgstr ""
+msgstr "Προς Πώληση"
#. module: product
#: model:product.category,name:product.product_category_services0
@@ -1038,12 +1048,12 @@ msgstr ""
#. module: product
#: view:product.product:0
msgid "Stockable"
-msgstr ""
+msgstr "Αποθηκεύσιμα"
#. module: product
#: model:product.uom,name:product.product_uom_kgm
msgid "kg"
-msgstr ""
+msgstr "κιλά"
#. module: product
#: constraint:ir.rule:0
@@ -1053,7 +1063,7 @@ msgstr ""
#. module: product
#: model:product.uom,name:product.product_uom_meter
msgid "m"
-msgstr ""
+msgstr "μ"
#. module: product
#: selection:product.template,state:0
@@ -1063,7 +1073,7 @@ msgstr "Απαρχαιωμένο"
#. module: product
#: model:product.uom,name:product.product_uom_km
msgid "km"
-msgstr ""
+msgstr "χλμ"
#. module: product
#: help:product.template,cost_method:0
@@ -1086,7 +1096,7 @@ msgstr ""
#: field:product.uom,factor:0
#: field:product.uom,factor_inv:0
msgid "Ratio"
-msgstr ""
+msgstr "Αναλογία"
#. module: product
#: help:product.template,purchase_ok:0
@@ -1115,7 +1125,7 @@ msgstr "Σχετιζόμενο πεδίο στην φόρμα προϊόντων
#. module: product
#: view:product.product:0
msgid "Unit of Measure"
-msgstr ""
+msgstr "Μονάδα Μέτρησης"
#. module: product
#: field:product.template,procure_method:0
@@ -1125,7 +1135,7 @@ msgstr ""
#. module: product
#: report:product.pricelist:0
msgid "Printing Date"
-msgstr ""
+msgstr "Ημερομηνία εκτύπωσης"
#. module: product
#: field:product.template,uos_id:0
@@ -1189,7 +1199,7 @@ msgstr "Διαστάσεις παλέτας"
#: code:addons/product/product.py:0
#, python-format
msgid " (copy)"
-msgstr ""
+msgstr " (αντίγραφο)"
#. module: product
#: field:product.template,seller_ids:0
@@ -1213,7 +1223,7 @@ msgstr "Δεύτερη ΜΜ"
#. module: product
#: model:product.template,name:product.product_product_woodlintelm0_product_template
msgid "Wood Lintel 4m"
-msgstr ""
+msgstr "Ξύλινο Ανώφλιο 4μ"
#. module: product
#: model:ir.actions.act_window,name:product.product_uom_form_action
@@ -1284,7 +1294,7 @@ msgstr "Rack"
#. module: product
#: field:product.template,uom_po_id:0
msgid "Purchase Unit of Measure"
-msgstr ""
+msgstr "Μ.Μ Αγοράς"
#. module: product
#: field:product.template,supply_method:0
@@ -1294,7 +1304,7 @@ msgstr "Μέθοδος απόκτησης"
#. module: product
#: view:product.product:0
msgid "Group by..."
-msgstr ""
+msgstr "Ομαδοποίηση κατά..."
#. module: product
#: model:product.template,name:product.product_product_cpu_gen_product_template
@@ -1337,7 +1347,7 @@ msgstr "Πραγματικό Απόθεμα"
#. module: product
#: model:product.uom,name:product.product_uom_cm
msgid "cm"
-msgstr ""
+msgstr "εκ"
#. module: product
#: model:ir.model,name:product.model_product_uom
@@ -1355,17 +1365,17 @@ msgstr ""
#. module: product
#: constraint:ir.ui.menu:0
msgid "Error ! You can not create recursive Menu."
-msgstr ""
+msgstr "Λάθος ! Δεν μπορείς να δημιουργήσεις κενό Μενού."
#. module: product
#: view:product.uom:0
msgid "Unit of Measure Properties"
-msgstr ""
+msgstr "Ιδιότητες Μονάδων Μέτρησης"
#. module: product
#: model:product.template,name:product.product_product_shelf1_product_template
msgid "Rack 200cm"
-msgstr ""
+msgstr "σχάρα 200εκ"
#. module: product
#: selection:product.template,supply_method:0
@@ -1385,7 +1395,7 @@ msgstr "The weight of the empty UL"
#. module: product
#: selection:product.uom,uom_type:0
msgid "Smaller than the reference UoM"
-msgstr ""
+msgstr "Μικρότερο απο την αναφερόμενη Μ.Μ."
#. module: product
#: field:product.price.type,active:0
@@ -1427,6 +1437,8 @@ msgid ""
"How many times this UoM is smaller than the reference UoM in this category:\n"
"1 * (reference unit) = ratio * (this unit)"
msgstr ""
+"Πόσες φορές αυτή η Μ.Μ. είναι μικρότερη από την αναφερόμενη στην κατηγορία:\n"
+"1*(αναφερόμενη μονάδα)= αναλογία*(τρέχουσα μονάδα)"
#. module: product
#: help:product.template,uom_id:0
@@ -1438,7 +1450,7 @@ msgstr ""
#. module: product
#: model:product.category,name:product.product_category_misc0
msgid "Misc"
-msgstr ""
+msgstr "Διαφ."
#. module: product
#: model:product.template,name:product.product_product_pc4_product_template
@@ -1469,7 +1481,7 @@ msgstr ""
#. module: product
#: field:product.supplierinfo,product_code:0
msgid "Supplier Product Code"
-msgstr ""
+msgstr "Κωδικός Προϊόντος Προμηθευτή"
#. module: product
#: constraint:ir.model:0
@@ -1482,7 +1494,7 @@ msgstr ""
#. module: product
#: view:product.product:0
msgid "Default UOM"
-msgstr ""
+msgstr "Προεπιλεγμένη Μ.Μ."
#. module: product
#: selection:product.ul,type:0
@@ -1552,7 +1564,7 @@ msgstr ""
#. module: product
#: field:product.template,uom_id:0
msgid "Default Unit Of Measure"
-msgstr ""
+msgstr "Προεπιλεγμένη Μονάδα Μέτρησης"
#. module: product
#: model:product.template,name:product.product_product_tow1_product_template
@@ -1632,6 +1644,7 @@ msgstr "Ονομασά για αυτόν τον τύπο τιμής."
#: help:product.packaging,qty:0
msgid "The total number of products you can put by pallet or box."
msgstr ""
+"Ο συνολικός αριθμός προϊόντων που μπορείς να τοποθετήσεις σε παλέτα ή κουτί"
#. module: product
#: help:product.pricelist.version,date_start:0
@@ -1644,6 +1657,8 @@ msgid ""
"Default Unit of Measure used for purchase orders. It must be in the same "
"category than the default unit of measure."
msgstr ""
+"Προεπιλεγμένη Μονάδα Μέτρησης για Παραγγελίες Αγορών. Θα πρέπει να είναι "
+"στην ίδια κατηγορία με την προεπιλεγμένη μονάδα μέτρησης."
#. module: product
#: model:product.template,description:product.product_product_cpu1_product_template
@@ -1658,7 +1673,7 @@ msgstr "Μήκος"
#. module: product
#: model:product.uom.categ,name:product.uom_categ_length
msgid "Length / Distance"
-msgstr ""
+msgstr "Μήκος/Απόσταση"
#. module: product
#: model:product.template,name:product.product_product_0_product_template
@@ -1675,17 +1690,17 @@ msgstr "Τύπος Τιμοκαταλόγου"
#. module: product
#: model:product.category,name:product.product_category_otherproducts0
msgid "Other Products"
-msgstr ""
+msgstr "Άλλα Προϊόντα"
#. module: product
#: view:product.product:0
msgid "Characteristics"
-msgstr ""
+msgstr "Χαρακτηριστικά"
#. module: product
#: field:product.template,sale_ok:0
msgid "Can be Sold"
-msgstr ""
+msgstr "Μπορεί να πουληθεί"
#. module: product
#: field:product.template,produce_delay:0
@@ -1705,7 +1720,7 @@ msgstr "Βασισμένο στο"
#. module: product
#: model:product.category,name:product.product_category_rawmaterial0
msgid "Raw Materials"
-msgstr ""
+msgstr "Ακατέργαστα Υλικά"
#. module: product
#: help:product.product,virtual_available:0
@@ -1723,7 +1738,7 @@ msgstr "Ονομασία Τιμοκαταλόγου"
#. module: product
#: help:product.supplierinfo,product_uom:0
msgid "Supplier Product UoM."
-msgstr ""
+msgstr "Μ.Μ Προϊόντος Προμηθευτή"
#. module: product
#: field:product.uom,rounding:0
@@ -1745,7 +1760,7 @@ msgstr "* ( 1 + "
#. module: product
#: help:product.packaging,weight:0
msgid "The weight of a full package, pallet or box."
-msgstr ""
+msgstr "Το βάρος του συνολικού πακέτου, παλέτας ή κουτιού"
#. module: product
#: model:product.template,name:product.product_product_hdd2_product_template
@@ -1755,12 +1770,12 @@ msgstr "HDD Seagate 7200.8 120GB"
#. module: product
#: model:product.template,name:product.product_product_employee0_product_template
msgid "Employee"
-msgstr ""
+msgstr "Υπάλληλος"
#. module: product
#: model:product.template,name:product.product_product_shelfofcm0_product_template
msgid "Shelf of 100cm"
-msgstr ""
+msgstr "Ράφι των 100εκ"
#. module: product
#: model:ir.model,name:product.model_product_category
@@ -1771,7 +1786,7 @@ msgstr "Κατηγορία Προϊόντος"
#. module: product
#: report:product.pricelist:0
msgid "Price List Name"
-msgstr ""
+msgstr "Όνομα Τιμοκαταλόγου"
#. module: product
#: field:product.supplierinfo,delay:0
@@ -1796,6 +1811,8 @@ msgid ""
"If the active field is set to true, it will allow you to hide the product "
"without removing it."
msgstr ""
+"Εάν το ενεργό πεδίο είναι επιλεγμένο, επιτρέπετε να αποκρήψετε το προϊόν "
+"χωρίς να το αφαιρέσετε."
#. module: product
#: selection:product.ul,type:0
@@ -1805,7 +1822,7 @@ msgstr "Κουτί"
#. module: product
#: model:product.template,name:product.product_product_rearpanelarm1_product_template
msgid "Rear Panel SHE200"
-msgstr ""
+msgstr "Οπίσθιο Πάνελ SHE200"
#. module: product
#: help:product.pricelist.type,key:0
@@ -1824,7 +1841,7 @@ msgstr "HDD Seagate 7200.8 80GB"
#. module: product
#: help:product.supplierinfo,qty:0
msgid "This is a quantity which is converted into Default Uom."
-msgstr ""
+msgstr "Αυτή είναι ποσότητα που μετατράπηκε στην προεπιλεγμένη Μ.Μ."
#. module: product
#: field:product.packaging,ul:0
@@ -1859,7 +1876,7 @@ msgstr "Ποντίκι"
#. module: product
#: field:product.uom,uom_type:0
msgid "UoM Type"
-msgstr ""
+msgstr "Τύπος Μ.Μ."
#. module: product
#: help:product.template,product_manager:0
@@ -1887,7 +1904,7 @@ msgstr "Σειρά"
#. module: product
#: model:product.template,name:product.product_product_rearpanelarm0_product_template
msgid "Rear Panel SHE100"
-msgstr ""
+msgstr "Οπίσθιο Πάνελ SHE100"
#. module: product
#: model:product.template,name:product.product_product_23_product_template
@@ -1903,7 +1920,7 @@ msgstr "Βάρη"
#. module: product
#: model:product.template,name:product.product_product_hotelexpenses0_product_template
msgid "Hotel Expenses"
-msgstr ""
+msgstr "Έξοδα ξενοδοχείου"
#. module: product
#: help:product.uom,factor_inv:0
@@ -1911,16 +1928,19 @@ msgid ""
"How many times this UoM is bigger than the reference UoM in this category:\n"
"1 * (this unit) = ratio * (reference unit)"
msgstr ""
+"Πόσες φορές αυτή η Μ.Μ είναι μεγαλύτερη από την αναφερόμενη Μ.Μ. στην "
+"κατηγορία:\n"
+"1 * (τρέχουσα μονάδα)=αναλογία*(αναφερόμενη μονάδα)"
#. module: product
#: model:product.template,name:product.product_product_shelf0_product_template
msgid "Rack 100cm"
-msgstr ""
+msgstr "Σχάρα 100εκ"
#. module: product
#: help:product.packaging,sequence:0
msgid "Gives the sequence order when displaying a list of packaging."
-msgstr ""
+msgstr "Δίνει την διάταξη ότα εμφανίζονται λίστες συσκευασίας"
#. module: product
#: field:product.pricelist.item,price_round:0
@@ -1945,6 +1965,8 @@ msgid ""
"The minimal quantity to purchase to this supplier, expressed in the default "
"unit of measure."
msgstr ""
+"Η ελάχιστη ποσότητα προς αγορά από τον προμηθευτή, εκφραζόμενο στην "
+"προεπιλεγμένη μονάδα μέτρησης."
#. module: product
#: selection:product.template,mes_type:0
@@ -1954,7 +1976,7 @@ msgstr "Μεταβλητή"
#. module: product
#: field:product.template,rental:0
msgid "Can be Rent"
-msgstr ""
+msgstr "Μπορεί να Ενοικιαστεί"
#. module: product
#: model:product.price.type,name:product.standard_price
@@ -2003,7 +2025,7 @@ msgstr ""
#. module: product
#: view:product.price_list:0
msgid "Close"
-msgstr ""
+msgstr "Κλείνω"
#. module: product
#: model:ir.model,name:product.model_product_pricelist_item
@@ -2023,7 +2045,7 @@ msgstr "Ιδιότητες Πωλήσεων"
#. module: product
#: model:product.uom,name:product.product_uom_ton
msgid "tonne"
-msgstr ""
+msgstr "τόνος"
#. module: product
#: view:product.product:0
@@ -2034,7 +2056,7 @@ msgstr "Καθυστερήσεις"
#. module: product
#: model:process.node,note:product.process_node_product0
msgid "Creation of the product"
-msgstr ""
+msgstr "Δημιουργία του προϊόντος"
#. module: product
#: help:product.template,type:0
@@ -2099,7 +2121,7 @@ msgstr "Μεταβλητή Προϊόντος"
#. module: product
#: model:product.category,name:product.product_category_shelves0
msgid "Shelves"
-msgstr ""
+msgstr "Ράφια"
#. module: product
#: code:addons/product/pricelist.py:0
@@ -2161,7 +2183,7 @@ msgstr "Τιμή Λιανικής"
#. module: product
#: field:product.category,type:0
msgid "Category Type"
-msgstr ""
+msgstr "Τύπος Κατηγορίας"
#. module: product
#: model:product.category,name:product.cat2
diff --git a/addons/product_expiry/i18n/el.po b/addons/product_expiry/i18n/el.po
new file mode 100644
index 00000000000..089c7c89827
--- /dev/null
+++ b/addons/product_expiry/i18n/el.po
@@ -0,0 +1,199 @@
+# Greek translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2010-10-18 17:46+0000\n"
+"PO-Revision-Date: 2010-11-11 15:54+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
+"Language-Team: Greek <el@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: 2010-11-12 04:49+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: product_expiry
+#: model:ir.model,name:product_expiry.model_stock_production_lot
+msgid "Production lot"
+msgstr "Παρτίδα Παραγωγής"
+
+#. module: product_expiry
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Το όνομα του Αντικειμένου θα πρέπει να ξεκινά με x_ και να μην περιέχει "
+"ειδικούς χαρακτήρες !"
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_from_product_template
+msgid "Ham"
+msgstr "Ζαμπόν"
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_lait_product_template
+msgid "Cow milk"
+msgstr "Γάλα Αγελάδας"
+
+#. module: product_expiry
+#: model:ir.module.module,shortdesc:product_expiry.module_meta_information
+msgid "Products date of expiry"
+msgstr "Ημερομηνία Λήξης Προϊόντων"
+
+#. module: product_expiry
+#: constraint:product.template:0
+msgid ""
+"Error: The default UOM and the purchase UOM must be in the same category."
+msgstr ""
+"Λάθος: Η προεπιλεγμένη Μ.Μ και η Μ.Μ αγοράς θα πρέπει να είναι στην ίδια "
+"κατηγορία"
+
+#. module: product_expiry
+#: field:product.product,life_time:0
+msgid "Product Life Time"
+msgstr "Διάρκει Ζωής του προϊόντος"
+
+#. module: product_expiry
+#: field:product.product,use_time:0
+msgid "Product Use Time"
+msgstr "Χρόνος Χρήσης Προϊόντος"
+
+#. module: product_expiry
+#: help:stock.production.lot,alert_date:0
+msgid "The date signifying an alert to notify about the production lot."
+msgstr "Η ημερομηνία δήλωσης υπενθύμισης για την παρτίδα παραγωγής."
+
+#. module: product_expiry
+#: model:ir.model,name:product_expiry.model_product_product
+msgid "Product"
+msgstr "Προϊόν"
+
+#. module: product_expiry
+#: help:stock.production.lot,life_date:0
+msgid "The date the lot may become dangerous and should not be consumed."
+msgstr ""
+"Η ημερομηνία που η παρτίδα μπορεί να είναι επικίνδυνη και δεν θα πρέπει να "
+"καταναλωθεί"
+
+#. module: product_expiry
+#: field:product.product,removal_time:0
+msgid "Product Removal Time"
+msgstr "Χρόνος απομάκρυνσης Προϊόντος"
+
+#. module: product_expiry
+#: field:stock.production.lot,removal_date:0
+msgid "Removal Date"
+msgstr "Ημερομηνία Απομάκρυνσης"
+
+#. module: product_expiry
+#: model:ir.module.module,description:product_expiry.module_meta_information
+msgid ""
+"Track different dates on products and production lots:\n"
+" - end of life\n"
+" - best before date\n"
+" - removal date\n"
+" - alert date\n"
+"Used, for example, in food industries."
+msgstr ""
+"Παρακολούθηση διαφορετικών ημερομηνιών σε προϊόντα και παρτίδες:\n"
+" - τέλος ζωής\n"
+" - κατάλληλο πριν την ημερομηνία\n"
+" - ημερομηνία απομάκρυνσης\n"
+" - ημερομηνία υπενθύμισης"
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_pain_product_template
+msgid "Bread"
+msgstr "Ψωμί"
+
+#. module: product_expiry
+#: model:product.uom,name:product_expiry.product_uom_ltr
+#: model:product.uom.categ,name:product_expiry.product_uom_categ_vol
+msgid "LTR"
+msgstr ""
+
+#. module: product_expiry
+#: view:product.product:0
+#: view:stock.production.lot:0
+msgid "Dates"
+msgstr "Ημερομηνίες"
+
+#. module: product_expiry
+#: constraint:product.template:0
+msgid "Error: UOS must be in a different category than the UOM"
+msgstr ""
+
+#. module: product_expiry
+#: help:product.product,alert_time:0
+msgid ""
+"The number of days after which, needs an alert to notify about the "
+"production lot."
+msgstr ""
+"Ο αριθμός ημερών που θα χρειαστεί να γίνει υπενθήμιση για την παρτίδα."
+
+#. module: product_expiry
+#: field:stock.production.lot,life_date:0
+msgid "End of Life Date"
+msgstr "Ημερομηνία Λήξης Ζωής"
+
+#. module: product_expiry
+#: field:stock.production.lot,use_date:0
+msgid "Best before Date"
+msgstr "Ανάλωση κατά προτίμηση πριν την ημερομηνία"
+
+#. module: product_expiry
+#: help:stock.production.lot,use_date:0
+msgid "The date the lot starts deteriorating without becoming dangerous."
+msgstr ""
+"Η ημερομηνία που η παρτίδα αρχίζει να χαλάει χωρίς να γίνεται επικίνδυνη"
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_jambon_product_template
+msgid "French cheese Camenbert"
+msgstr "Γαλλικό τυρί Camenbert"
+
+#. module: product_expiry
+#: help:product.product,removal_time:0
+msgid "The number of days before a production lot should be removed."
+msgstr "Ο αριθμός ημερών πριν χρειαστεί να απομακρυνθεί η παρτίδα"
+
+#. module: product_expiry
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: product_expiry
+#: help:product.product,use_time:0
+msgid ""
+"The number of days before a production lot starts deteriorating without "
+"becoming dangerous."
+msgstr "Ο αριθμός ημερών πριν η παρτίδα χαλάσει χωρίς να γίνει επικίνδυνη"
+
+#. module: product_expiry
+#: constraint:product.product:0
+msgid "Error: Invalid ean code"
+msgstr ""
+
+#. module: product_expiry
+#: help:product.product,life_time:0
+msgid ""
+"The number of days before a production lot may become dangerous and should "
+"not be consumed."
+msgstr ""
+"Αριθμός ημερών πριν η παρτίδα αρχίζει να γίνεται επικίνδυνη και δεν πρέπει "
+"να καταναλωθεί"
+
+#. module: product_expiry
+#: help:stock.production.lot,removal_date:0
+msgid "The date the lot should be removed."
+msgstr "Η ημερομηνία που η παρτίδα πρέπει να απομακρυνθεί."
+
+#. module: product_expiry
+#: field:product.product,alert_time:0
+msgid "Product Alert Time"
+msgstr "Ύπενθύμιση Προϊόντος"
diff --git a/addons/product_manufacturer/i18n/el.po b/addons/product_manufacturer/i18n/el.po
new file mode 100644
index 00000000000..c329771ec8d
--- /dev/null
+++ b/addons/product_manufacturer/i18n/el.po
@@ -0,0 +1,89 @@
+# Greek translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2010-10-18 17:46+0000\n"
+"PO-Revision-Date: 2010-11-11 15:58+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
+"Language-Team: Greek <el@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: 2010-11-12 04:49+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: product_manufacturer
+#: field:product.product,manufacturer_pref:0
+msgid "Manufacturer Product Code"
+msgstr "Κωδικός Κατασκευαστή"
+
+#. module: product_manufacturer
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Λαναθασμένο XML για προβολή Αρχιτεκτονικής!"
+
+#. module: product_manufacturer
+#: view:product.manufacturer.attribute:0
+msgid "Product Template Name"
+msgstr "Όνομα Προτύπου Προϊόντος"
+
+#. module: product_manufacturer
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Το Αντικείμενο πρέπει να ξεκινά με x_ και να μην περιέχει ειδικούς χαρακτήρες"
+
+#. module: product_manufacturer
+#: model:ir.model,name:product_manufacturer.model_product_manufacturer_attribute
+msgid "Product attributes"
+msgstr "Ιδιότητες προϊόντος"
+
+#. module: product_manufacturer
+#: view:product.manufacturer.attribute:0
+#: view:product.product:0
+msgid "Product Attributes"
+msgstr "Ιδιότητες Προϊόντος"
+
+#. module: product_manufacturer
+#: field:product.manufacturer.attribute,name:0
+msgid "Attribute"
+msgstr "Ιδιότητα"
+
+#. module: product_manufacturer
+#: model:ir.model,name:product_manufacturer.model_product_product
+#: field:product.manufacturer.attribute,product_id:0
+msgid "Product"
+msgstr "Προϊόν"
+
+#. module: product_manufacturer
+#: field:product.manufacturer.attribute,value:0
+msgid "Value"
+msgstr "Τιμή"
+
+#. module: product_manufacturer
+#: view:product.product:0
+#: field:product.product,attribute_ids:0
+msgid "Attributes"
+msgstr "Ιδιότητες"
+
+#. module: product_manufacturer
+#: model:ir.module.module,shortdesc:product_manufacturer.module_meta_information
+msgid "Products Attributes & Manufacturers"
+msgstr "Ιδιότητες Προϊόντος και Κατασκευαστές"
+
+#. module: product_manufacturer
+#: field:product.product,manufacturer_pname:0
+msgid "Manufacturer Product Name"
+msgstr "Όνομα Προϊόντος Κατασκευαστή"
+
+#. module: product_manufacturer
+#: view:product.product:0
+#: field:product.product,manufacturer:0
+msgid "Manufacturer"
+msgstr "Κατασκευαστής"
diff --git a/addons/product_margin/i18n/el.po b/addons/product_margin/i18n/el.po
index 2e346c6fe1b..6cd71fee11e 100644
--- a/addons/product_margin/i18n/el.po
+++ b/addons/product_margin/i18n/el.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-08-03 09:09+0000\n"
-"Last-Translator: mga (Open ERP) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 16:04+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
"Language-Team: nls@hellug.gr <nls@hellug.gr>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-30 05:46+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
"X-Poedit-Country: GREECE\n"
"X-Poedit-Language: Greek\n"
@@ -23,7 +23,7 @@ msgstr ""
#: view:product.product:0
#: field:product.product,turnover:0
msgid "Turnover"
-msgstr "Ανατροπή"
+msgstr "Τζίρος"
#. module: product_margin
#: field:product.product,expected_margin_rate:0
@@ -43,7 +43,7 @@ msgstr ""
#. module: product_margin
#: help:product.product,total_margin:0
msgid "Turnorder - Standard price"
-msgstr ""
+msgstr "Τζίρος- Καθορισμένη Τιμή"
#. module: product_margin
#: field:product.margin,to_date:0
@@ -63,7 +63,7 @@ msgstr "Από Ημερ/νία"
#. module: product_margin
#: constraint:ir.ui.menu:0
msgid "Error ! You can not create recursive Menu."
-msgstr ""
+msgstr "Λάθος ! Δεν μπορείς να δημιουργήσεις κενό Μενού"
#. module: product_margin
#: selection:product.margin,invoice_state:0
@@ -76,6 +76,8 @@ msgstr "Πρόχειρα, Ανοικτά και Πληρωμένα"
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
+"Το όνομα του Αντικειμένου θα πρέπει να ξεκινά με x_ και να μην περιέχει "
+"ειδικούς χαρακτήρες"
#. module: product_margin
#: help:product.product,sale_expected:0
@@ -99,7 +101,7 @@ msgstr "Περιθώρια στα Προϊόντα"
#. module: product_margin
#: model:ir.model,name:product_margin.model_product_product
msgid "Product"
-msgstr ""
+msgstr "Προϊόν"
#. module: product_margin
#: view:product.product:0
@@ -115,7 +117,7 @@ msgstr "Πληρωμένα"
#. module: product_margin
#: help:product.product,sales_gap:0
msgid "Expected Sale - Turn Over"
-msgstr ""
+msgstr "Προσδοκόμενη Πώληση - Τζίρος"
#. module: product_margin
#: field:product.product,sale_expected:0
@@ -142,7 +144,7 @@ msgstr ""
#. module: product_margin
#: help:product.product,expected_margin:0
msgid "Expected Sale - Normal Cost"
-msgstr ""
+msgstr "Προσδοκόμενη Πώληση - Κανονικό Κόστος"
#. module: product_margin
#: field:product.product,purchase_num_invoiced:0
@@ -237,7 +239,7 @@ msgstr "Μέση Τιμή στα Τιμολόγια Προμηθευτή "
#. module: product_margin
#: view:product.margin:0
msgid "Properties categories"
-msgstr ""
+msgstr "Ιδοότητες κατηγοριών"
#. module: product_margin
#: help:product.product,total_margin_rate:0
@@ -272,7 +274,7 @@ msgstr "Περιθώρια Προϊόντων"
#. module: product_margin
#: view:product.margin:0
msgid "General Information"
-msgstr ""
+msgstr "Γενικές Πληροφορίες"
#. module: product_margin
#: field:product.product,purchase_gap:0
@@ -307,7 +309,7 @@ msgstr "Άθροισμα Ποσοτήτων στα Τιμολόγια Πελάτ
#. module: product_margin
#: model:ir.model,name:product_margin.model_product_margin
msgid "Product Margin"
-msgstr ""
+msgstr "Περιθόριο Προϊόντος"
#~ msgid "Reporting"
#~ msgstr "Αναφορές"
diff --git a/addons/product_visible_discount/i18n/el.po b/addons/product_visible_discount/i18n/el.po
new file mode 100644
index 00000000000..eb3651839a7
--- /dev/null
+++ b/addons/product_visible_discount/i18n/el.po
@@ -0,0 +1,76 @@
+# Greek translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2010-10-18 17:46+0000\n"
+"PO-Revision-Date: 2010-11-11 16:08+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
+"Language-Team: Greek <el@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: 2010-11-12 04:49+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: product_visible_discount
+#: code:addons/product_visible_discount/product_visible_discount.py:0
+#, python-format
+msgid "No Purchase Pricelist Found !"
+msgstr "Δεν υπάρχει Τιμοκατάλογος Αγοράς!"
+
+#. module: product_visible_discount
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Λανθασμένο XML για προβολή Αρχιτεκτονικής"
+
+#. module: product_visible_discount
+#: code:addons/product_visible_discount/product_visible_discount.py:0
+#, python-format
+msgid "No Sale Pricelist Found "
+msgstr "Δεν βρέθηκε Τιμοκατάλογος Πώλησης "
+
+#. module: product_visible_discount
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Το όνομα του Αντικειμένου θα πρέπει να ξεκινά με x_ και να μην περιέχει "
+"ειδικούς χαρακτήρες"
+
+#. module: product_visible_discount
+#: model:ir.module.module,shortdesc:product_visible_discount.module_meta_information
+#: field:product.pricelist,visible_discount:0
+msgid "Visible Discount"
+msgstr "Ορατή έκπτωση"
+
+#. module: product_visible_discount
+#: model:ir.model,name:product_visible_discount.model_account_invoice_line
+msgid "Invoice Line"
+msgstr "Γραμμή Τιμολογίου"
+
+#. module: product_visible_discount
+#: code:addons/product_visible_discount/product_visible_discount.py:0
+#, python-format
+msgid "You must first define a pricelist for Customer !"
+msgstr "Θα πρέπει πρώτα να ορίσεις τιμοκατάλογο για τον Πελάτη !"
+
+#. module: product_visible_discount
+#: model:ir.model,name:product_visible_discount.model_product_pricelist
+msgid "Pricelist"
+msgstr "Τιμοκατάλογος"
+
+#. module: product_visible_discount
+#: code:addons/product_visible_discount/product_visible_discount.py:0
+#, python-format
+msgid "You must first define a pricelist for Supplier !"
+msgstr "Θα πρέπει πρώτα να ορίσεις τιμοκατάλογο για τον Προμηθευτή !"
+
+#. module: product_visible_discount
+#: model:ir.model,name:product_visible_discount.model_sale_order_line
+msgid "Sale Order Line"
+msgstr "Γραμμή Παραγγελίας Πώλησης"
diff --git a/addons/project_caldav/project_caldav.py b/addons/project_caldav/project_caldav.py
index fb2d62a9684..f1a4bc73e4b 100644
--- a/addons/project_caldav/project_caldav.py
+++ b/addons/project_caldav/project_caldav.py
@@ -22,7 +22,8 @@
from osv import fields, osv
from caldav import calendar
from datetime import datetime
-
+from tools.translate import _
+from base_calendar import base_calendar
from project.project import task as base_project_task
class project_task(osv.osv):
@@ -45,6 +46,41 @@ class project_task(osv.osv):
'state': 'draft',
}
+
+ def open_task(self, cr, uid, ids, context=None):
+ """
+ Open Task Form for Project Task.
+ @param cr: the current row, from the database cursor,
+ @param uid: the current user’s ID for security checks,
+ @param ids: List of project task’s IDs
+ @param context: A standard dictionary for contextual values
+ @return: Dictionary value which open Project Task form.
+ """
+
+ if not context:
+ context = {}
+
+ data_pool = self.pool.get('ir.model.data')
+ value = {}
+ task_form_id = data_pool.get_object(cr, uid, 'project', 'view_task_form2')
+ task_tree_id = data_pool.get_object(cr, uid, 'project', 'view_task_tree2')
+ task_calendar_id = data_pool.get_object(cr, uid, 'project', 'view_task_calendar')
+ for id in ids:
+ value = {
+ 'name': _('Tasks'),
+ 'view_type': 'form',
+ 'view_mode': 'form,tree',
+ 'res_model': 'project.task',
+ 'view_id': False,
+ 'views': [(task_form_id, 'form'), (task_tree_id, 'tree'), (task_calendar_id, 'calendar')],
+ 'type': 'ir.actions.act_window',
+ 'res_id': base_calendar.base_calendar_id2real_id(id),
+ 'nodestroy': True
+ }
+
+ return value
+
+
def import_cal(self, cr, uid, data, data_id=None, context=None):
todo_obj = self.pool.get('basic.calendar.todo')
vals = todo_obj.import_cal(cr, uid, data, context=context)
diff --git a/addons/project_caldav/project_caldav_view.xml b/addons/project_caldav/project_caldav_view.xml
index 259d336c398..cfd27ce4240 100644
--- a/addons/project_caldav/project_caldav_view.xml
+++ b/addons/project_caldav/project_caldav_view.xml
@@ -13,7 +13,7 @@
<button string="Assign Task"
name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d"
icon="terp-partner" type="action"
- context="{'model' : 'project.task'}" colspan="2"/>
+ context="{'model' : 'project.task', 'attendee_field':'attendee_ids'}" colspan="2"/>
<field name="attendee_ids" colspan="4"
nolabel="1" widget="one2many" mode="tree,form">
<tree string="Assignees details" editable="top">
@@ -70,7 +70,7 @@
<button string="Edit All"
help="Edit all Ourrences of recurrent Task"
attrs="{'invisible':[('rrule_type','in', ('none', False))]}"
- name="open_meeting" icon="gtk-edit"
+ name="open_task" icon="gtk-edit"
type="object" />
<button string="Exclude range" groups="base.group_extended"
help="Add Exception Rule"
diff --git a/addons/project_scrum/board_project_scrum_view.xml b/addons/project_scrum/board_project_scrum_view.xml
index 2d146c94367..08acece9bbb 100644
--- a/addons/project_scrum/board_project_scrum_view.xml
+++ b/addons/project_scrum/board_project_scrum_view.xml
@@ -16,9 +16,9 @@
<field name="effective_hours" sum="Effective hours" widget="float_time"/>
<field name="expected_hours" sum="Expected hours" widget="float_time"/>
<field name="state"/>
- <button type="object" string="Open" name="button_open" states="draft,pending" icon="gtk-jump-to"/>
+ <button type="object" string="Open" name="button_open" states="draft,pending" icon="gtk-ok"/>
<button type="object" string="Pending" name="button_pending" states="open" icon="gtk-media-pause"/>
- <button type="object" string="Close" name="button_close" states="open,pending" icon="gtk-jump-to"/>
+ <button type="object" string="Close" name="button_close" states="open,pending" icon="terp-dialog-close"/>
<button type="object" string="Set to Draft" name="button_draft" states="cancel,done" icon="gtk-convert"/>
<button name="%(project_scrum.report_scrum_sprint_burndown_chart)d" states="open,draft,close,cancel"
string="Burndown Chart" type="action" icon="gtk-print"/>
diff --git a/addons/project_scrum/project_scrum_demo.xml b/addons/project_scrum/project_scrum_demo.xml
index 9dc97c351a3..76f2846c76f 100644
--- a/addons/project_scrum/project_scrum_demo.xml
+++ b/addons/project_scrum/project_scrum_demo.xml
@@ -154,7 +154,6 @@
<!-- Resource: project.product.backlog -->
<record id="scrum_product_backlog_0" model="project.scrum.product.backlog">
- <field name="priority">3</field>
<field name="name">Automatic migration system</field>
<field name="expected_hours">6.0</field>
<field name="note">This new system will enable you to migrate automatically from an old version of OpenERP to a new one. This system will migrate not only the OpenERP system but also the customers particularities. This happens without any kind of script or programming. It has been possible to carry out such a system thanks to the descriptive approach of OpenERP components. </field>
@@ -163,7 +162,6 @@
<field name="project_id" ref="project.project_project_9"/>
</record>
<record id="scrum_product_backlog_1" model="project.scrum.product.backlog">
- <field name="priority">3</field>
<field name="name">New accounting module</field>
<field name="expected_hours">111.0</field>
<field name="note">The accounting module of OpenERP (financial accounting and management accounting) is being reshaped. New functionalities will be added: intangible assets, a new way of presenting ledgers and bookings, new stock valuation calculation, and lots of predefined reports. </field>
@@ -172,7 +170,6 @@
<field name="project_id" ref="project.project_project_9"/>
</record>
<record id="scrum_product_backlog_2" model="project.scrum.product.backlog">
- <field name="priority">3</field>
<field name="name">Automated Plugin System to install/uninstall modules</field>
<field name="expected_hours">4.0</field>
<field name="note">We have to develop a plug-in system which will enable to install/remove modules. The basic version of OpenERP will include only the required minimum, and you will select the modules thanks to the plug-in manager. This allows you to limit your system to your real needs: quality management, localisations, project and service management, marketing campaigns, and so on... </field>
@@ -271,7 +268,7 @@
<field name="project_id" ref="project.project_project_9"/>
<field name="name">Review all English Terms</field>
<field name="state">done</field>
- <field eval="time.strftime('%Y-%m-%d')" name="date_close"/>
+ <field eval="time.strftime('%Y-%m-%d')" name="date_end"/>
<field name="product_backlog_id" ref="scrum_product_backlog_3"/>
</record>
<record id="scrum_task_4" model="project.task">
@@ -280,7 +277,7 @@
<field name="project_id" ref="project.project_project_9"/>
<field name="name">Review all french terms</field>
<field name="state">done</field>
- <field eval="time.strftime('%Y-%m-%d')" name="date_close"/>
+ <field eval="time.strftime('%Y-%m-%d')" name="date_end"/>
<field name="product_backlog_id" ref="scrum_product_backlog_3"/>
</record>
<record id="scrum_task_5" model="project.task">
@@ -289,7 +286,7 @@
<field name="project_id" ref="project.project_project_9"/>
<field name="name">Analytic Accounting features</field>
<field name="state">done</field>
- <field eval="time.strftime('%Y-%m-%d')" name="date_close"/>
+ <field eval="time.strftime('%Y-%m-%d')" name="date_end"/>
<field name="product_backlog_id" ref="scrum_product_backlog_1"/>
</record>
<record id="scrum_task_6" model="project.task">
@@ -346,7 +343,7 @@
<field name="project_id" ref="project.project_project_9"/>
<field name="name">Bugfix - memory leak</field>
<field name="state">done</field>
- <field eval="time.strftime('%Y-%m-%d')" name="date_close"/>
+ <field eval="time.strftime('%Y-%m-%d')" name="date_end"/>
<field name="product_backlog_id" ref="scrum_product_backlog_4"/>
</record>
<record id="scrum_task_13" model="project.task">
diff --git a/addons/project_timesheet/i18n/de.po b/addons/project_timesheet/i18n/de.po
index a6853badcca..e64004dfe15 100644
--- a/addons/project_timesheet/i18n/de.po
+++ b/addons/project_timesheet/i18n/de.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2010-11-10 09:17+0000\n"
-"Last-Translator: Thorsten Vocks <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 08:43+0000\n"
+"Last-Translator: OpenERP Administrators <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: 2010-11-11 04:46+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: project_timesheet
diff --git a/addons/project_timesheet/report/task_report_view.xml b/addons/project_timesheet/report/task_report_view.xml
index 379922f4838..87949d6812a 100644
--- a/addons/project_timesheet/report/task_report_view.xml
+++ b/addons/project_timesheet/report/task_report_view.xml
@@ -45,11 +45,25 @@
</search>
</field>
</record>
+
+ <record id="view_task_hour_per_month_graph" model="ir.ui.view">
+ <field name="name">report.timesheet.task.user.graph</field>
+ <field name="model">report.timesheet.task.user</field>
+ <field name="type">graph</field>
+ <field name="arch" type="xml">
+ <graph string="Task Hours Per Month" type="bar">
+ <field name="user_id"/>
+ <field name="task_hrs" operator="+"/>
+ <field name="timesheet_hrs" operator="+"/>
+ </graph>
+ </field>
+ </record>
+
<record id="action_report_timesheet_task_user" model="ir.actions.act_window">
<field name="name">Task Hours Per Month</field>
<field name="res_model">report.timesheet.task.user</field>
<field name="view_type">form</field>
- <field name="view_mode">tree</field>
+ <field name="view_mode">tree,graph</field>
<field name="context">{"search_default_user_id":uid}</field>
<field name="search_view_id" ref="view_report_timesheet_task_user_search"/>
</record>
diff --git a/addons/purchase/i18n/el.po b/addons/purchase/i18n/el.po
index 5cee459253c..ab9f2198c20 100644
--- a/addons/purchase/i18n/el.po
+++ b/addons/purchase/i18n/el.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-03 10:10+0000\n"
-"Last-Translator: mga (Open ERP) <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 16:10+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
"Language-Team: nls@hellug.gr <nls@hellug.gr>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-30 05:12+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
"X-Poedit-Country: GREECE\n"
"X-Poedit-Language: Greek\n"
@@ -924,31 +924,32 @@ msgstr ""
#: field:report.purchase.order.category,price_total:0
#: field:report.purchase.order.product,price_total:0
msgid "Total Price"
-msgstr ""
+msgstr "Συνολική Τιμή"
#. module: purchase
#: selection:report.purchase.order.category,state:0
#: selection:report.purchase.order.product,state:0
msgid "Quotation"
-msgstr ""
+msgstr "Προσφορά"
#. module: purchase
#: selection:report.purchase.order.category,state:0
#: selection:report.purchase.order.product,state:0
msgid "Manual in progress"
-msgstr ""
+msgstr "Χειροκίνητο σε εξέλιξη"
#. module: purchase
#: selection:report.purchase.order.category,state:0
#: selection:report.purchase.order.product,state:0
msgid "In progress"
-msgstr ""
+msgstr "Σε εξέλιξη"
#. module: purchase
#: code:addons/purchase/purchase.py:0
#, python-format
msgid "Cannot delete Purchase Order(s) which are in %s State!"
msgstr ""
+"Δεν μπορούνε να διαγραφούνε Παραγγελίες που βρίσκονται σε %s κατάσταση"
#~ msgid ""
#~ "Please note that orders will only be merged if they are to the same partner "
diff --git a/addons/sale_crm/i18n/el.po b/addons/sale_crm/i18n/el.po
index 58b11199ffb..5d6f820012e 100644
--- a/addons/sale_crm/i18n/el.po
+++ b/addons/sale_crm/i18n/el.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:46+0000\n"
-"PO-Revision-Date: 2009-06-15 07:22+0000\n"
-"Last-Translator: Panagiotis Kranidiotis <kranidiotis@vatica.org>\n"
+"PO-Revision-Date: 2010-11-11 13:52+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
"Language-Team: nls@hellug.gr <nls@hellug.gr>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-30 05:20+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
"X-Poedit-Country: GREECE\n"
"X-Poedit-Language: Greek\n"
@@ -29,35 +29,37 @@ msgstr "Πελάτης"
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
+"Το όνομα του Αντικειμένου πρέπει να ξεκινά με x_ και να μην περιέχει "
+"ειδικούς χαρακτήρες!"
#. module: sale_crm
#: view:account.invoice.report:0
#: view:board.board:0
msgid "Monthly Turnover"
-msgstr ""
+msgstr "Μηνιαίος Τζίρος"
#. module: sale_crm
#: view:crm.make.sale:0
msgid "Convert to Quotation"
-msgstr ""
+msgstr "Μετατροπή σε Προσφορά"
#. module: sale_crm
#: code:addons/sale_crm/wizard/crm_make_sale.py:0
#, python-format
msgid "is converted to Quotation."
-msgstr ""
+msgstr "έχει μετατραπεί σε προσφορά"
#. module: sale_crm
#: code:addons/sale_crm/wizard/crm_make_sale.py:0
#, python-format
msgid "Data Insufficient!"
-msgstr ""
+msgstr "Ανεπαρκή Δεδομένα!"
#. module: sale_crm
#: code:addons/sale_crm/wizard/crm_make_sale.py:0
#, python-format
msgid "Customer has no addresses defined!"
-msgstr ""
+msgstr "Δεν υπάρχει επιλεγμένη διεύθυνση στον πελάτη"
#. module: sale_crm
#: constraint:ir.actions.act_window:0
@@ -74,6 +76,8 @@ msgstr ""
msgid ""
"Check this to close the opportunity after having created the sale order."
msgstr ""
+"Τσέκαρε αυτό για να κλείσει η ευκαιρία αφού δημιουργήθηκε η παραγγελία "
+"πώλησης."
#. module: sale_crm
#: view:crm.lead:0
@@ -89,39 +93,39 @@ msgstr "Άκυρο XML για Αρχιτεκτονική Όψης!"
#: code:addons/sale_crm/wizard/crm_make_sale.py:0
#, python-format
msgid "Converted to Sales Quotation(id: %s)."
-msgstr ""
+msgstr "Μετατράπηκε σε Προσφορά Πώλησης(id:%s)."
#. module: sale_crm
#: model:ir.model,name:sale_crm.model_crm_make_sale
msgid "Make sale"
-msgstr ""
+msgstr "Δημιουργία πώλησης"
#. module: sale_crm
#: code:addons/sale_crm/wizard/crm_make_sale.py:0
#, python-format
msgid "Opportunity "
-msgstr ""
+msgstr "Ευκαιρία "
#. module: sale_crm
#: code:addons/sale_crm/wizard/crm_make_sale.py:0
#, python-format
msgid "Opportunity: %s"
-msgstr ""
+msgstr "Ευκαιρία: %s"
#. module: sale_crm
#: model:ir.model,name:sale_crm.model_sale_order
msgid "Sale Order"
-msgstr ""
+msgstr "Παραγγελία Πώλησης"
#. module: sale_crm
#: model:ir.module.module,shortdesc:sale_crm.module_meta_information
msgid "Creates Sales order from Opportunity"
-msgstr ""
+msgstr "Δημιουργεί παραγγελία Πώλησης από Ευκαιρία"
#. module: sale_crm
#: model:ir.actions.act_window,name:sale_crm.action_quotation_for_sale_crm
msgid "Quotations"
-msgstr ""
+msgstr "Προσφορές"
#. module: sale_crm
#: field:crm.make.sale,shop_id:0
@@ -131,18 +135,18 @@ msgstr "Κατάστημα"
#. module: sale_crm
#: view:board.board:0
msgid "My Quotations"
-msgstr ""
+msgstr "Οι Προσφορές μου"
#. module: sale_crm
#: field:crm.make.sale,close:0
msgid "Close Opportunity"
-msgstr ""
+msgstr "Κλείσιμο Ευκαιρίας"
#. module: sale_crm
#: view:sale.order:0
#: field:sale.order,section_id:0
msgid "Sales Team"
-msgstr ""
+msgstr "Ομάδα Πώλησης"
#. module: sale_crm
#: model:ir.actions.act_window,name:sale_crm.action_crm_make_sale
diff --git a/addons/stock/i18n/de.po b/addons/stock/i18n/de.po
index 8bba17c06a2..2067dee3074 100644
--- a/addons/stock/i18n/de.po
+++ b/addons/stock/i18n/de.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:47+0000\n"
-"PO-Revision-Date: 2010-11-11 01:09+0000\n"
-"Last-Translator: Ferdinand Gassauer <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 10:12+0000\n"
+"Last-Translator: OpenERP Administrators <Unknown>\n"
"Language-Team: German <kde-i18n-doc@kde.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-11-11 04:43+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock
diff --git a/addons/stock/i18n/el.po b/addons/stock/i18n/el.po
index aac886d1804..1451f242c1f 100644
--- a/addons/stock/i18n/el.po
+++ b/addons/stock/i18n/el.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:47+0000\n"
-"PO-Revision-Date: 2010-08-02 14:38+0000\n"
-"Last-Translator: j0hn aka c7p <c7p.admin@gmail.com>\n"
+"PO-Revision-Date: 2010-11-11 16:47+0000\n"
+"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
"Language-Team: nls@hellug.gr <nls@hellug.gr>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-30 05:08+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
"X-Poedit-Country: GREECE\n"
"X-Poedit-Language: Greek\n"
@@ -43,7 +43,7 @@ msgstr "Συνδεδεμένη Σταθερή Τοποθεσία"
#: view:stock.move:0
#: view:stock.picking:0
msgid "Put in a new pack"
-msgstr ""
+msgstr "Τοποθέτηση σε νέο πακέτο"
#. module: stock
#: selection:stock.location,icon:0
@@ -53,7 +53,7 @@ msgstr "STOCK_SAVE"
#. module: stock
#: field:stock.move.split.lines,action:0
msgid "Action"
-msgstr ""
+msgstr "Ενέργεια"
#. module: stock
#: code:addons/stock/product.py:0
@@ -87,7 +87,7 @@ msgstr "STOCK_SORT_ASCENDING"
#. module: stock
#: field:stock.production.lot.revision,indice:0
msgid "Revision Number"
-msgstr ""
+msgstr "Αριθμός Αναθεώρησης"
#. module: stock
#: selection:stock.location,icon:0
@@ -110,7 +110,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.menu,name:stock.menu_stock_inventory_control
msgid "Inventory Control"
-msgstr ""
+msgstr "Έλεγχος Παγίων"
#. module: stock
#: help:stock.production.lot,ref:0
@@ -128,7 +128,7 @@ msgstr "STOCK_ZOOM_100"
#: model:ir.actions.report.xml,name:stock.report_picking_list
#: view:stock.picking:0
msgid "Picking list"
-msgstr ""
+msgstr "Λίστα Παραλαβής"
#. module: stock
#: view:board.board:0
@@ -163,7 +163,7 @@ msgstr "Ποσότητα"
#: view:report.stock.move:0
#: field:report.stock.move,day:0
msgid "Day"
-msgstr ""
+msgstr "Ημέρα"
#. module: stock
#: view:stock.inventory:0
@@ -185,7 +185,7 @@ msgstr "Ημερολόγιο Αποθέματος"
#. module: stock
#: view:report.stock.move:0
msgid "Incoming"
-msgstr ""
+msgstr "Εισερχόμενα"
#. module: stock
#: help:product.category,property_stock_account_output_categ:0
@@ -224,7 +224,7 @@ msgstr ""
#: view:stock.picking:0
#: field:stock.picking,origin:0
msgid "Origin"
-msgstr ""
+msgstr "Προέλευση"
#. module: stock
#: model:ir.ui.menu,name:stock.menu_stock_configuration
@@ -270,7 +270,7 @@ msgstr ""
#: code:addons/stock/stock.py:0
#, python-format
msgid "Warning!"
-msgstr ""
+msgstr "Προειδοποίηση!"
#. module: stock
#: field:stock.invoice.onshipping,group:0
@@ -412,7 +412,7 @@ msgstr "STOCK_QUIT"
#. module: stock
#: field:report.stock.move,product_qty_in:0
msgid "In Qty"
-msgstr ""
+msgstr "Σε Ποσότητα"
#. module: stock
#: code:addons/stock/wizard/stock_fill_inventory.py:0
@@ -434,7 +434,7 @@ msgstr ""
#. module: stock
#: view:stock.move:0
msgid "Today"
-msgstr ""
+msgstr "Σήμερα"
#. module: stock
#: field:stock.move,price_currency_id:0
diff --git a/addons/stock/i18n/fr.po b/addons/stock/i18n/fr.po
index 44858f825e6..9f1debd6631 100644
--- a/addons/stock/i18n/fr.po
+++ b/addons/stock/i18n/fr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-10-18 17:47+0000\n"
-"PO-Revision-Date: 2010-11-10 10:52+0000\n"
-"Last-Translator: Numérigraphe <Unknown>\n"
+"PO-Revision-Date: 2010-11-11 08:16+0000\n"
+"Last-Translator: OpenERP Administrators <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: 2010-11-11 04:43+0000\n"
+"X-Launchpad-Export-Date: 2010-11-12 04:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock
diff --git a/addons/thunderbird/partner/partner.py b/addons/thunderbird/partner/partner.py
index 56b4d471e31..e6f5209917e 100644
--- a/addons/thunderbird/partner/partner.py
+++ b/addons/thunderbird/partner/partner.py
@@ -171,18 +171,18 @@ class thunderbird_partner(osv.osv_memory):
ls = ['*', '/', '\\', '<', '>', ':', '?', '"', '|', '\t', '\n',':','~']
sub = msg.get('subject','NO-SUBJECT').replace(' ','')
if sub.strip() == '':
- sub = 'NO SBUJECT'
+ sub = 'NO SBUJECT'
fn = sub
for c in ls:
- fn = fn.replace(c,'')
+ fn = fn.replace(c,'')
if len(fn) > 64:
- l = 64 - len(fn)
- f = fn.split('-')
- fn = '-'.join(f[1:])
- if len(fn) > 64:
- l = 64 - len(fn)
- f = fn.split('.')
- fn = f[0][0:l] + '.' + f[-1]
+ l = 64 - len(fn)
+ f = fn.split('-')
+ fn = '-'.join(f[1:])
+ if len(fn) > 64:
+ l = 64 - len(fn)
+ f = fn.split('.')
+ fn = f[0][0:l] + '.' + f[-1]
fn = fn[:-4]+'.txt'
res['res_model'] = model
res['name'] = msg.get('subject','NO-SUBJECT')