summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Delavallée <tde@openerp.com>2012-09-03 11:18:18 +0200
committerThibault Delavallée <tde@openerp.com>2012-09-03 11:18:18 +0200
commit6fa349a4ebf63fc54d633beedd32d07f335f3d8e (patch)
tree569e9dc3ffac29afa07e864ee62c52bfe1d1d7a3
parenta97ac7649f997edd0a67820edc82c26da58c10c1 (diff)
parente3f1c26e6afcf7c3df9bd98166614778e27645ea (diff)
[MERGE] Merged with addons/trunk.
bzr revid: tde@openerp.com-20120903091818-0qnjl3e5tss54bbj
-rw-r--r--addons/account/account.py14
-rw-r--r--addons/account_analytic_analysis/account_analytic_analysis_view.xml1
-rw-r--r--addons/account_analytic_plans/i18n/nb.po546
-rw-r--r--addons/audittrail/audittrail.py35
-rw-r--r--addons/auth_oauth/controllers/main.py5
-rw-r--r--addons/auth_oauth/res_users.py3
-rw-r--r--addons/auth_openid/controllers/main.py9
-rw-r--r--addons/auth_reset_password/auth_reset_password.py7
-rw-r--r--addons/auth_signup/controllers/main.py3
-rw-r--r--addons/auth_signup/res_users.py5
-rw-r--r--addons/base_gengo/__init__.py26
-rw-r--r--addons/base_gengo/__openerp__.py50
-rw-r--r--addons/base_gengo/gengo_sync_schedular_data.xml28
-rw-r--r--addons/base_gengo/ir_translation.py88
-rw-r--r--addons/base_gengo/ir_translation.xml31
-rw-r--r--addons/base_gengo/res_company.py37
-rw-r--r--addons/base_gengo/res_company_view.xml32
-rw-r--r--addons/base_gengo/wizard/__init__.py24
-rw-r--r--addons/base_gengo/wizard/base_gengo_translations.py253
-rw-r--r--addons/base_gengo/wizard/base_gengo_translations_view.xml38
-rw-r--r--addons/decimal_precision/decimal_precision.py3
-rw-r--r--addons/document_webdav/nodes.py4
-rwxr-xr-xaddons/document_webdav/test_davclient.py3
-rw-r--r--addons/google_docs/static/src/js/gdocs.js2
-rw-r--r--addons/hr_holidays/hr_holidays.py94
-rw-r--r--addons/hr_holidays/hr_holidays_demo.xml5
-rw-r--r--addons/hr_holidays/hr_holidays_view.xml85
-rw-r--r--addons/hr_holidays/hr_holidays_workflow.xml79
-rw-r--r--addons/hr_holidays/security/ir.model.access.csv2
-rw-r--r--addons/hr_holidays/security/ir_rule.xml15
-rw-r--r--addons/import_google/i18n/mn.po217
-rw-r--r--addons/l10n_br/account.py5
-rw-r--r--addons/mail/mail_alias.py3
-rw-r--r--addons/mrp/mrp_view.xml56
-rw-r--r--addons/mrp/product.py2
-rw-r--r--addons/point_of_sale/i18n/nb.po2720
-rw-r--r--addons/point_of_sale/wizard/pos_session_opening.py15
-rw-r--r--addons/point_of_sale/wizard/pos_session_opening.xml9
-rw-r--r--addons/procurement/procurement_view.xml41
-rw-r--r--addons/product/product_view.xml2
-rw-r--r--addons/project/project.py3
-rw-r--r--addons/sale_crm/i18n/zh_CN.po20
-rw-r--r--addons/sale_mrp/i18n/zh_CN.po12
-rw-r--r--addons/share/wizard/share_wizard.py3
44 files changed, 4369 insertions, 266 deletions
diff --git a/addons/account/account.py b/addons/account/account.py
index 31fe7dbfb12..e11479e4dc0 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -30,6 +30,8 @@ from osv import fields, osv
import decimal_precision as dp
from tools.translate import _
from tools.float_utils import float_round
+from openerp import SUPERUSER_ID
+
_logger = logging.getLogger(__name__)
@@ -819,7 +821,7 @@ class account_journal(osv.osv):
if not 'sequence_id' in vals or not vals['sequence_id']:
# if we have the right to create a journal, we should be able to
# create it's sequence.
- vals.update({'sequence_id': self.create_sequence(cr, 1, vals, context)})
+ vals.update({'sequence_id': self.create_sequence(cr, SUPERUSER_ID, vals, context)})
return super(account_journal, self).create(cr, uid, vals, context)
def name_get(self, cr, user, ids, context=None):
@@ -1858,7 +1860,7 @@ class account_tax(osv.osv):
def get_precision_tax():
def change_digit_tax(cr):
- res = pooler.get_pool(cr.dbname).get('decimal.precision').precision_get(cr, 1, 'Account')
+ res = pooler.get_pool(cr.dbname).get('decimal.precision').precision_get(cr, SUPERUSER_ID, 'Account')
return (16, res+2)
return change_digit_tax
@@ -3347,13 +3349,11 @@ class wizard_multi_charts_accounts(osv.osv_memory):
# Install all the templates objects and generate the real objects
acc_template_ref, taxes_ref, tax_code_ref = self._install_template(cr, uid, obj_wizard.chart_template_id.id, company_id, code_digits=obj_wizard.code_digits, obj_wizard=obj_wizard, context=context)
- # write values of default taxes for product
+ # write values of default taxes for product as super user
if obj_wizard.sale_tax and taxes_ref:
- ir_values_obj.set(cr, uid, key='default', key2=False, name="taxes_id", company=company_id,
- models =[('product.product',False)], value=[taxes_ref[obj_wizard.sale_tax.id]])
+ ir_values_obj.set_default(cr, SUPERUSER_ID, 'product.product', "taxes_id", [taxes_ref[obj_wizard.sale_tax.id]], for_all_users=True, company_id=company_id)
if obj_wizard.purchase_tax and taxes_ref:
- ir_values_obj.set(cr, uid, key='default', key2=False, name="supplier_taxes_id", company=company_id,
- models =[('product.product',False)], value=[taxes_ref[obj_wizard.purchase_tax.id]])
+ ir_values_obj.set_default(cr, SUPERUSER_ID, 'product.product', "supplier_taxes_id", [taxes_ref[obj_wizard.purchase_tax.id]], for_all_users=True, company_id=company_id)
# Create Bank journals
self._create_bank_journals_from_o2m(cr, uid, obj_wizard, company_id, acc_template_ref, context=context)
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_view.xml b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
index 8f051b33bf9..63a8e6c7add 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml
+++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
@@ -23,7 +23,6 @@
<label for="quantity_max"/>
<div>
<field name="quantity_max" class="oe_inline"/>
- <field name="company_uom_id" readonly="1" class="oe_inline"/>
</div>
</xpath>
<xpath expr='//group[@name="invoice_on_timesheets"]' position="replace">
diff --git a/addons/account_analytic_plans/i18n/nb.po b/addons/account_analytic_plans/i18n/nb.po
new file mode 100644
index 00000000000..27a6c0d9e24
--- /dev/null
+++ b/addons/account_analytic_plans/i18n/nb.po
@@ -0,0 +1,546 @@
+# Norwegian Bokmal translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-02-08 00:35+0000\n"
+"PO-Revision-Date: 2012-09-02 09:46+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Norwegian Bokmal <nb@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: 2012-09-03 05:21+0000\n"
+"X-Generator: Launchpad (build 15890)\n"
+
+#. module: account_analytic_plans
+#: view:analytic.plan.create.model:0
+msgid ""
+"This distribution model has been saved.You will be able to reuse it later."
+msgstr ""
+"Denne fordeling modellen har vært lagret. Du vil kunne bruke den senere."
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.instance.line,plan_id:0
+msgid "Plan Id"
+msgstr "Plan ID"
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "From Date"
+msgstr "Fra dato"
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+#: view:account.crossovered.analytic:0
+#: model:ir.actions.act_window,name:account_analytic_plans.action_account_crossovered_analytic
+#: model:ir.actions.report.xml,name:account_analytic_plans.account_analytic_account_crossovered_analytic
+msgid "Crossovered Analytic"
+msgstr "Krysset Analyse"
+
+#. module: account_analytic_plans
+#: view:account.analytic.plan:0
+#: field:account.analytic.plan,name:0
+#: field:account.analytic.plan.line,plan_id:0
+#: model:ir.actions.act_window,name:account_analytic_plans.account_analytic_plan_form_action
+#: model:ir.model,name:account_analytic_plans.model_account_analytic_plan
+#: model:ir.ui.menu,name:account_analytic_plans.menu_account_analytic_plan_action
+msgid "Analytic Plan"
+msgstr "Analytisk Plan"
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.instance,journal_id:0
+#: view:account.crossovered.analytic:0
+#: field:account.crossovered.analytic,journal_ids:0
+msgid "Analytic Journal"
+msgstr "Analytisk journal"
+
+#. module: account_analytic_plans
+#: view:account.analytic.plan.line:0
+#: model:ir.model,name:account_analytic_plans.model_account_analytic_plan_line
+msgid "Analytic Plan Line"
+msgstr "Analytisk plan linje"
+
+#. module: account_analytic_plans
+#: code:addons/account_analytic_plans/wizard/account_crossovered_analytic.py:61
+#, python-format
+msgid "User Error"
+msgstr "Brukerfeil"
+
+#. module: account_analytic_plans
+#: model:ir.model,name:account_analytic_plans.model_account_analytic_plan_instance
+msgid "Analytic Plan Instance"
+msgstr "Analytisk Plan forekomst"
+
+#. module: account_analytic_plans
+#: view:analytic.plan.create.model:0
+msgid "Ok"
+msgstr "Ok"
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.instance,plan_id:0
+msgid "Model's Plan"
+msgstr "Modell Plan"
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.instance,account2_ids:0
+msgid "Account2 Id"
+msgstr "Konto2 ID"
+
+#. module: account_analytic_plans
+#: sql_constraint:account.invoice:0
+msgid "Invoice Number must be unique per Company!"
+msgstr "Fakturanummer må være unik pr. firma!"
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "Amount"
+msgstr "Beløp"
+
+#. module: account_analytic_plans
+#: constraint:account.journal:0
+msgid ""
+"Configuration error! The currency chosen should be shared by the default "
+"accounts too."
+msgstr ""
+"Konfigurasjon feil! Den valgte valutaen bør deles av standard kontoer også."
+
+#. module: account_analytic_plans
+#: sql_constraint:account.move.line:0
+msgid "Wrong credit or debit value in accounting entry !"
+msgstr "Feil kredit eller debet beløp i regnskaps oppføringen !"
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.instance,account6_ids:0
+msgid "Account6 Id"
+msgstr "Konto6 ID"
+
+#. module: account_analytic_plans
+#: model:ir.ui.menu,name:account_analytic_plans.menu_account_analytic_multi_plan_action
+msgid "Multi Plans"
+msgstr "Multi Planer"
+
+#. module: account_analytic_plans
+#: model:ir.model,name:account_analytic_plans.model_account_bank_statement_line
+msgid "Bank Statement Line"
+msgstr "Kontoutskriftlinje"
+
+#. module: account_analytic_plans
+#: model:ir.actions.act_window,name:account_analytic_plans.account_analytic_plan_form_action_installer
+msgid "Define your Analytic Plans"
+msgstr "Definer dine analytiske planer."
+
+#. module: account_analytic_plans
+#: constraint:account.invoice:0
+msgid "Invalid BBA Structured Communication !"
+msgstr "Ugyldig BBA Strukturert Kommunikasjon!"
+
+#. module: account_analytic_plans
+#: constraint:account.bank.statement:0
+msgid "The journal and period chosen have to belong to the same company."
+msgstr "Tidsskriftet og perioden valgt å tilhøre samme selskap."
+
+#. module: account_analytic_plans
+#: constraint:account.move.line:0
+msgid ""
+"The date of your Journal Entry is not in the defined period! You should "
+"change the date or remove this constraint from the journal."
+msgstr ""
+"Datoen for din bilagsregistrering ikke er i den definerte perioden! Du bør "
+"endre datoen eller fjerne denne begrensningen fra tidsskriftet."
+
+#. module: account_analytic_plans
+#: sql_constraint:account.journal:0
+msgid "The code of the journal must be unique per company !"
+msgstr "Journalkoden må være unik pr firma!"
+
+#. module: account_analytic_plans
+#: field:account.crossovered.analytic,ref:0
+msgid "Analytic Account Reference"
+msgstr "Analytisk konto Referanse."
+
+#. module: account_analytic_plans
+#: model:ir.model,name:account_analytic_plans.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Salgsordrelinje"
+
+#. module: account_analytic_plans
+#: code:addons/account_analytic_plans/wizard/analytic_plan_create_model.py:47
+#: view:analytic.plan.create.model:0
+#, python-format
+msgid "Distribution Model Saved"
+msgstr "Distribusjon Model Lagret"
+
+#. module: account_analytic_plans
+#: model:ir.actions.act_window,name:account_analytic_plans.account_analytic_plan_instance_action
+msgid "Analytic Distribution's Models"
+msgstr "Analytisk distribusjon modeller"
+
+#. module: account_analytic_plans
+#: view:account.crossovered.analytic:0
+msgid "Print"
+msgstr "Skriv ut"
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+#: field:account.analytic.line,percentage:0
+msgid "Percentage"
+msgstr "Prosentdel"
+
+#. module: account_analytic_plans
+#: code:addons/account_analytic_plans/account_analytic_plans.py:221
+#, python-format
+msgid "A model having this name and code already exists !"
+msgstr ""
+
+#. module: account_analytic_plans
+#: code:addons/account_analytic_plans/wizard/analytic_plan_create_model.py:41
+#, python-format
+msgid "No analytic plan defined !"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.instance.line,rate:0
+msgid "Rate (%)"
+msgstr ""
+
+#. module: account_analytic_plans
+#: view:account.analytic.plan:0
+#: field:account.analytic.plan,plan_ids:0
+#: field:account.journal,plan_id:0
+msgid "Analytic Plans"
+msgstr ""
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "Perc(%)"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.line,max_required:0
+msgid "Maximum Allowed (%)"
+msgstr ""
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "Printing date"
+msgstr ""
+
+#. module: account_analytic_plans
+#: view:account.analytic.plan.line:0
+msgid "Analytic Plan Lines"
+msgstr ""
+
+#. module: account_analytic_plans
+#: constraint:account.bank.statement.line:0
+msgid ""
+"The amount of the voucher must be the same amount as the one on the "
+"statement line"
+msgstr ""
+
+#. module: account_analytic_plans
+#: model:ir.model,name:account_analytic_plans.model_account_invoice_line
+msgid "Invoice Line"
+msgstr ""
+
+#. module: account_analytic_plans
+#: constraint:account.move.line:0
+msgid ""
+"The selected account of your Journal Entry forces to provide a secondary "
+"currency. You should remove the secondary currency on the account or select "
+"a multi-currency view on the journal."
+msgstr ""
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "Currency"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.crossovered.analytic,date1:0
+msgid "Start Date"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.instance,account_ids:0
+msgid "Account Id"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.instance,account5_ids:0
+msgid "Account5 Id"
+msgstr ""
+
+#. module: account_analytic_plans
+#: model:ir.model,name:account_analytic_plans.model_account_analytic_plan_instance_line
+msgid "Analytic Instance Line"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.line,root_analytic_id:0
+msgid "Root Account"
+msgstr ""
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "To Date"
+msgstr ""
+
+#. module: account_analytic_plans
+#: code:addons/account_analytic_plans/account_analytic_plans.py:341
+#: code:addons/account_analytic_plans/account_analytic_plans.py:485
+#, python-format
+msgid "You have to define an analytic journal on the '%s' journal!"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.crossovered.analytic,empty_line:0
+msgid "Dont show empty lines"
+msgstr ""
+
+#. module: account_analytic_plans
+#: model:ir.actions.act_window,name:account_analytic_plans.action_analytic_plan_create_model
+msgid "analytic.plan.create.model.action"
+msgstr ""
+
+#. module: account_analytic_plans
+#: model:ir.model,name:account_analytic_plans.model_account_analytic_line
+msgid "Analytic Line"
+msgstr ""
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "Analytic Account :"
+msgstr ""
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "Analytic Account Reference:"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.line,name:0
+msgid "Plan Name"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan,default_instance_id:0
+msgid "Default Entries"
+msgstr ""
+
+#. module: account_analytic_plans
+#: model:ir.model,name:account_analytic_plans.model_account_move_line
+msgid "Journal Items"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.instance,account1_ids:0
+msgid "Account1 Id"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.line,min_required:0
+msgid "Minimum Allowed (%)"
+msgstr ""
+
+#. module: account_analytic_plans
+#: help:account.analytic.plan.line,root_analytic_id:0
+msgid "Root account of this plan."
+msgstr ""
+
+#. module: account_analytic_plans
+#: code:addons/account_analytic_plans/account_analytic_plans.py:221
+#: code:addons/account_analytic_plans/wizard/analytic_plan_create_model.py:38
+#: code:addons/account_analytic_plans/wizard/analytic_plan_create_model.py:41
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: account_analytic_plans
+#: view:analytic.plan.create.model:0
+msgid "Save This Distribution as a Model"
+msgstr ""
+
+#. module: account_analytic_plans
+#: constraint:account.move.line:0
+msgid "You can not create journal items on an account of type view."
+msgstr ""
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "Quantity"
+msgstr ""
+
+#. module: account_analytic_plans
+#: code:addons/account_analytic_plans/wizard/analytic_plan_create_model.py:38
+#, python-format
+msgid "Please put a name and a code before saving the model !"
+msgstr ""
+
+#. module: account_analytic_plans
+#: model:ir.model,name:account_analytic_plans.model_account_crossovered_analytic
+msgid "Print Crossovered Analytic"
+msgstr ""
+
+#. module: account_analytic_plans
+#: code:addons/account_analytic_plans/account_analytic_plans.py:341
+#: code:addons/account_analytic_plans/account_analytic_plans.py:485
+#, python-format
+msgid "No Analytic Journal !"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.instance.line,analytic_account_id:0
+msgid "Analytic Account"
+msgstr ""
+
+#. module: account_analytic_plans
+#: model:ir.model,name:account_analytic_plans.model_account_bank_statement
+msgid "Bank Statement"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.instance,account3_ids:0
+msgid "Account3 Id"
+msgstr ""
+
+#. module: account_analytic_plans
+#: constraint:account.analytic.line:0
+msgid "You can not create analytic line on view account."
+msgstr ""
+
+#. module: account_analytic_plans
+#: model:ir.model,name:account_analytic_plans.model_account_invoice
+msgid "Invoice"
+msgstr ""
+
+#. module: account_analytic_plans
+#: view:account.crossovered.analytic:0
+#: view:analytic.plan.create.model:0
+msgid "Cancel"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.instance,account4_ids:0
+msgid "Account4 Id"
+msgstr ""
+
+#. module: account_analytic_plans
+#: constraint:account.move.line:0
+msgid "Company must be the same for its related account and period."
+msgstr ""
+
+#. module: account_analytic_plans
+#: view:account.analytic.plan.instance.line:0
+msgid "Analytic Distribution Lines"
+msgstr ""
+
+#. module: account_analytic_plans
+#: code:addons/account_analytic_plans/account_analytic_plans.py:234
+#, python-format
+msgid "The Total Should be Between %s and %s"
+msgstr ""
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "at"
+msgstr ""
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "Account Name"
+msgstr ""
+
+#. module: account_analytic_plans
+#: view:account.analytic.plan.instance.line:0
+msgid "Analytic Distribution Line"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.instance,code:0
+msgid "Distribution Code"
+msgstr ""
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "%"
+msgstr ""
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "100.00%"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.default,analytics_id:0
+#: view:account.analytic.plan.instance:0
+#: field:account.analytic.plan.instance,name:0
+#: field:account.bank.statement.line,analytics_id:0
+#: field:account.invoice.line,analytics_id:0
+#: field:account.move.line,analytics_id:0
+#: model:ir.model,name:account_analytic_plans.model_account_analytic_default
+msgid "Analytic Distribution"
+msgstr ""
+
+#. module: account_analytic_plans
+#: model:ir.model,name:account_analytic_plans.model_account_journal
+msgid "Journal"
+msgstr ""
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "Code"
+msgstr ""
+
+#. module: account_analytic_plans
+#: model:ir.model,name:account_analytic_plans.model_analytic_plan_create_model
+msgid "analytic.plan.create.model"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.crossovered.analytic,date2:0
+msgid "End Date"
+msgstr ""
+
+#. module: account_analytic_plans
+#: model:ir.actions.act_window,name:account_analytic_plans.account_analytic_instance_model_open
+msgid "Distribution Models"
+msgstr ""
+
+#. module: account_analytic_plans
+#: model:ir.actions.act_window,help:account_analytic_plans.account_analytic_plan_form_action_installer
+msgid ""
+"To setup a multiple analytic plans environment, you must define the root "
+"analytic accounts for each plan set. Then, you must attach a plan set to "
+"your account journals."
+msgstr ""
+
+#. module: account_analytic_plans
+#: constraint:account.move.line:0
+msgid "You can not create journal items on closed account."
+msgstr ""
+
+#. module: account_analytic_plans
+#: report:account.analytic.account.crossovered.analytic:0
+msgid "Company"
+msgstr ""
+
+#. module: account_analytic_plans
+#: field:account.analytic.plan.line,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: account_analytic_plans
+#: sql_constraint:account.journal:0
+msgid "The name of the journal must be unique per company !"
+msgstr ""
+
+#. module: account_analytic_plans
+#: code:addons/account_analytic_plans/account_analytic_plans.py:234
+#, python-format
+msgid "Value Error"
+msgstr ""
diff --git a/addons/audittrail/audittrail.py b/addons/audittrail/audittrail.py
index aee9fbd9305..3dff7c1cb00 100644
--- a/addons/audittrail/audittrail.py
+++ b/addons/audittrail/audittrail.py
@@ -25,6 +25,7 @@ from tools.translate import _
import pooler
import time
import tools
+from openerp import SUPERUSER_ID
class audittrail_rule(osv.osv):
"""
@@ -252,10 +253,10 @@ class audittrail_objects_proxy(object_proxy):
pool = pooler.get_pool(cr.dbname)
resource_pool = pool.get(model)
model_pool = pool.get('ir.model')
- model_ids = model_pool.search(cr, 1, [('model', '=', model)])
+ model_ids = model_pool.search(cr, SUPERUSER_ID, [('model', '=', model)])
model_id = model_ids and model_ids[0] or False
assert model_id, _("'%s' Model does not exist..." %(model))
- model = model_pool.browse(cr, 1, model_id)
+ model = model_pool.browse(cr, SUPERUSER_ID, model_id)
# fields to log. currently only used by log on read()
field_list = []
@@ -322,7 +323,7 @@ class audittrail_objects_proxy(object_proxy):
data = {}
resource_pool = pool.get(model.model)
# read all the fields of the given resources in super admin mode
- for resource in resource_pool.read(cr, 1, res_ids):
+ for resource in resource_pool.read(cr, SUPERUSER_ID, res_ids):
values = {}
values_text = {}
resource_id = resource['id']
@@ -332,19 +333,19 @@ class audittrail_objects_proxy(object_proxy):
continue
values[field] = resource[field]
# get the textual value of that field for this record
- values_text[field] = self.get_value_text(cr, 1, pool, resource_pool, method, field, resource[field])
+ values_text[field] = self.get_value_text(cr, SUPERUSER_ID, pool, resource_pool, method, field, resource[field])
field_obj = resource_pool._all_columns.get(field).column
if field_obj._type in ('one2many','many2many'):
# check if an audittrail rule apply in super admin mode
- if self.check_rules(cr, 1, field_obj._obj, method):
+ if self.check_rules(cr, SUPERUSER_ID, field_obj._obj, method):
# check if the model associated to a *2m field exists, in super admin mode
- x2m_model_ids = pool.get('ir.model').search(cr, 1, [('model', '=', field_obj._obj)])
+ x2m_model_ids = pool.get('ir.model').search(cr, SUPERUSER_ID, [('model', '=', field_obj._obj)])
x2m_model_id = x2m_model_ids and x2m_model_ids[0] or False
assert x2m_model_id, _("'%s' Model does not exist..." %(field_obj._obj))
- x2m_model = pool.get('ir.model').browse(cr, 1, x2m_model_id)
+ x2m_model = pool.get('ir.model').browse(cr, SUPERUSER_ID, x2m_model_id)
#recursive call on x2m fields that need to be checked too
- data.update(self.get_data(cr, 1, pool, resource[field], x2m_model, method))
+ data.update(self.get_data(cr, SUPERUSER_ID, pool, resource[field], x2m_model, method))
data[(model.id, resource_id)] = {'text':values_text, 'value': values}
return data
@@ -389,12 +390,12 @@ class audittrail_objects_proxy(object_proxy):
field_obj = field_definition.column
if field_obj._type in ('one2many','many2many'):
# checking if an audittrail rule apply in super admin mode
- if self.check_rules(cr, 1, field_obj._obj, method):
+ if self.check_rules(cr, SUPERUSER_ID, field_obj._obj, method):
# checking if the model associated to a *2m field exists, in super admin mode
- x2m_model_ids = pool.get('ir.model').search(cr, 1, [('model', '=', field_obj._obj)])
+ x2m_model_ids = pool.get('ir.model').search(cr, SUPERUSER_ID, [('model', '=', field_obj._obj)])
x2m_model_id = x2m_model_ids and x2m_model_ids[0] or False
assert x2m_model_id, _("'%s' Model does not exist..." %(field_obj._obj))
- x2m_model = pool.get('ir.model').browse(cr, 1, x2m_model_id)
+ x2m_model = pool.get('ir.model').browse(cr, SUPERUSER_ID, x2m_model_id)
# the resource_ids that need to be checked are the sum of both old and previous values (because we
# need to log also creation or deletion in those lists).
x2m_old_values_ids = old_values.get(key, {'value': {}})['value'].get(field_name, [])
@@ -402,7 +403,7 @@ class audittrail_objects_proxy(object_proxy):
# We use list(set(...)) to remove duplicates.
res_ids = list(set(x2m_old_values_ids + x2m_new_values_ids))
for res_id in res_ids:
- lines.update(self.prepare_audittrail_log_line(cr, 1, pool, x2m_model, res_id, method, old_values, new_values, field_list))
+ lines.update(self.prepare_audittrail_log_line(cr, SUPERUSER_ID, pool, x2m_model, res_id, method, old_values, new_values, field_list))
# if the value value is different than the old value: record the change
if key not in old_values or key not in new_values or old_values[key]['value'][field_name] != new_values[key]['value'][field_name]:
data = {
@@ -459,9 +460,9 @@ class audittrail_objects_proxy(object_proxy):
vals.update({'method': 'unlink'})
# create the audittrail log in super admin mode, only if a change has been detected
if lines[(model_id, resource_id)]:
- log_id = pool.get('audittrail.log').create(cr, 1, vals)
+ log_id = pool.get('audittrail.log').create(cr, SUPERUSER_ID, vals)
model = pool.get('ir.model').browse(cr, uid, model_id)
- self.create_log_line(cr, 1, log_id, model, lines[(model_id, resource_id)])
+ self.create_log_line(cr, SUPERUSER_ID, log_id, model, lines[(model_id, resource_id)])
return True
def check_rules(self, cr, uid, model, method):
@@ -475,11 +476,11 @@ class audittrail_objects_proxy(object_proxy):
"""
pool = pooler.get_pool(cr.dbname)
if 'audittrail.rule' in pool.models:
- model_ids = pool.get('ir.model').search(cr, 1, [('model', '=', model)])
+ model_ids = pool.get('ir.model').search(cr, SUPERUSER_ID, [('model', '=', model)])
model_id = model_ids and model_ids[0] or False
if model_id:
- rule_ids = pool.get('audittrail.rule').search(cr, 1, [('object_id', '=', model_id), ('state', '=', 'subscribed')])
- for rule in pool.get('audittrail.rule').read(cr, 1, rule_ids, ['user_id','log_read','log_write','log_create','log_unlink','log_action','log_workflow']):
+ rule_ids = pool.get('audittrail.rule').search(cr, SUPERUSER_ID, [('object_id', '=', model_id), ('state', '=', 'subscribed')])
+ for rule in pool.get('audittrail.rule').read(cr, SUPERUSER_ID, rule_ids, ['user_id','log_read','log_write','log_create','log_unlink','log_action','log_workflow']):
if len(rule['user_id']) == 0 or uid in rule['user_id']:
if rule.get('log_'+method,0):
return True
diff --git a/addons/auth_oauth/controllers/main.py b/addons/auth_oauth/controllers/main.py
index 2959fa45db1..5d939f19db1 100644
--- a/addons/auth_oauth/controllers/main.py
+++ b/addons/auth_oauth/controllers/main.py
@@ -7,6 +7,7 @@ import werkzeug.utils
import openerp.modules.registry
import openerp.addons.web.controllers.main
import openerp.addons.web.common.http as openerpweb
+from openerp import SUPERUSER_ID
_logger = logging.getLogger(__name__)
@@ -18,7 +19,7 @@ class OAuthController(openerpweb.Controller):
registry = openerp.modules.registry.RegistryManager.get(dbname)
with registry.cursor() as cr:
providers = registry.get('auth.oauth.provider')
- l = providers.read(cr, 1, providers.search(cr, 1, [('enabled','=',True)]))
+ l = providers.read(cr, SUPERUSER_ID, providers.search(cr, SUPERUSER_ID, [('enabled','=',True)]))
return l
@openerpweb.httprequest
@@ -30,7 +31,7 @@ class OAuthController(openerpweb.Controller):
with registry.cursor() as cr:
try:
u = registry.get('res.users')
- credentials = u.auth_oauth(cr, 1, provider, kw)
+ credentials = u.auth_oauth(cr, SUPERUSER_ID, provider, kw)
cr.commit()
return openerp.addons.web.controllers.main.login_and_redirect(req, *credentials)
except AttributeError:
diff --git a/addons/auth_oauth/res_users.py b/addons/auth_oauth/res_users.py
index 3dbab849942..b4f62612746 100644
--- a/addons/auth_oauth/res_users.py
+++ b/addons/auth_oauth/res_users.py
@@ -6,6 +6,7 @@ import simplejson
import openerp
from openerp.osv import osv, fields
+from openerp import SUPERUSER_ID
_logger = logging.getLogger(__name__)
@@ -63,7 +64,7 @@ class res_users(osv.Model):
try:
return super(res_users, self).check_credentials(cr, uid, password)
except openerp.exceptions.AccessDenied:
- res = self.search(cr, 1, [('id','=',uid),('oauth_access_token','=',password)])
+ res = self.search(cr, SUPERUSER_ID, [('id','=',uid),('oauth_access_token','=',password)])
if not res:
raise
diff --git a/addons/auth_openid/controllers/main.py b/addons/auth_openid/controllers/main.py
index eba711dae7a..ebcaab4bf25 100644
--- a/addons/auth_openid/controllers/main.py
+++ b/addons/auth_openid/controllers/main.py
@@ -23,6 +23,7 @@ import logging
import os
import tempfile
import urllib
+from openerp import SUPERUSER_ID
import werkzeug.urls
import werkzeug.exceptions
@@ -176,7 +177,7 @@ class OpenIDController(openerpweb.Controller):
with registry.cursor() as cr:
Modules = registry.get('ir.module.module')
- installed = Modules.search_count(cr, 1, ['&', ('name', '=', 'auth_openid'), ('state', '=', 'installed')]) == 1
+ installed = Modules.search_count(cr, SUPERUSER_ID, ['&', ('name', '=', 'auth_openid'), ('state', '=', 'installed')]) == 1
if installed:
Users = registry.get('res.users')
@@ -196,13 +197,13 @@ class OpenIDController(openerpweb.Controller):
domain += [('openid_url', '=', openid_url), ('active', '=', True)]
- ids = Users.search(cr, 1, domain)
+ ids = Users.search(cr, SUPERUSER_ID, domain)
assert len(ids) < 2
if ids:
user_id = ids[0]
- login = Users.browse(cr, 1, user_id).login
+ login = Users.browse(cr, SUPERUSER_ID, user_id).login
key = randomString(utils.KEY_LENGTH, '0123456789abcdef')
- Users.write(cr, 1, [user_id], {'openid_key': key})
+ Users.write(cr, SUPERUSER_ID, [user_id], {'openid_key': key})
# TODO fill empty fields with the ones from sreg/ax
cr.commit()
diff --git a/addons/auth_reset_password/auth_reset_password.py b/addons/auth_reset_password/auth_reset_password.py
index 3d1bcbbfa7b..ff208c89b9c 100644
--- a/addons/auth_reset_password/auth_reset_password.py
+++ b/addons/auth_reset_password/auth_reset_password.py
@@ -6,6 +6,7 @@ import urlparse
from openerp.tools import config
from openerp.osv import osv, fields
+from openerp import SUPERUSER_ID
TWENTY_FOUR_HOURS = 24 * 60 * 60
@@ -76,9 +77,9 @@ class res_users(osv.osv):
MailMessage.send(cr, uid, [msg_id], context=context)
def send_reset_password_request(self, cr, uid, email, context=None):
- ids = self.pool.get('res.users').search(cr, 1, [('user_email', '=', email)], context=context)
+ ids = self.pool.get('res.users').search(cr, SUPERUSER_ID, [('user_email', '=', email)], context=context)
if ids:
- self._auth_reset_password_send_email(cr, 1, email, 'reset_password_email', ids[0], context=context)
+ self._auth_reset_password_send_email(cr, SUPERUSER_ID, email, 'reset_password_email', ids[0], context=context)
return True
#else:
# _m, company_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'main_company')
@@ -109,7 +110,7 @@ class auth_reset_password(osv.TransientModel):
Users = self.pool.get('res.users')
data = Users._auth_reset_password_check_token(cr, uid, values.get('token', ''))
if data:
- Users.write(cr, 1, data['uid'], {'password': pw}, context=context)
+ Users.write(cr, SUPERUSER_ID, data['uid'], {'password': pw}, context=context)
else:
raise osv.except_osv('Error', 'Invalid token')
diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py
index 0ed2151d12b..821ef44f459 100644
--- a/addons/auth_signup/controllers/main.py
+++ b/addons/auth_signup/controllers/main.py
@@ -5,6 +5,7 @@ import werkzeug.urls
from openerp.modules.registry import RegistryManager
from openerp.addons.web.controllers.main import login_and_redirect
import openerp.addons.web.common.http as openerpweb
+from openerp import SUPERUSER_ID
_logger = logging.getLogger(__name__)
@@ -18,7 +19,7 @@ class OpenIDController(openerpweb.Controller):
with registry.cursor() as cr:
try:
Users = registry.get('res.users')
- credentials = Users.auth_signup(cr, 1, name, login, password)
+ credentials = Users.auth_signup(cr, SUPERUSER_ID, name, login, password)
cr.commit()
return login_and_redirect(req, *credentials)
except AttributeError:
diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py
index 1d77a3f9473..5f6463508b6 100644
--- a/addons/auth_signup/res_users.py
+++ b/addons/auth_signup/res_users.py
@@ -1,5 +1,6 @@
import openerp
from openerp.osv import osv
+from openerp import SUPERUSER_ID
class res_users(osv.Model):
_inherit = 'res.users'
@@ -15,9 +16,9 @@ class res_users(osv.Model):
#
user_template_id = self.pool.get('ir.config_parameter').get_param(cr, uid, 'auth.signup_template_user_id', 0)
if user_template_id:
- self.pool.get('res.users').copy(cr, 1, user_template_id, new_user, context=context)
+ self.pool.get('res.users').copy(cr, SUPERUSER_ID, user_template_id, new_user, context=context)
else:
- self.pool.get('res.users').create(cr, 1, new_user, context=context)
+ self.pool.get('res.users').create(cr, SUPERUSER_ID, new_user, context=context)
def auth_signup(self, cr, uid, name, login, password, context=None):
r = (cr.dbname, login, password)
diff --git a/addons/base_gengo/__init__.py b/addons/base_gengo/__init__.py
new file mode 100644
index 00000000000..133fa90dc51
--- /dev/null
+++ b/addons/base_gengo/__init__.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Openerp sa (<http://openerp.com>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import res_company
+import ir_translation
+import wizard
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_gengo/__openerp__.py b/addons/base_gengo/__openerp__.py
new file mode 100644
index 00000000000..ae61ad8f13c
--- /dev/null
+++ b/addons/base_gengo/__openerp__.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+{
+ 'name': 'Automated Translations through Gengo API',
+ 'version': '0.1',
+ 'category': 'Tools',
+ 'description': """
+Automated Translations through Gengo API
+----------------------------------------
+ This module will install passive scheduler job for automated translations
+using the Gengo API. To activate it, you must
+1) Configure your Gengo authentication parameters under `Settings > Companies > Gengo Parameters`
+2) Launch the wizard under `Settings > Application Terms > Gengo: Manual Request of Translation` and follow the wizard.
+
+This wizard will activate the CRON job and the Scheduler and will start the automatic translation via Gengo Services for all the terms where you requested it.
+ """,
+ 'author': 'OpenERP SA',
+ 'website': 'http://www.openerp.com',
+ 'depends': ['base'],
+ 'init_xml': ['gengo_sync_schedular_data.xml'],
+ 'update_xml': [
+ 'ir_translation.xml',
+ 'res_company_view.xml',
+ 'wizard/base_gengo_translations_view.xml',
+ ],
+ 'demo_xml': [],
+ 'test': [],
+ 'installable': True,
+ 'auto_install': False,
+}
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_gengo/gengo_sync_schedular_data.xml b/addons/base_gengo/gengo_sync_schedular_data.xml
new file mode 100644
index 00000000000..823ca8f14db
--- /dev/null
+++ b/addons/base_gengo/gengo_sync_schedular_data.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+ <!--Scheduler sync Receive Request-->
+ <record id="gengo_sync_receive_request_scheduler" model="ir.cron">
+ <field name="name" >Gengo Sync Translation (Response)</field>
+ <field eval="False" name="active"/>
+ <field name="interval_number">20</field>
+ <field name="interval_type">minutes</field>
+ <field name="numbercall">-1</field>
+ <field eval="'base.gengo.translations'" name="model"></field>
+ <field eval="'_sync_response'" name="function"/>
+ <field eval="'(20,)'" name="args"/>
+ </record>
+
+ <!--Scheduler Sync Send Request-->
+ <record id="gengo_sync_send_request_scheduler" model="ir.cron">
+ <field name="name" >Gengo Sync Translation (Request)</field>
+ <field eval="False" name="active"/>
+ <field name="interval_number">20</field>
+ <field name="interval_type">minutes</field>
+ <field name="numbercall">-1</field>
+ <field eval="'base.gengo.translations'" name="model"></field>
+ <field eval="'_sync_request'" name="function"/>
+ <field eval="'(20,)'" name="args"/>
+ </record>
+ </data>
+</openerp>
diff --git a/addons/base_gengo/ir_translation.py b/addons/base_gengo/ir_translation.py
new file mode 100644
index 00000000000..7b864aba8ce
--- /dev/null
+++ b/addons/base_gengo/ir_translation.py
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. (<http://openerp.com>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from osv import fields, osv
+from tools.translate import _
+
+LANG_CODE_MAPPING = {
+ 'ar_SA': ('ar', 'Arabic'),
+ 'id_ID': ('id', 'Indonesian'),
+ 'nl_NL': ('nl', 'Dutch'),
+ 'fr_CA': ('fr-ca', 'French (Canada)'),
+ 'pl_PL': ('pl', 'Polish'),
+ 'zh_TW': ('zh-tw', 'Chinese (Traditional)'),
+ 'sv_SE': ('sv', 'Swedish'),
+ 'ko_KR': ('ko', 'Korean'),
+ 'pt_PT': ('pt', 'Portuguese (Europe)'),
+ 'en_US': ('en', 'English'),
+ 'ja_JP': ('ja', 'Japanese'),
+ 'es_ES': ('es', 'Spanish (Spain)'),
+ 'zh_CN': ('zh', 'Chinese (Simplified)'),
+ 'de_DE': ('de', 'German'),
+ 'fr_FR': ('fr', 'French'),
+ 'fr_BE': ('fr', 'French'),
+ 'ru_RU': ('ru', 'Russian'),
+ 'it_IT': ('it', 'Italian'),
+ 'pt_BR': ('pt-br', 'Portuguese (Brazil)')
+}
+
+class ir_translation(osv.Model):
+ _name = "ir.translation"
+ _inherit = "ir.translation"
+ _columns = {
+ 'gengo_comment': fields.text("Comments & Activity Linked to Gengo"),
+ 'job_id': fields.char('Gengo Job ID', size=32),
+ "gengo_translation": fields.selection([('machine', 'Translation By Machine'),
+ ('standard', 'Standard'),
+ ('pro', 'Pro'),
+ ('ultra', 'Ultra')], "Gengo Translation Service Level", help='You can select here the service level you want for an automatic translation using Gengo.'),
+ }
+
+ def _get_all_supported_languages(self, cr, uid, context=None):
+ flag, gengo = self.pool.get('base.gengo.translations').gengo_authentication(cr, uid, context=context)
+ if not flag:
+ raise osv.except_osv(_('Gengo Authentication Error'), gengo)
+ supported_langs = {}
+ lang_pair = gengo.getServiceLanguagePairs(lc_src='en')
+ if lang_pair['opstat'] == 'ok':
+ for g_lang in lang_pair['response']:
+ if g_lang['lc_tgt'] not in supported_langs:
+ supported_langs[g_lang['lc_tgt']] = []
+ supported_langs[g_lang['lc_tgt']] += [g_lang['tier']]
+ return supported_langs
+
+ def _get_gengo_corresponding_language(cr, lang):
+ return lang in LANG_CODE_MAPPING and LANG_CODE_MAPPING[lang][0] or lang
+
+ def _check_lang_support(self, cr, uid, ids, context=None):
+ for term in self.browse(cr, uid, ids, context=context):
+ if term.gengo_translation:
+ supported_langs = self._get_all_supported_languages(cr, uid, context=context)
+ if supported_langs:
+ tier = "nonprofit" if term.gengo_translation == 'machine' else term.gengo_translation
+ language = self._get_gengo_corresponding_language(term.lang)
+ if tier not in supported_langs.get(language,[]):
+ return False
+ return True
+
+ _constraints = [
+ (_check_lang_support, 'The Gengo translation service selected is not supported for this language.', ['gengo_translation'])
+ ]
diff --git a/addons/base_gengo/ir_translation.xml b/addons/base_gengo/ir_translation.xml
new file mode 100644
index 00000000000..ba9667d979e
--- /dev/null
+++ b/addons/base_gengo/ir_translation.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+ <record id="view_translation_search" model="ir.ui.view">
+ <field name="name">Translations</field>
+ <field name="model">ir.translation</field>
+ <field name="inherit_id" ref="base.view_translation_search"/>
+ <field name="arch" type="xml">
+ <search string="Translations">
+ <filter string="To Approve In Gengo" domain="[('state','=','inprogress'),('gengo_translation','=',True)]"></filter>
+ </search>
+ </field>
+ </record>
+
+ <!-- ir.translation form view -->
+ <record model="ir.ui.view" id="view_ir_translation_inherit_base_gengo_form">
+ <field name="name">ir.translation.form.inherit</field>
+ <field name="inherit_id" ref="base.view_translation_form"/>
+ <field name="model">ir.translation</field>
+ <field name="arch" type="xml">
+ <xpath expr="//form[@string='Translations']/sheet" position="inside">
+ <group string="Gengo Translation Service" col="4" colspan="4">
+ <field name="gengo_translation" />
+ <label string="Note: If the translation state is 'In Progress', it means that the translation has to be approved to be uploaded in this system. You are supposed to do that directly by using your Gengo Account"/>
+ <field name="gengo_comment" nolabel="1" placeholder="Gengo Comments &amp; Activity..." colspan="4"/>
+ </group>
+ </xpath>
+ </field>
+ </record>
+ </data>
+</openerp>
diff --git a/addons/base_gengo/res_company.py b/addons/base_gengo/res_company.py
new file mode 100644
index 00000000000..22d7b343939
--- /dev/null
+++ b/addons/base_gengo/res_company.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. (<http://openerp.com>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from osv import fields, osv
+
+
+class res_company(osv.Model):
+ _name = "res.company"
+ _inherit = "res.company"
+ _columns = {
+ "gengo_private_key": fields.text("Gengo Private Key"),
+ "gengo_public_key": fields.text("Gengo Public Key"),
+ "gengo_comment": fields.text("Comments", help="This comment will be automatically be enclosed in each an every request sent to Gengo"),
+ "gengo_auto_approve": fields.boolean("Auto Approve Translation ?", help="Jobs are Automatically Approved by Gengo."),
+ }
+
+ _defaults = {
+ "gengo_auto_approve": True,
+ }
diff --git a/addons/base_gengo/res_company_view.xml b/addons/base_gengo/res_company_view.xml
new file mode 100644
index 00000000000..0f99efc8ad0
--- /dev/null
+++ b/addons/base_gengo/res_company_view.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+ <data>
+ <!-- res.company form view -->
+ <record model="ir.ui.view" id="view_company_inherit_base_gengo_form">
+ <field name="name">res.company.form.inherit</field>
+ <field name="inherit_id" ref="base.view_company_form"/>
+ <field name="model">res.company</field>
+ <field name="arch" type="xml">
+ <xpath expr="//notebook[last()]" position="inside">
+ <page string="Gengo Parameters">
+ <group col="2">
+ <group col="1" string="Public Key">
+ <field name="gengo_public_key" nolabel="1" placeholder="Add Gengo login Public Key..."/>
+ </group>
+ <group col="1" string="Private Key">
+ <field name="gengo_private_key" password="True" nolabel="1" placeholder="Add Gengo login Private Key..."/>
+ </group>
+ </group>
+ <group col="4">
+ <field name="gengo_auto_approve"/>
+ </group>
+ <group string="Comments for Translator" col="1">
+ <field name="gengo_comment" nolabel="1" placeholder="Add your comments here for translator...."/>
+ </group>
+ </page>
+ </xpath>
+ </field>
+ </record>
+
+ </data>
+</openerp>
diff --git a/addons/base_gengo/wizard/__init__.py b/addons/base_gengo/wizard/__init__.py
new file mode 100644
index 00000000000..f5dd71be01c
--- /dev/null
+++ b/addons/base_gengo/wizard/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import base_gengo_translations
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_gengo/wizard/base_gengo_translations.py b/addons/base_gengo/wizard/base_gengo_translations.py
new file mode 100644
index 00000000000..d8a96a2ced9
--- /dev/null
+++ b/addons/base_gengo/wizard/base_gengo_translations.py
@@ -0,0 +1,253 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. (<http://openerp.com>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from osv import osv, fields
+from tools.translate import _
+import re
+try:
+ from mygengo import MyGengo
+except ImportError:
+ raise osv.except_osv(_('Gengo ImportError'), _('Please install mygengo lib from http://pypi.python.org/pypi/mygengo'))
+
+import logging
+import tools
+import time
+
+_logger = logging.getLogger(__name__)
+
+GENGO_DEFAULT_LIMIT = 20
+
+DEFAULT_CRON_VALS = {
+ 'active': True,
+ 'interval_number': 20,
+ 'interval_type': 'minutes',
+ 'model': "'base.gengo.translations'",
+ 'args': "'(%s,)'" % (str(GENGO_DEFAULT_LIMIT)),
+}
+
+class base_gengo_translations(osv.osv_memory):
+
+ _name = 'base.gengo.translations'
+ _columns = {
+ 'restart_send_job': fields.boolean("Restart Sending Job"),
+ 'lang_id': fields.many2one('res.lang', 'Language', help="Leave empty if you don't want to restrict the request to a single language"),
+ }
+
+ def gengo_authentication(self, cr, uid, context=None):
+ '''
+ This method tries to open a connection with Gengo. For that, it uses the Public and Private
+ keys that are linked to the company (given by Gengo on subscription). It returns a tuple with
+ * as first element: a boolean depicting if the authentication was a success or not
+ * as second element: the connection, if it was a success, or the error message returned by
+ Gengo when the connection failed.
+ This error message can either be displayed in the server logs (if the authentication was called
+ by the cron) or in a dialog box (if requested by the user), thus it's important to return it
+ translated.
+ '''
+
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ if not user.company_id.gengo_public_key or not user.company_id.gengo_private_key:
+ return (False, _("Invalid Gengo configuration. Gengo authentication `Public Key` or `Private Key` is missing. Complete Gengo authentication parameters under `Settings > Companies > Gengo Parameters`."))
+ try:
+ gengo = MyGengo(
+ public_key=user.company_id.gengo_public_key.encode('ascii'),
+ private_key=user.company_id.gengo_private_key.encode('ascii'),
+ sandbox=True,
+ )
+ gengo.getAccountStats()
+
+ return (True, gengo)
+ except Exception, e:
+ return (False, _("Gengo Connection Error\n%s") %e)
+
+ def do_check_schedular(self, cr, uid, xml_id, name, fn, context=None):
+ """
+ This function is used to reset a cron to its default values, or to recreate it if it was deleted.
+ """
+ cron_pool = self.pool.get('ir.cron')
+ cron_vals = DEFAULT_CRON_VALS.copy()
+ cron_vals.update({'name': name, "function": fn})
+ try:
+ res = []
+ model, res = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base_gengo', xml_id)
+ cron_pool.write(cr, uid, [res], cron_vals, context=context)
+ except:
+ #the cron job was not found, probably deleted previously, so we create it again using default values
+ cron_vals.update({'numbercall': -1})
+ return cron_pool.create(cr, uid, cron_vals, context=context)
+
+ def act_update(self, cr, uid, ids, context=None):
+ '''
+ Function called by the wizard.
+ '''
+ if context == None:
+ context = {}
+
+ flag, gengo = self.gengo_authentication(cr, uid, context=context)
+ if not flag:
+ raise osv.except_osv(_('Gengo Authentication Error'), gengo)
+ for wizard in self.browse(cr, uid, ids, context=context):
+ supported_langs = self.pool.get('ir.translation')._get_all_supported_languages(cr, uid, context=context)
+ language = self.pool.get('ir.translation')._get_gengo_corresponding_language(wizard.lang_id.code)
+ if language not in supported_langs:
+ raise osv.except_osv(_("Warning"), _('This language is not supported by the Gengo translation services.'))
+
+ #send immediately a new request for the selected language (if any)
+ ctx = context.copy()
+ ctx['gengo_language'] = wizard.lang_id.id
+ self._sync_request(cr, uid, limit=GENGO_DEFAULT_LIMIT, context=ctx)
+ self._sync_response( cr, uid, limit=GENGO_DEFAULT_LIMIT, context=ctx)
+ #check the cron jobs and eventually restart/recreate them
+ if wizard.restart_send_job:
+ self.do_check_schedular(cr, uid, 'gengo_sync_send_request_scheduler', _('Gengo Sync Translation (Request)'), '_sync_request', context=context)
+ self.do_check_schedular(cr, uid, 'gengo_sync_receive_request_scheduler', _('Gengo Sync Translation (Response)'), '_sync_response', context=context)
+ return {'type': 'ir.actions.act_window_close'}
+
+ def _sync_response(self, cr, uid, limit=GENGO_DEFAULT_LIMIT, context=None):
+ """
+ This method will be called by cron services to get translations from
+ Gengo. It will read translated terms and comments from Gengo and will
+ update respective ir.translation in openerp.
+ """
+ translation_pool = self.pool.get('ir.translation')
+ flag, gengo = self.gengo_authentication(cr, uid, context=context)
+ if not flag:
+ _logger.warning("%s", gengo)
+ else:
+ translation_id = translation_pool.search(cr, uid, [('state', '=', 'inprogress'), ('gengo_translation', 'in', ('machine','standard','pro','ultra'))], limit=limit, context=context)
+ for term in translation_pool.browse(cr, uid, translation_id, context=context):
+ up_term = up_comment = 0
+ if term.job_id:
+ vals={}
+ job_response = gengo.getTranslationJob(id=term.job_id)
+ if job_response['opstat'] != 'ok':
+ _logger.warning("Invalid Response! Skipping translation Terms with `id` %s." % (term.job_id))
+ continue
+ if job_response['response']['job']['status'] == 'approved':
+ vals.update({'state': 'translated',
+ 'value': job_response['response']['job']['body_tgt']})
+ up_term += 1
+ job_comment = gengo.getTranslationJobComments(id=term.job_id)
+ if job_comment['opstat']=='ok':
+ gengo_comments=""
+ for comment in job_comment['response']['thread']:
+ gengo_comments += _('%s\n\n--\n Commented on %s by %s.') % (comment['body'], time.ctime(comment['ctime']), comment['author'])
+ vals.update({'gengo_comment': gengo_comments})
+ up_comment += 1
+ if vals:
+ translation_pool.write(cr, uid, term.id, vals)
+ _logger.info("Successfully Updated `%d` terms and %d Comments." % (up_term, up_comment ))
+ else:
+ _logger.warning("%s", 'Cannot retrieve the Gengo job ID for translation %s: %s' % (term.id, term.src))
+ return True
+
+ def _update_terms(self, cr, uid, response, context=None):
+ """
+ Update the terms after their translation were requested to Gengo
+ """
+ translation_pool = self.pool.get('ir.translation')
+ for jobs in response['jobs']:
+ for t_id, res in jobs.items():
+ vals = {}
+ t_id = int(t_id)
+ tier = translation_pool.read(cr, uid, [t_id], ['gengo_translation'], context=context)[0]['gengo_translation']
+ if tier == "machine":
+ vals.update({'value': res['body_tgt'], 'state': 'translated'})
+ else:
+ vals.update({'job_id': res['job_id'], 'state': 'inprogress'})
+ translation_pool.write(cr, uid, [t_id], vals, context=context)
+ return
+
+ def pack_jobs_request(self, cr, uid, term_ids, context=None):
+ ''' prepare the terms that will be requested to gengo and returns them in a dictionary with following format
+ {'jobs': {
+ 'term1.id': {...}
+ 'term2.id': {...}
+ }
+ }'''
+
+ translation_pool = self.pool.get('ir.translation')
+ jobs = {}
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ auto_approve = 1 if user.company_id.gengo_auto_approve else 0
+ for term in translation_pool.browse(cr, uid, term_ids, context=context):
+ if re.search(r"\w", term.src or ""):
+ jobs[term.id] = {'type': 'text',
+ 'slug': 'single::English to ' + term.lang,
+ 'tier': tools.ustr(term.gengo_translation),
+ 'body_src': term.src,
+ 'lc_src': 'en',
+ 'lc_tgt': translation_pool._get_gengo_corresponding_language(term.lang),
+ 'auto_approve': auto_approve,
+ 'comment': user.company_id.gengo_comment,
+ }
+ return {'jobs': jobs}
+
+
+ def _send_translation_terms(self, cr, uid, term_ids, context=None):
+ """
+ Send a request to Gengo with all the term_ids in a different job, get the response and update the terms in
+ database accordingly.
+ """
+
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ flag, gengo = self.gengo_authentication(cr, uid, context=context)
+ if flag:
+ request = self.pack_jobs_request(cr, uid, term_ids, context=context)
+ if request['jobs']:
+ result = gengo.postTranslationJobs(jobs=request)
+ if result['opstat'] == 'ok':
+ self._update_terms(cr, uid, result['response'], context=context)
+ else:
+ _logger.error(gengo)
+ return True
+
+ def _sync_request(self, cr, uid, limit=GENGO_DEFAULT_LIMIT, context=None):
+ """
+ This scheduler will send a job request to the gengo , which terms are
+ waiing to be translated and for which gengo_translation is enabled.
+
+ A special key 'gengo_language' can be passed in the context in order to
+ request only translations of that language only. Its value is the language
+ ID in openerp.
+ """
+ if context is None:
+ context = {}
+ language_pool = self.pool.get('res.lang')
+ translation_pool = self.pool.get('ir.translation')
+ try:
+ #by default, the request will be made for all terms that needs it, whatever the language
+ lang_ids = language_pool.search(cr, uid, [], context=context)
+ if context.get('gengo_language'):
+ #but if this specific key is given, then we restrict the request on terms of this language only
+ lang_ids = [context.get('gengo_language')]
+ langs = [lang.code for lang in language_pool.browse(cr, uid, lang_ids, context=context)]
+ #search for the n first terms to translate
+ term_ids = translation_pool.search(cr, uid, [('state', '=', 'to_translate'), ('gengo_translation', 'in', ('machine','standard','pro','ultra')), ('lang', 'in', langs)], limit=limit, context=context)
+ if term_ids:
+ self._send_translation_terms(cr, uid, term_ids, context=context)
+ _logger.info("%s Translation terms have been posted to Gengo successfully", len(term_ids))
+ else:
+ _logger.info('No Translation terms to process.')
+ except Exception, e:
+ _logger.error("%s", e)
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_gengo/wizard/base_gengo_translations_view.xml b/addons/base_gengo/wizard/base_gengo_translations_view.xml
new file mode 100644
index 00000000000..09c3a77b1d5
--- /dev/null
+++ b/addons/base_gengo/wizard/base_gengo_translations_view.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+ <record model="ir.ui.view" id="base_gengo_translation_wizard_from">
+ <field name="name">base.gengo.translation.form</field>
+ <field name="model">base.gengo.translations</field>
+ <field name="arch" type="xml">
+ <form string="Gengo Request Form" version="7.0">
+ <group col="4">
+ <group>
+ <field name="lang_id" required="1"/>
+ <field name="restart_send_job"/>
+ </group>
+ <group>
+ <label colspan="2" string="Leave empty for requesting all the terms to Gengo that needs it, regardless of their language"/>
+ </group>
+ </group>
+ <footer>
+ <button name="act_update" string="Send" type="object" class="oe_highlight"/>
+ or
+ <button name="act_cancel" special="cancel" string="Cancel" type="object" class="oe_link"/>
+ </footer>
+ </form>
+ </field>
+ </record>
+
+ <record id="action_wizard_base_gengo_translations" model="ir.actions.act_window">
+ <field name="name">Gengo: Manual Request of Translation</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">base.gengo.translations</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="target">new</field>
+ </record>
+ <menuitem action="action_wizard_base_gengo_translations" id="menu_action_wizard_base_gengo_translations" parent="base.menu_translation_app"/>
+
+ </data>
+</openerp>
diff --git a/addons/decimal_precision/decimal_precision.py b/addons/decimal_precision/decimal_precision.py
index d9f6aa7b8db..93d69eb3093 100644
--- a/addons/decimal_precision/decimal_precision.py
+++ b/addons/decimal_precision/decimal_precision.py
@@ -22,6 +22,7 @@
from osv import osv, fields
import tools
import pooler
+from openerp import SUPERUSER_ID
class decimal_precision(osv.osv):
_name = 'decimal.precision'
@@ -56,7 +57,7 @@ decimal_precision()
def get_precision(application):
def change_digit(cr):
- res = pooler.get_pool(cr.dbname).get('decimal.precision').precision_get(cr, 1, application)
+ res = pooler.get_pool(cr.dbname).get('decimal.precision').precision_get(cr, SUPERUSER_ID, application)
return (16, res)
return change_digit
diff --git a/addons/document_webdav/nodes.py b/addons/document_webdav/nodes.py
index d6ceca458cd..a8fedee4fe3 100644
--- a/addons/document_webdav/nodes.py
+++ b/addons/document_webdav/nodes.py
@@ -25,6 +25,8 @@ from tools.safe_eval import safe_eval as eval
import time
import urllib
import uuid
+from openerp import SUPERUSER_ID
+
try:
from tools.dict_tools import dict_filter
except ImportError:
@@ -233,7 +235,7 @@ class node_acl_mixin(object):
if props_to_delete:
# explicitly delete, as admin, any of the ids we have identified.
- propobj.unlink(cr, 1, props_to_delete)
+ propobj.unlink(cr, SUPERUSER_ID, props_to_delete)
if lock_data.get('unlock_mode', False):
return lock_found and True
diff --git a/addons/document_webdav/test_davclient.py b/addons/document_webdav/test_davclient.py
index f1f2e58c835..0f66363c553 100755
--- a/addons/document_webdav/test_davclient.py
+++ b/addons/document_webdav/test_davclient.py
@@ -42,6 +42,7 @@ from tools import config
from xmlrpclib import Transport, ProtocolError
import StringIO
import base64
+from openerp import SUPERUSER_ID
_logger = logging.getLogger(__name__)
@@ -361,7 +362,7 @@ class DAVClient(object):
to break if "base_crypt" is used.
"""
ruob = obj.pool.get('res.users')
- res = ruob.read(cr, 1, [uid,], ['login', 'password'])
+ res = ruob.read(cr, SUPERUSER_ID, [uid,], ['login', 'password'])
assert res, "uid %s not found" % uid
self.user = res[0]['login']
self.passwd = res[0]['password']
diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js
index 8f41a9d7b21..694f5736c72 100644
--- a/addons/google_docs/static/src/js/gdocs.js
+++ b/addons/google_docs/static/src/js/gdocs.js
@@ -3,7 +3,7 @@ var _t = instance.web._t;
instance.web.Sidebar = instance.web.Sidebar.extend({
on_attachments_loaded: function(attachments) {
- self = this
+ var self = this;
self._super(attachments);
// if attachment contains a google doc url do nothing
// else display a button to create a google doc
diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py
index 75487983738..4843393e19d 100644
--- a/addons/hr_holidays/hr_holidays.py
+++ b/addons/hr_holidays/hr_holidays.py
@@ -25,6 +25,7 @@ import datetime, time
from itertools import groupby
from operator import itemgetter
+import math
import netsvc
from osv import fields, osv
from tools.translate import _
@@ -112,7 +113,7 @@ class hr_holidays(osv.osv):
return result
_columns = {
- 'name': fields.char('Description', required=True, size=64),
+ 'name': fields.char('Description', size=64),
'state': fields.selection([('draft', 'To Submit'), ('cancel', 'Cancelled'),('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')],
'State', readonly=True, help='The state is set to \'To Submit\', when a holiday request is created.\
\nThe state is \'To Approve\', when holiday request is confirmed by user.\
@@ -123,8 +124,6 @@ class hr_holidays(osv.osv):
'date_to': fields.datetime('End Date', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
'holiday_status_id': fields.many2one("hr.holidays.status", "Leave Type", required=True,readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
'employee_id': fields.many2one('hr.employee', "Employee", select=True, invisible=False, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, help='Leave Manager can let this field empty if this leave request/allocation is for every employee'),
- #'manager_id': fields.many2one('hr.employee', 'Leave Manager', invisible=False, readonly=True, help='This area is automatically filled by the user who validate the leave'),
- #'notes': fields.text('Notes',readonly=True, states={'draft':[('readonly',False)]}),
'manager_id': fields.many2one('hr.employee', 'First Approval', invisible=False, readonly=True, help='This area is automatically filled by the user who validate the leave'),
'notes': fields.text('Reasons',readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
'number_of_days_temp': fields.float('Number of Days', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
@@ -134,8 +133,8 @@ class hr_holidays(osv.osv):
'parent_id': fields.many2one('hr.holidays', 'Parent'),
'linked_request_ids': fields.one2many('hr.holidays', 'parent_id', 'Linked Requests',),
'department_id':fields.related('employee_id', 'department_id', string='Department', type='many2one', relation='hr.department', readonly=True, store=True),
- 'category_id': fields.many2one('hr.employee.category', "Category", help='Category of Employee'),
- 'holiday_type': fields.selection([('employee','By Employee'),('category','By Employee Category')], 'Allocation Type', help='By Employee: Allocation/Request for individual Employee, By Employee Category: Allocation/Request for group of employees in category', required=True),
+ 'category_id': fields.many2one('hr.employee.category', "Category", help='Category of Employee', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
+ 'holiday_type': fields.selection([('employee','By Employee'),('category','By Employee Category')], 'Allocation Mode', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, help='By Employee: Allocation/Request for individual Employee, By Employee Category: Allocation/Request for group of employees in category', required=True),
'manager_id2': fields.many2one('hr.employee', 'Second Approval', readonly=True, help='This area is automaticly filled by the user who validate the leave with second level (If Leave type need second validation)'),
'double_validation': fields.related('holiday_status_id', 'double_validation', type='boolean', relation='hr.holidays.status', string='Apply Double Validation'),
}
@@ -147,16 +146,11 @@ class hr_holidays(osv.osv):
'holiday_type': 'employee'
}
_sql_constraints = [
- ('type_value', "CHECK( (holiday_type='employee' AND employee_id IS NOT NULL) or (holiday_type='category' AND category_id IS NOT NULL))", "You have to select an employee or a category."),
+ ('type_value', "CHECK( (holiday_type='employee' AND employee_id IS NOT NULL) or (holiday_type='category' AND category_id IS NOT NULL))", "The employee or employee category of this request is missing."),
('date_check2', "CHECK ( (type='add') OR (date_from <= date_to))", "The start date must be before the end date !"),
('date_check', "CHECK ( number_of_days_temp >= 0 )", "The number of days must be greater than 0 !"),
]
- def create(self, cr, uid, vals, context=None):
- obj_id = super(hr_holidays, self).create(cr, uid, vals, context=context)
- self.create_notificate(cr, uid, [obj_id], context=context)
- return obj_id
-
def _create_resource_leave(self, cr, uid, leaves, context=None):
'''This method will create entry in resource calendar leave object at the time of holidays validated '''
obj_res_leave = self.pool.get('resource.calendar.leaves')
@@ -201,8 +195,8 @@ class hr_holidays(osv.osv):
def unlink(self, cr, uid, ids, context=None):
for rec in self.browse(cr, uid, ids, context=context):
- if rec.state<>'draft':
- raise osv.except_osv(_('Warning!'),_('You cannot delete a leave which is not in draft state !'))
+ if rec.state not in ['draft', 'cancel', 'confirm']:
+ raise osv.except_osv(_('Warning!'),_('You cannot delete a leave which is in %s state!')%(rec.state))
return super(hr_holidays, self).unlink(cr, uid, ids, context)
def onchange_date_from(self, cr, uid, ids, date_to, date_from):
@@ -210,7 +204,7 @@ class hr_holidays(osv.osv):
if date_to and date_from:
diff_day = self._get_number_of_days(date_from, date_to)
result['value'] = {
- 'number_of_days_temp': round(diff_day)+1
+ 'number_of_days_temp': round(math.floor(diff_day))+1
}
return result
result['value'] = {
@@ -244,29 +238,30 @@ class hr_holidays(osv.osv):
self.unlink(cr, uid, to_unlink, context=context)
return True
- def holidays_validate(self, cr, uid, ids, context=None):
+ def holidays_first_validate(self, cr, uid, ids, context=None):
self.check_holidays(cr, uid, ids, context=context)
obj_emp = self.pool.get('hr.employee')
ids2 = obj_emp.search(cr, uid, [('user_id', '=', uid)])
manager = ids2 and ids2[0] or False
- self.holidays_validate_notificate(cr, uid, ids, context=context)
+ self.holidays_first_validate_notificate(cr, uid, ids, context=context)
return self.write(cr, uid, ids, {'state':'validate1', 'manager_id': manager})
- def holidays_validate2(self, cr, uid, ids, context=None):
+ def holidays_validate(self, cr, uid, ids, context=None):
self.check_holidays(cr, uid, ids, context=context)
obj_emp = self.pool.get('hr.employee')
ids2 = obj_emp.search(cr, uid, [('user_id', '=', uid)])
manager = ids2 and ids2[0] or False
self.write(cr, uid, ids, {'state':'validate'})
data_holiday = self.browse(cr, uid, ids)
- holiday_ids = []
for record in data_holiday:
- if record.holiday_status_id.double_validation:
- holiday_ids.append(record.id)
+ if record.double_validation:
+ self.write(cr, uid, [record.id], {'manager_id2': manager})
+ else:
+ self.write(cr, uid, [record.id], {'manager_id': manager})
if record.holiday_type == 'employee' and record.type == 'remove':
meeting_obj = self.pool.get('crm.meeting')
meeting_vals = {
- 'name': record.name,
+ 'name': record.name or _('Leave Request'),
'categ_ids': record.holiday_status_id.categ_id and [(6,0,[record.holiday_status_id.categ_id.id])] or [],
'duration': record.number_of_days_temp * 8,
'description': record.notes,
@@ -301,25 +296,27 @@ class hr_holidays(osv.osv):
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'confirm', cr)
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'validate', cr)
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'second_validate', cr)
- if holiday_ids:
- self.holidays_valid2_notificate(cr, uid, holiday_ids, context=context)
- self.write(cr, uid, holiday_ids, {'manager_id2': manager})
+ self.holidays_validate_notificate(cr, uid, ids, context=context)
return True
def holidays_confirm(self, cr, uid, ids, context=None):
self.check_holidays(cr, uid, ids, context=context)
+ for record in self.browse(cr, uid, ids, context=context):
+ if record.employee_id and record.employee_id.parent_id and record.employee_id.parent_id.user_id:
+ self.message_subscribe(cr, uid, [record.id], user_ids=[record.employee_id.parent_id.user_id.id], context=context)
self.holidays_confirm_notificate(cr, uid, ids, context=context)
return self.write(cr, uid, ids, {'state':'confirm'})
- def holidays_refuse(self, cr, uid, ids, approval, context=None):
+ def holidays_refuse(self, cr, uid, ids, context=None):
obj_emp = self.pool.get('hr.employee')
ids2 = obj_emp.search(cr, uid, [('user_id', '=', uid)])
manager = ids2 and ids2[0] or False
- if approval == 'first_approval':
- self.write(cr, uid, ids, {'state': 'refuse', 'manager_id': manager})
- else:
- self.write(cr, uid, ids, {'state': 'refuse', 'manager_id2': manager})
- self.holidays_refuse_notificate(cr, uid, ids, approval, context=context)
+ for holiday in self.browse(cr, uid, ids, context=context):
+ if holiday.state == 'validate1':
+ self.write(cr, uid, [holiday.id], {'state': 'refuse', 'manager_id': manager})
+ else:
+ self.write(cr, uid, [holiday.id], {'state': 'refuse', 'manager_id2': manager})
+ self.holidays_refuse_notificate(cr, uid, ids, context=context)
self.holidays_cancel(cr, uid, ids, context=context)
return True
@@ -333,7 +330,7 @@ class hr_holidays(osv.osv):
# If a category that created several holidays, cancel all related
wf_service = netsvc.LocalService("workflow")
for request in record.linked_request_ids or []:
- wf_service.trg_validate(uid, 'hr.holidays', request.id, 'cancel', cr)
+ wf_service.trg_validate(uid, 'hr.holidays', request.id, 'refuse', cr)
self._remove_resource_leave(cr, uid, ids, context=context)
return True
@@ -367,39 +364,32 @@ class hr_holidays(osv.osv):
def create_notificate(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids, context=context):
self.message_post(cr, uid, ids,
- _("The %s request has been <b>created</b> and is waiting for confirmation.")
- % ('leave' if obj.type == 'remove' else 'allocation',), context=context)
+ _("The request has been <b>created</b> and is waiting confirmation."), context=context)
return True
def holidays_confirm_notificate(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids):
- self.message_post(cr, uid, [obj.id], _("The %s request has been <b>confirmed</b> and is waiting for validation by the manager.")
- % ('leave' if obj.type == 'remove' else 'allocation',), context=context)
+ self.message_post(cr, uid, [obj.id],
+ _("The request has been <b>submitted</b> and is waiting for validation by the manager."), context=context)
+ def holidays_first_validate_notificate(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids, context=context):
+ self.message_post(cr, uid, [obj.id],
+ _("The request has been <b>approved</b>. A second validation is necessary and is now pending."), context=context)
+
def holidays_validate_notificate(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids):
if obj.holiday_status_id.double_validation:
self.message_post(cr, uid, [obj.id],
- _("The %s request has been <b>approved</b>. A second validation is necessary and is now pending.")
- % ('leave' if obj.type == 'remove' else 'allocation',), context=context)
+ _("The request has been <b>double validated</b>. The validation process is now over."), context=context)
else:
- self.message_post(cr, uid, [obj.id],
- _("The %s request has been <b>approved</b>. The validation process is now over.")
- % ('leave' if obj.type == 'remove' else 'allocation',), context=context)
+ self.message_post(cr, uid, [obj.id],
+ _("The request has been <b>approved</b>. The validation process is now over."), context=context)
- def holidays_valid2_notificate(self, cr, uid, ids, context=None):
+ def holidays_refuse_notificate(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids):
- self.message_post(cr, uid, [obj.id],
- _("The %s request has been <b>double validated</b>. The validation process is now over.")
- % ('leave' if obj.type == 'remove' else 'allocation',), context=context)
-
- def holidays_refuse_notificate(self, cr, uid, ids, approval, context=None):
- for obj in self.browse(cr, uid, ids):
- self.message_post(cr, uid, [obj.id],
- _("The %s request has been <b>refused</b>. The validation process is now over.")
- % ('leave' if obj.type == 'remove' else 'allocation',), context=context)
-
-hr_holidays()
+ self.message_post(cr, uid, [obj.id],
+ _("The request has been <b>refused</b>. The validation process is now over."), context=context)
class resource_calendar_leaves(osv.osv):
_inherit = "resource.calendar.leaves"
diff --git a/addons/hr_holidays/hr_holidays_demo.xml b/addons/hr_holidays/hr_holidays_demo.xml
index 6ad5a442a38..4c9d18683c7 100644
--- a/addons/hr_holidays/hr_holidays_demo.xml
+++ b/addons/hr_holidays/hr_holidays_demo.xml
@@ -12,7 +12,7 @@
<record model="hr.holidays" id="hr_holidays_employee1_cl">
<field name="name">Trip with Family</field>
- <field name="holiday_status_id" ref="holiday_status_cl"/>
+ <field name="holiday_status_id" ref="holiday_status_comp"/>
<field eval="time.strftime('%Y-%m-01')" name="date_from"/>
<field eval="time.strftime('%Y-%m-03')" name="date_to"/>
<field name="type">remove</field>
@@ -52,13 +52,10 @@
<field name="employee_id" ref="hr.employee_fp"/>
</record>
- <workflow action="confirm" model="hr.holidays" ref="hr_holidays_employee1_allocation_cl"/>
<workflow action="validate" model="hr.holidays" ref="hr_holidays_employee1_allocation_cl"/>
- <workflow action="confirm" model="hr.holidays" ref="hr_holidays_employee1_sl"/>
<workflow action="validate" model="hr.holidays" ref="hr_holidays_employee1_sl"/>
- <workflow action="confirm" model="hr.holidays" ref="hr_holidays_employee1_int_tour"/>
<workflow action="validate" model="hr.holidays" ref="hr_holidays_employee1_int_tour"/>
</data>
</openerp>
diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml
index 89ce641b271..699c08bd636 100644
--- a/addons/hr_holidays/hr_holidays_view.xml
+++ b/addons/hr_holidays/hr_holidays_view.xml
@@ -83,56 +83,42 @@
</field>
</record>
- <record model="ir.ui.view" id="edit_holiday_new">
+ <record model="ir.ui.view" id="edit_holiday_new">
<field name="name">Leave Request</field>
<field name="model">hr.holidays</field>
<field name="priority">1</field>
<field name="arch" type="xml">
<form string="Leave Request" version="7.0">
<header>
- <button string="Submit to Manager" name="confirm" states="draft" type="workflow" class="oe_highlight"/>
<button string="Approve" name="validate" states="confirm" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
<button string="Validate" name="second_validate" states="validate1" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
- <button string="Refuse" name="refuse" states="confirm,validate1" type="workflow" groups="base.group_hr_user,base.group_hr_manager" class="oe_highlight"/>
- <button string="Reset to New" name="set_to_draft" states="refuse,validate" type="object" groups="base.group_hr_user" />
+ <button string="Refuse" name="refuse" states="confirm,validate1,validate" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
+ <button string="Reset to New" name="set_to_draft" states="refuse" type="object" groups="base.group_hr_user" />
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,validate" statusbar_colors='{"confirm":"blue","validate1":"blue","refuse":"red"}'/>
</header>
<sheet string="Leave Request">
<group>
<group>
<field name="name" attrs="{'readonly':[('state','!=','draft'),('state','!=','confirm')]}"/>
- <field name="holiday_type" on_change="onchange_type(holiday_type)" attrs="{'readonly':[('state','!=','draft')]}" width="130" string="Mode" groups="base.group_hr_user"/>
- <field name="employee_id" attrs="{'required':[('holiday_type','=','employee')],'invisible':[('holiday_type','=','category')]}" groups="base.group_hr_user"/>
- <field name="category_id" attrs="{'required':[('holiday_type','=','category')], 'invisible':[('holiday_type','=','employee')], 'readonly':[('state','!=','draft'), ('state','!=','confirm')]}"/>
- <field name="department_id" attrs="{'readonly':[('holiday_type','=','category')]}" groups="base.group_hr_user"/>
- </group>
- <group>
<field name="holiday_status_id" on_change="onchange_status_id(holiday_status_id)" context="{'employee_id':employee_id}"/>
<label for="number_of_days_temp" string="Duration"/>
<div>
- <field name="date_from" on_change="onchange_date_from(date_to, date_from)" required="1" class="oe_inline"/> -
- <field name="date_to" on_change="onchange_date_from(date_to, date_from)" required="1" class="oe_inline"/>
+ <group col="3">
+ <field name="date_from" nolabel="1" on_change="onchange_date_from(date_to, date_from)" required="1" class="oe_inline"/><label string="-" class="oe_inline" />
+ <field name="date_to" nolabel="1" on_change="onchange_date_from(date_to, date_from)" required="1" class="oe_inline"/>
+ </group>
<div>
<field name="number_of_days_temp" class="oe_inline"/> days
</div>
</div>
+ <field name="category_id" attrs="{'required':[('holiday_type','=','category')], 'invisible':[('holiday_type','=','employee')], 'readonly':[('state','!=','draft'), ('state','!=','confirm')]}"/>
+ </group>
+ <group>
+ <field name="holiday_type" on_change="onchange_type(holiday_type)" attrs="{'readonly':[('state','!=','draft')]}" width="130" string="Mode" groups="base.group_hr_user"/>
+ <field name="employee_id" attrs="{'required':[('holiday_type','=','employee')],'invisible':[('holiday_type','=','category')]}" groups="base.group_hr_user"/>
+ <field name="department_id" attrs="{'readonly':[('holiday_type','=','category')]}" groups="base.group_hr_user"/>
</group>
</group>
- <notebook colspan="4">
- <page string="General">
- <group>
- <group>
- <field name="manager_id" groups="base.group_no_one"/>
- <field name="double_validation" invisible="1"/>
- </group>
- <group>
- <field name="manager_id2" attrs="{'invisible':[('double_validation', '!=', True)]}" groups="base.group_no_one"/>
- </group>
- </group>
- <newline/>
- <field name="notes" nolabel="1" colspan="4" placeholder="Add a reason..."/>
- </page>
- </notebook>
</sheet>
<div class="oe_chatter">
<field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
@@ -149,37 +135,27 @@
<field name="arch" type="xml">
<form string="Allocation Request" version="7.0">
<header>
- <button string="Submit to Manager" name="confirm" states="draft" type="workflow" class="oe_highlight"/>
<button string="Approve" name="validate" states="confirm" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
<button string="Validate" name="second_validate" states="validate1" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
- <button string="Refuse" name="refuse" states="confirm,validate1" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
- <button string="Reset to New" name="set_to_draft" states="cancel,validate,refuse" type="object" groups="base.group_hr_user" />
+ <button string="Refuse" name="refuse" states="confirm,validate,validate1" type="workflow" groups="base.group_hr_user" class="oe_highlight"/>
+ <button string="Reset to New" name="set_to_draft" states="cancel,refuse" type="object" groups="base.group_hr_user" />
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,validate" statusbar_colors='{"confirm":"blue","validate1":"blue","refuse":"red"}'/>
</header>
<sheet>
<group>
<group>
- <field name="name"/>
- <field name="holiday_type" on_change="onchange_type(holiday_type)" attrs="{'readonly':[('state','!=','draft')]}" string="Allocation Mode" groups="base.group_hr_manager"/>
- <field name="employee_id" attrs="{'required':[('holiday_type','=','employee')], 'invisible':[('holiday_type','=','category')]}"/>
- <field name="category_id" attrs="{'required':[('holiday_type','=','category')], 'readonly':[('state','!=','draft')], 'invisible':[('holiday_type','=','employee')]}"/>
- <field name="department_id" attrs="{'readonly':['|', ('holiday_type','=','category'), ('state','not in' ,('draft', 'confirm'))]}"/>
- </group>
- <group>
+ <field name="name" required="1" attrs="{'readonly':[('state','!=','draft'),('state','!=','confirm')]}"/>
<field name="holiday_status_id" on_change="onchange_status_id(holiday_status_id)" context="{'employee_id':employee_id}"/>
<field name="number_of_days_temp"/>
</group>
+ <group>
+ <field name="holiday_type" on_change="onchange_type(holiday_type)"/>
+ <field name="employee_id" attrs="{'required':[('holiday_type','=','employee')], 'invisible':[('holiday_type','=','category')]}"/>
+ <field name="category_id" attrs="{'required':[('holiday_type','=','category')], 'invisible':[('holiday_type','=','employee')]}"/>
+ <field name="department_id" attrs="{'invisible':[('holiday_type','=','category')]}"/>
+ </group>
</group>
- <notebook>
- <page string="General">
- <group col="4">
- <field name="double_validation" invisible="1"/>
- <field name="manager_id"/>
- <field name="manager_id2" attrs="{'invisible':[('double_validation', '!=', True)]}"/>
- </group>
- <field name="notes" placeholder="Add a reason..."/>
- </page>
- </notebook>
+ <field name="notes" nolabel="1" colspan="4" placeholder="Add a reason..."/>
</sheet>
<div class="oe_chatter">
<field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
@@ -223,7 +199,6 @@
<field name="state"/>
</header>
<group col="4">
- <field name="name"/>
<field name="holiday_status_id"/>
<field name="type"/>
<field name="date_from" on_change="onchange_date_from(date_to, date_from)" attrs="{'readonly':[('type','=','add')], 'required':[('type','=','remove')]}"/>
@@ -231,7 +206,7 @@
<field name="number_of_days_temp"/>
<field name="manager_id"/>
</group>
- <field name="notes"/>
+ <field name="name" placeholder="Add a reason..."/>
</form>
</field>
</record>
@@ -284,12 +259,12 @@
<menuitem name="Leaves" parent="hr.menu_hr_root" id="menu_open_ask_holidays" sequence="20"/>
<record model="ir.actions.act_window" id="open_ask_holidays">
- <field name="name">Leave Requests</field>
+ <field name="name">My Leave Requests</field>
<field name="res_model">hr.holidays</field>
<field name="view_type">form</field>
<field name="view_id" ref="edit_holiday_new"/>
<field name="context">{}</field>
- <field name="domain">[('type','=','remove')]</field>
+ <field name="domain">[('type','=','remove'),('employee_id.user_id','=', uid)]</field>
<field name="search_view_id" ref="view_hr_holidays_filter"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
@@ -323,7 +298,7 @@
<field name="view_id" ref="view_holiday_new_calendar"/>
<field name="act_window_id" ref="open_ask_holidays"/>
</record>
-
+
<menuitem name="My Leave Requests" parent="menu_open_ask_holidays" id="menu_open_ask_holidays_new" action="open_ask_holidays"/>
<record model="ir.actions.act_window" id="request_approve_holidays">
@@ -353,11 +328,11 @@
<menuitem name="Leave Requests to Approve" parent="menu_open_ask_holidays" id="menu_request_approve_holidays" action="request_approve_holidays" groups="base.group_hr_user"/>
<record model="ir.actions.act_window" id="open_allocation_holidays">
- <field name="name">Allocation Requests</field>
+ <field name="name">My Allocation Requests</field>
<field name="res_model">hr.holidays</field>
<field name="view_type">form</field>
<field name="context">{'default_type':'add'}</field>
- <field name="domain">[('type','=','add')]</field>
+ <field name="domain">[('type','=','add'),('employee_id.user_id','=', uid)]</field>
<field name="view_id" ref="allocation_leave_new"/>
<field name="search_view_id" ref="view_hr_holidays_filter"/>
</record>
@@ -376,7 +351,7 @@
<field name="act_window_id" ref="open_allocation_holidays"/>
</record>
- <menuitem name="Allocation Requests" parent="menu_open_ask_holidays" id="menu_open_allocation_holidays" action="open_allocation_holidays"/>
+ <menuitem name="My Allocation Requests" parent="menu_open_ask_holidays" id="menu_open_allocation_holidays" action="open_allocation_holidays"/>
<record model="ir.actions.act_window" id="open_company_allocation">
<field name="name">Leaves Summary</field>
diff --git a/addons/hr_holidays/hr_holidays_workflow.xml b/addons/hr_holidays/hr_holidays_workflow.xml
index 7013d62a5ed..a2e1d54f96c 100644
--- a/addons/hr_holidays/hr_holidays_workflow.xml
+++ b/addons/hr_holidays/hr_holidays_workflow.xml
@@ -2,7 +2,16 @@
<openerp>
<data>
- <!-- Workflow definition -->
+ <!-- Workflow definition
+ 1. draft->submitted (no signal)
+ 2. submitted->accepted (validate signal) if not double_validation
+ 2. submitted -> first_accepted (validate signal) if double_validation
+ 2. submitted->refused (refuse signal)
+ 3. accepted->refused (refuse signal)
+ 4. first_accepted -> accepted (second_validate signal)
+ 4. first_accepted -> refused (refuse signal)
+
+ -->
<record model="workflow" id="wkf_holidays">
<field name="name">hr.wkf.holidays</field>
@@ -10,13 +19,13 @@
<field name="on_create">True</field>
</record>
- <record model="workflow.activity" id="act_draft">
+ <record model="workflow.activity" id="act_draft"> <!-- draft -->
<field name="wkf_id" ref="wkf_holidays" />
<field name="flow_start">True</field>
<field name="name">draft</field>
</record>
- <record model="workflow.activity" id="act_confirm">
+ <record model="workflow.activity" id="act_confirm"> <!-- submitted -->
<field name="wkf_id" ref="wkf_holidays" />
<field name="name">confirm</field>
<field name="kind">function</field>
@@ -24,74 +33,94 @@
<field name="split_mode">OR</field>
</record>
- <record model="workflow.activity" id="act_validate">
+ <record model="workflow.activity" id="act_validate"> <!-- accepted -->
<field name="wkf_id" ref="wkf_holidays" />
<field name="name">validate</field>
<field name="kind">function</field>
<field name="action">holidays_validate()</field>
</record>
- <record model="workflow.activity" id="act_validate1">
+ <record model="workflow.activity" id="act_validate1"> <!-- first_accepted -->
<field name="wkf_id" ref="wkf_holidays" />
- <field name="name">second_validate</field>
+ <field name="name">first_validate</field>
<field name="kind">function</field>
- <field name="action">holidays_validate2()</field>
+ <field name="action">holidays_first_validate()</field>
+ <field name="split_mode">OR</field>
</record>
- <record model="workflow.activity" id="act_refuse">
+ <record model="workflow.activity" id="act_refuse"> <!-- refused -->
<field name="wkf_id" ref="wkf_holidays" />
<field name="name">refuse</field>
<field name="flow_stop">True</field>
- <field name="kind">stopall</field>
+ <field name="kind">function</field>
+ <field name="action">holidays_refuse()</field>
</record>
<!--
workflow transition
-->
- <record model="workflow.transition" id="t1">
+ <record model="workflow.transition" id="holiday_draft2confirm"> <!-- 1. draft->submitted (no signal) -->
<field name="act_from" ref="act_draft" />
<field name="act_to" ref="act_confirm" />
- <field name="signal">confirm</field>
</record>
- <record model="workflow.transition" id="t2">
+ <record model="workflow.transition" id="holiday_confirm2validate"> <!-- 2. submitted->accepted (validate signal) if not double_validation-->
<field name="act_from" ref="act_confirm" />
<field name="act_to" ref="act_validate" />
<field name="signal">validate</field>
- <field name="condition">True</field>
+ <field name="condition">not double_validation</field>
<field name="group_id" ref="base.group_hr_user"/>
</record>
- <record model="workflow.transition" id="t3">
+ <record model="workflow.transition" id="holiday_confirm2validate1"> <!-- 2. submitted -> first_accepted (validate signal) if double_validation-->
+ <field name="act_from" ref="act_confirm" />
+ <field name="act_to" ref="act_validate1" />
+ <field name="condition">double_validation</field>
+ <field name="group_id" ref="base.group_hr_user"/>
+ </record>
+
+
+ <record model="workflow.transition" id="holiday_confirm2refuse"> <!-- 2. submitted->refused (refuse signal) -->
<field name="act_from" ref="act_confirm" />
<field name="act_to" ref="act_refuse" />
<field name="signal">refuse</field>
- <field name="condition">holidays_refuse('first_approval')</field>
+ <field name="condition">True</field>
<field name="group_id" ref="base.group_hr_user"/>
</record>
- <record model="workflow.transition" id="t4">
+ <record model="workflow.transition" id="holiday_validate2refuse"> <!-- 3. accepted->refused (refuse signal) -->
<field name="act_from" ref="act_validate" />
<field name="act_to" ref="act_refuse" />
<field name="signal">refuse</field>
- <field name="condition">holidays_refuse('second_approval')</field>
+ <field name="condition">True</field>
<field name="group_id" ref="base.group_hr_user"/>
</record>
- <record model="workflow.transition" id="t8">
+ <record model="workflow.transition" id="holiday_validate2refuse"> <!-- 3. accepted->refused (refuse signal) -->
<field name="act_from" ref="act_validate" />
- <field name="act_to" ref="act_validate1" />
+ <field name="act_to" ref="act_refuse" />
+ <field name="signal">refuse</field>
+ <field name="condition">True</field>
+ <field name="group_id" ref="base.group_hr_user"/>
+ </record>
+
+
+ <record model="workflow.transition" id="holiday_validate1_validate"> <!-- 4. first_accepted -> accepted (second_validate signal) -->
+ <field name="act_from" ref="act_validate1" />
+ <field name="act_to" ref="act_validate" />
+ <field name="condition">True</field>
<field name="signal">second_validate</field>
- <field name="group_id" ref="base.group_hr_manager" />
+ <field name="group_id" ref="base.group_hr_user"/>
</record>
- <record model="workflow.transition" id="t11">
- <field name="act_from" ref="act_validate" />
- <field name="act_to" ref="act_validate1" />
- <field name="condition">not holiday_status_id.double_validation</field>
- <field name="signal" eval="False"/>
+ <record model="workflow.transition" id="holiday_validate1_refuse"> <!-- 4. first_accepted->refused (refuse signal) -->
+ <field name="act_from" ref="act_validate1" />
+ <field name="act_to" ref="act_refuse" />
+ <field name="signal">refuse</field>
+ <field name="condition">True</field>
+ <field name="group_id" ref="base.group_hr_user"/>
</record>
</data>
diff --git a/addons/hr_holidays/security/ir.model.access.csv b/addons/hr_holidays/security/ir.model.access.csv
index b21b6ca64e4..0375a17ac53 100644
--- a/addons/hr_holidays/security/ir.model.access.csv
+++ b/addons/hr_holidays/security/ir.model.access.csv
@@ -4,5 +4,5 @@ access_hr_holidays_user,hr.holidays.user,model_hr_holidays,base.group_hr_user,1,
access_hr_holidays_employee,hr.holidays.employee,model_hr_holidays,base.group_user,1,1,1,1
access_hr_holydays_status_employee,hr.holidays.status employee,model_hr_holidays_status,base.group_user,1,0,0,0
access_hr_holidays_remain_user,hr.holidays.ramain.user,model_hr_holidays_remaining_leaves_user,base.group_hr_user,1,1,1,1
-access_resource_calendar_leaves_manager,resource_calendar_leaves_manager,resource.model_resource_calendar_leaves,base.group_hr_manager,1,1,1,1
+access_resource_calendar_leaves_user,resource_calendar_leaves_user,resource.model_resource_calendar_leaves,base.group_hr_user,1,1,1,1
access_crm_meeting_type_manager,crm.meeting.type.manager,base_calendar.model_crm_meeting_type,base.group_hr_manager,1,1,1,1
diff --git a/addons/hr_holidays/security/ir_rule.xml b/addons/hr_holidays/security/ir_rule.xml
index 8e8c97bf7ea..ff0270026a4 100644
--- a/addons/hr_holidays/security/ir_rule.xml
+++ b/addons/hr_holidays/security/ir_rule.xml
@@ -1,6 +1,19 @@
<?xml version="1.0"?>
<openerp>
<data>
-
+ <record id="property_rule_holidays_employee" model="ir.rule">
+ <field name="name">Employee Holidays</field>
+ <field model="ir.model" name="model_id" ref="model_hr_holidays"/>
+ <field name="domain_force">[('employee_id.user_id','=',user.id)]</field>
+ <field name="groups" eval="[(4,ref('base.group_user'))]"/>
+ </record>
+
+ <record id="property_rule_holidays_officer" model="ir.rule">
+ <field name="name">Holidays Officer</field>
+ <field model="ir.model" name="model_id" ref="model_hr_holidays"/>
+ <field name="domain_force">[(1,'=',1)]</field>
+ <field name="groups" eval="[(4,ref('base.group_hr_user'))]"/>
+ </record>
+
</data>
</openerp>
diff --git a/addons/import_google/i18n/mn.po b/addons/import_google/i18n/mn.po
new file mode 100644
index 00000000000..9b0376c0d98
--- /dev/null
+++ b/addons/import_google/i18n/mn.po
@@ -0,0 +1,217 @@
+# Mongolian translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-08-31 07:21+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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: 2012-09-01 04:55+0000\n"
+"X-Generator: Launchpad (build 15890)\n"
+
+#. module: import_google
+#: help:synchronize.google.import,group_name:0
+msgid "Choose which group to import, By default it takes all."
+msgstr ""
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "Import Google Calendar Events"
+msgstr ""
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "_Import Events"
+msgstr ""
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google_data.py:71
+#, python-format
+msgid ""
+"No Google Username or password Defined for user.\n"
+"Please define in user view"
+msgstr ""
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google_data.py:127
+#, python-format
+msgid ""
+"Invalid login detail !\n"
+" Specify Username/Password."
+msgstr ""
+
+#. module: import_google
+#: field:synchronize.google.import,supplier:0
+msgid "Supplier"
+msgstr ""
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "Import Options"
+msgstr ""
+
+#. module: import_google
+#: field:synchronize.google.import,group_name:0
+msgid "Group Name"
+msgstr ""
+
+#. module: import_google
+#: model:ir.model,name:import_google.model_crm_case_categ
+msgid "Category of Case"
+msgstr ""
+
+#. module: import_google
+#: model:ir.actions.act_window,name:import_google.act_google_login_contact_form
+#: model:ir.ui.menu,name:import_google.menu_sync_contact
+msgid "Import Google Contacts"
+msgstr ""
+
+#. module: import_google
+#: view:google.import.message:0
+msgid "Import Google Data"
+msgstr ""
+
+#. module: import_google
+#: view:crm.meeting:0
+msgid "Meeting Type"
+msgstr ""
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google.py:38
+#: code:addons/import_google/wizard/import_google_data.py:28
+#, python-format
+msgid ""
+"Please install gdata-python-client from http://code.google.com/p/gdata-"
+"python-client/downloads/list"
+msgstr ""
+
+#. module: import_google
+#: model:ir.model,name:import_google.model_google_login
+msgid "Google Contact"
+msgstr ""
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "Import contacts from a google account"
+msgstr ""
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google_data.py:133
+#, python-format
+msgid "Please specify correct user and password !"
+msgstr ""
+
+#. module: import_google
+#: field:synchronize.google.import,customer:0
+msgid "Customer"
+msgstr ""
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "_Cancel"
+msgstr ""
+
+#. module: import_google
+#: model:ir.model,name:import_google.model_synchronize_google_import
+msgid "synchronize.google.import"
+msgstr ""
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "_Import Contacts"
+msgstr ""
+
+#. module: import_google
+#: model:ir.actions.act_window,name:import_google.act_google_login_form
+#: model:ir.ui.menu,name:import_google.menu_sync_calendar
+msgid "Import Google Calendar"
+msgstr ""
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google_data.py:50
+#, python-format
+msgid "Import google"
+msgstr ""
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google_data.py:127
+#: code:addons/import_google/wizard/import_google_data.py:133
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google_data.py:71
+#, python-format
+msgid "Warning !"
+msgstr ""
+
+#. module: import_google
+#: field:synchronize.google.import,create_partner:0
+msgid "Options"
+msgstr "Тохируулга"
+
+#. module: import_google
+#: view:google.import.message:0
+msgid "_Ok"
+msgstr ""
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google.py:38
+#: code:addons/import_google/wizard/import_google_data.py:28
+#, python-format
+msgid "Google Contacts Import Error!"
+msgstr ""
+
+#. module: import_google
+#: model:ir.model,name:import_google.model_google_import_message
+msgid "Import Message"
+msgstr ""
+
+#. module: import_google
+#: field:synchronize.google.import,calendar_name:0
+msgid "Calendar Name"
+msgstr ""
+
+#. module: import_google
+#: help:synchronize.google.import,supplier:0
+msgid "Check this box to set newly created partner as Supplier."
+msgstr ""
+
+#. module: import_google
+#: selection:synchronize.google.import,create_partner:0
+msgid "Import only address"
+msgstr "Зөвхөн хаяг оруулах"
+
+#. module: import_google
+#: field:crm.case.categ,user_id:0
+msgid "User"
+msgstr ""
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "Partner Status for this Group:"
+msgstr ""
+
+#. module: import_google
+#: field:google.import.message,name:0
+msgid "Message"
+msgstr ""
+
+#. module: import_google
+#: selection:synchronize.google.import,create_partner:0
+msgid "Create partner for each contact"
+msgstr ""
+
+#. module: import_google
+#: help:synchronize.google.import,customer:0
+msgid "Check this box to set newly created partner as Customer."
+msgstr ""
diff --git a/addons/l10n_br/account.py b/addons/l10n_br/account.py
index 6e38aaa690f..64d3c2cda79 100644
--- a/addons/l10n_br/account.py
+++ b/addons/l10n_br/account.py
@@ -29,6 +29,7 @@ import decimal_precision as dp
from tools.misc import currency
from tools.translate import _
from tools import config
+from openerp import SUPERUSER_ID
class account_tax_code_template(osv.osv):
@@ -53,7 +54,7 @@ class account_tax_template(osv.osv):
def get_precision_tax():
def change_digit_tax(cr):
- res = pooler.get_pool(cr.dbname).get('decimal.precision').precision_get(cr, 1, 'Account')
+ res = pooler.get_pool(cr.dbname).get('decimal.precision').precision_get(cr, SUPERUSER_ID, 'Account')
return (16, res+2)
return change_digit_tax
@@ -91,7 +92,7 @@ class account_tax(osv.osv):
def get_precision_tax():
def change_digit_tax(cr):
- res = pooler.get_pool(cr.dbname).get('decimal.precision').precision_get(cr, 1, 'Account')
+ res = pooler.get_pool(cr.dbname).get('decimal.precision').precision_get(cr, SUPERUSER_ID, 'Account')
return (16, res+2)
return change_digit_tax
diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py
index 5bcce0b8927..27eb29051b9 100644
--- a/addons/mail/mail_alias.py
+++ b/addons/mail/mail_alias.py
@@ -92,9 +92,8 @@ class mail_alias(osv.Model):
_defaults = {
'alias_defaults': '{}',
'alias_user_id': lambda self,cr,uid,context: uid,
-
# looks better when creating new aliases - even if the field is informative only
- 'alias_domain': lambda self,cr,uid,context: self._get_alias_domain(cr,1,[1],None,None)[1]
+ 'alias_domain': lambda self,cr,uid,context: self._get_alias_domain(cr, SUPERUSER_ID,[1],None,None)[1]
}
_sql_constraints = [
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index d47c3a9129a..d57eba2ceb5 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -985,43 +985,14 @@
</data>
</field>
</record>
- <record id="product_normal_form_supply_view" model="ir.ui.view">
+ <record id="product_normal_form_supply_view" model="ir.ui.view">
<field name="name">product.normal.form.mrp.inherit</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="arch" type="xml">
- <xpath expr="//field[@name='procure_method']" position="after">
- <field name="supply_method" groups="base.group_user"/>
- </xpath>
- </field>
- </record>
-
- <record id="product_normal_form_view" model="ir.ui.view">
- <field name="name">product.normal.form.mrp.inherit</field>
- <field name="model">product.product</field>
- <field name="inherit_id" ref="stock.view_normal_procurement_locations_form"/>
- <field name="arch" type="xml">
- <page string="Procurement &amp; Locations" position="inside">
- <separator string="Bill of Materials"/>
- <field name="bom_ids" widget="one2many_list" mode="tree" context="{'default_product_id': active_id}">
- <tree string="Bill of Materials">
- <field name="name" string="Component Name"/>
- <field name="bom_id"/>
- <field name="product_qty" string="Quantity of Product"/>
- <field name="type"/>
- <field name="date_start"/>
- <field name="date_stop"/>
- </tree>
- <form string="Bill of Material">
- <field name="name" string="Component Name"/>
- <field name="bom_id"/>
- <field name="product_qty" string="Quantity of Product"/>
- <field name="type"/>
- <field name="date_start"/>
- <field name="date_stop"/>
- </form>
- </field>
- </page>
+ <xpath expr="//field[@name='procure_method']" position="after">
+ <field name="supply_method" groups="base.group_user"/>
+ </xpath>
</field>
</record>
@@ -1079,5 +1050,24 @@
id="menu_mrp_production_order_action" name="Orders Planning"
parent="menu_mrp_planning" sequence="1"/>
+
+ <record model="ir.actions.act_window" id="product_open_bom">
+ <field name="context">{'default_product_id': active_id, 'search_default_product_id': active_id}</field>
+ <field name="name">Bill of Materials</field>
+ <field name="res_model">mrp.bom</field>
+ </record>
+
+ <record model="ir.ui.view" id="product_form_view_bom_button">
+ <field name="name">product.product.procurement</field>
+ <field name="model">product.product</field>
+ <field name="inherit_id" ref="product.product_normal_form_view"/>
+ <field name="arch" type="xml">
+ <xpath expr="//div[@name='buttons']" position="inside">
+ <button string="Bill of Materials" name="%(product_open_bom)d" type="action"/>
+ </xpath>
+ </field>
+ </record>
+
+
</data>
</openerp>
diff --git a/addons/mrp/product.py b/addons/mrp/product.py
index 1bc3bb749ce..1fa0f2c8a97 100644
--- a/addons/mrp/product.py
+++ b/addons/mrp/product.py
@@ -26,7 +26,7 @@ from tools.translate import _
class product_product(osv.osv):
_inherit = "product.product"
_columns = {
- "bom_ids": fields.one2many('mrp.bom', 'product_id','Bill of Materials'),
+ "bom_ids": fields.one2many('mrp.bom', 'product_id','Bill of Materials', domain=[('bom_id','=',False)]),
}
def copy(self, cr, uid, id, default=None, context=None):
if not default:
diff --git a/addons/point_of_sale/i18n/nb.po b/addons/point_of_sale/i18n/nb.po
new file mode 100644
index 00000000000..42e5832b237
--- /dev/null
+++ b/addons/point_of_sale/i18n/nb.po
@@ -0,0 +1,2720 @@
+# Norwegian Bokmal translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-02-08 01:37+0100\n"
+"PO-Revision-Date: 2012-08-31 07:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Norwegian Bokmal <nb@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: 2012-09-01 04:55+0000\n"
+"X-Generator: Launchpad (build 15890)\n"
+
+#. module: point_of_sale
+#: field:report.transaction.pos,product_nb:0
+msgid "Product Nb."
+msgstr "Produkt Nb"
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree_today
+msgid "Sales by day"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/wizard/pos_open_statement.py:49
+#, python-format
+msgid ""
+"You must define which payment method must be available through the point of "
+"sale by reusing existing bank and cash through \"Accounting > Configuration "
+"> Financial Accounting > Journals\". Select a journal and check the field "
+"\"PoS Payment Method\" from the \"Point of Sale\" tab. You can also create "
+"new payment methods directly from menu \"PoS Backend > Configuration > "
+"Payment Methods\"."
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0 view:report.pos.order:0
+msgid "Today"
+msgstr "I dag"
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.plain_water
+msgid "Plain Water"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0
+msgid "Year from Creation date of cash register"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.confirm:0
+msgid "Post All Orders"
+msgstr "Poster Alle Ordre"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.spa_2l_product_template
+msgid "Spa Reine 2L"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_pos_box_out
+msgid "Pos Box Out"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_report_cash_register_all
+#: model:ir.ui.menu,name:point_of_sale.menu_report_cash_register_all
+msgid "Register Analysis"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.report.xml,name:point_of_sale.pos_lines_detail
+#: report:pos.details:0 report:pos.details_summary:0
+msgid "Details of Sales"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0 field:report.cash.register,day:0
+#: view:report.pos.order:0 field:report.pos.order,day:0
+msgid "Day"
+msgstr "Dag"
+
+#. module: point_of_sale
+#: view:pos.make.payment:0
+msgid "Add payment :"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.box.out,name:0
+msgid "Description / Reason"
+msgstr "Beskrivelse / Årsak"
+
+#. module: point_of_sale
+#: field:report.sales.by.margin.pos,product_name:0
+#: field:report.sales.by.margin.pos.month,product_name:0
+msgid "Product Name"
+msgstr "Produktnavn"
+
+#. module: point_of_sale
+#: view:report.cash.register:0
+msgid "Month from Creation date of cash register"
+msgstr ""
+
+#. module: point_of_sale
+#: report:account.statement:0 field:pos.box.entries,amount:0
+#: field:pos.box.out,amount:0 report:pos.invoice:0
+#: field:pos.make.payment,amount:0 report:pos.user.product:0
+#: field:report.transaction.pos,amount:0
+msgid "Amount"
+msgstr ""
+
+#. module: point_of_sale
+#: constraint:account.journal:0
+msgid ""
+"Configuration error! The currency chosen should be shared by the default "
+"accounts too."
+msgstr "Konfigurasjonsfeil ! Valgt valuta må settes opp i kontoplan"
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.pos_category_action
+#: model:ir.ui.menu,name:point_of_sale.menu_pos_category view:pos.category:0
+msgid "PoS Categories"
+msgstr "PoS Kategorier"
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_box_out
+#: model:ir.ui.menu,name:point_of_sale.menu_wizard_enter_jrnl2
+msgid "Take Money Out"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.lines:0
+msgid "VAT"
+msgstr "MVA"
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Origin"
+msgstr "Opphav"
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Tax"
+msgstr "MVA"
+
+#. module: point_of_sale
+#: report:pos.user.product:0
+msgid "Starting Date"
+msgstr "Startdato"
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/wizard/pos_box_entries.py:46
+#, python-format
+msgid ""
+"You do not have any open cash register. You must create a payment method or "
+"open a cash register."
+msgstr ""
+
+#. module: point_of_sale
+#: report:account.statement:0 field:report.pos.order,partner_id:0
+msgid "Partner"
+msgstr "Partner"
+
+#. module: point_of_sale
+#: report:pos.details:0 report:pos.details_summary:0
+msgid "Total of the day"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.pos.order:0 field:report.pos.order,average_price:0
+msgid "Average Price"
+msgstr "Gjennomsnittspris"
+
+#. module: point_of_sale
+#: report:pos.lines:0
+msgid "Disc. (%)"
+msgstr "Rab. (%)"
+
+#. module: point_of_sale
+#: model:ir.ui.menu,name:point_of_sale.menu_point_open_config
+msgid "Cash Register Management"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.lays_naturel_45g_product_template
+msgid "Lays Naturel 45g"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Accounting Information"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_regular_2l_product_template
+msgid "Coca-Cola Regular 2L"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree_month
+msgid "Sales by month"
+msgstr ""
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.soda_orange
+msgid "Orange"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_user_pos_today
+#: view:report.sales.by.user.pos:0 view:report.sales.by.user.pos.month:0
+msgid "Sales by User"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Disc.(%)"
+msgstr "Rab.(%)"
+
+#. module: point_of_sale
+#: field:pos.box.entries,ref:0
+msgid "Ref"
+msgstr "Ref"
+
+#. module: point_of_sale
+#: view:report.pos.order:0 field:report.pos.order,price_total:0
+msgid "Total Price"
+msgstr "Totalpris"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.leffe_brune_33cl_product_template
+msgid "Leffe Brune 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.report.xml,name:point_of_sale.pos_sales_user
+#: report:pos.sales.user:0
+msgid "Sales Report"
+msgstr "Salgsrapport"
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.beverage
+msgid "Beverages"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.stella_50cl_product_template
+msgid "Stella Artois 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.details:0
+msgid "Dates"
+msgstr "Datoer"
+
+#. module: point_of_sale
+#: field:pos.category,parent_id:0
+msgid "Parent Category"
+msgstr "Overordnet kategori"
+
+#. module: point_of_sale
+#: report:pos.details:0 report:pos.lines:0 report:pos.payment.report.user:0
+#: report:pos.user.product:0
+msgid "["
+msgstr ""
+
+#. module: point_of_sale
+#: field:report.sales.by.margin.pos,total:0
+#: field:report.sales.by.margin.pos.month,total:0
+msgid "Margin"
+msgstr "Margin"
+
+#. module: point_of_sale
+#: field:pos.discount,discount:0 field:pos.order.line,discount:0
+msgid "Discount (%)"
+msgstr "Rabatt (%)"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.oetker_speciale_product_template
+msgid "Dr. Oetker Ristorante Speciale"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order.line:0
+msgid "Total qty"
+msgstr "Total ant"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.fanta_orange_33cl_product_template
+msgid "Fanta Orange 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_user_pos_month
+msgid "Sales by User Monthly"
+msgstr ""
+
+#. module: point_of_sale
+#: report:all.closed.cashbox.of.the.day:0
+msgid "Today's Closed Cashbox"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0
+msgid "Day from Creation date of cash register"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.ui.menu,name:point_of_sale.menu_point_of_sale
+msgid "Daily Operations"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:285
+#, python-format
+msgid "Configuration Error !"
+msgstr "Konfigurasjonsfeil!"
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.sparkling_water
+msgid "Sparkling Water"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.box.entries:0
+msgid "Fill in this form if you put money in the cash register:"
+msgstr ""
+
+#. module: point_of_sale
+#: view:account.bank.statement:0
+msgid "Search Cash Statements"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
+msgid "August"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.pepsi_max_lemon_33cl_product_template
+msgid "Pepsi Max Cool Lemon 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
+msgid "June"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order.line:0
+msgid "POS Order line"
+msgstr "POS Ordre linje"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.fanta_orange_50cl_product_template
+msgid "Fanta Orange 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.category,child_id:0
+msgid "Children Categories"
+msgstr "Underordnede Kategorier"
+
+#. module: point_of_sale
+#: field:pos.make.payment,payment_date:0
+msgid "Payment Date"
+msgstr "Betalingsdato"
+
+#. module: point_of_sale
+#: help:product.product,pos_categ_id:0
+msgid ""
+"If you want to sell this product through the point of sale, select the "
+"category it belongs to."
+msgstr ""
+
+#. module: point_of_sale
+#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0
+msgid "Closing Date"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
+msgid "October"
+msgstr "Oktober"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_light_1l_product_template
+msgid "Coca-Cola Light 1L"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details:0 report:pos.details_summary:0
+msgid "Summary"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.chaudfontaine_50cl_product_template
+msgid "Chaudfontaine 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0 report:pos.lines:0 field:pos.order.line,qty:0
+#: field:report.sales.by.user.pos,qty:0
+#: field:report.sales.by.user.pos.month,qty:0
+msgid "Quantity"
+msgstr "Antall"
+
+#. module: point_of_sale
+#: field:pos.order.line,name:0
+msgid "Line No"
+msgstr ""
+
+#. module: point_of_sale
+#: view:account.bank.statement:0
+msgid "Period"
+msgstr "Periode"
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/wizard/pos_open_statement.py:49
+#, python-format
+msgid "No Cash Register Defined !"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Net Total:"
+msgstr "Netto total:"
+
+#. module: point_of_sale
+#: field:pos.make.payment,payment_name:0
+msgid "Payment Reference"
+msgstr "Betalingsreferanse"
+
+#. module: point_of_sale
+#: report:pos.details_summary:0
+msgid "Mode of Payment"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_pos_confirm
+msgid "Post POS Journal Entries"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:408
+#, python-format
+msgid "Customer Invoice"
+msgstr "Kundefaktura"
+
+#. module: point_of_sale
+#: view:pos.box.out:0
+msgid "Output Operation"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.pos.order:0 field:report.pos.order,total_discount:0
+msgid "Total Discount"
+msgstr "Rabatt totalt"
+
+#. module: point_of_sale
+#: view:pos.details:0 view:pos.payment.report:0 view:pos.payment.report.user:0
+#: view:pos.sale.user:0
+msgid "Print Report"
+msgstr "Skriv ut rapport"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.oetker_bolognese_product_template
+msgid "Dr. Oetker Ristorante Bolognese"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/wizard/pos_box_entries.py:105
+#, python-format
+msgid "Please check that income account is set to %s"
+msgstr ""
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.pizza
+msgid "Pizza"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/wizard/pos_return.py:85
+#: code:addons/point_of_sale/wizard/pos_return.py:240
+#, python-format
+msgid "Add Product"
+msgstr "Legg til produkt"
+
+#. module: point_of_sale
+#: field:report.transaction.pos,invoice_am:0
+msgid "Invoice Amount"
+msgstr ""
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.coke
+msgid "Coke"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Tel. :"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_confirm
+#: model:ir.ui.menu,name:point_of_sale.menu_wizard_pos_confirm
+msgid "Create Sale Entries"
+msgstr ""
+
+#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: point_of_sale
+#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_payment
+#: report:pos.details:0 view:pos.order:0
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:87
+msgid "Payment"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0
+msgid "Cash Analysis created in current month"
+msgstr ""
+
+#. module: point_of_sale
+#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0
+msgid "Ending Balance"
+msgstr "Sluttbalanse"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.pepsi_max_50cl_product_template
+msgid "Pepsi Max 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.san_pellegrino_1l_product_template
+msgid "San Pellegrino 1L"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Post Entries"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.spa_1l_product_template
+msgid "Spa Reine 1L"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details_summary:0
+msgid "Mode of Taxes"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/wizard/pos_close_statement.py:50
+#, python-format
+msgid "Cash registers are already closed."
+msgstr ""
+
+#. module: point_of_sale
+#: constraint:product.product:0
+msgid "Error: Invalid ean code"
+msgstr "Feil: Ugyldig ean kode"
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_pos_open_statement
+#: view:pos.open.statement:0
+msgid "Open Statements"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.details,date_end:0 field:pos.sale.user,date_end:0
+msgid "Date End"
+msgstr "Sluttdato"
+
+#. module: point_of_sale
+#: view:report.pos.order:0
+msgid "POS ordered created during current year"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_pos_form
+#: model:ir.ui.menu,name:point_of_sale.menu_point_ofsale view:pos.order:0
+msgid "PoS Orders"
+msgstr "POS Ordre"
+
+#. module: point_of_sale
+#: report:pos.details:0
+msgid "Sales total(Revenue)"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details:0 report:pos.details_summary:0
+msgid "Total paid"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.ui.menu,name:point_of_sale.menu_all_menu_all_register
+msgid "List of Cash Registers"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.maes_50cl_product_template
+msgid "Maes 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_report_transaction_pos
+msgid "transaction for the pos"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.pos.order:0
+msgid "Not Invoiced"
+msgstr "Ikke fakturert"
+
+#. module: point_of_sale
+#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
+msgid "March"
+msgstr "Mars"
+
+#. module: point_of_sale
+#: model:ir.actions.report.xml,name:point_of_sale.pos_users_product_re
+#: report:pos.user.product:0
+msgid "User's Product"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:641
+#, python-format
+msgid ""
+"You have to select a pricelist in the sale form !\n"
+"Please set one before choosing a product."
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.fanta_orange_2l_product_template
+msgid "Fanta Orange 2L"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.spa_33cl_product_template
+msgid "Spa Reine 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_pos_discount
+msgid "Add a Global Discount"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order.line,price_subtotal_incl:0
+msgid "Subtotal"
+msgstr "Subtotal"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.oetker_prosciutto_product_template
+msgid "Dr. Oetker Ristorante Prosciutto"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.lays_light_paprika_170g_product_template
+#: model:product.template,name:point_of_sale.lays_paprika_170g_product_template
+msgid "Lays Light Paprika 170g"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_light_lemon_50cl_product_template
+msgid "Coca-Cola Light Lemon 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: field:report.cash.register,balance_end_real:0
+msgid "Closing Balance"
+msgstr "Sluttsaldo"
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.act_pos_open_statement
+#: model:ir.model,name:point_of_sale.model_pos_close_statement
+msgid "Close Statements"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.croky_naturel_45g_product_template
+msgid "Croky Naturel 45g"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.product_product_putmoneyforchange1_product_template
+msgid "Cash Out"
+msgstr ""
+
+#. module: point_of_sale
+#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0
+msgid "Starting Balance"
+msgstr "Inngående saldo"
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_pos_category
+#: field:product.product,pos_categ_id:0
+msgid "PoS Category"
+msgstr "PoS Kategori"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.chimay_bleu_75cl_product_template
+msgid "Chimay Bleu 75cl"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.payment.report.user:0
+msgid "Payment By User"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.pos.order:0 field:report.pos.order,nbr:0
+msgid "# of Lines"
+msgstr "# linjer"
+
+#. module: point_of_sale
+#: help:account.journal,check_dtls:0
+msgid ""
+"This field authorize Validation of Cashbox without controlling the closing "
+"balance."
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_details
+#: model:ir.ui.menu,name:point_of_sale.menu_pos_details
+msgid "Sale Details"
+msgstr ""
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.pils
+msgid "Pils"
+msgstr ""
+
+#. module: point_of_sale
+#: report:all.closed.cashbox.of.the.day:0
+msgid "St.Name"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details_summary:0
+msgid "Sales total"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order.line:0
+msgid "Sum of subtotals"
+msgstr "Sum av subtotaler"
+
+#. module: point_of_sale
+#: field:pos.order,lines:0
+msgid "Order Lines"
+msgstr "Ordrelinjer"
+
+#. module: point_of_sale
+#: view:report.transaction.pos:0
+msgid "Total Transaction"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.chaudfontaine_petillante_50cl_product_template
+msgid "Chaudfontaine Petillante 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order.line,create_date:0
+msgid "Creation Date"
+msgstr "Opprettet, dato:"
+
+#. module: point_of_sale
+#: model:ir.actions.report.xml,name:point_of_sale.pos_sales_user_today
+msgid "Today's Sales"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.lays_naturel_300g_product_template
+msgid "Lays Naturel XXL 300g"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.sales.by.margin.pos:0 view:report.sales.by.margin.pos.month:0
+#: view:report.sales.by.user.pos:0 view:report.sales.by.user.pos.month:0
+#: view:report.transaction.pos:0
+msgid "POS "
+msgstr ""
+
+#. module: point_of_sale
+#: report:account.statement:0 report:pos.user.product:0
+msgid "Total :"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0 view:report.pos.order:0
+msgid "My Sales"
+msgstr "Mine salg"
+
+#. module: point_of_sale
+#: field:pos.order,pricelist_id:0
+msgid "Pricelist"
+msgstr "Prisliste"
+
+#. module: point_of_sale
+#: report:pos.details:0 report:pos.details_summary:0
+msgid "Total invoiced"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.pos.order:0 field:report.pos.order,product_qty:0
+msgid "# of Qty"
+msgstr "# av Ant"
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_report_sales_by_margin_pos_month
+msgid "Sales by margin monthly"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0 field:report.sales.by.margin.pos,date_order:0
+#: field:report.sales.by.margin.pos.month,date_order:0
+#: field:report.sales.by.user.pos,date_order:0
+#: field:report.sales.by.user.pos.month,date_order:0
+msgid "Order Date"
+msgstr "Ordredato"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.stella_33cl_product_template
+msgid "Stella Artois 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0
+msgid "Cash Analysis created during this year"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Draft Invoice"
+msgstr "Fakturakladd"
+
+#. module: point_of_sale
+#: constraint:account.bank.statement.line:0
+msgid ""
+"The amount of the voucher must be the same amount as the one on the "
+"statement line"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Fiscal Position Remark :"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.evian_2l_product_template
+msgid "Evian 2L"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
+msgid "September"
+msgstr "September"
+
+#. module: point_of_sale
+#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0
+msgid "Opening Date"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.lines:0
+msgid "Taxes :"
+msgstr "Mva"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_light_2l_product_template
+msgid "Coca-Cola Light 2L"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.oetker_funghi_product_template
+msgid "Dr. Oetker Ristorante Funghi"
+msgstr ""
+
+#. module: point_of_sale
+#: field:report.transaction.pos,disc:0
+msgid "Disc."
+msgstr "Rab."
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.lindemans_kriek_37,5cl_product_template
+msgid "Lindemans Kriek 37.5cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_zero_33cl_product_template
+msgid "Coca-Cola Zero 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "VAT :"
+msgstr "MVA:"
+
+#. module: point_of_sale
+#: view:pos.order.line:0
+msgid "POS Order lines"
+msgstr "POS Ordre linjer"
+
+#. module: point_of_sale
+#: view:pos.receipt:0
+msgid "Receipt :"
+msgstr "Kvittering"
+
+#. module: point_of_sale
+#: field:account.bank.statement.line,pos_statement_id:0
+#: field:pos.order,amount_return:0
+msgid "unknown"
+msgstr "ukjent"
+
+#. module: point_of_sale
+#: report:pos.details:0 field:report.transaction.pos,date_create:0
+msgid "Date"
+msgstr "Dato"
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_discount
+#: view:pos.discount:0
+msgid "Apply Discount"
+msgstr ""
+
+#. module: point_of_sale
+#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0
+#: view:pos.details:0 report:pos.sales.user:0 report:pos.sales.user.today:0
+#: report:pos.user.product:0 view:report.cash.register:0
+#: field:report.cash.register,user_id:0
+#: field:report.sales.by.margin.pos,user_id:0
+#: field:report.sales.by.margin.pos.month,user_id:0
+#: field:report.sales.by.user.pos,user_id:0
+#: field:report.sales.by.user.pos.month,user_id:0
+#: field:report.transaction.pos,user_id:0
+#: model:res.groups,name:point_of_sale.group_pos_user
+msgid "User"
+msgstr "Bruker"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_light_33cl_product_template
+msgid "Coca-Cola Light 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.perrier_1l_product_template
+msgid "Perrier 1L"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details:0 report:pos.details_summary:0
+msgid "Total discount"
+msgstr "Total rabatt"
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_pos_box_entries
+msgid "Pos Box Entries"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.boon_framboise_37,5cl_product_template
+msgid "Boon Framboise 37.5cl"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
+msgid "November"
+msgstr "November"
+
+#. module: point_of_sale
+#: field:pos.config.journal,code:0
+msgid "Code"
+msgstr "Engelsk"
+
+#. module: point_of_sale
+#: view:account.bank.statement:0 report:account.statement:0
+#: report:all.closed.cashbox.of.the.day:0
+#: model:ir.model,name:point_of_sale.model_account_journal
+#: field:pos.config.journal,journal_id:0 field:pos.order,sale_journal:0
+#: view:report.cash.register:0 field:report.cash.register,journal_id:0
+#: field:report.pos.order,journal_id:0
+msgid "Journal"
+msgstr "Journal"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.timmermans_faro_37,5cl_product_template
+msgid "Timmermans Faro 37.5cl"
+msgstr ""
+
+#. module: point_of_sale
+#: view:account.bank.statement:0 view:pos.order:0 field:pos.order,state:0
+#: report:pos.sales.user:0 report:pos.sales.user.today:0
+#: field:report.cash.register,state:0 field:report.pos.order,state:0
+msgid "State"
+msgstr ""
+
+#. module: point_of_sale
+#: field:report.transaction.pos,no_trans:0
+msgid "Number of Transaction"
+msgstr "Antall transaksjoner"
+
+#. module: point_of_sale
+#: view:pos.box.entries:0 view:pos.box.out:0 view:pos.confirm:0
+#: view:pos.make.payment:0 view:pos.open.statement:0 view:pos.receipt:0
+msgid "Cancel"
+msgstr "Avbryt"
+
+#. module: point_of_sale
+#: model:ir.actions.report.xml,name:point_of_sale.pos_details_summary
+msgid "Sales (summary)"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.timmermans_kriek_37,5cl_product_template
+msgid "Timmermans Kriek 37.5cl"
+msgstr ""
+
+#. module: point_of_sale
+#: field:account.journal,check_dtls:0
+msgid "Control Balance Before Closing"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_pos_order_line
+msgid "Lines of Point of Sale"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0 view:report.transaction.pos:0
+msgid "Amount total"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_new_bank_statement_all_tree
+msgid "Cash Registers"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details:0
+msgid "Users"
+msgstr ""
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.food
+msgid "Food"
+msgstr "Mat"
+
+#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: point_of_sale
+#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: report:pos.details:0 report:pos.invoice:0 report:pos.lines:0
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:30
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:69
+msgid "Price"
+msgstr "Pris"
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.ijsboerke_stracciatella_2,5l_product_template
+msgid "ijsboerke Stracciatella 2.5L"
+msgstr ""
+
+#. module: point_of_sale
+#: field:account.journal,journal_user:0
+msgid "PoS Payment Method"
+msgstr ""
+
+#. module: point_of_sale
+#: help:product.product,expense_pdt:0
+msgid ""
+"This is a product you can use to take cash from a statement for the point of "
+"sale backend, exemple: money lost, transfer to bank, etc."
+msgstr ""
+
+#. module: point_of_sale
+#: field:report.cash.register,date:0
+msgid "Create Date"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_regular_33cl_product_template
+msgid "Coca-Cola Regular 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:65
+#, python-format
+msgid "Unable to Delete !"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.lays_paprika_oven_150g_product_template
+msgid "Lays Paprika Oven Baked 150g"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details:0 report:pos.details_summary:0
+msgid "Start Period"
+msgstr ""
+
+#. module: point_of_sale
+#: report:account.statement:0 field:pos.category,complete_name:0
+#: field:pos.category,name:0 report:pos.sales.user:0
+#: report:pos.sales.user.today:0
+msgid "Name"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.spa_gazeuse_33cl_product_template
+msgid "Spa Barisart 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:284
+#, python-format
+msgid ""
+"There is no receivable account defined to make payment for the partner: "
+"\"%s\" (id:%d)"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.confirm:0
+msgid ""
+"Generate all sale journal entries for non invoiced orders linked to a closed "
+"cash register or statement."
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:293
+#: code:addons/point_of_sale/point_of_sale.py:472
+#: code:addons/point_of_sale/report/pos_invoice.py:46
+#: code:addons/point_of_sale/wizard/pos_box_entries.py:46
+#: code:addons/point_of_sale/wizard/pos_box_entries.py:100
+#: code:addons/point_of_sale/wizard/pos_box_entries.py:105
+#: code:addons/point_of_sale/wizard/pos_box_out.py:86
+#: code:addons/point_of_sale/wizard/pos_box_out.py:88
+#, python-format
+msgid "Error !"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details:0 report:pos.lines:0 report:pos.payment.report.user:0
+#: report:pos.user.product:0
+msgid "]"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_account_bank_statement
+msgid "Bank Statement"
+msgstr ""
+
+#. module: point_of_sale
+#: sql_constraint:account.journal:0
+msgid "The name of the journal must be unique per company !"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.lays_light_naturel_170g_product_template
+#: model:product.template,name:point_of_sale.lays_naturel_170g_product_template
+msgid "Lays Light Naturel 170g"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details:0 report:pos.details_summary:0 report:pos.lines:0
+#: report:pos.payment.report.user:0 report:pos.sales.user:0
+#: report:pos.sales.user.today:0 report:pos.user.product:0
+msgid "Print Date"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:282
+#, python-format
+msgid "There is no receivable account defined to make payment"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.open.statement:0
+msgid "Do you want to open cash registers?"
+msgstr ""
+
+#. module: point_of_sale
+#: help:pos.category,sequence:0
+msgid ""
+"Gives the sequence order when displaying a list of product categories."
+msgstr ""
+
+#. module: point_of_sale
+#: field:product.product,expense_pdt:0
+msgid "PoS Cash Output"
+msgstr ""
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.soda
+msgid "Soda"
+msgstr ""
+
+#. module: point_of_sale
+#: view:account.bank.statement:0 view:pos.order:0 view:report.cash.register:0
+#: view:report.pos.order:0
+msgid "Group By..."
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "POS Orders"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.report.xml,name:point_of_sale.all_closed_cashbox_of_the_day
+msgid "All Closed CashBox"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:640
+#, python-format
+msgid "No Pricelist !"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Update"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Base"
+msgstr ""
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.categ_others
+msgid "Others"
+msgstr ""
+
+#. module: point_of_sale
+#: view:product.product:0
+msgid "Point-of-Sale"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.evian_50cl_product_template
+msgid "Evian 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Notes"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Sale Order"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_light_lemon_2l_product_template
+msgid "Coca-Cola Light Lemon 2L"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details:0 report:pos.invoice:0 field:pos.order,amount_tax:0
+msgid "Taxes"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line_day
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line_form
+msgid "Sale line"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.lays_naturel_oven_150g_product_template
+msgid "Lays Naturel Oven Baked 150g"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_light_decaf_33cl_product_template
+msgid "Coca-Cola Light Decaf 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.product_normal_action
+#: model:ir.ui.menu,name:point_of_sale.menu_point_of_sale_product
+#: model:ir.ui.menu,name:point_of_sale.menu_pos_products
+msgid "Products"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.oetker_4formaggi_product_template
+msgid "Dr. Oetker Ristorante Quattro Formaggi"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_zero_1l_product_template
+msgid "Coca-Cola Zero 1L"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.sales.user:0 report:pos.sales.user.today:0
+#: field:report.pos.order,date:0
+msgid "Date Order"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.sales.by.margin.pos:0 view:report.sales.by.margin.pos.month:0
+#: view:report.sales.by.user.pos:0 view:report.sales.by.user.pos.month:0
+#: view:report.transaction.pos:0
+msgid "POS"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_product_output
+#: model:ir.ui.menu,name:point_of_sale.products_for_output_operations
+msgid "Products 'Put Money In'"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.croky_bolognaise_250g_product_template
+msgid "Croky Bolognaise 250g"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Extra Info"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Fax :"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order,user_id:0
+msgid "Connected Salesman"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_sale_all
+#: model:ir.ui.menu,name:point_of_sale.menu_point_ofsale_all
+msgid "All Sales Orders"
+msgstr ""
+
+#. module: point_of_sale
+#: help:product.product,income_pdt:0
+msgid ""
+"This is a product you can use to put cash into a statement for the point of "
+"sale backend."
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.receipt:0
+msgid "Print the Receipt of the Sale"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.make.payment,journal:0
+msgid "Payment Mode"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.lays_paprika_45g_product_template
+msgid "Lays Paprika 45g"
+msgstr ""
+
+#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: point_of_sale
+#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: report:pos.details:0 report:pos.payment.report.user:0
+#: report:pos.user.product:0 field:report.sales.by.margin.pos,qty:0
+#: field:report.sales.by.margin.pos.month,qty:0
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:32
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:59
+msgid "Qty"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0 view:report.pos.order:0
+msgid "Month -1"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_sale_user
+#: model:ir.model,name:point_of_sale.model_pos_sale_user
+#: view:pos.payment.report.user:0
+msgid "Sale by User"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.evian_1l_product_template
+msgid "Evian 1L"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.ui.menu,name:point_of_sale.menu_open_statement
+msgid "Open Cash Registers"
+msgstr ""
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.water
+msgid "Water"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0
+msgid "state"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
+msgid "July"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.lays_poivre_sel_oven_150g_product_template
+msgid "Lays Sel et Poivre Oven Baked 150g"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details:0 report:pos.details_summary:0
+msgid "Qty of product"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.chimay_rouge_33cl_product_template
+msgid "Chimay Rouge 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: field:report.pos.order,delay_validation:0
+msgid "Delay Validation"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order,nb_print:0
+msgid "Number of Print"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_pos_make_payment
+msgid "Point of Sale Payment"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_light_50cl_product_template
+msgid "Coca-Cola Light 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.jupiler_50cl_product_template
+msgid "Jupiler 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details:0 report:pos.details_summary:0
+msgid "End Period"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_light_lemon_33cl_product_template
+msgid "Coca-Cola Light Lemon 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: field:account.journal,auto_cash:0
+msgid "Automatic Opening"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.lays_ketchup_250g_product_template
+msgid "Lays Ketchup 250g"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.perrier_50cl_product_template
+msgid "Perrier 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.pos.order,state:0
+msgid "Synchronized"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0 field:report.cash.register,month:0
+#: view:report.pos.order:0 field:report.pos.order,month:0
+msgid "Month"
+msgstr ""
+
+#. module: point_of_sale
+#: report:account.statement:0
+msgid "Statement Name"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.pos.order:0
+msgid "Year of order date"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_new_bank_statement_tree
+#: field:pos.box.entries,journal_id:0 field:pos.box.out,journal_id:0
+msgid "Cash Register"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.close.statement:0
+msgid "Yes"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_pos_receipt
+msgid "Point of sale receipt"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_margin_pos_today
+msgid "Sales by User Daily margin"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.open.statement:0
+msgid "Open Registers"
+msgstr ""
+
+#. module: point_of_sale
+#: field:report.transaction.pos,journal_id:0
+msgid "Sales Journal"
+msgstr ""
+
+#. module: point_of_sale
+#: field:report.cash.register,balance_start:0
+msgid "Opening Balance"
+msgstr ""
+
+#. module: point_of_sale
+#: view:account.bank.statement:0 selection:report.pos.order,state:0
+msgid "Closed"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.oetker_vegetale_product_template
+msgid "Dr. Oetker Ristorante Vegetale"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.pos.order:0
+msgid "POS ordered created by today"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_zero_2l_product_template
+msgid "Coca-Cola Zero 2L"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order,amount_paid:0 selection:pos.order,state:0
+msgid "Paid"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_all_sales_lines
+msgid "All sales lines"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Discount"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0
+msgid "Cash Analysis created in last month"
+msgstr ""
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.beers
+msgid "Beers"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.close.statement:0
+msgid ""
+"OpenERP will close all cash registers he can close automatically without "
+"validation. He will also open all cash registers for which you have to "
+"control the ending belance before closing manually."
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0
+msgid "Cash Analysis created by today"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.cash.register,state:0
+msgid "Quotation"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.product_product_putmoneyforchange0_product_template
+msgid "Cash In"
+msgstr ""
+
+#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: point_of_sale
+#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: report:all.closed.cashbox.of.the.day:0 report:pos.invoice:0
+#: report:pos.lines:0 report:pos.payment.report.user:0
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:49
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:93
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:271
+msgid "Total:"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_report_sales_by_margin_pos
+msgid "Sales by margin"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_pos_config_journal
+msgid "Journal Configuration"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Statement lines"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.croky_paprika_45g_product_template
+msgid "Croky Paprika 45g"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Reprint"
+msgstr ""
+
+#. module: point_of_sale
+#: help:pos.order,user_id:0
+msgid ""
+"Person who uses the the cash register. It could be a reliever, a student or "
+"an interim employee."
+msgstr ""
+
+#. module: point_of_sale
+#: field:report.transaction.pos,invoice_id:0
+msgid "Nbr Invoice"
+msgstr ""
+
+#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: point_of_sale
+#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_receipt
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:231
+msgid "Receipt"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.open.statement:0
+msgid ""
+"The system will open all cash registers, so that you can start recording "
+"payments. We suggest you to control the opening balance of each register, "
+"using their CashBox tab."
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0 report:pos.lines:0 field:pos.order.line,price_unit:0
+#: report:pos.payment.report.user:0
+msgid "Unit Price"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Done"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.report.xml,name:point_of_sale.pos_invoice_report
+#: report:pos.invoice:0 view:pos.order:0 field:pos.order,invoice_id:0
+msgid "Invoice"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.rochefort_8_33cl_product_template
+msgid "Rochefort \"8\" 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: view:account.bank.statement:0 selection:report.cash.register,state:0
+msgid "Open"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order,name:0 field:pos.order.line,order_id:0
+msgid "Order Ref"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.timmermans_geuze_37,5cl_product_template
+msgid "Timmermans Geuze 37.5cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.lays_pickles_250g_product_template
+msgid "Lays Pickels 250g"
+msgstr ""
+
+#. module: point_of_sale
+#: field:report.sales.by.margin.pos,net_margin_per_qty:0
+#: field:report.sales.by.margin.pos.month,net_margin_per_qty:0
+msgid "Net margin per Qty"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_report_sales_by_user_pos_month
+msgid "Sales by user monthly"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.spa_et_fruit_50cl_product_template
+msgid "Spa et Fruit Orange 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.sales.by.margin.pos:0 view:report.sales.by.margin.pos.month:0
+msgid "Sales by User Margin"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/wizard/pos_payment.py:59
+#, python-format
+msgid "Paiement"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Taxes:"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.pepsi_max_33cl_product_template
+msgid "Pepsi Max 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_report_pos_order
+msgid "Point of Sale Orders Statistics"
+msgstr ""
+
+#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: point_of_sale
+#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: model:ir.model,name:point_of_sale.model_product_product
+#: report:pos.details:0 field:pos.order.line,product_id:0
+#: report:pos.payment.report.user:0 report:pos.user.product:0
+#: view:report.pos.order:0 field:report.pos.order,product_id:0
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:29
+msgid "Product"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.oetker_pollo_product_template
+msgid "Dr. Oetker Ristorante Pollo"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.report.xml,name:point_of_sale.pos_lines_report
+msgid "Pos Lines"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.grisette_cerise_25cl_product_template
+msgid "Grisette Cerise 25cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.chaudfontaine_33cl_product_template
+msgid "Chaudfontaine 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.oetker_margherita_product_template
+msgid "Dr. Oetker La Margherita"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.ui.menu,name:point_of_sale.menu_point_root
+msgid "PoS Backend"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0 selection:pos.order,state:0
+msgid "Posted"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order,date_order:0
+msgid "Date Ordered"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_payment_report_user
+#: model:ir.model,name:point_of_sale.model_pos_payment_report_user
+msgid "Sales lines by Users"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.pepsi_2l_product_template
+msgid "Pepsi 2L"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details:0
+msgid "Order"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:472
+#, python-format
+msgid "There is no income account defined for this product: \"%s\" (id:%d)"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.details:0
+msgid "POS Details"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.details,user_ids:0
+msgid "Salesmen"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_report_cash_register
+#: view:report.cash.register:0
+msgid "Point of Sale Cash Register Analysis"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.lines:0
+msgid "Net Total :"
+msgstr ""
+
+#. module: point_of_sale
+#: model:res.groups,name:point_of_sale.group_pos_manager
+msgid "Manager"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.details,date_start:0 field:pos.sale.user,date_start:0
+msgid "Date Start"
+msgstr ""
+
+#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: point_of_sale
+#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: field:pos.order,amount_total:0 report:pos.payment.report.user:0
+#: field:report.sales.by.user.pos,amount:0
+#: field:report.sales.by.user.pos.month,amount:0
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:33
+msgid "Total"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.sale.user:0
+msgid "Sale By User"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_open_statement
+msgid "Open Cash Register"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.lindemans_pecheresse_37,5cl_product_template
+msgid "Lindemans Pecheresse 37.5cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.pepsi_33cl_product_template
+msgid "Pepsi 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: report:account.statement:0
+#: model:ir.actions.report.xml,name:point_of_sale.account_statement
+msgid "Statement"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_payment_report
+#: model:ir.model,name:point_of_sale.model_pos_payment_report
+#: view:pos.payment.report:0
+msgid "Payment Report"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.fanta_orange_25cl_product_template
+msgid "Fanta Orange 25cl"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.confirm:0
+msgid "Generate Journal Entries"
+msgstr ""
+
+#. module: point_of_sale
+#: report:account.statement:0 report:all.closed.cashbox.of.the.day:0
+#: report:pos.details:0 report:pos.details_summary:0 report:pos.lines:0
+#: field:pos.order,company_id:0 field:pos.order.line,company_id:0
+#: report:pos.payment.report.user:0 report:pos.sales.user:0
+#: report:pos.sales.user.today:0 report:pos.user.product:0
+#: field:report.pos.order,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Invoice Date"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.box.entries,name:0
+msgid "Reason"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.orangina_33cl_product_template
+msgid "Orangina 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_product_input
+#: model:ir.ui.menu,name:point_of_sale.products_for_input_operations
+msgid "Products 'Take Money Out'"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.chimay_bleu_33cl_product_template
+msgid "Chimay Bleu 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_account_journal_form
+#: model:ir.ui.menu,name:point_of_sale.menu_action_account_journal_form_open
+msgid "Payment Methods"
+msgstr ""
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.chips
+msgid "Chips"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.oetker_spinaci_product_template
+msgid "Dr. Oetker Ristorante Spinaci"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:293
+#: code:addons/point_of_sale/wizard/pos_box_entries.py:100
+#: code:addons/point_of_sale/wizard/pos_box_out.py:88
+#, python-format
+msgid "You have to open at least one cashbox"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.report.xml,name:point_of_sale.pos_payment_report_user
+msgid "Today's Payment By User"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_box_entries
+#: model:ir.ui.menu,name:point_of_sale.menu_wizard_enter_jrnl
+msgid "Put Money In"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:238
+#: code:addons/point_of_sale/point_of_sale.py:253
+#, python-format
+msgid "Error!"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.lines:0
+msgid "No. Of Articles"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.ijsboerke_vanille_2,5l_product_template
+msgid "ijsboerke Vanille 2.5L"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:pos.order,state:0 selection:report.pos.order,state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.user.product:0
+msgid "Ending Date"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.orangina_1,5l_product_template
+msgid "Orangina 1.5L"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order,picking_id:0
+msgid "Picking"
+msgstr ""
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.ice_cream
+msgid "Ice Cream"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order,shop_id:0 field:report.pos.order,shop_id:0
+msgid "Shop"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_account_bank_statement_line
+msgid "Bank Statement Line"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.belle_vue_kriek_25cl_product_template
+msgid "Belle-Vue Kriek 25cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.chaudfontaine_petillante_1,5l_product_template
+msgid "Chaudfontaine Petillante 1.5l"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.sales.by.user.pos:0 view:report.sales.by.user.pos.month:0
+#: view:report.transaction.pos:0
+msgid "POS Report"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.chaudfontaine_1,5l_product_template
+msgid "Chaudfontaine 1.5l"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_close_statement
+msgid "Close Cash Register"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:65
+#, python-format
+msgid "In order to delete a sale, it must be new or cancelled."
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_regular_50cl_product_template
+msgid "Coca-Cola Regular 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.confirm:0
+msgid "Generate Entries"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.box.entries,product_id:0 field:pos.box.out,product_id:0
+msgid "Operation"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order,account_move:0
+msgid "Journal Entry"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.cash.register,state:0
+msgid "Confirmed"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Cancelled Invoice"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0
+msgid "Confirm"
+msgstr ""
+
+#. module: point_of_sale
+#: help:account.journal,auto_cash:0
+msgid ""
+"This field authorize the automatic creation of the cashbox, without control "
+"of the initial balance."
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_zero_50cl_product_template
+msgid "Coca-Cola Zero 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.oetker_tonno_product_template
+msgid "Dr. Oetker Ristorante Tonno"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Supplier Invoice"
+msgstr ""
+
+#. module: point_of_sale
+#: constraint:account.bank.statement:0
+msgid "The journal and period chosen have to belong to the same company."
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0 selection:pos.order,state:0
+#: selection:report.pos.order,state:0
+msgid "New"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:238
+#, python-format
+msgid "In order to set to draft a sale, it must be cancelled."
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.fanta_zero_orange_33cl_product_template
+msgid "Fanta Zero Orange 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.pos.order:0
+msgid "Day of order date"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.ui.menu,name:point_of_sale.menu_point_rep
+msgid "Reporting"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.maes_33cl_product_template
+msgid "Maes 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.box.entries:0
+msgid "Put Money"
+msgstr ""
+
+#. module: point_of_sale
+#: sql_constraint:account.journal:0
+msgid "The code of the journal must be unique per company !"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.ui.menu,name:point_of_sale.menu_point_config_product
+msgid "Configuration"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.orval_33cl_product_template
+msgid "Orval 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_regular_1l_product_template
+msgid "Coca-Cola Regular 1L"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:253
+#, python-format
+msgid "Unable to cancel the picking."
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.pos.order:0
+msgid "POS ordered created during current month"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.pos.order:0
+msgid "POS ordered created last month"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_pos_invoice
+msgid "Invoices"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
+msgid "December"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.spa_gazeuse_1,5l_product_template
+msgid "Spa Barisart 1.5l"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:329 view:pos.order:0
+#, python-format
+msgid "Return Products"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.jupiler_33cl_product_template
+msgid "Jupiler 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.ijsboerke_chocolat_2,5l_product_template
+msgid "ijsboerke Chocolat 2.5L"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.box.out:0
+msgid "Take Money"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_pos_details
+msgid "Sales Details"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/wizard/pos_close_statement.py:50
+#, python-format
+msgid "Message"
+msgstr ""
+
+#. module: point_of_sale
+#: view:account.journal:0 model:ir.model,name:point_of_sale.model_pos_order
+#: model:ir.ui.menu,name:point_of_sale.menu_point_root_touchscreen
+#: view:product.product:0
+msgid "Point of Sale"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0 field:pos.payment.report.user,user_id:0
+#: field:pos.sale.user,user_id:0 field:pos.sales.user.today,user_id:0
+#: view:report.pos.order:0 field:report.pos.order,user_id:0
+msgid "Salesman"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details:0 view:pos.order:0 selection:pos.order,state:0
+#: view:report.pos.order:0 selection:report.pos.order,state:0
+msgid "Invoiced"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.close.statement:0
+msgid "No"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.spa_gazeuse_50cl_product_template
+msgid "Spa Barisart 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.special_beers
+msgid "Special Beers"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order.line,notice:0
+msgid "Discount Notice"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Re-Print"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0
+msgid "Draft"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.fanta_zero_orange_1,5l_product_template
+msgid "Fanta Zero Orange 1.5L"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "PRO-FORMA"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:358
+#, python-format
+msgid "Please provide a partner for the sale."
+msgstr ""
+
+#. module: point_of_sale
+#: model:pos.category,name:point_of_sale.fruity_beers
+msgid "Fruity Beers"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.ijsboerke_dame_blanche_2,5l_product_template
+msgid "ijsboerke Dame Blanche 2.5L"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.ijsboerke_moka_2,5l_product_template
+msgid "ijsboerke Moka 2.5L"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Search Sales Order"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,help:point_of_sale.action_account_journal_form
+msgid ""
+"Payment methods are defined by accounting journals having the field Payment "
+"Method checked."
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree
+#: model:ir.model,name:point_of_sale.model_report_sales_by_user_pos
+msgid "Sales by user"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.oetker_hawaii_product_template
+msgid "Dr. Oetker Ristorante Hawaii"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.receipt:0
+msgid "Print Receipt"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
+msgid "January"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order.line:0
+msgid "POS Orders lines"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.chaudfontaine_petillante_33cl_product_template
+msgid "Chaudfontaine Petillante 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,help:point_of_sale.product_normal_action
+msgid ""
+"You must define a Product for everything you buy or sell. Products can be "
+"raw materials, stockable products, consumables or services. The Product form "
+"contains detailed information about your products related to procurement "
+"logistics, sales price, product category, suppliers and so on."
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.pepsi_max_2l_product_template
+msgid "Pepsi Max 2L"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/point_of_sale.py:358
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.lays_paprika_300g_product_template
+msgid "Lays Paprika XXL 300g"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.close.statement:0
+msgid "Do you want to close your cash registers?"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Refund"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/report/pos_invoice.py:46
+#, python-format
+msgid "Please create an invoice for this sale."
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.oetker_mozzarella_product_template
+msgid "Dr. Oetker Ristorante Mozzarella"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/wizard/pos_close_statement.py:66
+#: model:ir.ui.menu,name:point_of_sale.menu_close_statement
+#: view:pos.close.statement:0
+#, python-format
+msgid "Close Cash Registers"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.details:0 report:pos.payment.report.user:0
+msgid "Disc(%)"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "General Information"
+msgstr ""
+
+#. #-#-#-#-# point_of_sale.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: point_of_sale
+#. #-#-#-#-# point_of_sale.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: view:pos.details:0 view:pos.discount:0 view:pos.payment.report:0
+#: view:pos.payment.report.user:0 view:pos.sale.user:0
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:13
+msgid "Close"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Order lines"
+msgstr ""
+
+#. module: point_of_sale
+#: view:account.journal:0
+msgid "Extended Configuration"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order.line,price_subtotal:0
+msgid "Subtotal w/o Tax"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.spa_50cl_product_template
+msgid "Spa Reine 50cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.leffe_blonde_33cl_product_template
+msgid "Leffe Blonde 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_payment
+msgid "Pyament Report"
+msgstr ""
+
+#. module: point_of_sale
+#: field:report.transaction.pos,jl_id:0
+msgid "Cash Journals"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.sales.user.today:0
+msgid "Today's Sales By User"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Customer Code"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/wizard/pos_box_out.py:86
+#, python-format
+msgid "please check that account is set to %s"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.config.journal,name:0 report:pos.invoice:0 report:pos.lines:0
+msgid "Description"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
+msgid "May"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.lines:0
+msgid "Sales lines"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0
+msgid "Yesterday"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order,note:0
+msgid "Internal Notes"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.coca_zero_decaf_33cl_product_template
+msgid "Coca-Cola Zero Decaf 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.box.out:0
+msgid "Describe why you take money from the cash register:"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_order_all
+#: model:ir.ui.menu,name:point_of_sale.menu_report_pos_order_all
+#: view:report.pos.order:0
+msgid "Point of Sale Analysis"
+msgstr ""
+
+#. module: point_of_sale
+#: view:pos.order:0 field:pos.order,partner_id:0 view:report.pos.order:0
+msgid "Customer"
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
+msgid "February"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0
+msgid " Today "
+msgstr ""
+
+#. module: point_of_sale
+#: selection:report.cash.register,month:0 selection:report.pos.order,month:0
+msgid "April"
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.order,statement_ids:0
+msgid "Payments"
+msgstr ""
+
+#. module: point_of_sale
+#: report:pos.invoice:0
+msgid "Supplier Refund"
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_margin_pos_month
+msgid "Sales by User Monthly margin"
+msgstr ""
+
+#. module: point_of_sale
+#: model:product.template,name:point_of_sale.leffe_9_33cl_product_template
+msgid "Leffe Brune \"9\" 33cl"
+msgstr ""
+
+#. module: point_of_sale
+#: help:account.journal,journal_user:0
+msgid ""
+"Check this box if this journal define a payment method that can be used in "
+"point of sales."
+msgstr ""
+
+#. module: point_of_sale
+#: field:pos.category,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: point_of_sale
+#: code:addons/point_of_sale/wizard/pos_return.py:316 view:pos.make.payment:0
+#, python-format
+msgid "Make Payment"
+msgstr ""
+
+#. module: point_of_sale
+#: constraint:pos.category:0
+msgid "Error ! You cannot create recursive categories."
+msgstr ""
+
+#. module: point_of_sale
+#: model:ir.model,name:point_of_sale.model_pos_sales_user_today
+msgid "Sales User Today"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.pos.order:0
+msgid "Month of order date"
+msgstr ""
+
+#. module: point_of_sale
+#: field:product.product,income_pdt:0
+msgid "PoS Cash Input"
+msgstr ""
+
+#. module: point_of_sale
+#: view:report.cash.register:0 field:report.cash.register,year:0
+#: view:report.pos.order:0 field:report.pos.order,year:0
+msgid "Year"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:31
+msgid "Disc (%)"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:41
+msgid "Subtotal:"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:45
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:268
+msgid "Tax:"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:64
+msgid "Disc"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:71
+msgid "+/-"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:105
+msgid "Paid:"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:113
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:288
+msgid "Change:"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:124
+msgid "Back to Products"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:127
+msgid "Validate"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:140
+msgid "pending orders"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:145
+msgid ""
+"There are pending operations that could not be saved into the database, are "
+"you sure you want to exit?"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:236
+msgid "Print"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:238
+msgid "Next Order"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:248
+msgid "Phone:"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:249
+msgid "User:"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:250
+msgid "Shop:"
+msgstr ""
diff --git a/addons/point_of_sale/wizard/pos_session_opening.py b/addons/point_of_sale/wizard/pos_session_opening.py
index d3b6ea28b17..4364998b6a4 100644
--- a/addons/point_of_sale/wizard/pos_session_opening.py
+++ b/addons/point_of_sale/wizard/pos_session_opening.py
@@ -15,6 +15,10 @@ class pos_session_opening(osv.osv_memory):
'pos_state' : fields.selection(pos_session.POS_SESSION_STATE,
'Session State', readonly=True),
'show_config' : fields.boolean('Show Config', readonly=True),
+ 'pos_session_name' : fields.related('pos_session_id', 'name',
+ type='char', size=64, readonly=True),
+ 'pos_session_username' : fields.related('pos_session_id', 'user_id', 'name',
+ type='char', size=64, readonly=True)
}
def open_ui(self, cr, uid, ids, context=None):
@@ -66,7 +70,9 @@ class pos_session_opening(osv.osv_memory):
def on_change_config(self, cr, uid, ids, config_id, context=None):
result = {
'pos_session_id': False,
- 'pos_state': False
+ 'pos_state': False,
+ 'pos_session_username' : False,
+ 'pos_session_name' : False,
}
if not config_id:
return {'value': result}
@@ -76,8 +82,11 @@ class pos_session_opening(osv.osv_memory):
('config_id', '=', config_id),
], context=context)
if session_ids:
- result['pos_state'] = proxy.browse(cr, uid, session_ids[0], context=context).state
- result['pos_session_id'] = session_ids[0]
+ session = proxy.browse(cr, uid, session_ids[0], context=context)
+ result['pos_state'] = session.state
+ result['pos_session_id'] = session.id
+ result['pos_session_name'] = session.name
+ result['pos_session_username'] = session.user_id.name
return {'value' : result}
def default_get(self, cr, uid, fieldnames, context=None):
diff --git a/addons/point_of_sale/wizard/pos_session_opening.xml b/addons/point_of_sale/wizard/pos_session_opening.xml
index 948f1db8c61..9279d5fce45 100644
--- a/addons/point_of_sale/wizard/pos_session_opening.xml
+++ b/addons/point_of_sale/wizard/pos_session_opening.xml
@@ -44,6 +44,15 @@
interface.
</p>
</div>
+ <div attrs="{'invisible' : [('pos_state', '!=', 'opened')]}" class="oe_view_nocontent">
+ <p class="oe_view_nocontent_create">
+ Click to continue the session.
+ </p>
+ <p>
+ The session <field name="pos_session_name" class="oe_inline" /> (<field name="pos_session_username" class="oe_inline" />) is "<b><field name="pos_state" class="oe_inline" /></b>"<br/>
+ You can continue sales from the touchscreen interface by clicking on "<b>Settings</b>" or close the cash register session ?
+ </p>
+ </div>
</form>
</field>
diff --git a/addons/procurement/procurement_view.xml b/addons/procurement/procurement_view.xml
index f2a8dc98cb0..432ff13aaa5 100644
--- a/addons/procurement/procurement_view.xml
+++ b/addons/procurement/procurement_view.xml
@@ -261,12 +261,12 @@
</record>
<act_window
- context="{'search_default_warehouse_id': active_id, 'default_warehouse_id': active_id}"
- id="act_stock_warehouse_2_stock_warehouse_orderpoint"
- name="Reordering Rules"
- res_model="stock.warehouse.orderpoint"
- src_model="stock.warehouse"
- groups="stock.group_stock_user"/>
+ context="{'search_default_warehouse_id': active_id, 'default_warehouse_id': active_id}"
+ id="act_stock_warehouse_2_stock_warehouse_orderpoint"
+ name="Reordering Rules"
+ res_model="stock.warehouse.orderpoint"
+ src_model="stock.warehouse"
+ groups="stock.group_stock_user"/>
<act_window
context="{'product_uom': locals().has_key('uom_id') and uom_id, 'default_procurement_id': active_id}"
@@ -283,23 +283,11 @@
<menuitem id="menu_stock_procurement" name="Automatic Procurements" parent="stock.menu_stock_configuration" sequence="5"/>
<menuitem action="action_orderpoint_form" id="menu_stock_order_points" parent="stock.menu_stock_configuration" sequence="10"/>
- <record id="product_normal_form_view" model="ir.ui.view">
- <field name="name">product.normal.form.orderpoint.inherit</field>
- <field name="model">product.product</field>
- <field name="inherit_id" ref="stock.view_normal_procurement_locations_form"/>
- <field name="arch" type="xml">
- <page string="Procurement &amp; Locations" position="inside">
- <separator string="Minimum Stock Rules"/>
- <field name="orderpoint_ids" widget="one2many_list" mode="tree" context="{'default_product_id': active_id}">
- <tree string="Reordering Rules">
- <field name="name"/>
- <field name="warehouse_id"/>
- <field name="product_min_qty"/>
- <field name="product_max_qty"/>
- </tree>
- </field>
- </page>
- </field>
+
+ <record model="ir.actions.act_window" id="product_open_orderpoint">
+ <field name="context">{'default_product_id': active_id, 'search_default_product_id': active_id}</field>
+ <field name="name">Orderpoints</field>
+ <field name="res_model">stock.warehouse.orderpoint</field>
</record>
<record model="ir.ui.view" id="product_form_view_procurement_button">
@@ -307,10 +295,9 @@
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="arch" type="xml">
- <xpath expr="//field[@name='image_medium']" position="after">
- <div class='oe_right oe_button_box'>
- <button string="Procurement Request" name="%(act_make_procurement)d" type="action"/>
- </div>
+ <xpath expr="//div[@name='buttons']" position="inside">
+ <button string="Request Procurement" name="%(act_make_procurement)d" type="action"/>
+ <button string="Orderpoints" name="%(product_open_orderpoint)d" type="action"/>
</xpath>
</field>
</record>
diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml
index 17b4a7ecc68..d341b5883d6 100644
--- a/addons/product/product_view.xml
+++ b/addons/product/product_view.xml
@@ -72,6 +72,8 @@
<label for="categ_id" class="oe_edit_only"/>
<h2><field name="categ_id"/></h2>
</div>
+ <div class="oe_right oe_button_box" name="buttons">
+ </div>
<notebook>
<page string="Information">
<group>
diff --git a/addons/project/project.py b/addons/project/project.py
index 728053fb9e7..42fbe56036d 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -26,6 +26,7 @@ from osv import fields, osv
from openerp.addons.resource.faces import task as Task
import time
from tools.translate import _
+from openerp import SUPERUSER_ID
_TASK_STATE = [('draft', 'New'),('open', 'In Progress'),('pending', 'Pending'), ('done', 'Done'), ('cancelled', 'Cancelled')]
@@ -853,7 +854,7 @@ class task(base_stage, osv.osv):
if context is None: context = {}
# read uom as admin to avoid access rights issues, e.g. for portal/share users,
# this should be safe (no context passed to avoid side-effects)
- obj_tm = users_obj.browse(cr, 1, uid, context=context).company_id.project_time_mode_id
+ obj_tm = users_obj.browse(cr, SUPERUSER_ID, uid, context=context).company_id.project_time_mode_id
tm = obj_tm and obj_tm.name or 'Hours'
res = super(task, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu=submenu)
diff --git a/addons/sale_crm/i18n/zh_CN.po b/addons/sale_crm/i18n/zh_CN.po
index bbae3770541..6678287c01e 100644
--- a/addons/sale_crm/i18n/zh_CN.po
+++ b/addons/sale_crm/i18n/zh_CN.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: 2012-02-08 00:37+0000\n"
-"PO-Revision-Date: 2012-08-18 17:40+0000\n"
-"Last-Translator: Heling Yao <Unknown>\n"
+"PO-Revision-Date: 2012-08-31 14:59+0000\n"
+"Last-Translator: ccdos <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: 2012-08-28 06:07+0000\n"
-"X-Generator: Launchpad (build 15864)\n"
+"X-Launchpad-Export-Date: 2012-09-01 04:55+0000\n"
+"X-Generator: Launchpad (build 15890)\n"
#. module: sale_crm
#: field:sale.order,categ_id:0
msgid "Category"
-msgstr ""
+msgstr "分类"
#. module: sale_crm
#: sql_constraint:sale.order:0
msgid "Order Reference must be unique per Company!"
-msgstr ""
+msgstr "订单号必须在一个公司范围内唯一"
#. module: sale_crm
#: code:addons/sale_crm/wizard/crm_make_sale.py:112
#, python-format
msgid "Converted to Sales Quotation(%s)."
-msgstr ""
+msgstr "转换为销售报价单(%s)。"
#. module: sale_crm
#: view:crm.make.sale:0
@@ -73,7 +73,7 @@ msgstr "在生成销售订单后检查是否关闭商机。"
#. module: sale_crm
#: view:board.board:0
msgid "My Opportunities"
-msgstr ""
+msgstr "我的商机"
#. module: sale_crm
#: view:crm.lead:0
@@ -104,13 +104,13 @@ msgstr "关闭商机"
#. module: sale_crm
#: view:board.board:0
msgid "My Planned Revenues by Stage"
-msgstr ""
+msgstr "这阶段我的计划收入"
#. module: sale_crm
#: code:addons/sale_crm/wizard/crm_make_sale.py:110
#, python-format
msgid "Opportunity '%s' is converted to Quotation."
-msgstr ""
+msgstr "商机 '%s' 被转换为报价单"
#. module: sale_crm
#: view:sale.order:0
diff --git a/addons/sale_mrp/i18n/zh_CN.po b/addons/sale_mrp/i18n/zh_CN.po
index 86105255a19..bb04533ef97 100644
--- a/addons/sale_mrp/i18n/zh_CN.po
+++ b/addons/sale_mrp/i18n/zh_CN.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
-"PO-Revision-Date: 2011-06-28 05:04+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"PO-Revision-Date: 2012-08-31 14:59+0000\n"
+"Last-Translator: ccdos <Unknown>\n"
"Language-Team: Chinese (Simplified) <zh_CN@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: 2012-08-28 06:34+0000\n"
-"X-Generator: Launchpad (build 15864)\n"
+"X-Launchpad-Export-Date: 2012-09-01 04:55+0000\n"
+"X-Generator: Launchpad (build 15890)\n"
#. module: sale_mrp
#: help:mrp.production,sale_ref:0
@@ -40,12 +40,12 @@ msgstr "销售名称"
#. module: sale_mrp
#: sql_constraint:mrp.production:0
msgid "Reference must be unique per Company!"
-msgstr ""
+msgstr "编号必须在公司内唯一!"
#. module: sale_mrp
#: constraint:mrp.production:0
msgid "Order quantity cannot be negative or zero!"
-msgstr ""
+msgstr "订单数量不能是负数或者0!"
#. module: sale_mrp
#: help:mrp.production,sale_name:0
diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py
index e41f6828351..a0489c9c017 100644
--- a/addons/share/wizard/share_wizard.py
+++ b/addons/share/wizard/share_wizard.py
@@ -23,6 +23,7 @@ import random
import time
from urllib import quote_plus
import uuid
+from openerp import SUPERUSER_ID
import simplejson
@@ -545,7 +546,7 @@ class share_wizard(osv.TransientModel):
_logger.debug("Copying rule %s (%s) on model %s with domain: %s", rule.name, rule.id, model.model, rule.domain_force)
else:
# otherwise we can simply link the rule to keep it dynamic
- rule_obj.write(cr, 1, [rule.id], {
+ rule_obj.write(cr, SUPERUSER_ID, [rule.id], {
'groups': [(4,group_id)]
})
_logger.debug("Linking rule %s (%s) on model %s with domain: %s", rule.name, rule.id, model.model, rule.domain_force)