Description
@@ -218,7 +218,7 @@
[[ repeatIn(o.invoice_line,'l') ]]
-
+
[[ l.name ]]
@@ -315,10 +315,10 @@
-
+
- Tax
+ Tax [[ o.tax_line==[] and removeParentNode('blockTable') ]]
Base
@@ -335,7 +335,7 @@
[[ repeatIn(o.tax_line,'t') ]]
-
+
[[ t.name ]]
@@ -354,11 +354,14 @@
+
+
+
[[ (o.comment and format(o.comment )) or removeParentNode('para') ]]
- [[ (o.payment_term.note and format(o.payment_term and o.payment_term.note)) or removeParentNode('para') ]]
+ [[ (o.payment_term and o.payment_term.note and format(o.payment_term and o.payment_term.note)) or removeParentNode('para') ]]
@@ -368,7 +371,7 @@
Fiscal Position Remark :
- [[ (o.fiscal_position.note and format(o.fiscal_position and o.fiscal_position.note)) or removeParentNode('blockTable') ]]
+ [[ (o.fiscal_position and o.fiscal_position.note and format(o.fiscal_position.note)) or removeParentNode('blockTable') ]]
diff --git a/addons/account/report/account_tax_report.py b/addons/account/report/account_tax_report.py
index d3fb791bfaa..d968ee9029e 100644
--- a/addons/account/report/account_tax_report.py
+++ b/addons/account/report/account_tax_report.py
@@ -37,9 +37,26 @@ class tax_report(rml_parse.rml_parse):
'get_company': self._get_company,
'get_currency': self._get_currency,
'get_lines': self._get_lines,
+ 'get_years': self.get_years,
})
+ def get_years(self,form):
+ res={}
+ fiscal_year_name = self.pool.get('account.fiscalyear').name_get(self.cr,self.uid,form['fiscalyear'])
+
+ if fiscal_year_name:
+ res['fname'] = fiscal_year_name[0][1]
+ res['periods'] = ''
+ if form['periods']:
+ periods_l = self.pool.get('account.period').read(self.cr, self.uid, form['periods'], ['name'])
+ for period in periods_l:
+ if res['periods']=='':
+ res['periods'] = period['name']
+ else:
+ res['periods'] += ", "+ period['name']
+ return res
+
def _get_lines(self, based_on, period_list, company_id=False, parent=False, level=0, context={}):
res = self._get_codes(based_on, company_id, parent, level, period_list, context=context)
diff --git a/addons/account/report/account_tax_report.rml b/addons/account/report/account_tax_report.rml
index 2434437e803..47df92cc3bc 100644
--- a/addons/account/report/account_tax_report.rml
+++ b/addons/account/report/account_tax_report.rml
@@ -105,6 +105,16 @@
Tax Statement
+
+
+
+ Year : [[ get_years(data['form'])['fname'] ]]
+
+
+ Periods : [[ get_years(data['form'])['periods'] or removeParentNode('tr')]]
+
+
+
Tax Name
diff --git a/addons/account/security/ir.model.access.csv b/addons/account/security/ir.model.access.csv
index 56e75a3c036..124593ff8f5 100644
--- a/addons/account/security/ir.model.access.csv
+++ b/addons/account/security/ir.model.access.csv
@@ -31,7 +31,7 @@
"access_account_chart_template","account.chart.template","model_account_chart_template","account.group_account_manager",1,1,1,1
"access_account_tax_template","account.tax.template","model_account_tax_template","account.group_account_manager",1,1,1,1
"access_account_bank_statement","account.bank.statement","model_account_bank_statement","account.group_account_user",1,0,0,0
-"access_account_bank_statement_line","account.bank.statement.line","model_account_bank_statement_line","account.group_account_user",1,0,0,0
+"access_account_bank_statement_line","account.bank.statement.line","model_account_bank_statement_line","account.group_account_user",1,1,1,1
"access_account_analytic_line","account.analytic.line","model_account_analytic_line","account.group_account_user",1,1,1,1
"access_account_analytic_line_manager","account.analytic.line manager","model_account_analytic_line","account.group_account_manager",1,0,0,0
"access_account_analytic_account","account.analytic.account","analytic.model_account_analytic_account","base.group_user",1,0,0,0
@@ -39,7 +39,7 @@
"access_account_invoice_uinvoice","account.invoice","model_account_invoice","account.group_account_invoice",1,1,1,1
"access_account_invoice_line_uinvoice","account.invoice.line","model_account_invoice_line","account.group_account_invoice",1,1,1,1
"access_account_invoice_tax_uinvoice","account.invoice.tax","model_account_invoice_tax","account.group_account_invoice",1,1,1,1
-"access_account_move_uinvoice","account.move","model_account_move","account.group_account_invoice",1,0,0,0
+"access_account_move_uinvoice","account.move","model_account_move","account.group_account_invoice",1,1,1,1
"access_account_move_line_uinvoice","account.move.line invoice","model_account_move_line","account.group_account_invoice",1,1,1,1
"access_account_move_reconcile_uinvoice","account.move.reconcile","model_account_move_reconcile","account.group_account_invoice",1,1,1,1
"access_account_journal_period_uinvoice","account.journal.period","model_account_journal_period","account.group_account_invoice",1,1,1,1
@@ -94,47 +94,12 @@
"access_account_move_line_manager","account.move.line manager","model_account_move_line","account.group_account_manager",1,0,0,0
"access_account_move_manager","account.move manager","model_account_move","account.group_account_manager",1,0,0,0
"access_account_invoice_manager","account.invoice manager","model_account_invoice","account.group_account_manager",1,0,0,0
-"access_account_bank_statement_manager","account.bank.statement manager","model_account_bank_statement","account.group_account_manager",1,0,0,0
+"access_account_bank_statement_manager","account.bank.statement manager","model_account_bank_statement","account.group_account_manager",1,1,1,1
"access_account_entries_report_manager","account.entries.report","model_account_entries_report","account.group_account_manager",1,1,1,1
"access_analytic_entries_report_manager","analytic.entries.report","model_analytic_entries_report","account.group_account_manager",1,0,0,0
-"access_account_cashbox_line","account.cashbox.line","model_account_cashbox_line","account.group_account_manager",1,0,0,0
-"access_account_cashbox_line","account.cashbox.line","model_account_cashbox_line","account.group_account_user",1,0,0,0
-"access_account_move_line_system","account.move.line system","model_account_move_line","base.group_system",1,0,0,0
-"access_account_invoice_system","account.invoice system","model_account_invoice","base.group_system",1,0,0,0
-"access_account_bank_statement_system","account.bank.statement system","model_account_bank_statement","base.group_system",1,0,0,0
-"access_account_move_system","account.move system","model_account_move","base.group_system",1,0,0,0
-"access_account_analytic_line_system","account.analytic.line system","model_account_analytic_line","base.group_system",1,0,0,0
-"access_account_tax_code_system","account.tax.code system","model_account_tax_code","base.group_system",1,1,1,1
-"access_account_journal_system","account.journal system","model_account_journal","base.group_system",1,1,1,1
-"access_account_period_system","account.period system","model_account_period","base.group_system",1,1,1,1
-"access_account_journal_view_system","account.journal.view system","model_account_journal_view","base.group_system",1,1,1,1
-"access_account_account_type_system","account.account.type system","model_account_account_type","base.group_system",1,1,1,1
-"access_account_analytic_journal_system","account.analytic.journal system","model_account_analytic_journal","base.group_system",1,1,1,1
-"access_account_fiscalyear_system","account.fiscalyear system","model_account_fiscalyear","base.group_system",1,1,1,1
-"access_account_tax_system","account.tax system","model_account_tax","base.group_system",1,1,1,1
-"access_account_model_system","account.model system","model_account_model","base.group_system",1,1,1,1
-"access_account_subscription_system","account.subscription system","model_account_subscription","base.group_system",1,1,1,1
-"access_account_journal_column_system","account.journal.column system","model_account_journal_column","base.group_system",1,1,1,1
-"access_account_invoice_report_system","account.invoice.report system","model_account_invoice_report","base.group_system",1,0,0,0
-"access_account_entries_report_system","account.entries.report system","model_account_entries_report","base.group_system",1,0,0,0
-"access_analytic_entries_report_system","analytic.entries.report system","model_analytic_entries_report","base.group_system",1,0,0,0
-"access_account_journal_period_system","account.journal.period system","model_account_journal_period","base.group_system",1,0,0,0
-"access_account_invoice_tax_system","account.invoice.tax system","model_account_invoice_tax","base.group_system",1,0,0,0
-"access_account_tax_code_template_system","account.tax.code.template system","model_account_tax_code_template","base.group_system",1,1,1,1
-"access_account_sequence_fiscal_year_system","account.sequence.fiscalyear system","model_account_sequence_fiscalyear","base.group_system",1,1,1,1
-"access_account_fiscal_position_system","account.fiscal.position system","model_account_fiscal_position","base.group_system",1,1,1,1
-"access_account_move_reconcile_system","account.move.reconcile system","model_account_move_reconcile","base.group_system",1,0,0,0
-"access_account_account_system","account.account system","model_account_account","base.group_system",1,1,1,1
-"access_account_analytic_system","account.analytic.account system","analytic.model_account_analytic_account","base.group_system",1,1,1,1
-"access_account_model_line_system","account.model.line system","model_account_model_line","base.group_system",1,1,1,1
-"access_account_subscription_line_system","account.subscription.line system","model_account_subscription_line","base.group_system",1,1,1,1
-"access_account_payment_term_system","account.payment.term system","model_account_payment_term","base.group_system",1,1,1,1
-"access_account_payment_term_line_system","account.payment.term.line system","model_account_payment_term_line","base.group_system",1,1,1,1
-"access_report_account_receivable_system","report.account.receivable system","model_report_account_receivable","base.group_system",1,1,1,1
-"access_account_fiscal_position_tax_system","account.fiscal.position.tax system","model_account_fiscal_position_tax","base.group_system",1,1,1,1
-"access_account_fiscal_position_account_template_system","account.fiscal.position.account.template system","model_account_fiscal_position_account_template","base.group_system",1,1,1,1
+"access_account_cashbox_line","account.cashbox.line","model_account_cashbox_line","account.group_account_manager",1,1,1,1
+"access_account_cashbox_line","account.cashbox.line","model_account_cashbox_line","account.group_account_user",1,1,1,1
"access_account_journal_view_invoice","account.journal.view invoice","model_account_journal_view","account.group_account_invoice",1,1,1,1
-"access_account_fiscal_position_account_system","account.fiscal.position.account system","model_account_fiscal_position_account","base.group_system",1,1,1,1
"access_account_journal_column_invoice","account.journal.column invoice","model_account_journal_column","account.group_account_invoice",1,1,1,1
"access_account_invoice_tax_manager","account.invoice.tax manager","model_account_invoice_tax","account.group_account_manager",1,0,0,0
"access_account_invoice_tax_accountant","account.invoice.tax accountant","model_account_invoice_tax","account.group_account_user",1,0,0,0
@@ -145,7 +110,6 @@
"access_account_invoice_line_manager","account.invoice.line manager","model_account_invoice_line","account.group_account_manager",1,0,0,0
"access_account_account_invoice","account.account invoice","model_account_account","account.group_account_invoice",1,1,1,1
"access_res_partner_address_invoice","res.partner.address invoice","base.model_res_partner_address","account.group_account_invoice",1,1,1,1
-"access_account_invoice_line_system","account.invoice.line system","model_account_invoice_line","base.group_system",1,0,0,0
"access_account_analytic_accountant","account.analytic.account accountant","analytic.model_account_analytic_account","account.group_account_user",1,1,1,1
"access_account_account_type_invoice","account.account.type invoice","model_account_account_type","account.group_account_invoice",1,1,1,1
"access_report_account_receivable_invoice","report.account.receivable.invoice","model_report_account_receivable","account.group_account_invoice",1,1,1,1
diff --git a/addons/account/test/account_report.yml b/addons/account/test/account_report.yml
index 0aae9dbe3d0..d91e4771d6f 100644
--- a/addons/account/test/account_report.yml
+++ b/addons/account/test/account_report.yml
@@ -67,8 +67,8 @@
import netsvc, tools, os, time
import datetime
from mx.DateTime import *
- import warnings
- warnings.filterwarnings('ignore',".*struct integer overflow masking is deprecated*")
+ import warnings
+ warnings.filterwarnings('ignore',".*struct integer overflow masking is deprecated*")
start = datetime.date.fromtimestamp(time.mktime(time.strptime(time.strftime('%Y-%m-%d'), "%Y-%m-%d")))
start = DateTime(int(start.year), int(start.month), int(start.day))
res = {}
diff --git a/addons/account/wizard/account_chart_view.xml b/addons/account/wizard/account_chart_view.xml
index f35a2c5480c..f2e278b06ce 100644
--- a/addons/account/wizard/account_chart_view.xml
+++ b/addons/account/wizard/account_chart_view.xml
@@ -31,6 +31,7 @@
tree,form
new
+ Display your company chart of accounts per fiscal year and filter by period. Have a complete tree view of all journal items per account code by clicking on an account.
{'journal_type':'sale','view_mode':False}
new
+ This view is used by accountants in order to record entries massively in OpenERP. If you want to record a customer invoice, select the journal and the period in the search toolbar. Then, start by recording the entry line of the income account. OpenERP will propose to you automatically the Tax related to this account and the counter-part "Account receivable".
@@ -31,6 +32,7 @@
{'journal_type':'purchase','view_mode':False}
new
+ This view is used by accountants in order to record entries massively in OpenERP. If you want to record a supplier invoice, start by recording the line of the expense account, OpenERP will propose to you automatically the Tax related to this account and the counter-part "Account Payable".
{'journal_type':'bank','view_mode':False}
new
+ This view is used by accountants in order to record entries massively in OpenERP. Journal items are created by OpenERP if you use Bank Statements, Cash Registers, or Customer/Supplier payments.
-
+
-
+
+
+
diff --git a/addons/account_accountant/security/account_security.xml b/addons/account_accountant/security/account_security.xml
index 4aceb12d266..0d6006fd9b0 100644
--- a/addons/account_accountant/security/account_security.xml
+++ b/addons/account_accountant/security/account_security.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/addons/account_analytic_analysis/security/ir.model.access.csv b/addons/account_analytic_analysis/security/ir.model.access.csv
index 4db9c88f766..80b9f37db1f 100644
--- a/addons/account_analytic_analysis/security/ir.model.access.csv
+++ b/addons/account_analytic_analysis/security/ir.model.access.csv
@@ -1,5 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_account_analytic_analysis_summary_user,account_analytic_analysis.summary.user,model_account_analytic_analysis_summary_user,account.group_account_manager,1,0,0,0
access_account_analytic_analysis_summary_month,account_analytic_analysis.summary.month,model_account_analytic_analysis_summary_month,account.group_account_manager,1,0,0,0
-access_account_analytic_account_user,account.analytic.account.user,model_account_analytic_account,base.group_user,1,0,0,0
-access_account_analytic_account_system,account.analytic.account.system,model_account_analytic_account,base.group_system,1,0,0,0
diff --git a/addons/account_analytic_plans/security/ir.model.access.csv b/addons/account_analytic_plans/security/ir.model.access.csv
index 708094dc520..f7f141ac15a 100644
--- a/addons/account_analytic_plans/security/ir.model.access.csv
+++ b/addons/account_analytic_plans/security/ir.model.access.csv
@@ -6,5 +6,3 @@
"access_account_analytic_plan_line_invoice","account.analytic.plan.line.invoice","model_account_analytic_plan_line","account.group_account_user",1,1,1,1
"access_account_analytic_plan_instance_manager","account.analytic.plan.instance manager","model_account_analytic_plan_instance","account.group_account_manager",1,1,1,1
"access_account_analytic_plan_instance_line_manager","account.analytic.plan.instance.line manager","model_account_analytic_plan_instance_line","account.group_account_manager",1,1,1,1
-"access_account_analytic_plan_system","account.analytic.plan system","model_account_analytic_plan","base.group_system",1,1,1,1
-"access_account_analytic_plan_line_system","account.analytic.plan.line system","model_account_analytic_plan_line","base.group_system",1,1,1,1
diff --git a/addons/account_anglo_saxon/i18n/mn.po b/addons/account_anglo_saxon/i18n/mn.po
new file mode 100644
index 00000000000..2fd75bcc245
--- /dev/null
+++ b/addons/account_anglo_saxon/i18n/mn.po
@@ -0,0 +1,66 @@
+# Mongolian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-11-24 12:50+0000\n"
+"PO-Revision-Date: 2010-10-16 09:58+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Mongolian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-17 04:53+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: account_anglo_saxon
+#: view:product.category:0
+msgid " Accounting Property"
+msgstr ""
+
+#. module: account_anglo_saxon
+#: model:ir.module.module,description:account_anglo_saxon.module_meta_information
+msgid ""
+"This module will support the Anglo-Saxons accounting methodology by \n"
+" changing the accounting logic with stock transactions. The difference "
+"between the Anglo-Saxon accounting countries \n"
+" and the Rhine or also called Continental accounting countries is the "
+"moment of taking the Cost of Goods Sold versus Cost of Sales. \n"
+" Anglo-Saxons accounting does take the cost when sales invoice is "
+"created, Continental accounting will take the cost at he moment the goods "
+"are shipped.\n"
+" This module will add this functionality by using a interim account, to "
+"store the value of shipped goods and will contra book this interim account \n"
+" when the invoice is created to transfer this amount to the debtor or "
+"creditor account."
+msgstr ""
+
+#. module: account_anglo_saxon
+#: model:ir.module.module,shortdesc:account_anglo_saxon.module_meta_information
+msgid "Stock Account"
+msgstr "Агуулахын данс"
+
+#. module: account_anglo_saxon
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Дэлгэцийн XML алдаатай!"
+
+#. module: account_anglo_saxon
+#: field:product.category,property_account_creditor_price_difference_categ:0
+#: field:product.template,property_account_creditor_price_difference:0
+msgid "Price Difference Account"
+msgstr "Үнийн өөрчлөлтийн данс"
+
+#. module: account_anglo_saxon
+#: help:product.category,property_account_creditor_price_difference_categ:0
+#: help:product.template,property_account_creditor_price_difference:0
+msgid ""
+"This account will be used to value price difference between purchase price "
+"and cost price."
+msgstr ""
+"Энэ данс нь худалдан авалтын үнэ болон өртгийн үнийн хоорондох үнийн "
+"өөрчлөлтийг дүгнэхийн тулд ашиглагдана."
diff --git a/addons/account_budget/i18n/sr.po b/addons/account_budget/i18n/sr.po
index 44d9554c859..c98287d9e32 100644
--- a/addons/account_budget/i18n/sr.po
+++ b/addons/account_budget/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 10:57+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 08:22+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_budget
diff --git a/addons/account_budget/security/ir.model.access.csv b/addons/account_budget/security/ir.model.access.csv
index 9e604ed5bee..b2eb33f3d04 100644
--- a/addons/account_budget/security/ir.model.access.csv
+++ b/addons/account_budget/security/ir.model.access.csv
@@ -4,7 +4,4 @@
"access_account_budget_post","account.budget.post","model_account_budget_post","account.group_account_manager",1,0,0,0
"access_account_budget_post_accountant","account.budget.post accountant","model_account_budget_post","account.group_account_user",1,1,1,1
"access_crossovered_budget_accountant","crossovered.budget accountant","model_crossovered_budget","account.group_account_user",1,1,1,1
-"access_account_budget_post_system","account.budget.post system","model_account_budget_post","base.group_system",1,0,0,0
-"access_crossovered_budget_system","crossovered.budget system","model_crossovered_budget","base.group_system",1,0,0,0
-"access_crossovered_budget_lines_system","crossovered.budget.lines system","model_crossovered_budget_lines","base.group_system",1,1,1,1
"access_crossovered_budget_lines_accountant","crossovered.budget.lines accountant","model_crossovered_budget_lines","account.group_account_user",1,1,1,1
diff --git a/addons/account_cancel/i18n/mn.po b/addons/account_cancel/i18n/mn.po
new file mode 100644
index 00000000000..0750c13f415
--- /dev/null
+++ b/addons/account_cancel/i18n/mn.po
@@ -0,0 +1,37 @@
+# Mongolian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-19 12:03+0000\n"
+"PO-Revision-Date: 2010-10-16 08:58+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Mongolian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-17 04:53+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: account_cancel
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Дэлгэцийн XML алдаатай!"
+
+#. module: account_cancel
+#: model:ir.module.module,description:account_cancel.module_meta_information
+msgid ""
+"\n"
+" Module adds 'Allow cancelling entries' field on form view of account "
+"journal. If set to true it allows user to cancel entries & invoices.\n"
+" "
+msgstr ""
+
+#. module: account_cancel
+#: model:ir.module.module,shortdesc:account_cancel.module_meta_information
+msgid "Account Cancel"
+msgstr "Данс цуцлах"
diff --git a/addons/account_coda/i18n/hr.po b/addons/account_coda/i18n/hr.po
index a7212b53edf..0b56b4f2664 100644
--- a/addons/account_coda/i18n/hr.po
+++ b/addons/account_coda/i18n/hr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-11-24 13:11+0000\n"
-"PO-Revision-Date: 2010-10-14 20:51+0000\n"
-"Last-Translator: robert \n"
+"PO-Revision-Date: 2010-10-15 09:33+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Croatian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_coda
diff --git a/addons/account_coda/i18n/sr.po b/addons/account_coda/i18n/sr.po
index 2c8e5a84e9e..c5af7899172 100644
--- a/addons/account_coda/i18n/sr.po
+++ b/addons/account_coda/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-11-24 13:11+0000\n"
-"PO-Revision-Date: 2010-10-14 11:15+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 08:49+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_coda
diff --git a/addons/account_coda/security/ir.model.access.csv b/addons/account_coda/security/ir.model.access.csv
index df4faec11ee..3ab8dccd4ad 100644
--- a/addons/account_coda/security/ir.model.access.csv
+++ b/addons/account_coda/security/ir.model.access.csv
@@ -3,4 +3,3 @@
"access_account_coda_manager","account.coda","model_account_coda","account.group_account_manager",1,1,1,1
"access_account_coda_import_manager","account.coda.import","model_account_coda_import","account.group_account_manager",1,1,1,1
"access_account_coda_import_user","account.coda","model_account_coda","account.group_account_user",1,0,0,0
-"access_account_coda_system","account.coda system","model_account_coda","base.group_system",1,0,0,0
diff --git a/addons/account_followup/account_followup_view.xml b/addons/account_followup/account_followup_view.xml
index 85b21ff9e4e..e246e3659e1 100644
--- a/addons/account_followup/account_followup_view.xml
+++ b/addons/account_followup/account_followup_view.xml
@@ -86,7 +86,8 @@
form
-
+
diff --git a/addons/account_followup/i18n/sr.po b/addons/account_followup/i18n/sr.po
index 1501c7191d7..d882a65d26a 100644
--- a/addons/account_followup/i18n/sr.po
+++ b/addons/account_followup/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 11:52+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 09:03+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_followup
diff --git a/addons/account_followup/report/account_followup_print.rml b/addons/account_followup/report/account_followup_print.rml
index 32bd8103a1c..fb0f93b4a38 100644
--- a/addons/account_followup/report/account_followup_print.rml
+++ b/addons/account_followup/report/account_followup_print.rml
@@ -1,8 +1,8 @@
-
-
+
+
-
+
@@ -48,11 +48,13 @@
-
-
-
-
-
+
+
+
+
+
+
+
@@ -92,16 +94,16 @@
[[ repeatIn(ids_to_objects(data['form']['partner_ids']),'o') ]]
[[ setLang(o.lang) ]]
-
+
[[ repeatIn(adr_get(o,'invoice'),'a' )]]
- [[ o.name ]]
- [[ a['street'] ]]
+ [[ o.name or '' ]]
+ [[ a['street'] or '']]
[[ a['street2'] or removeParentNode('para') ]]
- [[ a['zip'] ]] [[ a['city'] ]]
+ [[ a['zip'] or '' ]] [[ a['city'] or '' ]]
[[( a['state_id'] and a['state_id'][1]) or removeParentNode('para') ]]
[[( a['country_id'] and a['country_id'][1]) or '']]
@@ -124,7 +126,7 @@
-
+
Invoice Date
@@ -157,7 +159,7 @@
[[repeatIn(getLines(o), 'line') ]]
-
+
[[ formatLang(line['date'],date = True) ]]
@@ -189,7 +191,7 @@
-
+
@@ -200,10 +202,10 @@
Sub-Total:
- [[formatLang(reduce(lambda x,y: x+y['debit'], getLines(o), 0.00)) ]]
+ [[formatLang(reduce(lambda x,y: x+y['debit'], getLines(o), 0.00)) ]]
- [[formatLang(reduce(lambda x,y: x+y['credit'], getLines(o), 0.00)) ]]
+ [[formatLang(reduce(lambda x,y: x+y['credit'], getLines(o), 0.00)) ]]
[[ formatLang(reduce(lambda x,y: x+(y['debit'] - y['credit']), filter(lambda x: x['date_maturity'] < time.strftime('%Y-%m-%d'), getLines(o)), 0)) ]] [[ company.currency_id.symbol ]]
@@ -214,6 +216,8 @@
+
+
@@ -224,27 +228,14 @@
Balance:
- [[ formatLang((reduce(lambda x,y: x+(y['debit'] - y['credit']), getLines(o), 0.00))) ]] [[ company.currency_id.symbol]]
+ [[ formatLang((reduce(lambda x,y: x+(y['debit'] - y['credit']), getLines(o), 0.00))) ]] [[ company.currency_id.symbol]]
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
\ No newline at end of file
diff --git a/addons/account_followup/security/ir.model.access.csv b/addons/account_followup/security/ir.model.access.csv
index ccf257b3ecf..60d179d3cbe 100644
--- a/addons/account_followup/security/ir.model.access.csv
+++ b/addons/account_followup/security/ir.model.access.csv
@@ -1,9 +1,6 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_account_followup_followup","account_followup.followup","model_account_followup_followup","base.group_system",1,1,1,1
"access_account_followup_followup_line","account_followup.followup.line","model_account_followup_followup_line","account.group_account_user",1,0,0,0
"access_account_followup_stat_manager","account_followup.stat.manager","model_account_followup_stat","account.group_account_manager",1,1,1,1
-"access_account_followup_followup_manager","account_followup.followup.manager","model_account_followup_followup","base.group_system",1,1,1,1
"access_account_followup_followup_line_manager","account_followup.followup.line.manager","model_account_followup_followup_line","account.group_account_manager",1,1,1,1
-"access_account_followup_followup_line_system","account_followup.followup.line system","model_account_followup_followup_line","base.group_system",1,1,1,1
"access_account_followup_followup_accountant","account_followup.followup user","model_account_followup_followup","account.group_account_user",1,0,0,0
"access_account_followup_stat_invoice","account_followup.stat.invoice","model_account_followup_stat","account.group_account_invoice",1,1,1,1
diff --git a/addons/account_invoice_layout/account_invoice_layout_view.xml b/addons/account_invoice_layout/account_invoice_layout_view.xml
index c6283ce05dc..0d6a3565784 100644
--- a/addons/account_invoice_layout/account_invoice_layout_view.xml
+++ b/addons/account_invoice_layout/account_invoice_layout_view.xml
@@ -100,7 +100,7 @@
-
+
diff --git a/addons/account_invoice_layout/i18n/sr.po b/addons/account_invoice_layout/i18n/sr.po
index 58532d22362..ae168dc498c 100644
--- a/addons/account_invoice_layout/i18n/sr.po
+++ b/addons/account_invoice_layout/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 12:09+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 09:39+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_invoice_layout
diff --git a/addons/account_invoice_layout/report/report_account_invoice_layout.rml b/addons/account_invoice_layout/report/report_account_invoice_layout.rml
index cd23fc1f4ac..df7c25f3de8 100644
--- a/addons/account_invoice_layout/report/report_account_invoice_layout.rml
+++ b/addons/account_invoice_layout/report/report_account_invoice_layout.rml
@@ -1,6 +1,6 @@
-
-
+
+
@@ -185,18 +185,18 @@
- [[ o.partner_id.title.name or '' ]] [[ o.partner_id.name ]]
- [[ o.address_invoice_id.street ]]
- [[ o.address_invoice_id.street2 or removeParentNode('para') ]]
- [[ o.address_invoice_id.zip or '' ]][[ o.address_invoice_id.city or '' ]]
- [[ (o.address_invoice_id.state_id and o.address_invoice_id.state_id.name) or removeParentNode('para')]]
- [[ o.address_invoice_id.country_id and o.address_invoice_id.country_id.name or '' ]]
-
+ [[ (o.partner_id and o.partner_id.title and o.partner_id.title.name) or '' ]] [[ (o.partner_id and o.partner_id.name) or '' ]]
+ [[ (o.address_invoice_id and o.address_invoice_id.street) or '' ]]
+ [[ (o.address_invoice_id and o.address_invoice_id.street2) or removeParentNode('para') ]]
+ [[ (o.address_invoice_id and o.address_invoice_id.zip) or '' ]] [[ (o.address_invoice_id and o.address_invoice_id.city) or '' ]]
+ [[ (o.address_invoice_id and o.address_invoice_id.state_id and o.address_invoice_id.state_id.name) or removeParentNode('para') ]]
+ [[ (o.address_invoice_id and o.address_invoice_id.country_id and o.address_invoice_id.country_id.name) or '' ]]
+
- Tel. : [[ o.address_invoice_id.phone or removeParentNode('para') ]]
- Fax : [[ o.address_invoice_id.fax or removeParentNode('para') ]]
- VAT : [[ o.partner_id.vat or removeParentNode('para') ]]
+ Tel. : [[ (o.address_invoice_id and o.address_invoice_id.phone) or removeParentNode('para') ]]
+ Fax : [[ (o.address_invoice_id and o.address_invoice_id.fax) or removeParentNode('para') ]]
+ VAT : [[ (o.partner_id and o.partner_id.vat) or removeParentNode('para') ]]
@@ -238,7 +238,7 @@
[[ formatLang(o.date_invoice,date=True) ]]
- [[ o.address_invoice_id.partner_id.ref or '' ]]
+ [[ (o.address_invoice_id and o.address_invoice_id.partner_id and o.address_invoice_id.partner_id.ref) or ' ' ]]
@@ -416,10 +416,10 @@
-
+
- Tax
+ Tax [[ o.tax_line==[] and removeParentNode('blockTable') ]]
Base
@@ -436,16 +436,16 @@
[[ repeatIn(o.tax_line,'t') ]]
-
+
[[ t.name ]]
- [[ formatLang(t.base, digits=get_digits(dp='Account')) ]]
+ [[ formatLang(t.base, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]
- [[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount, digits=get_digits(dp='Account')) ]]
+ [[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]
diff --git a/addons/account_invoice_layout/report/special_message_invoice.rml b/addons/account_invoice_layout/report/special_message_invoice.rml
index dafde3d34a6..2925b3526b8 100644
--- a/addons/account_invoice_layout/report/special_message_invoice.rml
+++ b/addons/account_invoice_layout/report/special_message_invoice.rml
@@ -1,6 +1,6 @@
-
-
+
+
@@ -189,18 +189,18 @@
- [[ o.partner_id.title.name or '' ]] [[ o.partner_id.name ]]
- [[ o.address_invoice_id.street ]]
- [[ o.address_invoice_id.street2 or removeParentNode('para')]]
- [[ o.address_invoice_id.zip or '' ]][[ o.address_invoice_id.city or '' ]]
- [[ (o.address_invoice_id.state_id and o.address_invoice_id.state_id.name) or removeParentNode('para') ]]
- [[ o.address_invoice_id.country_id and o.address_invoice_id.country_id.name or '' ]]
-
+ [[ (o.partner_id and o.partner_id.title and o.partner_id.title.name) or '' ]] [[ (o.partner_id and o.partner_id.name) or '' ]]
+ [[ (o.address_invoice_id and o.address_invoice_id.street) or '' ]]
+ [[ (o.address_invoice_id and o.address_invoice_id.street2) or removeParentNode('para') ]]
+ [[ (o.address_invoice_id and o.address_invoice_id.zip) or '' ]] [[ (o.address_invoice_id and o.address_invoice_id.city) or '' ]]
+ [[ (o.address_invoice_id and o.address_invoice_id.state_id and o.address_invoice_id.state_id.name) or removeParentNode('para') ]]
+ [[ (o.address_invoice_id and o.address_invoice_id.country_id and o.address_invoice_id.country_id.name) or '' ]]
+
- Tel. : [[ o.address_invoice_id.phone or removeParentNode('para') ]]
- Fax : [[ o.address_invoice_id.fax or removeParentNode('para') ]]
- VAT : [[ o.partner_id.vat or removeParentNode('para') ]]
+ Tel. : [[ (o.address_invoice_id and o.address_invoice_id.phone) or removeParentNode('para') ]]
+ Fax : [[ (o.address_invoice_id and o.address_invoice_id.fax) or removeParentNode('para') ]]
+ VAT : [[ (o.partner_id and o.partner_id.vat) or removeParentNode('para') ]]
@@ -242,7 +242,7 @@
[[ formatLang(o.date_invoice,date=True) ]]
- [[ o.address_invoice_id.partner_id.ref or '' ]]
+ [[ (o.address_invoice_id and o.address_invoice_id.partner_id and o.address_invoice_id.partner_id.ref) or ' ' ]]
@@ -420,10 +420,10 @@
-
+
- Tax
+ Tax [[ o.tax_line==[] and removeParentNode('blockTable') ]]
Base
@@ -439,17 +439,17 @@
- [[ repeatIn(o.tax_line,'t') ]]
-
+ [[ repeatIn(o.tax_line,'t') ]]
+
[[ t.name ]]
- [[ formatLang(t.base, digits=get_digits(dp='Account')) ]]
+ [[ formatLang(t.base, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]
- [[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount, digits=get_digits(dp='Account')) ]]
+ [[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]]
diff --git a/addons/account_invoice_layout/security/ir.model.access.csv b/addons/account_invoice_layout/security/ir.model.access.csv
index 6eede39eb70..c838392e6eb 100644
--- a/addons/account_invoice_layout/security/ir.model.access.csv
+++ b/addons/account_invoice_layout/security/ir.model.access.csv
@@ -1,3 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_notify_message,notify.message,model_notify_message,account.group_account_invoice,1,1,1,1
-access_notify_message_system,notify.message system,model_notify_message,base.group_system,1,1,1,1
diff --git a/addons/account_payment/i18n/mn.po b/addons/account_payment/i18n/mn.po
index 03ae6c68183..5bd7975811f 100644
--- a/addons/account_payment/i18n/mn.po
+++ b/addons/account_payment/i18n/mn.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 06:58+0000\n"
-"Last-Translator: Jacara \n"
+"PO-Revision-Date: 2010-10-15 09:14+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Mongolian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_payment
diff --git a/addons/account_payment/i18n/ru.po b/addons/account_payment/i18n/ru.po
index a77dfcf2567..0ab2bcf63ff 100644
--- a/addons/account_payment/i18n/ru.po
+++ b/addons/account_payment/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-09-29 10:53+0000\n"
-"Last-Translator: Chertykov Denis \n"
+"PO-Revision-Date: 2010-10-16 09:33+0000\n"
+"Last-Translator: Nikolay Chesnokov \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-30 04:43+0000\n"
+"X-Launchpad-Export-Date: 2010-10-17 04:53+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_payment
@@ -275,7 +275,7 @@ msgstr "Произвести платежи"
#. module: account_payment
#: field:payment.line,state:0
msgid "Communication Type"
-msgstr ""
+msgstr "Тип коммуникации"
#. module: account_payment
#: model:ir.module.module,shortdesc:account_payment.module_meta_information
@@ -332,7 +332,7 @@ msgstr "Партнер"
#. module: account_payment
#: help:payment.line,communication2:0
msgid "The successor message of Communication."
-msgstr ""
+msgstr "Приемник сообщения коммуникации"
#. module: account_payment
#: help:payment.line,info_partner:0
@@ -502,7 +502,7 @@ msgstr "Сумма в валюте партнера"
#. module: account_payment
#: field:payment.line,communication2:0
msgid "Communication 2"
-msgstr ""
+msgstr "Коммуникации 2"
#. module: account_payment
#: field:payment.line,bank_id:0
diff --git a/addons/account_payment/i18n/sr.po b/addons/account_payment/i18n/sr.po
index d563ea941c0..4fd733e9ea5 100644
--- a/addons/account_payment/i18n/sr.po
+++ b/addons/account_payment/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 13:06+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 09:18+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_payment
diff --git a/addons/account_payment/security/ir.model.access.csv b/addons/account_payment/security/ir.model.access.csv
index 1d39372a6b3..a4b6fe0af5e 100644
--- a/addons/account_payment/security/ir.model.access.csv
+++ b/addons/account_payment/security/ir.model.access.csv
@@ -7,7 +7,5 @@
"access_account_move_line_payment","account.move.line payment","account.model_account_move_line","group_account_payment",1,0,0,0
"access_payment_order_accountant","payment.order accountant","model_payment_order","account.group_account_user",1,1,1,1
"access_payment_order_manager","payment.order manager","model_payment_order","account.group_account_manager",1,0,0,0
-"access_payment_order_system","payment.order system","model_payment_order","base.group_system",1,0,0,0
-"access_payment_mode_system","payment.mode system","model_payment_mode","base.group_system",1,1,1,1
"access_payment_order_invoice","payment.order invoice","model_payment_order","account.group_account_invoice",1,1,1,1
"access_payment_line_invoice","payment.line invoice","model_payment_line","account.group_account_invoice",1,1,1,1
diff --git a/addons/account_report/security/ir.model.access.csv b/addons/account_report/security/ir.model.access.csv
index 66fe44b6714..789f18530e0 100644
--- a/addons/account_report/security/ir.model.access.csv
+++ b/addons/account_report/security/ir.model.access.csv
@@ -1,5 +1,4 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_account_report_report_system","account.report.report system","model_account_report_report","base.group_system",1,0,0,0
"access_account_report_history","account.report.history","model_account_report_history","account.group_account_manager",1,0,0,0
"access_account_report_report","account.report.report","model_account_report_report","account.group_account_user",1,1,0,0
"access_account_report_report_manager","account.report.report manager","model_account_report_report","account.group_account_manager",1,1,1,1
diff --git a/addons/account_reporting/i18n/sr.po b/addons/account_reporting/i18n/sr.po
index c79527b314f..38289723f44 100644
--- a/addons/account_reporting/i18n/sr.po
+++ b/addons/account_reporting/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 13:59+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 09:23+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_reporting
diff --git a/addons/account_reporting/security/ir.model.access.csv b/addons/account_reporting/security/ir.model.access.csv
index e84e663dfda..78dfe260864 100644
--- a/addons/account_reporting/security/ir.model.access.csv
+++ b/addons/account_reporting/security/ir.model.access.csv
@@ -1,3 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_color_rml,color.rml,model_color_rml,account.group_account_manager,1,1,1,1
-access_account_report_bs,account.report.bs,model_account_report_bs,base.group_system,1,1,1,1
+access_account_report_bs,account.report.bs,model_account_report_bs,account.group_account_manager,1,1,1,1
diff --git a/addons/account_tax_include/__init__.py b/addons/account_tax_include/__init__.py
deleted file mode 100644
index f96eb08f2fe..00000000000
--- a/addons/account_tax_include/__init__.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# 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 .
-#
-##############################################################################
-
-import account_tax_include
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/account_tax_include/__openerp__.py b/addons/account_tax_include/__openerp__.py
deleted file mode 100644
index a6bab18ce01..00000000000
--- a/addons/account_tax_include/__openerp__.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# 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 .
-#
-##############################################################################
-
-
-{
- 'name': 'Invoices and prices with taxes included',
- 'version': '1.0',
- 'category': 'Generic Modules/Accounting',
- 'description': """Allow the user to work tax included prices.
-Especially useful for b2c businesses.
-
-This module implements the modification on the invoice form.
-""",
- 'author': 'OpenERP SA',
- 'website': 'http://www.openerp.com',
- 'depends': ['account'],
- 'init_xml': [],
- 'update_xml': ['account_tax_include_view.xml'],
- 'demo_xml': [],
- 'test': ['test/account_tax_include.yml'],
- 'installable': True,
- 'active': False,
- 'certificate': '0070514190381',
-}
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account_tax_include/account_tax_include.py b/addons/account_tax_include/account_tax_include.py
deleted file mode 100644
index afd1ef36ae7..00000000000
--- a/addons/account_tax_include/account_tax_include.py
+++ /dev/null
@@ -1,228 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# 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 .
-#
-##############################################################################
-
-import time
-
-from osv import fields, osv
-
-class account_invoice(osv.osv):
- _inherit = "account.invoice"
- _columns = {
- 'price_type': fields.selection([('tax_included','Tax included'),
- ('tax_excluded','Tax excluded')],
- 'Price method', required=True, readonly=True,
- states={'draft': [('readonly', False)]}),
- }
- _defaults = {
- 'price_type': 'tax_excluded',
- }
-
- def refund(self, cr, uid, ids, date=None, period_id=None, description=None, journal_id=None):
- map_old_new = {}
- refund_ids = []
- for old_inv_id in ids:
- new_id = super(account_invoice,self).refund(cr, uid, ids, date=date, period_id=period_id, description=description, journal_id=journal_id)
- refund_ids += new_id
- map_old_new[old_inv_id] = new_id[0]
-
- for old_inv_id in map_old_new.keys():
- old_inv_record = self.read(cr, uid, [old_inv_id], ['price_type'])[0]['price_type']
- self.write(cr, uid, [map_old_new[old_inv_id]], {'price_type' : old_inv_record})
- return refund_ids
-
-account_invoice()
-
-class account_invoice_line(osv.osv):
- _inherit = "account.invoice.line"
-
- def _amount_line2(self, cr, uid, ids, name, args, context=None):
- """
- Return the subtotal excluding taxes with respect to price_type.
- """
- res = {}
- tax_obj = self.pool.get('account.tax')
- cur_obj = self.pool.get('res.currency')
- dec_obj = self.pool.get('decimal.precision')
- for line in self.browse(cr, uid, ids):
- cur = line.invoice_id and line.invoice_id.currency_id or False
- res_init = super(account_invoice_line, self)._amount_line(cr, uid, [line.id], name, args, context)
- res[line.id] = {
- 'price_subtotal': 0.0,
- 'price_subtotal_incl': 0.0,
- 'data': []
- }
- if not line.quantity:
- continue
- if line.invoice_id:
- product_taxes = []
- if line.product_id:
- if line.invoice_id.type in ('out_invoice', 'out_refund'):
- product_taxes = filter(lambda x: x.price_include, line.product_id.taxes_id)
- else:
- product_taxes = filter(lambda x: x.price_include, line.product_id.supplier_taxes_id)
-
- if ((set(product_taxes) == set(line.invoice_line_tax_id)) or not product_taxes) and (line.invoice_id.price_type == 'tax_included'):
- res[line.id]['price_subtotal_incl'] = cur and cur_obj.round(cr, uid, cur, res_init[line.id]) or res_init[line.id]
- else:
- res[line.id]['price_subtotal'] = cur and cur_obj.round(cr, uid, cur, res_init[line.id]) or res_init[line.id]
- for tax in tax_obj.compute_inv(cr, uid, product_taxes, res_init[line.id]/line.quantity, line.quantity):
- res[line.id]['price_subtotal'] = res[line.id]['price_subtotal'] - round(tax['amount'], dec_obj.precision_get(cr, uid, 'Account'))
- else:
- res[line.id]['price_subtotal'] = cur and cur_obj.round(cr, uid, cur, res_init[line.id]) or res_init[line.id]
-
- if res[line.id]['price_subtotal']:
- res[line.id]['price_subtotal_incl'] = res[line.id]['price_subtotal']
- for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, res[line.id]['price_subtotal']/line.quantity, line.quantity):
- res[line.id]['price_subtotal_incl'] = res[line.id]['price_subtotal_incl'] + tax['amount']
- res[line.id]['data'].append(tax)
- else:
- res[line.id]['price_subtotal'] = res[line.id]['price_subtotal_incl']
- for tax in tax_obj.compute_inv(cr, uid, line.invoice_line_tax_id, res[line.id]['price_subtotal_incl']/line.quantity, line.quantity):
- res[line.id]['price_subtotal'] = res[line.id]['price_subtotal'] - tax['amount']
- res[line.id]['data'].append(tax)
-
- res[line.id]['price_subtotal']= round(res[line.id]['price_subtotal'], dec_obj.precision_get(cr, uid, 'Account'))
- res[line.id]['price_subtotal_incl']= round(res[line.id]['price_subtotal_incl'], dec_obj.precision_get(cr, uid, 'Account'))
- return res
-
- def _price_unit_default(self, cr, uid, context=None):
- if context is None:
- context = {}
- if 'check_total' in context:
- t = context['check_total']
- if context.get('price_type', False) == 'tax_included':
- for l in context.get('invoice_line', {}):
- if len(l) >= 3 and l[2]:
- p = l[2].get('price_unit', 0) * (1-l[2].get('discount', 0)/100.0)
- t = t - (p * l[2].get('quantity'))
- return t
- return super(account_invoice_line, self)._price_unit_default(cr, uid, context)
- return 0
-
- def _get_invoice(self, cr, uid, ids, context=None):
- result = {}
- for inv in self.pool.get('account.invoice').browse(cr, uid, ids, context=context):
- for line in inv.invoice_line:
- result[line.id] = True
- return result.keys()
-
- _columns = {
- 'price_subtotal': fields.function(_amount_line2, method=True, string='Subtotal w/o tax', multi='amount',
- store={'account.invoice':(_get_invoice,['price_type'], 10), 'account.invoice.line': (lambda self, cr, uid, ids, c={}: ids, None,10)}),
- 'price_subtotal_incl': fields.function(_amount_line2, method=True, string='Subtotal', multi='amount',
- store={'account.invoice':(_get_invoice,['price_type'], 10), 'account.invoice.line': (lambda self, cr, uid, ids, c={}: ids, None,10)}),
- }
-
- _defaults = {
- 'price_unit': _price_unit_default,
- }
-
- def move_line_get_item(self, cr, uid, line, context=None):
- return {
- 'type':'src',
- 'name':line.name,
- 'price_unit':(line.quantity) and (line.price_subtotal / line.quantity) or line.price_subtotal,
- 'quantity':line.quantity,
- 'price':line.price_subtotal,
- 'account_id':line.account_id.id,
- 'product_id': line.product_id.id,
- 'uos_id':line.uos_id.id,
- 'account_analytic_id':line.account_analytic_id.id,
- }
-
- def product_id_change_unit_price_inv(self, cr, uid, tax_id, price_unit, qty, address_invoice_id, product, partner_id, context=None):
- if context is None:
- context = {}
- # if the tax is already included, just return the value without calculations
- if context.get('price_type', False) == 'tax_included':
- return {'price_unit': price_unit,'invoice_line_tax_id': tax_id}
- else:
- return super(account_invoice_line, self).product_id_change_unit_price_inv(cr, uid, tax_id, price_unit, qty, address_invoice_id, product, partner_id, context=context)
-
- def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, address_invoice_id=False, currency_id=False, context=None):
- # note: will call product_id_change_unit_price_inv with context...
-
- # Temporary trap, for bad context that came from koo:
-
- ctx = (context and context.copy()) or {}
- ctx.update({'price_type': ctx.get('price_type', 'tax_excluded')})
- return super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, address_invoice_id, currency_id=currency_id, context=ctx)
-
-account_invoice_line()
-
-class account_invoice_tax(osv.osv):
- _inherit = "account.invoice.tax"
-
- def compute(self, cr, uid, invoice_id, context=None):
- tax_grouped = {}
- tax_obj = self.pool.get('account.tax')
- cur_obj = self.pool.get('res.currency')
- line_obj = self.pool.get('account.invoice.line')
-
- inv = self.pool.get('account.invoice').browse(cr, uid, invoice_id)
- line_ids = map(lambda x: x.id, inv.invoice_line)
-
- cur = inv.currency_id
- company_currency = inv.company_id.currency_id.id
-
- for line in inv.invoice_line:
- data = line_obj._amount_line2(cr, uid, [line.id], [], [], context)[line.id]
- for tax in data['data']:
- val={}
- val['invoice_id'] = inv.id
- val['name'] = tax['name']
- val['amount'] = tax['amount']
- val['manual'] = False
- val['sequence'] = tax['sequence']
- val['base'] = tax['price_unit'] * line['quantity']
-
- if inv.type in ('out_invoice','in_invoice'):
- val['base_code_id'] = tax['base_code_id']
- val['tax_code_id'] = tax['tax_code_id']
- val['base_amount'] = cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, val['base'] * tax['base_sign'], context={'date': inv.date_invoice or time.strftime('%Y-%m-%d')}, round=False)
- val['tax_amount'] = cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, val['amount'] * tax['tax_sign'], context={'date': inv.date_invoice or time.strftime('%Y-%m-%d')}, round=False)
- val['account_id'] = tax['account_collected_id'] or line.account_id.id
- else:
- val['base_code_id'] = tax['ref_base_code_id']
- val['tax_code_id'] = tax['ref_tax_code_id']
- val['base_amount'] = cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, val['base'] * tax['ref_base_sign'], context={'date': inv.date_invoice or time.strftime('%Y-%m-%d')}, round=False)
- val['tax_amount'] = cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, val['amount'] * tax['ref_tax_sign'], context={'date': inv.date_invoice or time.strftime('%Y-%m-%d')}, round=False)
- val['account_id'] = tax['account_paid_id'] or line.account_id.id
-
- key = (val['tax_code_id'], val['base_code_id'], val['account_id'])
- if not key in tax_grouped:
- tax_grouped[key] = val
- else:
- tax_grouped[key]['amount'] += val['amount']
- tax_grouped[key]['base'] += val['base']
- tax_grouped[key]['base_amount'] += val['base_amount']
- tax_grouped[key]['tax_amount'] += val['tax_amount']
-
- for t in tax_grouped.values():
- t['amount'] = cur_obj.round(cr, uid, cur, t['amount'])
- t['base_amount'] = cur_obj.round(cr, uid, cur, t['base_amount'])
- t['tax_amount'] = cur_obj.round(cr, uid, cur, t['tax_amount'])
-
- return tax_grouped
-
-account_invoice_tax()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/account_tax_include/account_tax_include_view.xml b/addons/account_tax_include/account_tax_include_view.xml
deleted file mode 100644
index 4c103cd0d50..00000000000
--- a/addons/account_tax_include/account_tax_include_view.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
-
- account.tax.exlcuded.view.form
- form
- account.tax
-
-
-
-
-
-
-
-
-
-
- account.invoice.vat.exlcuded.view.form
- form
- account.invoice
-
-
-
-
-
-
-
-
-
- account.invoice.supplier.tax_include
- form
- account.invoice
-
-
-
-
-
-
-
-
-
- account.invoice.supplier.tax_include2
- form
- account.invoice
-
-
-
-
-
-
-
-
-
- account.invoice.supplier.tax_include3
- form
- account.invoice
-
-
-
-
-
-
-
-
-
- account.invoice.line.tree
- account.invoice.line
- tree
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/account_tax_include/i18n/account_tax_include.pot b/addons/account_tax_include/i18n/account_tax_include.pot
deleted file mode 100644
index da7622102bd..00000000000
--- a/addons/account_tax_include/i18n/account_tax_include.pot
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01:51+0000\n"
-"PO-Revision-Date: 2009-08-28 16:01:51+0000\n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr ""
-
diff --git a/addons/account_tax_include/i18n/ar.po b/addons/account_tax_include/i18n/ar.po
deleted file mode 100644
index 5090a5e011f..00000000000
--- a/addons/account_tax_include/i18n/ar.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 5.0.4\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-02-03 06:24+0000\n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr ""
diff --git a/addons/account_tax_include/i18n/bg.po b/addons/account_tax_include/i18n/bg.po
deleted file mode 100644
index f0b055241cc..00000000000
--- a/addons/account_tax_include/i18n/bg.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 12:06+0000\n"
-"Last-Translator: lem0na \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Невалиден XML за преглед на архитектурата"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Начин на изчисляване"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "С включен данък"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Без данък"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr ""
diff --git a/addons/account_tax_include/i18n/bs.po b/addons/account_tax_include/i18n/bs.po
deleted file mode 100644
index 97a0c10e367..00000000000
--- a/addons/account_tax_include/i18n/bs.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-02-10 12:26+0000\n"
-"Last-Translator: adnan \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Neodgovarajući XML za arhitekturu prikaza!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Cjenovna procedura"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Računi i cijene sa uključenim porezom"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Porez uključen"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Porez nije uključen"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Izračunaj cijene sa porezima"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Sub-ukupno"
diff --git a/addons/account_tax_include/i18n/ca.po b/addons/account_tax_include/i18n/ca.po
deleted file mode 100644
index ce0276a8c26..00000000000
--- a/addons/account_tax_include/i18n/ca.po
+++ /dev/null
@@ -1,53 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-29 06:30+0000\n"
-"Last-Translator: Jordi Esteve (www.zikzakmedia.com) "
-"\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "XML invàlid per a la definició de la vista!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Mètode preu"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Factures i preus amb impostos inclosos"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Impostos inclosos"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Impostos exclosos"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Codi pel càlcul dels preus amb impostos inclosos"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Subtotal"
diff --git a/addons/account_tax_include/i18n/cs.po b/addons/account_tax_include/i18n/cs.po
deleted file mode 100644
index a8958b780d7..00000000000
--- a/addons/account_tax_include/i18n/cs.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-02 23:35+0000\n"
-"Last-Translator: mga (Open ERP) \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Neplatný XML pro zobrazení architektury"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Metoda určování cen"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Faktury a ceny včetně daní"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Daně zahrnuty"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Daně vyloučeny"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Výpočetní kód pro ceny včetně daně"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Mezisoučet"
diff --git a/addons/account_tax_include/i18n/de.po b/addons/account_tax_include/i18n/de.po
deleted file mode 100644
index 4635a414aaa..00000000000
--- a/addons/account_tax_include/i18n/de.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-04-09 13:20+0000\n"
-"Last-Translator: Ferdinand @ ChriCar \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Fehlerhafter xml Code für diese Ansicht!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Preismethode"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Rechnungen und Preise mit inkludierten Steuern"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Steuer inklusive"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Steuern exklusive"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Berechnungsgrundlage (inkl. Steuer)"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Zwischensumme"
diff --git a/addons/account_tax_include/i18n/el.po b/addons/account_tax_include/i18n/el.po
deleted file mode 100644
index 74d719a9b9e..00000000000
--- a/addons/account_tax_include/i18n/el.po
+++ /dev/null
@@ -1,53 +0,0 @@
-# Greek translation for openobject-addons
-# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2009.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 15:27+0000\n"
-"Last-Translator: Makis Nicolaou \n"
-"Language-Team: Greek \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Άκυρο XML για την αρχιτεκτονική όψης!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Μέθοδος Τιμής"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Τιμολόγια και τιμές με ενσωμάτωση φόρων"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Συμπερίληψη φόρου"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Εξαιρούνται φόροι"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Κωδικός Υπολογισμού για Φόρους που εμπεριέχονται στις τιμές"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Υποσύνολο"
diff --git a/addons/account_tax_include/i18n/en_AU.po b/addons/account_tax_include/i18n/en_AU.po
deleted file mode 100644
index 4c0e3609f24..00000000000
--- a/addons/account_tax_include/i18n/en_AU.po
+++ /dev/null
@@ -1,53 +0,0 @@
-# English (Australia) translation for openobject-addons
-# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-05-09 21:19+0000\n"
-"Last-Translator: MoLE \n"
-"Language-Team: English (Australia) \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Invalid XML for View Architecture!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Price method"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Invoices and prices with taxes included"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Tax included"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Tax excluded"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Compute Code for Taxes included prices"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Subtotal"
diff --git a/addons/account_tax_include/i18n/en_GB.po b/addons/account_tax_include/i18n/en_GB.po
deleted file mode 100644
index cd72d7a2cac..00000000000
--- a/addons/account_tax_include/i18n/en_GB.po
+++ /dev/null
@@ -1,53 +0,0 @@
-# English (United Kingdom) translation for openobject-addons
-# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-05-09 21:20+0000\n"
-"Last-Translator: MoLE \n"
-"Language-Team: English (United Kingdom) \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Invalid XML for View Architecture!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Price method"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Invoices and prices with taxes included"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Tax included"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Tax excluded"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Compute Code for Taxes included prices"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Subtotal"
diff --git a/addons/account_tax_include/i18n/es.po b/addons/account_tax_include/i18n/es.po
deleted file mode 100644
index b01d20c9ec8..00000000000
--- a/addons/account_tax_include/i18n/es.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-24 20:17+0000\n"
-"Last-Translator: Borja López Soilán (Pexego) \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "¡XML inválido para la definición de la vista!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Método precio"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Facturas y precios con impuestos incluidos"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Impuestos incluidos"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Impuestos excluidos"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Código para el cálculo de precios con impuestos incluidos"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Subtotal"
diff --git a/addons/account_tax_include/i18n/es_AR.po b/addons/account_tax_include/i18n/es_AR.po
deleted file mode 100644
index a9cc40c0d4c..00000000000
--- a/addons/account_tax_include/i18n/es_AR.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 5.0.0\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-14 18:28+0000\n"
-"Last-Translator: Silvana Herrera \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "XML inválido para la definición de la vista!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Método de precio"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Facturas y precios con impuestos incluidos"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Impuestos incluidos"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Impuestos no incluidos"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Código del cálculo para precios con impuestos incluídos"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Subtotal"
diff --git a/addons/account_tax_include/i18n/es_EC.po b/addons/account_tax_include/i18n/es_EC.po
deleted file mode 100644
index 1858f2a52bc..00000000000
--- a/addons/account_tax_include/i18n/es_EC.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-09-17 17:47+0000\n"
-"Last-Translator: Borja López Soilán (Pexego) \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "¡XML inválido para la definición de la vista!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Método precio"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Facturas y precios con impuestos incluidos"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Impuestos incluidos"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Impuestos excluidos"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Código para el cálculo de precios con impuestos incluidos"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Subtotal"
diff --git a/addons/account_tax_include/i18n/et.po b/addons/account_tax_include/i18n/et.po
deleted file mode 100644
index d4398a2ae58..00000000000
--- a/addons/account_tax_include/i18n/et.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-11-09 16:28+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Vigane XML vaate arhitektuurile!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Hinna meetod"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Makse sisaldavad arved ja hinnad"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Maksuga"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Maksuta"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Arvuta kood maksuga hindadele"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Vahesumma"
diff --git a/addons/account_tax_include/i18n/fi.po b/addons/account_tax_include/i18n/fi.po
deleted file mode 100644
index 0b8e8dfcee2..00000000000
--- a/addons/account_tax_include/i18n/fi.po
+++ /dev/null
@@ -1,53 +0,0 @@
-# Finnish translation for openobject-addons
-# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-02 23:40+0000\n"
-"Last-Translator: mga (Open ERP) \n"
-"Language-Team: Finnish \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Virheellinen XML näkymä-arkkitehtuurille!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Hinnan tyyppi"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Laskut ja hinnat veroilla"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Vero sisältyy"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Ilman veroa"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Laske koodi hinnoille joissa on vero mukana"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Välisumma"
diff --git a/addons/account_tax_include/i18n/fr.po b/addons/account_tax_include/i18n/fr.po
deleted file mode 100644
index 3f912c6ffba..00000000000
--- a/addons/account_tax_include/i18n/fr.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-11-17 09:23+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "XML non valide pour l'architecture de la vue"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Méthode de prix"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Factures et prix avec taxes comprises"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Taxe comprise"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Hors-taxe"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Code de calcul pour les prix taxes comprises"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Sous-total"
diff --git a/addons/account_tax_include/i18n/gl.po b/addons/account_tax_include/i18n/gl.po
deleted file mode 100644
index 96e95387061..00000000000
--- a/addons/account_tax_include/i18n/gl.po
+++ /dev/null
@@ -1,54 +0,0 @@
-# translation of account-tax-include-es.po to Galego
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-# Frco. Javier Rial Rodríguez , 2009.
-msgid ""
-msgstr ""
-"Project-Id-Version: account-tax-include-es\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 12:37+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
-"Language-Team: Galego \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "¡XML non válido para a definición da vista!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Método prezo"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Facturas e prezos con impostos incluídos"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Imposto incluído"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Imposto excluído"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Código para o cálculo dos impostos en prezos incluídos"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Subtotal"
diff --git a/addons/account_tax_include/i18n/hr.po b/addons/account_tax_include/i18n/hr.po
deleted file mode 100644
index ba46ce2f95a..00000000000
--- a/addons/account_tax_include/i18n/hr.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-02 23:43+0000\n"
-"Last-Translator: Dragan Jovanovic \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Nevažeći XML za Arhitekturu Prikaza!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Cjenovna metoda"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Računi i cijene sa uključenim porezom"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Porez uključen"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Nije uključen porez"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Kod za izračun cijena sa uključenim porezima"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Podzbroj"
diff --git a/addons/account_tax_include/i18n/hu.po b/addons/account_tax_include/i18n/hu.po
deleted file mode 100644
index 5090a5e011f..00000000000
--- a/addons/account_tax_include/i18n/hu.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 5.0.4\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-02-03 06:24+0000\n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr ""
diff --git a/addons/account_tax_include/i18n/id.po b/addons/account_tax_include/i18n/id.po
deleted file mode 100644
index e0d1f76a6b1..00000000000
--- a/addons/account_tax_include/i18n/id.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-02 14:41+0000\n"
-"Last-Translator: mga (Open ERP) \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "XML tidak valid untuk Menampilkan Arsitektur!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Metode Harga"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Faktur dan harga sudah termasuk pajak"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Termasuk Pajak"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Tidak termasuk pajak"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "menghitung kode untuk Pajak termasuk harga"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Sub Total"
diff --git a/addons/account_tax_include/i18n/it.po b/addons/account_tax_include/i18n/it.po
deleted file mode 100644
index 8b6d0f9df36..00000000000
--- a/addons/account_tax_include/i18n/it.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 5.0.4\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 07:31+0000\n"
-"Last-Translator: OpenERP Administrators \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "XML non valido per Visualizzazione Architettura!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Metodo di pagamento"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Tasse incluse"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Tasse escluse"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Subtotale"
diff --git a/addons/account_tax_include/i18n/ko.po b/addons/account_tax_include/i18n/ko.po
deleted file mode 100644
index 254d3ffc1b1..00000000000
--- a/addons/account_tax_include/i18n/ko.po
+++ /dev/null
@@ -1,53 +0,0 @@
-# Korean translation for openobject-addons
-# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2009.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 16:43+0000\n"
-"Last-Translator: ekodaq \n"
-"Language-Team: Korean \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "뷰 아키텍처의 XML이 유효하지 않습니다."
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "가격 방식"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "세금이 포함된 인보이스와 가격"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "세금 포함"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "세금 제외"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "세금 포함 가격을 위한 컴퓨터 코드"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "서브토털"
diff --git a/addons/account_tax_include/i18n/lt.po b/addons/account_tax_include/i18n/lt.po
deleted file mode 100644
index 35af6cdcb04..00000000000
--- a/addons/account_tax_include/i18n/lt.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 15:54+0000\n"
-"Last-Translator: Donatas Stonys TeraxIT \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr ""
diff --git a/addons/account_tax_include/i18n/nb.po b/addons/account_tax_include/i18n/nb.po
deleted file mode 100644
index a457b6a3c49..00000000000
--- a/addons/account_tax_include/i18n/nb.po
+++ /dev/null
@@ -1,53 +0,0 @@
-# Norwegian Bokmal translation for openobject-addons
-# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-09-09 07:22+0000\n"
-"Last-Translator: OpenERP Administrators \n"
-"Language-Team: Norwegian Bokmal \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Ugyldig XML for visningsarkitektur!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Subtotal"
diff --git a/addons/account_tax_include/i18n/nl.po b/addons/account_tax_include/i18n/nl.po
deleted file mode 100644
index cfccf0663d4..00000000000
--- a/addons/account_tax_include/i18n/nl.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-12-14 21:11+0000\n"
-"Last-Translator: Pieter J. Kersten (EduSense BV) \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Ongeldige XML voor weergave!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Prijsmethode"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Facturen en prijzen inclusief belastingen"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Inclusief belastingen"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Exclusief belastingen"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Bereken code voor prijzen inclusief belastingen"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Subtotaal"
diff --git a/addons/account_tax_include/i18n/nl_BE.po b/addons/account_tax_include/i18n/nl_BE.po
deleted file mode 100644
index 68a51f90ec3..00000000000
--- a/addons/account_tax_include/i18n/nl_BE.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 5.0.0\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-04-24 15:12+0000\n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr ""
diff --git a/addons/account_tax_include/i18n/oc.po b/addons/account_tax_include/i18n/oc.po
deleted file mode 100644
index 95700dc830e..00000000000
--- a/addons/account_tax_include/i18n/oc.po
+++ /dev/null
@@ -1,53 +0,0 @@
-# Occitan (post 1500) translation for openobject-addons
-# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-02 23:48+0000\n"
-"Last-Translator: Cédric VALMARY (Tot en òc) \n"
-"Language-Team: Occitan (post 1500) \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "XML invalid per l'arquitectura de la vista"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Metòde de prètz"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Facturas e prèses amb taxas inclusas"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Taxa inclusa"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Fòra taxa"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Còde de calcul pels prèses amb taxas compresas"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Sostotal"
diff --git a/addons/account_tax_include/i18n/pl.po b/addons/account_tax_include/i18n/pl.po
deleted file mode 100644
index efa5a2bfdfb..00000000000
--- a/addons/account_tax_include/i18n/pl.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-11-21 15:43+0000\n"
-"Last-Translator: Andrzej MoST (Marcin Ostajewski) \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "XML niewłaściwy dla tej architektury wyświetlania!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Metoda wyceny"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Faktury i ceny zawierające podatki."
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Zawiera podatek"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Nie zawiera podatku"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Wylicz kod dla cen z podatkiem"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Suma częściowa"
diff --git a/addons/account_tax_include/i18n/pt.po b/addons/account_tax_include/i18n/pt.po
deleted file mode 100644
index 9f5c11b9832..00000000000
--- a/addons/account_tax_include/i18n/pt.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-02 23:49+0000\n"
-"Last-Translator: mga (Open ERP) \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "XML inválido para a arquitectura da vista"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Método do preço"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Facturas e preços com imposto incluído"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Imposto incluído"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Imposto excluído"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Código de cálculo para preços com imposto incluído"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Subtotal"
diff --git a/addons/account_tax_include/i18n/pt_BR.po b/addons/account_tax_include/i18n/pt_BR.po
deleted file mode 100644
index bd8ff06c8e4..00000000000
--- a/addons/account_tax_include/i18n/pt_BR.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 12:28+0000\n"
-"Last-Translator: Pedro_Maschio \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Invalido XML para Arquitetura da View"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr ""
diff --git a/addons/account_tax_include/i18n/ro.po b/addons/account_tax_include/i18n/ro.po
deleted file mode 100644
index c6c5a81169c..00000000000
--- a/addons/account_tax_include/i18n/ro.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-02 23:52+0000\n"
-"Last-Translator: mga (Open ERP) \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "XML invalid pentru arhitectura machetei de afișare !"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Metoda de pret"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Facturi şi preţuri cu taxele incluse"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Taxe incluse"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Fără taxe"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Calcul cod pentru preţuri cu taxe incluse"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Subtotal"
diff --git a/addons/account_tax_include/i18n/ru.po b/addons/account_tax_include/i18n/ru.po
deleted file mode 100644
index 0d7efd3ffdf..00000000000
--- a/addons/account_tax_include/i18n/ru.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-06-06 06:51+0000\n"
-"Last-Translator: mr.The \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Неправильный XML для просмотра архитектуры!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Метод расчета цены"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Счета и цены с налогами"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "С налогами"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "До налогов"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Выполнить код для цен с налогами"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Промежуточный итог"
diff --git a/addons/account_tax_include/i18n/sk.po b/addons/account_tax_include/i18n/sk.po
deleted file mode 100644
index eedd88d3edc..00000000000
--- a/addons/account_tax_include/i18n/sk.po
+++ /dev/null
@@ -1,53 +0,0 @@
-# Slovak translation for openobject-addons
-# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-02 23:53+0000\n"
-"Last-Translator: Peter Kohaut \n"
-"Language-Team: Slovak \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Neplatné XML pre zobrazenie architektúry!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Faktúry a ceny zahrnuté s DPH"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Medzisúčet"
diff --git a/addons/account_tax_include/i18n/sl.po b/addons/account_tax_include/i18n/sl.po
deleted file mode 100644
index 22db03c5894..00000000000
--- a/addons/account_tax_include/i18n/sl.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-11-17 09:23+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Neveljaven XML za arhitekturo pogleda."
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Metoda cene"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Računi in cene z vključenimi davki"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Davek vključen"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Davek ni vključen"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Koda izračuna za davke v cenah"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Delna vsota"
diff --git a/addons/account_tax_include/i18n/sq.po b/addons/account_tax_include/i18n/sq.po
deleted file mode 100644
index 7c7b2189fd2..00000000000
--- a/addons/account_tax_include/i18n/sq.po
+++ /dev/null
@@ -1,53 +0,0 @@
-# Albanian translation for openobject-addons
-# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-02 14:41+0000\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: Albanian \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr ""
diff --git a/addons/account_tax_include/i18n/sr.po b/addons/account_tax_include/i18n/sr.po
deleted file mode 100644
index a74323d1144..00000000000
--- a/addons/account_tax_include/i18n/sr.po
+++ /dev/null
@@ -1,53 +0,0 @@
-# Serbian translation for openobject-addons
-# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 14:04+0000\n"
-"Last-Translator: zmmaj \n"
-"Language-Team: Serbian \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Nevažeći XML za pregled arhitekture"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Cenovna metoda"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Računi i cene sa uključenim porezom"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "Porez uključen"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "Nije uključen porez"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "Kompjuterski kod za izračunavanje cijena sa uključenim porezima"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Subtotal"
diff --git a/addons/account_tax_include/i18n/sv.po b/addons/account_tax_include/i18n/sv.po
deleted file mode 100644
index 30a63ed1824..00000000000
--- a/addons/account_tax_include/i18n/sv.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-03 02:42+0000\n"
-"Last-Translator: mga (Open ERP) \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Felaktig XML för Vyarkitektur!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr ""
diff --git a/addons/account_tax_include/i18n/tlh.po b/addons/account_tax_include/i18n/tlh.po
deleted file mode 100644
index 334e888d03d..00000000000
--- a/addons/account_tax_include/i18n/tlh.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev_rc3\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-02-03 06:24+0000\n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr ""
diff --git a/addons/account_tax_include/i18n/tr.po b/addons/account_tax_include/i18n/tr.po
deleted file mode 100644
index a719aaf1b2b..00000000000
--- a/addons/account_tax_include/i18n/tr.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-09-09 06:58+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Görüntüleme mimarisi için Geçersiz XML"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "Fiyat Yöntemi"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "Vergiler dahil fiyat ve faturalar"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "KDV Dahil"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "KDV Hariç"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "Alt Toplam"
diff --git a/addons/account_tax_include/i18n/uk.po b/addons/account_tax_include/i18n/uk.po
deleted file mode 100644
index 8b467132fb9..00000000000
--- a/addons/account_tax_include/i18n/uk.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 15:16+0000\n"
-"Last-Translator: Eugene Babiy \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Неправильний XML для Архітектури Вигляду!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr ""
diff --git a/addons/account_tax_include/i18n/vi.po b/addons/account_tax_include/i18n/vi.po
deleted file mode 100644
index 055c2581901..00000000000
--- a/addons/account_tax_include/i18n/vi.po
+++ /dev/null
@@ -1,53 +0,0 @@
-# Vietnamese translation for openobject-addons
-# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-02 14:41+0000\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: Vietnamese \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr ""
diff --git a/addons/account_tax_include/i18n/zh_CN.po b/addons/account_tax_include/i18n/zh_CN.po
deleted file mode 100644
index b5ed33802ae..00000000000
--- a/addons/account_tax_include/i18n/zh_CN.po
+++ /dev/null
@@ -1,63 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-07-13 16:34+0000\n"
-"Last-Translator: Black Jack \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "无效XML视图结构!"
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr "价格规则"
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr "发票和含税价"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr "含税"
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr "不含税"
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr "含税价格计算代码"
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr "小计"
-
-#~ msgid ""
-#~ "Allow the user to work tax included prices.\n"
-#~ "Especially useful for b2c businesses.\n"
-#~ " \n"
-#~ "This module implement the modification on the invoice form.\n"
-#~ msgstr ""
-#~ "允许用户使用含税价格\n"
-#~ "特别适用于B2C商务\n"
-#~ "\n"
-#~ "这模块使发票的格式生效\n"
diff --git a/addons/account_tax_include/i18n/zh_TW.po b/addons/account_tax_include/i18n/zh_TW.po
deleted file mode 100644
index cc456963251..00000000000
--- a/addons/account_tax_include/i18n/zh_TW.po
+++ /dev/null
@@ -1,52 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_tax_include
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 5.0.4\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-01-30 12:43+0000\n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:00+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
-
-#. module: account_tax_include
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice,price_type:0
-msgid "Price method"
-msgstr ""
-
-#. module: account_tax_include
-#: model:ir.module.module,shortdesc:account_tax_include.module_meta_information
-msgid "Invoices and prices with taxes included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax included"
-msgstr ""
-
-#. module: account_tax_include
-#: selection:account.invoice,price_type:0
-msgid "Tax excluded"
-msgstr ""
-
-#. module: account_tax_include
-#: view:account.tax:0
-msgid "Compute Code for Taxes included prices"
-msgstr ""
-
-#. module: account_tax_include
-#: field:account.invoice.line,price_subtotal_incl:0
-msgid "Subtotal"
-msgstr ""
diff --git a/addons/account_tax_include/test/account_tax_include.yml b/addons/account_tax_include/test/account_tax_include.yml
deleted file mode 100644
index a4b0f8531b9..00000000000
--- a/addons/account_tax_include/test/account_tax_include.yml
+++ /dev/null
@@ -1,93 +0,0 @@
-
--
- Creating a tax record
--
- !record {model: account.tax, id: account_tax_a0}:
- amount: 0.10000000000000001
- applicable_type: 'true'
- company_id: base.main_company
- description: a
- name: a
- sequence: 1
- type: percent
- type_tax_use: all
-
--
- Creating a account invoice record with tax excluded
--
- !record {model: account.invoice, id: account_invoice_tax_exclude}:
- account_id: account.a_recv
- address_contact_id: base.res_partner_address_3000
- address_invoice_id: base.res_partner_address_3000
- company_id: base.main_company
- currency_id: base.EUR
- invoice_line:
- - account_id: account.a_sale
- name: '[PC1] Basic PC'
- price_unit: 100.0
- quantity: 1.0
- invoice_line_tax_id:
- - account_tax_a0
- product_id: product.product_product_pc1
- uos_id: product.product_uom_unit
- journal_id: account.sales_journal
- partner_id: base.res_partner_desertic_hispafuentes
- price_type: tax_excluded
- reference_type: none
-
--
- Performing an osv_memory action button_reset_taxes on module account.invoice
--
- !python {model: account.invoice}: |
- self.button_reset_taxes(cr, uid, [ref("account_invoice_tax_exclude")], {"lang": "en_US", "tz": False,
- "active_model": "ir.ui.menu", "active_ids": [ref("account.menu_action_invoice_tree1")],
- "type": "out_invoice", "active_id": ref("account.menu_action_invoice_tree1"),
- })
--
- Check if tax is excluded in invoice
--
- !assert {model: account.invoice, id: account_invoice_tax_exclude, severity: error, string: price type is tax excluded}:
- - state == "draft"
- - amount_untaxed == 100.0
- - amount_tax == 10.0
- - amount_total == 110.0
-
--
- Creating a account invoice record with tax include
--
- !record {model: account.invoice, id: account_invoice_tax_include}:
- account_id: account.a_recv
- address_contact_id: base.res_partner_address_3000
- address_invoice_id: base.res_partner_address_3000
- company_id: base.main_company
- currency_id: base.EUR
- invoice_line:
- - account_id: account.a_sale
- name: '[PC1] Basic PC'
- price_unit: 100.0
- quantity: 1.0
- invoice_line_tax_id:
- - account_tax_a0
- product_id: product.product_product_pc1
- uos_id: product.product_uom_unit
- journal_id: account.sales_journal
- partner_id: base.res_partner_desertic_hispafuentes
- price_type: tax_included
- reference_type: none
-
--
- Performing an osv_memory action button_reset_taxes on module account.invoice
--
- !python {model: account.invoice}: |
- self.button_reset_taxes(cr, uid, [ref("account_invoice_tax_include")], {"lang": "en_US", "tz": False,
- "active_model": "ir.ui.menu", "active_ids": [ref("account.menu_action_invoice_tree1")],
- "type": "out_invoice", "active_id": ref("account.menu_action_invoice_tree1"),
- })
--
- Check if tax is included in invoice
--
- !assert {model: account.invoice, id: account_invoice_tax_include, severity: error, string: price type is tax included}:
- - state == "draft"
- - amount_untaxed == 90.91
- - amount_tax == 9.09
- - amount_total == 100.00
\ No newline at end of file
diff --git a/addons/account_voucher/__openerp__.py b/addons/account_voucher/__openerp__.py
index 683cca2442e..ce5cd607332 100644
--- a/addons/account_voucher/__openerp__.py
+++ b/addons/account_voucher/__openerp__.py
@@ -22,7 +22,7 @@
{
"name" : "Accounting Voucher Entries",
"version" : "1.0",
- "author" : 'OpenERP SA & Axelor',
+ "author" : 'OpenERP SA',
"description": """Account Voucher module includes all the basic requirements of
Voucher Entries for Bank, Cash, Sales, Purchase, Expanse, Contra, etc...
* Voucher Entry
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index 6883a53b13f..a59b36a2736 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -257,10 +257,9 @@ class account_voucher(osv.osv):
total = 0.0
total_tax = 0.0
-
for line in line_ids:
line_amount = 0.0
- line_amount = line[2].get('amount')
+ line_amount = line[2] and line[2].get('amount',0.0) or 0.0
voucher_line_ids += [line[1]]
voucher_total += line_amount
@@ -573,7 +572,6 @@ class account_voucher(osv.osv):
move_pool = self.pool.get('account.move')
move_line_pool = self.pool.get('account.move.line')
currency_pool = self.pool.get('res.currency')
- bank_st_line_obj = self.pool.get('account.bank.statement.line')
tax_obj = self.pool.get('account.tax')
for inv in self.browse(cr, uid, ids):
if inv.move_id:
@@ -594,11 +592,6 @@ class account_voucher(osv.osv):
'period_id': inv.period_id and inv.period_id.id or False
}
move_id = move_pool.create(cr, uid, move)
- line_bank_ids = bank_st_line_obj.search(cr, uid, [('voucher_id', '=', inv.id)], context=context)
- if line_bank_ids:
- bank_st_line_obj.write(cr, uid, line_bank_ids, {
- 'move_ids': [(4, move_id, False)]
- })
#create the first line manually
company_currency = inv.journal_id.company_id.currency_id.id
@@ -868,13 +861,20 @@ class account_bank_statement(osv.osv):
def create_move_from_st_line(self, cr, uid, st_line_id, company_currency_id, next_number, context=None):
voucher_obj = self.pool.get('account.voucher')
wf_service = netsvc.LocalService("workflow")
- st_line = self.pool.get('account.bank.statement.line').browse(cr, uid, st_line_id, context=context)
+ bank_st_line_obj = self.pool.get('account.bank.statement.line')
+ st_line = bank_st_line_obj.browse(cr, uid, st_line_id, context=context)
if st_line.voucher_id:
voucher_obj.write(cr, uid, [st_line.voucher_id.id], {'number': next_number}, context=context)
if st_line.voucher_id.state == 'cancel':
voucher_obj.action_cancel_draft(cr, uid, [st_line.voucher_id.id], context=context)
wf_service.trg_validate(uid, 'account.voucher', st_line.voucher_id.id, 'proforma_voucher', cr)
- return self.pool.get('account.move.line').write(cr, uid, [x.id for x in st_line.voucher_id.move_ids], {'statement_id': st_line.statement_id.id}, context=context)
+
+ v = voucher_obj.browse(cr, uid, st_line.voucher_id.id, context=context)
+ bank_st_line_obj.write(cr, uid, [st_line_id], {
+ 'move_ids': [(4, v.move_id.id, False)]
+ })
+
+ return self.pool.get('account.move.line').write(cr, uid, [x.id for x in v.move_ids], {'statement_id': st_line.statement_id.id}, context=context)
return super(account_bank_statement, self).create_move_from_st_line(cr, uid, st_line.id, company_currency_id, next_number, context=context)
account_bank_statement()
@@ -916,4 +916,4 @@ class account_bank_statement_line(osv.osv):
self.pool.get('account.voucher').unlink(cr, uid, unlink_ids, context=context)
return super(account_bank_statement_line, self).unlink(cr, uid, ids, context=context)
-account_bank_statement_line()
\ No newline at end of file
+account_bank_statement_line()
diff --git a/addons/account_voucher/i18n/sr.po b/addons/account_voucher/i18n/sr.po
index abad7de54da..5c134d5bd0e 100644
--- a/addons/account_voucher/i18n/sr.po
+++ b/addons/account_voucher/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 14:35+0000\n"
+"PO-Revision-Date: 2010-10-17 17:33+0000\n"
"Last-Translator: zmmaj \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:55+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_voucher
diff --git a/addons/account_voucher/security/ir.model.access.csv b/addons/account_voucher/security/ir.model.access.csv
index b27392628f0..e2b048dcedd 100644
--- a/addons/account_voucher/security/ir.model.access.csv
+++ b/addons/account_voucher/security/ir.model.access.csv
@@ -4,6 +4,4 @@
"access_account_voucher_manager","account.voucher","model_account_voucher","account.group_account_manager",1,0,0,0
"access_account_voucher_line_manager","account.voucher.line","model_account_voucher_line","account.group_account_manager",1,0,0,0
"access_account_voucher_invoice","account.voucher invoice","model_account_voucher","account.group_account_invoice",1,1,1,1
-"access_account_voucher_system","account.voucher system","model_account_voucher","base.group_system",1,0,0,0
-"access_account_voucher_line_system","account.voucher.line.system","model_account_voucher_line","base.group_system",1,0,0,0
"access_account_voucher_line_invoice","account.voucher.line invoice","model_account_voucher_line","account.group_account_invoice",1,1,1,1
diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml
index 8169cac31e3..a8f827e7bb8 100644
--- a/addons/account_voucher/voucher_payment_receipt_view.xml
+++ b/addons/account_voucher/voucher_payment_receipt_view.xml
@@ -235,6 +235,7 @@
current
+ The supplier payment form allows you to track the payment you do to your suppliers. When you select a supplier, the payment method and an amount for the payment, OpenERP will propose to reconcile your payment with the open supplier invoices or bills.
@@ -342,6 +343,7 @@
current
+ Sales payment allows you to register the payments you receive from your customers. In order to record a payment, you must enter the customer, the payment method (=the journal) and the payment amount. OpenERP will propose to you automatically the reconciliation of this payment with the open invoices or sales receipts.
diff --git a/addons/account_voucher/voucher_sales_purchase_view.xml b/addons/account_voucher/voucher_sales_purchase_view.xml
index ad44b842587..ed6e98ad17d 100644
--- a/addons/account_voucher/voucher_sales_purchase_view.xml
+++ b/addons/account_voucher/voucher_sales_purchase_view.xml
@@ -172,6 +172,7 @@
current
+ When you sell products to a customer, you can give him a sales receipt or an invoice. When the sales receipt is confirmed, it creates journal items automatically and you can record the customer payment related to this sales receipt.
diff --git a/addons/analytic/i18n/sr.po b/addons/analytic/i18n/sr.po
index f2fc1ab5105..77fb1553933 100644
--- a/addons/analytic/i18n/sr.po
+++ b/addons/analytic/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2010-06-18 10:59+0000\n"
-"PO-Revision-Date: 2010-10-14 15:01+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 08:47+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: analytic
diff --git a/addons/analytic_journal_billing_rate/i18n/sr.po b/addons/analytic_journal_billing_rate/i18n/sr.po
index d65fb0fd7fb..cad00d3772c 100644
--- a/addons/analytic_journal_billing_rate/i18n/sr.po
+++ b/addons/analytic_journal_billing_rate/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 15:09+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 09:19+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: analytic_journal_billing_rate
diff --git a/addons/analytic_user_function/i18n/sr.po b/addons/analytic_user_function/i18n/sr.po
index ff890fa4c9e..846409dd53d 100644
--- a/addons/analytic_user_function/i18n/sr.po
+++ b/addons/analytic_user_function/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 15:16+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 09:40+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: analytic_user_function
diff --git a/addons/auction/auction_view.xml b/addons/auction/auction_view.xml
index 43de651e554..36a1b60096c 100644
--- a/addons/auction/auction_view.xml
+++ b/addons/auction/auction_view.xml
@@ -2,8 +2,8 @@
-
+ groups="group_auction_manager,group_auction_user"/>
+
@@ -82,7 +82,7 @@
+ id="menu_auction_object_cat" groups="group_auction_manager"/>
@@ -765,7 +765,7 @@
-
+
-
+
diff --git a/addons/auction/security/ir.model.access.csv b/addons/auction/security/ir.model.access.csv
index 31f3182fa04..5458e6c2ac3 100644
--- a/addons/auction/security/ir.model.access.csv
+++ b/addons/auction/security/ir.model.access.csv
@@ -18,15 +18,6 @@
"access_report_auction_adjudication","report.auction.adjudication","model_report_auction_adjudication","group_auction_manager",1,1,1,1
"access_report_object_encoded","report.object.encoded","model_report_object_encoded","group_auction_manager",1,1,1,1
"access_aie_category","aie.category","model_aie_category","group_auction_manager",1,1,1,1
-"access_auction_dates_system","auction.dates system","model_auction_dates","base.group_system",1,0,0,0
-"access_auction_lots_system","auction.lots system","model_auction_lots","base.group_system",1,0,0,0
-"access_auction_deposit_system","auction.deposit system","model_auction_deposit","base.group_system",1,0,0,0
-"access_auction_bid_system","auction.bid system","model_auction_bid","base.group_system",1,0,0,0
-"access_auction_artists_system","auction.artists system","model_auction_artists","base.group_system",1,1,1,1
-"access_auction_lot_category_system","auction.lot.category system","model_auction_lot_category","base.group_system",1,1,1,1
-"access_auction_lot_history_system","auction.lot.history system","model_auction_lot_history","base.group_system",1,0,0,0
-"access_auction_deposit_cost_system","auction.deposit.cost system","model_auction_deposit_cost","base.group_system",1,0,0,0
-"access_auction_bid_line_system","auction.bid.line system","model_auction_bid_line","base.group_system",1,0,0,0
"access_auction_account_tax","account.tax manager","account.model_account_tax","group_auction_manager",1,1,1,0
"access_auction_account_fiscalyear","account.fiscalyear manager","account.model_account_fiscalyear","group_auction_manager",1,1,1,0
"access_auction_account_journal","account.journal manager","account.model_account_journal","group_auction_manager",1,1,1,0
diff --git a/addons/audittrail/audittrail.py b/addons/audittrail/audittrail.py
index dd843449c8c..c2ef5f5d4a4 100644
--- a/addons/audittrail/audittrail.py
+++ b/addons/audittrail/audittrail.py
@@ -456,7 +456,7 @@ class audittrail_objects_proxy(osv_pool):
"""
Overrides Object Proxy execute method
@param db: the current database
- @param uid: the current user’s ID for security checks,
+ @param uid: the current user's ID for security checks,
@param object: Object who's values are being changed
@param method: get any method and create log
@@ -500,49 +500,47 @@ class audittrail_objects_proxy(osv_pool):
return self.log_fct(db, uid, model, method, fct_src, *args)
return fct_src(db, uid, model, method, *args)
- res = my_fct(db, uid, model, method, *args)
- cr.close()
- return res
-
+ try:
+ res = my_fct(db, uid, model, method, *args)
+ return res
+ finally:
+ cr.close()
def exec_workflow(self, db, uid, model, method, *args, **argv):
pool = pooler.get_pool(db)
- cr = pooler.get_db(db).cursor()
- cr.autocommit(True)
logged_uids = []
fct_src = super(audittrail_objects_proxy, self).exec_workflow
field = method
rule = False
model_pool = pool.get('ir.model')
rule_pool = pool.get('audittrail.rule')
- model_ids = model_pool.search(cr, uid, [('model', '=', model)])
- for obj_name in pool.obj_list():
- if obj_name == 'audittrail.rule':
- rule = True
- if not rule:
- cr.close()
- return super(audittrail_objects_proxy, self).exec_workflow(db, uid, model, method, *args, **argv)
- if not model_ids:
- cr.close()
- return super(audittrail_objects_proxy, self).exec_workflow(db, uid, model, method, *args, **argv)
+ cr = pooler.get_db(db).cursor()
+ cr.autocommit(True)
+ try:
+ model_ids = model_pool.search(cr, uid, [('model', '=', model)])
+ for obj_name in pool.obj_list():
+ if obj_name == 'audittrail.rule':
+ rule = True
+ if not rule:
+ return super(audittrail_objects_proxy, self).exec_workflow(db, uid, model, method, *args, **argv)
+ if not model_ids:
+ return super(audittrail_objects_proxy, self).exec_workflow(db, uid, model, method, *args, **argv)
- rule_ids = rule_pool.search(cr, uid, [('object_id', 'in', model_ids), ('state', '=', 'subscribed')])
- if not rule_ids:
- cr.close()
- return super(audittrail_objects_proxy, self).exec_workflow(db, uid, model, method, *args, **argv)
+ rule_ids = rule_pool.search(cr, uid, [('object_id', 'in', model_ids), ('state', '=', 'subscribed')])
+ if not rule_ids:
+ return super(audittrail_objects_proxy, self).exec_workflow(db, uid, model, method, *args, **argv)
- for thisrule in rule_pool.browse(cr, uid, rule_ids):
- for user in thisrule.user_id:
- logged_uids.append(user.id)
- if not logged_uids or uid in logged_uids:
- if thisrule.log_workflow:
- cr.close()
- return self.log_fct(db, uid, model, method, fct_src, *args)
+ for thisrule in rule_pool.browse(cr, uid, rule_ids):
+ for user in thisrule.user_id:
+ logged_uids.append(user.id)
+ if not logged_uids or uid in logged_uids:
+ if thisrule.log_workflow:
+ return self.log_fct(db, uid, model, method, fct_src, *args)
+ return super(audittrail_objects_proxy, self).exec_workflow(db, uid, model, method, *args, **argv)
+
+ return True
+ finally:
cr.close()
- return super(audittrail_objects_proxy, self).exec_workflow(db, uid, model, method, *args, **argv)
-
- cr.close()
- return True
audittrail_objects_proxy()
diff --git a/addons/audittrail/audittrail_view.xml b/addons/audittrail/audittrail_view.xml
index 218db24d89a..5fdcfcd5558 100644
--- a/addons/audittrail/audittrail_view.xml
+++ b/addons/audittrail/audittrail_view.xml
@@ -55,7 +55,7 @@
- Rules
+ Audit Rules
audittrail.rule
ir.actions.act_window
form
@@ -63,12 +63,8 @@
-
-
+ action="action_audittrail_rule_tree" parent="base.menu_audit" />
@@ -152,12 +148,12 @@
- Logs
+ Audit Logs
audittrail.log
form
+ action="action_audittrail_log_tree" parent="base.menu_audit" />
diff --git a/addons/audittrail/i18n/ru.po b/addons/audittrail/i18n/ru.po
index 9bc201a24c2..30a63c8c88d 100644
--- a/addons/audittrail/i18n/ru.po
+++ b/addons/audittrail/i18n/ru.po
@@ -7,19 +7,19 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-03 00:52+0000\n"
-"Last-Translator: mga (Open ERP) \n"
+"PO-Revision-Date: 2010-10-16 09:06+0000\n"
+"Last-Translator: Nikolay Chesnokov \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:13+0000\n"
+"X-Launchpad-Export-Date: 2010-10-17 04:53+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: audittrail
#: model:ir.module.module,shortdesc:audittrail.module_meta_information
msgid "Audit Trail"
-msgstr ""
+msgstr "Проведение аудита"
#. module: audittrail
#: constraint:ir.model:0
@@ -43,6 +43,8 @@ msgstr "Подписка"
#: view:audittrail.log:0
msgid "Old Value : "
msgstr ""
+"Старое значение.\\nпредставление пробела. Введите пробел в эквивалентную "
+"позицию перевода "
#. module: audittrail
#: selection:audittrail.log,method:0
@@ -52,7 +54,7 @@ msgstr "Создать"
#. module: audittrail
#: wizard_view:audittrail.view.log,init:0
msgid "Audit Logs"
-msgstr ""
+msgstr "Логи аудита"
#. module: audittrail
#: field:audittrail.rule,state:0
@@ -82,7 +84,7 @@ msgstr "Просмотреть журнал"
#. module: audittrail
#: model:ir.model,name:audittrail.model_audittrail_log_line
msgid "audittrail.log.line"
-msgstr ""
+msgstr "Строки лога аудита"
#. module: audittrail
#: field:audittrail.log,method:0
@@ -92,17 +94,17 @@ msgstr "Метод"
#. module: audittrail
#: wizard_field:audittrail.view.log,init,from:0
msgid "Log From"
-msgstr ""
+msgstr "Форма лога"
#. module: audittrail
#: field:audittrail.log.line,log:0
msgid "Log ID"
-msgstr ""
+msgstr "Идентификатор лога"
#. module: audittrail
#: field:audittrail.log,res_id:0
msgid "Resource Id"
-msgstr ""
+msgstr "Идентификатор записи"
#. module: audittrail
#: selection:audittrail.log,method:0
@@ -112,12 +114,12 @@ msgstr "Написать"
#. module: audittrail
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail
msgid "Audittrails"
-msgstr ""
+msgstr "Проведение аудита"
#. module: audittrail
#: view:audittrail.log:0
msgid "Log Lines"
-msgstr ""
+msgstr "Строки лога"
#. module: audittrail
#: view:audittrail.rule:0
@@ -138,17 +140,17 @@ msgstr "Объект"
#. module: audittrail
#: view:audittrail.rule:0
msgid "AuditTrail Rule"
-msgstr ""
+msgstr "Правила проведения аудита"
#. module: audittrail
#: wizard_field:audittrail.view.log,init,to:0
msgid "Log To"
-msgstr ""
+msgstr "Запись лога по"
#. module: audittrail
#: view:audittrail.log:0
msgid "New Value Text: "
-msgstr ""
+msgstr "Новое значение текста: "
#. module: audittrail
#: model:ir.module.module,description:audittrail.module_meta_information
@@ -158,6 +160,9 @@ msgid ""
" Subscribe Rules for read, write, create and delete on objects and check "
"logs"
msgstr ""
+"Позволяет администратору отслеживать операции каждого пользователя по всем "
+"объектам системы.\\nУстанавливает правила читать, писать, создавать и "
+"удалять на объектах и проверить журналы."
#. module: audittrail
#: field:audittrail.log,timestamp:0
@@ -172,7 +177,7 @@ msgstr "Пользователь"
#. module: audittrail
#: view:audittrail.log:0
msgid "Old Value Text : "
-msgstr ""
+msgstr "Старое значение текста: "
#. module: audittrail
#: constraint:ir.ui.view:0
@@ -187,12 +192,12 @@ msgstr "Название"
#. module: audittrail
#: field:audittrail.log,line_ids:0
msgid "Log lines"
-msgstr ""
+msgstr "Строги лога"
#. module: audittrail
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail_rule_tree_sub
msgid "Subscribed Rules"
-msgstr ""
+msgstr "Правила подписки"
#. module: audittrail
#: field:audittrail.log.line,field_id:0
@@ -202,12 +207,12 @@ msgstr "Поля"
#. module: audittrail
#: view:audittrail.rule:0
msgid "AuditTrail Rules"
-msgstr ""
+msgstr "Правила проведения аудита"
#. module: audittrail
#: model:ir.model,name:audittrail.model_audittrail_rule
msgid "audittrail.rule"
-msgstr ""
+msgstr "Правила аудита"
#. module: audittrail
#: view:audittrail.rule:0
@@ -217,17 +222,17 @@ msgstr "Отписаться"
#. module: audittrail
#: field:audittrail.rule,log_write:0
msgid "Log writes"
-msgstr ""
+msgstr "Записи лога"
#. module: audittrail
#: model:ir.model,name:audittrail.model_audittrail_log
msgid "audittrail.log"
-msgstr ""
+msgstr "Журнал проведения аудита"
#. module: audittrail
#: field:audittrail.log.line,field_description:0
msgid "Field Description"
-msgstr ""
+msgstr "Описание поля"
#. module: audittrail
#: selection:audittrail.log,method:0
@@ -237,12 +242,12 @@ msgstr "Удалить"
#. module: audittrail
#: wizard_button:audittrail.view.log,init,open:0
msgid "Open Logs"
-msgstr ""
+msgstr "Открыть лог"
#. module: audittrail
#: field:audittrail.log.line,new_value_text:0
msgid "New value Text"
-msgstr ""
+msgstr "Новое значение текста"
#. module: audittrail
#: field:audittrail.rule,name:0
@@ -252,7 +257,7 @@ msgstr "Название правила"
#. module: audittrail
#: field:audittrail.rule,log_read:0
msgid "Log reads"
-msgstr ""
+msgstr "Чтение лога"
#. module: audittrail
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail_log_tree
@@ -262,22 +267,22 @@ msgstr "Журналы"
#. module: audittrail
#: field:audittrail.log.line,new_value:0
msgid "New Value"
-msgstr ""
+msgstr "Новое значение"
#. module: audittrail
#: model:ir.ui.menu,name:audittrail.menu_action_log_tree2
msgid "View Logs"
-msgstr ""
+msgstr "Чтение лога"
#. module: audittrail
#: field:audittrail.rule,log_create:0
msgid "Log creates"
-msgstr ""
+msgstr "Созданные журналы"
#. module: audittrail
#: view:audittrail.log:0
msgid "AuditTrail Logs"
-msgstr ""
+msgstr "Логи проведения аудита"
#. module: audittrail
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail_rule_tree
@@ -287,7 +292,7 @@ msgstr "Правила"
#. module: audittrail
#: view:audittrail.log:0
msgid "New Value : "
-msgstr ""
+msgstr "Новое значение "
#. module: audittrail
#: field:audittrail.rule,user_id:0
@@ -297,7 +302,7 @@ msgstr "Пользователи"
#. module: audittrail
#: field:audittrail.log.line,old_value_text:0
msgid "Old value Text"
-msgstr ""
+msgstr "Старое значение текста"
#. module: audittrail
#: wizard_button:audittrail.view.log,init,end:0
@@ -307,4 +312,4 @@ msgstr "Отмена"
#. module: audittrail
#: field:audittrail.rule,log_unlink:0
msgid "Log deletes"
-msgstr ""
+msgstr "Удаленные логи"
diff --git a/addons/audittrail/security/ir.model.access.csv b/addons/audittrail/security/ir.model.access.csv
index ac367182f26..877cf622ad4 100644
--- a/addons/audittrail/security/ir.model.access.csv
+++ b/addons/audittrail/security/ir.model.access.csv
@@ -1,7 +1,4 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_audittrail_rule_group_system","audittrail rule system","model_audittrail_rule","base.group_system",1,1,1,1
-"access_audittrail_log_group_system","audittrail log system","model_audittrail_log","base.group_system",1,1,1,1
-"access_audittrail_logline_group_system","audittrail log line system","model_audittrail_log_line","base.group_system",1,1,1,1
"access_audittrail_rule_all_users","audittrail rule all","model_audittrail_rule","base.group_user",1,0,0,0
"access_audittrail_log_all_users","audittrail log all","model_audittrail_log","base.group_user",1,0,1,0
"access_audittrail_log_line_all_users","audittrail log line all","model_audittrail_log_line","base.group_user",1,0,1,0
diff --git a/addons/base_action_rule/base_action_rule_view.xml b/addons/base_action_rule/base_action_rule_view.xml
index 01951b3c9b8..cc8966316fd 100644
--- a/addons/base_action_rule/base_action_rule_view.xml
+++ b/addons/base_action_rule/base_action_rule_view.xml
@@ -114,6 +114,7 @@
form
tree,form
+ Create actions automatically triggered based on a user activity in the system.E.g.: an opportunity created by a specific user can be automatically maintained with a specific sales team, or an opportunity which still has status pending after 14 days triggers an automatic reminder email.
-
-
-
- [[repeatIn(o.move_lines,'line')]]
+ [[repeatIn(o.move_lines,'line')]]
@@ -211,8 +208,5 @@
-
-
-
-
+
\ No newline at end of file
diff --git a/addons/delivery/security/ir.model.access.csv b/addons/delivery/security/ir.model.access.csv
index 409fba3becd..52e60995519 100644
--- a/addons/delivery/security/ir.model.access.csv
+++ b/addons/delivery/security/ir.model.access.csv
@@ -6,6 +6,3 @@
"access_delivery_grid_manager","delivery.grid","model_delivery_grid","base.group_sale_manager",1,1,1,1
"access_delivery_grid_line_manager","delivery.grid.line","model_delivery_grid_line","base.group_sale_manager",1,1,1,1
"access_delivery_carrier_partner_manager","delivery.carrier partner_manager","model_delivery_carrier","base.group_partner_manager",1,0,0,0
-"access_delivery_carrier_stock_system","delivery.carrier stock_system","model_delivery_carrier","base.group_system",1,1,1,1
-"access_delivery_grid_system","delivery.grid.system","model_delivery_grid","base.group_system",1,1,1,1
-"access_delivery_grid_line_system","delivery.grid.line.system","model_delivery_grid_line","base.group_system",1,1,1,1
diff --git a/addons/document/__openerp__.py b/addons/document/__openerp__.py
index 16bbcd41c83..5741a7223e0 100644
--- a/addons/document/__openerp__.py
+++ b/addons/document/__openerp__.py
@@ -22,7 +22,7 @@
{
'name': 'Integrated Document Management System',
- 'version': '1.1',
+ 'version': '2.0',
'category': 'Generic Modules/Others',
'description': """This is a complete document management system:
* User Authentication
diff --git a/addons/document/content_index.py b/addons/document/content_index.py
index e3b37914f8c..df2b12b5456 100644
--- a/addons/document/content_index.py
+++ b/addons/document/content_index.py
@@ -21,11 +21,11 @@
import logging
import os
import tempfile
+from subprocess import Popen, PIPE
class NhException(Exception):
pass
-from subprocess import Popen, PIPE
class indexer(object):
""" An indexer knows how to parse the content of some file.
diff --git a/addons/document/dict_tools.py b/addons/document/dict_tools.py
new file mode 100644
index 00000000000..10d2fdc69f3
--- /dev/null
+++ b/addons/document/dict_tools.py
@@ -0,0 +1,57 @@
+# -*- encoding: utf-8 -*-
+# Copyright P. Christeas 2008-2010
+# Copyright 2010 OpenERP SA. http://www.openerp.com
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# as published by the Free Software Foundation; version 2 of the License.
+#
+# 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+###############################################################################
+
+
+def dict_merge(*dicts):
+ """ Return a dict with all values of dicts
+ """
+ res = {}
+ for d in dicts:
+ res.update(d)
+ return res
+
+def dict_merge2(*dicts):
+ """ Return a dict with all values of dicts.
+ If some key appears twice and contains iterable objects, the values
+ are merged (instead of overwritten).
+ """
+ res = {}
+ for d in dicts:
+ for k in d.keys():
+ if k in res and isinstance(res[k], (list, tuple)):
+ res[k] = res[k] + d[k]
+ elif k in res and isinstance(res[k], dict):
+ res[k].update(d[k])
+ else:
+ res[k] = d[k]
+ return res
+
+def dict_filter(srcdic, keys, res=None):
+ ''' Return a copy of srcdic that has only keys set.
+ If any of keys are missing from srcdic, the result won't have them,
+ either.
+ @param res If given, result will be updated there, instead of a new dict.
+ '''
+ if res is None:
+ res = {}
+ for k in keys:
+ if k in srcdic:
+ res[k] = srcdic[k]
+ return res
+
+#eof
diff --git a/addons/document/document.py b/addons/document/document.py
index 92a00f3222c..470d67c582b 100644
--- a/addons/document/document.py
+++ b/addons/document/document.py
@@ -28,6 +28,7 @@ import os
import tools
from tools.translate import _
import nodes
+import logging
DMS_ROOT_PATH = tools.config.get('document_path', os.path.join(tools.config['root_path'], 'filestore'))
@@ -106,7 +107,7 @@ class document_file(osv.osv):
'parent_id': __get_def_directory
}
_sql_constraints = [
- ('filename_uniq', 'unique (name,parent_id,res_id,res_model)', 'The file name must be unique !')
+ # filename_uniq is not possible in pure SQL
]
def _check_duplication(self, cr, uid, vals, ids=[], op='create'):
name = vals.get('name', False)
@@ -259,6 +260,9 @@ class document_file(osv.osv):
r = stor.prepare_unlink(cr, uid, storage_id, f)
if r:
unres.append(r)
+ else:
+ logging.getLogger('document').warning("Unlinking attachment #%s %s that has no storage",
+ f.id, f.name)
res = super(document_file, self).unlink(cr, uid, ids, context)
stor.do_unlink(cr, uid, unres)
return res
diff --git a/addons/document/document_data.xml b/addons/document/document_data.xml
index f13213034e8..ef829b6e258 100644
--- a/addons/document/document_data.xml
+++ b/addons/document/document_data.xml
@@ -11,12 +11,12 @@
Database storage
db
-
+
Documents
-
+
0
@@ -24,7 +24,7 @@
My Folder
-
+
0
@@ -37,7 +37,7 @@
0
-
+
@@ -46,7 +46,7 @@
[('category_id','in',[active_id])]
-
+
0
@@ -62,7 +62,7 @@
Products
-
+
0
@@ -70,7 +70,7 @@
Sales Order
-
+
0
@@ -78,7 +78,7 @@
All Sales Order
-
+
0
@@ -86,7 +86,7 @@
Quotations
-
+
0
@@ -94,7 +94,7 @@
Projects
-
+
0
diff --git a/addons/document/document_directory.py b/addons/document/document_directory.py
index 47cea1e86bf..9b7ba18b16f 100644
--- a/addons/document/document_directory.py
+++ b/addons/document/document_directory.py
@@ -125,6 +125,10 @@ class document_directory(osv.osv):
def get_full_path(self, cr, uid, dir_id, context=None):
""" Return the full path to this directory, in a list, root first
"""
+ if isinstance(dir_id, (tuple, list)):
+ assert len(dir_id) == 1
+ dir_id = dir_id[0]
+
def _parent(dir_id, path):
parent=self.browse(cr, uid, dir_id)
if parent.parent_id and not parent.ressource_parent_type_id:
@@ -174,6 +178,39 @@ class document_directory(osv.osv):
return nodes.get_node_context(cr, uid, context).get_uri(cr, uri)
+ def get_node_class(self, cr, uid, ids, dbro=None, dynamic=False, context=None):
+ """Retrieve the class of nodes for this directory
+
+ This function can be overriden by inherited classes ;)
+ @param dbro The browse object, if caller already has it
+ """
+ if dbro is None:
+ dbro = self.browse(cr, uid, ids, context=context)
+
+ if dynamic:
+ assert dbro.type == 'directory'
+ return nodes.node_res_obj
+ elif dbro.type == 'directory':
+ return nodes.node_dir
+ elif dbro.type == 'ressource':
+ return nodes.node_res_dir
+ else:
+ raise ValueError("dir node for %s type", dbro.type)
+
+ def _prepare_context(self, cr, uid, nctx, context):
+ """ Fill nctx with properties for this database
+ @param nctx instance of nodes.node_context, to be filled
+ @param context ORM context (dict) for us
+
+ Note that this function is called *without* a list of ids,
+ it should behave the same for the whole database (based on the
+ ORM instance of document.directory).
+
+ Some databases may override this and attach properties to the
+ node_context. See WebDAV, CalDAV.
+ """
+ return
+
def get_dir_permissions(self, cr, uid, ids ):
"""Check what permission user 'uid' has on directory 'id'
"""
@@ -215,6 +252,7 @@ class document_directory(osv.osv):
name=directory.name
if not parent_id:
parent_id=directory.parent_id and directory.parent_id.id or False
+ # TODO fix algo
if not ressource_parent_type_id:
ressource_parent_type_id=directory.ressource_parent_type_id and directory.ressource_parent_type_id.id or False
if not ressource_id:
@@ -235,8 +273,11 @@ class document_directory(osv.osv):
def create(self, cr, uid, vals, context=None):
if not self._check_duplication(cr, uid, vals):
raise osv.except_osv(_('ValidateError'), _('Directory name must be unique!'))
- if vals.get('name',False) and (vals.get('name').find('/')+1 or vals.get('name').find('@')+1 or vals.get('name').find('$')+1 or vals.get('name').find('#')+1) :
- raise osv.except_osv(_('ValidateError'), _('Directory name contains special characters!'))
+ newname = vals.get('name',False)
+ if newname:
+ for illeg in ('/', '@', '$', '#'):
+ if illeg in newname:
+ raise osv.except_osv(_('ValidateError'), _('Directory name contains special characters!'))
return super(document_directory,self).create(cr, uid, vals, context)
# TODO def unlink(...
@@ -255,7 +296,7 @@ class document_directory_dctx(osv.osv):
_name = 'document.directory.dctx'
_description = 'Directory Dynamic Context'
_columns = {
- 'dir_id': fields.many2one('document.directory', 'Directory', required=True),
+ 'dir_id': fields.many2one('document.directory', 'Directory', required=True, ondelete="cascade"),
'field': fields.char('Field', size=20, required=True, select=1, help="The name of the field. Note that the prefix \"dctx_\" will be prepended to what is typed here."),
'expr': fields.char('Expression', size=64, required=True, help="A python expression used to evaluate the field.\n" + \
"You can use 'dir_id' for current dir, 'res_id', 'res_model' as a reference to the current record, in dynamic folders"),
diff --git a/addons/document/document_view.xml b/addons/document/document_view.xml
index 840c8a4c9e1..e5719705ebe 100644
--- a/addons/document/document_view.xml
+++ b/addons/document/document_view.xml
@@ -277,7 +277,7 @@
-
+
IR Attachment0
ir.attachment
@@ -296,9 +296,9 @@
-
+
IR Attachment2
ir.attachment
search
@@ -307,12 +307,14 @@
+
ir.attachment
ir.attachment
diff --git a/addons/document/i18n/sr.po b/addons/document/i18n/sr.po
new file mode 100644
index 00000000000..51ba09ec5dd
--- /dev/null
+++ b/addons/document/i18n/sr.po
@@ -0,0 +1,653 @@
+# Serbian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-08-28 16:01+0000\n"
+"PO-Revision-Date: 2010-10-17 07:58+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Serbian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:55+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: document
+#: field:document.directory,create_date:0
+msgid "Date Created"
+msgstr "Datum kreiranja"
+
+#. module: document
+#: field:document.directory,ressource_id:0
+msgid "Resource ID"
+msgstr "Šifra resursa"
+
+#. module: document
+#: field:document.directory.content,include_name:0
+msgid "Include Record Name"
+msgstr "Uključi naziv zapisa"
+
+#. module: document
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !"
+
+#. module: document
+#: field:ir.actions.report.xml,model_id:0
+msgid "Model Id"
+msgstr "ID modela"
+
+#. module: document
+#: constraint:document.directory:0
+msgid "Error! You can not create recursive Directories."
+msgstr "Greška! Ne možete kreirati rekurzivne direktorijume."
+
+#. module: document
+#: model:ir.ui.menu,name:document.menu_document_configuration
+msgid "Document Configuration"
+msgstr "Podesavanja Dokumenta"
+
+#. module: document
+#: view:ir.attachment:0
+msgid "Preview"
+msgstr "Pregled"
+
+#. module: document
+#: field:ir.attachment,store_method:0
+msgid "Storing Method"
+msgstr "Metoda cuvanja"
+
+#. module: document
+#: model:ir.actions.act_window,name:document.action_config_auto_directory
+msgid "Auto Configure Directory"
+msgstr "Auto Podesavanje Direktorijuma"
+
+#. module: document
+#: field:ir.attachment,file_size:0
+msgid "File Size"
+msgstr "Veličina Datoteke"
+
+#. module: document
+#: help:document.directory.content,include_name:0
+msgid ""
+"Check this field if you want that the name of the file start by the record "
+"name."
+msgstr ""
+"Uključite ovu opciju ako želite da naziv datoteke počinje s nazivom zapisa"
+
+#. module: document
+#: selection:document.directory,type:0
+msgid "Other Resources"
+msgstr "Drugi resursi"
+
+#. module: document
+#: field:document.directory,ressource_parent_type_id:0
+msgid "Parent Model"
+msgstr "Roditeljski Model"
+
+#. module: document
+#: view:document.configuration.wizard:0
+msgid "Document Management System."
+msgstr "Sistem za Upravljanje Dokumentima"
+
+#. module: document
+#: view:ir.attachment:0
+msgid "Attachment"
+msgstr "Dodatak"
+
+#. module: document
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Pogrešno ime modela u definiciji akcije."
+
+#. module: document
+#: selection:document.directory,type:0
+msgid "Static Directory"
+msgstr "Statički Direktorijum"
+
+#. module: document
+#: model:ir.model,name:document.model_document_directory_content_type
+msgid "Directory Content Type"
+msgstr "Tip sadržaja Direktoriuma"
+
+#. module: document
+#: help:document.directory,domain:0
+msgid ""
+"Use a domain if you want to apply an automatic filter on visible resources."
+msgstr ""
+"Koristite domen ako želite postaviti automatski filter nad vidljivim "
+"resursima"
+
+#. module: document
+#: help:document.directory,ressource_tree:0
+msgid ""
+"Check this if you want to use the same tree structure as the object selected "
+"in the system."
+msgstr ""
+"Odaberite ovu opciju ako želite koristiti istu strukturu stabla kao odabrani "
+"objekat sistema."
+
+#. module: document
+#: field:document.directory,type:0
+msgid "Type"
+msgstr "Tip"
+
+#. module: document
+#: model:ir.actions.act_window,name:document.action_document_directory_tree
+#: model:ir.ui.menu,name:document.menu_document_directories_tree
+msgid "Directorie's Structure"
+msgstr "Struktura Direktorijuma"
+
+#. module: document
+#: field:document.directory,parent_id:0
+msgid "Parent Item"
+msgstr "Roditeljska Stavka"
+
+#. module: document
+#: view:ir.attachment:0
+msgid "File Information"
+msgstr "Informacije o Fajlu"
+
+#. module: document
+#: field:document.directory,file_ids:0
+#: view:ir.attachment:0
+msgid "Files"
+msgstr "Fajlovi"
+
+#. module: document
+#: field:ir.attachment,store_fname:0
+msgid "Stored Filename"
+msgstr "Sacuvano IMe Fajla"
+
+#. module: document
+#: field:document.directory,write_uid:0
+#: field:ir.attachment,write_uid:0
+msgid "Last Modification User"
+msgstr "Korisnik poslednje promene"
+
+#. module: document
+#: view:document.configuration.wizard:0
+msgid "Configure"
+msgstr "Podesi"
+
+#. module: document
+#: field:document.directory,ressource_tree:0
+msgid "Tree Structure"
+msgstr "Struktura Stabla"
+
+#. module: document
+#: field:ir.attachment,title:0
+msgid "Resource Title"
+msgstr "Naslov resursa"
+
+#. module: document
+#: model:ir.actions.todo,note:document.config_auto_directory
+msgid ""
+"This wizard will configure the URL of the server of the document management "
+"system."
+msgstr ""
+"Ovaj ćecarobnjak podesiti URL server sistema za upravljanje dokumentima."
+
+#. module: document
+#: model:ir.model,name:document.model_document_directory_content
+msgid "Directory Content"
+msgstr "Sadržaj Direktorijuma"
+
+#. module: document
+#: help:document.directory,ressource_parent_type_id:0
+msgid ""
+"If you put an object here, this directory template will appear bellow all of "
+"these objects. Don't put a parent directory if you select a parent model."
+msgstr ""
+"Ako ovdje postavite objekt, predložak ove mape će biti prikazan ispod svih "
+"takvih objekata. Nemojte postaviti mapu roditelja ako odabirete model "
+"roditelja."
+
+#. module: document
+#: model:ir.ui.menu,name:document.menu_document
+msgid "Document Management"
+msgstr "Upravljanje Dokumentima"
+
+#. module: document
+#: selection:ir.attachment,store_method:0
+msgid "Link"
+msgstr "Veza"
+
+#. module: document
+#: view:document.directory:0
+msgid "Directory Type"
+msgstr "Tip Direktorijuma"
+
+#. module: document
+#: field:document.directory,group_ids:0
+#: field:ir.attachment,group_ids:0
+msgid "Groups"
+msgstr "Grupe"
+
+#. module: document
+#: field:document.directory.content,report_id:0
+msgid "Report"
+msgstr "Izveštaj"
+
+#. module: document
+#: help:document.configuration.wizard,host:0
+msgid ""
+"Put here the server address or IP. Keep localhost if you don't know what to "
+"write."
+msgstr ""
+"Ovdje upišite adresu servera ili IP adresu. Ostavite localhost ako ne znate "
+"šta da napisete."
+
+#. module: document
+#: view:document.configuration.wizard:0
+msgid ""
+"This wizard will automatically configure the document management system "
+"according to modules installed on your system."
+msgstr ""
+"Ovaj Carobnjak će automatski postaviti sistem za upravljanje dokumentima "
+"ovisno o modulima koji su instalirani na vašem sistemu."
+
+#. module: document
+#: view:ir.attachment:0
+msgid "Data"
+msgstr "Podaci"
+
+#. module: document
+#: view:ir.attachment:0
+msgid "Notes"
+msgstr "Napomene"
+
+#. module: document
+#: view:ir.attachment:0
+#: field:ir.attachment,index_content:0
+msgid "Indexed Content"
+msgstr "Indeksirani sadržaj"
+
+#. module: document
+#: view:document.directory:0
+msgid "Definition"
+msgstr "Definicija"
+
+#. module: document
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Nevažeći XML za pregled arhitekture"
+
+#. module: document
+#: model:ir.module.module,description:document.module_meta_information
+msgid ""
+"This is a complete document management system:\n"
+" * FTP Interface\n"
+" * User Authentication\n"
+" * Document Indexation\n"
+msgstr ""
+"Ovo je kompletni sistem za upravljanje dokumentima:\n"
+"* FTP interfejs\n"
+"* Autentifikacija korisnika\n"
+"* Indeksiranje dokumenata\n"
+
+#. module: document
+#: field:document.directory,name:0
+msgid "Name"
+msgstr "Ime"
+
+#. module: document
+#: field:document.directory.content.type,code:0
+msgid "Extension"
+msgstr "Ekstenzija"
+
+#. module: document
+#: selection:ir.attachment,store_method:0
+msgid "Database"
+msgstr "Baza Podataka"
+
+#. module: document
+#: field:document.directory,content_ids:0
+msgid "Virtual Files"
+msgstr "Virtualne datoteke"
+
+#. module: document
+#: view:document.directory:0
+#: model:ir.ui.menu,name:document.menu_document_directories
+msgid "Directories"
+msgstr "Direktorijumi"
+
+#. module: document
+#: view:document.directory:0
+msgid "Seq."
+msgstr "Sekv."
+
+#. module: document
+#: model:ir.module.module,shortdesc:document.module_meta_information
+msgid "Integrated Document Management System"
+msgstr "Integrisani sistem za upravljanje dokumentima"
+
+#. module: document
+#: field:document.directory.content,directory_id:0
+#: field:ir.attachment,parent_id:0
+msgid "Directory"
+msgstr "Direktorijum"
+
+#. module: document
+#: field:document.directory,user_id:0
+#: field:ir.attachment,user_id:0
+msgid "Owner"
+msgstr "Vlasnik"
+
+#. module: document
+#: model:ir.model,name:document.model_document_configuration_wizard
+msgid "document.configuration.wizard"
+msgstr "document.configuration.wizard"
+
+#. module: document
+#: view:ir.attachment:0
+msgid "Attached To"
+msgstr "Pridruženo"
+
+#. module: document
+#: selection:ir.attachment,store_method:0
+msgid "Filesystem"
+msgstr "Fajl sistem"
+
+#. module: document
+#: field:document.directory,file_type:0
+#: field:document.directory.content.type,name:0
+#: field:ir.attachment,file_type:0
+msgid "Content Type"
+msgstr "Tip Sadrzaja"
+
+#. module: document
+#: view:document.directory:0
+#: view:ir.attachment:0
+msgid "Security"
+msgstr "Bezbednost"
+
+#. module: document
+#: model:ir.ui.menu,name:document.menu_document_browse
+msgid "Browse Files Using FTP"
+msgstr "Pregledaj datoteke koristeći FTP"
+
+#. module: document
+#: field:document.directory,ressource_type_id:0
+msgid "Directories Mapped to Objects"
+msgstr "Direktorijumi vezani uz objekte"
+
+#. module: document
+#: view:ir.attachment:0
+msgid "History"
+msgstr "Istorija"
+
+#. module: document
+#: help:document.directory,ressource_type_id:0
+msgid ""
+"Select an object here and Open ERP will create a mapping for each of these "
+"objects, using the given domain, when browsing through FTP."
+msgstr ""
+"Ovdje odaberite objekt i Open ERP će uspostaviti mapiranje za svaki od ovih "
+"objekata, koristeći zadani domen, prilikom predleda kroz FTP."
+
+#. module: document
+#: view:ir.attachment:0
+msgid "Others Info"
+msgstr "Ostale informacije"
+
+#. module: document
+#: field:document.directory,domain:0
+msgid "Domain"
+msgstr "Domen"
+
+#. module: document
+#: field:document.directory,write_date:0
+#: field:ir.attachment,write_date:0
+msgid "Date Modified"
+msgstr "Datum Izmene"
+
+#. module: document
+#: field:document.directory.content,suffix:0
+msgid "Suffix"
+msgstr "Sufiks"
+
+#. module: document
+#: field:document.configuration.wizard,host:0
+msgid "Server Address"
+msgstr "Adresa Servera"
+
+#. module: document
+#: model:ir.actions.url,name:document.action_document_browse
+msgid "Browse Files"
+msgstr "Pretraži Fajlove"
+
+#. module: document
+#: field:document.directory.content,name:0
+msgid "Content Name"
+msgstr "Naziv sadržaja"
+
+#. module: document
+#: model:ir.model,name:document.model_document_directory
+#: field:process.node,directory_id:0
+msgid "Document directory"
+msgstr "Direktorijum dokumenta"
+
+#. module: document
+#: field:document.directory,create_uid:0
+msgid "Creator"
+msgstr "Kreator"
+
+#. module: document
+#: view:document.directory:0
+msgid "Auto-Generated Files"
+msgstr "Auto-Generisani Fajlovi"
+
+#. module: document
+#: field:document.directory.content,sequence:0
+msgid "Sequence"
+msgstr "Sekvenca"
+
+#. module: document
+#: model:ir.ui.menu,name:document.menu_document_files
+msgid "Search a File"
+msgstr ""
+
+#. module: document
+#: view:document.configuration.wizard:0
+msgid "Auto Configure"
+msgstr "Auto Podesavanje"
+
+#. module: document
+#: view:document.configuration.wizard:0
+msgid "Cancel"
+msgstr "Откажи"
+
+#. module: document
+#: field:ir.attachment,partner_id:0
+msgid "Partner"
+msgstr "Partner"
+
+#. module: document
+#: view:document.directory:0
+msgid "PDF Report"
+msgstr "PDF izveštaj"
+
+#. module: document
+#: field:document.directory.content,extension:0
+msgid "Document Type"
+msgstr "Tip Dokumenta"
+
+#. module: document
+#: field:document.directory,child_ids:0
+msgid "Children"
+msgstr "Podređeni"
+
+#. module: document
+#: view:document.directory:0
+msgid "Contents"
+msgstr "Sadržaj"
+
+#. module: document
+#: model:ir.actions.act_window,name:document.action_view_files_by_partner
+msgid "Files Per Month"
+msgstr "Falova za Mesec"
+
+#. module: document
+#: model:ir.actions.act_window,name:document.action_view_wall
+#: model:ir.ui.menu,name:document.menu_action_view_my_document_report_shame
+#: view:report.document.wall:0
+msgid "Wall of Shame"
+msgstr "Zid Srama"
+
+#. module: document
+#: model:ir.model,name:document.model_report_files_partner
+msgid "Files details by Partners"
+msgstr "Detalji Fajlova po Partneru"
+
+#. module: document
+#: model:ir.ui.menu,name:document.menu_action_view_my_document_report_all
+msgid "All Months"
+msgstr "Svi meseci"
+
+#. module: document
+#: model:ir.ui.menu,name:document.menu_action_view_my_document_report_all_myfile
+#: model:ir.ui.menu,name:document.menu_action_view_my_document_report_this_myfile
+msgid "My files"
+msgstr "Moji Fajlovi"
+
+#. module: document
+#: view:report.document.user:0
+msgid "Files by users"
+msgstr "Fajlovi po Korisniku"
+
+#. module: document
+#: view:report.files.partner:0
+msgid "Files per Month"
+msgstr "Fajlova za Mesec"
+
+#. module: document
+#: model:ir.actions.act_window,name:document.action_view_my_document_tree1
+msgid "My files (All months)"
+msgstr "Moji Fajlovi (svi Meseci)"
+
+#. module: document
+#: field:report.document.wall,file_name:0
+msgid "Last Posted File Name"
+msgstr "Zadnje postavljeno Ime Fajla"
+
+#. module: document
+#: model:ir.ui.menu,name:document.menu_action_view_my_document_report
+msgid "Reporting"
+msgstr "Izveštavanje"
+
+#. module: document
+#: model:ir.model,name:document.model_report_document_wall
+msgid "Users that did not inserted documents since one month"
+msgstr "Korisnici koji jedan celi mjesec nisu unijeli Dokument"
+
+#. module: document
+#: view:report.files.partner:0
+msgid "Files By Partner"
+msgstr "Fajlovi po Partneru"
+
+#. module: document
+#: model:ir.ui.menu,name:document.menu_action_view_my_document_report_this
+msgid "This Month"
+msgstr "Ovog meseca"
+
+#. module: document
+#: field:report.document.user,user:0 field:report.document.wall,user:0
+msgid "User"
+msgstr "Korisnik"
+
+#. module: document
+#: model:ir.ui.menu,name:document.menu_action_view_my_document_report_all_userfile
+#: model:ir.ui.menu,name:document.menu_action_view_my_document_report_this_userfile
+msgid "All Users files"
+msgstr "Svi Korisnikovi fajlovi"
+
+#. module: document
+#: model:ir.actions.act_window,name:document.action_view_my_document_tree
+msgid "My files (This months)"
+msgstr "Moji Fajlovi(Ovaj Mesec)"
+
+#. module: document
+#: model:ir.model,name:document.model_report_document_user
+msgid "Files details by Users"
+msgstr "Detalji fajlova po Korisnicima"
+
+#. module: document
+#: field:report.document.file,nbr:0 field:report.document.user,nbr:0
+#: field:report.files.partner,nbr:0
+msgid "# of Files"
+msgstr "# Fajlova"
+
+#. module: document
+#: model:ir.actions.act_window,name:document.action_view_user_graph
+msgid "Files By Users"
+msgstr "Fajlovi po Korisnicima"
+
+#. module: document
+#: model:ir.module.module,shortdesc:report_document.module_meta_information
+msgid "Document Management - Reporting"
+msgstr "Upravljanje Dokumentima - Izveštavanje"
+
+#. module: document
+#: model:ir.actions.act_window,name:document.action_view_all_document_tree1
+msgid "All Users files (All months)"
+msgstr "Fajlovi svih Korisnika (Svi meseci)"
+
+#. module: document
+#: model:ir.model,name:document.model_report_document_file
+msgid "Files details by Directory"
+msgstr "Detalji Fajlova po Direktorijumu"
+
+#. module: document
+#: field:report.document.user,change_date:0
+#: field:report.files.partner,change_date:0
+msgid "Modified Date"
+msgstr "Izmjenjen Datum"
+
+#. module: document
+#: model:ir.actions.act_window,name:document.action_view_size_month
+#: view:report.document.file:0
+msgid "File Size by Month"
+msgstr "Veličina fajlova po Mesecu"
+
+#. module: document
+#: field:report.document.user,file_title:0
+#: field:report.files.partner,file_title:0
+msgid "File Name"
+msgstr "Ime fajla"
+
+#. module: document
+#: field:report.document.file,month:0 field:report.document.user,month:0
+#: field:report.document.user,name:0 field:report.document.wall,month:0
+#: field:report.document.wall,name:0 field:report.files.partner,name:0
+msgid "Month"
+msgstr "Mesec"
+
+#. module: document
+#: model:ir.actions.act_window,name:document.action_view_files_by_month_graph
+#: view:report.document.user:0
+msgid "Files by Month"
+msgstr "Fajlovi po Mesecu"
+
+#. module: document
+#: model:ir.actions.act_window,name:document.action_view_document_by_resourcetype_graph
+#: view:report.document.user:0
+msgid "Files by Resource Type"
+msgstr "Fajlovi po Tipu Izvora"
+
+#. module: document
+#: model:ir.actions.act_window,name:document.action_view_all_document_tree
+msgid "All Users files (This month)"
+msgstr "Svi Korisnicki Fajlovi ( Ovaj Mesec)"
+
+#. module: document
+#: field:report.document.wall,last:0
+msgid "Last Posted Time"
+msgstr "Zadnje postavljeno Vrijeme"
diff --git a/addons/document/nodes.py b/addons/document/nodes.py
index b849396498d..68220885dff 100644
--- a/addons/document/nodes.py
+++ b/addons/document/nodes.py
@@ -61,16 +61,27 @@ def get_node_context(cr, uid, context):
return node_context(cr, uid, context)
class node_context(object):
- """ This is the root node, representing access to some particular
- context """
+ """ This is the root node, representing access to some particular context
+
+ A context is a set of persistent data, which may influence the structure
+ of the nodes. All other transient information during a data query should
+ be passed down with function arguments.
+ """
cached_roots = {}
+ node_file_class = None
def __init__(self, cr, uid, context=None):
self.dbname = cr.dbname
self.uid = uid
self.context = context
+ if context is None:
+ context = {}
+ context['uid'] = uid
self._dirobj = pooler.get_pool(cr.dbname).get('document.directory')
+ self.node_file_class = node_file
+ self.extra_ctx = {} # Extra keys for context, that do _not_ trigger inequality
assert self._dirobj
+ self._dirobj._prepare_context(cr, uid, self, context=context)
self.rootdir = False #self._dirobj._get_root_directory(cr,uid,context)
def __eq__(self, other):
@@ -88,10 +99,14 @@ class node_context(object):
def __ne__(self, other):
return not self.__eq__(other)
+
+ def get(self, name, default=None):
+ return self.context.get(name, default)
def get_uri(self, cr, uri):
""" Although this fn passes back to doc.dir, it is needed since
- it is a potential caching point """
+ it is a potential caching point.
+ """
(ndir, duri) = self._dirobj._locate_child(cr, self.uid, self.rootdir, uri, None, self)
while duri:
ndir = ndir.child(cr, duri[0])
@@ -104,14 +119,10 @@ class node_context(object):
"""Create (or locate) a node for a directory
@param dbro a browse object of document.directory
"""
- fullpath = self._dirobj.get_full_path(cr, self.uid, dbro.id, self.context)
- if dbro.type == 'directory':
- return node_dir(fullpath, None ,self, dbro)
- elif dbro.type == 'ressource':
- assert dbro.ressource_parent_type_id == False
- return node_res_dir(fullpath, None, self, dbro)
- else:
- raise ValueError("dir node for %s type", dbro.type)
+
+ fullpath = dbro.get_full_path(context=self.context)
+ klass = dbro.get_node_class(dbro, context=self.context)
+ return klass(fullpath, None ,self, dbro)
def get_file_node(self, cr, fbro):
""" Create or locate a node for a static file
@@ -121,7 +132,7 @@ class node_context(object):
if fbro.parent_id:
parent = self.get_dir_node(cr, fbro.parent_id)
- return node_file(fbro.name, parent, self, fbro)
+ return self.node_file_class(fbro.name, parent, self, fbro)
class node_descriptor(object):
@@ -266,22 +277,24 @@ class node_class(object):
""" Get a tag, unique per object + modification.
see. http://tools.ietf.org/html/rfc2616#section-13.3.3 """
- return self._get_ttag(cr) + ':' + self._get_wtag(cr)
+ return '"%s-%s"' % (self._get_ttag(cr), self._get_wtag(cr))
def _get_wtag(self, cr):
""" Return the modification time as a unique, compact string """
- return str(_str2time(self.write_date))
+ return str(_str2time(self.write_date)).replace('.','')
- def _get_ttag(self,cr):
+ def _get_ttag(self, cr):
""" Get a unique tag for this type/id of object.
Must be overriden, so that each node is uniquely identified.
"""
print "node_class.get_ttag()",self
- raise NotImplementedError("get_etag stub()")
+ raise NotImplementedError("get_ttag stub()")
def get_dav_props(self, cr):
""" If this class has special behaviour for GroupDAV etc, export
its capabilities """
+ # This fn is placed here rather than WebDAV, because we want the
+ # baseclass methods to apply to all node subclasses
return self.DAV_PROPS or {}
def match_dav_eprop(self, cr, match, ns, prop):
@@ -438,22 +451,20 @@ class node_database(node_class):
if not domain:
domain = []
- where2 = where + domain + [('type', '=', 'directory')]
+ where2 = where + domain + ['|', ('type', '=', 'directory'), \
+ '&', ('type', '=', 'ressource'), ('ressource_parent_type_id','=',False)]
ids = dirobj.search(cr, uid, where2, context=ctx)
res = []
for dirr in dirobj.browse(cr, uid, ids, context=ctx):
- res.append(node_dir(dirr.name, self, self.context,dirr))
-
- where2 = where + domain + [('type', '=', 'ressource'), ('ressource_parent_type_id','=',False)]
- ids = dirobj.search(cr, uid, where2, context=ctx)
- for dirr in dirobj.browse(cr, uid, ids, context=ctx):
- res.append(node_res_dir(dirr.name, self, self.context, dirr))
+ klass = dirr.get_node_class(dirr, context=ctx)
+ res.append(klass(dirr.name, self, self.context,dirr))
fil_obj = dirobj.pool.get('ir.attachment')
ids = fil_obj.search(cr, uid, where, context=ctx)
if ids:
for fil in fil_obj.browse(cr, uid, ids, context=ctx):
- res.append(node_file(fil.name, self, self.context, fil))
+ klass = self.context.node_file_class
+ res.append(klass(fil.name, self, self.context, fil))
return res
def _file_get(self,cr, nodename=False):
@@ -463,9 +474,6 @@ class node_database(node_class):
def _get_ttag(self,cr):
return 'db-%s' % cr.dbname
- def get_dav_resourcetype(self, cr):
- return ('collection', 'DAV:')
-
def mkdosname(company_name, default='noname'):
""" convert a string to a dos-like name"""
if not company_name:
@@ -492,7 +500,10 @@ class node_dir(node_database):
self.write_date = dirr and (dirr.write_date or dirr.create_date) or False
self.content_length = 0
self.unixperms = 040750
- self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody'
+ try:
+ self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody'
+ except Exception:
+ self.uuser = 'nobody'
self.ugroup = mkdosname(dirr.company_id and dirr.company_id.name, default='nogroup')
self.uidperms = dirr.get_dir_permissions()
if dctx:
@@ -505,7 +516,7 @@ class node_dir(node_database):
for dfld in dirr.dctx_ids:
try:
self.dctx['dctx_' + dfld.field] = safe_eval(dfld.expr,dc2)
- except Exception,e:
+ except Exception:
print "Cannot eval %s" % dfld.expr
print e
pass
@@ -670,12 +681,14 @@ class node_dir(node_database):
return ret
class node_res_dir(node_class):
- """ A special sibling to node_dir, which does only contain dynamically
+ """ A folder containing dynamic folders
+ A special sibling to node_dir, which does only contain dynamically
created folders foreach resource in the foreign model.
All folders should be of type node_res_obj and merely behave like
node_dirs (with limited domain).
"""
our_type = 'collection'
+ res_obj_class = None
def __init__(self, path, parent, context, dirr, dctx=None ):
super(node_res_dir,self).__init__(path, parent, context)
self.dir_id = dirr.id
@@ -687,7 +700,10 @@ class node_res_dir(node_class):
self.write_date = dirr.write_date or dirr.create_date
self.content_length = 0
self.unixperms = 040750
- self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody'
+ try:
+ self.uuser = (dirr.user_id and dirr.user_id.login) or 'nobody'
+ except Exception:
+ self.uuser = 'nobody'
self.ugroup = mkdosname(dirr.company_id and dirr.company_id.name, default='nogroup')
self.uidperms = dirr.get_dir_permissions()
self.res_model = dirr.ressource_type_id and dirr.ressource_type_id.model or False
@@ -782,17 +798,15 @@ class node_res_dir(node_class):
continue
# Yes! we can't do better but skip nameless records.
- res.append(node_res_obj(name, self.dir_id, self, self.context, self.res_model, bo))
+ res.append(self.res_obj_class(name, self.dir_id, self, self.context, self.res_model, bo))
return res
def _get_ttag(self,cr):
return 'rdir-%d' % self.dir_id
- def get_dav_resourcetype(self, cr):
- return ('collection', 'DAV:')
-
class node_res_obj(node_class):
- """ A special sibling to node_dir, which does only contain dynamically
+ """ A dynamically created folder.
+ A special sibling to node_dir, which does only contain dynamically
created folders foreach resource in the foreign model.
All folders should be of type node_res_obj and merely behave like
node_dirs (with limited domain).
@@ -828,7 +842,7 @@ class node_res_obj(node_class):
for fld,expr in self.dctx_dict.items():
try:
self.dctx[fld] = safe_eval(expr, dc2)
- except Exception,e:
+ except Exception:
print "Cannot eval %s for %s" % (expr, fld)
print e
pass
@@ -886,7 +900,8 @@ class node_res_obj(node_class):
return res
- def get_dav_props(self, cr):
+ def get_dav_props_DEPR(self, cr):
+ # Deprecated! (but document_ics must be cleaned, first)
res = {}
cntobj = self.context._dirobj.pool.get('document.directory.content')
uid = self.context.uid
@@ -899,7 +914,8 @@ class node_res_obj(node_class):
res['http://groupdav.org/'] = ('resourcetype',)
return res
- def get_dav_eprop(self, cr, ns, prop):
+ def get_dav_eprop_DEPR(self, cr, ns, prop):
+ # Deprecated!
if ns != 'http://groupdav.org/' or prop != 'resourcetype':
logger.warning("Who asked for %s:%s?" % (ns, prop))
return None
@@ -910,6 +926,7 @@ class node_res_obj(node_class):
where = [('directory_id','=',self.dir_id) ]
ids = cntobj.search(cr,uid,where,context=ctx)
for content in cntobj.browse(cr, uid, ids, context=ctx):
+ # TODO: remove relic of GroupDAV
if content.extension == '.ics': # FIXME: call the content class!
return ('vevent-collection','http://groupdav.org/')
return None
@@ -944,20 +961,21 @@ class node_res_obj(node_class):
res_name = getattr(bo, namefield)
if not res_name:
continue
- res.append(node_res_obj(res_name, self.dir_id, self, self.context, self.res_model, res_bo = bo))
+ # TODO Revise
+ klass = directory.get_node_class(directory, dynamic=True, context=ctx)
+ res.append(klass(res_name, self.dir_id, self, self.context, self.res_model, res_bo = bo))
where2 = where + [('parent_id','=',self.dir_id) ]
ids = dirobj.search(cr, uid, where2, context=ctx)
for dirr in dirobj.browse(cr, uid, ids, context=ctx):
if dirr.type == 'directory':
- res.append(node_res_obj(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = None, res_id = self.res_id))
+ klass = dirr.get_node_class(dirr, dynamic=True, context=ctx)
+ res.append(klass(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = None, res_id = self.res_id))
elif dirr.type == 'ressource':
# child resources can be controlled by properly set dctx
- res.append(node_res_dir(dirr.name,self,self.context, dirr, {'active_id': self.res_id}))
-
-
-
+ klass = dirr.get_node_class(dirr, context=ctx)
+ res.append(klass(dirr.name,self,self.context, dirr, {'active_id': self.res_id}))
fil_obj = dirobj.pool.get('ir.attachment')
if self.res_find_all:
@@ -967,7 +985,8 @@ class node_res_obj(node_class):
ids = fil_obj.search(cr, uid, where3, context=ctx)
if ids:
for fil in fil_obj.browse(cr, uid, ids, context=ctx):
- res.append(node_file(fil.name, self, self.context, fil))
+ klass = self.context.node_file_class
+ res.append(klass(fil.name, self, self.context, fil))
# Get Child Ressource Directories
@@ -979,9 +998,11 @@ class node_res_obj(node_class):
dirids = dirids + dirobj.search(cr,uid, where5)
for dirr in dirobj.browse(cr, uid, dirids, context=ctx):
if dirr.type == 'directory' and not dirr.parent_id:
- res.append(node_res_obj(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = None, res_id = self.res_id))
+ klass = dirr.get_node_class(dirr, dynamic=True, context=ctx)
+ res.append(klass(dirr.name, dirr.id, self, self.context, self.res_model, res_bo = None, res_id = self.res_id))
if dirr.type == 'ressource':
- res.append(node_res_dir(dirr.name, self, self.context, dirr, {'active_id': self.res_id}))
+ klass = dirr.get_node_class(dirr, context=ctx)
+ res.append(klass(dirr.name, self, self.context, dirr, {'active_id': self.res_id}))
return res
def create_child_collection(self, cr, objname):
@@ -993,9 +1014,9 @@ class node_res_obj(node_class):
uid = self.context.uid
ctx = self.context.context.copy()
ctx.update(self.dctx)
- res_obj = dirobj.pool.get(self.context.context['res_model'])
+ res_obj = dirobj.pool.get(self.res_model)
- object2 = res_obj.browse(cr, uid, self.context.context['res_id']) or False
+ object2 = res_obj.browse(cr, uid, self.res_id) or False
obj = dirobj.browse(cr, uid, self.dir_id)
if obj and (obj.type == 'ressource') and not object2:
@@ -1038,7 +1059,8 @@ class node_res_obj(node_class):
fil_id = fil_obj.create(cr, uid, val, context=ctx)
fil = fil_obj.browse(cr, uid, fil_id, context=ctx)
- fnode = node_file(path, self, self.context, fil)
+ klass = self.context.node_file_class
+ fnode = klass(path, self, self.context, fil)
if data is not None:
fnode.set_data(cr, data, fil)
return fnode
@@ -1046,8 +1068,7 @@ class node_res_obj(node_class):
def _get_ttag(self,cr):
return 'rodir-%d-%d' % (self.dir_id, self.res_id)
- def get_dav_resourcetype(self, cr):
- return ('collection', 'DAV:')
+node_res_dir.res_obj_class = node_res_obj
class node_file(node_class):
our_type = 'file'
@@ -1069,7 +1090,10 @@ class node_file(node_class):
elif not parent.check_perms('w'):
self.uidperms = 4
- self.uuser = (fil.user_id and fil.user_id.login) or 'nobody'
+ try:
+ self.uuser = (fil.user_id and fil.user_id.login) or 'nobody'
+ except Exception:
+ self.uuser = 'nobody'
self.ugroup = mkdosname(fil.company_id and fil.company_id.name, default='nogroup')
# This only propagates the problem to get_data. Better
@@ -1183,9 +1207,6 @@ class node_file(node_class):
def _get_ttag(self,cr):
return 'file-%d' % self.file_id
- def get_dav_resourcetype(self, cr):
- return ''
-
def move_to(self, cr, ndir_node, new_name=False, fil_obj=None, ndir_obj=None, in_write=False):
if ndir_node and ndir_node.context != self.context:
raise NotImplementedError("Cannot move files between contexts")
@@ -1382,3 +1403,5 @@ class nodefd_content(StringIO, node_descriptor):
finally:
cr.close()
StringIO.close(self)
+
+#eof
\ No newline at end of file
diff --git a/addons/document/test/document_test2.yml b/addons/document/test/document_test2.yml
index 34e834a5306..65312eaf10d 100644
--- a/addons/document/test/document_test2.yml
+++ b/addons/document/test/document_test2.yml
@@ -12,7 +12,7 @@
I create a "Testing" folder where all the test data will go.
-
!record {model: document.directory, id: dir_tests }:
- name: 'Testing'
+ name: 'Testing (will be deleted!)'
parent_id: dir_root
-
I create an attachment into the root folder (w. empty fields, test that
@@ -52,7 +52,7 @@
I search the testing folder for attachments.
-
!python {model: ir.attachment}: |
- ids = self.search(cr, uid, [('parent_id.name','=', 'Testing'), ('name','=','Test renamed 2')])
+ ids = self.search(cr, uid, [('parent_id.name','=', 'Testing (will be deleted!)'), ('name','=','Test renamed 2')])
assert ids == [ ref("file_test2") ], ids
-
I create an attachment to a 3rd resource, eg. a res.country
@@ -70,7 +70,14 @@
ids = self.search(cr, uid, [('res_model', '=', 'res.country'), ('res_id', '=', ref("base.za"))])
assert ids == [ ref("attach_3rd")], ids
-
- I delete the attachment
+ I delete the attachments
-
!python {model: ir.attachment}: |
+ self.unlink(cr, uid, [ref('file_test2')])
self.unlink(cr, uid, [ref('attach_3rd')])
+-
+ I delete the tests folder
+-
+ !python {model: document.directory}: |
+ self.unlink(cr, uid, [ref('dir_tests')])
+ cr.commit()
diff --git a/addons/document_email/__openerp__.py b/addons/document_email/__openerp__.py
index 0348665ffa0..6f61ba62858 100644
--- a/addons/document_email/__openerp__.py
+++ b/addons/document_email/__openerp__.py
@@ -25,7 +25,6 @@
"name" : "Email Integrated Document",
"version" : "1.1",
"depends" : ["base", "document", "fetchmail","mail_gateway"],
- "author" : "Tiny",
"description": """Email Integrated Document
* Email based Document submission
* user based document submission
diff --git a/addons/document_ftp/ftpserver/abstracted_fs.py b/addons/document_ftp/ftpserver/abstracted_fs.py
index f69a0bbbaad..9c16e7dde55 100644
--- a/addons/document_ftp/ftpserver/abstracted_fs.py
+++ b/addons/document_ftp/ftpserver/abstracted_fs.py
@@ -363,7 +363,6 @@ class abstracted_fs(object):
"""Remove the specified directory."""
cr, node, rem = datacr
assert node
- cr = self.get_node_cr(node)
node.rmcol(cr)
cr.commit()
diff --git a/addons/document_ftp/test/document_ftp_test2.yml b/addons/document_ftp/test/document_ftp_test2.yml
index 53d5a2b78bf..da55c353767 100644
--- a/addons/document_ftp/test/document_ftp_test2.yml
+++ b/addons/document_ftp/test/document_ftp_test2.yml
@@ -200,6 +200,11 @@
# TODO move
-
I remove the 'Test-Folder3'
+-
+ !python {model: ir.attachment}: |
+ from document_ftp import test_easyftp as te
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
+ ftp.rmd("Test-Folder3")
-
I check that test3.txt is removed.
-
@@ -228,3 +233,22 @@
-
I move the 200 files to 'Test-Folder2'
# TODO
+
+-
+ I delete the 200 files
+-
+ !python {model: ir.attachment}: |
+ from document_ftp import test_easyftp as te
+ from cStringIO import StringIO
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2')
+ # TODO speed
+ ftp.delete('test3.txt')
+ for i in range(0, 200):
+ ftp.delete('test-name%s.txt' %i)
+-
+ I remove the 'Test-Folder2'
+-
+ !python {model: ir.attachment}: |
+ from document_ftp import test_easyftp as te
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
+ ftp.rmd("Test-Folder2")
diff --git a/addons/document_ftp/test/document_ftp_test3.yml b/addons/document_ftp/test/document_ftp_test3.yml
index dbdab370b97..a51f259f44e 100644
--- a/addons/document_ftp/test/document_ftp_test3.yml
+++ b/addons/document_ftp/test/document_ftp_test3.yml
@@ -5,10 +5,10 @@
from document_ftp import test_easyftp as te
ftp = te.get_plain_ftp(timeout=1.0)
-
- I create a folder called '������������ ��������' in the server.
+ I create in the server a folder called 'Äïêéìáóôéêüò ÖÜêåëëïò'
-
!record {model: document.directory, id: dir_itests }:
- name: '������������ ��������'
+ name: 'Äïêéìáóôéêüò ÖÜêåëëïò'
parent_id: document.dir_root
-
And then I create another folder, under it, through FTP
@@ -16,67 +16,77 @@
!python {model: ir.attachment}: |
cr.commit()
from document_ftp import test_easyftp as te
- ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������')
- ftp.mkd("�������� ��� ����")
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò')
+ ftp.mkd("ÖÜêåëëïò áðü êÜôù")
-
I check that this folder exists at the server
-
- !assert {model: document.directory, id: , search: "[('name','=','�������� ��� ����')]" }:
+ !assert {model: document.directory, id: , search: "[('name','=','ÖÜêåëëïò áðü êÜôù')]" }:
- parent_id != False
-
- I login with FTP and check that '������������ ��������' is there
+ I login with FTP and check that 'Äïêéìáóôéêüò ÖÜêåëëïò' is there
-
!python {model: ir.attachment}: |
from document_ftp import test_easyftp as te
- ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������/�������� ��� ����')
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/ÖÜêåëëïò áðü êÜôù')
-
- I create a file named '������' into that folder
+ I create a file named 'ÄïêéìÞ' into that folder
-
!python {model: ir.attachment}: |
from document_ftp import test_easyftp as te
from cStringIO import StringIO
- ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������/�������� ��� ����')
- fdata = StringIO('������� �� utf-8')
- ftp.storbinary('STOR ������.txt', fdata)
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/ÖÜêåëëïò áðü êÜôù')
+ fdata = StringIO('êåßìåíï ìå utf-8')
+ ftp.storbinary('STOR ÄïêéìÞ.txt', fdata)
-
- I remove the '������.txt' file
+ I remove the 'ÄïêéìÞ.txt' file
-
!python {model: ir.attachment}: |
from document_ftp import test_easyftp as te
from cStringIO import StringIO
- ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������/�������� ��� ����')
- ftp.delete('������.txt')
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/ÖÜêåëëïò áðü êÜôù')
+ ftp.delete('ÄïêéìÞ.txt')
-
- I rename '�������� ��� ����' into '�����'
+ I rename 'ÖÜêåëëïò áðü êÜôù' into 'Üëëïò'
-
!python {model: ir.attachment}: |
from document_ftp import test_easyftp as te
- ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������')
- ftp.rename("�������� ��� ����", "�����")
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò')
+ ftp.rename("ÖÜêåëëïò áðü êÜôù", "Üëëïò")
-
- I place a file 'file �3' in '�����'
+ I place a file 'file Ö3' in 'Üëëïò'
-
!python {model: ir.attachment}: |
from document_ftp import test_easyftp as te
from cStringIO import StringIO
- ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������/�����')
- fdata = StringIO('�� ���� �������')
- ftp.storbinary('STOR file �3.txt', fdata)
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/Üëëïò')
+ fdata = StringIO('êé Üëëï êåßìåíï')
+ ftp.storbinary('STOR file Ö3.txt', fdata)
-
I rename the file into file+range(1..200) (large filename)
-
!python {model: ir.attachment}: |
from document_ftp import test_easyftp as te
from cStringIO import StringIO
- ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������/�����')
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/Üëëïò')
vuvuzela = 'b'+''.join('z' * 200)+'!'
- ftp.rename("file �3.txt", vuvuzela)
+ ftp.rename("file Ö3.txt", vuvuzela)
-
I delete the file with the large name
-
!python {model: ir.attachment}: |
from document_ftp import test_easyftp as te
from cStringIO import StringIO
- ftp = te.get_ftp_folder(cr, uid, self, 'Documents/������������ ��������/�����')
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/Üëëïò')
vuvuzela = 'b'+''.join('z' * 200)+'!'
ftp.delete(vuvuzela)
+
+-
+ I delete the testing folders
+-
+ !python {model: ir.attachment}: |
+ from document_ftp import test_easyftp as te
+ from cStringIO import StringIO
+ ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
+ ftp.rmd('Äïêéìáóôéêüò ÖÜêåëëïò/Üëëïò')
+ ftp.rmd('Äïêéìáóôéêüò ÖÜêåëëïò')
diff --git a/addons/document_ftp/test/document_ftp_test4.yml b/addons/document_ftp/test/document_ftp_test4.yml
index eeed4b17dda..2bb616dc1bd 100644
--- a/addons/document_ftp/test/document_ftp_test4.yml
+++ b/addons/document_ftp/test/document_ftp_test4.yml
@@ -118,3 +118,10 @@
- |
Bonus Piste:
I create a 'Partner3' under 'all'
+-
+ I delete the Partners Testing folder
+-
+ !python {model: document.directory}: |
+ self.unlink(cr, uid, [ref('dir_tests2')])
+ self.unlink(cr, uid, [ref('dir_respart1')])
+ cr.commit()
\ No newline at end of file
diff --git a/addons/document_ics/i18n/sr.po b/addons/document_ics/i18n/sr.po
new file mode 100644
index 00000000000..c3cc40789f2
--- /dev/null
+++ b/addons/document_ics/i18n/sr.po
@@ -0,0 +1,334 @@
+# Serbian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-08-28 16:01+0000\n"
+"PO-Revision-Date: 2010-10-17 07:56+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Serbian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:55+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: document_ics
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !"
+
+#. module: document_ics
+#: selection:document.directory.ics.fields,name:0
+msgid "uid"
+msgstr "uid"
+
+#. module: document_ics
+#: constraint:document.directory:0
+msgid "Error! You can not create recursive Directories."
+msgstr "Greška! Ne možete kreirati rekurzivne direktorijume."
+
+#. module: document_ics
+#: field:document.ics.crm.wizard,jobs:0
+msgid "Jobs Hiring Process"
+msgstr "Proces zapošljavanja"
+
+#. module: document_ics
+#: view:document.ics.crm.wizard:0
+msgid "Configure Calendars for CRM Sections"
+msgstr "Konfigurisi kalendare za CRM Sekcije"
+
+#. module: document_ics
+#: field:document.ics.crm.wizard,helpdesk:0
+msgid "Helpdesk"
+msgstr "Helpdesk"
+
+#. module: document_ics
+#: field:document.directory.ics.fields,field_id:0
+msgid "Open ERP Field"
+msgstr "Otvori ERP Polje"
+
+#. module: document_ics
+#: view:document.ics.crm.wizard:0
+msgid "Next"
+msgstr "Sledeće"
+
+#. module: document_ics
+#: field:document.directory.ics.fields,content_id:0
+msgid "Content"
+msgstr "Sadržaj"
+
+#. module: document_ics
+#: field:document.ics.crm.wizard,meeting:0
+msgid "Calendar of Meetings"
+msgstr "Kalendar Sastanaka"
+
+#. module: document_ics
+#: model:crm.case.section,name:document_ics.section_meeting
+msgid "Shared Calendar Meetings"
+msgstr "Sastanci zajedničkog kalendara"
+
+#. module: document_ics
+#: selection:document.directory.ics.fields,name:0
+msgid "url"
+msgstr "url"
+
+#. module: document_ics
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Pogrešno ime modela u definiciji akcije."
+
+#. module: document_ics
+#: help:document.ics.crm.wizard,bugs:0
+msgid "Used by companies to track bugs and support requests on softwares"
+msgstr ""
+"Korišten od firmi za praćenje grešaka i zahteva za podrškom na programima"
+
+#. module: document_ics
+#: model:ir.actions.todo,note:document_ics.config_wizard_step_case_section_menu
+msgid ""
+"This Configuration step use to create Calendars in document for all Case "
+"Sections"
+msgstr ""
+"Ovaj konfiguracioni korak se koristi za kreiranje kalendara u dokumentima ze "
+"sve tipove Sekcija"
+
+#. module: document_ics
+#: selection:document.directory.ics.fields,name:0
+msgid "dtend"
+msgstr "dtend"
+
+#. module: document_ics
+#: help:document.ics.crm.wizard,jobs:0
+msgid ""
+"Help you to organise the jobs hiring process: evaluation, meetings, email "
+"integration..."
+msgstr ""
+"Pomaže vam da organizujete proces zapošljavanja: procena, sastanci, "
+"integracija elektronske pošte..."
+
+#. module: document_ics
+#: selection:document.directory.ics.fields,name:0
+msgid "description"
+msgstr "opis"
+
+#. module: document_ics
+#: model:ir.actions.act_window,name:document_ics.action_view_document_ics_config_directories
+msgid "Configure Calendars for Sections "
+msgstr "Konfigurise Kalendare za Sekcije "
+
+#. module: document_ics
+#: help:document.ics.crm.wizard,opportunity:0
+msgid "Tracks identified business opportunities for your sales pipeline."
+msgstr "Prati prepoznate poslovne prilike za vašu prodajnu mrezu."
+
+#. module: document_ics
+#: help:document.ics.crm.wizard,fund:0
+msgid ""
+"This may help associations in their fund raising process and tracking."
+msgstr ""
+"Ovo može pomoći saradnicima u procesu prikupljanja i praćenja sredstava za "
+"finansiranje."
+
+#. module: document_ics
+#: help:document.ics.crm.wizard,helpdesk:0
+msgid "Manages an Helpdesk service."
+msgstr "Upravlja uslugom Helpdesk-a."
+
+#. module: document_ics
+#: field:document.ics.crm.wizard,fund:0
+msgid "Fund Raising Operations"
+msgstr "Operacije za skupljanje sredstava"
+
+#. module: document_ics
+#: field:document.directory.content,ics_object_id:0
+msgid "Object"
+msgstr "Objekat"
+
+#. module: document_ics
+#: constraint:crm.case.section:0
+msgid "Error ! You cannot create recursive sections."
+msgstr "Greška ! Ne možete stvarati rekurzivne sekcije."
+
+#. module: document_ics
+#: model:ir.module.module,shortdesc:document_ics.module_meta_information
+msgid "Support for iCal based on Document Management System"
+msgstr "Podrška za iCal baziranom na sistemu za upravljanje dokumentima."
+
+#. module: document_ics
+#: selection:document.directory.ics.fields,name:0
+msgid "location"
+msgstr "polozaj"
+
+#. module: document_ics
+#: view:document.directory:0
+msgid "ICS Calendar"
+msgstr "ICS Kalendar"
+
+#. module: document_ics
+#: field:document.directory.ics.fields,name:0
+msgid "ICS Value"
+msgstr "ICS Vrednost"
+
+#. module: document_ics
+#: model:ir.module.module,description:document_ics.module_meta_information
+msgid "Allows to synchronise calendars with others applications."
+msgstr "omogucava vam da sinhronisete kalendar sa ostalim aplikacijama"
+
+#. module: document_ics
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Nevažeći XML za pregled arhitekture"
+
+#. module: document_ics
+#: help:document.ics.crm.wizard,lead:0
+msgid ""
+"Allows you to track and manage prospects which are pre-sales requests or "
+"contacts, the very first contact with a customer request."
+msgstr ""
+"Omogućava vam da pratite i upravljate prilikama koje uključuju predprodajne "
+"zahteve ili kontakte, prvi kontakt s pitanjima korisnika."
+
+#. module: document_ics
+#: field:document.ics.crm.wizard,name:0
+msgid "Name"
+msgstr "Ime"
+
+#. module: document_ics
+#: help:document.ics.crm.wizard,meeting:0
+msgid "Manages the calendar of meetings of the users."
+msgstr "Upravlja kalendarom sastanaka korisnika"
+
+#. module: document_ics
+#: field:document.directory.content,ics_domain:0
+msgid "Domain"
+msgstr "Domen"
+
+#. module: document_ics
+#: help:document.ics.crm.wizard,claims:0
+msgid ""
+"Manages the supplier and customers claims, including your corrective or "
+"preventive actions."
+msgstr ""
+"Upravlja pritužbama dobavljača i kupaca, uključujući korektivne ili "
+"preventivne akcije."
+
+#. module: document_ics
+#: selection:document.directory.ics.fields,name:0
+msgid "last-modified"
+msgstr "poslednja-promjena"
+
+#. module: document_ics
+#: view:document.directory:0
+msgid "ICS Mapping"
+msgstr "ICS mapiranje"
+
+#. module: document_ics
+#: view:crm.case:0
+msgid "Duration(In Hour)"
+msgstr "Trajanje (u satima)"
+
+#. module: document_ics
+#: field:document.ics.crm.wizard,document_ics:0
+msgid "Shared Calendar"
+msgstr "Deljeni Kalendar"
+
+#. module: document_ics
+#: field:document.ics.crm.wizard,claims:0
+msgid "Claims"
+msgstr "Pritužbe"
+
+#. module: document_ics
+#: help:document.ics.crm.wizard,phonecall:0
+msgid ""
+"Help you to encode the result of a phone call or to planify a list of phone "
+"calls to process."
+msgstr ""
+"Pomaže vam pri unosu rezultata telefonskih poziva ili pri planiranju popisa "
+"poziva za obradu."
+
+#. module: document_ics
+#: selection:document.directory.ics.fields,name:0
+msgid "dtstart"
+msgstr "dtstart"
+
+#. module: document_ics
+#: field:document.ics.crm.wizard,phonecall:0
+msgid "Phone Calls"
+msgstr "Telefonski Pozivi"
+
+#. module: document_ics
+#: field:document.ics.crm.wizard,bugs:0
+msgid "Bug Tracking"
+msgstr "Praćenje Grešaka"
+
+#. module: document_ics
+#: selection:document.directory.ics.fields,name:0
+msgid "categories"
+msgstr "kategorije"
+
+#. module: document_ics
+#: field:document.ics.crm.wizard,lead:0
+msgid "Prospect"
+msgstr "Prilika"
+
+#. module: document_ics
+#: view:document.ics.crm.wizard:0
+msgid "Create Pre-Configured Calendars"
+msgstr "Kreiraj predkonfigurisani Kalendar"
+
+#. module: document_ics
+#: selection:document.directory.ics.fields,name:0
+msgid "created"
+msgstr "Kreiran"
+
+#. module: document_ics
+#: field:crm.case,code:0
+msgid "Calendar Code"
+msgstr "Šifra kalendara"
+
+#. module: document_ics
+#: selection:document.directory.ics.fields,name:0
+msgid "summary"
+msgstr "Sumarno"
+
+#. module: document_ics
+#: model:ir.model,name:document_ics.model_document_ics_crm_wizard
+msgid "document.ics.crm.wizard"
+msgstr "document.ics.crm.wizard"
+
+#. module: document_ics
+#: selection:document.directory.ics.fields,name:0
+msgid "attendee"
+msgstr "prisutan"
+
+#. module: document_ics
+#: model:ir.model,name:document_ics.model_document_directory_ics_fields
+msgid "document.directory.ics.fields"
+msgstr "document.directory.ics.fields"
+
+#. module: document_ics
+#: field:document.directory.content,ics_field_ids:0
+msgid "Fields Mapping"
+msgstr "Mapiranje polja"
+
+#. module: document_ics
+#: view:document.ics.crm.wizard:0
+msgid "Cancel"
+msgstr "Otkaži"
+
+#. module: document_ics
+#: field:document.ics.crm.wizard,opportunity:0
+msgid "Business Opportunities"
+msgstr "Poslovne Prilike"
+
+#. module: document_ics
+#: selection:document.directory.ics.fields,name:0
+msgid "dtstamp"
+msgstr "dtstamp"
diff --git a/addons/document_webdav/__init__.py b/addons/document_webdav/__init__.py
index 69312668a74..ac417e18087 100644
--- a/addons/document_webdav/__init__.py
+++ b/addons/document_webdav/__init__.py
@@ -21,3 +21,7 @@
import webdav
import webdav_server
+
+import document_webdav
+
+#eof
\ No newline at end of file
diff --git a/addons/document_webdav/__openerp__.py b/addons/document_webdav/__openerp__.py
index 39330f68dea..1c2e232e914 100644
--- a/addons/document_webdav/__openerp__.py
+++ b/addons/document_webdav/__openerp__.py
@@ -29,20 +29,23 @@
##############################################################################
{
- "name" : "WebDAV server for Document Management",
- "version" : "2.0",
- "author" : "OpenERP SA",
- "category" : "Generic Modules/Others",
- "website": "http://www.openerp.com",
- "description": """ With this module, the WebDAV server for the documents is activated.
- You can then use any compatible browser to remotely see the attachments of OpenObject.
+ "name" : "WebDAV server for Document Management",
+ "version" : "2.2",
+ "author" : "OpenERP SA",
+ "category" : "Generic Modules/Others",
+ "website": "http://www.openerp.com",
+ "description": """ With this module, the WebDAV server for the documents is activated.
+ You can then use any compatible browser to remotely see the attachments of OpenObject.
- After installation, the webDAV server can be controlled by a [webdav] section in the server's config.
+ After installation, the webDAV server can be controlled by a [webdav] section in the server's config.
""",
- "depends" : ["base", "document"],
- "init_xml" : [],
- "update_xml" : [],
- "demo_xml" : [],
- "active": False,
- "installable": True
+ "depends" : ["base", "document"],
+ "init_xml" : [],
+ "update_xml" : ['security/ir.model.access.csv',
+ 'webdav_view.xml',
+ 'webdav_setup.xml',
+ ],
+ "demo_xml" : [],
+ "active": False,
+ "installable": True
}
diff --git a/addons/document_webdav/dav_fs.py b/addons/document_webdav/dav_fs.py
index f3c8201bafc..3e8e1c2b3e5 100644
--- a/addons/document_webdav/dav_fs.py
+++ b/addons/document_webdav/dav_fs.py
@@ -26,8 +26,6 @@ import os
import time
from string import joinfields, split, lower
-from service import security
-
import netsvc
import urlparse
@@ -37,9 +35,13 @@ from DAV.iface import *
import urllib
from DAV.davcmd import copyone, copytree, moveone, movetree, delone, deltree
-from document.nodes import node_res_dir, node_res_obj
from cache import memoize
from tools import misc
+try:
+ from tools.dict_tools import dict_merge2
+except ImportError:
+ from document.dict_tools import dict_merge2
+
CACHE_SIZE=20000
#hack for urlparse: add webdav in the net protocols
@@ -96,8 +98,7 @@ class openerp_dav_handler(dav_interface):
return props
node = self.uri2object(cr, uid, pool, uri2)
if node:
- props = props.copy()
- props.update(node.get_dav_props(cr))
+ props = dict_merge2(props, node.get_dav_props(cr))
cr.close()
return props
@@ -134,11 +135,11 @@ class openerp_dav_handler(dav_interface):
self.parent.log_message("Exc: %s",traceback.format_exc())
raise default_exc("Operation failed")
- def _get_dav_lockdiscovery(self, uri):
- raise DAV_NotFound
+ #def _get_dav_lockdiscovery(self, uri):
+ # raise DAV_NotFound
- def _get_dav_supportedlock(self, uri):
- raise DAV_NotFound
+ #def A_get_dav_supportedlock(self, uri):
+ # raise DAV_NotFound
def match_prop(self, uri, match, ns, propname):
if self.M_NS.has_key(ns):
@@ -186,6 +187,16 @@ class openerp_dav_handler(dav_interface):
cr.close()
return ret
+ def reduce_useragent(self):
+ ua = self.parent.headers.get('User-Agent', False)
+ ctx = {}
+ if ua:
+ if 'iPhone' in ua:
+ ctx['DAV-client'] = 'iPhone'
+ elif 'Konqueror' in ua:
+ ctx['DAV-client'] = 'GroupDAV'
+ return ctx
+
def get_prop(self, uri, ns, propname):
""" return the value of a given property
@@ -194,17 +205,23 @@ class openerp_dav_handler(dav_interface):
pname -- name of the property
"""
if self.M_NS.has_key(ns):
- return dav_interface.get_prop(self, uri, ns, propname)
+ try:
+ # if it's not in the interface class, a "DAV:" property
+ # may be at the node class. So shouldn't give up early.
+ return dav_interface.get_prop(self, uri, ns, propname)
+ except DAV_NotFound:
+ pass
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
if not dbname:
if cr: cr.close()
raise DAV_NotFound
- node = self.uri2object(cr, uid, pool, uri2)
- if not node:
+ try:
+ node = self.uri2object(cr, uid, pool, uri2)
+ if not node:
+ raise DAV_NotFound
+ res = node.get_dav_eprop(cr, ns, propname)
+ finally:
cr.close()
- raise DAV_NotFound
- res = node.get_dav_eprop(cr, ns, propname)
- cr.close()
return res
def get_db(self, uri, rest_ret=False, allow_last=False):
@@ -283,26 +300,55 @@ class openerp_dav_handler(dav_interface):
result = []
node = self.uri2object(cr, uid, pool, uri2[:])
- if not node:
- if cr: cr.close()
- raise DAV_NotFound2(uri2)
- else:
- fp = node.full_path()
- if fp and len(fp):
- self.parent.log_message('childs: @%s' % fp)
- fp = '/'.join(fp)
+ try:
+ if not node:
+ raise DAV_NotFound2(uri2)
else:
- fp = None
- domain = None
- if filters:
- domain = node.get_domain(cr, filters)
- for d in node.children(cr, domain):
- self.parent.log_message('child: %s' % d.path)
- if fp:
- result.append( self.urijoin(dbname,fp,d.path) )
+ fp = node.full_path()
+ if fp and len(fp):
+ fp = '/'.join(fp)
+ self.parent.log_message('childs for: %s' % fp)
else:
- result.append( self.urijoin(dbname,d.path) )
- if cr: cr.close()
+ fp = None
+ domain = None
+ if filters:
+ domain = node.get_domain(cr, filters)
+
+ if hasattr(filters, 'getElementsByTagNameNS'):
+ hrefs = filters.getElementsByTagNameNS('DAV:', 'href')
+ if hrefs:
+ ul = self.parent.davpath + self.uri2local(uri)
+ for hr in hrefs:
+ turi = ''
+ for tx in hr.childNodes:
+ if tx.nodeType == hr.TEXT_NODE:
+ turi += tx.data
+ if not turi.startswith('/'):
+ # it may be an absolute URL, decode to the
+ # relative part, because ul is relative, anyway
+ uparts=urlparse.urlparse(turi)
+ turi=uparts[2]
+ if turi.startswith(ul):
+ result.append( turi[len(self.parent.davpath):])
+ else:
+ self.parent.log_error("ignore href %s because it is not under request path %s", turi, ul)
+ return result
+ # We don't want to continue with the children found below
+ # Note the exceptions and that 'finally' will close the
+ # cursor
+ for d in node.children(cr, domain):
+ self.parent.log_message('child: %s' % d.path)
+ if fp:
+ result.append( self.urijoin(dbname,fp,d.path) )
+ else:
+ result.append( self.urijoin(dbname,d.path) )
+ except DAV_Error:
+ raise
+ except Exception, e:
+ self.parent.log_error("cannot get_childs: "+ str(e))
+ raise
+ finally:
+ if cr: cr.close()
return result
def uri2local(self, uri):
@@ -338,7 +384,8 @@ class openerp_dav_handler(dav_interface):
def uri2object(self, cr, uid, pool, uri):
if not uid:
return None
- return pool.get('document.directory').get_object(cr, uid, uri)
+ context = self.reduce_useragent()
+ return pool.get('document.directory').get_object(cr, uid, uri, context=context)
def get_data(self,uri, rrange=None):
self.parent.log_message('GET: %s' % uri)
diff --git a/addons/document_webdav/document_webdav.py b/addons/document_webdav/document_webdav.py
new file mode 100644
index 00000000000..28b70c8d7e4
--- /dev/null
+++ b/addons/document_webdav/document_webdav.py
@@ -0,0 +1,97 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+from osv import osv, fields
+import nodes
+from tools import config
+
+class document_davdir(osv.osv):
+ _inherit = 'document.directory'
+
+ _columns = {
+ # Placed here just for a reference
+ 'dav_prop_ids': fields.one2many('document.webdav.dir.property', 'dir_id', 'DAV properties'),
+ }
+
+ def get_node_class(self, cr, uid, ids, dbro=None, dynamic=False, context=None):
+ # Note: in this function, nodes come from document_webdav/nodes.py !
+ if dbro is None:
+ dbro = self.browse(cr, uid, ids, context=context)
+
+ if dynamic:
+ assert dbro.type == 'directory'
+ return nodes.node_res_obj
+ elif dbro.type == 'directory':
+ return nodes.node_dir
+ elif dbro.type == 'ressource':
+ return nodes.node_res_dir
+ else:
+ raise ValueError("dir node for %s type", dbro.type)
+
+ def _prepare_context(self, cr, uid, nctx, context):
+ nctx.node_file_class = nodes.node_file
+ # We can fill some more fields, but avoid any expensive function
+ # that might be not worth preparing.
+ nctx.extra_ctx['webdav_path'] = '/'+config.get_misc('webdav','vdir','webdav')
+ usr_obj = self.pool.get('res.users')
+ res = usr_obj.read(cr, uid, uid, ['login'])
+ if res:
+ nctx.extra_ctx['username'] = res['login']
+ # TODO group
+ return
+
+ def _locate_child(self, cr, uid, root_id, uri,nparent, ncontext):
+ """ try to locate the node in uri,
+ Return a tuple (node_dir, remaining_path)
+ """
+ return (nodes.node_database(context=ncontext), uri)
+
+document_davdir()
+
+class dav_dir_property(osv.osv):
+ """ Arbitrary WebDAV properties, attached to document.directories.
+
+ Some DAV properties have to be settable at directories, depending
+ on the database directory structure.
+
+ Example would be the principal-URL.
+
+ There _can_ be properties without a directory, which means that they
+ globally apply to all the directories (aka. collections) of the
+ present database.
+ """
+ _name = 'document.webdav.dir.property'
+
+ _columns = {
+ 'dir_id': fields.many2one('document.directory', 'Directory', required=False, select=1),
+ 'namespace': fields.char('Namespace', size=127, required=True),
+ 'name': fields.char('Name', size=64, required=True),
+ 'value': fields.text('Value'),
+ 'do_subst': fields.boolean('Substitute', required=True),
+ }
+
+ _defaults = {
+ 'do_subst': False,
+ }
+
+dav_dir_property()
+
+#eof
\ No newline at end of file
diff --git a/addons/document_webdav/i18n/sr.po b/addons/document_webdav/i18n/sr.po
new file mode 100644
index 00000000000..393ca94f604
--- /dev/null
+++ b/addons/document_webdav/i18n/sr.po
@@ -0,0 +1,31 @@
+# Serbian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-05-30 15:14+0000\n"
+"PO-Revision-Date: 2010-10-17 07:57+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Serbian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:56+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: document_webdav_old
+#: model:ir.module.module,description:document_webdav_old.module_meta_information
+msgid ""
+"This is a complete document management system:\n"
+"\t* WebDav Interface\n"
+"\t* User Authentification\n"
+"\t* Document Indexation\n"
+msgstr ""
+"Ovo je kompletan sistem Dokument Menadzmenta\n"
+"\t* WebDav Interfejs\n"
+"\t* Autentifikacija korisnika\n"
+"\t* Indeksacija Dokumenata\n"
diff --git a/addons/document_webdav/nodes.py b/addons/document_webdav/nodes.py
new file mode 100644
index 00000000000..8bea54ab7d3
--- /dev/null
+++ b/addons/document_webdav/nodes.py
@@ -0,0 +1,219 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+
+from document import nodes
+from tools.safe_eval import safe_eval as eval
+try:
+ from tools.dict_tools import dict_filter
+except ImportError:
+ from document.dict_tools import dict_filter
+
+import urllib
+
+
+class node_acl_mixin(object):
+ def _get_dav_owner(self, cr):
+ return self.uuser
+
+ def _get_dav_group(self, cr):
+ return self.ugroup
+
+ def _get_dav_supported_privilege_set(self, cr):
+ return '' # TODO
+
+ def _get_dav_current_user_privilege_set(self, cr):
+ return '' # TODO
+
+ def _get_dav_props_hlpr(self, cr, par_class, prop_model,
+ prop_ref_field, res_id):
+ """ Helper for dav properties, usable in subclasses
+
+ @param par_class The parent class
+ @param prop_model The name of the orm model holding the properties
+ @param prop_ref_field The name of the field at prop_model pointing to us
+ @param res_id the id of self in the corresponing orm table, that should
+ match prop_model.prop_ref_field
+ """
+ ret = par_class.get_dav_props(self, cr)
+ if prop_model:
+ propobj = self.context._dirobj.pool.get(prop_model)
+ uid = self.context.uid
+ ctx = self.context.context.copy()
+ ctx.update(self.dctx)
+ # Not really needed because we don't do eval here:
+ # ctx.update({'uid': uid, 'dbname': self.context.dbname })
+ # dict_filter(self.context.extra_ctx, ['username', 'groupname', 'webdav_path'], ctx)
+ sdomain = [(prop_ref_field, '=', False),]
+ if res_id:
+ sdomain = ['|', (prop_ref_field, '=', res_id)] + sdomain
+ prop_ids = propobj.search(cr, uid, sdomain, context=ctx)
+ if prop_ids:
+ ret = ret.copy()
+ for pbro in propobj.browse(cr, uid, prop_ids, context=ctx):
+ ret[pbro.namespace] = ret.get(pbro.namespace, ()) + \
+ (pbro.name,)
+ # Note that we cannot have properties to conditionally appear
+ # on the context, yet.
+
+ return ret
+
+ def _get_dav_eprop_hlpr(self, cr, ns, prop,
+ par_class, prop_model,
+ prop_ref_field, res_id):
+ """ Helper for get dav eprop, usable in subclasses
+
+ @param namespace the one to search for
+ @param name Name to search for
+ @param par_class The parent class
+ @param prop_model The name of the orm model holding the properties
+ @param prop_ref_field The name of the field at prop_model pointing to us
+ @param res_id the id of self in the corresponing orm table, that should
+ match prop_model.prop_ref_field
+ """
+ ret = par_class.get_dav_eprop(self, cr, ns, prop)
+ if ret is not None:
+ return ret
+ if prop_model:
+ propobj = self.context._dirobj.pool.get(prop_model)
+ uid = self.context.uid
+ ctx = self.context.context.copy()
+ ctx.update(self.dctx)
+ ctx.update({'uid': uid, 'dbname': self.context.dbname })
+ ctx['node_classname'] = "%s.%s" % (self.__class__.__module__, self.__class__.__name__)
+ dict_filter(self.context.extra_ctx, ['username', 'groupname', 'webdav_path'], ctx)
+ sdomain = [(prop_ref_field, '=', False),('namespace', '=', ns), ('name','=', prop)]
+ if res_id:
+ sdomain = ['|', (prop_ref_field, '=', res_id)] + sdomain
+ prop_ids = propobj.search(cr, uid, sdomain, context=ctx)
+ if prop_ids:
+ pbro = propobj.browse(cr, uid, prop_ids[0], context=ctx)
+ val = pbro.value
+ if pbro.do_subst:
+ if val.startswith("('") and val.endswith(")"):
+ glbls = { 'urlquote': urllib.quote, }
+ val = eval(val, glbls, ctx)
+ else:
+ val = val % ctx
+ return val
+ return None
+
+class node_dir(node_acl_mixin, nodes.node_dir):
+ """ override node_dir and add DAV functionality
+ """
+ DAV_PROPS = { "DAV:": ('owner', 'group',
+ 'supported-privilege-set',
+ 'current-user-privilege-set'),
+ }
+ DAV_M_NS = { "DAV:" : '_get_dav',}
+ http_options = { 'DAV': ['access-control',] }
+
+ def get_dav_resourcetype(self, cr):
+ return ('collection', 'DAV:')
+
+ def get_dav_props(self, cr):
+ return self._get_dav_props_hlpr(cr, nodes.node_dir,
+ 'document.webdav.dir.property', 'dir_id', self.dir_id)
+
+ def get_dav_eprop(self, cr, ns, prop):
+ return self._get_dav_eprop_hlpr(cr, ns, prop, nodes.node_dir,
+ 'document.webdav.dir.property', 'dir_id', self.dir_id)
+
+
+class node_file(node_acl_mixin, nodes.node_file):
+ DAV_PROPS = { "DAV:": ('owner', 'group',
+ 'supported-privilege-set',
+ 'current-user-privilege-set'),
+ }
+ DAV_M_NS = { "DAV:" : '_get_dav',}
+ http_options = { 'DAV': ['access-control', ] }
+ pass
+
+ def get_dav_resourcetype(self, cr):
+ return ''
+
+ def get_dav_props(self, cr):
+ return self._get_dav_props_hlpr(cr, nodes.node_dir,
+ None, 'file_id', self.file_id)
+ #'document.webdav.dir.property', 'dir_id', self.dir_id)
+
+ #def get_dav_eprop(self, cr, ns, prop):
+
+class node_database(nodes.node_database):
+ def get_dav_resourcetype(self, cr):
+ return ('collection', 'DAV:')
+
+ def get_dav_props(self, cr):
+ return self._get_dav_props_hlpr(cr, nodes.node_dir,
+ 'document.webdav.dir.property', 'dir_id', False)
+
+ def get_dav_eprop(self, cr, ns, prop):
+ return self._get_dav_eprop_hlpr(cr, nodes.node_dir, ns, prop,
+ 'document.webdav.dir.property', 'dir_id', False)
+
+class node_res_obj(node_acl_mixin, nodes.node_res_obj):
+ DAV_PROPS = { "DAV:": ('owner', 'group',
+ 'supported-privilege-set',
+ 'current-user-privilege-set'),
+ }
+ DAV_M_NS = { "DAV:" : '_get_dav',}
+ http_options = { 'DAV': ['access-control',] }
+
+ def get_dav_resourcetype(self, cr):
+ return ('collection', 'DAV:')
+
+ def get_dav_props(self, cr):
+ return self._get_dav_props_hlpr(cr, nodes.node_res_obj,
+ 'document.webdav.dir.property', 'dir_id', self.dir_id)
+
+ def get_dav_eprop(self, cr, ns, prop):
+ return self._get_dav_eprop_hlpr(cr, ns, prop, nodes.node_res_obj,
+ 'document.webdav.dir.property', 'dir_id', self.dir_id)
+
+
+class node_res_dir(node_acl_mixin, nodes.node_res_dir):
+ DAV_PROPS = { "DAV:": ('owner', 'group',
+ 'supported-privilege-set',
+ 'current-user-privilege-set'),
+ }
+ DAV_M_NS = { "DAV:" : '_get_dav',}
+ http_options = { 'DAV': ['access-control',] }
+ res_obj_class = node_res_obj
+
+ def get_dav_resourcetype(self, cr):
+ return ('collection', 'DAV:')
+
+ def get_dav_props(self, cr):
+ return self._get_dav_props_hlpr(cr, nodes.node_res_dir,
+ 'document.webdav.dir.property', 'dir_id', self.dir_id)
+
+ def get_dav_eprop(self, cr, ns, prop):
+ return self._get_dav_eprop_hlpr(cr, ns, prop, nodes.node_res_dir,
+ 'document.webdav.dir.property', 'dir_id', self.dir_id)
+
+# Some copies, so that this module can replace 'from document import nodes'
+get_node_context = nodes.get_node_context
+node_context = nodes.node_context
+node_class = nodes.node_class
+node_descriptor = nodes.node_descriptor
+
+
+#eof
diff --git a/addons/document_webdav/security/ir.model.access.csv b/addons/document_webdav/security/ir.model.access.csv
new file mode 100644
index 00000000000..a77304eb297
--- /dev/null
+++ b/addons/document_webdav/security/ir.model.access.csv
@@ -0,0 +1,4 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_webdav_dir_property_all","webdav.dir.property all","model_document_webdav_dir_property",,1,0,0,0
+"access_webdav_dir_property_group_doc_manager","webdav.dir.property document manager","model_document_webdav_dir_property","base.group_system",1,1,1,1
+"access_webdav_dir_property_group_system","webdav.dir.property group system","model_document_webdav_dir_property","base.group_system",1,1,1,1
diff --git a/addons/document_webdav/webdav.py b/addons/document_webdav/webdav.py
index 3b6cf582067..bb2b8caf470 100644
--- a/addons/document_webdav/webdav.py
+++ b/addons/document_webdav/webdav.py
@@ -22,6 +22,8 @@
import xml.dom.minidom
domimpl = xml.dom.minidom.getDOMImplementation()
+from xml.dom.minicompat import StringTypes
+
import urlparse
import urllib
from osv import osv
@@ -29,12 +31,28 @@ from osv import osv
try:
from DAV import utils
from DAV.propfind import PROPFIND
+ from DAV.report import REPORT
except ImportError:
raise osv.except_osv('PyWebDAV Import Error!','Please install PyWebDAV \
from http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-0.9.4.tar.gz&can=2&q=/')
import tools
+class Text2(xml.dom.minidom.Text):
+ def writexml(self, writer, indent="", addindent="", newl=""):
+ data = "%s%s%s" % (indent, self.data, newl)
+ data = data.replace("&", "&").replace("<", "<")
+ data = data.replace(">", ">")
+ writer.write(data)
+
+def createText2Node(doc, data):
+ if not isinstance(data, StringTypes):
+ raise TypeError, "node contents must be a string"
+ t = Text2()
+ t.data = data
+ t.ownerDocument = doc
+ return t
+
super_mk_prop_response = PROPFIND.mk_prop_response
def mk_prop_response(self, uri, good_props, bad_props, doc):
@@ -48,7 +66,7 @@ def mk_prop_response(self, uri, good_props, bad_props, doc):
re=doc.createElement("D:response")
# append namespaces to response
nsnum=0
- namespaces = self.namespaces
+ namespaces = self.namespaces[:]
if 'DAV:' in namespaces:
namespaces.remove('DAV:')
for nsname in namespaces:
@@ -67,6 +85,8 @@ def mk_prop_response(self, uri, good_props, bad_props, doc):
string: text node
tuple ('elem', 'ns') for empty sub-node
tuple ('elem', 'ns', sub-elems) for sub-node with elements
+ tuple ('elem', 'ns', sub-elems, {attrs}) for sub-node with
+ optional elements and attributes
list, of above tuples
"""
if ns == 'DAV:':
@@ -108,13 +128,21 @@ def mk_prop_response(self, uri, good_props, bad_props, doc):
ve=doc.createElement(ns_prefix+v[0])
if need_ns:
ve.setAttribute("xmlns:ns"+str(nsnum), v[1])
- if len(v) > 2 and isinstance(v[2], list):
- # support nested elements like:
- # ( 'elem', 'ns:', [('sub-elem1', 'ns1'), ...]
- _prop_elem_child(ve, v[1], v[2], ns_prefix)
+ if len(v) > 2 and v[2] is not None:
+ if isinstance(v[2], (list, tuple)):
+ # support nested elements like:
+ # ( 'elem', 'ns:', [('sub-elem1', 'ns1'), ...]
+ _prop_elem_child(ve, v[1], v[2], ns_prefix)
+ else:
+ vt=createText2Node(doc,tools.ustr(v[2]))
+ ve.appendChild(vt)
+ if len(v) > 3 and v[3]:
+ assert isinstance(v[3], dict)
+ for ak, av in v[3].items():
+ ve.setAttribute(ak, av)
pnode.appendChild(ve)
else:
- ve=doc.createTextNode(tools.ustr(v))
+ ve=createText2Node(doc, tools.ustr(v))
pnode.appendChild(ve)
# write href information
@@ -124,7 +152,12 @@ def mk_prop_response(self, uri, good_props, bad_props, doc):
fileloc = fileloc.encode('utf-8')
href=doc.createElement("D:href")
davpath = self._dataclass.parent.get_davpath()
- hurl = '%s://%s%s%s' % (uparts[0], uparts[1], davpath, urllib.quote(fileloc))
+ if uparts[0] and uparts[1]:
+ hurl = '%s://%s%s%s' % (uparts[0], uparts[1], davpath, urllib.quote(fileloc))
+ else:
+ # When the request has been relative, we don't have enough data to
+ # reply with absolute url here.
+ hurl = '%s%s' % (davpath, urllib.quote(fileloc))
huri=doc.createTextNode(hurl)
href.appendChild(huri)
re.appendChild(href)
@@ -133,6 +166,10 @@ def mk_prop_response(self, uri, good_props, bad_props, doc):
ps=doc.createElement("D:propstat")
if good_props:
re.appendChild(ps)
+ s=doc.createElement("D:status")
+ t=doc.createTextNode("HTTP/1.1 200 OK")
+ s.appendChild(t)
+ ps.appendChild(s)
gp=doc.createElement("D:prop")
for ns in good_props.keys():
@@ -141,15 +178,11 @@ def mk_prop_response(self, uri, good_props, bad_props, doc):
else:
ns_prefix="ns"+str(namespaces.index(ns))+":"
for p,v in good_props[ns].items():
- if not v:
+ if v is None:
continue
_prop_child(gp, ns, p, v)
ps.appendChild(gp)
- s=doc.createElement("D:status")
- t=doc.createTextNode("HTTP/1.1 200 OK")
- s.appendChild(t)
- ps.appendChild(s)
re.appendChild(ps)
# now write the errors!
@@ -159,6 +192,10 @@ def mk_prop_response(self, uri, good_props, bad_props, doc):
for ecode in bad_props.keys():
ps=doc.createElement("D:propstat")
re.appendChild(ps)
+ s=doc.createElement("D:status")
+ t=doc.createTextNode(utils.gen_estring(ecode))
+ s.appendChild(t)
+ ps.appendChild(s)
bp=doc.createElement("D:prop")
ps.appendChild(bp)
@@ -172,10 +209,6 @@ def mk_prop_response(self, uri, good_props, bad_props, doc):
pe=doc.createElement(ns_prefix+str(p))
bp.appendChild(pe)
- s=doc.createElement("D:status")
- t=doc.createTextNode(utils.gen_estring(ecode))
- s.appendChild(t)
- ps.appendChild(s)
re.appendChild(ps)
# return the new response element
@@ -198,7 +231,12 @@ def mk_propname_response(self,uri,propnames,doc):
fileloc = fileloc.encode('utf-8')
href=doc.createElement("D:href")
davpath = self._dataclass.parent.get_davpath()
- hurl = '%s://%s%s%s' % (uparts[0], uparts[1], davpath, urllib.quote(fileloc))
+ if uparts[0] and uparts[1]:
+ hurl = '%s://%s%s%s' % (uparts[0], uparts[1], davpath, urllib.quote(fileloc))
+ else:
+ # When the request has been relative, we don't have enough data to
+ # reply with absolute url here.
+ hurl = '%s%s' % (davpath, urllib.quote(fileloc))
huri=doc.createTextNode(hurl)
href.appendChild(huri)
re.appendChild(href)
@@ -230,3 +268,18 @@ def mk_propname_response(self,uri,propnames,doc):
PROPFIND.mk_prop_response = mk_prop_response
PROPFIND.mk_propname_response = mk_propname_response
+super_create_prop = REPORT.create_prop
+
+def create_prop(self):
+ try:
+ if (self.filter is not None) and self._depth == "0":
+ hrefs = self.filter.getElementsByTagNameNS('DAV:', 'href')
+ if hrefs:
+ self._depth = "1"
+ except Exception:
+ pass
+ return super_create_prop(self)
+
+REPORT.create_prop = create_prop
+
+#eof
diff --git a/addons/document_webdav/webdav_demo.xml b/addons/document_webdav/webdav_demo.xml
new file mode 100644
index 00000000000..45cd17ed288
--- /dev/null
+++ b/addons/document_webdav/webdav_demo.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ debug:
+ node_class
+ %(node_classname)s
+
+
+
+
+
+
+
diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py
index 44592243480..df2c4a871f6 100644
--- a/addons/document_webdav/webdav_server.py
+++ b/addons/document_webdav/webdav_server.py
@@ -57,7 +57,7 @@ def OpenDAVConfig(**kw):
class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
verbose = False
protocol_version = 'HTTP/1.1'
- _HTTP_OPTIONS= { 'DAV' : ['1',],
+ _HTTP_OPTIONS= { 'DAV' : ['1', '2'],
'Allow' : [ 'GET', 'HEAD', 'COPY', 'MOVE', 'POST', 'PUT',
'PROPFIND', 'PROPPATCH', 'OPTIONS', 'MKCOL',
'DELETE', 'TRACE', 'REPORT', ]
@@ -81,7 +81,15 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
def setup(self):
self.davpath = '/'+config.get_misc('webdav','vdir','webdav')
- self.baseuri = "http://%s:%d/"% (self.server.server_name, self.server.server_port)
+ addr, port = self.server.server_name, self.server.server_port
+ server_proto = getattr(self.server,'proto', 'http').lower()
+ try:
+ if hasattr(self.request, 'getsockname'):
+ addr, port = self.request.getsockname()
+ except Exception, e:
+ self.log_error("Cannot calculate own address: %s" , e)
+ # Too early here to use self.headers
+ self.baseuri = "%s://%s:%d/"% (server_proto, addr, port)
self.IFACE_CLASS = openerp_dav_handler(self, self.verbose)
def copymove(self, CLASS):
@@ -156,8 +164,6 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
etag = None
for match in self.headers['If-Match'].split(','):
- if match.startswith('"') and match.endswith('"'):
- match = match[1:-1]
if match == '*':
if dc.exists(uri):
test = True
@@ -208,8 +214,9 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
if self.headers.has_key("Content-Type"):
ct=self.headers['Content-Type']
try:
- location = dc.put(uri,body,ct)
+ location = dc.put(uri, body, ct)
except DAV_Error, (ec,dd):
+ self._logger.warning("Cannot PUT to %s: %s", uri, dd, exc_info=True)
return self.send_status(ec)
headers = {}
@@ -264,8 +271,7 @@ try:
handler.debug = config.get_misc('webdav','debug',True)
_dc = { 'verbose' : verbose,
'directory' : directory,
- 'lockemulation' : False,
-
+ 'lockemulation' : True,
}
conf = OpenDAVConfig(**_dc)
diff --git a/addons/document_webdav/webdav_setup.xml b/addons/document_webdav/webdav_setup.xml
new file mode 100644
index 00000000000..2bd41ddb69c
--- /dev/null
+++ b/addons/document_webdav/webdav_setup.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+ []
+
+
+
+
+
+ directory
+
+ principals
+
+
+
+ []
+
+
+
+
+
+
+ directory
+
+ groups
+
+
+
+ []
+
+
+
+
+
+ directory
+
+ resources
+
+
+ []
+
+
+
+
+
+
+ ressource
+
+
+ __uids__
+
+
+ []
+
+
+
+
+
+
+
+ ressource
+
+
+ users
+
+
+ []
+
+
+
+
+
+ directory
+
+ locations
+
+
+ DAV:
+ current-user-principal
+ ('href','DAV:','/%s/%s/principals/users/%s' % ('webdav',dbname, username ) )
+
+
+
+ DAV:
+ principal-URL
+ ('href','DAV:','/%s/%s/principals/users/%s' % ('webdav',dbname, username ) )
+
+
+
+
+
diff --git a/addons/document_webdav/webdav_view.xml b/addons/document_webdav/webdav_view.xml
new file mode 100644
index 00000000000..2ea0bca5279
--- /dev/null
+++ b/addons/document_webdav/webdav_view.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+ document.webdav.dir.property.form
+ document.webdav.dir.property
+ form
+
+
+
+
+
+
+ document.webdav.dir.property.tree
+ document.webdav.dir.property
+ tree
+
+
+
+
+
+
+
+
+
+
+ Search View: Directory DAV properties
+ document.webdav.dir.property
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ir.actions.act_window
+ document.webdav.dir.property
+ form
+ tree,form
+
+
+
+
+
+
+ document.directory.webdav.inherit
+ document.directory
+
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/email_template/__openerp__.py b/addons/email_template/__openerp__.py
index 6aa4899feb6..d5f5e9776d3 100644
--- a/addons/email_template/__openerp__.py
+++ b/addons/email_template/__openerp__.py
@@ -23,10 +23,10 @@
{
"name" : "Email Template for OpenERP",
"version" : "0.7 RC",
- "author" : "Sharoon Thomas, Openlabs",
+ "author" : "Openlabs",
"website" : "http://openerp.com",
"category" : "Added functionality",
- "depends" : ['base'],
+ "depends" : ['marketing'],
"description": """
Email Template is extraction of Power Email basically just to send the emails.
""",
diff --git a/addons/email_template/email_template_account_view.xml b/addons/email_template/email_template_account_view.xml
index 0c30d7d478f..97108cb9e33 100644
--- a/addons/email_template/email_template_account_view.xml
+++ b/addons/email_template/email_template_account_view.xml
@@ -2,7 +2,8 @@
-
+
diff --git a/addons/email_template/i18n/ru.po b/addons/email_template/i18n/ru.po
index 6d812b3a358..689ca686703 100644
--- a/addons/email_template/i18n/ru.po
+++ b/addons/email_template/i18n/ru.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2010-08-20 05:34+0000\n"
-"PO-Revision-Date: 2010-10-02 08:00+0000\n"
-"Last-Translator: irbiserg@mail.ru \n"
+"PO-Revision-Date: 2010-10-17 18:13+0000\n"
+"Last-Translator: Wladimir Rossinski \n"
"Language-Team: Russian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-03 04:57+0000\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:56+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: email_template
@@ -392,7 +392,7 @@ msgstr ""
#. module: email_template
#: selection:email.template,template_language:0
msgid "Mako Templates"
-msgstr ""
+msgstr "Шаблоны Mako"
#. module: email_template
#: help:email.template,def_body_html:0
diff --git a/addons/email_template/i18n/sr.po b/addons/email_template/i18n/sr.po
new file mode 100644
index 00000000000..9d2d73ceafa
--- /dev/null
+++ b/addons/email_template/i18n/sr.po
@@ -0,0 +1,1293 @@
+# Serbian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 05:34+0000\n"
+"PO-Revision-Date: 2010-10-16 09:14+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Serbian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-17 04:53+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: email_template
+#: view:email_template.send.wizard:0
+msgid "Send mail Wizard"
+msgstr "Carobnjak Slanja Emaila"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "Email Account Configuration"
+msgstr "Konfiguracija Email-a"
+
+#. module: email_template
+#: code:addons/email_template/wizard/email_template_send_wizard.py:0
+#, python-format
+msgid "Emails for multiple items saved in outbox."
+msgstr "Emailovi sa vise stavki sacuvanih u outbox-u"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Email Data"
+msgstr "Podaci Email-a"
+
+#. module: email_template
+#: field:email.template,def_to:0
+#: field:email_template.mailbox,email_to:0
+msgid "Recipient (To)"
+msgstr "Prima (za)"
+
+#. module: email_template
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Pogrešno ime modela u definiciji akcije."
+
+#. module: email_template
+#: selection:email_template.send.wizard,state:0
+msgid "Wizard Complete"
+msgstr "Carobnjak je Zavrsio"
+
+#. module: email_template
+#: selection:email_template.mailbox,mail_type:0
+msgid "Plain Text & HTML with no attachments"
+msgstr "Cisti Tekst & HTML bez attachemnta"
+
+#. module: email_template
+#: code:addons/email_template/email_template_account.py:0
+#, python-format
+msgid ""
+"Mail from Account %s failed on login. Probable Reason:Could not login to "
+"server\n"
+"Error: %s"
+msgstr ""
+"Email naloga %s nije uspeo da se uloguje. MOguci Razlozi: Ne mogu se "
+"konektovati ba server\n"
+"Greska: %s"
+
+#. module: email_template
+#: field:email_template.preview,body_html:0
+#: field:email_template.preview,body_text:0
+#: field:email_template.send.wizard,body_html:0
+#: field:email_template.send.wizard,body_text:0
+msgid "Body"
+msgstr "Sadrzaj"
+
+#. module: email_template
+#: code:addons/email_template/email_template.py:0
+#, python-format
+msgid "Deletion of Record failed"
+msgstr "Brisanje zapisa nije uspleo"
+
+#. module: email_template
+#: help:email_template.account,company:0
+msgid ""
+"Select if this mail account does not belong to specific user but to the "
+"organization as a whole. eg: info@companydomain.com"
+msgstr ""
+"Selektuj ako ovaj nalog ne pripada specificiranom korisniku ali je deo neke "
+"organizacije npr:info@companydomain.com"
+
+#. module: email_template
+#: view:email_template.send.wizard:0
+msgid "Send now"
+msgstr "Posalji sada"
+
+#. module: email_template
+#: view:email_template.mailbox:0
+#: selection:email_template.mailbox,state:0
+msgid "Not Applicable"
+msgstr "Ne moze se dodati"
+
+#. module: email_template
+#: model:ir.ui.menu,name:email_template.menu_email_template_account_all
+msgid "Email Accounts"
+msgstr "Email Nalozi"
+
+#. module: email_template
+#: view:email_template.send.wizard:0
+msgid "Send all mails"
+msgstr "Posalji SVE Emailove"
+
+#. module: email_template
+#: field:email_template.mailbox,server_ref:0
+msgid "Server Reference of mail"
+msgstr "Referenca Servera Email-a"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "My Accounts"
+msgstr "Moji Nalozi"
+
+#. module: email_template
+#: view:email_template.mailbox:0
+msgid "Send Mail"
+msgstr "Pošalji poštu"
+
+#. module: email_template
+#: selection:email_template.account,state:0
+msgid "Approved"
+msgstr "Odobreno"
+
+#. module: email_template
+#: field:email.template,table_html:0
+msgid "HTML code"
+msgstr "HTML zapis"
+
+#. module: email_template
+#: help:email.template,file_name:0
+msgid ""
+"File name pattern can be specified with placeholders.eg. 2009_SO003.pdf"
+msgstr ""
+"Ime fajla moze biti napisano i sa razmaknicama( donja crta) npr "
+"2009_SO003.pdf"
+
+#. module: email_template
+#: field:email.template,from_account:0
+msgid "Email Account"
+msgstr "Email nalog"
+
+#. module: email_template
+#: code:addons/email_template/wizard/email_template_send_wizard.py:0
+#, python-format
+msgid "Email sending failed for one or more objects."
+msgstr "Slanje Emaila je neuspesno zbog jednog ili vise objekata"
+
+#. module: email_template
+#: help:email.template,lang:0
+msgid ""
+"The default language for the email. Placeholders can be used here. eg. "
+"${object.partner_id.lang}"
+msgstr ""
+"Predlozeni jezik Email-a. Razmaknice(donja crta) se mogu ovde koristiti. Npr "
+"${object.partner_id.lang}"
+
+#. module: email_template
+#: help:email_template.account,smtpport:0
+msgid "Enter port number,eg:SMTP-587 "
+msgstr "Upisi broj Port-a npr SMTP-587 "
+
+#. module: email_template
+#: field:email.template,reply_to:0
+#: field:email_template.mailbox,reply_to:0
+#: field:email_template.preview,reply_to:0
+#: field:email_template.send.wizard,reply_to:0
+msgid "Reply-To"
+msgstr "Odgovor - Za"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Delete Action"
+msgstr "Obriši radnju"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "Approve Account"
+msgstr "Dozvoli Nalog"
+
+#. module: email_template
+#: model:ir.ui.menu,name:email_template.menu_email_template_all
+msgid "E-MAIL Templates"
+msgstr "E-MAIL Obrasci"
+
+#. module: email_template
+#: field:email_template.preview,rel_model_ref:0
+#: field:email_template.send.wizard,rel_model_ref:0
+msgid "Referred Document"
+msgstr "Referentni Dokumenat"
+
+#. module: email_template
+#: field:email_template.send.wizard,full_success:0
+msgid "Complete Success"
+msgstr "Uspesno kompletirano"
+
+#. module: email_template
+#: selection:email_template.account,send_pref:0
+msgid "Both HTML & Text (Mixed)"
+msgstr "Oba HTML & Tekst ( Miksovano)"
+
+#. module: email_template
+#: view:email_template.preview:0
+msgid "OK"
+msgstr "U redu"
+
+#. module: email_template
+#: selection:email_template.account,send_pref:0
+msgid "Both HTML & Text (Alternative)"
+msgstr "Oba HTML & Tekst ( Aternativno)"
+
+#. module: email_template
+#: code:addons/email_template/email_template.py:0
+#, python-format
+msgid "Mako templates not installed"
+msgstr "Mako Obrazac nije instaliran"
+
+#. module: email_template
+#: field:email_template.send.wizard,requested:0
+msgid "No of requested Mails"
+msgstr "Br. trazenih Poruka"
+
+#. module: email_template
+#: view:email_template.mailbox:0
+msgid "Download Full Mail"
+msgstr "Download Celu poruku"
+
+#. module: email_template
+#: help:email.template,def_to:0
+msgid "The default recipient of email.Placeholders can be used here."
+msgstr ""
+"Predlozeni primalac Email-a. Razmaknice se mogu koristiti ( donja crta)"
+
+#. module: email_template
+#: view:email_template.mailbox:0
+msgid "Mailboxes"
+msgstr "Postanski Sanducici"
+
+#. module: email_template
+#: field:email.template,attachment_ids:0
+msgid "Attached Files"
+msgstr "Prikačeni fajlovi"
+
+#. module: email_template
+#: field:email_template.account,smtpssl:0
+msgid "SSL/TLS (only in python 2.6)"
+msgstr "SSL/TLS (samo u python 2.6)"
+
+#. module: email_template
+#: field:email_template.account,email_id:0
+msgid "From Email"
+msgstr "Od Email-a"
+
+#. module: email_template
+#: code:addons/email_template/email_template.py:0
+#, python-format
+msgid "Warning"
+msgstr "Upozorenje"
+
+#. module: email_template
+#: view:email_template.account:0
+#: model:ir.actions.act_window,name:email_template.action_email_template_account_tree_all
+msgid "Accounts"
+msgstr "Nalozi"
+
+#. module: email_template
+#: field:email.template,track_campaign_item:0
+msgid "Track campaign items"
+msgstr "Prati stavke Kampanje"
+
+#. module: email_template
+#: view:email_template.preview:0
+msgid "Body(Text)"
+msgstr "Sadrzaj ( text)"
+
+#. module: email_template
+#: view:email_template.send.wizard:0
+msgid ""
+"Tip: Multiple emails are sent in the same language (the first one is "
+"proposed). We suggest you send emails in groups according to language."
+msgstr ""
+"TIP: Visestruki emailovi su poslati na istom jeziku( prvi koji je "
+"predlozen). Savetujemo vam da saljete E mailove u grupama po odgovarajucim "
+"jezicima."
+
+#. module: email_template
+#: help:email.template,reply_to:0
+#: help:email_template.preview,reply_to:0
+#: help:email_template.send.wizard,reply_to:0
+msgid ""
+"The address recipients should reply to, if different from the From address. "
+"Placeholders can be used here."
+msgstr ""
+
+#. module: email_template
+#: field:email_template.mailbox,subject:0
+#: field:email_template.preview,subject:0
+#: field:email_template.send.wizard,subject:0
+msgid "Subject"
+msgstr "Tema"
+
+#. module: email_template
+#: code:addons/email_template/email_template_account.py:0
+#, python-format
+msgid "Reason: %s"
+msgstr ""
+
+#. module: email_template
+#: help:email_template.account,email_id:0
+msgid "eg: yourname@yourdomain.com "
+msgstr "npr: yourname@yourdomain.com "
+
+#. module: email_template
+#: field:email_template.mailbox,email_from:0
+msgid "From"
+msgstr "Od"
+
+#. module: email_template
+#: field:email_template.preview,ref_template:0
+#: field:email_template.send.wizard,ref_template:0
+msgid "Template"
+msgstr "Šablon"
+
+#. module: email_template
+#: field:email.template,def_body_text:0
+#: view:email_template.mailbox:0
+#: field:email_template.mailbox,body_text:0
+msgid "Standard Body (Text)"
+msgstr "Standarni Sadrzaj ( text)"
+
+#. module: email_template
+#: view:email_template.mailbox:0
+#: selection:email_template.mailbox,state:0
+msgid "Sending"
+msgstr "Слање"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Insert Simple Field"
+msgstr "Ubaci Prosto polje"
+
+#. module: email_template
+#: view:email_template.preview:0
+msgid "Body(Html)"
+msgstr "Telo ( HTML )"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "Send/Receive"
+msgstr "Slanje/Prijem"
+
+#. module: email_template
+#: model:ir.actions.act_window,name:email_template.wizard_email_template_preview
+msgid "Template Preview"
+msgstr "Pregled Šablona"
+
+#. module: email_template
+#: field:email.template,def_body_html:0
+msgid "Body (Text-Web Client Only)"
+msgstr "Sadrzaj ( Samo TEKST-WEB Klijent)"
+
+#. module: email_template
+#: field:email.template,ref_ir_value:0
+msgid "Wizard Button"
+msgstr "Dugme čarobnjaka"
+
+#. module: email_template
+#: code:addons/email_template/email_template_account.py:0
+#, python-format
+msgid "Out going connection test failed"
+msgstr "Test izlazne konekcije nije uspeo"
+
+#. module: email_template
+#: code:addons/email_template/email_template_account.py:0
+#, python-format
+msgid "Mail from Account %s successfully Sent."
+msgstr "Mail od naloga %s je uspesno poslat"
+
+#. module: email_template
+#: view:email.template:0
+#: view:email_template.mailbox:0
+msgid "Standard Body"
+msgstr "Standardan sadrzaj"
+
+#. module: email_template
+#: selection:email.template,template_language:0
+msgid "Mako Templates"
+msgstr "Mako Sabloni"
+
+#. module: email_template
+#: help:email.template,def_body_html:0
+#: help:email.template,def_body_text:0
+msgid "The text version of the mail"
+msgstr "Tekstualna verzija poruke"
+
+#. module: email_template
+#: code:addons/email_template/email_template.py:0
+#, python-format
+msgid " (Email Attachment)"
+msgstr " (Email Attachment)"
+
+#. module: email_template
+#: selection:email_template.mailbox,folder:0
+msgid "Sent Items"
+msgstr "Poslate Stavke"
+
+#. module: email_template
+#: code:addons/email_template/email_template_mailbox.py:0
+#, python-format
+msgid ""
+"Sending of Mail %s failed. Probable Reason:Could not login to server\n"
+"Error: %s"
+msgstr ""
+"Slanje poruke %s nije uspelo. Verovatan uzrok: Ne mogu se logovati na "
+"server\n"
+"Greska: %s"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "Test Outgoing Connection"
+msgstr "Test Izlazne Konekcije"
+
+#. module: email_template
+#: model:ir.actions.act_window,name:email_template.action_email_template_mailbox
+msgid "Mailbox"
+msgstr "Postansko Sanduče"
+
+#. module: email_template
+#: help:email.template,attachment_ids:0
+msgid ""
+"You may attach existing files to this template, so they will be added in all "
+"emails created from this template"
+msgstr ""
+"Mozete pridodati postojeci fajl ovom sablonu, tako da ce on biti dodat u "
+"svim poruka,a kreiranih iz ovog sablona"
+
+#. module: email_template
+#: field:email_template.mailbox,account_id:0
+msgid "User account"
+msgstr "Korisnicki nalog"
+
+#. module: email_template
+#: field:email_template.send.wizard,signature:0
+msgid "Attach my signature to mail"
+msgstr "Dodaj moj potpis poruci"
+
+#. module: email_template
+#: code:addons/email_template/wizard/email_template_send_wizard.py:0
+#: view:email.template:0
+#, python-format
+msgid "Report"
+msgstr "Izveštaj"
+
+#. module: email_template
+#: help:email.template,model_object_field:0
+msgid ""
+"Select the field from the model you want to use.\n"
+"If it is a relationship field you will be able to choose the nested values "
+"in the box below\n"
+"(Note:If there are no values make sure you have selected the correct model)"
+msgstr ""
+"Selektuj polje modela koje zelis da koristis\n"
+"Ako je to vezno polje,. bicete u mogucnosti da izaberete podveze u polju "
+"ispod\n"
+"( Napomena: Ako nema nikakvog izbora budite sigurni da ste izabrali ispravan "
+"model)"
+
+#. module: email_template
+#: view:email.template:0
+#: view:email_template.mailbox:0
+msgid "Advanced"
+msgstr "Napredno"
+
+#. module: email_template
+#: constraint:ir.cron:0
+msgid "Invalid arguments"
+msgstr "Neispravni Argumenti"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Expression Builder"
+msgstr "Gradilac Ekstenizja"
+
+#. module: email_template
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Nevažeći XML za pregled arhitekture"
+
+#. module: email_template
+#: selection:email_template.mailbox,mail_type:0
+msgid "HTML Body"
+msgstr "HTML Sadrzaj"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "Suspend Account"
+msgstr "Suspendovan nalog"
+
+#. module: email_template
+#: help:email.template,null_value:0
+msgid "This Value is used if the field is empty"
+msgstr "Ova se vrednost koristi ako je polje prazno"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Preview Template"
+msgstr "Pregled Sablona"
+
+#. module: email_template
+#: field:email_template.account,smtpserver:0
+msgid "Server"
+msgstr "Server"
+
+#. module: email_template
+#: help:email.template,copyvalue:0
+msgid ""
+"Copy and paste the value in the location you want to use a system value."
+msgstr ""
+"Iskopiraj i zalepi vrednost na lokaciju koju zelis da se koristi kao "
+"sistemsku vrednost"
+
+#. module: email_template
+#: help:email.template,sub_model_object_field:0
+msgid ""
+"When you choose relationship fields this field will specify the sub value "
+"you can use."
+msgstr ""
+"Kada izaberete vezu polja, ovo polje ce specificirati sub vrednost koju "
+"mozete koristiti"
+
+#. module: email_template
+#: help:email.template,sub_object:0
+msgid ""
+"When a relation field is used this field will show you the type of field you "
+"have selected"
+msgstr ""
+"Kada se koristi vezno polje, ovo polje ce vam pokazati tip polja koje ste "
+"izabrali"
+
+#. module: email_template
+#: field:email.template,lang:0
+msgid "Language"
+msgstr "Jezik"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Body (Raw HTML)"
+msgstr "Sadrzaj Texta (Raw HTML)"
+
+#. module: email_template
+#: field:email.template,use_sign:0
+msgid "Signature"
+msgstr "Potpis"
+
+#. module: email_template
+#: field:email.template,sub_object:0
+msgid "Sub-model"
+msgstr "Sub-model"
+
+#. module: email_template
+#: view:email_template.send.wizard:0
+msgid "Body (Plain Text)"
+msgstr "Telo teksta (Plain Text)"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Body (Text)"
+msgstr "Telo teksta (Text)"
+
+#. module: email_template
+#: field:email_template.mailbox,date_mail:0
+msgid "Rec/Sent Date"
+msgstr "Datum Slanja/Prijema"
+
+#. module: email_template
+#: field:email.template,report_template:0
+msgid "Report to send"
+msgstr "Izvestaj za slanje"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "Server Information"
+msgstr "podaci o serveru"
+
+#. module: email_template
+#: field:email_template.send.wizard,generated:0
+msgid "No of generated Mails"
+msgstr "Br. Generisanih poruka"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Mail Details"
+msgstr "Detalji poruke"
+
+#. module: email_template
+#: code:addons/email_template/email_template_account.py:0
+#, python-format
+msgid "SMTP SERVER or PORT not specified"
+msgstr "SMTP SERVER ili PORT nije specificiran"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Note: This is Raw HTML."
+msgstr "Napomena: Ovo je Raw HTML."
+
+#. module: email_template
+#: selection:email_template.send.wizard,state:0
+msgid "Multiple Mail Wizard Step 1"
+msgstr "Visestruki Carobnjak Meilova Korak 1"
+
+#. module: email_template
+#: field:email_template.account,user:0
+msgid "Related User"
+msgstr "Vezni Korisnik"
+
+#. module: email_template
+#: field:email_template.mailbox,body_html:0
+msgid "Body (Rich Text Clients Only)"
+msgstr "Telo poruke (Rich Text Clients Only)"
+
+#. module: email_template
+#: selection:email_template.account,company:0
+msgid "Yes"
+msgstr "Da"
+
+#. module: email_template
+#: field:email.template,ref_ir_act_window:0
+msgid "Window Action"
+msgstr "Radnja prozora"
+
+#. module: email_template
+#: code:addons/email_template/email_template_account.py:0
+#, python-format
+msgid ""
+"Datetime Extraction failed.Date:%s \\n \tError:%s"
+msgstr ""
+"Preuzimanje datuma i vremena nije uspelo. Datum:Date:%s \\n \tGreska:%s"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "SMTP Server"
+msgstr "SMTP server"
+
+#. module: email_template
+#: selection:email_template.account,send_pref:0
+msgid "HTML, otherwise Text"
+msgstr "HTML, a drugacije Text"
+
+#. module: email_template
+#: view:email_template.mailbox:0
+#: selection:email_template.mailbox,folder:0
+msgid "Drafts"
+msgstr "U pripremi"
+
+#. module: email_template
+#: selection:email_template.account,company:0
+msgid "No"
+msgstr "Ne"
+
+#. module: email_template
+#: field:email_template.mailbox,mail_type:0
+msgid "Mail Contents"
+msgstr "Sadrzaj Poste"
+
+#. module: email_template
+#: code:addons/email_template/email_template.py:0
+#, python-format
+msgid "The template name must be unique !"
+msgstr "Ime Sablona mora biti jedinstveno"
+
+#. module: email_template
+#: field:email.template,def_bcc:0
+#: field:email_template.mailbox,email_bcc:0
+#: field:email_template.preview,bcc:0
+#: field:email_template.send.wizard,bcc:0
+msgid "BCC"
+msgstr "BCC"
+
+#. module: email_template
+#: code:addons/email_template/email_template_account.py:0
+#, python-format
+msgid ""
+"Mail from Account %s failed. Probable Reason:Server Send Error\n"
+"Description: %s"
+msgstr ""
+
+#. module: email_template
+#: selection:email_template.mailbox,mail_type:0
+msgid "Plain Text"
+msgstr "Samo tekst"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "Draft"
+msgstr "Priprema"
+
+#. module: email_template
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr "Greska! Ne mozete kreirati rekursivni meni."
+
+#. module: email_template
+#: field:email.template,model_int_name:0
+msgid "Model Internal Name"
+msgstr "Interni Naziv Modula"
+
+#. module: email_template
+#: field:email.template,message_id:0
+#: field:email_template.mailbox,message_id:0
+#: field:email_template.preview,message_id:0
+#: field:email_template.send.wizard,message_id:0
+msgid "Message-ID"
+msgstr "Sifra Poruke"
+
+#. module: email_template
+#: help:email_template.mailbox,server_ref:0
+msgid "Applicable for inward items only"
+msgstr "Prihvatljivo samo za unutrasnje stavke"
+
+#. module: email_template
+#: view:email_template.send.wizard:0
+msgid ""
+"After clicking send all mails, mails will be sent to outbox and cleared in "
+"next Send/Recieve"
+msgstr ""
+"Nakon klika na 'posalji sve poruke', poruke ce biti poslate u outbox i "
+"ociscene u sledecem koraku Posalji/Primi"
+
+#. module: email_template
+#: field:email_template.account,state:0
+#: field:email_template.mailbox,state:0
+#: field:email_template.send.wizard,state:0
+msgid "Status"
+msgstr "Status"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "Outgoing"
+msgstr "Odlazno"
+
+#. module: email_template
+#: selection:email_template.account,state:0
+msgid "Initiated"
+msgstr "Inicirano"
+
+#. module: email_template
+#: help:email.template,use_sign:0
+msgid "the signature from the User details will be appended to the mail"
+msgstr "Potpis iz detalja korisnika ce biti pridodat poruci"
+
+#. module: email_template
+#: field:email_template.send.wizard,from:0
+msgid "From Account"
+msgstr "Od Naloga"
+
+#. module: email_template
+#: selection:email_template.mailbox,mail_type:0
+msgid "Intermixed content"
+msgstr "Izmesani sadrzaj"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "Request Re-activation"
+msgstr "Zahtev za Re-Aktivacijom"
+
+#. module: email_template
+#: view:email.template:0
+#: model:ir.actions.act_window,name:email_template.action_email_template_tree_all
+msgid "Email Templates"
+msgstr "Sabloni Poruka"
+
+#. module: email_template
+#: field:email_template.account,smtpuname:0
+msgid "User Name"
+msgstr "Korisničko ime"
+
+#. module: email_template
+#: field:email.template,sub_model_object_field:0
+msgid "Sub Field"
+msgstr "Pod Polje"
+
+#. module: email_template
+#: field:email_template.mailbox,user:0
+msgid "User"
+msgstr "Korisnik"
+
+#. module: email_template
+#: help:email.template,allowed_groups:0
+msgid ""
+"Only users from these groups will be allowed to send mails from this Template"
+msgstr ""
+"Samo korisnicima iz ovih grupa ce biti dozvoljeno da salju poruke iz ovog "
+"Sablona"
+
+#. module: email_template
+#: view:email_template.mailbox:0
+#: selection:email_template.mailbox,folder:0
+msgid "Outbox"
+msgstr "OutBox"
+
+#. module: email_template
+#: view:email_template.send.wizard:0
+msgid "Save in Drafts"
+msgstr "Sacuvaj u Pripremi"
+
+#. module: email_template
+#: help:email.template,def_subject:0
+msgid "The default subject of email. Placeholders can be used here."
+msgstr ""
+"Podrazumevana Tema poruke. Razmaknice se mogu ovde koristiti ( donja crta)"
+
+#. module: email_template
+#: field:email_template.account,smtptls:0
+msgid "TLS"
+msgstr "TLS"
+
+#. module: email_template
+#: view:email_template.send.wizard:0
+msgid ""
+"Add here all attachments of the current document you want to include in the "
+"e-mail."
+msgstr ""
+"Ubaci ovde sve attachmente za dati dokument koji zelis da prikljucis poruci"
+
+#. module: email_template
+#: model:ir.model,name:email_template.model_email_template_send_wizard
+msgid "This is the wizard for sending mail"
+msgstr "Craobnjak Slanja Poste"
+
+#. module: email_template
+#: code:addons/email_template/email_template.py:0
+#: code:addons/email_template/email_template_account.py:0
+#: code:addons/email_template/email_template_mailbox.py:0
+#: code:addons/email_template/wizard/email_template_send_wizard.py:0
+#: model:ir.ui.menu,name:email_template.menu_email_template
+#, python-format
+msgid "Email Template"
+msgstr "Sablon Poruka"
+
+#. module: email_template
+#: model:ir.ui.menu,name:email_template.menu_email_template_personal_mails
+msgid "Personal Mails"
+msgstr "Licne Poruke"
+
+#. module: email_template
+#: code:addons/email_template/email_template_mailbox.py:0
+#, python-format
+msgid ""
+"Error sending mail: %s\" % str(e)))\n"
+" \n"
+" def send_all_mail(self, cr, uid, ids=None, context=None):\n"
+" if ids is None:\n"
+" ids = []\n"
+" if context is None:\n"
+" context = {}\n"
+" filters = [('folder', '=', 'outbox"
+msgstr ""
+"Greska slanja poruke: %s\" % str(e)))\n"
+" \n"
+" def send_all_mail(self, cr, uid, ids=None, context=None):\n"
+"if ids is None:\n"
+"ids = []\n"
+"if context is None:\n"
+"context = {}\n"
+"filters = [('folder', '=', 'outbox"
+
+#. module: email_template
+#: field:email.template,file_name:0
+msgid "File Name Pattern"
+msgstr "Ime fajla paterna"
+
+#. module: email_template
+#: code:addons/email_template/email_template.py:0
+#, python-format
+msgid "Send Mail (%s)"
+msgstr "Slanje POruke (%s)"
+
+#. module: email_template
+#: field:email_template.send.wizard,report:0
+msgid "Report File Name"
+msgstr "Ime Fajla Izvestaja"
+
+#. module: email_template
+#: field:email.template,copyvalue:0
+msgid "Expression"
+msgstr "Izraz"
+
+#. module: email_template
+#: view:email_template.mailbox:0
+#: field:email_template.mailbox,history:0
+msgid "History"
+msgstr "Istorija"
+
+#. module: email_template
+#: code:addons/email_template/email_template.py:0
+#, python-format
+msgid "Django templates not installed"
+msgstr "Django Sabloni nisu instalirani"
+
+#. module: email_template
+#: view:email.template:0
+#: view:email_template.mailbox:0
+#: field:email_template.mailbox,attachments_ids:0
+#: view:email_template.send.wizard:0
+#: field:email_template.send.wizard,attachment_ids:0
+msgid "Attachments"
+msgstr "Prilozi"
+
+#. module: email_template
+#: field:email_template.preview,to:0
+#: field:email_template.send.wizard,to:0
+msgid "To"
+msgstr "Za"
+
+#. module: email_template
+#: field:email_template.account,smtpport:0
+msgid "SMTP Port "
+msgstr "SMTP Port "
+
+#. module: email_template
+#: selection:email_template.account,send_pref:0
+msgid "Text, otherwise HTML"
+msgstr "Text, inace HTML"
+
+#. module: email_template
+#: code:addons/email_template/email_template.py:0
+#, python-format
+msgid "Copy of template "
+msgstr "Kopija Sablona "
+
+#. module: email_template
+#: view:email_template.send.wizard:0
+msgid "Discard Mail"
+msgstr "Izbrisi poruku"
+
+#. module: email_template
+#: model:ir.model,name:email_template.model_email_template
+msgid "Email Templates for Models"
+msgstr "Sabloni Poruka za Modele"
+
+#. module: email_template
+#: view:email_template.send.wizard:0
+msgid "Close"
+msgstr "Zatvori"
+
+#. module: email_template
+#: view:email_template.mailbox:0
+msgid "Body (HTML-Web Client Only)"
+msgstr "Sadrzaj (HTML-Web Client Only)"
+
+#. module: email_template
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !"
+
+#. module: email_template
+#: code:addons/email_template/wizard/email_template_send_wizard.py:0
+#, python-format
+msgid "%s (Email Attachment)"
+msgstr "Copy text \t %s (Email Attachment)"
+
+#. module: email_template
+#: code:addons/email_template/wizard/email_template_send_wizard.py:0
+#, python-format
+msgid ""
+"No personal email accounts are configured for you. \n"
+"Either ask admin to enforce an account for this template or get yourself a "
+"personal email account."
+msgstr ""
+"Ni jedan locni nalog nije kreiran za vas. \n"
+"Ili pitajte administratora ili napravite sami sebi licni postanski nalog."
+
+#. module: email_template
+#: field:email.template,allowed_groups:0
+msgid "Allowed User Groups"
+msgstr "Dozvoljene Korisnicke Grupe"
+
+#. module: email_template
+#: field:email.template,model_object_field:0
+msgid "Field"
+msgstr "Polje"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "User Information"
+msgstr "Podaci o korisniku"
+
+#. module: email_template
+#: view:email_template.account:0
+#: selection:email_template.account,state:0
+msgid "Suspended"
+msgstr "Суспендован"
+
+#. module: email_template
+#: field:email_template.mailbox,folder:0
+msgid "Folder"
+msgstr "Fascikla"
+
+#. module: email_template
+#: view:email_template.mailbox:0
+#: selection:email_template.mailbox,folder:0
+msgid "Trash"
+msgstr "Smeće"
+
+#. module: email_template
+#: model:ir.model,name:email_template.model_email_template_mailbox
+msgid "Email Mailbox"
+msgstr "Postansko Sanduce"
+
+#. module: email_template
+#: help:email_template.account,smtpuname:0
+msgid ""
+"Specify the username if your SMTP server requires authentication, otherwise "
+"leave it empty."
+msgstr ""
+"Specificiraj korisnicko ime ako tvoj SMTP zahteva autorizaciju, inace ostavi "
+"prazno."
+
+#. module: email_template
+#: code:addons/email_template/wizard/email_template_send_wizard.py:0
+#, python-format
+msgid "Missing mail account"
+msgstr "Nedostaje Email nalog"
+
+#. module: email_template
+#: code:addons/email_template/email_template_account.py:0
+#, python-format
+msgid "SMTP Test Connection Was Successful"
+msgstr "SMTP test je prosao uspesno"
+
+#. module: email_template
+#: model:ir.module.module,shortdesc:email_template.module_meta_information
+msgid "Email Template for OpenERP"
+msgstr "Sablon poruka za OpenERP"
+
+#. module: email_template
+#: field:email_template.account,name:0
+msgid "Description"
+msgstr "Opis"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Create Action"
+msgstr "Kreiraj akciju"
+
+#. module: email_template
+#: code:addons/email_template/email_template_account.py:0
+#, python-format
+msgid "Mail from Account %s failed. Probable Reason:Account not approved"
+msgstr "Poruka sa naloga %s nije uspela. Moguci razlog: Nalog nije omogucen"
+
+#. module: email_template
+#: field:email.template,null_value:0
+msgid "Null Value"
+msgstr "Null вредност"
+
+#. module: email_template
+#: field:email.template,template_language:0
+msgid "Templating Language"
+msgstr "Jezik Sablona"
+
+#. module: email_template
+#: field:email.template,def_cc:0
+#: field:email_template.mailbox,email_cc:0
+#: field:email_template.preview,cc:0
+#: field:email_template.send.wizard,cc:0
+msgid "CC"
+msgstr "CC"
+
+#. module: email_template
+#: view:email_template.mailbox:0
+msgid "Sent"
+msgstr "Poslato"
+
+#. module: email_template
+#: field:email_template.account,smtppass:0
+msgid "Password"
+msgstr "Lozinka"
+
+#. module: email_template
+#: help:email.template,message_id:0
+#: help:email_template.preview,message_id:0
+#: help:email_template.send.wizard,message_id:0
+msgid ""
+"The Message-ID header value, if you need tospecify it, for example to "
+"automatically recognize the replies later. Placeholders can be used here."
+msgstr ""
+"Vrednost Sifre poruke, ako trebas da je specificiras. Na primer da bi je "
+"automatski prepoznao kasnije."
+
+#. module: email_template
+#: model:ir.ui.menu,name:email_template.menu_email_template_configuration
+msgid "Emails"
+msgstr "Email-ovi"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Templates"
+msgstr "Šabloni"
+
+#. module: email_template
+#: field:email_template.preview,report:0
+msgid "Report Name"
+msgstr "Naziv izveštaja"
+
+#. module: email_template
+#: field:email.template,name:0
+msgid "Name"
+msgstr "Ime"
+
+#. module: email_template
+#: model:ir.model,name:email_template.model_email_template_preview
+msgid "Email Template Preview"
+msgstr "Pregled Sablona Poruke"
+
+#. module: email_template
+#: view:email_template.preview:0
+msgid "Email Preview"
+msgstr "Pregled Poruke"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Existing files"
+msgstr "Postojeci fajlovi"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "Personal Accounts"
+msgstr "Licni Nalozi"
+
+#. module: email_template
+#: model:ir.module.module,description:email_template.module_meta_information
+msgid ""
+"\n"
+" Email Template is extraction of Power Email basically just to send the "
+"emails.\n"
+" "
+msgstr ""
+"\n"
+" Sablon Poruke je izvucen iz Power Email, samo da bi poslao poruke.\n"
+" "
+
+#. module: email_template
+#: view:email_template.send.wizard:0
+msgid "Body (HTML)"
+msgstr "Sadrzaj (HTML)"
+
+#. module: email_template
+#: help:email.template,table_html:0
+msgid ""
+"Copy this html code to your HTML message body for displaying the info in "
+"your mail."
+msgstr ""
+"Iskopiraj ovaj HTML kod u telo svoje HTML poruke da bi se prikazala "
+"informacija u vasoj poruci"
+
+#. module: email_template
+#: model:ir.model,name:email_template.model_email_template_account
+msgid "email_template.account"
+msgstr "email_template.account"
+
+#. module: email_template
+#: field:email.template,object_name:0
+#: field:email_template.preview,rel_model:0
+#: field:email_template.send.wizard,rel_model:0
+msgid "Model"
+msgstr "Model"
+
+#. module: email_template
+#: code:addons/email_template/email_template_account.py:0
+#, python-format
+msgid "Core connection for the given ID does not exist"
+msgstr "Osnovna Konekcija za datu Sifru NE postoji"
+
+#. module: email_template
+#: field:email_template.account,company:0
+msgid "Corporate"
+msgstr "Saradjivanje"
+
+#. module: email_template
+#: help:email_template.account,smtpserver:0
+msgid "Enter name of outgoing server, eg:smtp.gmail.com "
+msgstr "Upisi ime izlaznog servera, npr: smtp.gmail.com "
+
+#. module: email_template
+#: model:ir.ui.menu,name:email_template.menu_email_template_company_mails
+msgid "Company Mails"
+msgstr "Poruke Preduzeca"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Addresses"
+msgstr "Adrese"
+
+#. module: email_template
+#: help:email.template,from_account:0
+msgid "Emails will be sent from this approved account."
+msgstr "Poruke ce biti poslate sa ovog omogucenog naloga"
+
+#. module: email_template
+#: field:email.template,def_subject:0
+msgid "Default Subject"
+msgstr "Predefinisana tema"
+
+#. module: email_template
+#: help:email.template,def_bcc:0
+msgid ""
+"Blind Carbon Copy address(es), comma-separated. Placeholders can be used "
+"here."
+msgstr ""
+"Blind Carbon Copy address(es), comma-separated. Placeholders can be used "
+"here."
+
+#. module: email_template
+#: code:addons/email_template/email_template_account.py:0
+#, python-format
+msgid ""
+"Mail from Account %s failed. Probable Reason:MIME Error\n"
+"Description: %s"
+msgstr ""
+"Poruka sa Naloga %s nije prosla. MOguci Razlog: MIME GRESKA\n"
+"Opis: %s"
+
+#. module: email_template
+#: field:email_template.account,send_pref:0
+msgid "Mail Format"
+msgstr "Format Poruke"
+
+#. module: email_template
+#: view:email.template:0
+msgid "Actions"
+msgstr "Akcije"
+
+#. module: email_template
+#: view:email_template.account:0
+msgid "Company Accounts"
+msgstr "Nalozi Preduzeca"
+
+#. module: email_template
+#: code:addons/email_template/wizard/email_template_send_wizard.py:0
+#, python-format
+msgid "email-template"
+msgstr "sablon-poruke"
+
+#. module: email_template
+#: help:email.template,def_cc:0
+msgid ""
+"Carbon Copy address(es), comma-separated. Placeholders can be used here."
+msgstr ""
+"Carbon Copy address(es), comma-separated. Placeholders can be used here."
+
+#. module: email_template
+#: selection:email_template.send.wizard,state:0
+msgid "Simple Mail Wizard Step 1"
+msgstr "Jednostavni Carobnjak POruka Korak 1"
+
+#. module: email_template
+#: selection:email_template.mailbox,mail_type:0
+msgid "Has Attachments"
+msgstr "Ima Attachment"
+
+#. module: email_template
+#: help:email.template,track_campaign_item:0
+msgid ""
+"Enable this if you want the outgoing e-mails to include a tracking marker "
+"that makes it possible to identify the replies an link them back to the "
+"campaign item"
+msgstr ""
+"Omogucava vam , ako zelite da vase izlazne poruke sadrze markera pratnje "
+"koji vam daju mogucnost da kasnije identifikujete odgovore i posaljewte ih "
+"npr stavci Kampanje."
+
+#. module: email_template
+#: code:addons/email_template/email_template.py:0
+#: code:addons/email_template/wizard/email_template_send_wizard.py:0
+#, python-format
+msgid "No Description"
+msgstr "Bez Opisa"
diff --git a/addons/email_template/security/email_template_security.xml b/addons/email_template/security/email_template_security.xml
index 7e6c1f4b560..e3f3401217c 100755
--- a/addons/email_template/security/email_template_security.xml
+++ b/addons/email_template/security/email_template_security.xml
@@ -2,9 +2,5 @@
-
- Marketing / User
-
-
diff --git a/addons/email_template/security/ir.model.access.csv b/addons/email_template/security/ir.model.access.csv
index fd5cf2d0f09..79135b0de4d 100644
--- a/addons/email_template/security/ir.model.access.csv
+++ b/addons/email_template/security/ir.model.access.csv
@@ -1,7 +1,7 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_email_template_account","email_template.account","model_email_template_account","base.res_groups_email_template_admin",1,0,0,0
-"access_email_template","email.template","model_email_template","base.res_groups_email_template_admin",1,0,0,0
-"access_email_template_mailbox","email_template.mailbox","model_email_template_mailbox","base.res_groups_email_template_admin",1,1,1,1
+"access_email_template_account","email_template.account","model_email_template_account","marketing.group_marketing_user",1,0,0,0
+"access_email_template","email.template","model_email_template","marketing.group_marketing_user",1,0,0,0
+"access_email_template_mailbox","email_template.mailbox","model_email_template_mailbox","marketing.group_marketing_user",1,1,1,1
"access_email_template_account_system","email_template.account system","model_email_template_account","base.group_system",1,1,1,1
"access_email_template_system","email.template system","model_email_template","base.group_system",1,1,1,1
"access_email_template_mailbox_system","email_template.mailbox system","model_email_template_mailbox","base.group_system",1,0,0,0
diff --git a/addons/event/__openerp__.py b/addons/event/__openerp__.py
index 4e65009f422..9f479a2d941 100644
--- a/addons/event/__openerp__.py
+++ b/addons/event/__openerp__.py
@@ -39,7 +39,7 @@
Events / Reporting
""",
'author': 'OpenERP SA',
- 'depends': ['crm', 'base_contact', 'account'],
+ 'depends': ['crm', 'base_contact', 'account', 'marketing'],
'init_xml': [],
'update_xml': [
'security/event_security.xml',
diff --git a/addons/event/board_association_view.xml b/addons/event/board_association_view.xml
index 3acebb9d767..d62e4336202 100644
--- a/addons/event/board_association_view.xml
+++ b/addons/event/board_association_view.xml
@@ -80,7 +80,6 @@
sequence="1"
id="menu_board_associations_manager"
icon="terp-graph"/>
-
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml
index 2fe04b165aa..918147b79cb 100644
--- a/addons/event/event_view.xml
+++ b/addons/event/event_view.xml
@@ -272,6 +272,7 @@
tree,form,calendar,graph
{"search_default_draft": "1", "search_default_section_id": section_id}
+ Event is the low-level object used by meeting and others documents that have to be synchronized with mobile or calendar applications through caldav. Most of the users should work on the Calendar menu, and not on the list of events.
, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-08-28 16:01+0000\n"
+"PO-Revision-Date: 2010-10-17 07:58+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Serbian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:55+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: event
+#: field:event.event,date_end:0
+#: field:report.event.registration,date_end:0
+msgid "Ending date"
+msgstr "Datum zavrsetka"
+
+#. module: event
+#: field:event.event,register_min:0
+msgid "Minimum Registrations"
+msgstr "Registracioni Minimum"
+
+#. module: event
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Pogrešno ime modela u definiciji akcije."
+
+#. module: event
+#: field:event.event,mail_registr:0
+msgid "Registration Email"
+msgstr ""
+
+#. module: event
+#: model:crm.case.section,name:event.event_0_crm_case_section
+msgid "Concert of Bon Jovi"
+msgstr "Bon Jovi Koncert"
+
+#. module: event
+#: field:event.event,mail_confirm:0
+msgid "Confirmation Email"
+msgstr "Konfirmacioni Email"
+
+#. module: event
+#: constraint:crm.case.section:0
+msgid "Error ! You cannot create recursive sections."
+msgstr "Greška ! Ne možete stvarati rekurzivne sekcije."
+
+#. module: event
+#: model:ir.model,name:event.model_event_registration
+msgid "Event Registration"
+msgstr "Registracioni Dogadjaj"
+
+#. module: event
+#: model:ir.actions.wizard,name:event.event_reg_invoice
+msgid "Make Invoice"
+msgstr "Kreiraj račun"
+
+#. module: event
+#: field:report.event.type.registration,draft_state:0
+msgid "Draft Registrations"
+msgstr "Registracije u Pripremi"
+
+#. module: event
+#: view:report.event.registration:0
+msgid "Event on Registration"
+msgstr "Sogadjaj pri registraciji"
+
+#. module: event
+#: wizard_button:event.reg_make_invoice,init,end:0
+msgid "Ok"
+msgstr "U redu"
+
+#. module: event
+#: field:event.event,mail_auto_confirm:0
+msgid "Mail Auto Confirm"
+msgstr "Auto potvrdjivanje Email-a"
+
+#. module: event
+#: model:product.template,name:event.event_product_1_product_template
+msgid "Ticket for Opera"
+msgstr "Karta za Operu"
+
+#. module: event
+#: wizard_field:event.reg_make_invoice,init,inv_rejected:0
+msgid "Invoice Rejected"
+msgstr "Racun Odbijen"
+
+#. module: event
+#: view:event.event:0
+msgid "Confirm Event"
+msgstr "Potvrdi Dogadjaj"
+
+#. module: event
+#: model:crm.case.section,name:event.event_1_crm_case_section
+msgid "Opera of Verdi"
+msgstr "Verdijeva Opera"
+
+#. module: event
+#: field:report.event.registration,draft_state:0
+msgid "Draft Registration"
+msgstr "Registracija u pripremi"
+
+#. module: event
+#: wizard_view:event.reg_make_invoice,init:0
+msgid "Create Invoices"
+msgstr "Kreiraj Racune"
+
+#. module: event
+#: model:ir.module.module,description:event.module_meta_information
+msgid ""
+"Organization and management of events.\n"
+"\n"
+" This module allow you\n"
+" * to manage your events and their registrations\n"
+" * to use emails to automatically confirm and send acknowledgements "
+"for any registration to an event\n"
+" * ...\n"
+"\n"
+" Note that:\n"
+" - You can define new types of events in\n"
+" Events / Configuration / Types of Events\n"
+" - You can access predefined reports about number of registration per "
+"event or per event category in :\n"
+" Events / Reporting\n"
+msgstr ""
+"Organizacija i Upravljanje Dogadjajima\n"
+"\n"
+" Ovaj vam modul omogucuje\n"
+" *da upravljate dogadjajima i njihovim registracijama\n"
+" *da koristite Emailove za automatsku potvrdu i slanje upozorenja za "
+"bilo koju registraciju nekog dogadjaja\n"
+" *\n"
+" Upamtite da:\n"
+" -Mozete da definisete nove tipove dogadjaja u\n"
+" "
+"Dogadjaji/Podesavanja/Tipovi Dogadjaja\n"
+" -Mozete da pristupite predefinisanim izvestajima o broju registracija po "
+"dogadjaju ili cak po kategorijama u:\n"
+" "
+"Dogadjaji/Izvestavanje\n"
+
+#. module: event
+#: view:event.registration:0
+msgid "Extra Info"
+msgstr "Dodatne Informacije"
+
+#. module: event
+#: view:event.registration:0
+msgid "Registration"
+msgstr "Registracija"
+
+#. module: event
+#: field:event.type,name:0
+#: model:ir.model,name:event.model_event_type
+msgid "Event type"
+msgstr "Tip dogadjaja"
+
+#. module: event
+#: view:event.event:0
+#: model:ir.model,name:event.model_event_event
+#: model:ir.module.module,shortdesc:event.module_meta_information
+#: field:report.event.registration,name:0
+msgid "Event"
+msgstr "Događaj"
+
+#. module: event
+#: selection:event.event,state:0
+msgid "Confirmed"
+msgstr "Potvrđeno"
+
+#. module: event
+#: wizard_view:event.confirm_registration,split:0
+msgid "Registration Confirmation"
+msgstr "Potvrda Registracije"
+
+#. module: event
+#: view:event.registration:0
+msgid "Dates"
+msgstr "Datumi"
+
+#. module: event
+#: field:event.event,register_current:0
+#: model:ir.actions.act_window,name:event.action_registration_confirm
+#: model:ir.ui.menu,name:event.menu_action_registration_confirm
+msgid "Confirmed Registrations"
+msgstr "Potvrdjene Registracije"
+
+#. module: event
+#: field:event.event,mail_auto_registr:0
+msgid "Mail Auto Register"
+msgstr "Auto Registracija Mailom"
+
+#. module: event
+#: view:event.registration:0
+msgid "Badge"
+msgstr "Znacka"
+
+#. module: event
+#: field:event.event,section_id:0
+msgid "Case section"
+msgstr "Tip Sekcije"
+
+#. module: event
+#: field:event.registration,tobe_invoiced:0
+msgid "To be Invoiced"
+msgstr "Da bude Fakturisano"
+
+#. module: event
+#: model:ir.ui.menu,name:event.menu_event_event
+msgid "All Events"
+msgstr "Svi Dogadjaji"
+
+#. module: event
+#: model:ir.ui.menu,name:event.menu_report_event
+msgid "Reporting"
+msgstr "Izveštavanje"
+
+#. module: event
+#: view:event.registration:0
+msgid "Cancel Registration"
+msgstr "Otkazi Registraciju"
+
+#. module: event
+#: model:ir.ui.menu,name:event.menu_action_event_categories
+msgid "Events by Categories"
+msgstr "Dogadjaji po Kategorijama"
+
+#. module: event
+#: wizard_view:event.confirm_registration,split:0
+msgid "The event limit is reached. What do you want to do?"
+msgstr "Limit Dogadjaja je postignut. Sta zelis da uradis?"
+
+#. module: event
+#: field:report.event.type.registration,confirm_state:0
+msgid "Confirm Registrations"
+msgstr "potvrdi Registraciju"
+
+#. module: event
+#: view:event.registration:0
+msgid "References"
+msgstr "Reference"
+
+#. module: event
+#: model:ir.actions.act_window,name:event.action_event_type_registration
+#: model:ir.ui.menu,name:event.menu_report_event_type_registration
+#: view:report.event.type.registration:0
+msgid "Registration By Event Types"
+msgstr "Registracije po Tipu Dogadjaja"
+
+#. module: event
+#: model:ir.ui.menu,name:event.menu_event_config
+msgid "Configuration"
+msgstr "Podešavanje"
+
+#. module: event
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Nevažeći XML za pregled arhitekture"
+
+#. module: event
+#: wizard_button:event.confirm_registration,split,confirm:0
+msgid "Confirm Anyway"
+msgstr "Sve jedno Potvrdi"
+
+#. module: event
+#: constraint:product.template:0
+msgid "Error: UOS must be in a different category than the UOM"
+msgstr ""
+"Greška: JU (jedinice usluga) i JM moraju da budu u različitim kategorijama"
+
+#. module: event
+#: view:event.event:0
+msgid "Parent Category"
+msgstr "Roditeljska Kategorija"
+
+#. module: event
+#: view:event.registration:0
+msgid "Registration Invoiced"
+msgstr "Registracija fakturisana"
+
+#. module: event
+#: field:report.event.type.registration,nbevent:0
+msgid "Number Of Events"
+msgstr "Broj Dogadjaja"
+
+#. module: event
+#: view:event.event:0
+msgid "Cancel Event"
+msgstr "Otkazi Dogadjaj"
+
+#. module: event
+#: wizard_field:event.reg_make_invoice,init,inv_rej_reason:0
+msgid "Error Messages"
+msgstr "Poruke o greskama"
+
+#. module: event
+#: view:event.event:0
+msgid "Mailing"
+msgstr "E-Postanska"
+
+#. module: event
+#: model:product.template,name:event.event_product_0_product_template
+msgid "Ticket for Concert"
+msgstr "Karta za koncert"
+
+#. module: event
+#: field:event.event,register_prospect:0
+#: model:ir.actions.act_window,name:event.action_registration_draft
+#: model:ir.ui.menu,name:event.menu_action_registration_draft
+msgid "Unconfirmed Registrations"
+msgstr "Nepotvrdjene Registracije"
+
+#. module: event
+#: field:event.registration,partner_invoice_id:0
+msgid "Partner Invoiced"
+msgstr "Partner Fakturisan"
+
+#. module: event
+#: view:event.registration:0
+msgid "Communication history"
+msgstr "Istorija Komunikacija"
+
+#. module: event
+#: selection:event.event,state:0
+msgid "Canceled"
+msgstr "Отказано"
+
+#. module: event
+#: view:event.event:0
+msgid "Event Done"
+msgstr "Dogadjaj Zavrsen"
+
+#. module: event
+#: field:event.registration,badge_name:0
+msgid "Badge Name"
+msgstr "Naziv Znacke"
+
+#. module: event
+#: model:ir.actions.act_window,name:event.action_event_registration
+#: model:ir.ui.menu,name:event.menu_report_event_registration
+msgid "Events On Registrations"
+msgstr "Dogadjaji pri Registraciji"
+
+#. module: event
+#: constraint:product.template:0
+msgid ""
+"Error: The default UOM and the purchase UOM must be in the same category."
+msgstr ""
+"Greška: Podrazumevana JM i kupljena JM moraju da budu u istoj kategoriji."
+
+#. module: event
+#: wizard_field:event.reg_make_invoice,init,inv_created:0
+msgid "Invoice Created"
+msgstr "Racun Kreiran"
+
+#. module: event
+#: view:event.event:0
+msgid "Statistics"
+msgstr "Statistike"
+
+#. module: event
+#: selection:event.event,state:0
+msgid "Draft"
+msgstr "Priprema"
+
+#. module: event
+#: view:event.event:0
+msgid "Event description"
+msgstr "Opis Dogadjaja"
+
+#. module: event
+#: model:ir.model,name:event.model_report_event_type_registration
+msgid "Event type on registration"
+msgstr "Tip Dogadjaja pri registraciji"
+
+#. module: event
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !"
+
+#. module: event
+#: field:event.registration,event_id:0
+msgid "Event Related"
+msgstr "Vezani Dogadjaj"
+
+#. module: event
+#: model:crm.case.section,name:event.case_section_event
+#: view:event.event:0
+#: model:ir.actions.act_window,name:event.action_event_view
+msgid "Events"
+msgstr "Događaji"
+
+#. module: event
+#: field:event.registration,nb_register:0
+msgid "Number of Registration"
+msgstr "Broj Registracija"
+
+#. module: event
+#: view:event.event:0
+#: field:event.event,state:0
+#: view:event.registration:0
+msgid "Status"
+msgstr "Status"
+
+#. module: event
+#: model:ir.actions.act_window,name:event.action_event_categories
+msgid "Events by section"
+msgstr "Dogadjaji po Sekciji"
+
+#. module: event
+#: model:ir.ui.menu,name:event.menu_action_registration
+msgid "All Registrations"
+msgstr "Sve Registracije"
+
+#. module: event
+#: help:event.event,mail_auto_registr:0
+msgid ""
+"Check this box if you want to use the automatic mailing for new registration"
+msgstr ""
+"Cekiraj ovu Kucicu ako zelite da koristite automatski mailing pri novoj "
+"registraciji"
+
+#. module: event
+#: view:event.event:0
+msgid "Set To Draft"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+#: model:ir.actions.wizard,name:event.event_confirm_registration
+#: field:report.event.registration,confirm_state:0
+msgid "Confirm Registration"
+msgstr "Posalji na Pripremu"
+
+#. module: event
+#: view:event.registration:0
+msgid "History"
+msgstr "Istorija"
+
+#. module: event
+#: model:ir.ui.menu,name:event.menu_event_type
+msgid "Types of Events"
+msgstr "Tipovi Dogadjaja"
+
+#. module: event
+#: field:event.registration,contact_id:0
+msgid "Partner Contact"
+msgstr "Kontakt partnera"
+
+#. module: event
+#: view:event.event:0
+msgid "Auto Confirmation Email"
+msgstr "Auto-Mail za potvrdu"
+
+#. module: event
+#: view:event.event:0
+#: view:event.registration:0
+msgid "General"
+msgstr "Opšte"
+
+#. module: event
+#: view:event.registration:0
+msgid "Send Reminder"
+msgstr "Posalji Podsetnik"
+
+#. module: event
+#: selection:event.event,state:0
+msgid "Done"
+msgstr "Gotovo"
+
+#. module: event
+#: field:event.event,date_begin:0
+#: field:report.event.registration,date_begin:0
+msgid "Beginning date"
+msgstr "Datum pocetka"
+
+#. module: event
+#: field:event.registration,invoice_id:0
+msgid "Invoice"
+msgstr "Račun"
+
+#. module: event
+#: model:ir.model,name:event.model_report_event_registration
+msgid "Events on registrations"
+msgstr "Dogadjaji pri Registraciji"
+
+#. module: event
+#: wizard_button:event.confirm_registration,split,end:0
+msgid "Cancel"
+msgstr "Otkaži"
+
+#. module: event
+#: wizard_button:event.reg_make_invoice,init,open:0
+msgid "Open"
+msgstr "Otvori"
+
+#. module: event
+#: field:event.registration,badge_title:0
+msgid "Badge Title"
+msgstr "Naslov Znacke"
+
+#. module: event
+#: model:ir.actions.act_window,name:event.action_new_event_form
+#: model:ir.ui.menu,name:event.menu_event_new_event
+msgid "New event"
+msgstr "Novi Dogadjaj"
+
+#. module: event
+#: field:event.registration,unit_price:0
+msgid "Unit Price"
+msgstr "Jedinična cijena"
+
+#. module: event
+#: model:crm.case.section,name:event.event_2_crm_case_section
+msgid "Conference on ERP Buisness"
+msgstr "Konferencija o ERP Biznisu"
+
+#. module: event
+#: field:event.registration,badge_partner:0
+msgid "Badge Partner"
+msgstr "Partner Znacke"
+
+#. module: event
+#: model:ir.actions.act_window,name:event.action_event_view_confirm
+#: model:ir.ui.menu,name:event.menu_event_event_confirm
+msgid "Confirmed Events"
+msgstr "Potvrdi Dogadjaje"
+
+#. module: event
+#: field:event.event,register_max:0
+#: field:report.event.registration,register_max:0
+msgid "Maximum Registrations"
+msgstr "Maksimum Registracija"
+
+#. module: event
+#: field:event.event,type:0
+msgid "Type"
+msgstr "Tip"
+
+#. module: event
+#: help:event.event,mail_registr:0
+msgid "This email will be sent when someone subscribes to the event."
+msgstr "Ovaj ce Email biti poslan kada se neko bude prijavio za dogadjaj"
+
+#. module: event
+#: model:product.template,name:event.event_product_2_product_template
+msgid "Ticket for Conference"
+msgstr "Karta za konferenciju"
+
+#. module: event
+#: field:event.registration,case_id:0
+msgid "Case"
+msgstr "Slucaj"
+
+#. module: event
+#: view:event.event:0
+msgid "Name"
+msgstr "Ime"
+
+#. module: event
+#: help:event.event,mail_auto_confirm:0
+msgid ""
+"Check this box if you want ot use the automatic confirmation emailing or the "
+"reminder"
+msgstr ""
+"Cekiraj ovu kucicu ako zelis da koristis automatsko slanje E-podsetnika"
+
+#. module: event
+#: help:event.event,mail_confirm:0
+msgid ""
+"This email will be sent when the event gets confimed or when someone "
+"subscribes to a confirmed event. This is also the email sent to remind "
+"someone about the event."
+msgstr ""
+"Ovaj ce Email biti poslan kada se dogadjaj potvrdi ili kada se neko upise na "
+"potvrdjeni dogadjaj. Ovo je takodje Email koji ce biti poslat da podseti "
+"nekog o dogadjaju."
+
+#. module: event
+#: field:event.event,product_id:0
+msgid "Product"
+msgstr "Proizvod"
+
+#. module: event
+#: field:event.registration,invoice_label:0
+msgid "Label Invoice"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+msgid "Payments"
+msgstr "Isplate"
+
+#. module: event
+#: view:event.type:0
+#: field:report.event.type.registration,name:0
+msgid "Event Type"
+msgstr "Vrsta događaja"
+
+#. module: event
+#: view:event.event:0
+#: model:ir.actions.act_window,name:event.action_registration
+#: model:ir.actions.wizard,name:event.wizard_event_registration
+msgid "Registrations"
+msgstr "Registracije"
+
+#. module: event
+#: model:ir.actions.act_window,name:event.action_event_view_draft
+#: model:ir.ui.menu,name:event.menu_event_event_draft
+msgid "Draft Events"
+msgstr "Dodgadjaji iz Pripreme"
+
+#. module: event
+#: model:ir.ui.menu,name:event.menu_event_main
+msgid "Events Organisation"
+msgstr "Organizacija Dogadjaja"
+
+#. module: event
+#: view:event.registration:0
+msgid "Actions"
+msgstr "Akcije"
+
+#. module: event
+#: model:ir.actions.wizard,name:event.wizard_event_reg_partners
+msgid "List Register Partners"
+msgstr "Spisak Registrovanih Partnera"
+
+#. module: event
+#: constraint:product.product:0
+msgid "Error: Invalid ean code"
+msgstr "Greška: Neispravan EAN kod"
+
+#. module: event
+#: view:event.event:0
+msgid "Auto Registration Email"
+msgstr "Auto Registracioni Email"
diff --git a/addons/event/report/report_event_registration_view.xml b/addons/event/report/report_event_registration_view.xml
index 83d52d5ab12..d8cc84a0547 100644
--- a/addons/event/report/report_event_registration_view.xml
+++ b/addons/event/report/report_event_registration_view.xml
@@ -141,7 +141,7 @@
-
+
diff --git a/addons/event/security/event_security.xml b/addons/event/security/event_security.xml
index bcd172ce8c7..4415b11a8e4 100644
--- a/addons/event/security/event_security.xml
+++ b/addons/event/security/event_security.xml
@@ -6,7 +6,7 @@
Marketing / Manager
-
+
Marketing / User
diff --git a/addons/event/security/ir.model.access.csv b/addons/event/security/ir.model.access.csv
index c93c2baa65e..9ee5ae7ec80 100644
--- a/addons/event/security/ir.model.access.csv
+++ b/addons/event/security/ir.model.access.csv
@@ -1,9 +1,9 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_event_type","event.type","model_event_type","base.res_groups_email_template_admin",1,0,0,0
+"access_event_type","event.type","model_event_type","marketing.group_marketing_user",1,0,0,0
"access_event_type_manager","event.type manager","model_event_type","base.group_marketing_manager",1,1,1,1
-"access_event_event","event.event","model_event_event","base.res_groups_email_template_admin",1,1,1,0
-"access_event_registration","event.registration","model_event_registration","base.res_groups_email_template_admin",1,1,1,0
-"access_report_event_registration","report.event.registration","model_report_event_registration","base.res_groups_email_template_admin",1,1,1,1
+"access_event_event","event.event","model_event_event","marketing.group_marketing_user",1,1,1,0
+"access_event_registration","event.registration","model_event_registration","marketing.group_marketing_user",1,1,1,0
+"access_report_event_registration","report.event.registration","model_report_event_registration","marketing.group_marketing_user",1,1,1,1
"access_event_event_manager","event.event manager","model_event_event","base.group_marketing_manager",1,0,0,0
"access_event_registration_manager","event.registration manager","model_event_registration","base.group_marketing_manager",1,0,0,0
"access_crm_case_section_manager","crm.case.section manager","crm.model_crm_case_section","base.group_marketing_manager",1,1,1,1
@@ -11,10 +11,5 @@
"access_report_event_registration","report.event.registration","model_report_event_registration","base.group_marketing_manager",1,1,1,1
"access_event_registration_badge_manager","event.registration.badge manager","model_event_registration_badge","base.group_marketing_manager",1,1,1,1
"access_event_event_sale_salesman","event.event.sale","model_event_event","base.group_sale_salesman",1,0,0,0
-"access_event_event_system","event.event system","model_event_event","base.group_system",1,0,0,0
-"access_event_registration_system","event.registration system","model_event_registration","base.group_system",1,0,0,0
-"access_report_event_registration_system","report.event.registration system","model_report_event_registration","base.group_system",1,1,1,1
-"access_account_account_invoice_system","account.account.invoice","account.model_account_invoice","base.group_system",1,0,0,0
-"access_event_type_sytem","event.type system","model_event_type","base.group_system",1,1,1,1
"access_account_account_invoice_manager","account.account.invoice","account.model_account_invoice","base.group_marketing_manager",1,0,0,0
-"access_event_registration_badge","event.registration.badge","model_event_registration_badge","base.res_groups_email_template_admin",1,0,0,0
+"access_event_registration_badge","event.registration.badge","model_event_registration_badge","marketing.group_marketing_user",1,0,0,0
diff --git a/addons/event_project/i18n/it.po b/addons/event_project/i18n/it.po
index 9d5270feb86..f89562f72a4 100644
--- a/addons/event_project/i18n/it.po
+++ b/addons/event_project/i18n/it.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-09-29 10:49+0000\n"
+"PO-Revision-Date: 2010-10-17 07:54+0000\n"
"Last-Translator: OpenERP Administrators \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-30 04:43+0000\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:55+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: event_project
@@ -48,7 +48,7 @@ msgstr "Attività Rimanenti"
#. module: event_project
#: model:ir.module.module,shortdesc:event_project.module_meta_information
msgid "Event - Project"
-msgstr ""
+msgstr "Evento - Progetto"
#. module: event_project
#: field:event.event,project_id:0
diff --git a/addons/event_project/i18n/sr.po b/addons/event_project/i18n/sr.po
new file mode 100644
index 00000000000..b85948dd3f3
--- /dev/null
+++ b/addons/event_project/i18n/sr.po
@@ -0,0 +1,88 @@
+# Serbian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-08-28 16:01+0000\n"
+"PO-Revision-Date: 2010-10-17 07:55+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Serbian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:55+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: event_project
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Nevažeći XML za pregled arhitekture"
+
+#. module: event_project
+#: model:ir.actions.wizard,name:event_project.wizard_event_task
+msgid "Tasks"
+msgstr "Zadaci"
+
+#. module: event_project
+#: wizard_button:event.project,init,done:0
+msgid "Ok"
+msgstr "U redu"
+
+#. module: event_project
+#: model:ir.module.module,description:event_project.module_meta_information
+msgid ""
+"Organization and management of events.\n"
+"\n"
+" This module allow you to create retro planning for managing your "
+"events.\n"
+msgstr ""
+"Organizacija i Upravljanje Dogadjajima.\n"
+"\n"
+" Ovaj modul vam omogucava da kreirate retro planiranje za upravljanje "
+"vasim dogadjajima.\n"
+
+#. module: event_project
+#: view:event.event:0
+msgid "Remaining Tasks"
+msgstr "Preostali Zadaci"
+
+#. module: event_project
+#: model:ir.module.module,shortdesc:event_project.module_meta_information
+msgid "Event - Project"
+msgstr "Projekat-Dogadjaj"
+
+#. module: event_project
+#: field:event.event,project_id:0
+#: wizard_field:event.project,init,project_id:0
+#: model:ir.actions.wizard,name:event_project.event_wiz
+msgid "Project"
+msgstr "Projekat"
+
+#. module: event_project
+#: field:event.event,task_ids:0
+msgid "Project tasks"
+msgstr "Projekat Zadataka"
+
+#. module: event_project
+#: wizard_button:event.project,init,end:0
+msgid "Cancel"
+msgstr "Otkaži"
+
+#. module: event_project
+#: view:event.event:0
+msgid "Create Retro-Planning"
+msgstr "Kreiraj Retro-Planiranje"
+
+#. module: event_project
+#: wizard_view:event.project,init:0
+msgid "Event"
+msgstr "Događaj"
+
+#. module: event_project
+#: view:event.event:0
+msgid "Tasks management"
+msgstr "Upravljanje Zadacima"
diff --git a/addons/fetchmail/__openerp__.py b/addons/fetchmail/__openerp__.py
index 94dbdf4ef5c..e9050fda075 100644
--- a/addons/fetchmail/__openerp__.py
+++ b/addons/fetchmail/__openerp__.py
@@ -33,7 +33,6 @@
* Automatic Email Receive
* Email based Records (Add, Update)
""",
- 'author': 'Tiny',
'website': 'http://www.openerp.com',
'init_xml': [],
'update_xml': [
diff --git a/addons/fetchmail/fetchmail.py b/addons/fetchmail/fetchmail.py
index 7d527442391..2147d774762 100644
--- a/addons/fetchmail/fetchmail.py
+++ b/addons/fetchmail/fetchmail.py
@@ -71,8 +71,9 @@ class email_server(osv.osv):
}
def check_duplicate(self, cr, uid, ids):
+ # RFC *-* Why this limitation? why not in SQL constraint?
vals = self.read(cr, uid, ids, ['user', 'password'])[0]
- cr.execute("select count(id) from email_server where user='%s' and password='%s'" % (vals['user'], vals['password']))
+ cr.execute("select count(id) from email_server where user='%s' and password='%s'", (vals['user'], vals['password']))
res = cr.fetchone()
if res:
if res[0] > 1:
diff --git a/addons/fetchmail/i18n/sr.po b/addons/fetchmail/i18n/sr.po
new file mode 100644
index 00000000000..12e87b88fe7
--- /dev/null
+++ b/addons/fetchmail/i18n/sr.po
@@ -0,0 +1,274 @@
+# Serbian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2010-08-20 13:33+0000\n"
+"PO-Revision-Date: 2010-10-17 07:58+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Serbian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:56+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: fetchmail
+#: selection:email.server,state:0
+msgid "Confirmed"
+msgstr "Potvrđeno"
+
+#. module: fetchmail
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !"
+
+#. module: fetchmail
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Pogrešno ime modela u definiciji akcije."
+
+#. module: fetchmail
+#: model:ir.actions.act_window,name:fetchmail.action_email_server_tree_imap
+#: model:ir.ui.menu,name:fetchmail.menu_action_email_server_tree_imap
+msgid "IMAP Servers"
+msgstr "IMAP Serveri"
+
+#. module: fetchmail
+#: field:email.server,action_id:0
+msgid "Reply Email"
+msgstr "Odgovori na Email"
+
+#. module: fetchmail
+#: view:email.server:0
+msgid "Server & Login"
+msgstr "Server & Login"
+
+#. module: fetchmail
+#: field:email.server,priority:0
+msgid "Server Priority"
+msgstr "Prioritet Servera"
+
+#. module: fetchmail
+#: field:email.server,state:0
+msgid "State"
+msgstr "Stanje"
+
+#. module: fetchmail
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr "Greska! Ne mozete kreirati rekursivni meni."
+
+#. module: fetchmail
+#: selection:email.server,state:0
+msgid "Not Confirmed"
+msgstr "Nije potvrdjeno"
+
+#. module: fetchmail
+#: view:email.server:0
+msgid "POP/IMAP Servers"
+msgstr "POP/IMAP Serveri"
+
+#. module: fetchmail
+#: model:ir.module.module,shortdesc:fetchmail.module_meta_information
+msgid "Fetchmail Server"
+msgstr "Email Server"
+
+#. module: fetchmail
+#: view:email.server:0
+#: field:email.server,note:0
+msgid "Description"
+msgstr "Opis"
+
+#. module: fetchmail
+#: field:email.server,attach:0
+msgid "Add Attachments ?"
+msgstr "Dodajes Attachmente ( dodatke) ?"
+
+#. module: fetchmail
+#: view:email.server:0
+msgid "Set to Draft"
+msgstr "Postavi u pripremu"
+
+#. module: fetchmail
+#: field:email.server,user:0
+msgid "User Name"
+msgstr "Korisničko ime"
+
+#. module: fetchmail
+#: field:email.server,user_id:0
+msgid "User"
+msgstr "Korisnik"
+
+#. module: fetchmail
+#: field:email.server,date:0
+msgid "Date"
+msgstr "Datum"
+
+#. module: fetchmail
+#: selection:email.server,state:0
+msgid "Waiting for Verification"
+msgstr "Cekanje na Potvrdu"
+
+#. module: fetchmail
+#: field:email.server,password:0
+msgid "Password"
+msgstr "Lozinka"
+
+#. module: fetchmail
+#: constraint:ir.cron:0
+msgid "Invalid arguments"
+msgstr "Neispravni Argumenti"
+
+#. module: fetchmail
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Nevažeći XML za pregled arhitekture"
+
+#. module: fetchmail
+#: view:email.server:0
+msgid "Auto Reply?"
+msgstr "Auto Odgovor?"
+
+#. module: fetchmail
+#: field:email.server,name:0
+msgid "Name"
+msgstr "Ime"
+
+#. module: fetchmail
+#: model:ir.model,name:fetchmail.model_mailgate_message
+msgid "Mailgateway Message"
+msgstr "Poruka Email prolaza"
+
+#. module: fetchmail
+#: model:ir.actions.act_window,name:fetchmail.action_email_server_tree
+#: model:ir.ui.menu,name:fetchmail.menu_action_email_server_tree
+msgid "POP Servers"
+msgstr "POP Serveri"
+
+#. module: fetchmail
+#: model:ir.ui.menu,name:fetchmail.menu_action_fetchmail_server_tree
+msgid "Fetchmail Services"
+msgstr "Email Servisi"
+
+#. module: fetchmail
+#: model:ir.actions.act_window,name:fetchmail.action_mailgate_message_tree
+#: model:ir.actions.act_window,name:fetchmail.action_mailgate_message_tree_pop
+#: model:ir.ui.menu,name:fetchmail.menu_action_mailgate_message_tree
+#: model:ir.ui.menu,name:fetchmail.menu_action_mailgate_message_tree_pop
+msgid "Received Email History"
+msgstr "Istorija Primljenih E-mailova"
+
+#. module: fetchmail
+#: field:email.server,active:0
+msgid "Active"
+msgstr "Aktivan"
+
+#. module: fetchmail
+#: view:email.server:0
+msgid "Process Parameter"
+msgstr "Obradi Parametar"
+
+#. module: fetchmail
+#: field:email.server,is_ssl:0
+msgid "SSL ?"
+msgstr "SSL ?"
+
+#. module: fetchmail
+#: selection:email.server,type:0
+#: selection:mailgate.message,type:0
+msgid "IMAP Server"
+msgstr "MAP Server"
+
+#. module: fetchmail
+#: field:email.server,object_id:0
+msgid "Model"
+msgstr "Model"
+
+#. module: fetchmail
+#: field:email.server,server:0
+msgid "Server"
+msgstr "Server"
+
+#. module: fetchmail
+#: model:ir.actions.act_window,name:fetchmail.act_server_history
+msgid "Email History"
+msgstr "Email Istorija"
+
+#. module: fetchmail
+#: view:email.server:0
+#: model:ir.model,name:fetchmail.model_email_server
+msgid "POP/IMAP Server"
+msgstr "POP/IMAP Server"
+
+#. module: fetchmail
+#: constraint:ir.rule:0
+msgid "Rules are not supported for osv_memory objects !"
+msgstr "Pravila nisu podrzana od strane osv_memory objekata !"
+
+#. module: fetchmail
+#: field:email.server,type:0
+#: field:mailgate.message,type:0
+msgid "Server Type"
+msgstr "Tup Servera"
+
+#. module: fetchmail
+#: view:email.server:0
+msgid "Login Information"
+msgstr "Informacije o Prijavi"
+
+#. module: fetchmail
+#: view:email.server:0
+msgid "Server Information"
+msgstr "Podaci o Serveru"
+
+#. module: fetchmail
+#: selection:email.server,type:0
+#: selection:mailgate.message,type:0
+msgid "POP Server"
+msgstr "POP Server"
+
+#. module: fetchmail
+#: field:email.server,port:0
+msgid "Port"
+msgstr "Port"
+
+#. module: fetchmail
+#: model:ir.module.module,description:fetchmail.module_meta_information
+msgid ""
+"Fetchmail: \n"
+" * Fetch email from Pop / IMAP server\n"
+" * Support SSL\n"
+" * Integrated with all Modules\n"
+" * Automatic Email Receive\n"
+" * Email based Records (Add, Update)\n"
+" "
+msgstr ""
+"Fetchmail: \n"
+" *Hvata emailove sa pop/imap servera\n"
+" *Podrzava SSL\n"
+" *Integrise se sa svim modulima\n"
+" *Automatski prima Emailove\n"
+" *Na bazi Email-a pravi snimanja ( Dodaje, Dopunjava)\n"
+" "
+
+#. module: fetchmail
+#: help:email.server,priority:0
+msgid "Priority between 0 to 10, select define the order of Processing"
+msgstr "Vaznost izmedju 0 i 10, izaberi i definisi redosled Procesuiranja"
+
+#. module: fetchmail
+#: field:mailgate.message,server_id:0
+msgid "Mail Server"
+msgstr "Email Server"
+
+#. module: fetchmail
+#: view:email.server:0
+msgid "Fetch Emails"
+msgstr "Hvata Emailove"
diff --git a/addons/google_map/i18n/sr.po b/addons/google_map/i18n/sr.po
new file mode 100644
index 00000000000..0959a60eb51
--- /dev/null
+++ b/addons/google_map/i18n/sr.po
@@ -0,0 +1,51 @@
+# Serbian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-08-28 16:01+0000\n"
+"PO-Revision-Date: 2010-10-17 07:57+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Serbian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:55+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: google_map
+#: model:ir.actions.wizard,name:google_map.wizard_google_map
+msgid "Launch Google Map"
+msgstr "Ppkreni Google Map"
+
+#. module: google_map
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Nevažeći XML za pregled arhitekture"
+
+#. module: google_map
+#: view:res.partner:0
+#: view:res.partner.address:0
+msgid "Street2 : "
+msgstr "Ulica2 "
+
+#. module: google_map
+#: model:ir.module.module,description:google_map.module_meta_information
+msgid ""
+"The module adds google map field in partner address\n"
+"so that we can directly open google map from the\n"
+"url widget."
+msgstr ""
+"Ovaj Modul ubacuje sliku google map u partnerovoj adresi\n"
+"tako da mozemo direktno da otvorimo google map iz tog\n"
+"prozora."
+
+#. module: google_map
+#: view:res.partner:0
+#: view:res.partner.address:0
+msgid "Map"
+msgstr "mapa"
diff --git a/addons/google_map/i18n/vi.po b/addons/google_map/i18n/vi.po
index fee07730cce..6e695668772 100644
--- a/addons/google_map/i18n/vi.po
+++ b/addons/google_map/i18n/vi.po
@@ -8,24 +8,24 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-02 14:36+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2010-10-17 08:01+0000\n"
+"Last-Translator: nlhnam \n"
"Language-Team: Vietnamese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 04:51+0000\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:55+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: google_map
#: model:ir.actions.wizard,name:google_map.wizard_google_map
msgid "Launch Google Map"
-msgstr ""
+msgstr "Khởi động Google Map"
#. module: google_map
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
-msgstr ""
+msgstr "XML không hợp lệ để xem Kiến trúc"
#. module: google_map
#: view:res.partner:0
@@ -45,4 +45,4 @@ msgstr ""
#: view:res.partner:0
#: view:res.partner.address:0
msgid "Map"
-msgstr ""
+msgstr "Bản đồ"
diff --git a/addons/hr/board_hr_view.xml b/addons/hr/board_hr_view.xml
index c740114789a..8e1a442e025 100644
--- a/addons/hr/board_hr_view.xml
+++ b/addons/hr/board_hr_view.xml
@@ -2,10 +2,6 @@
-
@@ -32,6 +28,10 @@
menu
-
+
diff --git a/addons/hr/hr.py b/addons/hr/hr.py
index c05836c393a..240511a03a0 100644
--- a/addons/hr/hr.py
+++ b/addons/hr/hr.py
@@ -82,16 +82,23 @@ class hr_job(osv.osv):
def _no_of_employee(self, cr, uid, ids, name, args, context=None):
res = {}
- for emp in self.browse(cr, uid, ids):
- res[emp.id] = len(emp.employee_ids or [])
+ for job in self.browse(cr, uid, ids, context):
+ res[job.id] = len(job.employee_ids or [])
+ return res
+
+ def _no_of_recruitement(self, cr, uid, ids, name, args, context=None):
+ res = {}
+ for job in self.browse(cr, uid, ids, context):
+ res[job.id] = job.expected_employees - job.no_of_employee
return res
_name = "hr.job"
_description = "Job Description"
_columns = {
'name': fields.char('Job Name', size=128, required=True, select=True),
- 'expected_employees': fields.integer('Expected Employees', help='Required number of Employees'),
- 'no_of_employee': fields.function(_no_of_employee, method=True, string='No of Employees', type='integer', help='Number of Employees selected'),
+ 'expected_employees': fields.integer('Expected Employees', help='Required number of Employees in total for that job.'),
+ 'no_of_employee': fields.function(_no_of_employee, method=True, string="No of Employee", help='Number of employee with that job.'),
+ 'no_of_recruitment': fields.function(_no_of_recruitement, method=True, string='Expected in Recruitment', readonly=True),
'employee_ids': fields.one2many('hr.employee', 'job_id', 'Employees'),
'description': fields.text('Job Description'),
'requirements': fields.text('Requirements'),
@@ -102,9 +109,17 @@ class hr_job(osv.osv):
_defaults = {
'expected_employees': 1,
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'hr.job', context=c),
- 'state': 'open'
+ 'state': 'open',
}
+ def on_change_expected_employee(self, cr, uid, ids, expected_employee, no_of_employee, context=None):
+ if context is None:
+ context = {}
+ result={}
+ if expected_employee:
+ result['no_of_recruitment'] = expected_employee - no_of_employee
+ return {'value': result}
+
def job_old(self, cr, uid, ids, *args):
self.write(cr, uid, ids, {'state': 'old'})
return True
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml
index 2b1cd596024..9e807d43cab 100644
--- a/addons/hr/hr_view.xml
+++ b/addons/hr/hr_view.xml
@@ -2,8 +2,9 @@
-
-
+
+
@@ -324,8 +325,9 @@
-
+
+
@@ -360,6 +362,7 @@
+
diff --git a/addons/hr_attendance/__openerp__.py b/addons/hr_attendance/__openerp__.py
index 3714050cbdb..8a52d0e2577 100644
--- a/addons/hr_attendance/__openerp__.py
+++ b/addons/hr_attendance/__openerp__.py
@@ -32,7 +32,6 @@
'author': 'OpenERP SA',
'depends': ['hr'],
'update_xml': [
- 'security/hr_security.xml',
'security/ir.model.access.csv',
'hr_attendance_view.xml',
'hr_attendance_report.xml',
diff --git a/addons/hr_attendance/report/attendance_by_month.py b/addons/hr_attendance/report/attendance_by_month.py
index da761f3bb0c..c8d0378b971 100644
--- a/addons/hr_attendance/report/attendance_by_month.py
+++ b/addons/hr_attendance/report/attendance_by_month.py
@@ -80,11 +80,13 @@ class report_custom(report_rml):
if attendences and attendences[-1]['action'] == 'sign_in':
attendences.append({'name': tomor.strftime('%Y-%m-%d %H:%M:%S'), 'action':'sign_out'})
# sum up the attendances' durations
+ ldt = None
for att in attendences:
dt = datetime.strptime(att['name'], '%Y-%m-%d %H:%M:%S')
- if att['action'] == 'sign_out':
+ if ldt and att['action'] == 'sign_out':
wh += (dt - ldt).seconds/60/60
- ldt = dt
+ else:
+ ldt = dt
# Week xml representation
# wh = hour2str(wh)
today_xml = '%s ' % ((today - month).days+1, round(wh,2))
diff --git a/addons/hr_attendance/report/attendance_errors.rml b/addons/hr_attendance/report/attendance_errors.rml
index 685f228a710..9ad71c84476 100644
--- a/addons/hr_attendance/report/attendance_errors.rml
+++ b/addons/hr_attendance/report/attendance_errors.rml
@@ -1,8 +1,8 @@
-
-
+
+
-
+
@@ -10,7 +10,7 @@
-
-
[[ repeatIn(get_employees(data['form']['emp_ids']),'employee') ]]
Attendance Errors
- [[ employee.name ]]
-
-
-
-
+ [[ employee.name ]]
+
Operation
@@ -111,36 +93,32 @@
-
+
+ [[ repeatIn(lst(employee.id,data['form']['init_date'], data['form']['end_date'], data['form']['max_delay']), 'att') ]]
+
+
+
+ [[ att['action'] ]]
+
+
+ [[ formatLang(att['date'],date_time=True) ]]
+
+
+ [[ formatLang(att['create_date'],date_time=True) ]]
+
+
+ [[ att['delay'] ]]
+
+
+ [[ att['delay2'] ]]
+
+
+
+
+
- [[ repeatIn(lst(employee.id,data['form']['init_date'], data['form']['end_date'], data['form']['max_delay']), 'att') ]]
-
-
-
- [[ att['action'] ]]
-
-
- [[ formatLang(att['date'],date_time=True) ]]
-
-
- [[ formatLang(att['create_date'],date_time=True) ]]
-
-
- [[ att['delay'] ]]
-
-
- [[ att['delay2'] ]]
-
-
-
-
-
-
-
-
-
- Total period:[[ repeatIn(total(employee.id,data['form']['init_date'], data['form']['end_date'], data['form']['max_delay']),'total')]]
+ Total period:[[ repeatIn(total(employee.id,data['form']['init_date'], data['form']['end_date'], data['form']['max_delay']),'total') ]]
[[ total['total'] ]]
diff --git a/addons/hr_attendance/report/timesheet.py b/addons/hr_attendance/report/timesheet.py
index abedddd50c5..ff759fb3eaf 100644
--- a/addons/hr_attendance/report/timesheet.py
+++ b/addons/hr_attendance/report/timesheet.py
@@ -79,10 +79,13 @@ class report_custom(report_rml):
if attendances and attendances[-1]['action'] == 'sign_in':
attendances.append({'name': n_monday.strftime('%Y-%m-%d %H:%M:%S'), 'action': 'sign_out'})
# sum up the attendances' durations
+ ldt = None
for att in attendances:
dt = datetime.strptime(att['name'], '%Y-%m-%d %H:%M:%S')
- if att['action'] == 'sign_out':
+ if ldt and att['action'] == 'sign_out':
week_wh[ldt.date().weekday()] = week_wh.get(ldt.date().weekday(), 0) + ((dt - ldt).seconds/3600)
+ else:
+ ldt = dt
# Week xml representation
week_repr = ['', '%s ' % monday.strftime('%Y-%m-%d'), '%s ' % n_monday.strftime('%Y-%m-%d')]
diff --git a/addons/hr_attendance/security/hr_security.xml b/addons/hr_attendance/security/hr_security.xml
deleted file mode 100644
index 39f923a895b..00000000000
--- a/addons/hr_attendance/security/hr_security.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/addons/hr_contract/__openerp__.py b/addons/hr_contract/__openerp__.py
index 2851a9aa86b..aea686e4279 100755
--- a/addons/hr_contract/__openerp__.py
+++ b/addons/hr_contract/__openerp__.py
@@ -36,7 +36,6 @@
'depends': ['hr'],
'init_xml': ['hr_contract_data.xml'],
'update_xml': [
- 'security/hr_contract_security.xml',
'security/ir.model.access.csv',
'hr_contract_view.xml'
],
diff --git a/addons/hr_contract/security/hr_contract_security.xml b/addons/hr_contract/security/hr_contract_security.xml
deleted file mode 100644
index 39f923a895b..00000000000
--- a/addons/hr_contract/security/hr_contract_security.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/addons/hr_evaluation/hr_evaluation.py b/addons/hr_evaluation/hr_evaluation.py
index 098f7e765f0..a8b2a3e2c69 100644
--- a/addons/hr_evaluation/hr_evaluation.py
+++ b/addons/hr_evaluation/hr_evaluation.py
@@ -236,12 +236,12 @@ class hr_evaluation(osv.osv):
hr_eval_inter_obj.survey_req_waiting_answer(cr, uid, [int_id], context=context)
if (not wait) and phase.mail_feature:
- body = phase.mail_body % {'employee_name': child.name, 'user_signature': user.signature,
+ body = phase.mail_body % {'employee_name': child.name, 'user_signature': child.user_id.signature,
'eval_name': phase.survey_id.title, 'date': time.strftime('%Y-%m-%d'), 'time': time }
sub = phase.email_subject
dest = [child.work_email]
if dest:
- tools.email_send(src, dest, sub, body)
+ tools.email_send(evaluation.employee_id.work_email, dest, sub, body)
self.write(cr, uid, ids, {'state':'wait'}, context=context)
return True
@@ -268,7 +268,18 @@ class hr_evaluation(osv.osv):
context = {}
self.write(cr, uid, ids,{'state':'cancel'}, context=context)
return True
-
+
+ def write(self, cr, uid, ids, vals, context=None):
+ if context is None:
+ context = {}
+ if 'date' in vals:
+ new_vals = {'date_deadline': vals.get('date')}
+ obj_hr_eval_iterview = self.pool.get('hr.evaluation.interview')
+ for evalutation in self.browse(cr, uid, ids, context=context):
+ for survey_req in evalutation.survey_request_ids:
+ obj_hr_eval_iterview.write(cr, uid, [survey_req.id], new_vals, context=context)
+ return super(hr_evaluation, self).write(cr, uid, ids, vals, context=context)
+
hr_evaluation()
class survey_request(osv.osv):
@@ -321,7 +332,7 @@ class hr_evaluation_interview(osv.osv):
for id in self.browse(cr, uid, ids, context=context):
flag = False
wating_id = 0
- tot_done_req = 0
+ tot_done_req = 1
if not id.evaluation_id.id:
raise osv.except_osv(_('Warning !'),_("You cannot start evaluation without Evaluation."))
records = hr_eval_obj.browse(cr, uid, [id.evaluation_id.id], context=context)[0].survey_request_ids
diff --git a/addons/hr_evaluation/i18n/ru.po b/addons/hr_evaluation/i18n/ru.po
new file mode 100644
index 00000000000..343cc77f37c
--- /dev/null
+++ b/addons/hr_evaluation/i18n/ru.po
@@ -0,0 +1,279 @@
+# Russian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-11-25 12:18+0000\n"
+"PO-Revision-Date: 2010-10-16 08:48+0000\n"
+"Last-Translator: Nikolay Chesnokov \n"
+"Language-Team: Russian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-17 04:53+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: hr_evaluation
+#: view:hr_evaluation.type:0
+#: field:hr_evaluation.type,info:0
+msgid "Information"
+msgstr "Информация"
+
+#. module: hr_evaluation
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Название объекта должно начинаться с x_ и не должно содержать специальных "
+"символов !"
+
+#. module: hr_evaluation
+#: view:hr_evaluation.evaluation:0
+msgid "Schedule next evaluation"
+msgstr "Расписание следующей оценки"
+
+#. module: hr_evaluation
+#: view:hr_evaluation.evaluation:0
+#: field:hr_evaluation.evaluation,info_bad:0
+msgid "Bad Points"
+msgstr "Плохие моменты"
+
+#. module: hr_evaluation
+#: model:ir.actions.act_window,name:hr_evaluation.open_view_employee_evaluation_next_my_list
+msgid "My Next Evaluation"
+msgstr "Моя следуюшая оценка"
+
+#. module: hr_evaluation
+#: field:hr_evaluation.type,value_ids:0
+msgid "Values"
+msgstr "Значения"
+
+#. module: hr_evaluation
+#: view:hr_evaluation.evaluation:0
+#: field:hr_evaluation.evaluation,info_good:0
+msgid "Good Points"
+msgstr "Хорошие моменты"
+
+#. module: hr_evaluation
+#: field:hr_evaluation.evaluation,state:0
+msgid "State"
+msgstr "Статус"
+
+#. module: hr_evaluation
+#: field:hr_evaluation.evaluation,score:0
+#: field:hr_evaluation.quote,score:0
+#: field:hr_evaluation.type,score:0
+#: field:hr_evaluation.type.value,score:0
+msgid "Score"
+msgstr "Оценка"
+
+#. module: hr_evaluation
+#: selection:hr_evaluation.evaluation,state:0
+msgid "Draft"
+msgstr "Черновик"
+
+#. module: hr_evaluation
+#: view:hr_evaluation.evaluation:0
+msgid "Informal Data"
+msgstr "Неофициальные данные"
+
+#. module: hr_evaluation
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Недопустимое имя модели в определении действия."
+
+#. module: hr_evaluation
+#: field:hr_evaluation.evaluation,employee_id:0
+msgid "Employee"
+msgstr "Сотрудник"
+
+#. module: hr_evaluation
+#: view:hr_evaluation.evaluation:0
+#: field:hr_evaluation.evaluation,info_improve:0
+msgid "To Improve"
+msgstr "Улучшить"
+
+#. module: hr_evaluation
+#: field:hr_evaluation.quote,evaluation_id:0
+msgid "Evaluation"
+msgstr "Оценка"
+
+#. module: hr_evaluation
+#: field:hr_evaluation.type.value,type_id:0
+msgid "Evaluation Type"
+msgstr "Тип оценки"
+
+#. module: hr_evaluation
+#: view:hr_evaluation.evaluation:0
+msgid "Status"
+msgstr "Статус"
+
+#. module: hr_evaluation
+#: view:hr_evaluation.type:0
+msgid "Apply to categories"
+msgstr "Применить категории"
+
+#. module: hr_evaluation
+#: model:ir.module.module,description:hr_evaluation.module_meta_information
+msgid "Ability to create employees evaluation."
+msgstr "Возможность создания оценки сотрудников."
+
+#. module: hr_evaluation
+#: field:hr_evaluation.quote,name:0
+msgid "Quote"
+msgstr "Цитата"
+
+#. module: hr_evaluation
+#: field:hr_evaluation.type,category_ids:0
+msgid "Appliable Role"
+msgstr "Гибкость роли"
+
+#. module: hr_evaluation
+#: field:hr_evaluation.evaluation,user_id:0
+msgid "Evaluation User"
+msgstr "Оценка пользователя"
+
+#. module: hr_evaluation
+#: view:hr_evaluation.type:0
+msgid "Choices Results"
+msgstr "Результаты выбора"
+
+#. module: hr_evaluation
+#: field:hr_evaluation.evaluation,date:0
+msgid "Date"
+msgstr "Дата"
+
+#. module: hr_evaluation
+#: model:ir.ui.menu,name:hr_evaluation.menu_eval_hr
+#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_employee_evaluation_form
+msgid "Evaluations"
+msgstr "Оценки"
+
+#. module: hr_evaluation
+#: model:ir.ui.menu,name:hr_evaluation.menu_eval_config
+msgid "Configuration"
+msgstr "Конфигурация"
+
+#. module: hr_evaluation
+#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_employee_evaluation_next_list
+msgid "Next Evaluations"
+msgstr "Последующие оценки"
+
+#. module: hr_evaluation
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Неправильный XML для просмотра архитектуры!"
+
+#. module: hr_evaluation
+#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_evaluation_type_form
+msgid "Evaluation Criterions"
+msgstr "Критерии оценки"
+
+#. module: hr_evaluation
+#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_employee_my_old_evaluation_list
+msgid "My Preceeding Evaluations"
+msgstr "Мои предыдущие оценки"
+
+#. module: hr_evaluation
+#: model:ir.ui.menu,name:hr_evaluation.menu_resp_hr
+msgid "HR Responsible"
+msgstr ""
+
+#. module: hr_evaluation
+#: field:hr_evaluation.quote,value_id:0
+#: field:hr_evaluation.type.value,name:0
+msgid "Value"
+msgstr ""
+
+#. module: hr_evaluation
+#: field:hr_evaluation.evaluation,name:0
+msgid "Summary"
+msgstr ""
+
+#. module: hr_evaluation
+#: field:hr_evaluation.type,active:0
+msgid "Active"
+msgstr ""
+
+#. module: hr_evaluation
+#: view:hr_evaluation.type:0
+msgid "Notes"
+msgstr ""
+
+#. module: hr_evaluation
+#: view:hr_evaluation.evaluation:0
+#: model:ir.model,name:hr_evaluation.model_hr_evaluation_evaluation
+msgid "Employee Evaluation"
+msgstr ""
+
+#. module: hr_evaluation
+#: model:ir.model,name:hr_evaluation.model_hr_evaluation_type
+msgid "Employee Evaluation Type"
+msgstr ""
+
+#. module: hr_evaluation
+#: view:hr_evaluation.evaluation:0
+msgid "Quotations"
+msgstr ""
+
+#. module: hr_evaluation
+#: model:ir.actions.act_window,name:hr_evaluation.open_view_employee_evaluation_next_list
+msgid "Next Employee Evaluation"
+msgstr ""
+
+#. module: hr_evaluation
+#: field:hr_evaluation.quote,type_id:0
+msgid "Type"
+msgstr ""
+
+#. module: hr_evaluation
+#: view:hr_evaluation.type:0
+#: field:hr_evaluation.type,name:0
+msgid "Evaluation Criterion"
+msgstr ""
+
+#. module: hr_evaluation
+#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_employee_evaluation_next_my_list
+msgid "My Next Evaluations"
+msgstr ""
+
+#. module: hr_evaluation
+#: view:hr_evaluation.quote:0
+msgid "Evalution Quote"
+msgstr ""
+
+#. module: hr_evaluation
+#: model:ir.module.module,shortdesc:hr_evaluation.module_meta_information
+msgid "Human Resources Evaluation"
+msgstr ""
+
+#. module: hr_evaluation
+#: field:hr_evaluation.evaluation,quote_ids:0
+msgid "Quotes"
+msgstr ""
+
+#. module: hr_evaluation
+#: view:hr_evaluation.evaluation:0
+#: selection:hr_evaluation.evaluation,state:0
+msgid "Done"
+msgstr ""
+
+#. module: hr_evaluation
+#: model:ir.model,name:hr_evaluation.model_hr_evaluation_quote
+msgid "Employee Evaluation Quote"
+msgstr ""
+
+#. module: hr_evaluation
+#: view:hr_evaluation.evaluation:0
+#: field:hr_evaluation.evaluation,info_employee:0
+msgid "Employee Response"
+msgstr ""
+
+#. module: hr_evaluation
+#: model:ir.model,name:hr_evaluation.model_hr_evaluation_type_value
+msgid "Evaluation Type Value"
+msgstr ""
diff --git a/addons/hr_evaluation/wizard/hr_evaluation_mail.py b/addons/hr_evaluation/wizard/hr_evaluation_mail.py
index 576c782bfd8..3464c4beaee 100644
--- a/addons/hr_evaluation/wizard/hr_evaluation_mail.py
+++ b/addons/hr_evaluation/wizard/hr_evaluation_mail.py
@@ -29,14 +29,14 @@ class hr_evaluation_reminder(osv.osv_memory):
}
def send_mail(self, cr, uid, ids, context=None):
- hr_evaluation_obj = self.pool.get('hr_evaluation.evaluation')
+ hr_evaluation_interview_obj = self.pool.get('hr.evaluation.interview')
if context is None:
context = {}
evaluation_data = self.read(cr, uid, ids, context=context)[0]
- for waiting_id in hr_evaluation_obj.browse(cr, uid, evaluation_data['evaluation_id'], context=context).survey_request_ids:
- if waiting_id.state == "waiting_answer" and waiting_id.user_to_review_id.work_email :
- msg = " Hello %s, \n\n Kindly post your response for %s survey. \n\n Thanks," %(waiting_id.user_to_review_id.name, waiting_id.survey_id.title)
- tools.email_send(tools.config['email_from'], [waiting_id.user_to_review_id.work_email],\
+ current_interview = hr_evaluation_interview_obj.browse(cr, uid, evaluation_data.get('evaluation_id'))
+ if current_interview.state == "waiting_answer" and current_interview.user_to_review_id.work_email :
+ msg = " Hello %s, \n\n Kindly post your response for '%s' survey interview. \n\n Thanks," %(current_interview.user_to_review_id.name, current_interview.survey_id.title)
+ tools.email_send(tools.config['email_from'], [current_interview.user_to_review_id.work_email],\
'Reminder to fill up Survey', msg)
return {'type': 'ir.actions.act_window_close'}
diff --git a/addons/hr_expense/board_hr_expense_view.xml b/addons/hr_expense/board_hr_expense_view.xml
index e79f581dce0..4b64a1bdf19 100644
--- a/addons/hr_expense/board_hr_expense_view.xml
+++ b/addons/hr_expense/board_hr_expense_view.xml
@@ -2,7 +2,7 @@
-
+
[('state','in',('confirm', 'accepted')),('user_id','=',uid)]
-
+
board.hr.expense.form
board.board
-
+
form
-
+
diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py
index 0679fee37b1..143d27f2d9b 100644
--- a/addons/hr_expense/hr_expense.py
+++ b/addons/hr_expense/hr_expense.py
@@ -226,7 +226,7 @@ class hr_expense_line(osv.osv):
return res
_columns = {
- 'name': fields.char('Short Description', size=128, required=True),
+ 'name': fields.char('Expense Note', size=128, required=True),
'date_value': fields.date('Date', required=True),
'expense_id': fields.many2one('hr.expense.expense', 'Expense', ondelete='cascade', select=True),
'total_amount': fields.function(_amount, method=True, string='Total'),
diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml
index 3d92a76a3c3..9eb073ce52e 100644
--- a/addons/hr_expense/hr_expense_view.xml
+++ b/addons/hr_expense/hr_expense_view.xml
@@ -16,7 +16,7 @@
-
+
@@ -68,10 +68,9 @@
diff --git a/addons/hr_holidays/report/holidays_summary.xsl b/addons/hr_holidays/report/holidays_summary.xsl
index 67bb2a58769..c0a24e551ff 100644
--- a/addons/hr_holidays/report/holidays_summary.xsl
+++ b/addons/hr_holidays/report/holidays_summary.xsl
@@ -4,257 +4,257 @@
xmlns:fo="http://www.w3.org/1999/XSL/Format">
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0,
-
-
-
- 0,
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- lightgrey
-
-
- ,0
-
-
-
- ,-1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ,
-
-
-
-
- ,
-
-
-
-
-
-
-
-
-
-
-
- lightgrey
-
- 0,
-
-
-
- 0,
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0,
+
+
+
+ 0,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ lightgrey
+
+
+ ,0
+
+
+
+ ,-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ,
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+
+
+ lightgrey
+
+ 0,
+
+
+
+ 0,
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- 13.7cm,13.7cm
-
-
- header
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Off-Days' Summary
-
- Analyze from to of the holidays.
-
-
- 0.7cm,5.0cm
-
-
- products
-
-
- Month
-
-
-
-
-
-
-
-
-
-
- month
-
-
-
-
-
-
-
-
-
-
-
-
- employee
- Departments & Employees
-
-
-
- digits
-
-
-
- Sum
+
+
+ 13.7cm,13.7cm
+
+
+ header
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
- dept
-
-
- normal
-
-
-
-
-
-
-
-
- digits
-
-
+
+
+ Off-Days' Summary
+
+ Analyze from to of the holidays.
+
+
+ 0.7cm,5.0cm
+
+
+ products
+
+
+ Month
+
+
+
+
+
+
+
+
-
-
-
- sum
-
-
+
+ month
+
+
+
+
+
+
+
+
+
+
+
+
+ employee
+ Departments and Employees
+
+
+
+ digits
+
+
+
+ Sum
+
+
+
+
+
+
+
+
+
+
+
+ dept
+
+
+ normal
+
+
+
+
+
+
+
+
+ digits
+
+
-
-
-
-
- legend
-
-
- Color
- Holiday Type
+
+
+
+ sum
+
+
-
-
-
-
-
- digits
-
-
-
-
-
- normal
-
-
-
+
+
+
+
+ legend
+
+
+ Color
+ Holiday Type
+
+
+
+
+
+
+ digits
+
+
+
+
+
+ normal
+
+
+
-
-
+
+
diff --git a/addons/hr_holidays/report/hr_holidays_report.py b/addons/hr_holidays/report/hr_holidays_report.py
index 5d2dc27c0de..f7b813f9cc5 100644
--- a/addons/hr_holidays/report/hr_holidays_report.py
+++ b/addons/hr_holidays/report/hr_holidays_report.py
@@ -22,67 +22,6 @@
import tools
from osv import fields,osv
-class hr_holidays_report(osv.osv):
- _name = "hr.holidays.report"
- _description = "Leaves Statistics By Employee and category"
- _auto = False
- _rec_name = 'date'
- _columns = {
- 'date': fields.date('Date', readonly=True),
- 'delay_approve': fields.float('Delay to Approve', digits=(16,2),readonly=True),
- 'year': fields.char('Year', size=4, readonly=True),
- 'day': fields.char('Day', size=15, readonly=True),
- 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
- ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
- ('10','October'), ('11','November'), ('12','December')], 'Month', readonly=True),
- 'date_from' : fields.datetime('Start Date', readonly=True),
- 'date_to' : fields.datetime('End Date', readonly=True),
- 'number_of_days_temp': fields.float('Number of Days', readonly=True),
- 'employee_id' : fields.many2one('hr.employee', "Employee's Name", readonly=True),
- 'category_id' : fields.many2one('hr.employee.category', "Category's Name", readonly=True),
- 'user_id':fields.many2one('res.users', 'User', readonly=True),
- 'holiday_status_id' : fields.many2one("hr.holidays.status", "Leave Type",readonly=True),
- 'department_id':fields.many2one('hr.department','Department',readonly=True),
- 'state': fields.selection([('draft', 'Draft'),
- ('confirm', 'Waiting Validation'),
- ('refuse', 'Refused'),
- ('validate', 'Validated'),
- ('cancel', 'Cancelled')]
- ,'State', readonly=True),
- }
- _order = 'date desc'
- def init(self, cr):
- tools.drop_view_if_exists(cr, 'hr_holidays_report')
- cr.execute("""
- create or replace view hr_holidays_report as (
- select
- min(s.id) as id,
- date_trunc('day',s.create_date) as date,
- date_trunc('day',s.date_from) as date_from,
- date_trunc('day',s.date_to) as date_to,
- sum(s.number_of_days_temp) as number_of_days_temp,
- s.employee_id,
- s.category_id,
- s.user_id as user_id,
- to_char(s.date_from, 'YYYY') as year,
- to_char(s.date_from, 'MM') as month,
- to_char(s.date_from, 'YYYY-MM-DD') as day,
- s.holiday_status_id,
- s.department_id,
- s.state,
- avg(extract('epoch' from age(s.create_date,CURRENT_DATE)))/(3600*24) as delay_approve
- from
- hr_holidays s
- WHERE type='remove'
- GROUP BY
- s.create_date,s.state,s.date_from,s.date_to,
- s.employee_id,s.user_id,s.holiday_status_id,
- s.department_id, s.category_id
- )
- """)
-
-hr_holidays_report()
-
class hr_holidays_remaining_leaves_user(osv.osv):
_name = "hr.holidays.remaining.leaves.user"
_description = "Total holidays by type"
diff --git a/addons/hr_holidays/report/hr_holidays_report_view.xml b/addons/hr_holidays/report/hr_holidays_report_view.xml
index e59cf852366..51ff25fea75 100644
--- a/addons/hr_holidays/report/hr_holidays_report_view.xml
+++ b/addons/hr_holidays/report/hr_holidays_report_view.xml
@@ -2,111 +2,6 @@
-
- hr.holidays.report.tree
- hr.holidays.report
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- hr.holidays.report.graph
- hr.holidays.report
- graph
-
-
-
-
-
-
-
-
-
-
- hr.holidays.report.search
- hr.holidays.report
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Leaves Analysis
- hr.holidays.report
- form
- tree,graph
- {'search_default_Employee':1,'search_default_department':1,"search_default_Validated":1, 'group_by':[], 'group_by_no_leaf':1}
-
-
-
-
-
hr.holidays.remaining.leaves.user.tree
hr.holidays.remaining.leaves.user
diff --git a/addons/hr_holidays/security/ir.model.access.csv b/addons/hr_holidays/security/ir.model.access.csv
index 20da4832fe2..f350b73ed64 100644
--- a/addons/hr_holidays/security/ir.model.access.csv
+++ b/addons/hr_holidays/security/ir.model.access.csv
@@ -2,6 +2,5 @@
"access_hr_holydays_status_user","hr.holidays.status user","model_hr_holidays_status","base.group_hr_user",1,1,1,1
"access_hr_holidays_user","hr.holidays.user","model_hr_holidays","base.group_hr_user",1,1,1,1
"access_hr_holidays_remain_user","hr.holidays.ramain.user","model_hr_holidays_remaining_leaves_user","base.group_hr_user",1,1,1,1
-"access_hr_holidays_report_manager","hr.holidays.report.manager","model_hr_holidays_report","base.group_hr_manager",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_available_holidays_report_user","hr.available.holidays.report.user","model_available_holidays_report","base.group_hr_user",1,1,1,1
diff --git a/addons/hr_payroll/__openerp__.py b/addons/hr_payroll/__openerp__.py
index c9339ce013c..65b593c5891 100644
--- a/addons/hr_payroll/__openerp__.py
+++ b/addons/hr_payroll/__openerp__.py
@@ -33,7 +33,7 @@
* Monthly Payroll Register
* Integrated with Holiday Management
""",
- 'author':'OpenERP SA/Axelor',
+ 'author':'OpenERP SA',
'website':'http://www.openerp.com',
'depends': [
'hr',
diff --git a/addons/hr_payroll/report/payroll_register.rml b/addons/hr_payroll/report/payroll_register.rml
index e28353ecea9..7ad99b46502 100644
--- a/addons/hr_payroll/report/payroll_register.rml
+++ b/addons/hr_payroll/report/payroll_register.rml
@@ -1,8 +1,8 @@
-
-
+
+
-
+
@@ -10,10 +10,6 @@
-
-
-
-
@@ -29,6 +25,14 @@
+
+
+
+
+
+
+
+
@@ -91,30 +95,16 @@
-
-
-
- Number
-
-
- [[o.number]]
-
-
- Date
-
-
- [[formatLang(time.strftime('%Y-%m-%d'), date = True)]]
-
-
-
+ Number : [[o.number]]
+ Date : [[formatLang(time.strftime('%Y-%m-%d'), date = True)]]
+
+
+
-
-
-
-
+
#
@@ -142,13 +132,10 @@
-
-
-
[[repeatIn(o.line_ids, 'l')]]
-
+
[[ get_no() ]]
@@ -157,30 +144,27 @@
[[ l.employee_id.name ]]
- [[ formatLang(l.basic) ]] [[ company.currency_id.symbol]]
+ [[ formatLang(l.basic) ]] [[ (company.currency_id and company.currency_id.symbol) or '']]
- [[ formatLang(l.other_pay)]] [[ company.currency_id.symbol]]
+ [[ formatLang(l.other_pay)]] [[ (company.currency_id and company.currency_id.symbol) or '']]
- [[ formatLang(l.allounce)]] [[ company.currency_id.symbol]]
+ [[ formatLang(l.allounce)]] [[ (company.currency_id and company.currency_id.symbol) or '']]
- [[ formatLang(l.grows)]] [[ company.currency_id.symbol]]
+ [[ formatLang(l.grows)]] [[ (company.currency_id and company.currency_id.symbol) or '']]
- [[ formatLang(l.deduction)]] [[ company.currency_id.symbol]]
+ [[ formatLang(l.deduction)]] [[ (company.currency_id and company.currency_id.symbol) or '']]
- [[ formatLang(l.net)]] [[ company.currency_id.symbol]]
+ [[ formatLang(l.net)]] [[ (company.currency_id and company.currency_id.symbol) or '']]
-
-
-
-
+
@@ -191,22 +175,22 @@
Total Salary
- [[formatLang(get_basic(o))]][[ company.currency_id.symbol]]
+ [[formatLang(get_basic(o))]][[ (company.currency_id and company.currency_id.symbol) or '']]
- [[formatLang(get_other(o))]] [[ company.currency_id.symbol]]
+ [[formatLang(get_other(o))]] [[ (company.currency_id and company.currency_id.symbol) or '']]
- [[formatLang(get_allow(o))]] [[ company.currency_id.symbol]]
+ [[formatLang(get_allow(o))]] [[ (company.currency_id and company.currency_id.symbol) or '']]
- [[formatLang(get_grows(o))]] [[ company.currency_id.symbol]]
+ [[formatLang(get_grows(o))]] [[ (company.currency_id and company.currency_id.symbol) or '']]
- [[formatLang(get_deduct(o))]] [[ company.currency_id.symbol]]
+ [[formatLang(get_deduct(o))]] [[ (company.currency_id and company.currency_id.symbol) or '']]
- [[formatLang(get_net(o))]] [[ company.currency_id.symbol]]
+ [[formatLang(get_net(o))]] [[ (company.currency_id and company.currency_id.symbol) or '']]
@@ -216,7 +200,7 @@
-
+
For [[company.name]],
@@ -243,4 +227,4 @@
-
+
\ No newline at end of file
diff --git a/addons/hr_payroll/report/report_employees_detail.rml b/addons/hr_payroll/report/report_employees_detail.rml
index 6d8e6b18fc8..a74ca7ee6f8 100644
--- a/addons/hr_payroll/report/report_employees_detail.rml
+++ b/addons/hr_payroll/report/report_employees_detail.rml
@@ -1,6 +1,6 @@
-
-
+
+
@@ -202,8 +202,6 @@
-
-
@@ -264,7 +262,7 @@
- Employees Salary Details
+ Employees Salary Details
From [[ formatLang(data['form']['date_from'], date=True) ]] To [[ formatLang(data['form']['date_to'], date=True) ]]
@@ -342,8 +340,8 @@
- [[ repeatIn(get_periods(data['form']),'m') ]] [[ get_employee_detail(o) ]]
-
+ [[ repeatIn(get_periods(data['form']),'m') ]] [[ get_employee_detail(o) ]]
+
Title
@@ -396,52 +394,76 @@
- Allowances with Basic:
+ Allowances with Basic:
[[ repeatIn(get_allow(),'e1') ]]
-
+
[[ e1[0] ]]
- [[ formatLang(e1[1]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e1[1]!='' and formatLang(e1[1])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e1[2]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e1[2]!='' and formatLang(e1[2])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e1[3]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e1[3]!='' and formatLang(e1[3])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e1[4]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e1[4]!='' and formatLang(e1[4])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e1[5]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e1[5]!='' and formatLang(e1[5])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e1[6]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e1[6]!='' and formatLang(e1[6])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e1[7]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e1[7]!='' and formatLang(e1[7])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e1[8]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e1[8]!='' and formatLang(e1[8])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e1[9]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e1[9]!='' and formatLang(e1[9])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e1[10]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e1[10]!='' and formatLang(e1[10])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e1[11]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e1[11]!='' and formatLang(e1[11])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e1[12]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e1[12]!='' and formatLang(e1[12])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
[[ formatLang(e1[13]) ]] [[ company.currency_id.symbol ]]
@@ -452,52 +474,76 @@
- Deductions:
+ Deductions:
[[ repeatIn(get_deduct(),'e2') ]]
-
+
[[ e2[0] ]]
- [[ formatLang(e2[1]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e2[1]!='' and formatLang(e2[1])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e2[2]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e2[2]!='' and formatLang(e2[2])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e2[3]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e2[3]!='' and formatLang(e2[3])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e2[4]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e2[4]!='' and formatLang(e2[4])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e2[5]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e2[5]!='' and formatLang(e2[5])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e2[6]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e2[6]!='' and formatLang(e2[6])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e2[7]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e2[7]!='' and formatLang(e2[7])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e2[8]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e2[8]!='' and formatLang(e2[8])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e2[9]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e2[9]!='' and formatLang(e2[9])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e2[10]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e2[10]!='' and formatLang(e2[10])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e2[11]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e2[11]!='' and formatLang(e2[11])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e2[12]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e2[12]!='' and formatLang(e2[12])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
[[ formatLang(e2[13]) ]] [[ company.currency_id.symbol ]]
@@ -508,52 +554,76 @@
- Others:
+ Others:
[[ repeatIn(get_other(),'e3') ]]
-
+
[[ e3[0] ]]
- [[ formatLang(e3[1]) or removeParentNode('para') ]] [[ company.currency_id.symbol ]]
+
+ [[ (e3[1]!='' and formatLang(e3[1])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e3[2]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e3[2]!='' and formatLang(e3[2])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e3[3]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e3[3]!='' and formatLang(e3[3])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e3[4]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e3[4]!='' and formatLang(e3[4])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e3[5]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e3[5]!='' and formatLang(e3[5])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e3[6]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e3[6]!='' and formatLang(e3[6])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e3[7]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e3[7]!='' and formatLang(e3[7])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e3[8]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e3[8]!='' and formatLang(e3[8])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e3[9]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e3[9]!='' and formatLang(e3[9])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e3[10]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e3[10]!='' and formatLang(e3[10])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e3[11]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e3[11]!='' and formatLang(e3[11])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e3[12]) or removeParentNode('para')]] [[ company.currency_id.symbol ]]
+
+ [[ (e3[12]!='' and formatLang(e3[12])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
[[ formatLang(e3[13]) ]] [[ company.currency_id.symbol ]]
@@ -562,7 +632,7 @@
-
+
[[ get_monthly_total()[0] ]]
@@ -608,12 +678,6 @@
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/addons/hr_payroll/report/report_payroll_advice.rml b/addons/hr_payroll/report/report_payroll_advice.rml
index 8fe18772c2f..18f56cc9883 100644
--- a/addons/hr_payroll/report/report_payroll_advice.rml
+++ b/addons/hr_payroll/report/report_payroll_advice.rml
@@ -1,6 +1,6 @@
-
-
+
+
@@ -41,6 +41,12 @@
+
+
+
+
+
+
@@ -212,9 +218,6 @@
-
-
-
[[ repeatIn(get_detail(o.line_ids),'line') ]]
@@ -229,10 +232,10 @@
[[ line['name'] ]]
- [[ formatLang(line['amount' ]) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(line['amount' ]) ]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]
- [[ formatLang(line['bysal']) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(line['bysal']) ]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]
[[ line['acc_no'] ]]
@@ -242,13 +245,7 @@
-
-
-
-
-
-
@@ -257,13 +254,13 @@
- Total([[ company.currency_id.code ]]):
+ Total:
- [[ formatLang(get_total()) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(get_total()) ]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]
- [[ formatLang(get_bysal_total()) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(get_bysal_total()) ]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]
@@ -338,4 +335,4 @@
-
+
\ No newline at end of file
diff --git a/addons/hr_payroll/report/report_year_report.rml b/addons/hr_payroll/report/report_year_report.rml
index da988e94f7e..d121ce0dd98 100755
--- a/addons/hr_payroll/report/report_year_report.rml
+++ b/addons/hr_payroll/report/report_year_report.rml
@@ -1,6 +1,6 @@
-
-
+
+
@@ -201,40 +201,64 @@
[[ e[0] ]]
- [[ formatLang(e[1]) or removeParentNode('para') ]] [[company.currency_id.symbol]]
+
+ [[ (e[1]!='' and formatLang(e[1])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e[2]) or removeParentNode('para') ]] [[company.currency_id.symbol]]
+
+ [[ (e[2]!='' and formatLang(e[2])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e[3]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+
+ [[ (e[3]!='' and formatLang(e[3])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e[4]) or removeParentNode('para') ]] [[company.currency_id.symbol]]
+
+ [[ (e[4]!='' and formatLang(e[4])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e[5]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+
+ [[ (e[5]!='' and formatLang(e[5])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e[6]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+
+ [[ (e[6]!='' and formatLang(e[6])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e[7]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+
+ [[ (e[7]!='' and formatLang(e[7])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e[8]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+
+ [[ (e[8]!='' and formatLang(e[8])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e[9]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+
+ [[ (e[9]!='' and formatLang(e[9])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e[10]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+
+ [[ (e[10]!='' and formatLang(e[10])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e[11]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+
+ [[ (e[11]!='' and formatLang(e[11])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
- [[ formatLang(e[12]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+
+ [[ (e[12]!='' and formatLang(e[12])) or removeParentNode('font') ]] [[company.currency_id.symbol]]
+
[[ formatLang(e[13]) ]] [[company.currency_id.symbol]]
@@ -296,4 +320,4 @@
-
+
\ No newline at end of file
diff --git a/addons/hr_payroll/report/rml_parse.py b/addons/hr_payroll/report/rml_parse.py
index 7abb29711b6..0eb783de39f 100755
--- a/addons/hr_payroll/report/rml_parse.py
+++ b/addons/hr_payroll/report/rml_parse.py
@@ -68,7 +68,7 @@ class rml_parse(report_sxw.rml_parse):
def _get_and_change_date_format_for_swiss (self,date_to_format):
date_formatted=''
if date_to_format:
- date_formatted = strptime (date_to_format,'%Y-%m-%d').strftime('%d.%m.%Y')
+ date_formatted = strptime(date_to_format,'%Y-%m-%d').strftime('%d.%m.%Y')
return date_formatted
def _explode_name(self,chaine,length):
@@ -107,7 +107,7 @@ class rml_parse(report_sxw.rml_parse):
return Stringer
def explode_this(self,chaine,length):
- chaine = rstrip(chaine)
+ chaine = chaine.rstrip()
ast = list(chaine)
i = length
while i <= len(ast):
diff --git a/addons/hr_payroll_account/__openerp__.py b/addons/hr_payroll_account/__openerp__.py
index 97ae94a361c..d65570a1ad9 100644
--- a/addons/hr_payroll_account/__openerp__.py
+++ b/addons/hr_payroll_account/__openerp__.py
@@ -28,7 +28,7 @@
* Payment Encoding
* Company Contribution Management
""",
- 'author':'OpenERP SA/Axelor',
+ 'author':'OpenERP SA',
'website':'http://www.openerp.com',
'depends': [
'hr_payroll',
diff --git a/addons/hr_payroll_account/hr_payroll_account.py b/addons/hr_payroll_account/hr_payroll_account.py
index dcef94c3f35..d9f963ed537 100644
--- a/addons/hr_payroll_account/hr_payroll_account.py
+++ b/addons/hr_payroll_account/hr_payroll_account.py
@@ -28,8 +28,6 @@ from osv import fields, osv
from tools import config
from tools.translate import _
-
-
def prev_bounds(cdate=False):
when = date.fromtimestamp(time.mktime(time.strptime(cdate,"%Y-%m-%d")))
this_first = date(when.year, when.month, 1)
@@ -572,8 +570,9 @@ class hr_payslip(osv.osv):
line_ids += [movel_pool.create(cr, uid, rec, context=context)]
- for contrub in line.category_id.contribute_ids:
- print contrib.name, contrub.code, contrub.amount_type, contrib.contribute_per, line.total
+ # if self._debug:
+ # for contrib in line.category_id.contribute_ids:
+ # _log.debug("%s %s %s %s %s", contrib.name, contrub.code, contrub.amount_type, contrib.contribute_per, line.total)
adj_move_id = False
if total_deduct > 0:
diff --git a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml
index 7416ff8b0ab..0cf34e36de4 100644
--- a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml
+++ b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml
@@ -38,7 +38,7 @@
-
+
form
-
+
diff --git a/addons/hr_recruitment/report/hr_recruitment_report_view.xml b/addons/hr_recruitment/report/hr_recruitment_report_view.xml
index f5e74724c25..a38cf0185df 100644
--- a/addons/hr_recruitment/report/hr_recruitment_report_view.xml
+++ b/addons/hr_recruitment/report/hr_recruitment_report_view.xml
@@ -49,39 +49,39 @@
search
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+ icon="terp-camera_test"
+ domain="[('state','=','done')]"
+ help = "Hired employees"/>
+
+
+
-
-
+
+
-
-
-
+
+
+
@@ -130,7 +130,7 @@
{'search_default_month':1,'search_default_department':1,'group_by_no_leaf':1,'group_by':[]}
-
+
diff --git a/addons/hr_recruitment/wizard/hr_recruitment_phonecall.py b/addons/hr_recruitment/wizard/hr_recruitment_phonecall.py
index 7cb5366a275..6e817eaf49a 100644
--- a/addons/hr_recruitment/wizard/hr_recruitment_phonecall.py
+++ b/addons/hr_recruitment/wizard/hr_recruitment_phonecall.py
@@ -42,8 +42,10 @@ class job2phonecall(osv.osv_memory):
return case.user_id and case.user_id.id or False
def _date_category(self, cr, uid, context=None):
+ case_obj = self.pool.get('hr.applicant')
if context is None:
context = {}
+ case = case_obj.browse(cr, uid, context['active_id'], context=context)
categ_id = self.pool.get('crm.case.categ').search(cr, uid, [('name','=','Outbound')], context=context)
return categ_id and categ_id[0] or case.categ_id and case.categ_id.id or False
diff --git a/addons/hr_timesheet/hr_timesheet.py b/addons/hr_timesheet/hr_timesheet.py
index 84e7db409ab..20d97634214 100644
--- a/addons/hr_timesheet/hr_timesheet.py
+++ b/addons/hr_timesheet/hr_timesheet.py
@@ -23,7 +23,6 @@ import time
from osv import fields
from osv import osv
-from osv.orm import except_orm
from tools.translate import _
class hr_employee(osv.osv):
@@ -39,7 +38,7 @@ class hr_employee(osv.osv):
try:
result = md.get_object_reference(cr, uid, 'hr_timesheet', 'analytic_journal')
return result[1]
- except ValueError, e:
+ except ValueError:
pass
return False
@@ -48,7 +47,7 @@ class hr_employee(osv.osv):
try:
result = md.get_object_reference(cr, uid, 'hr_timesheet', 'product_consultant')
return result[1]
- except ValueError, e:
+ except ValueError:
pass
return False
@@ -87,7 +86,9 @@ class hr_analytic_timesheet(osv.osv):
if prod_id and unit_amount:
# find company
company_id = self.pool.get('res.company')._company_default_get(cr, uid, 'account.analytic.line', context=context)
- res.update(self.pool.get('account.analytic.line').on_change_unit_amount(cr, uid, id, prod_id, unit_amount, company_id, unit, journal_id, context=context))
+ r = self.pool.get('account.analytic.line').on_change_unit_amount(cr, uid, id, prod_id, unit_amount, company_id, unit, journal_id, context=context)
+ if r:
+ res.update(r)
# update unit of measurement
if prod_id:
uom = self.pool.get('product.product').browse(cr, uid, prod_id, context=context)
diff --git a/addons/hr_timesheet/hr_timesheet_data.xml b/addons/hr_timesheet/hr_timesheet_data.xml
index e7cb3d5e0d4..a19b2c67291 100644
--- a/addons/hr_timesheet/hr_timesheet_data.xml
+++ b/addons/hr_timesheet/hr_timesheet_data.xml
@@ -18,5 +18,10 @@
+
+
+
+
+
diff --git a/addons/hr_timesheet/hr_timesheet_view.xml b/addons/hr_timesheet/hr_timesheet_view.xml
index d2da8e6ea9e..98c4413ade1 100644
--- a/addons/hr_timesheet/hr_timesheet_view.xml
+++ b/addons/hr_timesheet/hr_timesheet_view.xml
@@ -5,7 +5,6 @@
-
hr.analytic.timesheet.tree
hr.analytic.timesheet
@@ -70,9 +69,8 @@
-
-
-
+
+
@@ -96,12 +94,11 @@
tree,form
{"search_default_user_id":uid, "search_default_today":1}
- This functionality gives you a list of work done by user, product and analytic account (or project). A search tool allows you to make fine-grained analysis.
+ Working Hours allows you to log your working hours by project every day.
-
hr.timesheet.employee.extd_form
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
index f605fd760be..cc1ff3b9324 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
@@ -27,8 +27,8 @@ class hr_timesheet_invoice_factor(osv.osv):
_name = "hr_timesheet_invoice.factor"
_description = "Invoice Rate"
_columns = {
- 'name': fields.char('Internal name', size=128, required=True),
- 'customer_name': fields.char('Name', size=128, help="Name of the customer"),
+ 'name': fields.char('Internal name', size=128, required=True, translate=True),
+ 'customer_name': fields.char('Name', size=128, help="Label for the customer"),
'factor': fields.float('Discount (%)', required=True, help="Discount in percentage"),
}
_defaults = {
@@ -45,7 +45,10 @@ class account_analytic_account(osv.osv):
context = {}
res = {}
- cr.execute('select account_id as account_id, l.invoice_id from hr_analytic_timesheet h left join account_analytic_line l on (h.line_id=l.id)')
+ cr.execute('SELECT account_id as account_id, l.invoice_id '
+ 'FROM hr_analytic_timesheet h LEFT JOIN account_analytic_line l '
+ 'ON (h.line_id=l.id) '
+ 'WHERE l.account_id = ANY(%s)', (ids,))
account_to_invoice_map = {}
for rec in cr.dictfetchall():
account_to_invoice_map.setdefault(rec['account_id'], []).append(rec['invoice_id'])
@@ -163,6 +166,7 @@ class account_invoice(osv.osv):
obj_analytic_account = self.pool.get('account.analytic.account')
for il in iml:
if il['account_analytic_id']:
+ # *-* browse (or refactor to avoid read inside the loop)
to_invoice = obj_analytic_account.read(cr, uid, [il['account_analytic_id']], ['to_invoice'])[0]['to_invoice']
if to_invoice:
il['analytic_lines'][0][2]['to_invoice'] = to_invoice[0]
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice_data.xml b/addons/hr_timesheet_invoice/hr_timesheet_invoice_data.xml
index a81af0788b6..462888e0b39 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice_data.xml
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice_data.xml
@@ -6,5 +6,15 @@
100%
0.0
+
+ 90%
+ 90%
+ 10.0
+
+
+ 50%
+ 50%
+ 50.0
+
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
index 2caa7b15d77..408835fe993 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
@@ -118,7 +118,7 @@
tree,form
[]
{'search_default_to_invoice': 1}
- OpenERP automatically group the entries to be invoiced so you can keep an eye on them on real time in one glance.
+ This lists show you every task work you can invoice to the customer. Select the lines in order to generate the invoices automatically.
-
+
diff --git a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml
index cda4574845a..9a22de4d828 100644
--- a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml
+++ b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml
@@ -28,8 +28,6 @@
I create invoice on analytic Line using "Invoice analytic Line" wizard.
-
!record {model: hr.timesheet.invoice.create, id: hr_timesheet_invoice_create_0}:
- accounts:
- - account.analytic_sednacom
date: 1
name: 1
price: 1
@@ -46,10 +44,12 @@
I check that Invoice is created for this timesheet.
-
!python {model: account.analytic.line}: |
+ account_id = self.pool.get('account.analytic.line')
+ accounts = account_id.browse(cr, uid, [ref("account_analytic_line_developyamlforhrmodule0")])[0]
exp = self.browse(cr, uid, [ref('account_analytic_line_developyamlforhrmodule0')])[0]
analytic_account_obj = self.pool.get('account.analytic.account')
data = self.pool.get('hr.timesheet.invoice.create').read(cr, uid, [ref("hr_timesheet_invoice_create_0")], [], context)[0]
- account_ids = data['accounts']
+ account_ids = accounts['account_id']
for account in analytic_account_obj.browse(cr, uid, account_ids, context):
partner = account.partner_id.id
@@ -81,4 +81,4 @@
-
I can also make some theoretical revenue reports.
-
- I can also see timesheet profit using Timesheet profit report.
\ No newline at end of file
+ I can also see timesheet profit using Timesheet profit report.
diff --git a/addons/hr_timesheet_sheet/__openerp__.py b/addons/hr_timesheet_sheet/__openerp__.py
index d00ee91a304..383521b399d 100644
--- a/addons/hr_timesheet_sheet/__openerp__.py
+++ b/addons/hr_timesheet_sheet/__openerp__.py
@@ -55,6 +55,7 @@ The validation can be configured in the company:
'process/hr_timesheet_sheet_process.xml',
'board_hr_timesheet_view.xml',
'report/hr_timesheet_report_view.xml',
+ 'report/timesheet_report_view.xml',
'wizard/hr_timesheet_current_view.xml',
'hr_timesheet_sheet_data.xml'
],
diff --git a/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml b/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml
index a50042c3dfb..13193e66d99 100644
--- a/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml
+++ b/addons/hr_timesheet_sheet/board_hr_timesheet_view.xml
@@ -3,7 +3,7 @@
+ sequence="0"/>
+
+
@@ -322,8 +325,8 @@
-
diff --git a/addons/hr_timesheet_sheet/report/__init__.py b/addons/hr_timesheet_sheet/report/__init__.py
index 8dac73f07ec..b06b0608356 100644
--- a/addons/hr_timesheet_sheet/report/__init__.py
+++ b/addons/hr_timesheet_sheet/report/__init__.py
@@ -19,5 +19,7 @@
#
##############################################################################
+import timesheet_report
import hr_timesheet_report
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml b/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml
index 36ea5b6418a..054a4def9f2 100644
--- a/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml
+++ b/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml
@@ -72,7 +72,7 @@
-
+
diff --git a/addons/hr_timesheet_sheet/report/timesheet_report.py b/addons/hr_timesheet_sheet/report/timesheet_report.py
new file mode 100644
index 00000000000..a8c0440a053
--- /dev/null
+++ b/addons/hr_timesheet_sheet/report/timesheet_report.py
@@ -0,0 +1,122 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+import tools
+from osv import fields,osv
+
+class timesheet_report(osv.osv):
+ _name = "timesheet.report"
+ _description = "Timesheet"
+ _auto = False
+ _columns = {
+ 'year': fields.char('Year',size=64,required=False, readonly=True),
+ 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
+ ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
+ ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
+ 'day': fields.char('Day', size=128, readonly=True),
+ 'name': fields.char('Description', size=64,readonly=True),
+ 'product_id' : fields.many2one('product.product', 'Product'),
+ 'general_account_id' : fields.many2one('account.account', 'General Account', readonly=True),
+ 'user_id': fields.many2one('res.users', 'User',readonly=True),
+ 'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Type of Invoicing',readonly=True),
+ 'account_id': fields.many2one('account.analytic.account', 'Analytic Account',readonly=True),
+ 'nbr': fields.integer('#Nbr',readonly=True),
+ 'total_diff': fields.float('#Total Diff',readonly=True),
+ 'total_timesheet': fields.float('#Total Timesheet',readonly=True),
+ 'total_attendance': fields.float('#Total Attendance',readonly=True),
+ 'company_id': fields.many2one('res.company', 'Company',readonly=True),
+ 'department_id':fields.many2one('hr.department','Department',readonly=True),
+ 'date_from': fields.date('Date from',readonly=True,),
+ 'date_to': fields.date('Date to',readonly=True),
+ 'date_current': fields.date('Current date', required=True),
+ 'state' : fields.selection([
+ ('new', 'New'),
+ ('draft','Draft'),
+ ('confirm','Confirmed'),
+ ('done','Done')], 'State', readonly=True),
+ 'quantity': fields.float('#Quantity',readonly=True),
+ 'cost': fields.float('#Cost',readonly=True),
+ }
+
+ def init(self, cr):
+ tools.drop_view_if_exists(cr, 'timesheet_report')
+ cr.execute("""
+ create or replace view timesheet_report as (
+ select
+ min(aal.id) as id,
+ htss.date_current,
+ htss.name,
+ htss.date_from,
+ htss.date_to,
+ to_char(htss.date_current,'YYYY') as year,
+ to_char(htss.date_current,'MM') as month,
+ to_char(htss.date_current, 'YYYY-MM-DD') as day,
+ count(*) as nbr,
+ aal.unit_amount as quantity,
+ aal.amount as cost,
+ aal.account_id,
+ aal.product_id,
+ (SELECT sum(day.total_difference)
+ FROM hr_timesheet_sheet_sheet AS sheet
+ LEFT JOIN hr_timesheet_sheet_sheet_day AS day
+ ON (sheet.id = day.sheet_id
+ AND day.name = sheet.date_current) where sheet.id=htss.id) as total_diff,
+ (SELECT sum(day.total_timesheet)
+ FROM hr_timesheet_sheet_sheet AS sheet
+ LEFT JOIN hr_timesheet_sheet_sheet_day AS day
+ ON (sheet.id = day.sheet_id
+ AND day.name = sheet.date_current) where sheet.id=htss.id) as total_timesheet,
+ (SELECT sum(day.total_attendance)
+ FROM hr_timesheet_sheet_sheet AS sheet
+ LEFT JOIN hr_timesheet_sheet_sheet_day AS day
+ ON (sheet.id = day.sheet_id
+ AND day.name = sheet.date_current) where sheet.id=htss.id) as total_attendance,
+ aal.to_invoice,
+ aal.general_account_id,
+ htss.user_id,
+ htss.company_id,
+ htss.department_id,
+ htss.state
+ from account_analytic_line as aal
+ left join hr_analytic_timesheet as hat ON (hat.line_id=aal.id)
+ left join hr_timesheet_sheet_sheet as htss ON (hat.line_id=htss.id)
+ group by
+ to_char(htss.date_current,'YYYY'),
+ to_char(htss.date_current,'MM'),
+ to_char(htss.date_current, 'YYYY-MM-DD'),
+ aal.account_id,
+ htss.date_from,
+ htss.date_to,
+ aal.unit_amount,
+ aal.amount,
+ htss.date_current,
+ aal.to_invoice,
+ aal.product_id,
+ aal.general_account_id,
+ htss.name,
+ htss.company_id,
+ htss.state,
+ htss.id,
+ htss.department_id,
+ htss.user_id
+ )
+ """)
+timesheet_report()
diff --git a/addons/hr_timesheet_sheet/report/timesheet_report_view.xml b/addons/hr_timesheet_sheet/report/timesheet_report_view.xml
new file mode 100644
index 00000000000..08abc6db63b
--- /dev/null
+++ b/addons/hr_timesheet_sheet/report/timesheet_report_view.xml
@@ -0,0 +1,126 @@
+
+
+
+
+ timesheet.report.graph
+ timesheet.report
+ graph
+
+
+
+
+
+
+
+
+
+ timesheet.report.tree
+ timesheet.report
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ timesheet.report.search
+ timesheet.report
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Timesheet Sheet Analysis
+ timesheet.report
+ form
+ tree,graph
+ {'search_default_month':1,'search_default_User_id':1,'group_by_no_leaf':1,'group_by':[]}
+
+
+
+
+
diff --git a/addons/hr_timesheet_sheet/security/ir.model.access.csv b/addons/hr_timesheet_sheet/security/ir.model.access.csv
index 9d0159bbc1a..f55ee0fb5e0 100644
--- a/addons/hr_timesheet_sheet/security/ir.model.access.csv
+++ b/addons/hr_timesheet_sheet/security/ir.model.access.csv
@@ -6,3 +6,4 @@
"access_hr_timesheet_report","hr.timesheet.report","model_hr_timesheet_report","base.group_hr_manager",1,1,1,1
"access_hr_analytic_timesheet_system_user","hr.analytic.timesheet.system.user","model_hr_analytic_timesheet","base.group_user",1,0,0,0
"access_hr_timesheet_sheet_sheet_day","hr.timesheet.sheet.sheet.day.user","model_hr_timesheet_sheet_sheet_day","base.group_user",1,0,0,0
+"access_timesheet_report_user","timesheet.report.user","model_timesheet_report","base.group_hr_manager",1,1,1,1
diff --git a/addons/hr_timesheet_sheet/wizard/hr_timesheet_current_view.xml b/addons/hr_timesheet_sheet/wizard/hr_timesheet_current_view.xml
index f9944d0949f..fe63a4ce7b3 100644
--- a/addons/hr_timesheet_sheet/wizard/hr_timesheet_current_view.xml
+++ b/addons/hr_timesheet_sheet/wizard/hr_timesheet_current_view.xml
@@ -23,6 +23,7 @@
tree,form
new
+ My Timesheet opens your timesheet so that you can book your activities into the system. From the same form, you can register your attendances (Sign In/Out) and describe the working hours made on the different projects. At the end of the period defined in the company, the timesheet is confirmed by the user and can be validated by his manager. If required, as defined on the project, you can generate the invoices based on the timesheet.
diff --git a/addons/lunch/lunch_demo.xml b/addons/lunch/lunch_demo.xml
index 91be819d430..30172b9e0a2 100644
--- a/addons/lunch/lunch_demo.xml
+++ b/addons/lunch/lunch_demo.xml
@@ -14,7 +14,7 @@
Cashbox
-
+
diff --git a/addons/lunch/report/order.py b/addons/lunch/report/order.py
index 838ab108c23..29c9d381745 100644
--- a/addons/lunch/report/order.py
+++ b/addons/lunch/report/order.py
@@ -26,18 +26,38 @@ from osv import osv
class order(report_sxw.rml_parse):
- def sum_price(self, orders):
- res = 0.0
- for o in orders:
- res += o.price
- return res
+ def get_lines(self, user,objects):
+ lines=[]
+ for obj in objects:
+ if user.id==obj.user_id.id:
+ lines.append(obj)
+ return lines
+
+ def get_total(self, user,objects):
+ lines=[]
+ for obj in objects:
+ if user.id==obj.user_id.id:
+ lines.append(obj)
+ total=0.0
+ for line in lines:
+ total+=line.price
+ return total
+
+ def get_users(self, objects):
+ users=[]
+ for obj in objects:
+ if obj.user_id not in users:
+ users.append(obj.user_id)
+ return users
def __init__(self, cr, uid, name, context):
super(order, self).__init__(cr, uid, name, context)
self.localcontext.update({
'time': time,
- 'sum_price': self.sum_price,
+ 'get_lines': self.get_lines,
+ 'get_users': self.get_users,
+ 'get_total': self.get_total,
})
report_sxw.report_sxw('report.lunch.order', 'lunch.order',
diff --git a/addons/lunch/report/order.rml b/addons/lunch/report/order.rml
index 62003478c4c..d47816abd9c 100644
--- a/addons/lunch/report/order.rml
+++ b/addons/lunch/report/order.rml
@@ -1,6 +1,6 @@
-
-
+
+
@@ -10,89 +10,37 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -108,112 +56,96 @@
+
+
+
+
+
+
+
- [[repeatIn(objects,'o')]]
+
+
+
+
+
+
+
+
+ [[ (user.address_id and user.address_id.partner_id and user.address_id.partner_id.title and user.address_id.partner_id.title.name) or '' ]] [[ (user.address_id and user.address_id.partner_id and user.address_id.partner_id.name) or '' ]]
+ [[ (user.address_id and user.address_id.street) or '' ]]
+ [[ (user.address_id and user.address_id.street2) or removeParentNode('para') ]]
+ [[ (user.address_id and user.address_id.zip) or '' ]] [[ (user.address_id and user.address_id.city) or '' ]]
+ [[ (user.address_id and user.address_id.state_id and user.address_id.state_id.name) or removeParentNode('para')]]
+ [[ (user.address_id and user.address_id.country_id and user.address_id.country_id.name) or '' ]]
+
+
+
+ Lunch Order
+
+
+ [[repeatIn(get_users(objects),'o')]]
+
+
+
+ Name
+
+
+ Date
+
+
+ Order
+
+
+ Description
+
+
+ Unit Price
+
+
+
-
-
-
-
+ [[ repeatIn(get_lines(o,objects),'lines') ]]
+
-
-
-
+ [[ (lines.user_id and lines.user_id.name) or '']]
-
-
-
+ [[ formatLang(lines.date,date='True') ]]
- [[ o.user_id.address_id.partner_id.title.name or '' ]] [[ o.user_id.address_id.partner_id.name ]]
- [[ o.user_id.address_id.street ]]
- [[ o.user_id.address_id.street2 or removeParentNode('para') ]]
- [[ o.user_id.address_id.zip or '' ]] [[ o.user_id.address_id.city or '' ]]
- [[ (o.user_id.address_id.state_id and o.user_id.address_id.state_id.name) or removeParentNode('para')]] [[ (o.user_id.address_id.country_id and o.user_id.address_id.country_id.name) or '' ]]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Lunch Order
-
-
-
-
-
-
-
-
-
-
-
-
- Name
+ [[ (lines.product and lines.product.name) or '' ]]
- Order
+ [[ lines.descript]]
- Description
-
-
- Unit Price
+ [[ lines.price ]] [[ (o.company_id and o.company_id.currency_id and o.company_id.currency_id.symbol) or '' ]]
-
+
- [[ o.user_id.name ]]
-
-
- [[o.product.name ]]
-
-
- [[ o.descript ]]
-
-
- [[formatLang(o.price) ]] [[company.currency_id.symbol]]
-
-
-
-
-
-
-
+
-
-
-
+ Total:
- Total:
-
-
- [[ formatLang(sum_price(objects)) ]] [[company.currency_id.symbol]]
+ [[ formatLang(get_total(o,objects)) ]] [[ (o.company_id and o.company_id.currency_id and o.company_id.currency_id.symbol) or '' ]]
-
+
+
-
\ No newline at end of file
+
diff --git a/addons/mail_gateway/mail_gateway_view.xml b/addons/mail_gateway/mail_gateway_view.xml
index ab118295db5..f3be1eff422 100644
--- a/addons/mail_gateway/mail_gateway_view.xml
+++ b/addons/mail_gateway/mail_gateway_view.xml
@@ -1,6 +1,10 @@
+
+
+
mailgate.message.form
mailgate.message
@@ -85,6 +89,20 @@
+
+
+
+
+ Message
+ mailgate.message
+ form
+ tree,form
+
+
+
+
+
+
mailgate.thread.form
mailgate.thread
@@ -134,6 +152,9 @@
+
+
+
Mailgateway Threads
@@ -192,5 +213,8 @@
src_model="mailgate.message"
domain="[('res_id', '=', res_id),('res_model','=',model)]"/>
+
+
diff --git a/addons/marketing/marketing_view.xml b/addons/marketing/marketing_view.xml
index 9edd7689484..69ee91d52dc 100644
--- a/addons/marketing/marketing_view.xml
+++ b/addons/marketing/marketing_view.xml
@@ -2,7 +2,7 @@
-
+
marketing.installer.view
diff --git a/addons/marketing/marketing_wizard.py b/addons/marketing/marketing_wizard.py
index 4b95bbb86da..a97d0ca16bc 100644
--- a/addons/marketing/marketing_wizard.py
+++ b/addons/marketing/marketing_wizard.py
@@ -32,6 +32,10 @@ class marketing_installer(osv.osv_memory):
'crm_profiling':fields.boolean('Profiling Tools',
help="Helps you to perform segmentation of partners and design segmentation questionnaires")
}
+ _defaults = {
+ 'marketing_campaign': lambda *a: 1,
+ }
+
marketing_installer()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/marketing/security/marketing_security.xml b/addons/marketing/security/marketing_security.xml
index 2eda88c4481..740b9b3a2c5 100644
--- a/addons/marketing/security/marketing_security.xml
+++ b/addons/marketing/security/marketing_security.xml
@@ -1,7 +1,7 @@
-
+
Marketing / User
diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml
index b23826969a8..26690757234 100644
--- a/addons/marketing_campaign/marketing_campaign_view.xml
+++ b/addons/marketing_campaign/marketing_campaign_view.xml
@@ -115,9 +115,9 @@
form
tree,form,diagram
- {'group_by': []}
-
-
+ {'group_by': []}
+
+ Campaigns are used to tag the source of the new business opportunities or leads. They are mainly used for reporting on the performance of each marketing campaign.
diff --git a/addons/marketing_campaign/security/ir.model.access.csv b/addons/marketing_campaign/security/ir.model.access.csv
index ae5cad3d706..082cafd7054 100644
--- a/addons/marketing_campaign/security/ir.model.access.csv
+++ b/addons/marketing_campaign/security/ir.model.access.csv
@@ -1,13 +1,13 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_marketing_campaign_admin","marketing.campaign","model_marketing_campaign","base.res_groups_email_template_admin",1,1,1,1
-"access_marketing_campaign_segment_campaignadmin","marketing.campaign.segment","model_marketing_campaign_segment","base.res_groups_email_template_admin",1,1,1,1
-"access_marketing_campaign_activity_campaignadmin","marketing.campaign.activity","model_marketing_campaign_activity","base.res_groups_email_template_admin",1,1,1,1
-"access_marketing_campaign_workitem_campaignadmin","marketing.campaign.workitem","model_marketing_campaign_workitem","base.res_groups_email_template_admin",1,1,1,1
-"access_marketing_campaign_transition_campaignadmin","marketing.campaign.transition","model_marketing_campaign_transition","base.res_groups_email_template_admin",1,1,1,1
-"access_marketing_campaign_analysis_campaignadmin","campaign.analysis","model_campaign_analysis","base.res_groups_email_template_admin",1,1,1,1
+"access_marketing_campaign_admin","marketing.campaign","model_marketing_campaign","marketing.group_marketing_user",1,1,1,1
+"access_marketing_campaign_segment_campaignadmin","marketing.campaign.segment","model_marketing_campaign_segment","marketing.group_marketing_user",1,1,1,1
+"access_marketing_campaign_activity_campaignadmin","marketing.campaign.activity","model_marketing_campaign_activity","marketing.group_marketing_user",1,1,1,1
+"access_marketing_campaign_workitem_campaignadmin","marketing.campaign.workitem","model_marketing_campaign_workitem","marketing.group_marketing_user",1,1,1,1
+"access_marketing_campaign_transition_campaignadmin","marketing.campaign.transition","model_marketing_campaign_transition","marketing.group_marketing_user",1,1,1,1
+"access_marketing_campaign_analysis_campaignadmin","campaign.analysis","model_campaign_analysis","marketing.group_marketing_user",1,1,1,1
"access_marketing_campaign_workitem_all","marketing.campaign.workitem","model_marketing_campaign_workitem","base.group_user",1,0,0,0
-"access_email_template_user","email.template","model_email_template","base.res_groups_email_template_admin",1,1,1,1
-"access_email_template_account_user","email_template.account.user","email_template.model_email_template_account","base.res_groups_email_template_admin",1,1,1,1
+"access_email_template_user","email.template","model_email_template","marketing.group_marketing_user",1,1,1,1
+"access_email_template_account_user","email_template.account.user","email_template.model_email_template_account","marketing.group_marketing_user",1,1,1,1
"access_marketing_campaign_system","marketing.campaign system","model_marketing_campaign","base.group_system",1,0,0,0
"access_marketing_campaign_segment_system","marketing.campaign.segment system","model_marketing_campaign_segment","base.group_system",1,0,0,0
"access_marketing_campaign_workitem_system","marketing.campaign.workitem system","model_marketing_campaign_workitem","base.group_system",1,0,0,0
diff --git a/addons/marketing_campaign/security/marketing_campaign_security.xml b/addons/marketing_campaign/security/marketing_campaign_security.xml
index bb933fdcdc3..14710cf8f37 100644
--- a/addons/marketing_campaign/security/marketing_campaign_security.xml
+++ b/addons/marketing_campaign/security/marketing_campaign_security.xml
@@ -2,9 +2,5 @@
-
- Marketing / User
-
-
diff --git a/addons/marketing_campaign_crm_demo/i18n/nl.po b/addons/marketing_campaign_crm_demo/i18n/nl.po
index 27fab487367..22534597f07 100644
--- a/addons/marketing_campaign_crm_demo/i18n/nl.po
+++ b/addons/marketing_campaign_crm_demo/i18n/nl.po
@@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2010-08-20 08:14+0000\n"
-"PO-Revision-Date: 2010-09-13 17:02+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2010-10-17 14:29+0000\n"
+"Last-Translator: Douwe Wullink (Dypalio) \n"
"Language-Team: Dutch \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:17+0000\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:56+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: marketing_campaign_crm_demo
#: model:ir.actions.report.xml,name:marketing_campaign_crm_demo.mc_crm_lead_demo_report
msgid "Marketing campaign demo report"
-msgstr ""
+msgstr "Marketing campagne demo overzicht"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_1
@@ -28,16 +28,18 @@ msgid ""
"Hello,Thanks for generous interest you have shown in the "
"openERP.Regards,OpenERP Team,"
msgstr ""
+"Hallo, bedankt voor de royale interesse die u in OpenERP heeft getoond. "
+"Groeten, OpenERP Team,"
#. module: marketing_campaign_crm_demo
#: constraint:document.directory:0
msgid "Error! You can not create recursive Directories."
-msgstr ""
+msgstr "Fout! U kunt geen recursieve mappen maken"
#. module: marketing_campaign_crm_demo
#: model:ir.module.module,description:marketing_campaign_crm_demo.module_meta_information
msgid "Demo data for the module marketing_campaign."
-msgstr ""
+msgstr "Demo gegevens voor de module marketing_campaign."
#. module: marketing_campaign_crm_demo
#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_4
@@ -47,31 +49,36 @@ msgid ""
" I really appreciate your co-operation on this.\n"
" Regards,OpenERP Team,"
msgstr ""
+"Hallo,bedankt voor de getoonde interesse en het aanschaffen van het OpenERP "
+"boek.\n"
+" Als er meer informatie nodig is dan graag terugkeren.\n"
+" Ik waardeer uw medewerking hierbij.\n"
+" Groeten,OpenERP Team,"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_2
msgid "Propose to subscribe to the OpenERP Discovery Day on May 2010"
-msgstr ""
+msgstr "Stel inschrijven voor OpenERP Discovery Day in Mei 2010 voor"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_6
msgid "Propose paid training to Silver partners"
-msgstr ""
+msgstr "Stel betaalde training aan Zilver partners voor"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_1
msgid "Thanks for showing interest in OpenERP"
-msgstr ""
+msgstr "Bedankt voor getoonde interesse in OpenERP"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_4
msgid "Thanks for buying the OpenERP book"
-msgstr ""
+msgstr "Bedankt voor het aanschaffen van het OpenERP boek"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_5
msgid "Propose a free technical training to Gold partners"
-msgstr ""
+msgstr "Stel een gratis technische training aan Gold partners voor"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_7
@@ -82,11 +89,16 @@ msgid ""
" I really appreciate your co-operation on this.\n"
" Regards,OpenERP Team,"
msgstr ""
+"Hallo, we hebben een mooie aanbieding die bij u kan passen.\n"
+" Voor onze zilver partners bieden we goud partnerschap aan.\n"
+" Als er meer informatie nodig is, dan graag terugkeren.\n"
+" Ik waerdeer uw medewerking hierbij.\n"
+" Groeten,OpenERP Team,"
#. module: marketing_campaign_crm_demo
#: rml:crm.lead.demo:0
msgid "Partner :"
-msgstr ""
+msgstr "Relatie :"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_8
@@ -96,21 +108,25 @@ msgid ""
"appreciate your co-operation on this.\n"
" Regards,OpenERP Team,"
msgstr ""
+"Hallo, bedankt voor de getoonde interessen en voor de inschrijving voor de "
+"technische training. Als er meer informatie nodig is dan graag terugkeren.Ik "
+"waardeer uw medewerking hierin.\n"
+" Groeten,OpenERP Team,"
#. module: marketing_campaign_crm_demo
#: rml:crm.lead.demo:0
msgid "Company :"
-msgstr ""
+msgstr "Bedrijf :"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_8
msgid "Thanks for subscribing to technical training"
-msgstr ""
+msgstr "Bedankt voor het inschrijven voor de techniche training"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_3
msgid "Thanks for subscribing to the OpenERP Discovery Day"
-msgstr ""
+msgstr "Bedankt voor het inschrijven op de OpenERP Discovery Day"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_5
@@ -122,6 +138,12 @@ msgid ""
" I really appreciate your co-operation on this.\n"
" Regards,OpenERP Team,"
msgstr ""
+"Hallo, We hebben een erg mooie aanbieding die bij u kan passen.\n"
+" Voor onze goud partners verzorgen we gratis technische training "
+"in juni 2010.\n"
+" Als er meer informatie nodig is, dan graag terugkeren.\n"
+" Ik waardeer uw medewerking hierbij.\n"
+" Groeten,OpenERP Team,"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_3
@@ -132,6 +154,11 @@ msgid ""
" I really appreciate your co-operation on this.\n"
" Regards,OpenERP Team,"
msgstr ""
+"Hallo,bedankt voor de getoonde interesse en het inschrijven op de OpenERP "
+"Discovery Day.\n"
+" Als er meer informatie nodig is, dan graag terugkeren.\n"
+" Ik waardeer uw medewerking hierin.\n"
+" Groeten,OpenERP Team,"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_2
@@ -143,6 +170,12 @@ msgid ""
" We really appreciate your co-operation on this.\n"
" Regards,OpenERP Team,"
msgstr ""
+"Hallo, We hebben een erg mooie aanbieding die bij u kan passen.\n"
+" We stellen voor om in te schrijven op de OpenERP Discovery Day "
+"in Mei 2010.\n"
+" Als er meer informatie nodig is, dan graag terugkeren.\n"
+" Ik waardeer uw medewerking hierbij.\n"
+" Groeten,OpenERP Team,"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_body_text:marketing_campaign_crm_demo.email_template_6
@@ -154,18 +187,24 @@ msgid ""
" I really appreciate your co-operation on this.\n"
" Regards,OpenERP Team,"
msgstr ""
+"Hallo, We hebben een erg mooie aanbieding die bij u kan passen.\n"
+" Voor onze zilver partners verzorgen we betaalde technische "
+"training in juni 2010.\n"
+" Als er meer informatie nodig is, dan graag terugkeren.\n"
+" Ik waardeer uw medewerking hierbij.\n"
+" Groeten,OpenERP Team,"
#. module: marketing_campaign_crm_demo
#: model:ir.actions.server,name:marketing_campaign_crm_demo.action_dummy
msgid "Dummy Action"
-msgstr ""
+msgstr "Dummy Actie"
#. module: marketing_campaign_crm_demo
#: model:ir.module.module,shortdesc:marketing_campaign_crm_demo.module_meta_information
msgid "marketing_campaign_crm_demo"
-msgstr ""
+msgstr "marketing_campaign_crm_demo"
#. module: marketing_campaign_crm_demo
#: model:email.template,def_subject:marketing_campaign_crm_demo.email_template_7
msgid "Propose gold partnership to silver partners"
-msgstr ""
+msgstr "Stel goud partnerschap voor aan zilver partners"
diff --git a/addons/mrp/board_manufacturing_view.xml b/addons/mrp/board_manufacturing_view.xml
index c5474670d9b..a181e5ba41d 100644
--- a/addons/mrp/board_manufacturing_view.xml
+++ b/addons/mrp/board_manufacturing_view.xml
@@ -13,14 +13,13 @@
-
-
+
-
+
-
+
@@ -43,8 +42,5 @@
id="menu_board_manufacturing"
parent="menus_dash_mrp"
sequence="1" groups="mrp.group_mrp_manager,mrp.group_mrp_user"/>
-
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py
index 821703d3f57..f90edf2cd78 100644
--- a/addons/mrp/mrp.py
+++ b/addons/mrp/mrp.py
@@ -647,11 +647,7 @@ class mrp_production(osv.osv):
move_obj.write(cr, uid, [production.move_prod_id.id],
{'location_id': production.location_dest_id.id})
- message = ("Manufacturing Order '%s' for %s %s is Ready to produce.") % (
- name,
- production.product_qty,
- production.product_id.name,
- )
+ message = _("Manufacturing order '%s' is ready to produce.") % ( name,)
self.log(cr, uid, production_id, message)
return True
@@ -762,9 +758,6 @@ class mrp_production(osv.osv):
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.production', production_id, 'button_produce_done', cr)
- for (id, name) in self.pool.get('product.product').name_get(cr, uid, [production.product_id.id]):
- message = str(production_qty) + ' ' + production.product_uom.name +" '" + name + _("' have been manufactured for ") + production.name
- self.log(cr, uid, production_id, message)
return True
def _costs_generate(self, cr, uid, production):
@@ -932,16 +925,10 @@ class mrp_production(osv.osv):
proc_ids.append(proc_id)
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
self.write(cr, uid, [production.id], {'picking_id': picking_id, 'move_lines': [(6,0,moves)], 'state':'confirmed'})
- message = ("%s '%s' %s %s %s %s %s %s.") % (
- _('Manufacturing Order'),
- production.name,
- _('for'),
- production.product_qty,
- production.product_id.name,
- _('scheduled for date '),
- datetime.strptime(production.date_planned,'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d'),
- _('is waiting')
- )
+ message = _("Manufacturing order '%s' is scheduled for the %s.") % (
+ production.name,
+ datetime.strptime(production.date_planned,'%Y-%m-%d %H:%M:%S').strftime('%m/%d/%Y'),
+ )
self.log(cr, uid, production.id, message)
return picking_id
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index 8edab751d9f..8135b9bfde6 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -3,7 +3,7 @@
+ groups="group_mrp_user,group_mrp_manager" sequence="8"/>
@@ -11,7 +11,7 @@
@@ -445,7 +446,7 @@
action="mrp_bom_form_action"
id="menu_mrp_bom_form_action"
parent="menu_mrp_bom"
- groups="mrp.group_mrp_user,mrp.group_mrp_manager,base.group_system"
+ groups="mrp.group_mrp_user,mrp.group_mrp_manager"
sequence="10"/>
{'search_default_current':1}
- Manufacturing Orders describe the operations that need to be carried out and the raw materials usage for each stage of production. You use specifications (bills of materials) to work out the raw material requirements and the manufacturing orders needed for the finished products. Once the bills of materials have been defined, OpenERP becomes capable of automatically deciding on the manufacturing route depending on the needs of the company.
+ Manufacturing Orders are usually proposed automatically by OpenERP based on the bill of materials and the procurement rules, but you can also create manufacturing orders manually. OpenERP will handle the consumation of the raw materials (stock decrease) and the production of the finished products (stock increase) when the order is processed.
-
+
Manufacturing Orders
@@ -894,10 +895,10 @@
-
-
-
-
+
+
+
+
diff --git a/addons/mrp/procurement.py b/addons/mrp/procurement.py
index acc45e48bcf..67d0cd1c739 100644
--- a/addons/mrp/procurement.py
+++ b/addons/mrp/procurement.py
@@ -41,10 +41,10 @@ class procurement_order(osv.osv):
"""
properties = [x.id for x in procurement.property_ids]
bom_id = self.pool.get('mrp.bom')._bom_find(cr, uid, procurement.product_id.id, procurement.product_uom.id, properties)
- if not bom_id:
+ if not bom_id:
cr.execute('update procurement_order set message=%s where id=%s', (_('No BoM defined for this product !'), procurement.id))
for (id, name) in self.name_get(cr, uid, procurement.id):
- message = _('Procurement ') + " '" + name + "' "+ _("has an exception.") + _('No BoM defined for this product !')
+ message = _("Procurement '%s' has an exception: 'No BoM defined for this product !'") % name
self.log(cr, uid, id, message)
return False
return True
diff --git a/addons/mrp/report/mrp_production_order_view.xml b/addons/mrp/report/mrp_production_order_view.xml
index 5274bfeed1a..dd7f592dfb3 100644
--- a/addons/mrp/report/mrp_production_order_view.xml
+++ b/addons/mrp/report/mrp_production_order_view.xml
@@ -111,6 +111,7 @@
{'search_default_Product': 1,'search_default_month':1,'group_by_no_leaf':1,'group_by':[]}
+ This reporting allows you to analyse your manufacturing activities and performance.
diff --git a/addons/mrp/report/mrp_report_view.xml b/addons/mrp/report/mrp_report_view.xml
index 478221d55b9..71389233391 100644
--- a/addons/mrp/report/mrp_report_view.xml
+++ b/addons/mrp/report/mrp_report_view.xml
@@ -47,7 +47,7 @@
form
graph,tree
- Work Center Load is a projection of load in a work center given a period. The load is express in hour and cycle (for machines).
+ Work Center Loads gives you a projection of work center loads over a specified period. It is expressed in number of hours and machine related cycles.
@@ -96,7 +96,7 @@
report.mrp.inout
form
graph,tree
- Weekly Stock Value Variation enables you to track stock value evolution as a result of manufacturing activities (consumption of raw materials, production of finished goods, added accounting value of stock by the creation of value following the transformation of products).
+ Weekly Stock Value Variation enables you to track the stock value evolution linked to manufacturing activities, receptions of products and delivery orders.
diff --git a/addons/mrp/report/order.rml b/addons/mrp/report/order.rml
index 03bd0377cc5..e07966ff5c9 100644
--- a/addons/mrp/report/order.rml
+++ b/addons/mrp/report/order.rml
@@ -1,5 +1,5 @@
-
+
@@ -17,9 +17,12 @@
-
+
+
+
+
@@ -28,9 +31,12 @@
-
+
+
+
+
@@ -175,7 +181,7 @@
-
+
Source Document
@@ -188,16 +194,16 @@
-
+
[[ o.origin ]]
- [[ o.product_id.code ]] [[ o.product_id.name ]]
+ [[ (o.product_id and o.product_id.code) or '' ]] [[ (o.product_id and o.product_id.name) or '' ]]
- [[formatLang(o.product_qty) ]] [[ o.product_uom.name ]]
+ [[formatLang(o.product_qty) ]] [[ (o.product_id and o.product_uom and o.product_uom.name) or '']]
@@ -245,7 +251,7 @@
-
+
Sequence
@@ -266,7 +272,7 @@
[[ repeatIn(o.workcenter_lines,'line2') ]]
-
+
[[ line2.sequence ]]
@@ -275,7 +281,7 @@
[[ line2.name ]]
- [[ line2.workcenter_id.name ]]
+ [[ (line2.workcenter_id and line2.workcenter_id.name) or '' ]]
[[ formatLang(line2.cycle) ]]
@@ -315,45 +321,45 @@
Products to Consume [[ o.move_lines ==[] and removeParentNode('section')]]
- [[ repeatIn(o.move_lines,'line') ]]
+ [[ repeatIn(o.move_lines,'line') ]]
- [[ line.product_id.code ]] [[ line.product_id.name ]]
+ [[ (line.product_id and line.product_id.code) or '' ]] [[ (line.product_id and line.product_id.name) or '' ]]
- [[ formatLang( line.product_qty) ]] [[ line.product_uom.name]]
+ [[ formatLang( line.product_qty) ]] [[ (line.product_uom and line.product_uom.name) or '']]
- [[ line.location_id.name ]]
+ [[ (line.location_id and line.location_id.name) or '' ]]
- [[ line.location_dest_id.name ]]
+ [[ (line.location_dest_id and line.location_dest_id.name) or '' ]]
-
-
-
+
+
+
Consumed Products [[ o.move_lines2 ==[] and removeParentNode('section')]]
- [[ repeatIn(o.move_lines2,'line2') ]]
+ [[ repeatIn(o.move_lines2,'line2') ]]
- [[ line2.product_id.code ]] [[ line2.product_id.name ]]
+ [[ (line2.product_id and line2.product_id.code) or '' ]] [[ (line2.product_id and line2.product_id.name) or '' ]]
- [[ formatLang( line2.product_qty) ]] [[ line2.product_uom.name]]
+ [[ formatLang( line2.product_qty) ]] [[ (line2.product_uom and line2.product_uom.name) or '']]
- [[ line2.location_id.name ]]
+ [[ (line2.location_id and line2.location_id.name) or '' ]]
- [[ line2.location_dest_id.name ]]
+ [[ (line2.location_dest_id and line2.location_dest_id.name) or '' ]]
diff --git a/addons/mrp/report/price.py b/addons/mrp/report/price.py
index 52bcf3bcd4a..d41ee26bba9 100644
--- a/addons/mrp/report/price.py
+++ b/addons/mrp/report/price.py
@@ -120,7 +120,7 @@ class report_custom(report_rml):
%s
- """ % (_('Work Center name'), _('Cycles Cost')+'('+company_currency.code+')', _('Hourly Cost')+'('+company_currency.code+')',_('Work Cost')+'('+company_currency.code+')')
+ """ % (_('Work Center name'), _('Cycles Cost'), _('Hourly Cost'),_('Work Cost'))
prod_header = """
%s
@@ -129,7 +129,7 @@ class report_custom(report_rml):
%s
%s
- """ % (_('Component'), _('Component suppliers'), _('Quantity'),_('Cost Price per Uom')+'('+company_currency.code+')', _('Supplier Price per Uom')+'('+company_currency.code+')')
+ """ % (_('Component'), _('Component suppliers'), _('Quantity'),_('Cost Price per Uom'), _('Supplier Price per Uom'))
purchase_price_digits = rml_obj.get_digits(dp='Purchase Price')
@@ -149,7 +149,7 @@ class report_custom(report_rml):
-
"""
xml += """
- """ + _('Total Cost ') + _('of ') + str(number) +' '+ product.uom_id.name +'('+company_currency.code+')'+ """:
+ """ + _('Total Cost ') + _('of ') + str(number) +' '+ product.uom_id.name + """:
"""+ rml_obj.formatLang(total_strd, digits=purchase_price_digits) +' '+ company_currency.symbol + """
@@ -176,7 +176,7 @@ class report_custom(report_rml):
xml += "" + xml_tmp + ' '
xml += """
- """ + _('Cost ') + _('of ') + str(number) +' '+ product.uom_id.name +'(' + company_currency.code +')'+ """:
+ """ + _('Cost ') + _('of ') + str(number) +' '+ product.uom_id.name + """:
"""+ rml_obj.formatLang(total_strd, digits=purchase_price_digits) +' '+ company_currency.symbol + """
@@ -193,14 +193,14 @@ class report_custom(report_rml):
xml += workcenter_header
xml += "" + xml_tmp + ' '
xml += """
- """ + _('Work Cost ') + _('of ') + str(number) +' '+ product.uom_id.name +'('+company_currency.code+')'+""":
+ """ + _('Work Cost ') + _('of ') + str(number) +' '+ product.uom_id.name +""":
"""+ rml_obj.formatLang(total2, digits=purchase_price_digits) +' '+ company_currency.symbol +"""
'"""
xml += """
- """ + _('Total Cost ') + _('of ') + str(number) +' '+ product.uom_id.name +'('+company_currency.code+')'+ """:
+ """ + _('Total Cost ') + _('of ') + str(number) +' '+ product.uom_id.name + """:
"""+ rml_obj.formatLang(total_strd+total2, digits=purchase_price_digits) +' '+ company_currency.symbol + """
diff --git a/addons/mrp/security/ir.model.access.csv b/addons/mrp/security/ir.model.access.csv
index e63ced14997..586f82f1b53 100644
--- a/addons/mrp/security/ir.model.access.csv
+++ b/addons/mrp/security/ir.model.access.csv
@@ -62,33 +62,6 @@
"access_stock_move_mrp_manager","stock.move mrp_manager","stock.model_stock_move","mrp.group_mrp_manager",1,0,0,1
"access_mrp_production_product_line_manager","mrp.production.product.line manager","model_mrp_production_product_line","mrp.group_mrp_manager",1,0,0,0
"access_account_sequence_fiscalyear_system","account.sequence.fiscalyear.system","account.model_account_sequence_fiscalyear","mrp.group_mrp_manager",1,0,0,0
-"access_product_template_system","product.template mgr.system","product.model_product_template","base.group_system",1,0,0,0
-"access_product_uom_system","product.uom user.system","product.model_product_uom","base.group_system",1,0,0,0
-"access_product_supplierinfo_system","product.supplierinfo system","product.model_product_supplierinfo","base.group_system",1,0,0,0
-"access_res_partner_address_system","res.partner.address.system","base.model_res_partner_address","base.group_system",1,0,0,0
-"access_stock_tracking_system","stock.tracking.system","stock.model_stock_tracking","base.group_system",1,0,0,0
-"access_res_partner_system","res.partner.system","base.model_res_partner","base.group_system",1,0,0,0
-"access_product_puom_categ_system","product.uom.categ.system","product.model_product_uom_categ","base.group_system",1,0,0,0
-"access_resource_resource_system","resource.resource.system","resource.model_resource_resource","base.group_system",1,0,0,0
-"access_board_board_system","mrp.board.board.system","board.model_board_board","base.group_system",1,0,0,0
-"access_mrp_production_system","mrp.production.system","model_mrp_production","base.group_system",1,0,0,0
-"access_procurement_system","procurement.order.system","model_procurement_order","base.group_system",1,0,0,0
-"access_workcenter_system","mrp.production.workcenter.line.system","model_mrp_production_workcenter_line","base.group_system",1,0,0,0
-"access_stock_move_mrp_system","stock.move mrp_manager.system","stock.model_stock_move","base.group_system",1,0,0,0
-"access_mrp_production_product_line_system","mrp.production.product.line manager.system","model_mrp_production_product_line","base.group_system",1,0,0,0
-"access_mrp_production_order_system","mrp.production.order.system","model_mrp_production_order","base.group_system",1,0,0,0
-"access_report_workcenter_load_system","report.workcenter.load.system","model_report_workcenter_load","base.group_system",1,0,0,0
-"access_report_mrp_inout_system","report.mrp.inout.system","model_report_mrp_inout","base.group_system",1,0,0,0
-"access_product_product_system","product.product system","model_product_product","base.group_system",1,0,0,0
-"access_mrp_routing_system","mrp.routing.system","model_mrp_routing","base.group_system",1,0,0,0
-"access_mrp_routing_workcenter_system","mrp.routing.workcenter.system","model_mrp_routing_workcenter","base.group_system",1,0,0,0
-"access_mrp_bom_system","mrp.bom.system","model_mrp_bom","base.group_system",1,0,0,0
-"access_mrp_bom_revision_system","mrp.bom.revision.system","model_mrp_bom_revision","base.group_system",1,0,0,0
-"access_mrp_property_system","mrp.property.system","procurement.model_mrp_property","base.group_system",1,1,1,1
-"access_mrp_property_group_system","mrp.property.group.system","procurement.model_mrp_property_group","base.group_system",1,1,1,1
-"access_mrp_routing_system","mrp.routing.system","model_mrp_routing","base.group_system",1,1,1,1
-"access_mrp_workcenter_system","mrp.workcenter.system","model_mrp_workcenter","base.group_system",1,0,0,0
-"access_mrp_production_system","mrp.production system","model_mrp_production","base.group_system",1,0,0,0
"access_stock_production_lot_user","stock.production.lot","stock.model_stock_production_lot","mrp.group_mrp_user",1,1,1,1
"access_stock_warehouse_orderpoint_manager","stock.warehouse.orderpoint","procurement.model_stock_warehouse_orderpoint","mrp.group_mrp_manager",1,0,0,0
"access_stock_picking_mrp_manager","stock.picking mrp_manager","stock.model_stock_picking","mrp.group_mrp_manager",1,0,0,0
diff --git a/addons/mrp_jit/i18n/ru.po b/addons/mrp_jit/i18n/ru.po
index eb080bbdf16..6a197c5f042 100644
--- a/addons/mrp_jit/i18n/ru.po
+++ b/addons/mrp_jit/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 15:05+0000\n"
-"Last-Translator: Ivan Y \n"
+"PO-Revision-Date: 2010-10-15 09:29+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: mrp_jit
diff --git a/addons/mrp_operations/i18n/hr.po b/addons/mrp_operations/i18n/hr.po
index ac409da6df1..362ffedb2c2 100644
--- a/addons/mrp_operations/i18n/hr.po
+++ b/addons/mrp_operations/i18n/hr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 20:48+0000\n"
-"Last-Translator: robert \n"
+"PO-Revision-Date: 2010-10-15 09:07+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: mrp_operations
diff --git a/addons/mrp_operations/i18n/sr.po b/addons/mrp_operations/i18n/sr.po
new file mode 100644
index 00000000000..bf173288c9d
--- /dev/null
+++ b/addons/mrp_operations/i18n/sr.po
@@ -0,0 +1,443 @@
+# Serbian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-08-28 16:01+0000\n"
+"PO-Revision-Date: 2010-10-16 09:44+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Serbian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-17 04:53+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: mrp_operations
+#: model:process.node,name:mrp_operations.process_node_startoperation0
+msgid "Start Operation"
+msgstr "Započni postupak"
+
+#. module: mrp_operations
+#: selection:mrp.production.workcenter.line,state:0
+msgid "In Progress"
+msgstr "U toku"
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+#: selection:mrp.production.workcenter.line,state:0
+#: selection:mrp_operations.operation.code,start_stop:0
+msgid "Pause"
+msgstr "Pauza"
+
+#. module: mrp_operations
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !"
+
+#. module: mrp_operations
+#: model:process.node,note:mrp_operations.process_node_startoperation0
+msgid "Operation is started"
+msgstr "Postupak je pokrenut"
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+msgid "Information"
+msgstr "Informacija"
+
+#. module: mrp_operations
+#: model:process.transition,name:mrp_operations.process_transition_startcanceloperation0
+msgid "Start Cancel Operation"
+msgstr "Pokreni ponistenje Operacije"
+
+#. module: mrp_operations
+#: selection:mrp.production.workcenter.line,production_state:0
+msgid "In Production"
+msgstr "U produkciji"
+
+#. module: mrp_operations
+#: model:ir.actions.act_window,name:mrp_operations.mrp_production_code_action
+msgid "Operations Code"
+msgstr "Sifre Operacija"
+
+#. module: mrp_operations
+#: model:process.process,name:mrp_operations.process_process_mrpoperationprocess0
+msgid "Mrp Operation Process"
+msgstr "Mrp Procesni Postupak"
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+#: field:mrp.production.workcenter.line,state:0
+#: field:mrp_operations.operation.code,start_stop:0
+msgid "Status"
+msgstr "Status"
+
+#. module: mrp_operations
+#: model:process.transition,name:mrp_operations.process_transition_startdoneoperation0
+msgid "Start Done Operation"
+msgstr "Pokreni Zavrsetak Postupka"
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+#: selection:mrp_operations.operation.code,start_stop:0
+msgid "Start"
+msgstr "Pokreni"
+
+#. module: mrp_operations
+#: field:mrp_operations.operation,production_id:0
+msgid "Production"
+msgstr "Proizvodnja"
+
+#. module: mrp_operations
+#: view:mrp_operations.operation:0
+msgid "Calendar View"
+msgstr "Kalendarski pogled"
+
+#. module: mrp_operations
+#: model:process.node,name:mrp_operations.process_node_workorder0
+msgid "Work Center"
+msgstr "Radionica"
+
+#. module: mrp_operations
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Pogrešno ime modela u definiciji akcije."
+
+#. module: mrp_operations
+#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_operation_action
+msgid "Work Order Events Using Bar Codes"
+msgstr "Radni Nalozi Koriscenjem Bar-Koda"
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+msgid "Set Draft"
+msgstr "Postavi u Pripremu"
+
+#. module: mrp_operations
+#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_action_form
+#: view:mrp.production.workcenter.line:0
+msgid "Work Orders"
+msgstr "Radni Nalozi"
+
+#. module: mrp_operations
+#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_code_action
+msgid "Start - Stop Codes"
+msgstr "Pokreni - Zaustavi Sifre"
+
+#. module: mrp_operations
+#: field:mrp.production.workcenter.line,uom:0
+msgid "UOM"
+msgstr "JM"
+
+#. module: mrp_operations
+#: view:mrp_operations.operation.code:0
+msgid "Production Operation Code"
+msgstr "Operaciona Sifra Proizvodnje"
+
+#. module: mrp_operations
+#: field:mrp.production.workcenter.line,date_planned:0
+msgid "Scheduled Date"
+msgstr "Planirani datum"
+
+#. module: mrp_operations
+#: model:process.transition,note:mrp_operations.process_transition_productionstart0
+msgid "From production order, create the workorder"
+msgstr "Iz Naloga proizvodnje kreiraj Radni Nalog"
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+msgid "Hours by Workcenter"
+msgstr "Radionicki Sati"
+
+#. module: mrp_operations
+#: help:mrp.production,allow_reorder:0
+msgid ""
+"Check this to be able to move independently all production orders, without "
+"moving dependent ones."
+msgstr ""
+"Cekiraj ovde da bi bio u mogucnosti da nezavisno premestas sve proizvodne "
+"naloge, bez pomeranja onih zavisnih."
+
+#. module: mrp_operations
+#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_action
+#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_wc_action
+msgid "All Work Orders"
+msgstr "Svi Radni Nalozi"
+
+#. module: mrp_operations
+#: rml:mrp.code.barcode:0
+msgid "("
+msgstr "("
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+msgid "Product to Produce"
+msgstr "Proizvod za Proizvodnju"
+
+#. module: mrp_operations
+#: model:ir.actions.report.xml,name:mrp_operations.report_wc_barcode
+msgid "Workcenters Barcode"
+msgstr "Radionicki Bar-Kod"
+
+#. module: mrp_operations
+#: model:process.node,note:mrp_operations.process_node_doneoperation0
+#: model:process.transition,note:mrp_operations.process_transition_startdoneoperation0
+msgid "Operation is done"
+msgstr "Postupak je zavrsen"
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+msgid "Planned Date"
+msgstr "Planirani datum"
+
+#. module: mrp_operations
+#: selection:mrp.production.workcenter.line,production_state:0
+msgid "Ready to Produce"
+msgstr "Spreman za Proizvodnju"
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+#: selection:mrp_operations.operation.code,start_stop:0
+msgid "Cancel"
+msgstr "Otkaži"
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+#: selection:mrp.production.workcenter.line,state:0
+msgid "Finished"
+msgstr "Završeno"
+
+#. module: mrp_operations
+#: field:mrp.production,allow_reorder:0
+msgid "Free Serialisation"
+msgstr "Slobodna Serializacija"
+
+#. module: mrp_operations
+#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_action_planning
+#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_wc_draft_action_planning
+msgid "Work Orders Planning"
+msgstr "Planiranje Radnih Naloga"
+
+#. module: mrp_operations
+#: model:process.node,name:mrp_operations.process_node_productionorder0
+msgid "Production Order"
+msgstr "Proizvodni Nalog"
+
+#. module: mrp_operations
+#: model:process.node,note:mrp_operations.process_node_productionorder0
+msgid "Production order for any products"
+msgstr "Proizvodni nalog za bilo koji proizvod"
+
+#. module: mrp_operations
+#: field:stock.move,move_dest_id_lines:0
+msgid "Children Moves"
+msgstr "Pomeranje Podgurpa"
+
+#. module: mrp_operations
+#: field:mrp_operations.operation.code,name:0
+msgid "Operation Name"
+msgstr "Ime Postupka"
+
+#. module: mrp_operations
+#: model:ir.model,name:mrp_operations.model_mrp_operations_operation
+msgid "mrp_operations.operation"
+msgstr "mrp_operacije.operacija"
+
+#. module: mrp_operations
+#: field:mrp.production.workcenter.line,date_finished:0
+#: field:mrp.production.workcenter.line,date_planned_end:0
+#: field:mrp_operations.operation,date_finished:0
+msgid "End Date"
+msgstr "Završni Datum"
+
+#. module: mrp_operations
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Nevažeći XML za pregled arhitekture"
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+msgid "Real"
+msgstr "Реални"
+
+#. module: mrp_operations
+#: model:ir.module.module,shortdesc:mrp_operations.module_meta_information
+msgid "Workcenter Production start end workflow"
+msgstr "Radionicka Proizvodnja pocetak i kraj posla"
+
+#. module: mrp_operations
+#: help:mrp.production.workcenter.line,delay:0
+msgid "This is delay between operation start and stop in this workcenter"
+msgstr "Ovo je razlika izmedju pocetka i kraja posla ove Radionice"
+
+#. module: mrp_operations
+#: field:mrp.production.workcenter.line,product:0
+msgid "Product"
+msgstr "Proizvod"
+
+#. module: mrp_operations
+#: model:process.transition,note:mrp_operations.process_transition_workstartoperation0
+msgid "From work order, define the cycles and hour for creating product"
+msgstr ""
+"Iz Radnog Naloga, definisi cikluse i sate potrebne za zavrsetak proizvoda"
+
+#. module: mrp_operations
+#: field:mrp.production.workcenter.line,delay:0
+msgid "Working Hours"
+msgstr "Radni Sati"
+
+#. module: mrp_operations
+#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_draft_action
+#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_wc_draft_action
+msgid "Future Work Orders"
+msgstr "Buduci Radni Nalozi"
+
+#. module: mrp_operations
+#: field:mrp.production.workcenter.line,production_state:0
+msgid "Prod.State"
+msgstr "Stanje Proizvoda"
+
+#. module: mrp_operations
+#: field:mrp_operations.operation,order_date:0
+msgid "Order Date"
+msgstr "Datum Naloga"
+
+#. module: mrp_operations
+#: model:process.node,note:mrp_operations.process_node_workorder0
+msgid "Production Work Center"
+msgstr "Proizvodna Radionica"
+
+#. module: mrp_operations
+#: model:process.transition,name:mrp_operations.process_transition_productionstart0
+msgid "Production start Operation"
+msgstr "Pocetak Operacije Proizvodnje"
+
+#. module: mrp_operations
+#: selection:mrp.production.workcenter.line,production_state:0
+msgid "Packing Exception"
+msgstr "Izuzetak Pakovanja"
+
+#. module: mrp_operations
+#: field:mrp_operations.operation,workcenter_id:0
+msgid "Workcenter"
+msgstr "Radionica"
+
+#. module: mrp_operations
+#: field:mrp.production.workcenter.line,date_start:0
+#: field:mrp.production.workcenter.line,date_start_date:0
+#: field:mrp_operations.operation,date_start:0
+msgid "Start Date"
+msgstr "Početni datum"
+
+#. module: mrp_operations
+#: model:ir.model,name:mrp_operations.model_mrp_operations_operation_code
+msgid "mrp_operations.operation.code"
+msgstr "mrp_operacije.postupak.sifra"
+
+#. module: mrp_operations
+#: model:ir.actions.act_window,name:mrp_operations.mrp_production_operation_action
+#: view:mrp.production.workcenter.line:0
+msgid "Operations"
+msgstr "Radnje"
+
+#. module: mrp_operations
+#: field:mrp_operations.operation,code_id:0
+#: field:mrp_operations.operation.code,code:0
+msgid "Code"
+msgstr "Šifra"
+
+#. module: mrp_operations
+#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_confirm_action
+msgid "Confirmed Work Orders"
+msgstr "Potvrdi Radne naloge"
+
+#. module: mrp_operations
+#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_wc_confirm_action
+msgid "Work Orders to Do"
+msgstr "Radni Nalozi na cekanju"
+
+#. module: mrp_operations
+#: model:process.node,name:mrp_operations.process_node_canceloperation0
+msgid "Cancel Operation"
+msgstr "Otkazi Operaciju"
+
+#. module: mrp_operations
+#: model:process.transition,name:mrp_operations.process_transition_workstartoperation0
+msgid "Work start Operation"
+msgstr "Pocetak Rada Operacije"
+
+#. module: mrp_operations
+#: model:ir.actions.report.xml,name:mrp_operations.report_code_barcode
+msgid "Start/Stop Barcode"
+msgstr "pokreni/Zaustavi Bar-Kod"
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+#: selection:mrp_operations.operation.code,start_stop:0
+msgid "Resume"
+msgstr "Nastavi"
+
+#. module: mrp_operations
+#: model:process.node,name:mrp_operations.process_node_doneoperation0
+msgid "Done Operation"
+msgstr "Zavrsena Operacija"
+
+#. module: mrp_operations
+#: field:mrp.production.workcenter.line,qty:0
+msgid "Qty"
+msgstr "Kol."
+
+#. module: mrp_operations
+#: rml:mrp.code.barcode:0
+msgid ")"
+msgstr ")"
+
+#. module: mrp_operations
+#: view:mrp_operations.operation:0
+msgid "Production Operation"
+msgstr "Operacije Proizvoda"
+
+#. module: mrp_operations
+#: selection:mrp.production.workcenter.line,production_state:0
+#: selection:mrp_operations.operation.code,start_stop:0
+msgid "Done"
+msgstr "Gotovo"
+
+#. module: mrp_operations
+#: selection:mrp.production.workcenter.line,production_state:0
+msgid "Waiting Goods"
+msgstr "Cekamo Dobra"
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+msgid "Duration"
+msgstr "Trajanje"
+
+#. module: mrp_operations
+#: selection:mrp.production.workcenter.line,production_state:0
+#: selection:mrp.production.workcenter.line,state:0
+msgid "Draft"
+msgstr "Priprema"
+
+#. module: mrp_operations
+#: model:process.node,note:mrp_operations.process_node_canceloperation0
+#: model:process.transition,note:mrp_operations.process_transition_startcanceloperation0
+msgid "Operation is cancelled"
+msgstr "Operacija je otkazana"
+
+#. module: mrp_operations
+#: selection:mrp.production.workcenter.line,production_state:0
+#: selection:mrp.production.workcenter.line,state:0
+msgid "Canceled"
+msgstr "Отказано"
+
+#. module: mrp_operations
+#: view:mrp.production.workcenter.line:0
+msgid "Start working"
+msgstr "Pocetak Posla"
diff --git a/addons/mrp_operations/mrp_operations_view.xml b/addons/mrp_operations/mrp_operations_view.xml
index 6d78ed109a2..23a351ed3da 100644
--- a/addons/mrp_operations/mrp_operations_view.xml
+++ b/addons/mrp_operations/mrp_operations_view.xml
@@ -200,7 +200,7 @@
form
tree,form,gantt,calendar,graph
- Work Orders are manufacturing operations required to produce or assemble products. The different work orders will have different impacts on the costs of manufacture and planning depending on the available workload.
+ Work Orders is the list of operations to be performed for each manufacturing order. Once you start the first work order of a manufacturing order, the manufacturing order is automatically marked as started. Once you finish the latest operation of a manufacturing order, the MO is automatically done and the related products are produced.
diff --git a/addons/mrp_repair/i18n/sr.po b/addons/mrp_repair/i18n/sr.po
new file mode 100644
index 00000000000..743247668bc
--- /dev/null
+++ b/addons/mrp_repair/i18n/sr.po
@@ -0,0 +1,685 @@
+# Serbian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-08-28 16:01+0000\n"
+"PO-Revision-Date: 2010-10-16 08:53+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Serbian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-17 04:53+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Fees Line"
+msgstr "Dodatne Linije"
+
+#. module: mrp_repair
+#: field:mrp.repair.fee,repair_id:0
+#: field:mrp.repair.line,repair_id:0
+msgid "Repair Order Ref"
+msgstr "Ref.Nalog za Popravku"
+
+#. module: mrp_repair
+#: field:mrp.repair.line,move_id:0
+msgid "Inventory Move"
+msgstr "Premesti Inventar"
+
+#. module: mrp_repair
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Pogrešno ime modela u definiciji akcije."
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Untaxed amount"
+msgstr "Iznos bez Poreza"
+
+#. module: mrp_repair
+#: field:mrp.repair,state:0
+msgid "Repair State"
+msgstr "Stanje Popravke"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "Printing Date"
+msgstr "Datum štampe"
+
+#. module: mrp_repair
+#: field:mrp.repair.fee,product_uom_qty:0
+#: rml:repair.order:0
+msgid "Quantity"
+msgstr "Količina"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Set to Draft"
+msgstr "Postavi u pripremu"
+
+#. module: mrp_repair
+#: selection:mrp.repair,state:0
+msgid "Invoice Exception"
+msgstr "Izuzetak u izdavanju Računa"
+
+#. module: mrp_repair
+#: field:mrp.repair,address_id:0
+msgid "Delivery Address"
+msgstr "Adresa Dostave"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Make Invoice"
+msgstr "Kreiraj račun"
+
+#. module: mrp_repair
+#: field:mrp.repair.fee,price_subtotal:0
+#: field:mrp.repair.line,price_subtotal:0
+msgid "Subtotal"
+msgstr "Subtotal"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "Invoice address :"
+msgstr "Adresa računa:"
+
+#. module: mrp_repair
+#: field:mrp.repair,guarantee_limit:0
+msgid "Guarantee limit"
+msgstr "Garancija"
+
+#. module: mrp_repair
+#: field:mrp.repair,amount_tax:0
+#: field:mrp.repair.fee,tax_id:0
+#: field:mrp.repair.line,tax_id:0
+msgid "Taxes"
+msgstr "Porezi"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "Net Total :"
+msgstr "Ukupno neto"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "VAT"
+msgstr "PDV"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Operations"
+msgstr "Radnje"
+
+#. module: mrp_repair
+#: field:mrp.repair,move_id:0
+msgid "Move"
+msgstr "Pomeri"
+
+#. module: mrp_repair
+#: model:ir.actions.act_window,name:mrp_repair.action_repair_order_tree
+msgid "Repair Orders"
+msgstr "Nalozi Popravke"
+
+#. module: mrp_repair
+#: model:ir.actions.report.xml,name:mrp_repair.report_mrp_repair
+msgid "Quotation / Order"
+msgstr "Ponude / Nalozi"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Extra Info"
+msgstr "Dodatne Informacije"
+
+#. module: mrp_repair
+#: field:mrp.repair,partner_id:0
+msgid "Partner"
+msgstr "Partner"
+
+#. module: mrp_repair
+#: model:ir.actions.act_window,name:mrp_repair.action_repair_quotation_tree
+#: model:ir.ui.menu,name:mrp_repair.menu_repair_quotation
+msgid "Repairs in quotation"
+msgstr "Popravke u Najavi"
+
+#. module: mrp_repair
+#: selection:mrp.repair,state:0
+#: selection:mrp.repair.line,state:0
+msgid "Confirmed"
+msgstr "Potvrđeno"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Recreate Invoice"
+msgstr "Osvežavanje računa"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Repairs order"
+msgstr "Nalozi Popravke"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "Repair Order N° :"
+msgstr "Nalog Br :"
+
+#. module: mrp_repair
+#: field:mrp.repair,prodlot_id:0
+#: rml:repair.order:0
+msgid "Lot Number"
+msgstr "Serijski Broj"
+
+#. module: mrp_repair
+#: selection:mrp.repair,state:0
+msgid "Under Repair"
+msgstr "Popravka u Toku"
+
+#. module: mrp_repair
+#: field:mrp.repair,fees_lines:0
+msgid "Fees Lines"
+msgstr "Dodatne Linije"
+
+#. module: mrp_repair
+#: model:ir.model,name:mrp_repair.model_mrp_repair_fee
+msgid "Repair Fees line"
+msgstr "Dodatne Linije Popravke"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "Fees Line(s)"
+msgstr "Dodana linija(e)"
+
+#. module: mrp_repair
+#: selection:mrp.repair,state:0
+msgid "To be Invoiced"
+msgstr "Da bude Fakturisano"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "Shipping address :"
+msgstr "Adresa isporuke:"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Start Repair"
+msgstr "Start Popravke"
+
+#. module: mrp_repair
+#: field:mrp.repair.line,product_uom_qty:0
+msgid "Quantity (UoM)"
+msgstr "Količina (UoM)"
+
+#. module: mrp_repair
+#: field:mrp.repair.fee,to_invoice:0
+#: field:mrp.repair.line,to_invoice:0
+msgid "To Invoice"
+msgstr "Fakturisati"
+
+#. module: mrp_repair
+#: model:ir.ui.menu,name:mrp_repair.menu_repair_order
+msgid "Repairs"
+msgstr "Popravke"
+
+#. module: mrp_repair
+#: field:mrp.repair,picking_id:0
+msgid "Packing"
+msgstr "Pakovanje"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "Total :"
+msgstr "Ukupno:"
+
+#. module: mrp_repair
+#: field:mrp.repair,pricelist_id:0
+msgid "Pricelist"
+msgstr "Cenovnik"
+
+#. module: mrp_repair
+#: help:mrp.repair,state:0
+msgid "Gives the state of the Repair Order"
+msgstr "Dato Stanje Naloga Popravke"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+#: field:mrp.repair,quotation_notes:0
+msgid "Quotation Notes"
+msgstr "Kotacija napomene"
+
+#. module: mrp_repair
+#: model:ir.actions.act_window,name:mrp_repair.action_repair_progress_tree
+#: model:ir.ui.menu,name:mrp_repair.menu_repair_progress
+msgid "Repairs in progress"
+msgstr "Popravka u Toku"
+
+#. module: mrp_repair
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Nevažeći XML za pregled arhitekture"
+
+#. module: mrp_repair
+#: help:mrp.repair,guarantee_limit:0
+msgid ""
+"The garantee limit is computed as: last move date + warranty defined on "
+"selected product. If the current date is below the garantee limit, each "
+"operation and fee you will add will be set as 'not to invoiced' by default. "
+"Note that you can change manually afterwards."
+msgstr ""
+"Garancija je izracunata kao: Datum odlaska + garancija definisana za dati "
+"proizvod. Ako je dati datum manji od garanciskog limita, svaka radnja i "
+"dopune bice poostavljene kao \"za ne fakturisati' kao osnovna postavka. "
+"Trebate znati da ovo mozete kasnije rucno promeniri."
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Repair Line"
+msgstr "Linija Popravke"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "N° :"
+msgstr "Br.:"
+
+#. module: mrp_repair
+#: field:mrp.repair,invoice_method:0
+msgid "Invoice Method"
+msgstr "Metod Fakturisanja"
+
+#. module: mrp_repair
+#: field:mrp.repair,repaired:0
+msgid "Repaired"
+msgstr "Popravljeno"
+
+#. module: mrp_repair
+#: wizard_field:mrp.repair.make_invoice,init,group:0
+msgid "Group by partner invoice address"
+msgstr "Grupisano po adresama faktura partnera"
+
+#. module: mrp_repair
+#: field:mrp.repair.fee,invoice_line_id:0
+#: field:mrp.repair.line,invoice_line_id:0
+msgid "Invoice Line"
+msgstr "Red računa"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Total amount"
+msgstr "Ukupan iznos"
+
+#. module: mrp_repair
+#: selection:mrp.repair.line,state:0
+msgid "Canceled"
+msgstr "Отказано"
+
+#. module: mrp_repair
+#: selection:mrp.repair,invoice_method:0
+msgid "Before Repair"
+msgstr "Pre POpravke"
+
+#. module: mrp_repair
+#: field:mrp.repair,location_id:0
+msgid "Current Location"
+msgstr "Trenutna Lokacija"
+
+#. module: mrp_repair
+#: wizard_button:mrp.repair.cancel,display,yes:0
+msgid "Yes"
+msgstr "Da"
+
+#. module: mrp_repair
+#: field:mrp.repair,invoiced:0
+#: field:mrp.repair.fee,invoiced:0
+#: field:mrp.repair.line,invoiced:0
+msgid "Invoiced"
+msgstr "Fakturisano"
+
+#. module: mrp_repair
+#: wizard_button:mrp.repair.cancel,display,end:0
+msgid "No"
+msgstr "Ne"
+
+#. module: mrp_repair
+#: wizard_view:mrp.repair.make_invoice,init:0
+#: wizard_button:mrp.repair.make_invoice,init,invoice:0
+msgid "Create invoices"
+msgstr "Kreiranje računa"
+
+#. module: mrp_repair
+#: selection:mrp.repair.line,type:0
+#: rml:repair.order:0
+msgid "Add"
+msgstr "Dodaj"
+
+#. module: mrp_repair
+#: selection:mrp.repair.line,state:0
+msgid "Draft"
+msgstr "Priprema"
+
+#. module: mrp_repair
+#: model:ir.actions.act_window,name:mrp_repair.action_repair_order_form
+#: model:ir.ui.menu,name:mrp_repair.menu_repair_form
+msgid "New Repair"
+msgstr "Nova Popravka"
+
+#. module: mrp_repair
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !"
+
+#. module: mrp_repair
+#: field:mrp.repair,amount_untaxed:0
+msgid "Untaxed Amount"
+msgstr "Iznos bez poreza"
+
+#. module: mrp_repair
+#: field:mrp.repair.line,state:0
+msgid "Status"
+msgstr "Status"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "Guarantee Limit"
+msgstr "Garancija traje do"
+
+#. module: mrp_repair
+#: field:mrp.repair,product_id:0
+#: rml:repair.order:0
+msgid "Product to Repair"
+msgstr "Proizvod za Popravku"
+
+#. module: mrp_repair
+#: help:mrp.repair,pricelist_id:0
+msgid "The pricelist comes from the selected partner, by default."
+msgstr "Cenovnik stize od selektovanog partnera, po postavci"
+
+#. module: mrp_repair
+#: wizard_view:mrp.repair.cancel,display:0
+msgid ""
+"This operation will cancel the Repair process, but will not cancel it's "
+"Invoice. Do you want to continue?"
+msgstr ""
+"Ova operacija ce otkazati proces popravke, ali nece ponistiti i fakturu "
+"iste. Zelis li da nastavim"
+
+#. module: mrp_repair
+#: selection:mrp.repair,state:0
+msgid "Quotation"
+msgstr "Najava"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Compute"
+msgstr "Izracunaj"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Confirm Repair"
+msgstr "Potvrdi Popravku"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "Repair Quotation"
+msgstr "Pretpostavka Popravke"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "End Repair"
+msgstr "Kraj Popravke"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "History"
+msgstr ""
+
+#. module: mrp_repair
+#: model:ir.model,name:mrp_repair.model_mrp_repair
+msgid "Repairs Order"
+msgstr "Nalog Popravki"
+
+#. module: mrp_repair
+#: model:ir.actions.act_window,name:mrp_repair.action_repair_ready_tree
+#: model:ir.ui.menu,name:mrp_repair.menu_repair_ready
+msgid "Repairs Ready to Start"
+msgstr "Popravke spremne za start"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Qty"
+msgstr "Kol."
+
+#. module: mrp_repair
+#: selection:mrp.repair,state:0
+#: selection:mrp.repair.line,state:0
+msgid "Done"
+msgstr "Gotovo"
+
+#. module: mrp_repair
+#: model:ir.actions.act_window,name:mrp_repair.action_repair_2binvoiced_tree
+#: model:ir.ui.menu,name:mrp_repair.menu_repair_2binvoiced
+msgid "Repairs to be invoiced"
+msgstr "Popravke za fakturisanje"
+
+#. module: mrp_repair
+#: field:mrp.repair,invoice_id:0
+msgid "Invoice"
+msgstr "Račun"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Fees"
+msgstr "Porezi"
+
+#. module: mrp_repair
+#: selection:mrp.repair,state:0
+#: wizard_button:mrp.repair.make_invoice,init,end:0
+msgid "Cancel"
+msgstr "Otkaži"
+
+#. module: mrp_repair
+#: field:mrp.repair.line,location_dest_id:0
+msgid "Dest. Location"
+msgstr "Odredišna lokacija"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "Operation Line(s)"
+msgstr "Linija(e) Operacije"
+
+#. module: mrp_repair
+#: model:ir.model,name:mrp_repair.model_mrp_repair_line
+msgid "Repair Operations Lines"
+msgstr "Operacione Linije Popravke"
+
+#. module: mrp_repair
+#: field:mrp.repair,location_dest_id:0
+msgid "Delivery Location"
+msgstr "Lokacija Ispostave"
+
+#. module: mrp_repair
+#: model:ir.module.module,shortdesc:mrp_repair.module_meta_information
+msgid "Products Repairs Module"
+msgstr "Modul Popravki Proizvoda"
+
+#. module: mrp_repair
+#: help:mrp.repair,invoice_method:0
+msgid ""
+"This field allow you to change the workflow of the repair order. If value "
+"selected is different from 'No Invoice', it also allow you to select the "
+"pricelist and invoicing address."
+msgstr ""
+"Ovo ti polje omogucava da promenis radni prozor u nalogu popravki. Ako je "
+"selektovana vrednost drugacija od onog gde pise ( nema Faktura), on ti "
+"takodje omogucava da selektujes cenovnik i adresu afkturisanja."
+
+#. module: mrp_repair
+#: field:mrp.repair.fee,price_unit:0
+#: field:mrp.repair.line,price_unit:0
+#: rml:repair.order:0
+msgid "Unit Price"
+msgstr "Jedinična cijena"
+
+#. module: mrp_repair
+#: wizard_view:mrp.repair.make_invoice,init:0
+msgid "Do you really want to create the invoices ?"
+msgstr "Da li zaista želite da kreirate račun?"
+
+#. module: mrp_repair
+#: field:mrp.repair.fee,name:0
+#: field:mrp.repair.line,name:0
+#: rml:repair.order:0
+msgid "Description"
+msgstr "Opis"
+
+#. module: mrp_repair
+#: field:mrp.repair,operations:0
+msgid "Operation Lines"
+msgstr "Operacione Linije"
+
+#. module: mrp_repair
+#: field:mrp.repair.fee,product_id:0
+#: field:mrp.repair.line,product_id:0
+msgid "Product"
+msgstr "Proizvod"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Invoice Corrected"
+msgstr "Ispravljen račun"
+
+#. module: mrp_repair
+#: help:mrp.repair,deliver_bool:0
+msgid ""
+"Check this box if you want to manage the delivery once the product is "
+"repaired. If cheked, it will create a packing with selected product. Note "
+"that you can select the locations in the Info tab, if you have the extended "
+"view."
+msgstr ""
+"Cekiraj ovu kucicu ako zelis da upravljas sa isporukama, onda kada je "
+"proizvod popravljen. ako je cekirano, kreirace pakovanje za selektovani "
+"proizvod. Treba napomenuti da mozes selektovati lokaciju u Info tabu, ako si "
+"omogucio prosireni prozor,"
+
+#. module: mrp_repair
+#: field:mrp.repair.line,type:0
+msgid "Type"
+msgstr "Tip"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "Price"
+msgstr "Cena"
+
+#. module: mrp_repair
+#: field:mrp.repair,deliver_bool:0
+msgid "Deliver"
+msgstr "Isporuka"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+#: field:mrp.repair,internal_notes:0
+msgid "Internal Notes"
+msgstr "Interne Napomene"
+
+#. module: mrp_repair
+#: rml:repair.order:0
+msgid "Taxes:"
+msgstr "Porezi:"
+
+#. module: mrp_repair
+#: model:ir.actions.wizard,name:mrp_repair.wizard_mrp_repair_make_invoice
+msgid "Make invoices"
+msgstr "Kreiranje računa"
+
+#. module: mrp_repair
+#: field:mrp.repair,name:0
+msgid "Repair Ref"
+msgstr "Ref Popravke"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "UoM"
+msgstr "JM"
+
+#. module: mrp_repair
+#: selection:mrp.repair.line,type:0
+#: rml:repair.order:0
+msgid "Remove"
+msgstr "Уклони"
+
+#. module: mrp_repair
+#: wizard_view:mrp.repair.cancel,display:0
+msgid "Cancel Repair...??"
+msgstr "Otkazujes Popravku ??"
+
+#. module: mrp_repair
+#: field:mrp.repair.fee,product_uom:0
+#: field:mrp.repair.line,product_uom:0
+msgid "Product UoM"
+msgstr "JM Proizvoda"
+
+#. module: mrp_repair
+#: field:mrp.repair,partner_invoice_id:0
+msgid "Invoicing Address"
+msgstr "Adresa Fakturisanja"
+
+#. module: mrp_repair
+#: selection:mrp.repair,invoice_method:0
+msgid "After Repair"
+msgstr "Nakon Popravke"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Invoicing"
+msgstr "Fakturisanje"
+
+#. module: mrp_repair
+#: field:mrp.repair.line,location_id:0
+msgid "Source Location"
+msgstr "Lokacija izvora"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "Quality"
+msgstr "Kvalitet"
+
+#. module: mrp_repair
+#: model:ir.actions.wizard,name:mrp_repair.action_cancel_repair
+#: view:mrp.repair:0
+msgid "Cancel Repair"
+msgstr "Otkazi Popravku"
+
+#. module: mrp_repair
+#: selection:mrp.repair,invoice_method:0
+msgid "No Invoice"
+msgstr "Ne Fakturisi"
+
+#. module: mrp_repair
+#: view:mrp.repair:0
+msgid "States"
+msgstr "Stanja"
+
+#. module: mrp_repair
+#: help:mrp.repair,partner_id:0
+msgid ""
+"This field allow you to choose the parner that will be invoiced and delivered"
+msgstr ""
+"Ovo polje ti omogucava da izaberes partnera kojem ce biti isporuceno i "
+"fakturisano"
+
+#. module: mrp_repair
+#: field:mrp.repair,amount_total:0
+msgid "Total"
+msgstr "Ukupno"
+
+#. module: mrp_repair
+#: selection:mrp.repair,state:0
+msgid "Ready to Repair"
+msgstr "Spremno za Popravku"
diff --git a/addons/mrp_repair/mrp_repair_view.xml b/addons/mrp_repair/mrp_repair_view.xml
index 15878ec1b37..756fa94568a 100644
--- a/addons/mrp_repair/mrp_repair_view.xml
+++ b/addons/mrp_repair/mrp_repair_view.xml
@@ -211,6 +211,7 @@
form
tree,form
+ Repair orders allows you to organize your reparations on the products. On a repair order, you can detail the components you remove, add or replace and record the time you spent on the different operations. The repair order uses the warranty date on the production lot in order to know if you have to invoice the reparation to the customer or not.
diff --git a/addons/mrp_subproduct/i18n/sr.po b/addons/mrp_subproduct/i18n/sr.po
new file mode 100644
index 00000000000..a0427bb3356
--- /dev/null
+++ b/addons/mrp_subproduct/i18n/sr.po
@@ -0,0 +1,90 @@
+# Serbian translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-08-28 16:01+0000\n"
+"PO-Revision-Date: 2010-10-16 09:18+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Serbian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-10-17 04:53+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: mrp_subproduct
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "Nevažeći XML za pregled arhitekture"
+
+#. module: mrp_subproduct
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Ime objekta mora da počinje sa x_ i ne sme da sadrži specijalne karaktere !"
+
+#. module: mrp_subproduct
+#: view:mrp.bom:0
+msgid "sub products"
+msgstr "pod proizvodi"
+
+#. module: mrp_subproduct
+#: field:mrp.subproduct,product_id:0
+msgid "Product"
+msgstr "Proizvod"
+
+#. module: mrp_subproduct
+#: model:ir.model,name:mrp_subproduct.model_mrp_subproduct
+msgid "Mrp Sub Product"
+msgstr "Mrp Pod Proizvod"
+
+#. module: mrp_subproduct
+#: field:mrp.subproduct,subproduct_type:0
+msgid "Quantity Type"
+msgstr "Tip Kolicine"
+
+#. module: mrp_subproduct
+#: field:mrp.subproduct,product_qty:0
+msgid "Product Qty"
+msgstr "Kol, Proizvoda"
+
+#. module: mrp_subproduct
+#: field:mrp.subproduct,product_uom:0
+msgid "Product UOM"
+msgstr "JM proizvoda"
+
+#. module: mrp_subproduct
+#: field:mrp.subproduct,bom_id:0
+msgid "BoM"
+msgstr "BoM"
+
+#. module: mrp_subproduct
+#: view:mrp.bom:0
+msgid "Sub Products"
+msgstr "Pod proizvodi"
+
+#. module: mrp_subproduct
+#: selection:mrp.subproduct,subproduct_type:0
+msgid "Variable"
+msgstr "Promjenljiva"
+
+#. module: mrp_subproduct
+#: field:mrp.bom,sub_products:0
+msgid "sub_products"
+msgstr "pod_proizvod"
+
+#. module: mrp_subproduct
+#: selection:mrp.subproduct,subproduct_type:0
+msgid "Fixed"
+msgstr "Fiksno"
+
+#. module: mrp_subproduct
+#: model:ir.module.module,shortdesc:mrp_subproduct.module_meta_information
+msgid "MRP Sub Product"
+msgstr "MRP Pod Proizvod"
diff --git a/addons/mrp_subproduct/security/ir.model.access.csv b/addons/mrp_subproduct/security/ir.model.access.csv
index cd093fa6ff1..307827265f2 100644
--- a/addons/mrp_subproduct/security/ir.model.access.csv
+++ b/addons/mrp_subproduct/security/ir.model.access.csv
@@ -1,4 +1,3 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_mrp_subproduct_user","mrp.subproduct","model_mrp_subproduct","mrp.group_mrp_user",1,1,1,1
"access_mrp_subproduct_manager","mrp.subproduct manager","model_mrp_subproduct","mrp.group_mrp_manager",1,0,0,0
-"access_mrp_subproduct_system","mrp.subproduct system","model_mrp_subproduct","base.group_system",1,0,0,0
diff --git a/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py b/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py
index af2c5afd35c..d520283bd2d 100755
--- a/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py
+++ b/addons/outlook/plugin/openerp-outlook-plugin/tiny_xmlrpc.py
@@ -43,7 +43,7 @@ def execute(connector, method, *args):
if e.args[0] == 111:
if wait_count > wait_limit:
print "Server is taking too long to start, it has exceeded the maximum limit of %d seconds."%(wait_limit)
- clean()
+ # clean() Commented...
sys.exit(1)
print 'Please wait %d sec to start server....'%(waittime)
wait_count += 1
diff --git a/addons/point_of_sale/i18n/sr.po b/addons/point_of_sale/i18n/sr.po
index 06121a92100..4efa16dc46b 100644
--- a/addons/point_of_sale/i18n/sr.po
+++ b/addons/point_of_sale/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 16:21+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 07:35+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: point_of_sale
diff --git a/addons/point_of_sale/pos_view.xml b/addons/point_of_sale/pos_view.xml
index 7453682f566..4d277d216c8 100644
--- a/addons/point_of_sale/pos_view.xml
+++ b/addons/point_of_sale/pos_view.xml
@@ -3,7 +3,7 @@
+ groups="group_pos_manager,group_pos_user"/>
pos.order
@@ -150,7 +150,7 @@
-
+
@@ -697,7 +697,7 @@
-
+
@@ -706,7 +706,7 @@
+ id="menu_point_config_product" sequence="25" groups="group_pos_manager"/>
Products
@@ -732,7 +732,7 @@
parent="menu_point_config_product"
action="action_product_input"
id="products_for_input_operations"
- groups="base.group_system,group_pos_manager"/>
+ groups="group_pos_manager"/>
Products
@@ -758,7 +758,7 @@
parent="menu_point_config_product"
action="action_product_output"
id="products_for_output_operations"
- groups="base.group_system,group_pos_manager"/>
+ groups="group_pos_manager"/>
-
+
diff --git a/addons/point_of_sale/report/pos_details.py b/addons/point_of_sale/report/pos_details.py
index 69a691a14f9..0e77dd39188 100644
--- a/addons/point_of_sale/report/pos_details.py
+++ b/addons/point_of_sale/report/pos_details.py
@@ -75,8 +75,8 @@ class pos_details(report_sxw.rml_parse):
def _get_sum_invoice_2(self,form,user):
res2=[]
self.cr.execute ("select sum(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0))" \
- "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt ,res_users as ru,res_company as rc " \
- "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and po.state in('invoiced') " \
+ "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt ,res_users as ru,res_company as rc,account_invoice as ai " \
+ "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and ai.id=po.invoice_id " \
"and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date >= %s and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date <= %s " \
"and po.user_id = ru.id and rc.id = %s and ru.id = %s " \
,(form['date_start'],form['date_end'],str(user.company_id.id),str(self.uid)))
@@ -88,7 +88,7 @@ class pos_details(report_sxw.rml_parse):
res3=[]
self.cr.execute ("select sum(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0))" \
"from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt, res_users as ru,res_company as rc " \
- "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and po.state in('paid','invoiced','done') " \
+ "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and po.state IN ('paid','invoiced','done') " \
"and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date >= %s and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date <= %s " \
"and po.user_id = ru.id and rc.id = %s and ru.id = %s " \
,(form['date_start'],form['date_end'],str(user.company_id.id),str(self.uid)))
@@ -96,6 +96,19 @@ class pos_details(report_sxw.rml_parse):
self.total_paid=res3[0]
return res3[0] or False
+ def _get_sum_dis_2(self,form,user):
+ res4=[]
+ self.cr.execute ("select sum(pol.price_ded * pol.qty)" \
+ "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt ,res_users as ru,res_company as rc " \
+ "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and po.state IN ('paid') " \
+ "and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date >= %s and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date <= %s " \
+ "and po.user_id = ru.id and rc.id = %s and ru.id = %s " \
+ ,(form['date_start'],form['date_end'],str(user.company_id.id),str(self.uid)))
+ res4=self.cr.fetchone()
+ self.total_invoiced=res4[0]
+ return res4[0] or False
+
+
def _get_sum_discount(self, objects):
#code for the sum of discount value
return reduce(lambda acc, object:
@@ -187,7 +200,7 @@ class pos_details(report_sxw.rml_parse):
'time': time,
'strip_name': self._strip_name,
'getpayments': self._get_payments,
- 'getsumdisc': self._get_sum_discount,
+ 'getsumdisc': self._get_sum_dis_2,
'gettotalofthaday': self._total_of_the_day,
'gettaxamount': self._get_tax_amount,
'getperiod': self._get_period,
diff --git a/addons/point_of_sale/report/pos_details.rml b/addons/point_of_sale/report/pos_details.rml
index 388c30a42ce..ae9d7252984 100644
--- a/addons/point_of_sale/report/pos_details.rml
+++ b/addons/point_of_sale/report/pos_details.rml
@@ -247,7 +247,7 @@
[[ formatLang(line_ids['discount']) ]]
- [[ getinvoice(line_ids['invoice_id'],user) or removeParentNode('font') ]]
+ [[ getinvoice(line_ids['invoice_id'],user) or removeParentNode('font') ]]
@@ -332,7 +332,7 @@
- Sales total
+ Sales total(Revenue)
[[ formatLang(getsalestotal2(data['form'],user)) ]] [[ company.currency_id.symbol ]]
@@ -359,7 +359,7 @@
Total discount
- [[ formatLang(getsumdisc(objects)) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(getsumdisc(data['form'],user)) ]] [[ company.currency_id.symbol ]]
diff --git a/addons/point_of_sale/security/ir.model.access.csv b/addons/point_of_sale/security/ir.model.access.csv
index 70a98128c2a..db62c9c8361 100644
--- a/addons/point_of_sale/security/ir.model.access.csv
+++ b/addons/point_of_sale/security/ir.model.access.csv
@@ -21,11 +21,9 @@
"access_report_sales_by_margin_pos","report.sales.by.margin.pos","model_report_sales_by_margin_pos","group_pos_user",1,0,0,0
"access_report_sales_by_margin_pos_month","report.sales.by.margin.pos.month","model_report_sales_by_margin_pos_month","group_pos_user",1,0,0,0
"access_report_pos_order","report.pos.order","model_report_pos_order","group_pos_user",1,1,1,1
-"access_report_pos_order_system","report.pos.order.system","model_report_pos_order","base.group_system",1,1,1,1
"access_report_pos_order","report.pos.order","model_report_pos_order","group_pos_manager",1,1,1,1
"access_account_bank_statement","account.bank.statement","account.model_account_bank_statement","group_pos_user",1,1,1,0
"access_account_bank_statement_manager","account.bank.statement manager","account.model_account_bank_statement","group_pos_manager",1,1,1,1
-"access_account_bank_statement_system","account.bank.statement system","account.model_account_bank_statement","base.group_system",1,0,0,0
"access_account_bank_statement_line","account.bank.statement.line","account.model_account_bank_statement_line","group_pos_user",1,1,1,0
"access_account_invoice_pos","account.invoice pos user","account.model_account_invoice","group_pos_user",1,1,1,0
"access_account_invoice_pos_manager","account.invoice pos manager","account.model_account_invoice","group_pos_manager",1,0,0,0
@@ -35,10 +33,8 @@
"access_account_invoice_tax_pos_manager","account.invoice.tax pos manager","account.model_account_invoice_tax","group_pos_manager",1,0,0,0
"access_account_period_pos","account.period pos user","account.model_account_period","group_pos_user",1,1,1,0
"access_account_period_pos_manager","account.period pos manager","account.model_account_period","group_pos_manager",1,0,0,0
-"access_account_period_pos_system","account.period pos system","account.model_account_period","base.group_system",1,0,0,0
"access_account_fiscalyear_pos_user","account.fiscalyear user","account.model_account_fiscalyear","group_pos_user",1,1,1,0
"access_account_fiscalyear_pos_manager","account.fiscalyear manager","account.model_account_fiscalyear","group_pos_manager",1,0,0,0
-"access_account_fiscalyear_pos_system","account.fiscalyear user","account.model_account_fiscalyear","base.group_system",1,0,0,0
"access_account_cashbox_line","account.cashbox.line","account.model_account_cashbox_line","group_pos_user",1,1,1,0
"access_account_cashbox_line_manager","account.cashbox.line manager","account.model_account_cashbox_line","group_pos_manager",1,1,1,1
"access_product_product","product.product","product.model_product_product","group_pos_user",1,0,0,0
@@ -50,31 +46,20 @@
"access_account_move","account.move","account.model_account_move","group_pos_manager",1,0,0,0
"access_account_journal","account.journal","account.model_account_journal","group_pos_user",1,1,1,0
"access_account_journal_manager","account.journal manager","account.model_account_journal","group_pos_manager",1,0,0,0
-"access_account_journal_system","account.journal system","account.model_account_journal","base.group_system",1,0,0,0
"access_account_journal_period_user","account.journal.period user","account.model_account_journal_period","group_pos_user",1,1,1,1
"access_account_journal_period_manager","account.journal.period manager","account.model_account_journal_period","group_pos_manager",1,0,0,0
"access_account_journal_view","account.journal.view","account.model_account_journal_view","group_pos_user",1,1,1,0
"access_account_journal_view_manager","account.journal.view manager","account.model_account_journal_view","group_pos_manager",1,0,0,0
-"access_account_journal_view_system","account.journal.view system","account.model_account_journal_view","base.group_system",1,0,0,0
"access_account_analytic_line","account.analytic.line","analytic.model_account_analytic_line","group_pos_user",1,1,1,0
"access_account_analytic_account","account.analytic.account","analytic.model_account_analytic_account","group_pos_user",1,1,1,0
"access_account_journal_column","account.journal.column","account.model_account_journal_column","group_pos_user",1,1,1,0
"access_account_journal_column_manager","account.journal.column manager","account.model_account_journal_column","group_pos_manager",1,0,0,0
-"access_account_journal_column_system","account.journal.column system","account.model_account_journal_column","base.group_system",1,0,0,0
"access_report_check_register","report.cash.register","model_report_cash_register","group_pos_manager",1,1,1,1
-"access_product_product_pos","product.product.pos","product.model_product_product","base.group_system",1,0,0,0
-"access_product_template_pos","product.template pos","product.model_product_template","base.group_system",1,1,1,1
"access_ir_property_pos_manager","ir.property manager","base.model_ir_property","group_pos_manager",1,1,1,1
-"access_pos_order_system","pos.order system","model_pos_order","base.group_system",1,0,0,0
-"access_pos_order_line_system","pos.order.line system","model_pos_order_line","base.group_system",1,0,0,0
"access_account_bank_statement_line_manager","account.bank.statement.line manager","account.model_account_bank_statement_line","group_pos_manager",1,1,1,1
"access_account_invoice_manager","account.invoice manager","account.model_account_invoice","group_pos_manager",1,1,1,1
-"access_report_transaction_pos_system","report.transaction.pos system","model_report_transaction_pos","base.group_system",1,1,1,1
-"access_account_bank_statement_line_system","account.bank.statement.line system","account.model_account_bank_statement_line","base.group_system",1,0,0,0
-"access_product_product_supplierinfo","product.supplierinfo system","product.model_product_supplierinfo","base.group_system",1,0,0,0
"access_product_product_supplierinfo_manager","product.supplierinfo manager","product.model_product_supplierinfo","group_pos_manager",1,0,0,0
"access_product_product_supplierinfo_user","product.supplierinfo user","product.model_product_supplierinfo","group_pos_user",1,0,0,0
-"access_product_product_packaging_system","product.packaging system","product.model_product_packaging","base.group_system",1,0,0,0
"access_product_product_packaging_user","product.packaging user","product.model_product_packaging","group_pos_user",1,0,0,0
"access_product_product_packaging_manager","product.packaging manager","product.model_product_packaging","group_pos_manager",1,0,0,0
"access_account_sequence_fiscalyear_manager","account.sequence.fiscalyear manager","account.model_account_sequence_fiscalyear","group_pos_manager",1,0,0,0
diff --git a/addons/point_of_sale/wizard/pos_payment.xml b/addons/point_of_sale/wizard/pos_payment.xml
index 58b4dc447cd..f0536ae0ac8 100644
--- a/addons/point_of_sale/wizard/pos_payment.xml
+++ b/addons/point_of_sale/wizard/pos_payment.xml
@@ -1,48 +1,48 @@
-
+
-
+
Add payment :
pos.make.payment
form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -54,5 +54,5 @@
new
-
-
+
+
diff --git a/addons/point_of_sale/wizard/pos_return.py b/addons/point_of_sale/wizard/pos_return.py
index 99e697ea826..abeadfc9931 100644
--- a/addons/point_of_sale/wizard/pos_return.py
+++ b/addons/point_of_sale/wizard/pos_return.py
@@ -143,6 +143,23 @@ class pos_return(osv.osv_memory):
@return: Return the add product form again for adding more product
"""
+ current_rec = self.read(cr, uid, data[0], context=context)
+ order_obj =self.pool.get('pos.order')
+ line_obj = self.pool.get('pos.order.line')
+ pos_current = order_obj.browse(cr, uid, context.get('active_id'))
+ pos_line_ids = pos_current.lines
+ if pos_line_ids:
+ for pos_line in pos_line_ids:
+ line_field = "return"+str(pos_line.id)
+ pos_list = current_rec.keys()
+ newline_vals = {}
+ if line_field in pos_list :
+ less_qty = current_rec.get(line_field)
+ pos_cur_line = line_obj.browse(cr, uid, pos_line.id, context=context)
+ qty = pos_cur_line.qty
+ qty = qty - less_qty
+ newline_vals.update({'qty':qty})
+ line_obj.write(cr, uid, pos_line.id, newline_vals, context=context)
return {
'name': _('Add Product'),
'view_type': 'form',
diff --git a/addons/process/i18n/sr.po b/addons/process/i18n/sr.po
index 4adb94895c5..a27778e2c95 100644
--- a/addons/process/i18n/sr.po
+++ b/addons/process/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 17:10+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 08:27+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: process
diff --git a/addons/process/process.py b/addons/process/process.py
index 479b8748ff3..544ff73e761 100644
--- a/addons/process/process.py
+++ b/addons/process/process.py
@@ -30,16 +30,12 @@ class Env(dict):
self.__usr = user
def __getitem__(self, name):
-
if name in ('__obj', '__user'):
- return super(ExprContext, self).__getitem__(name)
-
+ return super(Env, self).__getitem__(name)
if name == 'user':
return self.__user
-
if name == 'object':
return self.__obj
-
return self.__obj[name]
class process_process(osv.osv):
diff --git a/addons/process/security/ir.model.access.csv b/addons/process/security/ir.model.access.csv
index 064f0454d02..7356880f47a 100644
--- a/addons/process/security/ir.model.access.csv
+++ b/addons/process/security/ir.model.access.csv
@@ -4,8 +4,3 @@
"access_process_transition","process.transition","model_process_transition","base.group_user",1,0,0,0
"access_process_transition_action","process.transition.action","model_process_transition_action","base.group_user",1,0,0,0
"access_process_condition","process.condition","model_process_condition","base.group_user",1,0,0,0
-"access_process_process_manager","process.process manager","model_process_process","base.group_system",1,1,1,1
-"access_process_node_manager","process.node manager","model_process_node","base.group_system",1,1,1,1
-"access_process_transition_manager","process.transition manager","model_process_transition","base.group_system",1,1,1,1
-"access_process_transition_action_manager","process.transition.action manager","model_process_transition_action","base.group_system",1,1,1,1
-"access_process_condition_manager","process.condition manager","model_process_condition","base.group_system",1,1,1,1
diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py
index 4f0d3530a80..359586fae7e 100644
--- a/addons/procurement/procurement.py
+++ b/addons/procurement/procurement.py
@@ -335,8 +335,6 @@ class procurement_order(osv.osv):
})
move_obj.action_confirm(cr, uid, [id], context=context)
self.write(cr, uid, [procurement.id], {'move_id': id, 'close_move': 1})
- message = _("Procurement '%s' is running.") % procurement.name
- self.log(cr, uid, procurement.id, message)
self.write(cr, uid, ids, {'state': 'confirmed', 'message': ''})
return True
@@ -370,9 +368,8 @@ class procurement_order(osv.osv):
cr.execute('update procurement_order set message=%s where id=%s',
(_('Not enough stock and no minimum orderpoint rule defined.'),
procurement.id))
- message = _("Procurement '%s' has an exception." \
- "Not enough stock and no minimum orderpoint rule defined.") % \
- procurement.name
+ message = _("Procurement '%s' is in exception: not enough stock.") % \
+ (procurement.name,)
self.log(cr, uid, procurement.id, message)
return ok
@@ -451,8 +448,6 @@ class procurement_order(osv.osv):
if procurement.move_id:
if procurement.close_move and (procurement.move_id.state <> 'done'):
move_obj.action_done(cr, uid, [procurement.move_id.id])
- message = _("Procurement '%s' is done.") % procurement.name
- self.log(cr, uid, procurement.id, message)
res = self.write(cr, uid, ids, {'state': 'done', 'date_close': time.strftime('%Y-%m-%d')})
wf_service = netsvc.LocalService("workflow")
for id in ids:
diff --git a/addons/procurement/procurement_view.xml b/addons/procurement/procurement_view.xml
index 4d54fa256a8..53f84367b17 100644
--- a/addons/procurement/procurement_view.xml
+++ b/addons/procurement/procurement_view.xml
@@ -132,7 +132,7 @@
{'search_default_current':1}
- Procurement Orders represent the need for a certain quantity of products, at a given time, in a given location. Sale Orders are one typical source of Procurement Orders (but these are distinct documents). Depending on the procurement parameters and the products configuration, the procurement engine will attempt to satisfy the need by reserving products from stock, or ordering products from a supplier, or passing a manufacturing order, etc.
+ A procurement order is used to record a need in a specific product at a specific location. They are usually created automatically by the sales orders, the Pull Logistics rules or the minimum stock rules. When the procurement order is confirmed, it creates automatically the necessary operations to fullfil the need: purchase order proposition, manufacturing order, etc.
@@ -235,6 +235,7 @@
form
+ You can define your minimum stock rules, so that OpenERP will trigger automatically the propositions of manufacturing or purchase orders according to the stock level. Once the virtual stock of a product (=stock on hand minus all confirmed orders and reservations) is bellow the minimum quantity, OpenERP will generate a procurement request in order to fullfil the stock up to the maximum quantity.
form
-
+
diff --git a/addons/product/i18n/sr.po b/addons/product/i18n/sr.po
index 2a17ab4b5a7..8cc0f2990fa 100644
--- a/addons/product/i18n/sr.po
+++ b/addons/product/i18n/sr.po
@@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-09-09 07:17+0000\n"
-"Last-Translator: Sonja Sardelić \n"
+"PO-Revision-Date: 2010-10-16 08:45+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:06+0000\n"
+"X-Launchpad-Export-Date: 2010-10-17 04:53+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: product
#: view:product.pricelist.item:0
msgid "Max. Margin"
-msgstr ""
+msgstr "Maks. marža"
#. module: product
#: view:product.pricelist.item:0
@@ -121,7 +121,7 @@ msgstr "Obezbeđene metode"
#. module: product
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Pogrešno ime modela u definiciji akcije."
#. module: product
#: model:process.process,name:product.process_process_productprocess0
@@ -197,7 +197,7 @@ msgstr "Zalihe proizvoda"
#. module: product
#: model:product.category,name:product.product_category_services
msgid "Services"
-msgstr "Servisi"
+msgstr "Usluge"
#. module: product
#: help:product.template,list_price:0
@@ -230,12 +230,12 @@ msgstr "Datum od kada je ova verzija cenovnika validna."
#. module: product
#: field:product.product,incoming_qty:0
msgid "Incoming"
-msgstr "Dolazno"
+msgstr "Ulazna"
#. module: product
#: selection:product.template,procure_method:0
msgid "Make to Stock"
-msgstr "Pravljenje zaliha"
+msgstr "Prebaci na zalihu"
#. module: product
#: view:product.product:0
@@ -246,7 +246,7 @@ msgstr "Težina"
#. module: product
#: model:product.template,name:product.product_product_fan2_product_template
msgid "Silent fan"
-msgstr ""
+msgstr "Tihi ventilator"
#. module: product
#: help:product.template,supply_method:0
@@ -276,7 +276,7 @@ msgstr "Prodajni cenovnik"
#. module: product
#: field:product.pricelist.item,base_pricelist_id:0
msgid "If Other Pricelist"
-msgstr ""
+msgstr "Ako je drugi cjenik"
#. module: product
#: model:ir.actions.act_window,name:product.product_normal_action
@@ -294,7 +294,7 @@ msgid ""
"Rounding is applied after the discount and before the surcharge.\n"
"To have prices that end in 9.99, set rounding 10, surcharge -0.01"
msgstr ""
-"Postavite cenu tako da je ona višestruka ova vrednost.\n"
+"Postavlja cenu tako da je ona višestruka vrednost ove vrednosti.\n"
"Zaokruženje se primenjuje nakon popusta a pre poskupljenja.\n"
"Ako hoćete da Vam se cena završava sa 9.99, postavite zaokruženje 10, "
"dodatak -0.01"
@@ -307,7 +307,7 @@ msgstr "Nova cena ="
#. module: product
#: field:product.product,virtual_available:0
msgid "Virtual Stock"
-msgstr "Stvarne zalihe"
+msgstr "Efektivna zaliha"
#. module: product
#: selection:product.template,mes_type:0
@@ -355,7 +355,7 @@ msgstr "Naziv pravila"
#. module: product
#: model:ir.ui.menu,name:product.menu_config_product
msgid "Configuration"
-msgstr "Konfiguracija"
+msgstr "Podešavanje"
#. module: product
#: field:product.packaging,rows:0
@@ -401,7 +401,7 @@ msgstr "Tastatura"
#. module: product
#: field:product.supplierinfo,name:0
msgid "Partner"
-msgstr "Партнер"
+msgstr "Partner"
#. module: product
#: field:product.template,sale_delay:0
@@ -452,7 +452,7 @@ msgstr "Eksplicitno ime pravila za ovu stavku cenovnika."
#. module: product
#: view:product.pricelist.item:0
msgid "Min. Margin"
-msgstr ""
+msgstr "Min. marža"
#. module: product
#: view:product.pricelist.item:0
@@ -467,7 +467,7 @@ msgstr "Procesor AMD Athlon XP 1800+"
#. module: product
#: selection:product.template,state:0
msgid "In Production"
-msgstr "U produkciji"
+msgstr "U proizvodnji"
#. module: product
#: field:product.category,child_id:0
@@ -536,7 +536,7 @@ msgstr "Cenovnici"
#. module: product
#: field:product.supplierinfo,product_name:0
msgid "Partner Product Name"
-msgstr "Naziv proizvoda partnera"
+msgstr "Partnerov naziv proizvoda"
#. module: product
#: view:product.product:0
diff --git a/addons/product/pricelist_view.xml b/addons/product/pricelist_view.xml
index 589dfb5f290..76623dc5710 100644
--- a/addons/product/pricelist_view.xml
+++ b/addons/product/pricelist_view.xml
@@ -42,6 +42,7 @@
product.pricelist.version
form
+ There can be more than one version of a pricelist. If you need to create new versions of a pricelist, you can do it and manage them from here. Some examples of versions: 2010, 2011, Promotion of February 2010, etc.
tree,form
+ A pricelist contains rules to be evaluated in order to compute the purchase or sale price for all the partners assigned to a pricelist. Pricelists have several versions (2010, 2011, Promotion of February 2010, etc.) and each version has several rules. Example: the customer price of this category of product will be based on the supplier price multiplied by 1.80.
@@ -219,7 +219,7 @@
[[formatLang(o.date_order,date=True) ]]
- [[ o.validator and o.validator.name or '' ]]
+ [[ (o.validator and o.validator.name) or '' ]]
diff --git a/addons/purchase/report/purchase_report_view.xml b/addons/purchase/report/purchase_report_view.xml
index d2dbff3be94..f5d1f7a3b42 100644
--- a/addons/purchase/report/purchase_report_view.xml
+++ b/addons/purchase/report/purchase_report_view.xml
@@ -149,6 +149,7 @@
tree,graph
{'search_default_month':1,'search_default_group_partner_id':1,'search_default_group_product_id': 1, 'search_default_orders': 1, 'group_by_no_leaf':1,'group_by':[]}
+ Purchase Analysis allows you to easily check and analyse your company purchase history and performance. From this menu you can track your negotiation performance, the delivery performance of your suppliers, etc.
@@ -177,6 +178,7 @@
form
tree,graph
{'search_default_month':1, 'search_default_group_product':1, 'search_default_group_partner':1, 'search_default_done':1, 'search_default_in': 1, 'group_by':[], 'group_by_no_leaf':1}
+ Reception Analysis allows you to easily check and analyse your company order receptions and the performance of your supplier's deliveries.
diff --git a/addons/purchase/report/request_quotation.rml b/addons/purchase/report/request_quotation.rml
index 95de453dca0..edc82087e5a 100644
--- a/addons/purchase/report/request_quotation.rml
+++ b/addons/purchase/report/request_quotation.rml
@@ -1,6 +1,6 @@
-
-
+
+
@@ -88,7 +88,7 @@
- [[ (order.partner_id and order.partner_id.title.name) or '' ]] [[ order.partner_id.name ]]
+ [[ (order.partner_id and order.partner_id.title and order.partner_id.title.name) or '' ]] [[ order.partner_id.name ]]
[[ (order.partner_address_id and order.partner_address_id.street) or '']]
[[ (order.partner_address_id.street2) or removeParentNode('para') ]]
[[ (order.partner_address_id and order.partner_address_id.zip) or '' ]][[ (order.partner_address_id and order.partner_address_id.city) or '' ]]
@@ -97,9 +97,9 @@
- Tel.: [[ (order.partner_address_id and order.partner_address_id.phone) or '' ]]
- Fax: [[ (order.partner_address_id and order.partner_address_id.fax) or '' ]]
- TVA: [[ (order.partner_id and order.partner_id.vat) or '' ]]
+ Tel.: [[ (order.partner_address_id and order.partner_address_id.phone) or removeParentNode('para') ]]
+ Fax: [[ (order.partner_address_id and order.partner_address_id.fax) or removeParentNode('para') ]]
+ TVA: [[ (order.partner_id and order.partner_id.vat) or removeParentNode('para') ]]
@@ -124,8 +124,8 @@
- [[repeatIn(order.order_line,'order_line')]]
-
+ [[repeatIn(order.order_line,'order_line')]]
+
[[ order_line.name ]]
diff --git a/addons/purchase/security/ir.model.access.csv b/addons/purchase/security/ir.model.access.csv
index 77a0aff7bb4..ef854f8f038 100644
--- a/addons/purchase/security/ir.model.access.csv
+++ b/addons/purchase/security/ir.model.access.csv
@@ -18,7 +18,7 @@
"access_stock_picking_purchase_user_manager","stock.picking","stock.model_stock_picking","group_purchase_manager",1,1,1,1
"access_stock_move_purchase_user_manager","stock.move","stock.model_stock_move","group_purchase_manager",1,1,1,1
"access_account_tax_purchase_user_manager","account.tax","account.model_account_tax","group_purchase_manager",1,0,0,0
-"access_product_product_purchase_user","product.product.purchase.user","product.model_product_product","group_purchase_user",1,1,1,1
+"access_product_product_purchase_user","product.product.purchase.user","product.model_product_product","group_purchase_user",1,0,0,0
"access_product_product_purchase_manager","product.product.purchase.manager","product.model_product_product","group_purchase_manager",1,0,0,0
"access_product_template_purchase_user","product.template purchase_user","product.model_product_template","group_purchase_user",1,1,1,1
"access_product_template_purchase_manager","product.template purchase_manager","product.model_product_template","group_purchase_manager",1,0,0,0
diff --git a/addons/purchase/test/purchase_from_picking.yml b/addons/purchase/test/purchase_from_picking.yml
index d0c1cbcb527..20dd3f0f907 100644
--- a/addons/purchase/test/purchase_from_picking.yml
+++ b/addons/purchase/test/purchase_from_picking.yml
@@ -122,36 +122,23 @@
I check that an entry gets created related to stock move.
-
!python {model: purchase.order}: |
- from tools.translate import _
pur_id1=self.browse(cr, uid, ref("purchase_order_po2"))
picking_obj = self.pool.get('stock.picking')
ids = picking_obj.search(cr, uid, [('origin', '=', pur_id1.name)])
pick_id = picking_obj.browse(cr, uid, ids)[0]
move_obj = self.pool.get('stock.move')
search_id = move_obj.search(cr, uid, [('picking_id', '=', pick_id.name)])
- assert search_id, _('No Incoming Product!')
--
- I check that Traceability moves are created.
+ assert search_id, 'No Incoming Product!'
-
Then I create an invoice from picking by clicking on "Create Invoice" wizard
--
- I create stock invoice on shipping entry.
--
- !record {model: stock.invoice.onshipping, id: stock_invoice_onshipping_0}:
- invoice_date: '2010-05-11'
- journal_id: account.bank_journal
- type: in_invoice
--
- I create Invoice.
-
!python {model: stock.invoice.onshipping}: |
- pur_obj=self.pool.get('purchase.order')
+ pur_obj=self.pool.get('purchase.order')
pur_id1=pur_obj.browse(cr, uid, ref("purchase_order_po2"))
- picking_obj = self.pool.get('stock.picking')
- ids = picking_obj.search(cr, uid, [('origin', '=', pur_id1.name)])
- self.create_invoice(cr, uid, [ref("stock_invoice_onshipping_0")], {"lang": "en_US",
- "tz": False, "search_default_approved": 1, "active_model": "stock.picking",
- "active_ids": ids, "active_id": ids[0], })
+ pick_ids = [x.id for x in pur_id1.picking_ids]
+ id = self.create(cr, uid, {'invoice_date': '2010-05-11', 'journal_id': ref('account.expenses_journal')},
+ {'active_ids': pick_ids})
+ self.create_invoice(cr, uid, [id], {"active_ids": pick_ids})
-
I check that an invoice_id field of Delivery&Invoices gets bind with the value.
-
diff --git a/addons/purchase/wizard/purchase_order_group_view.xml b/addons/purchase/wizard/purchase_order_group_view.xml
index fe04af1a32b..cb67f489a99 100644
--- a/addons/purchase/wizard/purchase_order_group_view.xml
+++ b/addons/purchase/wizard/purchase_order_group_view.xml
@@ -30,7 +30,8 @@ Lines will only be merged if:
res_model="purchase.order.group"
src_model="purchase.order"
view_mode="form"
- target="new"
+ target="new"
+ multi="True"
key2="client_action_multi"
groups="base.group_extended"
id="action_view_purchase_order_group"/>
diff --git a/addons/purchase_analytic_plans/i18n/sr.po b/addons/purchase_analytic_plans/i18n/sr.po
index e9fba1bf5fa..f3a1d1b86dc 100644
--- a/addons/purchase_analytic_plans/i18n/sr.po
+++ b/addons/purchase_analytic_plans/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 20:32+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 09:31+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: purchase_analytic_plans
diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py
index 1e0c4f06838..c22ced3e159 100644
--- a/addons/purchase_requisition/purchase_requisition.py
+++ b/addons/purchase_requisition/purchase_requisition.py
@@ -68,30 +68,18 @@ class purchase_requisition(osv.osv):
if str(purchase_id.state) in('draft','wait'):
purchase_order_obj.action_cancel(cr,uid,[purchase_id.id])
self.write(cr, uid, ids, {'state': 'cancel'})
- for (id,name) in self.name_get(cr, uid, ids):
- message = _('Tender') + " '" + name + "' "+ _("is cancelled")
- self.log(cr, uid, id, message)
return True
def tender_in_progress(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state':'in_progress'} ,context=context)
- for (id,name) in self.name_get(cr, uid, ids):
- message = _('Tender') + " '" + name + "' "+ _(" is In Progress")
- self.log(cr, uid, id, message)
return True
def tender_reset(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state': 'draft'})
- for (id,name) in self.name_get(cr, uid, ids):
- message = _('Tender') + " '" + name + "' "+ _("is in draft state")
- self.log(cr, uid, id, message)
return True
def tender_done(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state':'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S')}, context=context)
- for (id,name) in self.name_get(cr, uid, ids):
- message = _('Tender') + " '" + name + "' "+ _("is done")
- self.log(cr, uid, id, message)
return True
purchase_requisition()
diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml
index d209ef6b3fd..2a30c3789df 100644
--- a/addons/purchase_requisition/purchase_requisition_view.xml
+++ b/addons/purchase_requisition/purchase_requisition_view.xml
@@ -152,6 +152,7 @@
tree,form
{"search_default_create_uid":uid,'search_default_draft': 1}
+ A purchase requisition is a step before the request for quotation. In a purchase requisition (or purchase tender), you can record the products you need to buy and trigger the creation of RfQs to supplier. After the negotiation, once you have reviewed all the supplier's offers, you can validate some and cancel others.
-
-
+
+
@@ -10,29 +10,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -46,12 +26,10 @@
-
-
+
-
@@ -65,15 +43,38 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
@@ -108,19 +109,18 @@
-
-
-
-
[[ repeatIn(objects,'requisition') ]]
- Purchase for Requisitions [[ requisition.name ]]
-
+
-
+ Purchase for Requisitions [[ requisition.name ]]
+
+
+
+
Requisition Reference
@@ -135,92 +135,88 @@
Origin
+
+
[[ requisition.name ]]
- [[ requisition.date_start ]]
+ [[ formatLang(requisition.date_start,date_time='True') ]]
- [[ requisition.exclusive=='multiple' and 'Multiple Requisitions' or requisition.exclusive=='exclusive' and 'Purchase Requisitions (exclusive)' ]]
+ [[ requisition.exclusive=='multiple' and 'Multiple Requisitions' or requisition.exclusive=='exclusive' and 'Purchase Requisitions (exclusive)' ]]
[[ requisition.origin ]]
-
+
-
-
-
+ Product Detail [[ requisition.line_ids==[] and removeParentNode('para') ]]
+
+
+
+ Description [[ requisition.line_ids==[] and removeParentNode('blockTable') ]]
+
+
+ Qty
+
+
+ Product UoM
+
+
+
- Product Detail
- [[ requisition.line_ids or removeParentNode('section') ]]
+ [[ requisition.line_ids==[] and removeParentNode('section') ]] [[ repeatIn(requisition.line_ids,'line_ids') ]]
+
- Description
+ [ [[ (line_ids.product_id and line_ids.product_id.code) or '' ]] ] [[ (line_ids.product_id and line_ids.product_id.name) or '' ]]
- Qty
+ [[ formatLang(line_ids.product_qty) ]]
- Product UoM
-
-
- [[ repeatIn(requisition.line_ids,'line_ids') ]]
-
- [[ line_ids.product_id.name ]]
-
-
- [[ line_ids.product_qty ]]
-
-
- [[ line_ids.product_uom_id.category_id.name ]]
+ [[ (line_ids.product_uom_id and line_ids.product_uom_id.category_id and line_ids.product_uom_id.category_id.name) or '' ]]
-
+
-
-
-
-
-
- Quotation Detail
- [[ requisition.purchase_ids or removeParentNode('section') ]]
+
+ Quotation Detail [[ requisition.purchase_ids ==[] and removeParentNode('para') ]]
+
- Order Reference
+ Supplier [[ requisition.purchase_ids ==[] and removeParentNode('blockTable') ]]
Date Ordered
- Supplier
-
-
- [[ repeatIn(requisition.purchase_ids,'purchase_ids') ]]
-
- [[ purchase_ids.name ]]
-
-
- [[ purchase_ids.date_order ]]
-
-
- [[ purchase_ids.partner_address_id.partner_id.name ]]
+ Order Reference
+
+ [[ requisition.purchase_ids ==[] and removeParentNode('section') ]] [[ repeatIn(requisition.purchase_ids,'purchase_ids') ]]
+
+
+
+ [[ (purchase_ids.partner_address_id and purchase_ids.partner_address_id.partner_id and purchase_ids.partner_address_id.partner_id.name) or '' ]]
+
+
+ [[ formatLang(purchase_ids.date_order,date='True') ]]
+
+
+ [[ purchase_ids.name ]]
+
+
+
-
-
-
-
-
-
\ No newline at end of file
diff --git a/addons/resource/resource_view.xml b/addons/resource/resource_view.xml
index 21c9b4c36c7..b8f3d14df56 100644
--- a/addons/resource/resource_view.xml
+++ b/addons/resource/resource_view.xml
@@ -209,7 +209,7 @@
tree,form
{}
- There you can find clusters of your resources type involved in a specific project phase as well as their workload.
+ Resources allows you to create and manage resources that should be involved in a specific project phase. It also allows you to set their efficiency level and workload based on their weekly working hours
diff --git a/addons/sale/i18n/mn.po b/addons/sale/i18n/mn.po
index 006f67fca37..d0ac621c5f7 100644
--- a/addons/sale/i18n/mn.po
+++ b/addons/sale/i18n/mn.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-09-29 11:07+0000\n"
-"Last-Translator: ub121 \n"
+"PO-Revision-Date: 2010-10-17 07:57+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Mongolian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-30 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:55+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: sale
@@ -58,6 +58,8 @@ msgid ""
"If you don't have enough stock available to deliver all at once, do you "
"accept partial shipments or not?"
msgstr ""
+"Хэрэв та бүгдийг нэгэн зэрэг багтаахад хангалтгүй агуулахтай бол хэсэгчилсэн "
+"барааг хүлээж авдаг уу эсвэл авдгүй юу?"
#. module: sale
#: selection:sale.order.line,type:0
@@ -84,7 +86,7 @@ msgstr "Таны нэхэмжлэл амжилттай үүслээ !"
#: view:sale.order:0
#: view:sale.order.line:0
msgid "Automatic Declaration"
-msgstr ""
+msgstr "Автомат мэдэгдэл"
#. module: sale
#: model:ir.actions.act_window,name:sale.action_order_line_tree3
@@ -281,6 +283,11 @@ msgid ""
"choose if you invoice based on ordered or shipped quantities. If the product "
"is a service, shipped quantities means hours spent on the associated tasks."
msgstr ""
+"Борлуулалтын захиалга нь автоматаар нэхэмжлэлийн баталгааг үүсгэдэг. "
+"Захиалсан болон хүргэж өгсөн тоо хэмжээ нь адилхан биш байх боломжтой. Хэрэв "
+"нэхэмжлэл гаргах бол захиалагдсан эсвэл тээвэрлэгдсэн тоо хэмжээн дээр "
+"суурилан гаргах хэрэгтэй. Хэрэв бүтээгдэхүүн үйлчилгээ бол тээвэрлэгдсэн тоо "
+"хэмжээ нь холбоотой дааллгавар дээр зарцуулсан цаг болно."
#. module: sale
#: selection:sale.order.line,state:0
@@ -386,6 +393,8 @@ msgid ""
"When you select Shipping Ploicy = 'Automatic Invoice after delivery' , it "
"will automatic create after delivery."
msgstr ""
+"Тээвэрлэлтийн удирдамж нь = 'Хүргэлтийн дараах автомат нэхэмжлэл ' гэсэн "
+"сонголттой үед хүргэлтийн дараа автоматаар үүсэх болно."
#. module: sale
#: selection:sale.order,picking_policy:0
@@ -524,7 +533,7 @@ msgstr "Нэхэмжлэлийг бүлэглэх"
#: model:ir.actions.act_window,name:sale.action_order_tree5
#: model:ir.ui.menu,name:sale.menu_action_order_tree5
msgid "All Quotations"
-msgstr ""
+msgstr "Бүх ханш"
#. module: sale
#: field:sale.order.line,discount:0
@@ -540,18 +549,18 @@ msgstr "Ноорог нэхэмжлэл нягтлангаар хянагдах
#: model:ir.actions.act_window,name:sale.action_order_tree3
#: model:ir.ui.menu,name:sale.menu_action_order_tree3
msgid "Sales Order To Be Invoiced"
-msgstr ""
+msgstr "Борлуулалтын захаилга нэхэмжлэгдсэн байх"
#. module: sale
#: model:process.node,note:sale.process_node_saleorderprocurement0
msgid "Procurement for each line"
-msgstr ""
+msgstr "Мөр бүрээр татан авалт хийх"
#. module: sale
#: model:ir.actions.act_window,name:sale.action_order_tree10
#: model:ir.ui.menu,name:sale.menu_action_order_tree10
msgid "My Quotations"
-msgstr ""
+msgstr "Миний ханш"
#. module: sale
#: wizard_view:sale.advance_payment_inv,create:0
@@ -566,17 +575,17 @@ msgstr "Захиалгын шугам"
#. module: sale
#: field:sale.config.picking_policy,picking_policy:0
msgid "Packing Default Policy"
-msgstr ""
+msgstr "Савлах заяамал удирдамж"
#. module: sale
#: model:process.node,note:sale.process_node_saleorder0
msgid "Manages the delivery and invoicing progress"
-msgstr ""
+msgstr "Хүргэлт болон нэхэмжлэх үйл ажиллагааг удирдах"
#. module: sale
#: field:sale.config.picking_policy,order_policy:0
msgid "Shipping Default Policy"
-msgstr ""
+msgstr "Тээвэрлэлтийн заяамал арга"
#. module: sale
#: field:sale.order.line,product_packaging:0
@@ -625,7 +634,7 @@ msgstr "Нэхэмжилсэн"
#. module: sale
#: model:ir.actions.wizard,name:sale.advance_payment
msgid "Advance Invoice"
-msgstr ""
+msgstr "Урьдчилсан нэхэмжлэл"
#. module: sale
#: field:sale.order,state:0
@@ -636,7 +645,7 @@ msgstr "Төлөв"
#: model:ir.actions.act_window,name:sale.action_order_line_tree2
#: model:ir.ui.menu,name:sale.menu_action_order_line_tree2
msgid "Uninvoiced Lines"
-msgstr ""
+msgstr "Нэхэмжлэлгүй мөр"
#. module: sale
#: model:ir.actions.todo,note:sale.config_wizard_step_sale_picking_policy
@@ -669,7 +678,7 @@ msgstr ""
#: model:ir.actions.act_window,name:sale.action_order_tree7
#: model:ir.ui.menu,name:sale.menu_action_order_tree7
msgid "My sales in shipping exception"
-msgstr ""
+msgstr "Миний борлуулалтын алдаатай тээвэрлэлт"
#. module: sale
#: view:sale.config.picking_policy:0
@@ -705,7 +714,7 @@ msgstr "Засварласан нийлүүлэлт"
#. module: sale
#: selection:sale.order,order_policy:0
msgid "Shipping & Manual Invoice"
-msgstr ""
+msgstr "Тээвэрлэх болон нэхэмжлэх заавар"
#. module: sale
#: model:process.transition,name:sale.process_transition_saleorderprocurement0
@@ -716,7 +725,7 @@ msgstr "Борлуулалт нийлүүлэлт"
#. module: sale
#: view:sale.config.picking_policy:0
msgid "Configure Sale Order Logistic"
-msgstr ""
+msgstr "Борлуулалтын захиалгын Ложистик тохиргоо"
#. module: sale
#: field:sale.order,amount_untaxed:0
@@ -751,7 +760,7 @@ msgstr "Урьдчилсан нэхэмжлэл үүсгэх"
#. module: sale
#: model:process.node,note:sale.process_node_saleprocurement0
msgid "One procurement for each product."
-msgstr ""
+msgstr "Бүтээгдэхүүн бүр дээр нэг татан авалт"
#. module: sale
#: model:ir.actions.act_window,name:sale.action_order_form
@@ -785,7 +794,7 @@ msgstr "Үнэ бүүралт"
#. module: sale
#: model:product.template,name:sale.advance_product_0_product_template
msgid "Advance Product"
-msgstr ""
+msgstr "Төлсөн бүтээгдэхүүн"
#. module: sale
#: model:process.transition,note:sale.process_transition_invoice0
@@ -856,7 +865,7 @@ msgstr "Зөвхөн хүргэх захиалга"
#: view:sale.order:0
#: view:sale.order.line:0
msgid "Sales order lines"
-msgstr ""
+msgstr "Борлуулалтын захиалгын мөр"
#. module: sale
#: field:sale.order.line,sequence:0
@@ -866,7 +875,7 @@ msgstr "Дараалал"
#. module: sale
#: model:ir.actions.act_window,name:sale.act_res_partner_2_sale_order
msgid "Sales"
-msgstr ""
+msgstr "Борлуулалт"
#. module: sale
#: view:sale.order:0
@@ -968,12 +977,12 @@ msgstr ""
#. module: sale
#: model:process.transition,note:sale.process_transition_saleinvoice0
msgid "Confirm sale order and Create invoice."
-msgstr ""
+msgstr "Борлуулалтын захиалгыг батлах болон нэхэмжлэл үүсгэх"
#. module: sale
#: selection:sale.config.picking_policy,step:0
msgid "Packing List & Delivery Order"
-msgstr ""
+msgstr "Савлагааны жагсаалт ба Хүргэлтийн захаилга"
#. module: sale
#: selection:sale.order.line,state:0
@@ -1005,7 +1014,7 @@ msgstr ""
#. module: sale
#: view:sale.config.picking_policy:0
msgid "Set Default"
-msgstr ""
+msgstr "Үндсэн утга болгох"
#. module: sale
#: view:sale.order:0
@@ -1087,13 +1096,13 @@ msgstr "Эрх шилжүүлэхийг цуцлах"
#. module: sale
#: selection:sale.order,order_policy:0
msgid "Invoice from the Packing"
-msgstr ""
+msgstr "Савлагааны нэхэмжлэл"
#. module: sale
#: model:ir.actions.wizard,name:sale.wizard_sale_order_line_invoice
#: model:ir.actions.wizard,name:sale.wizard_sale_order_make_invoice
msgid "Make invoices"
-msgstr ""
+msgstr "Нэхэмжлэл үүсгэх"
#. module: sale
#: help:sale.order,partner_order_id:0
@@ -1135,7 +1144,7 @@ msgstr "Нэхэмжлэх арга"
#: model:ir.actions.act_window,name:sale.action_order_tree_new
#: model:ir.ui.menu,name:sale.menu_action_order_tree_new
msgid "New Quotation"
-msgstr ""
+msgstr "Шинэ ханш"
#. module: sale
#: view:sale.order:0
@@ -1156,7 +1165,7 @@ msgstr "Барааны зарах нэгж"
#. module: sale
#: selection:sale.order,state:0
msgid "Manual In Progress"
-msgstr ""
+msgstr "Үйл явцын заавар"
#. module: sale
#: field:sale.order.line,product_uom:0
diff --git a/addons/sale/i18n/ru.po b/addons/sale/i18n/ru.po
index 556ed670eaf..1aeb2376daa 100644
--- a/addons/sale/i18n/ru.po
+++ b/addons/sale/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-09-30 06:52+0000\n"
+"PO-Revision-Date: 2010-10-17 07:57+0000\n"
"Last-Translator: Chertykov Denis \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-01 08:47+0000\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:55+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: sale
@@ -762,7 +762,7 @@ msgstr ""
#. module: sale
#: model:process.node,note:sale.process_node_saleprocurement0
msgid "One procurement for each product."
-msgstr ""
+msgstr "Одна закупка для каждого товара."
#. module: sale
#: model:ir.actions.act_window,name:sale.action_order_form
@@ -773,12 +773,12 @@ msgstr "Заказы"
#. module: sale
#: field:product.product,pricelist_sale:0
msgid "Sale Pricelists"
-msgstr ""
+msgstr "Каталоги продаж"
#. module: sale
#: selection:sale.config.picking_policy,picking_policy:0
msgid "Direct Delivery"
-msgstr ""
+msgstr "Прямая доставка"
#. module: sale
#: view:sale.order:0
@@ -831,7 +831,7 @@ msgstr "Заказы в процессе выполнения"
#. module: sale
#: model:process.transition.action,name:sale.process_transition_action_assign0
msgid "Assign"
-msgstr ""
+msgstr "Назначить"
#. module: sale
#: view:sale.order:0
@@ -905,7 +905,7 @@ msgstr "Цена за ед."
#. module: sale
#: field:sale.order,fiscal_position:0
msgid "Fiscal Position"
-msgstr ""
+msgstr "Налоговая позиция"
#. module: sale
#: rml:sale.order:0
diff --git a/addons/sale/report/sale_order.rml b/addons/sale/report/sale_order.rml
index 43498b4a32e..515aa9f74d8 100644
--- a/addons/sale/report/sale_order.rml
+++ b/addons/sale/report/sale_order.rml
@@ -1,6 +1,6 @@
-
-
+
+
@@ -132,22 +132,22 @@
Shipping address :
- [[ o.partner_id.title.name or '' ]] [[ o.partner_id.name ]]
- [[ o.partner_shipping_id.street ]]
- [[ o.partner_shipping_id.street2 or removeParentNode('para') ]]
- [[ o.partner_shipping_id.zip or '' ]] [[ o.partner_shipping_id.city or '' ]]
- [[ (o.partner_shipping_id.state_id and o.partner_shipping_id.state_id.name) or removeParentNode('para') ]]
- [[ (o.partner_shipping_id.country_id and o.partner_shipping_id.country_id.name) or '' ]]
+ [[ (o.partner_id and o.partner_id.title and o.partner_id.title.name) or '' ]] [[ (o.partner_id and o.partner_id.name) or '' ]]
+ [[ (o.partner_shipping_id and o.partner_shipping_id.street) or '' ]]
+ [[ (o.partner_shipping_id and o.partner_shipping_id.street2) or removeParentNode('para') ]]
+ [[ (o.partner_shipping_id and o.partner_shipping_id.zip) or '' ]] [[ (o.partner_shipping_id and o.partner_shipping_id.city) or '' ]]
+ [[ (o.partner_shipping_id and o.partner_shipping_id.state_id and o.partner_shipping_id.state_id.name) or removeParentNode('para') ]]
+ [[ (o.partner_shipping_id and o.partner_shipping_id.country_id and o.partner_shipping_id.country_id.name) or '' ]]
Invoice address :
- [[ o.partner_invoice_id.title.name or '' ]] [[ o.partner_invoice_id.name or '' ]]
- [[ o.partner_invoice_id.street ]]
- [[ (o.partner_invoice_id.street2 and (', %s' % o.partner_invoice_id.street2)) or removeParentNode('para') ]]
- [[ o.partner_invoice_id.zip or '' ]] [[ o.partner_invoice_id.city or '' ]]
- [[ (o.partner_invoice_id.state_id and o.partner_invoice_id.state_id.name) or removeParentNode('para') ]]
- [[ o.partner_invoice_id.country_id and o.partner_invoice_id.country_id.name or '' ]]
+ [[ (o.partner_invoice_id and o.partner_invoice_id.title and o.partner_invoice_id.title.name) or '' ]] [[ (o.partner_invoice_id and o.partner_invoice_id.name) or '' ]]
+ [[ (o.partner_invoice_id and o.partner_invoice_id.street) or '' ]]
+ [[ (o.partner_invoice_id and o.partner_invoice_id.street2) or removeParentNode('para') ]]
+ [[ (o.partner_invoice_id and o.partner_invoice_id.zip) or '' ]] [[ (o.partner_invoice_id and o.partner_invoice_id.city) or '' ]]
+ [[ (o.partner_invoice_id and o.partner_invoice_id.state_id and o.partner_invoice_id.state_id.name) or removeParentNode('para') ]]
+ [[ (o.partner_invoice_id and o.partner_invoice_id.country_id and o.partner_invoice_id.country_id.name) or '' ]]
@@ -155,17 +155,17 @@
- [[ o.partner_id.title.name or '' ]] [[ o.partner_id.name ]]
- [[ o.partner_order_id.street ]]
- [[ o.partner_order_id.street2 or removeParentNode('para') ]]
- [[ o.partner_order_id.zip or '' ]] [[ o.partner_order_id.city or '' ]]
- [[ (o.partner_order_id.state_id and o.partner_order_id.state_id.name) or removeParentNode('para')]] [[ (o.partner_order_id.country_id and o.partner_order_id.country_id.name) or '' ]]
+ [[ (o.partner_id and o.partner_id.title and o.partner_id.title.name) or '' ]] [[ (o.partner_id and o.partner_id.name) or '' ]]
+ [[ (o.partner_order_id and o.partner_order_id.street) or '' ]]
+ [[ (o.partner_order_id and o.partner_order_id.street2) or removeParentNode('para') ]]
+ [[ (o.partner_order_id and o.partner_order_id.zip) or '' ]] [[ (o.partner_order_id and o.partner_order_id.city) or '' ]]
+ [[ (o.partner_order_id and o.partner_order_id.state_id and o.partner_order_id.state_id.name) or removeParentNode('para')]] [[ (o.partner_order_id and o.partner_order_id.country_id and o.partner_order_id.country_id.name) or '' ]]
- Tel. : [[ o.partner_order_id.phone or removeParentNode('para') ]]
- Fax : [[ o.partner_order_id.fax or removeParentNode('para') ]]
- TVA : [[ o.partner_id.vat or removeParentNode('para') ]]
+ Tel. : [[ (o.partner_order_id and o.partner_order_id.phone) or removeParentNode('para') ]]
+ Fax : [[ (o.partner_order_id and o.partner_order_id.fax) or removeParentNode('para') ]]
+ TVA : [[ (o.partner_id and o.partner_id.vat) or removeParentNode('para') ]]
@@ -206,10 +206,10 @@
[[ formatLang(o.date_order,date = True) ]]
- [[ o.user_id.name ]]
+ [[ (o.user_id and o.user_id.name) or '' ]]
- [[ o.payment_term.name ]]
+ [[ (o.payment_term and o.payment_term.name) or '' ]]
@@ -353,7 +353,7 @@
- [[ format((o.partner_id.property_payment_term and o.partner_id.property_payment_term.note) or '') ]]
+ [[ format((o.partner_id and o.partner_id.property_payment_term and o.partner_id.property_payment_term.note) or '') ]]
diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml
index 87f134e857c..c4cc59f7b9a 100644
--- a/addons/sale/report/sale_report_view.xml
+++ b/addons/sale/report/sale_report_view.xml
@@ -102,7 +102,7 @@
-
+
@@ -125,7 +125,7 @@
{'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
- With Sales Analysis consult your sales total amount suits to different group criteria (salesman, partner, product, etc.)
+ This report performs analysis on your quotations and sales orders. Analysis check your sales revenues and sort it by different group criteria (salesman, partner, product, etc.) Use this report to perform analysis on sales not having invoiced yet. If you want to analyse your turnover, you should use the Invoice Analysis report in the Accounting application.
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index e8ccb657bc2..409be07a765 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -54,7 +54,7 @@ def _incoterm_get(self, cr, uid, context=None):
class sale_order(osv.osv):
_name = "sale.order"
_description = "Sale Order"
-
+
def copy(self, cr, uid, id, default=None, context=None):
if context is None:
context = {}
@@ -331,7 +331,7 @@ class sale_order(osv.osv):
wf_service.trg_delete(uid, 'sale.order', inv_id, cr)
wf_service.trg_create(uid, 'sale.order', inv_id, cr)
for (id,name) in self.name_get(cr, uid, ids):
- message = _('Sale order ') + " '" + name + "' "+ _("is in draft state")
+ message = _("The sale order '%s' has been set in draft state.") %(name,)
self.log(cr, uid, id, message)
return True
@@ -486,9 +486,9 @@ class sale_order(osv.osv):
'context': "{'type':'out_invoice'}",
'type': 'ir.actions.act_window',
'nodestroy' :True,
- 'target': 'new',
+ 'target': 'current',
'res_id': inv_ids and inv_ids[0] or False,
- }
+ }
return result
@@ -618,7 +618,7 @@ class sale_order(osv.osv):
wf_service.trg_validate(uid, 'account.invoice', inv, 'invoice_cancel', cr)
sale_order_line_obj.write(cr, uid, [l.id for l in sale.order_line],
{'state': 'cancel'})
- message = _('Sale order') + " '" + sale.name + _(" is cancelled")
+ message = _("The sale order '%s' has been cancelled.") % (sale.name,)
self.log(cr, uid, sale.id, message)
self.write(cr, uid, ids, {'state': 'cancel'})
return True
@@ -630,7 +630,7 @@ class sale_order(osv.osv):
else:
self.write(cr, uid, [o.id], {'state': 'progress', 'date_confirm': time.strftime('%Y-%m-%d')})
self.pool.get('sale.order.line').button_confirm(cr, uid, [x.id for x in o.order_line])
- message = _('Quotation') + " '" + o.name + "' "+ _("is converted to Sale order")
+ message = _("The quotation '%s' has been converted to a sale order.") % (o.name,)
self.log(cr, uid, o.id, message)
return True
@@ -989,8 +989,6 @@ class sale_order_line(osv.osv):
raise osv.except_osv(
_('Could not cancel sale order line!'),
_('You must first cancel stock moves attached to this sale order line.'))
- message = _('Sale order line') + " '" + line.name + "' "+_("is cancelled")
- self.log(cr, uid, id, message)
return self.write(cr, uid, ids, {'state': 'cancel'})
def button_confirm(self, cr, uid, ids, context=None):
diff --git a/addons/sale/sale_installer.py b/addons/sale/sale_installer.py
index 4197c0a370b..a8cc5432020 100644
--- a/addons/sale/sale_installer.py
+++ b/addons/sale/sale_installer.py
@@ -28,11 +28,8 @@ class sale_installer(osv.osv_memory):
_columns = {
'delivery': fields.boolean('Delivery Costs',
help="Allows you to compute delivery costs on your quotations."),
- 'sale_journal': fields.boolean('Sales and deliveries by journal',
- help="Allows you to categorise your "
- "sales and deliveries (picking lists) between different journals. "
- "This module is very helpful for bigger companies that "
- "work by departments."),
+ 'sale_journal': fields.boolean('Invoicing journals',
+ help="Allows you to group and invoice your delivery orders according to different invoicing types: daily, weekly, etc."),
'sale_layout': fields.boolean('Sales Order Layout Improvement',
help="Provides some features to improve the layout of the Sales Order reports."),
'sale_margin': fields.boolean('Margins in Sales Orders',
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index 85dd4c86c27..b9eabcaa02e 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -1,9 +1,9 @@
-
+ groups="base.group_sale_salesman,base.group_sale_manager"/>
+
@@ -46,11 +46,14 @@
form
tree,form
+ If you have more than one shops reselling your company products, you can create and manage them from here. Whenever you will record a new quotation or sale order, it has to be linked to a shop. The shop also defines the warehouse from which the products will be delivered for each particular sale.
+
+ parent="menu_config_sale" sequence="0" />
sale.order.calendar
@@ -197,7 +200,8 @@
-
+
@@ -206,7 +210,7 @@
-
+
@@ -288,12 +292,7 @@
form
tree,form,calendar,graph
- The sales order manages the invoicing, the product fullfilment and the
-delivery processes. OpenERP can handle products, services and
-consumables so that a sales order can trigger tasks, manufacturing
-orders, purchases, etc. It support several invoicing methods according
-to your configuration: from the sales order, from the pickings, etc.
-
+ Sales Orders helps you manage quotations and orders done with your customers. OpenERP suggests that you to start by creating a quotation. Once the order is confirmed, the quotation is converted into a Sale Order. OpenERP can handle several types of products so that a sales order can trigger tasks, delivery orders, manufacturing orders, purchases and so on. Based on the configuration of the sale order, a draft invoice will be generated so that you just have to confirm it when you want to bill your customer.
@@ -378,14 +377,15 @@ to your configuration: from the sales order, from the pickings, etc.
-
+
+
+
-
+
-
@@ -398,20 +398,21 @@ to your configuration: from the sales order, from the pickings, etc.
-
+ states="confirmed,exception"/>
+
+ states="confirmed,exception"
+ icon="gtk-go-forward" />
@@ -448,10 +449,15 @@ to your configuration: from the sales order, from the pickings, etc.
search
-
+
{"search_default_uninvoiced":1}
- Lines to invoice opens a search view with sales order and their status.
+ Here is a list of each sales order line to be invoiced. This view allows you to invoice sales orders partially, by lines of sales order. You don't need this list if you invoice based on the delivery orders or if you invoice sales totally.
@@ -518,7 +524,7 @@ to your configuration: from the sales order, from the pickings, etc.
src_model="product.product"
groups="base.group_extended"/>
-
@@ -534,8 +540,7 @@ to your configuration: from the sales order, from the pickings, etc.
Sales Application Configuration
- Configure Sales Order Logistic
+ Configure Sales Order Logistic
Setup your sales workflow and default values.
diff --git a/addons/sale/security/ir.model.access.csv b/addons/sale/security/ir.model.access.csv
index 3675ccf32ae..11718051d04 100644
--- a/addons/sale/security/ir.model.access.csv
+++ b/addons/sale/security/ir.model.access.csv
@@ -1,8 +1,8 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_sale_shop","sale.shop","model_sale_shop","base.group_sale_salesman",1,0,0,0
+"access_sale_shop","sale.shop","model_sale_shop","base.group_user",1,0,0,0
"access_sale_order","sale.order","model_sale_order","base.group_sale_salesman",1,1,1,0
"access_sale_order_line","sale.order.line","model_sale_order_line","base.group_sale_salesman",1,1,1,1
-"access_sale_shop_admin","sale.shop","model_sale_shop","base.group_system",1,1,1,1
+"access_account_invoice_tax_salesman","account_invoice_tax salesman","account.model_account_invoice_tax","base.group_sale_salesman",1,1,1,0
"access_account_invoice_salesman","account_invoice salesman","account.model_account_invoice","base.group_sale_salesman",1,1,1,0
"access_account_invoice_manager","account_invoice manager","account.model_account_invoice","base.group_sale_manager",1,1,1,1
"access_account_invoice_line_salesman","account_invoice.line salesman","account.model_account_invoice_line","base.group_sale_salesman",1,1,1,0
@@ -23,7 +23,6 @@
"access_sale_account_journal","account.journal sale order.user","account.model_account_journal","base.group_sale_salesman",1,0,0,0
"access_res_partner_sale_user","res.partner.sale.user","base.model_res_partner","base.group_sale_salesman",1,0,0,0
"access_res_partner_sale_manager","res.partner.sale.user","base.model_res_partner","base.group_sale_manager",1,0,0,0
-"access_res_partner_sale_system","res.partner.sale.system","base.model_res_partner","base.group_system",1,0,0,0
"access_report_stock_move_sales","report.stock.move.sale","stock.model_report_stock_move","base.group_sale_manager",1,1,1,1
"access_stock_picking_sales","stock.picking.sales","stock.model_stock_picking","base.group_sale_manager",1,1,1,1
"access_product_template_sale_user","product.template sale use","product.model_product_template","base.group_sale_salesman",1,0,0,0
@@ -36,18 +35,8 @@
"access_res_partner_address_user","res.partner.address.user","base.model_res_partner_address","base.group_sale_salesman",1,0,0,0
"access_account_tax_user","account.tax.user","account.model_account_tax","base.group_sale_salesman",1,1,1,0
"access_product_packaging_user","product.packaging.user","product.model_product_packaging","base.group_sale_salesman",1,1,1,0
-"access_res_country_system","res.country system","base.model_res_country","base.group_system",1,1,1,1
-"access_res_country_state_system","res.country.state system","base.model_res_country_state","base.group_system",1,1,1,1
-"access_res_partner_title_system","res.partner.title system","base.model_res_partner_title","base.group_system",1,1,1,1
-"access_sale_order_system","sale.order.system","model_sale_order","base.group_system",1,0,0,0
-"access_sale_order_line_system","sale.order.line.system","model_sale_order_line","base.group_system",1,0,0,0
-"access_product_product_system","product.product.system","product.model_product_product","base.group_system",1,0,0,0
-"access_stock_picking_system","stock.picking.system","stock.model_stock_picking","base.group_system",1,0,0,0
-"access_sale_report_system","sale.report.system","model_sale_report","base.group_system",1,0,0,0
-"access_ir_attachment_system","ir.attachment.system","base.model_ir_attachment","base.group_system",1,0,0,0
"access_ir_attachment_sales","ir.attachment.sales","base.model_ir_attachment","base.group_sale_salesman",1,1,1,0
"access_ir_attachment_manager","ir.attachment.manager","base.model_ir_attachment","base.group_sale_manager",1,1,1,1
-"access_res_partner_bank_type_system","res.partner.bank.type.system","base.model_res_partner_bank_type","base.group_system",1,0,0,0
"access_stock_warehouse_manager","stock.warehouse.manager","stock.model_stock_warehouse","base.group_sale_manager",1,0,0,0
"access_product_uom_manager","product.uom.manager","product.model_product_uom","base.group_sale_manager",1,0,0,0
"access_product_supplierinfo_manager","product.supplierinfo.manager","product.model_product_supplierinfo","base.group_sale_manager",1,0,0,0
@@ -60,6 +49,5 @@
"access_res_partner_bank_type_field_user","res.partner.bank.type.field.user","base.model_res_partner_bank_type_field","base.group_sale_salesman",1,0,0,0
"access_product_uom_user","product.uom.user","product.model_product_uom","base.group_sale_salesman",1,0,0,0
"access_product_supplierinfo_user","product.supplierinfo.user","product.model_product_supplierinfo","base.group_sale_salesman",1,0,0,0
-"access_res_partner_bank_type_field_system","res.partner.bank.type.field.system","base.model_res_partner_bank_type_field","base.group_system",1,0,0,0
"access_product_pricelist_sale_user","product.pricelist.sale.user","product.model_product_pricelist","base.group_sale_salesman",1,0,0,0
"access_account_account_salesman","account_account salesman","account.model_account_account","base.group_sale_salesman",1,0,0,0
diff --git a/addons/sale/stock_view.xml b/addons/sale/stock_view.xml
index dddcad07932..4075c523cb9 100644
--- a/addons/sale/stock_view.xml
+++ b/addons/sale/stock_view.xml
@@ -25,6 +25,7 @@
+
@@ -61,5 +63,18 @@
+
+
+ Deliveries to Invoice
+ stock.picking
+ ir.actions.act_window
+ form
+ tree,form,calendar
+ [('type','=','out')]
+ {'contact_display': 'partner_address', 'search_default_to_invoice': 1, 'search_default_done': 1}
+
+
+
+
diff --git a/addons/sale/test/invoice_on_shipped_qty.yml b/addons/sale/test/invoice_on_shipped_qty.yml
index ab24c8541fd..3ed4387067a 100644
--- a/addons/sale/test/invoice_on_shipped_qty.yml
+++ b/addons/sale/test/invoice_on_shipped_qty.yml
@@ -65,24 +65,16 @@
'product_uom': move.product_uom.id,
}
self.do_partial(cr, uid, [pick.id],partial_datas)
--
- Then I create the invoice from the two partial picking
--
- !record {model: stock.invoice.onshipping, id: stock_invoice_onshipping_6}:
- invoice_date: '2010-07-17'
- journal_id: account.sales_journal
- type: out_invoice
-
Then I click on 'Create Invoices' button
-
!python {model: stock.invoice.onshipping}: |
sale_obj = self.pool.get('sale.order')
sale_id = sale_obj.browse(cr, uid, ref("sale_order_so6"))
- picking_obj = self.pool.get('stock.picking')
- ids = picking_obj.search(cr, uid, [('origin', '=', sale_id.name)])
- self.create_invoice(cr, uid, [ref("stock_invoice_onshipping_6")], {"lang": "en_US",
- "search_default_available": 1, "tz": False, "active_model": "stock.picking",
- "contact_display": "partner", "active_ids": ids, "active_id": ids[0]})
+ ids = [x.id for x in sale_id.picking_ids]
+ wiz_id = self.create(cr, uid, {'invoice_date': '2010-07-17', 'journal_id': ref('account.sales_journal')},
+ {'active_ids': ids})
+ self.create_invoice(cr, uid, [wiz_id], {"active_ids": ids})
-
I verify whether the invoice has been generated for SO
-
diff --git a/addons/sale/test/picking_order_policy.yml b/addons/sale/test/picking_order_policy.yml
index c3f4ba87aaf..b12bddd7ecc 100644
--- a/addons/sale/test/picking_order_policy.yml
+++ b/addons/sale/test/picking_order_policy.yml
@@ -58,24 +58,16 @@
'product_uom': move.product_uom.id,
}
self.do_partial(cr, uid, [pick.id],partial_datas)
--
- Then I create invoice from picking
--
- !record {model: stock.invoice.onshipping, id: stock_invoice_onshipping_0}:
- invoice_date: '2010-07-15'
- journal_id: account.sales_journal
- type: out_invoice
-
Then I click on 'Create Invoices' button
-
!python {model: stock.invoice.onshipping}: |
sale_obj=self.pool.get('sale.order')
sale_id=sale_obj.browse(cr, uid, ref("sale_order_so7"))
- picking_obj = self.pool.get('stock.picking')
- ids = picking_obj.search(cr, uid, [('origin', '=', sale_id.name)])
- self.create_invoice(cr, uid, [ref("stock_invoice_onshipping_0")], {"lang": "en_US",
- "search_default_available": 1, "tz": False, "active_model": "stock.picking",
- "contact_display": "partner", "active_ids": ids, "active_id": ids[0]})
+ ids = [x.id for x in sale_id.picking_ids]
+ wiz_id = self.create(cr, uid, {'invoice_date': '2010-07-15', 'journal_id': ref('account.sales_journal')},
+ {'active_ids': ids})
+ self.create_invoice(cr, uid, [wiz_id], {"active_ids": ids})
-
I check that an invoice has been created.
-
diff --git a/addons/sale/wizard/sale_make_invoice.xml b/addons/sale/wizard/sale_make_invoice.xml
index e8e698e56b9..267167237bc 100644
--- a/addons/sale/wizard/sale_make_invoice.xml
+++ b/addons/sale/wizard/sale_make_invoice.xml
@@ -26,6 +26,7 @@
form
new
+ True
diff --git a/addons/sale/wizard/sale_make_invoice_advance.py b/addons/sale/wizard/sale_make_invoice_advance.py
index 0eac0308acc..0037c10405d 100644
--- a/addons/sale/wizard/sale_make_invoice_advance.py
+++ b/addons/sale/wizard/sale_make_invoice_advance.py
@@ -26,8 +26,9 @@ class sale_advance_payment_inv(osv.osv_memory):
_name = "sale.advance.payment.inv"
_description = "Sale Advance Payment Invoice"
_columns = {
- 'product_id': fields.many2one('product.product', 'Product', required=True),
- 'amount': fields.float('Unit Price', size=(16, 2), required=True),
+ 'product_id': fields.many2one('product.product', 'Advance Product', required=True,
+ help="Select a product of type service which is called 'Advance Product'. You may have to create it and set it as a default value on this field."),
+ 'amount': fields.float('Advance Amount', size=(16, 2), required=True, help="The amount to be invoiced in advance."),
'qtty': fields.float('Quantity', size=(16, 2), required=True),
}
_defaults = {
@@ -95,6 +96,7 @@ class sale_advance_payment_inv(osv.osv_memory):
}
inv_id = inv_obj.create(cr, uid, inv)
+ inv_obj.button_reset_taxes(cr, uid, [inv_id], context=context)
for inv in sale.invoice_ids:
ids_inv.append(inv.id)
@@ -168,7 +170,7 @@ class sale_open_invoice(osv.osv_memory):
tree_id = mod_obj._get_id(cr, uid, 'account', 'invoice_tree')
tree_res = mod_obj.browse(cr, uid, tree_id, context=context).res_id
return {
- 'name': 'Invoices',
+ 'name': _('Advance Invoice'),
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'account.invoice',
@@ -181,4 +183,4 @@ class sale_open_invoice(osv.osv_memory):
sale_open_invoice()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale/wizard/sale_make_invoice_advance.xml b/addons/sale/wizard/sale_make_invoice_advance.xml
index 6e192d31108..2cdcb9b8c99 100644
--- a/addons/sale/wizard/sale_make_invoice_advance.xml
+++ b/addons/sale/wizard/sale_make_invoice_advance.xml
@@ -2,26 +2,26 @@
- Deposit Invoice
+ Advance Invoice
sale.advance.payment.inv
form
-
+
-
+
-
-
+
+
- Deposit
+ Advance Invoice
ir.actions.act_window
sale.advance.payment.inv
form
@@ -34,15 +34,15 @@
sale.open.invoice
form
-
-
+
+
-
-
-
-
-
+
+
+
+
+
diff --git a/addons/sale_analytic_plans/i18n/sr.po b/addons/sale_analytic_plans/i18n/sr.po
index ceaa67abddb..5332a39285e 100644
--- a/addons/sale_analytic_plans/i18n/sr.po
+++ b/addons/sale_analytic_plans/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 20:30+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 08:33+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: sale_analytic_plans
diff --git a/addons/sale_journal/__init__.py b/addons/sale_journal/__init__.py
index b41a4be55d1..b05803da6c6 100644
--- a/addons/sale_journal/__init__.py
+++ b/addons/sale_journal/__init__.py
@@ -20,7 +20,4 @@
##############################################################################
import sale_journal
-import report
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale_journal/__openerp__.py b/addons/sale_journal/__openerp__.py
index 4fde94fc709..37fc05fd066 100644
--- a/addons/sale_journal/__openerp__.py
+++ b/addons/sale_journal/__openerp__.py
@@ -53,14 +53,9 @@
'update_xml': [
'security/ir.model.access.csv',
'sale_journal_view.xml',
- 'report/sale_journal_report_view.xml',
- 'report/picking_journal_report_view.xml',
],
'demo_xml': ['sale_journal_demo.xml'],
- 'test': [
- 'test/sale_journal.yml',
- 'test/picking_journal.yml',
- ],
+ 'test': [ ],
'installable': True,
'active': False,
'certificate': '0077661619085',
diff --git a/addons/sale_journal/report/__init__.py b/addons/sale_journal/report/__init__.py
deleted file mode 100644
index bfe23eb8cce..00000000000
--- a/addons/sale_journal/report/__init__.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# 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 .
-#
-##############################################################################
-
-import sale_journal_report
-import picking_journal_report
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/sale_journal/report/picking_journal_report.py b/addons/sale_journal/report/picking_journal_report.py
deleted file mode 100644
index 74c00367838..00000000000
--- a/addons/sale_journal/report/picking_journal_report.py
+++ /dev/null
@@ -1,88 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# 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 .
-#
-##############################################################################
-
-from osv import fields, osv
-import tools
-from decimal_precision import decimal_precision as dp
-
-
-class sale_journal_picking_report(osv.osv):
- """
- Picking list by journal and by invoice
- """
- _name = "sale.journal.picking.report"
- _description = "Picking lists"
- _auto = False
- _columns = {
- 'name': fields.char('Year', size=64, required=False, readonly=True),
- 'month': fields.selection([('01', 'January'), ('02', 'February'), ('03', 'March'), ('04', 'April'), ('05', 'May'), ('06', 'June'),
- ('07', 'July'), ('08', 'August'), ('09', 'September'), ('10', 'October'), ('11', 'November'), ('12', 'December')], 'Month', readonly=True),
-
- 'invoice_state':fields.selection([
- ("invoiced", "invoiced"),
- ("2binvoiced", "to be invoiced"),
- ("none", "None")
- ], "Invoice state", readonly=True),
- 'state': fields.selection([
- ('draft', 'draft'),
- ('auto', 'waiting'),
- ('confirmed', 'confirmed'),
- ('assigned', 'assigned'),
- ('done', 'done'),
- ('cancel', 'cancel'),
- ], 'State', readonly=True),
- 'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoicing method', readonly=True),
- 'journal_id': fields.many2one('sale_journal.picking.journal', 'Journal', readonly=True),
- 'quantity': fields.float('Quantities', readonly=True),
- 'price_total': fields.float('Total Price', readonly=True, digits_compute=dp.get_precision('Sale Price')),
- 'price_average': fields.float('Average Price', readonly=True, digits_compute=dp.get_precision('Sale Price')),
- 'count': fields.integer('# of Lines', readonly=True),
- }
- _order = 'journal_id, name desc, price_total desc'
-
- def init(self, cr):
- tools.drop_view_if_exists(cr, 'sale_journal_picking_report')
-
- cr.execute("""
- create or replace view sale_journal_picking_report as (
- select
- min(l.id) as id,
- to_char(s.date, 'YYYY') as name,
- to_char(s.date, 'MM') as month,
- s.state,
- s.invoice_state,
- s.invoice_type_id,
- s.journal_id,
- sum(l.product_qty) as quantity,
- count(*) as count,
- sum(l.product_qty*ol.price_unit*(1.0-ol.discount/100.0)) as price_total,
- (sum(l.product_qty*ol.price_unit*(1.0-ol.discount/100.0))/sum(l.product_qty))::decimal(16,2) as price_average
- from stock_picking s
- right join stock_move l on (s.id=l.picking_id)
- left join sale_order_line ol on (l.sale_line_id=ol.id)
- group by s.journal_id, s.invoice_type_id, to_char(s.date, 'YYYY'),to_char(s.date, 'MM'),s.state, s.invoice_state
- order by s.invoice_type_id, s.invoice_state, s.state
- )
- """)
-
-sale_journal_picking_report()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale_journal/report/picking_journal_report_view.xml b/addons/sale_journal/report/picking_journal_report_view.xml
deleted file mode 100644
index bcfa293a64c..00000000000
--- a/addons/sale_journal/report/picking_journal_report_view.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
-
-
-
- sale.journal.picking.report.tree
- sale.journal.picking.report
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sale.journal.picking.report.graph
- sale.journal.picking.report
- graph
-
-
-
-
-
-
-
-
-
-
-
-
- sale.journal.picking.report.search
- sale.journal.picking.report
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Statistics on picking to invoice
- sale.journal.picking.report
- ir.actions.act_window
- form
- tree,form
- [('invoice_state','=','2binvoiced'),('invoice_type_id','=',active_id)]
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/sale_journal/report/sale_journal_report.py b/addons/sale_journal/report/sale_journal_report.py
deleted file mode 100644
index 723a7f88722..00000000000
--- a/addons/sale_journal/report/sale_journal_report.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# 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 .
-#
-##############################################################################
-
-from osv import fields, osv
-import tools
-
-class sale_journal_report(osv.osv):
- _name = "sale.journal.report"
- _description = "Sales Orders by Journal"
- _auto = False
- _columns = {
- 'name': fields.char('Year', size=64, required=False, readonly=True),
- 'month':fields.selection([('01', 'January'), ('02', 'February'), ('03', 'March'), ('04', 'April'),
- ('05', 'May'), ('06', 'June'), ('07', 'July'), ('08', 'August'), ('09', 'September'),
- ('10', 'October'), ('11', 'November'), ('12', 'December')], 'Month', readonly=True),
- 'state': fields.selection([
- ('draft', 'Quotation'),
- ('waiting_date', 'Waiting Schedule'),
- ('manual', 'Manual in progress'),
- ('progress', 'In progress'),
- ('shipping_except', 'Shipping Exception'),
- ('invoice_except', 'Invoice Exception'),
- ('done', 'Done'),
- ('cancel', 'Cancel')
- ], 'Order State', readonly=True),
- 'journal_id': fields.many2one('sale_journal.sale.journal', 'Journal', readonly=True),
- 'quantity': fields.float('Quantities', readonly=True),
- 'price_total': fields.float('Total Price', readonly=True),
- 'price_average': fields.float('Average Price', readonly=True),
- 'count': fields.integer('# of Lines', readonly=True),
- }
-
- _order = 'journal_id, name desc,price_total desc'
-
- def init(self, cr):
- tools.drop_view_if_exists(cr, 'sale_journal_report')
- cr.execute("""
- create or replace view sale_journal_report as (
- select
- min(l.id) as id,
- to_char(s.date_order, 'YYYY') as name,
- to_char(s.date_order,'MM') as month,
- s.state,
- s.journal_id,
- sum(l.product_uom_qty) as quantity,
- count(*),
- sum(l.product_uom_qty*l.price_unit) as price_total,
- (sum(l.product_uom_qty*l.price_unit)/sum(l.product_uom_qty))::decimal(16,2) as price_average
- from sale_order s
- right join sale_order_line l on (s.id=l.order_id)
- group by s.journal_id , to_char(s.date_order, 'YYYY'),to_char(s.date_order, 'MM'), s.state
- )
- """)
-
-sale_journal_report()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale_journal/report/sale_journal_report_view.xml b/addons/sale_journal/report/sale_journal_report_view.xml
deleted file mode 100644
index 63caea90768..00000000000
--- a/addons/sale_journal/report/sale_journal_report_view.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
- sale.journal.report.tree
- sale.journal.report
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sale.journal.report.graph
- sale.journal.report
- graph
-
-
-
-
-
-
-
-
-
-
-
- sale.journal.report.search
- sale.journal.report
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/sale_journal/sale_journal.py b/addons/sale_journal/sale_journal.py
index 10f2606955a..09902b21099 100644
--- a/addons/sale_journal/sale_journal.py
+++ b/addons/sale_journal/sale_journal.py
@@ -39,181 +39,6 @@ class sale_journal_invoice_type(osv.osv):
}
sale_journal_invoice_type()
-class sale_journal(osv.osv):
- _name = 'sale_journal.sale.journal'
- _description = 'Sale Journal'
- _columns = {
- 'name': fields.char('Journal', size=64, required=True, states={'close':[('readonly',True)]}),
- 'code': fields.char('Code', size=16, required=True, states={'close':[('readonly',True)]}),
- 'user_id': fields.many2one('res.users', 'Responsible', required=True, states={'close':[('readonly',True)]}),
- 'date': fields.date('Journal date', required=True, states={'close':[('readonly',True)]}),
- 'date_created': fields.date('Creation date', readonly=True, required=True),
- 'date_close': fields.date('Close date ', readonly=True),
- 'sale_stats_ids': fields.one2many("sale.journal.report", "journal_id", 'Sale stats', readonly=True),
- 'state': fields.selection([
- ('draft','Draft'),
- ('open','Open'),
- ('cancel','Cancel'),
- ('confirm','Confirm'),
- ('close','Close'),
- ], 'State', required=True, readonly=True),
- 'note': fields.text('Note'),
- }
- _defaults = {
- 'date': time.strftime('%Y-%m-%d'),
- 'date_created': time.strftime('%Y-%m-%d'),
- 'user_id': lambda self,cr,uid,context: uid,
- 'state': lambda self,cr,uid,context: 'draft',
- }
-
- def button_sale_cancel(self, cr, uid, ids, context={}):
- self.write(cr, uid, ids, {'state':'cancel'})
- for id in ids:
- sale_ids = self.pool.get('sale.order').search(cr, uid, [('journal_id','=',id),('state','=','draft')])
- for saleid in sale_ids:
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'sale.order', saleid, 'cancel', cr)
- for (id,name) in self.name_get(cr, uid, ids):
- message = _('Sale order of Journal') + " '" + name + "' "+ _("is cancelled")
- self.log(cr, uid, id, message)
- return True
-
- def button_sale_confirm(self, cr, uid, ids, context={}):
- self.write(cr, uid, ids, {'state':'confirm'})
- for id in ids:
- sale_ids = self.pool.get('sale.order').search(cr, uid, [('journal_id','=',id),('state','=','draft')])
- for saleid in sale_ids:
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'sale.order', saleid, 'order_confirm', cr)
- for (id,name) in self.name_get(cr, uid, ids):
- message = _('Sale orders of Journal') + " '" + name + "' "+ _("is confirmed")
- self.log(cr, uid, id, message)
- return True
-
- def button_open(self, cr, uid, ids, context={}):
- self.write(cr, uid, ids, {'state':'open'})
- for (id,name) in self.name_get(cr, uid, ids):
- message = _('Sale orders of Journal') + " '" + name + "' "+ _("is opened")
- self.log(cr, uid, id, message)
- return True
-
- def button_draft(self, cr, uid, ids, context={}):
- self.write(cr, uid, ids, {'state':'draft'})
- for (id,name) in self.name_get(cr, uid, ids):
- message = _('Sale orders of Journal') + " '" + name + "' "+ _("is in draft state")
- self.log(cr, uid, id, message)
- return True
-
- def button_close(self, cr, uid, ids, context={}):
- self.write(cr, uid, ids, {'state':'close', 'date_close':time.strftime('%Y-%m-%d')})
- for (id,name) in self.name_get(cr, uid, ids):
- message = _('Sale orders of Journal') + " '" + name + "' "+ _("is closed")
- self.log(cr, uid, id, message)
- return True
- def button_reset(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids, {'state': 'draft'})
- for (id,name) in self.name_get(cr, uid, ids):
- message = _('Sale orders of Journal') + " '" + name + "' "+ _("is in draft state")
- self.log(cr, uid, id, message)
- return True
- def copy(self, cr, uid, id, default=None, context=None):
- """Overrides orm copy method
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of case’s IDs
- @param context: A standard dictionary for contextual values
- """
- if context is None:
- context = {}
- if default is None:
- default = {}
- default.update({'sale_stats_ids': []})
- return super(sale_journal, self).copy(cr, uid, id, default=default, context=context)
-
-sale_journal()
-
-class picking_journal(osv.osv):
- _name = 'sale_journal.picking.journal'
- _description = 'Picking Journal'
- _columns = {
- 'name': fields.char('Journal', size=64, required=True),
- 'code': fields.char('Code', size=16, required=True),
- 'user_id': fields.many2one('res.users', 'Responsible', required=True),
- 'date': fields.date('Journal date', required=True),
- 'date_created': fields.date('Creation date', readonly=True, required=True),
- 'date_close': fields.date('Close date', readonly=True),
- 'picking_stats_ids': fields.one2many("sale.journal.picking.report", "journal_id", 'Journal Stats', readonly=True),
- 'state': fields.selection([
- ('draft','Draft'),
- ('open','Open'),
- ('cancel','Cancel'),
- ('close','Close'),
- ('confirm','Confirm'),
- ], 'Creation date', required=True, readonly=True),
- 'note': fields.text('Note'),
- }
- _defaults = {
- 'date': time.strftime('%Y-%m-%d'),
- 'date_created': time.strftime('%Y-%m-%d'),
- 'user_id': lambda self,cr,uid,context: uid,
- 'state': lambda self,cr,uid,context: 'draft',
- }
- def button_picking_cancel(self, cr, uid, ids, context={}):
- self.write(cr, uid, ids, {'state':'cancel'})
- for id in ids:
- pick_ids = self.pool.get('stock.picking').search(cr, uid, [('journal_id','=',id)])
- for pickid in pick_ids:
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'stock.picking', pickid, 'button_cancel', cr)
- return True
-
- def button_open(self, cr, uid, ids, context={}):
- self.write(cr, uid, ids, {'state':'open'})
- return True
-
- def button_draft(self, cr, uid, ids, context={}):
- self.write(cr, uid, ids, {'state':'draft'})
- return True
-
- def button_close(self, cr, uid, ids, context={}):
- self.write(cr, uid, ids, {'state':'close', 'date_close':time.strftime('%Y-%m-%d')})
- return True
-
- def button_reset(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids, {'state': 'draft'})
- for (id,name) in self.name_get(cr, uid, ids):
- message = _('Sale orders of Journal') + " '" + name + "' "+ _("is in draft state")
- self.log(cr, uid, id, message)
- return True
-
- def button_picking_confirm(self, cr, uid, ids, context={}):
-
- self.write(cr, uid, ids, {'state':'confirm'})
- for id in ids:
- pick_ids = self.pool.get('stock.picking').search(cr, uid, [('journal_id','=',id)])
- for pickid in pick_ids:
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'stock.picking', pickid, 'button_confirm', cr)
- return True
-
- def copy(self, cr, uid, id, default=None, context=None):
- """Overrides orm copy method
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of case’s IDs
- @param context: A standard dictionary for contextual values
- """
- if context is None:
- context = {}
- if default is None:
- default = {}
- default.update({'picking_stats_ids': []})
- return super(picking_journal, self).copy(cr, uid, id, default=default, context=context)
-
-picking_journal()
-
#==============================================
# sale journal inherit
#==============================================
@@ -222,22 +47,20 @@ class res_partner(osv.osv):
_inherit = 'res.partner'
_columns = {
'property_invoice_type': fields.property(
- 'sale_journal.invoice.type',
- type = 'many2one',
- relation = 'sale_journal.invoice.type',
- string = "Invoicing Method",
- method = True,
- view_load = True,
- group_name = "Accounting Properties",
- help = "The type of journal used for sales and picking."),
+ 'sale_journal.invoice.type',
+ type = 'many2one',
+ relation = 'sale_journal.invoice.type',
+ string = "Invoicing Method",
+ method = True,
+ view_load = True,
+ group_name = "Accounting Properties",
+ help = "The type of journal used for sales and picking."),
}
res_partner()
class picking(osv.osv):
_inherit = "stock.picking"
_columns = {
- 'journal_id': fields.many2one('sale_journal.picking.journal', 'Picking Journal', domain=[('state','!=', 'close')],help="Picking Journal"),
- 'sale_journal_id': fields.many2one('sale_journal.sale.journal', 'Sale Journal'),
'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoice Type', readonly=True)
}
picking()
@@ -245,7 +68,6 @@ picking()
class sale(osv.osv):
_inherit = "sale.order"
_columns = {
- 'journal_id': fields.many2one('sale_journal.sale.journal', 'Journal', domain=[('state','not in', ('done', 'draft''cancel'))]),
'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoice Type')
}
def action_ship_create(self, cr, uid, ids, *args):
@@ -253,18 +75,16 @@ class sale(osv.osv):
for order in self.browse(cr, uid, ids, context={}):
pids = [ x.id for x in order.picking_ids]
self.pool.get('stock.picking').write(cr, uid, pids, {
- 'invoice_type_id': order.invoice_type_id.id,
- 'sale_journal_id': order.journal_id.id
+ 'invoice_type_id': order.invoice_type_id and order.invoice_type_id.id or False,
})
return result
def onchange_partner_id(self, cr, uid, ids, part):
result = super(sale, self).onchange_partner_id(cr, uid, ids, part)
if part:
- itype = self.pool.get('res.partner').browse(cr, uid, part).property_invoice_type.id
- result['value']['invoice_type_id'] = itype
+ itype = self.pool.get('res.partner').browse(cr, uid, part).property_invoice_type
+ if itype:
+ result['value']['invoice_type_id'] = itype.id
return result
sale()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/sale_journal/sale_journal_data.xml b/addons/sale_journal/sale_journal_data.xml
index 3639f945c83..9d305fe9912 100644
--- a/addons/sale_journal/sale_journal_data.xml
+++ b/addons/sale_journal/sale_journal_data.xml
@@ -2,11 +2,11 @@
-
- property_invoice_type
-
-
-
+
+ property_invoice_type
+
+
+
diff --git a/addons/sale_journal/sale_journal_demo.xml b/addons/sale_journal/sale_journal_demo.xml
index 30606e25145..061a5af8544 100644
--- a/addons/sale_journal/sale_journal_demo.xml
+++ b/addons/sale_journal/sale_journal_demo.xml
@@ -2,17 +2,17 @@
-
- Daily invoicing
-
-
- Monthly invoicing
- grouped
-
+
+ Daily invoicing
+
+
+ Monthly invoicing
+ grouped
+
-
-
-
+
+
+
diff --git a/addons/sale_journal/sale_journal_view.xml b/addons/sale_journal/sale_journal_view.xml
index 029908da37a..ad160ec28ae 100644
--- a/addons/sale_journal/sale_journal_view.xml
+++ b/addons/sale_journal/sale_journal_view.xml
@@ -1,10 +1,5 @@
-
-
-
@@ -14,13 +9,12 @@
-
-
-
+
+
+
-
-
-
+
+
@@ -42,111 +36,15 @@
+ Invoice Types
sale_journal.invoice.type
form
tree,form
+ Invoice types are used on partners, sales order and delivery orders. You can create journal to group your invoicing according to customer's needs: daily, each wednesday, monthly, etc.
-
-
-
-
-
- sale_journal.sale.journal.form
- sale_journal.sale.journal
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sale_journal.sale.journal.tree
- sale_journal.sale.journal
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sale_journal.sale.journal.search
- sale_journal.sale.journal
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sale_journal.sale.journal
- form
- tree,form
- {'search_default_user_id':uid}
-
-
-
-
-
+
@@ -157,11 +55,7 @@
-
-
-
-
-
+
@@ -175,8 +69,7 @@
-
-
+
@@ -190,9 +83,7 @@
-
-
-
+
@@ -206,9 +97,7 @@
-
-
@@ -220,8 +109,6 @@
-
-
@@ -234,9 +121,7 @@
-
-
@@ -248,8 +133,6 @@
-
-
@@ -262,73 +145,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
res.partner.journal.property.form.inherit
res.partner
@@ -336,161 +157,13 @@
-
+
+
+
+
-
-
-
-
-
- sale_journal.picking.journal.form
- sale_journal.picking.journal
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sale_journal.picking.journal.tree
- sale_journal.picking.journal
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sale_journal.picking.journal.search
- sale_journal.picking.journal
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Picking Journals
- sale_journal.picking.journal
- form
- tree,form
- {'search_default_user_id':uid}
-
-
-
-
-
-
- Picking by invoice_method
- sale_journal.invoice.type
- ir.actions.act_window
- tree
-
-
-
- Picking to invoice
- stock.picking
- ir.actions.act_window
- form
- tree,form
- [('state','=','done'),('invoice_state','=','2binvoiced'),('invoice_type_id','=',active_id)]
-
-
-
- tree_but_open
- sale_journal.invoice.type
- Picking to invoice
-
-
-
-
-
- stock.picking.journal.search
- stock.picking
- search
-
-
-
-
-
-
-
-
-
- stock.picking.journal.search
- stock.picking
- search
-
-
-
-
-
-
-
-
-
- stock.picking.journal.search
- stock.picking
- search
-
-
-
-
-
-
-
-
-
diff --git a/addons/sale_journal/security/ir.model.access.csv b/addons/sale_journal/security/ir.model.access.csv
index 645ee5bd534..bc1a3b003c3 100644
--- a/addons/sale_journal/security/ir.model.access.csv
+++ b/addons/sale_journal/security/ir.model.access.csv
@@ -1,18 +1,6 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_sale_journal_invoice_type_finance_invoice","sale_journal.invoice.type invoice","model_sale_journal_invoice_type","account.group_account_invoice",1,0,0,0
+"access_sale_journal_invoice_type_finance_invoice","sale_journal.invoice.type invoice","model_sale_journal_invoice_type","account.group_account_invoice",1,1,1,1
"access_sale_journal_invoice_type_partner_manager","sale_journal.invoice.type partner manager","model_sale_journal_invoice_type","base.group_partner_manager",1,0,0,0
"access_sale_journal_invoice_type_salesman","sale_journal.invoice.type salesman","model_sale_journal_invoice_type","base.group_sale_salesman",1,0,0,0
-"access_sale_journal_sale_journal","sale_journal.sale.journal","model_sale_journal_sale_journal","base.group_sale_salesman",1,0,0,0
"access_sale_journal_invoice_type_manager","sale_journal.invoice.type.manager","model_sale_journal_invoice_type","base.group_sale_manager",1,1,1,1
-"access_sale_journal_sale_journal_manager","sale_journal.sale.journal.manager","model_sale_journal_sale_journal","base.group_sale_manager",1,1,1,1
-"access_sale_journal_picking_journal_manager","sale_journal.picking.journal.manager","model_sale_journal_picking_journal","base.group_sale_manager",1,1,1,1
-"access_sale_journal_sale_journal_stock_worker","sale_journal.sale.journal stock worker","model_sale_journal_sale_journal","stock.group_stock_user",1,0,0,0
-"access_sale_journal_picking_journal_stock_worker","sale_journal.picking.journal stock worker","model_sale_journal_picking_journal","stock.group_stock_user",1,0,0,0
"access_sale_journal_invoice_type_stock_worker","sale_journal.invoice_type stock worker","model_sale_journal_invoice_type","stock.group_stock_user",1,0,0,0
-"access_sale_journal_sale_journal_report_manager","sale_journal_sale_journal_report_manager","model_sale_journal_report","base.group_sale_manager",1,1,1,1
-"access_sale_journal_sale_journal_report_system","sale_journal_sale_journal_report_system","model_sale_journal_report","base.group_system",1,0,0,0
-"access_sale_journal_picking_report","sale_journal_picking_report","model_sale_journal_picking_report","stock.group_stock_manager",1,1,1,1
-"access_sale_journal_picking_journal","sale_journal_picking_journal","model_sale_journal_picking_journal","base.group_system",1,1,1,1
-"access_stock_picking_journal_system","stock_picking_journal_system","stock.model_stock_picking","base.group_system",1,1,1,1
-"access_sale_journal_invoice_type_system","sale_journal.invoice.type.system","model_sale_journal_invoice_type","base.group_system",1,1,1,1
-"access_sale_journal_sale_journal_system","sale_journal.sale.journal.system","model_sale_journal_sale_journal","base.group_system",1,1,1,1
diff --git a/addons/sale_journal/test/picking_journal.yml b/addons/sale_journal/test/picking_journal.yml
deleted file mode 100644
index 9412c3d40d1..00000000000
--- a/addons/sale_journal/test/picking_journal.yml
+++ /dev/null
@@ -1,87 +0,0 @@
--
- In order to test the sale_journal module in OpenERP,
- I create a picking journal
--
- !record {model: sale_journal.picking.journal, id: sale_journal_picking_journal_pickjournal0}:
- code: PJ
- date: '2010-08-04'
- date_created: '2010-08-04'
- name: Pick_journal
- state: draft
- user_id: base.user_root
--
- I create a picking for product keyboard, quantity 50
--
- !record {model: stock.picking, id: stock_picking_out0}:
- address_id: base.res_partner_address_6
- company_id: base.main_company
- invoice_state: none
- journal_id: sale_journal_picking_journal_pickjournal0
- move_lines:
- - company_id: base.main_company
- date_expected: '2010-08-04 14:09:38'
- date: '2010-08-04 14:09:38'
- location_id: stock.stock_location_stock
- product_id: product.product_product_24
- product_qty: 50.0
- product_uom: product.product_uom_unit
- location_dest_id: stock.stock_location_customers
- name: '[KEYA] Keyboard - AZERTY'
- product_uos_qty: 50.0
- move_type: direct
- name: OUT/00007
- type: out
--
- I verify that a Journal consist of picking order
--
- !python {model: sale_journal.picking.journal}: |
- pick_jour = self.browse(cr, uid, ref("sale_journal_picking_journal_pickjournal0"))
- assert pick_jour.picking_stats_ids, "Journal does not consist of a picking order"
--
- Then I click on the 'Open Journal' button
--
- !python {model: sale_journal.picking.journal}: |
- self.button_open(cr, uid, [ref("sale_journal_picking_journal_pickjournal0")], {"lang": "en_US", "search_default_user_id":
- 1, "tz": False, "active_model": "ir.ui.menu", "active_ids": [ref("sale_journal.menu_definition_journal_picking")],
- "active_id": ref("sale_journal.menu_definition_journal_picking")})
--
- I verify that a state of journal has transit from draft to open state
--
- !python {model: sale_journal.picking.journal}: |
- pick_jour = self.browse(cr, uid, ref("sale_journal_picking_journal_pickjournal0"))
- assert (pick_jour.state == 'open'), "Journal is not in the open state"
--
- Then I click on the 'Confirm Picking' button
--
- !python {model: sale_journal.picking.journal}: |
- self.button_picking_confirm(cr, uid, [ref("sale_journal_picking_journal_pickjournal0")], {"lang": "en_US", "search_default_user_id":
- 1, "tz": False, "active_model": "ir.ui.menu", "active_ids": [ref("sale_journal.menu_definition_journal_picking")],
- "active_id": ref("sale_journal.menu_definition_journal_picking")})
--
- I verify that a state of journal has transit from open to confirm state
--
- !python {model: sale_journal.picking.journal}: |
- pick_jour = self.browse(cr, uid, ref("sale_journal_picking_journal_pickjournal0"))
- assert (pick_jour.state == 'confirm'), "Journal is not in the open state"
--
- I verify that an picking order is now in the confirm state
--
- !python {model: stock.picking}: |
- pick_jour_obj = self.pool.get('sale_journal.picking.journal')
- jour = pick_jour_obj.browse(cr, uid, ref("sale_journal_picking_journal_pickjournal0"))
- stock_pick = self.browse(cr, uid, ref("stock_picking_out0"))
- pick_jour = self.search(cr, uid, [('journal_id','=',jour.name) and ('state','=','confirmed')])
- assert pick_jour, "Sale order is not in the confirm state"
--
- Then I click on the 'Close Journal' button
--
- !python {model: sale_journal.picking.journal}: |
- self.button_close(cr, uid, [ref("sale_journal_picking_journal_pickjournal0")], {"lang": "en_US", "search_default_user_id":
- 1, "tz": False, "active_model": "ir.ui.menu", "active_ids": [ref("sale_journal.menu_definition_journal_picking")],
- "active_id": ref("sale_journal.menu_definition_journal_picking")})
--
- I verify that a state of journal has transit from confirm to close state
--
- !python {model: sale_journal.picking.journal}: |
- pick_jour = self.browse(cr, uid, ref("sale_journal_picking_journal_pickjournal0"))
- assert (pick_jour.state == 'close'), "Journal is not in the open state"
diff --git a/addons/sale_journal/test/sale_journal.yml b/addons/sale_journal/test/sale_journal.yml
deleted file mode 100644
index 365e2640031..00000000000
--- a/addons/sale_journal/test/sale_journal.yml
+++ /dev/null
@@ -1,95 +0,0 @@
--
- In order to test the sale_journal module in OpenERP,
- I create a sale journal and place a sale order related to a journal
--
- I create a sale journal
--
- !record {model: sale_journal.sale.journal, id: sale_journal_sale_journal_journal0}:
- code: J1
- date: '2010-08-04'
- date_created: '2010-08-04'
- name: Journal_1
- state: draft
- user_id: base.user_root
--
- I place a sale order for product keyboard, quantity 100
--
- !record {model: sale.order, id: sale_order_so0}:
- date_order: '2010-08-04'
- invoice_quantity: order
- invoice_type_id: sale_journal.daily
- journal_id: sale_journal_sale_journal_journal0
- name: Test_SO012
- order_line:
- - name: '[KEYA] Keyboard - AZERTY'
- price_unit: 7.0
- product_uom: product.product_uom_unit
- product_uom_qty: 100.0
- state: draft
- delay: 7.0
- product_id: product.product_product_24
- product_uos_qty: 100.0
- th_weight: 0.0
- type: make_to_stock
- order_policy: manual
- partner_id: base.res_partner_4
- partner_invoice_id: base.res_partner_address_7
- partner_order_id: base.res_partner_address_7
- partner_shipping_id: base.res_partner_address_7
- picking_policy: direct
- pricelist_id: product.list0
- shop_id: sale.shop
--
- I verify that a Journal consist of sale order
--
- !python {model: sale_journal.sale.journal}: |
- sal_jour = self.browse(cr, uid, ref("sale_journal_sale_journal_journal0"))
- assert sal_jour.sale_stats_ids, "Journal does not consist of a sale order details"
--
- Then I click on the 'Open Journal' button
--
- !python {model: sale_journal.sale.journal}: |
- self.button_open(cr, uid, [ref("sale_journal_sale_journal_journal0")], {"lang": "en_US", "search_default_user_id":
- 1, "tz": False, "active_model": "ir.ui.menu", "active_ids": [ref("sale_journal.menu_definition_journal")],
- "active_id": ref("sale_journal.menu_definition_journal")})
--
- I verify that a state of journal has transit from draft to open state
--
- !python {model: sale_journal.sale.journal}: |
- sal_jour = self.browse(cr, uid, ref("sale_journal_sale_journal_journal0"))
- assert (sal_jour.state == 'open'), "Journal is not in the open state"
--
- Then I click on the 'Confirm Sales' button
--
- !python {model: sale_journal.sale.journal}: |
- self.button_sale_confirm(cr, uid, [ref("sale_journal_sale_journal_journal0")], {"lang": "en_US", "search_default_user_id":
- 1, "tz": False, "active_model": "ir.ui.menu", "active_ids": [ref("sale_journal.menu_definition_journal")],
- "active_id": ref("sale_journal.menu_definition_journal")})
--
- I verify that a state of journal has transit from open to confirm state
--
- !python {model: sale_journal.sale.journal}: |
- sal_jour = self.browse(cr, uid, ref("sale_journal_sale_journal_journal0"))
- assert (sal_jour.state == 'confirm'), "Journal is not in the confirm state"
--
- I verify that a sale order is now in the confirm state
--
- !python {model: sale.order}: |
- sale_jour_obj = self.pool.get('sale_journal.sale.journal')
- jour = sale_jour_obj.browse(cr, uid, ref("sale_journal_sale_journal_journal0"))
- so = self.browse(cr, uid, ref("sale_order_so0"))
- so_jour = self.search(cr, uid, [('journal_id','=',jour.name) and ('state','=','manual')])
- assert so_jour, "Sale order is not in the confirm state"
--
- Then I click on the 'Close Journal' button
--
- !python {model: sale_journal.sale.journal}: |
- self.button_close(cr, uid, [ref("sale_journal_sale_journal_journal0")], {"lang": "en_US", "search_default_user_id":
- 1, "tz": False, "active_model": "ir.ui.menu", "active_ids": [ref("sale_journal.menu_definition_journal")],
- "active_id": ref("sale_journal.menu_definition_journal")})
--
- I verify that a state of journal has transit from confirm to close state
--
- !python {model: sale_journal.sale.journal}: |
- sal_jour = self.browse(cr, uid, ref("sale_journal_sale_journal_journal0"))
- assert (sal_jour.state == 'close'), "Journal is not in the close state"
\ No newline at end of file
diff --git a/addons/sale_layout/report/order.rml b/addons/sale_layout/report/order.rml
deleted file mode 100755
index cde59d18e02..00000000000
--- a/addons/sale_layout/report/order.rml
+++ /dev/null
@@ -1,378 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [[ repeatIn(objects,'o') ]]
- [[ setLang(o.partner_id.lang) ]]
-
-
-
- Shipping address :
- [[ o.partner_id.title or '' ]][[ o.partner_id.name ]]
- [[ o.partner_shipping_id.title or '' ]][[ o.partner_shipping_id.name ]]
- [[ o.partner_shipping_id.street ]]
- [[ o.partner_shipping_id.street2 or '' ]]
- [[ o.partner_shipping_id.city or '' ]] [[ o.partner_shipping_id.zip or '' ]]
- [[ o.partner_shipping_id.state_id and o.partner_shipping_id.state_id.name or '' ]][[ o.partner_shipping_id.country_id and o.partner_shipping_id.country_id.name or '' ]]
-
-
-
- Invoice address :
- [[ o.partner_invoice_id.street ]][[ o.partner_invoice_id.street2 and (', %s' % o.partner_invoice_id.street2 or '') ]]
- [[ o.partner_invoice_id.city or '' ]] [[ o.partner_invoice_id.zip or '' ]]
- [[ o.partner_invoice_id.country_id and ('%s' % (o.partner_invoice_id.country_id and o.partner_invoice_id.country_id.name or '')) ]]
-
-
-
-
-
-
-
- [[ o.partner_id.title or '' ]][[ o.partner_id.name ]]
- [[ o.partner_order_id.title or '' ]][[ o.partner_order_id.name ]]
- [[ o.partner_order_id.street ]]
- [[ o.partner_order_id.street2 or '' ]]
- [[ o.partner_order_id.city or '' ]] [[ o.partner_order_id.zip or '' ]]
- [[ o.partner_order_id.state_id and o.partner_order_id.state_id.name or '' ]][[ o.partner_order_id.country_id and o.partner_order_id.country_id.name or '' ]]
-
-
-
- Tel. : [[ o.partner_order_id.phone or removeParentNode('para') ]]
- Fax : [[ o.partner_order_id.fax or removeParentNode('para') ]]
- TVA : [[ o.partner_id.vat or removeParentNode('para') ]]
-
-
-
-
-
-
-
-
-
- [[ o.state<>'draft' and removeParentNode('para') ]] Quotation N° [[ o.name ]]
- [[ o.state=='draft' and removeParentNode('para') ]] Order N° [[ o.name ]]
-
-
-
-
-
-
- Your Reference
-
-
- Date Ordered
-
-
- Our Salesman
-
-
- Payment Terms
-
-
-
-
-
-
- [[ o.name ]]
-
-
- [[ o.date_order ]]
-
-
- [[ o.user_id.name ]]
-
-
- [[ o.payment_term.name ]]
-
-
-
-
-
-
-
-
-
- Description
-
-
- VAT
-
-
- Quantity
-
-
- Unit Price
-
-
- Disc.(%)
-
-
- Price
-
-
-
-
- [[ repeatIn(o.order_line,'line') ]]
-
-
-
- [[ line.name ]]
-
-
- [[ ', '.join(map(lambda x: x.name, line.tax_id)) or '0.00' ]]
-
-
- [[ line.product_uos and line.product_uos_qty or line.product_uom_qty or '0.00']]
-
-
- [[ line.product_uos and line.product_uos.name or line.product_uom.name ]]
-
-
- [[ line.price_unit or '0.00' ]]
-
-
- [[ line.discount and str(line.discount) or '0.00' ]]
-
-
- [[ line.price_subtotal or '0.00' ]]
-
-
-
-
- [[ format(line.notes or removeParentNode('tr')) ]]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Net Total :
-
-
- [[ o.amount_untaxed or '0.00' ]]
-
-
- [[ o.pricelist_id.currency_id.name ]]
-
-
-
-
-
-
-
-
-
- Taxes :
-
-
- [[ o.amount_tax or '0.00' ]]
-
-
- [[ o.pricelist_id.currency_id.name ]]
-
-
-
-
-
-
-
-
-
- Total :
-
-
- [[ o.amount_total or '0.00' ]]
-
-
- [[ o.pricelist_id.currency_id.name ]]
-
-
-
-
-
-
-
-
-
- [[ format(o.note or '') ]]
-
-
-
-
- [[ format((o.partner_id.property_payment_term and o.partner_id.property_payment_term.note) or '') ]]
-
-
-
-
-
-
-
-
diff --git a/addons/sale_layout/report/report_sale_layout.rml b/addons/sale_layout/report/report_sale_layout.rml
index 9413ca09901..990c4c5c7b1 100755
--- a/addons/sale_layout/report/report_sale_layout.rml
+++ b/addons/sale_layout/report/report_sale_layout.rml
@@ -190,23 +190,23 @@
- Shipping address :
- [[ o.partner_id.title.name or '' ]] [[ o.partner_id.name ]]
- [[ o.partner_shipping_id.street ]]
- [[ o.partner_shipping_id.street2 or removeParentNode('para') ]]
- [[ o.partner_shipping_id.city or '' ]] [[ o.partner_shipping_id.zip or '' ]]
- [[ (o.partner_shipping_id.state_id and o.partner_shipping_id.state_id.name) or removeParentNode('para') ]]
- [[ o.partner_shipping_id.country_id and o.partner_shipping_id.country_id.name or '' ]]
+ Shipping address :
+ [[ (o.partner_id and o.partner_id.title and o.partner_id.title.name) or '' ]] [[ (o.partner_id and o.partner_id.name) or '' ]]
+ [[ (o.partner_shipping_id and o.partner_shipping_id.street) or '' ]]
+ [[ (o.partner_shipping_id and o.partner_shipping_id.street2) or removeParentNode('para') ]]
+ [[ (o.partner_shipping_id and o.partner_shipping_id.zip) or '' ]] [[ (o.partner_shipping_id and o.partner_shipping_id.city) or '' ]]
+ [[ (o.partner_shipping_id and o.partner_shipping_id.state_id and o.partner_shipping_id.state_id.name) or removeParentNode('para') ]]
+ [[ (o.partner_shipping_id and o.partner_shipping_id.country_id and o.partner_shipping_id.country_id.name) or '' ]]
Invoice address :
- [[ o.partner_invoice_id.partner_id.name or '' ]]
- [[ o.partner_invoice_id.street ]]
- [[ o.partner_invoice_id.street2 or removeParentNode('para') ]]
- [[ o.partner_invoice_id.zip or '' ]] [[ o.partner_invoice_id.city or '' ]]
- [[ (o.partner_invoice_id.state_id and o.partner_invoice_id.state_id.name) or removeParentNode('para') ]]
- [[ o.partner_invoice_id.country_id and o.partner_invoice_id.country_id.name or '']]
+ [[ (o.partner_invoice_id and o.partner_invoice_id.title and o.partner_invoice_id.title.name) or '' ]] [[ (o.partner_invoice_id and o.partner_invoice_id.name) or '' ]]
+ [[ (o.partner_invoice_id and o.partner_invoice_id.street) or '' ]]
+ [[ (o.partner_invoice_id and o.partner_invoice_id.street2) or removeParentNode('para') ]]
+ [[ (o.partner_invoice_id and o.partner_invoice_id.zip) or '' ]] [[ (o.partner_invoice_id and o.partner_invoice_id.city) or '' ]]
+ [[ (o.partner_invoice_id and o.partner_invoice_id.state_id and o.partner_invoice_id.state_id.name) or removeParentNode('para') ]]
+ [[ (o.partner_invoice_id and o.partner_invoice_id.country_id and o.partner_invoice_id.country_id.name) or '' ]]
@@ -214,19 +214,18 @@
- [[ o.partner_id.title.name or '' ]] [[ o.partner_id.name ]]
- [[ o.partner_order_id.street ]]
- [[ o.partner_order_id.street2 or removeParentNode('para') ]]
- [[ o.partner_order_id.zip or '' ]] [[ o.partner_order_id.city or '' ]]
- [[ (o.partner_order_id.state_id and o.partner_order_id.state_id.name) or removeParentNode('para') ]]
- [[ o.partner_order_id.country_id and o.partner_order_id.country_id.name or '' ]]
+ [[ (o.partner_id and o.partner_id.title and o.partner_id.title.name) or '' ]] [[ (o.partner_id and o.partner_id.name) or '' ]]
+ [[ (o.partner_order_id and o.partner_order_id.street) or '' ]]
+ [[ (o.partner_order_id and o.partner_order_id.street2) or removeParentNode('para') ]]
+ [[ (o.partner_order_id and o.partner_order_id.zip) or '' ]] [[ (o.partner_order_id and o.partner_order_id.city) or '' ]]
+ [[ (o.partner_order_id and o.partner_order_id.state_id and o.partner_order_id.state_id.name) or removeParentNode('para')]] [[ (o.partner_order_id and o.partner_order_id.country_id and o.partner_order_id.country_id.name) or '' ]]
- Tel. : [[ o.partner_order_id.phone or removeParentNode('para') ]]
- Fax : [[ o.partner_order_id.fax or removeParentNode('para') ]]
- TVA : [[ o.partner_id.vat or removeParentNode('para') ]]
-
+ Tel. : [[ (o.partner_order_id and o.partner_order_id.phone) or removeParentNode('para') ]]
+ Fax : [[ (o.partner_order_id and o.partner_order_id.fax) or removeParentNode('para') ]]
+ TVA : [[ (o.partner_id and o.partner_id.vat) or removeParentNode('para') ]]
+
@@ -265,7 +264,7 @@
[[ formatLang(o.date_order,date=True) ]]
- [[ o.user_id.name ]]
+ [[ (o.user_id and o.user_id.name) or '' ]]
[[ o.payment_term.name ]]
@@ -425,7 +424,7 @@
- [[ format((o.partner_id.property_payment_term and o.partner_id.property_payment_term.note) or '') ]]
+ [[ format((o.partner_id and o.partner_id.property_payment_term and o.partner_id.property_payment_term.note) or '') ]]
diff --git a/addons/share/__init__.py b/addons/share/__init__.py
index eff88be137d..9c0c7bf7da2 100644
--- a/addons/share/__init__.py
+++ b/addons/share/__init__.py
@@ -18,5 +18,6 @@
# along with this program. If not, see .
#
##############################################################################
-import share
+
+import res_users
import wizard
diff --git a/addons/share/__openerp__.py b/addons/share/__openerp__.py
index 9dc2a6658d8..4f2eafb4e52 100644
--- a/addons/share/__openerp__.py
+++ b/addons/share/__openerp__.py
@@ -21,24 +21,34 @@
{
- "name" : "Share Management",
+ "name" : "Sharing Tools",
"version" : "1.1",
"depends" : ["base"],
"author" : "OpenERP SA",
"category": 'Generic Modules',
- "description": """The goal is to implement a generic sharing mechanism, where user of OpenERP
-can share data from OpenERP to their colleagues, customers, or friends.
-The system will work by creating new users and groups on the fly, and by
-combining the appropriate access rights and ir.rules to ensure that the /shared
-users/ will only have access to the correct data.
+ "description": """
+
+ This module adds generic sharing tools to your current OpenERP database,
+ and specifically a 'share' button that is available in the Web client to
+ share any kind of OpenERP data with colleagues, customers, friends, etc.
+
+ The system will work by creating new users and groups on the fly, and by
+ combining the appropriate access rights and ir.rules to ensure that the
+ shared users only have access to the data that has been shared with them.
+
+ This is extremely useful for collaborative work, knowledge sharing,
+ synchronization with other companies, etc.
+
""",
'website': 'http://www.openerp.com',
- 'init_xml': [],
- 'update_xml': [
+ 'data': [
+ 'security/share_security.xml',
+ 'security/ir.model.access.csv',
'share_view.xml',
+ 'res_users_view.xml',
'wizard/share_wizard_view.xml'
- ],
+ ],
'installable': True,
- 'active': False,
}
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/share/share.py b/addons/share/res_users.py
similarity index 74%
rename from addons/share/share.py
rename to addons/share/res_users.py
index 6e3c4932a1e..81683066220 100644
--- a/addons/share/share.py
+++ b/addons/share/res_users.py
@@ -18,12 +18,14 @@
# along with this program. If not, see .
#
##############################################################################
-from osv import fields, osv, orm
+from osv import fields, osv
+
class res_groups(osv.osv):
_name = "res.groups"
_inherit = 'res.groups'
_columns = {
- 'share': fields.boolean('Share')
+ 'share': fields.boolean('Share Group', groups='share.group_share', readonly=True,
+ help="Group created to set access rights for sharing data with some users.")
}
res_groups()
@@ -31,6 +33,7 @@ class res_users(osv.osv):
_name = 'res.users'
_inherit = 'res.users'
_columns = {
- 'share': fields.boolean('Share')
+ 'share': fields.boolean('Share User', groups='share.group_share', readonly=True,
+ help="External user with limited access, created only for the purpose of sharing data.")
}
res_users()
diff --git a/addons/share/res_users_view.xml b/addons/share/res_users_view.xml
new file mode 100644
index 00000000000..09733e81a01
--- /dev/null
+++ b/addons/share/res_users_view.xml
@@ -0,0 +1,44 @@
+
+
+
+
+ res.users.search.share
+ res.users
+ search
+
+
+
+
+
+
+
+
+
+
+
+ {'search_default_no_share': 1}
+
+
+
+ res.groups.search.share
+ res.groups
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+ {'search_default_no_share': 1}
+
+
+
+
\ No newline at end of file
diff --git a/addons/share/security/ir.model.access.csv b/addons/share/security/ir.model.access.csv
new file mode 100644
index 00000000000..a8f37d300c6
--- /dev/null
+++ b/addons/share/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_share_wizard_user","access_share_wizard_user","model_share_wizard","share.group_share_user",1,1,1,1
\ No newline at end of file
diff --git a/addons/share/security/share_security.xml b/addons/share/security/share_security.xml
new file mode 100644
index 00000000000..0b2e8c4c1fd
--- /dev/null
+++ b/addons/share/security/share_security.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ Sharing / User
+
+
+
diff --git a/addons/share/share_view.xml b/addons/share/share_view.xml
index 24736b3d53a..863da6ea747 100644
--- a/addons/share/share_view.xml
+++ b/addons/share/share_view.xml
@@ -6,7 +6,7 @@
res.groups
form
-
+
@@ -17,7 +17,7 @@
res.users
form
-
+
diff --git a/addons/share/wizard/__init__.py b/addons/share/wizard/__init__.py
index b906abf5e56..2034dfe2fc6 100644
--- a/addons/share/wizard/__init__.py
+++ b/addons/share/wizard/__init__.py
@@ -20,3 +20,4 @@
##############################################################################
import share_wizard
+
diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py
index add9c4f9352..2d1fd252ecf 100644
--- a/addons/share/wizard/share_wizard.py
+++ b/addons/share/wizard/share_wizard.py
@@ -18,480 +18,448 @@
# along with this program. If not, see .
#
##############################################################################
-from osv import osv, fields
-from tools.translate import _
-import tools
+import logging
+import random
+import time
+
+import tools
+from osv import osv, fields
+from osv.expression import expression
+from tools.translate import _
+from tools.safe_eval import safe_eval
+
+FULL_ACCESS = ('perm_read', 'perm_write', 'perm_create', 'perm_unlink')
+READ_ONLY_ACCESS = ('perm_read',)
+
+
+RANDOM_PASS_CHARACTERS = [chr(x) for x in range(48, 58) + range(97, 123) + range(65, 91)]
+RANDOM_PASS_CHARACTERS.remove('l') #lowercase l, easily mistaken as one or capital i
+RANDOM_PASS_CHARACTERS.remove('I') #uppercase i, easily mistaken as one or lowercase L
+RANDOM_PASS_CHARACTERS.remove('O') #uppercase o, mistaken with zero
+RANDOM_PASS_CHARACTERS.remove('o') #lowercase o, mistaken with zero
+RANDOM_PASS_CHARACTERS.remove('0') #zero, mistaken with o-letter
+RANDOM_PASS_CHARACTERS.remove('1') #one, mistaken with lowercase-L or capital i
+def generate_random_pass():
+ pass_chars = RANDOM_PASS_CHARACTERS[:]
+ random.shuffle(pass_chars)
+ return ''.join(pass_chars[0:10])
-def _generate_random_number():
- import random
- RANDOM_PASS_CHARACTERS = [chr(x) for x in range(48,58) + range(97,123) + range(65,91)]
- RANDOM_PASS_CHARACTERS.remove('l') #lowercase l, easily mistaken as one or capital i
- RANDOM_PASS_CHARACTERS.remove('I') #uppercase i, easily mistaken as one or lowercase l
- RANDOM_PASS_CHARACTERS.remove('O') #uppercase o, mistaken with zero
- RANDOM_PASS_CHARACTERS.remove('o') #lowercase o, mistaken with zero
- RANDOM_PASS_CHARACTERS.remove('0') #zero, mistaken with o-letter
- def generate_random_pass():
- pass_chars = RANDOM_PASS_CHARACTERS[:]
- random.shuffle(pass_chars)
- return ''.join(pass_chars[0:10])
- return generate_random_pass()
class share_create(osv.osv_memory):
- _name = 'share.create'
- _description = 'Create share'
-
- def _access(self, cr, uid, ids, field_name, arg, context=None):
- if context is None:
- context = {}
- res = {}
- action_id = context.get('action_id', False)
- access_obj = self.pool.get('ir.model.access')
- action_obj = self.pool.get('ir.actions.act_window')
- model_obj = self.pool.get('ir.model')
- user_obj = self.pool.get('res.users')
- current_user = user_obj.browse(cr, uid, uid)
- access_ids = []
- if action_id:
- action = action_obj.browse(cr, uid, action_id, context=context)
- active_model_ids = model_obj.search(cr, uid, [('model','=',action.res_model)])
- active_model_id = active_model_ids and active_model_ids[0] or False
- access_ids = access_obj.search(cr, uid, [
- ('group_id','in',map(lambda x:x.id, current_user.groups_id)),
- ('model_id','',active_model_id)])
- for rec_id in ids:
- write_access = False
- read_access = False
- for access in access_obj.browse(cr, uid, access_ids, context=context):
- if access.perm_write:
- write_access = True
- if access.perm_read:
- read_access = True
- res[rec_id]['write_access'] = write_access
- res[rec_id]['read_access'] = read_access
- return res
+ __logger = logging.getLogger('share.wizard')
+ _name = 'share.wizard'
+ _description = 'Share Wizard'
_columns = {
- 'action_id': fields.many2one('ir.actions.act_window', 'Action', required=True),
- 'domain': fields.char('Domain', size=64),
- 'user_type': fields.selection( [ ('existing','Existing'),('new','New')],'User Type'),
- 'user_ids': fields.many2many('res.users', 'share_user_rel', 'share_id','user_id', 'Share Users'),
- 'new_user': fields.text("New user"),
- 'access_mode': fields.selection([('readwrite','READ & WRITE'),('readonly','READ ONLY')],'Access Mode'),
- 'write_access': fields.function(_access, method=True, string='Write Access',type='boolean', multi='write_access'),
- 'read_access': fields.function(_access, method=True, string='Write Access',type='boolean', multi='read_access'),
+ 'action_id': fields.many2one('ir.actions.act_window', 'Action to share', required=True,
+ help="The action that opens the screen containing the data you wish to share."),
+ 'domain': fields.char('Domain', size=256, help="Optional domain for further data filtering"),
+ 'user_type': fields.selection([('existing','Existing external users'),('new','New users (emails required)')],'Users to share with',
+ help="Select the type of user(s) you would like to share data with."),
+ 'user_ids': fields.one2many('share.wizard.user', 'share_wizard_id', 'Users'),
+ 'new_users': fields.text("New users"),
+ 'access_mode': fields.selection([('readwrite','Read & Write'),('readonly','Read-only')],'Access Mode'),
+ 'result_line_ids': fields.one2many('share.wizard.result.line', 'share_wizard_id', 'Summary'),
+ 'share_root_url': fields.char('Generic Share Access URL', size=512, tooltip='Main access page for users that are granted shared access')
}
_defaults = {
- 'user_type' : 'existing',
- 'domain': '[]',
+ 'user_type' : lambda self, cr, uid, *a: 'existing' if self.pool.get('res.users').search(cr, uid, [('share', '=', True)]) else 'new',
+ 'domain': lambda self, cr, uid, context, *a: context.get('domain', '[]'),
+ 'share_root_url': lambda self, cr, uid, context, *a: context.get('share_root_url',
+ _('Please specify "share_root_url" in server configuration or in context')),
+ 'action_id': lambda self, cr, uid, context, *a: context.get('action_id'),
'access_mode': 'readonly'
-
}
- def default_get(self, cr, uid, fields, context=None):
- """
- To get default values for the object.
- """
-
- res = super(share_create, self).default_get(cr, uid, fields, context=context)
- if not context:
- context={}
- action_id = context.get('action_id', False)
- domain = context.get('domain', '[]')
-
-
- if 'action_id' in fields:
- res['action_id'] = action_id
- if 'domain' in fields:
- res['domain'] = domain
- return res
-
- def do_step_1(self, cr, uid, ids, context=None):
- """
- This action to excute step 1
-
- """
- if not context:
- context = {}
-
- data_obj = self.pool.get('ir.model.data')
-
- step1_form_view = data_obj._get_id(cr, uid, 'share', 'share_step1_form')
-
- if step1_form_view:
- step1_form_view_id = data_obj.browse(cr, uid, step1_form_view, context=context).res_id
-
- step1_id = False
- for this in self.browse(cr, uid, ids, context=context):
- vals ={
- 'domain': this.domain,
- 'action_id': this.action_id and this.action_id.id or False,
- }
- step1_id = this.id
-
- context.update(vals)
- value = {
- 'name': _('Step:2 Sharing Wizard'),
+ def go_step_1(self, cr, uid, ids, context=None):
+ dummy, step1_form_view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'share', 'share_step1_form')
+ return {
+ 'name': _('Sharing Wizard - Step 1'),
'view_type': 'form',
'view_mode': 'form',
- 'res_model': 'share.create',
+ 'res_model': 'share.wizard',
'view_id': False,
- 'res_id': step1_id,
+ 'res_id': ids[0],
'views': [(step1_form_view_id, 'form'), (False, 'tree'), (False, 'calendar'), (False, 'graph')],
'type': 'ir.actions.act_window',
- 'context': context,
'target': 'new'
}
- return value
-
-
- def do_step_2(self, cr, uid, ids, context=None):
- """
- This action to excute step 2
-
- """
- if not context:
- context = {}
-
- data_obj = self.pool.get('ir.model.data')
-
- step2_form_view = data_obj._get_id(cr, uid, 'share', 'share_step2_form')
-
- if step2_form_view:
- step2_form_view_id = data_obj.browse(cr, uid, step2_form_view, context=context).res_id
-
- step1_id = False
- for this in self.browse(cr, uid, ids, context=context):
- vals = {
- 'user_type': this.user_type,
- 'existing_user_ids': map(lambda x:x.id, this.user_ids),
- 'new_user': this.new_user,
- }
-
- context.update(vals)
- value = {
- 'name': _('Step:3 Sharing Wizard'),
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_model': 'share.create',
- 'view_id': False,
- 'views': [(step2_form_view_id, 'form'), (False, 'tree'), (False, 'calendar'), (False, 'graph')],
- 'type': 'ir.actions.act_window',
- 'context': context,
- 'target': 'new'
- }
- return value
-
-
- def do_step_3(self, cr, uid, ids, context=None):
- """
- This action to excute step 3
-
- """
- if not context:
- context = {}
-
- for this in self.browse(cr, uid, ids, context=context):
- vals = {
- 'access_mode': this.access_mode,
- }
-
- context.update(vals)
+ def _create_share_group(self, cr, uid, wizard_data, context=None):
group_obj = self.pool.get('res.groups')
+ share_group_name = '%s: %s (%d-%s)' %('Sharing', wizard_data.action_id.res_model, uid, time.time())
+ # create share group without putting admin in it
+ return group_obj.create(cr, 1, {'name': share_group_name, 'share': True}, {'noadmin': True})
+
+ def _create_new_share_users(self, cr, uid, wizard_data, group_id, context=None):
user_obj = self.pool.get('res.users')
- fields_obj = self.pool.get('ir.model.fields')
- model_access_obj = self.pool.get('ir.model.access')
- model_obj = self.pool.get('ir.model')
- rule_obj = self.pool.get('ir.rule')
- action_obj = self.pool.get('ir.actions.act_window')
-
- new_users = context.get('new_user', False)
- action_id = context.get('action_id', False)
- user_type = context.get('user_type', False)
- access_mode = context.get('access_mode', False)
- action = action_obj.browse(cr, uid, action_id, context=context)
- active_model = action.res_model
-
- active_id = False #TODO: Pass record id of res_model of action
- existing_user_ids = context.get('existing_user_ids', False)
- domain = eval(context.get('domain', '[]'))
-
- # Create Share Group
- share_group_name = '%s: %s' %('Sharing', active_model)
- group_ids = group_obj.search(cr, uid, [('name','=',share_group_name)])
- group_id = group_ids and group_ids[0] or False
- if not group_id:
- group_id = group_obj.create(cr, uid, {'name': share_group_name, 'share': True})
- else:
- group = group_obj.browse(cr, uid, group_id, context=context)
- if not group.share:
- raise osv.except_osv(_('Error'), _("Share Group is exits without sharing !"))
-
- # Create new user
-
current_user = user_obj.browse(cr, uid, uid)
user_ids = []
- if user_type == 'new' and new_users:
- for new_user in new_users.split('\n'):
- password = _generate_random_number()
- user_id = user_obj.create(cr, uid, {
+ if wizard_data.user_type == 'new':
+ for new_user in wizard_data.new_users.split('\n'):
+ # attempt to show more user-friendly msg than default constraint error
+ existing = user_obj.search(cr, 1, [('login', '=', new_user)])
+ if existing:
+ raise osv.except_osv(_('User already exists'),
+ _('This username (%s) already exists, perhaps data has already been shared with this person.\nYou may want to try selecting existing shared users instead.'))
+ user_id = user_obj.create(cr, 1, {
'login': new_user,
- 'password': password,
+ 'password': generate_random_pass(),
'name': new_user,
'user_email': new_user,
'groups_id': [(6,0,[group_id])],
- 'action_id': action_id,
'share': True,
'company_id': current_user.company_id and current_user.company_id.id
})
user_ids.append(user_id)
- context['new_user_ids'] = user_ids
+ return user_ids
- # Modify existing user
- if user_type == 'existing':
- user_obj.write(cr, uid, existing_user_ids , {
- 'groups_id': [(4,group_id)],
- 'action_id': action_id
- })
+ def _setup_action_and_shortcut(self, cr, uid, wizard_data, user_ids, new_users, context=None):
+ menu_obj = self.pool.get('ir.ui.menu')
+ user_obj = self.pool.get('res.users')
+ menu_action_id = user_obj._get_menu(cr, uid, context=context)
+ values = {
+ 'name': (_('%s (Shared)') % wizard_data.action_id.name)[:64],
+ 'domain': wizard_data.domain,
+ 'context': wizard_data.action_id.context,
+ 'res_model': wizard_data.action_id.res_model,
+ 'view_mode': wizard_data.action_id.view_mode,
+ 'view_type': wizard_data.action_id.view_type,
+ 'search_view_id': wizard_data.action_id.search_view_id.id,
+ }
+ for user_id in user_ids:
+ action_id = menu_obj.create_shortcut(cr, user_id, values)
+ if new_users:
+ user_obj.write(cr, 1, [user_id], {'action_id': action_id})
+ else:
+ user_obj.write(cr, 1, [user_id], {'action_id': menu_action_id})
+ def _get_recursive_relations(self, cr, uid, model, ttypes, relation_fields=None, suffix=None, context=None):
+ """Returns list of tuples representing recursive relationships of type ``ttypes`` starting from
+ model with ID ``model_id``.
- #ACCESS RIGHTS / IR.RULES COMPUTATION
+ @param model: browsable model to start loading relationships from
+ @param ttypes: list of relationship types to follow (e.g: ['one2many','many2many'])
+ @param relation_fields: list of previously followed relationship tuples - to avoid duplicates
+ during recursion
+ @param suffix: optional suffix to append to the field path to reach the main object
+ """
+ if relation_fields is None:
+ relation_fields = []
+ local_rel_fields = []
+ models = [x[1].model for x in relation_fields]
+ model_obj = self.pool.get('ir.model')
+ model_osv = self.pool.get(model.model)
+ for field in model_osv._columns.values() + [x[2] for x in model_osv._inherit_fields]:
+ if field._type in ttypes and field._obj not in models:
+ relation_model_id = model_obj.search(cr, uid, [('model','=',field._obj)])[0]
+ if field._type == 'one2many':
+ relation_field = '%s.%s'%(field._fields_id, suffix) if suffix else field._fields_id
+ else:
+ relation_field = None # TODO: add some filtering for m2m and m2o - not always possible...
+ model_browse = model_obj.browse(cr, uid, relation_model_id, context=context)
+ local_rel_fields.append((relation_field, model_browse))
+ if relation_model_id != model.id and field._type in ['one2many', 'many2many']:
+ local_rel_fields += self._get_recursive_relations(cr, uid, model_browse,
+ [field._type], local_rel_fields, suffix=relation_field, context=context)
+ return local_rel_fields
- active_model_ids = model_obj.search(cr, uid, [('model','=',active_model)])
- active_model_id = active_model_ids and active_model_ids[0] or False
+ def _get_relationship_classes(self, cr, uid, model, context=None):
+ obj0 = [(None, model)]
+ obj1 = self._get_recursive_relations(cr, uid, model, ['one2many'], context=context)
+ obj2 = self._get_recursive_relations(cr, uid, model, ['one2many', 'many2many'],
+ context=context)
+ obj3 = self._get_recursive_relations(cr, uid, model, ['many2one'], context=context)
+ for dummy, model in obj1:
+ obj3 += self._get_recursive_relations(cr, uid, model, ['many2one'], context=context)
+ return obj0, obj1, obj2, obj3
- def _get_relation(model_id, ttypes, new_obj=[]):
- obj = []
- models = map(lambda x:x[1].model, new_obj)
- field_ids = fields_obj.search(cr, uid, [('model_id','=',model_id),('ttype','in', ttypes)])
- for field in fields_obj.browse(cr, uid, field_ids, context=context):
- if field.relation not in models:
- relation_model_ids = model_obj.search(cr, uid, [('model','=',field.relation)])
- relation_model_id = relation_model_ids and relation_model_ids[0] or False
- relation_model = model_obj.browse(cr, uid, relation_model_id, context=context)
- obj.append((field.relation_field, relation_model))
-
- if relation_model_id != model_id and field.ttype in ['one2many', 'many2many']:
- obj += _get_relation(relation_model_id, [field.ttype], obj)
-
- return obj
-
- active_model = model_obj.browse(cr, uid, active_model_id, context=context)
- obj0 = [(None, active_model)]
- obj1 = _get_relation(active_model_id, ['one2many'])
- obj2 = _get_relation(active_model_id, ['one2many', 'many2many'])
- obj3 = _get_relation(active_model_id, ['many2one'])
- for rel_field, model in obj1:
- obj3 += _get_relation(model.id, ['many2one'])
+ def _get_access_map_for_groups_and_models(self, cr, uid, group_ids, model_ids, context=None):
+ model_access_obj = self.pool.get('ir.model.access')
+ user_right_ids = model_access_obj.search(cr, uid,
+ [('group_id', 'in', group_ids), ('model_id', 'in', model_ids)],
+ context=context)
+ user_access_matrix = {}
+ if user_right_ids:
+ for access_right in model_access_obj.browse(cr, uid, user_right_ids, context=context):
+ access_line = user_access_matrix.setdefault(access_right.model_id.model, set())
+ for perm in FULL_ACCESS:
+ if getattr(access_right, perm, 0):
+ access_line.add(perm)
+ return user_access_matrix
+ def _add_access_rights_for_share_group(self, cr, uid, group_id, mode,
+ fields_relations, context=None):
+ """Adds access rights to group_id on object models referenced in ``fields_relations``,
+ intersecting with access rights of current user to avoid granting too much rights
+ """
+ model_access_obj = self.pool.get('ir.model.access')
+ user_obj = self.pool.get('res.users')
+ target_model_ids = [x[1].id for x in fields_relations]
+ perms_to_add = (mode == 'readonly') and READ_ONLY_ACCESS or FULL_ACCESS
current_user = user_obj.browse(cr, uid, uid, context=context)
- if access_mode == 'readonly':
- res = []
- # intersect with read access rights of user running the
- # wizard, to avoid adding more access than current
- for group in current_user.groups_id:
- for access_control in group.model_access:
- if access_control.model_id.id in res:
- continue
- if access_control.perm_read:
- res.append(access_control.model_id.id)
- model_access_obj.create(cr, uid, {
- 'name': 'Read Access of group %s on %s model'%(share_group_name, access_control.model_id.name),
- 'model_id' : access_control.model_id.id,
- 'group_id' : group_id,
- 'perm_read' : True
- })
- res = []
- for rel_field, model in obj0+obj1+obj2+obj3:
- if model.id in res:
- continue
- res.append(model.id)
- model_access_obj.create(cr, uid, {
- 'name': 'Read Access of group %s on %s model'%(share_group_name, model.name),
- 'model_id' : model.id,
- 'group_id' : group_id,
- 'perm_read' : True
- })
- if access_mode == 'readwrite':
- res = []
- for rel_field, model in obj0+obj1:
- if model.id in res:
- continue
- res.append(model.id)
- model_access_obj.create(cr, uid, {
- 'name': 'Write Access of group %s on %s model'%(share_group_name, model.name),
- 'model_id' : model.id,
- 'group_id' : group_id,
- 'perm_read' : True,
- 'perm_write' : True,
- 'perm_unlink' : True,
- 'perm_create' : True,
- })
- # intersect with access rights of user
- # running the wizard, to avoid adding more access than current
- for group in current_user.groups_id:
- for access_control in group.model_access:
- if access_control.model_id.id in res:
- continue
- if access_control.perm_read:
- res.append(access_control.model_id.id)
- model_access_obj.create(cr, uid, {
- 'name': 'Read Access of group %s on %s model'%(share_group_name, access_control.model_id.name),
- 'model_id' : access_control.model_id.id,
- 'group_id' : group_id,
- 'perm_read' : True
- })
- for rel_field, model in obj2+obj3:
- if model.id in res:
- continue
- res.append(model.id)
- model_access_obj.create(cr, uid, {
- 'name': 'Read Access of group %s on %s model'%(share_group_name, model.name),
- 'model_id' : model.id,
- 'group_id' : group_id,
- 'perm_read' : True
- })
- #
- # And on OBJ0, OBJ1, OBJ2, OBJ3: add all rules from groups of the user
- # that is sharing in the many2many of the rules on the new group
- # (rule must be copied instead of adding it if it contains a reference to uid
- # or user.xxx so it can be replaced correctly)
+ current_user_access_map = self._get_access_map_for_groups_and_models(cr, uid,
+ [x.id for x in current_user.groups_id], target_model_ids, context=context)
+ group_access_map = self._get_access_map_for_groups_and_models(cr, uid,
+ [group_id], target_model_ids, context=context)
+ self.__logger.debug("Current user access matrix: %r", current_user_access_map)
+ self.__logger.debug("New group current access matrix: %r", group_access_map)
+ # Create required rights if allowed by current user rights and not
+ # already granted
+ for dummy, model in fields_relations:
+ values = {
+ 'name': _('Copied access for sharing'),
+ 'group_id': group_id,
+ 'model_id': model.id,
+ }
+ current_user_access_line = current_user_access_map.get(model.model,set())
+ existing_group_access_line = group_access_map.get(model.model,set())
+ need_creation = False
+ for perm in perms_to_add:
+ if perm in current_user_access_line \
+ and perm not in existing_group_access_line:
+ values.update({perm:True})
+ group_access_map.setdefault(model.model, set()).add(perm)
+ need_creation = True
+ if need_creation:
+ model_access_obj.create(cr, 1, values)
+ self.__logger.debug("Creating access right for model %s with values: %r", model.model, values)
+
+ def _link_or_copy_current_user_rules(self, cr, uid, group_id, fields_relations, context=None):
+ user_obj = self.pool.get('res.users')
+ rule_obj = self.pool.get('ir.rule')
+ current_user = user_obj.browse(cr, uid, uid, context=context)
+ completed_models = set()
for group in current_user.groups_id:
- res = []
- for rel_field, model in obj0+obj1+obj2+obj3:
- if model.id in res:
+ for dummy, model in fields_relations:
+ if model.id in completed_models:
continue
- res.append(model.id)
+ completed_models.add(model.id)
for rule in group.rule_groups:
if rule.model_id == model.id:
- rule_obj.copy(cr, uid, rule.id, default={
- 'name': '%s-%s'%(share_group_name, model.model),
- 'groups': [(6,0,[group_id])]
- }, context=context)
+ if 'user.' in rule.domain_force:
+ # Above pattern means there is likely a condition
+ # specific to current user, so we must copy the rule using
+ # the evaluated version of the domain.
+ # And it's better to copy one time too much than too few
+ rule_obj.copy(cr, 1, rule.id, default={
+ 'name': '%s (%s)' %(rule.name, _('(Copy for sharing)')),
+ 'groups': [(6,0,[group_id])],
+ 'domain_force': rule.domain, # evaluated version!
+ })
+ self.__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], {
+ 'groups': [(4,group_id)]
+ })
+ self.__logger.debug("Linking rule %s (%s) on model %s with domain: %s", rule.name, rule.id, model.model, rule.domain_force)
- rule_obj.create(cr, uid, {
- 'name': '%s-%s'%(share_group_name, active_model.model),
- 'model_id': active_model.id,
- 'domain_force': domain,
- 'groups': [(6,0,[group_id])]
+ def _create_indirect_sharing_rules(self, cr, uid, wizard_data, group_id, fields_relations, context=None):
+ user_obj = self.pool.get('res.users')
+ current_user = user_obj.browse(cr, uid, uid, context=context)
+ rule_obj = self.pool.get('ir.rule')
+ try:
+ domain = safe_eval(wizard_data.domain)
+ if domain:
+ domain_expr = expression(domain)
+ for rel_field, model in fields_relations:
+ related_domain = []
+ for element in domain:
+ if domain_expr._is_leaf(element):
+ left, operator, right = element
+ left = '%s.%s'%(rel_field, left)
+ element = left, operator, right
+ related_domain.append(element)
+ rule_obj.create(cr, 1, {
+ 'name': _('Indirect sharing filter created by user %s (%s) for group %s') % \
+ (current_user.name, current_user.login, group_id),
+ 'model_id': model.id,
+ 'domain_force': str(related_domain),
+ 'groups': [(4,group_id)]
+ })
+ self.__logger.debug("Created indirect rule on model %s with domain: %s", model.model, repr(related_domain))
+ except Exception:
+ self.__logger.exception('Failed to create share access')
+ raise osv.except_osv(_('Sharing access could not be setup'),
+ _('Sorry, the current screen and filter you are trying to share are not supported at the moment.\nYou may want to try a simpler filter.'))
+
+ def _create_result_lines(self, cr, uid, wizard_data, context=None):
+ user_obj = self.pool.get('res.users')
+ result_obj = self.pool.get('share.wizard.result.line')
+ share_root_url = wizard_data.share_root_url
+ format_url = '%(login)' in share_root_url and '%(password)' in share_root_url
+ existing_passwd_str = _('*usual password*')
+ if wizard_data.user_type == 'new':
+ for email in wizard_data.new_users.split('\n'):
+ user_id = user_obj.search(cr, 1, [('login', '=', email)], context=context)
+ password = user_obj.read(cr, 1, user_id[0], ['password'])['password']
+ share_url = share_root_url % \
+ {'login': email,
+ 'password': password} if format_url else share_root_url
+ result_obj.create(cr, uid, {
+ 'share_wizard_id': wizard_data.id,
+ 'login': email,
+ 'password': password,
+ 'share_url': share_url,
+ }, context=context)
+ else:
+ # existing users
+ for user in wizard_data.user_ids:
+ share_url = share_root_url % \
+ {'login': email,
+ 'password': ''} if format_url else share_root_url
+ result_obj.create(cr, uid, {
+ 'share_wizard_id': wizard_data.id,
+ 'login': user.user_id.login,
+ 'password': existing_passwd_str,
+ 'share_url': share_url,
+ 'newly_created': False,
+ }, context=context)
+
+ def go_step_2(self, cr, uid, ids, context=None):
+ wizard_data = self.browse(cr, uid, ids and ids[0], context=context)
+ assert wizard_data.action_id and wizard_data.access_mode and \
+ ((wizard_data.user_type == 'new' and wizard_data.new_users) or \
+ (wizard_data.user_type == 'existing' and wizard_data.user_ids))
+
+ # Create shared group and users
+ group_id = self._create_share_group(cr, uid, wizard_data, context=context)
+ user_obj = self.pool.get('res.users')
+ current_user = user_obj.browse(cr, uid, uid, context=context)
+ if wizard_data.user_type == 'new':
+ user_ids = self._create_new_share_users(cr, uid, wizard_data, group_id, context=context)
+ else:
+ user_ids = [x.user_id.id for x in wizard_data.user_ids]
+ # reset home action to regular menu as user needs access to multiple items
+ user_obj.write(cr, 1, user_ids, {
+ 'groups_id': [(4,group_id)],
+ })
+ self._setup_action_and_shortcut(cr, uid, wizard_data, user_ids,
+ (wizard_data.user_type == 'new'), context=context)
+
+
+ model_obj = self.pool.get('ir.model')
+ model_id = model_obj.search(cr, uid, [('model','=', wizard_data.action_id.res_model)])[0]
+ model = model_obj.browse(cr, uid, model_id, context=context)
+
+ # ACCESS RIGHTS
+ # We have several classes of objects that should receive different access rights:
+ # Let:
+ # - [obj0] be the target model itself
+ # - [obj1] be the target model and all other models recursively accessible from
+ # obj0 via one2many relationships
+ # - [obj2] be the target model and all other models recursively accessible from
+ # obj0 via one2many and many2many relationships
+ # - [obj3] be all models recursively accessible from obj1 via many2one relationships
+ obj0, obj1, obj2, obj3 = self._get_relationship_classes(cr, uid, model, context=context)
+ mode = wizard_data.access_mode
+
+ # Add access to [obj0] and [obj1] according to chosen mode
+ self._add_access_rights_for_share_group(cr, uid, group_id, mode, obj0, context=context)
+ self._add_access_rights_for_share_group(cr, uid, group_id, mode, obj1, context=context)
+
+ # Add read-only access (always) to [obj2] and [obj3]
+ self._add_access_rights_for_share_group(cr, uid, group_id, 'readonly', obj2, context=context)
+ self._add_access_rights_for_share_group(cr, uid, group_id, 'readonly', obj3, context=context)
+
+
+ # IR.RULES
+ # A. On [obj0]: 1 rule with domain of shared action
+ # B. For each model in [obj1]: 1 rule in the form:
+ # many2one_rel.domain_of_obj0
+ # where many2one_rel is the many2one used in the definition of the
+ # one2many, and domain_of_obj0 is the sharing domain
+ # For example if [obj0] is project.project with a domain of
+ # ['id', 'in', [1,2]]
+ # then we will have project.task in [obj1] and we need to create this
+ # ir.rule on project.task:
+ # ['project_id.id', 'in', [1,2]]
+ # C. And on [obj0], [obj1], [obj2], [obj3]: add all rules from all groups of
+ # the user that is sharing
+ # (Warning: rules must be copied instead of linked if they contain a reference
+ # to uid, and it must be replaced correctly)
+ rule_obj = self.pool.get('ir.rule')
+ # A.
+ rule_obj.create(cr, 1, {
+ 'name': _('Sharing filter created by user %s (%s) for group %s') % \
+ (current_user.name, current_user.login, group_id),
+ 'model_id': model.id,
+ 'domain_force': wizard_data.domain,
+ 'groups': [(4,group_id)]
})
- for rel_field, model in obj1:
- obj1_domain = []
- for opr1, opt, opr2 in domain:
- new_opr1 = '%s.%s'%(rel_field, opr1)
- obj1_domain.append((new_opr1, opt, opr2))
+ # B.
+ self._create_indirect_sharing_rules(cr, uid, wizard_data, group_id, obj1, context=context)
+ # C.
+ all_relations = obj0 + obj1 + obj2 + obj3
+ self._link_or_copy_current_user_rules(cr, uid, group_id, all_relations, context=context)
- rule_obj.create(cr, uid, {
- 'name': '%s-%s'%(share_group_name, model.model),
- 'model_id': model.id,
- 'domain_force': obj1_domain,
- 'groups': [(6,0,[group_id])]
- })
- context['share_model'] = active_model.model
- context['share_rec_id'] = active_id
+ # so far, so good -> populate summary results and return them
+ self._create_result_lines(cr, uid, wizard_data, context=context)
-
- data_obj = self.pool.get('ir.model.data')
-
- form_view = data_obj._get_id(cr, uid, 'share', 'share_result_form')
- form_view_id = False
- if form_view:
- form_view_id = data_obj.browse(cr, uid, form_view, context=context).res_id
-
-
- value = {
- 'name': _('Step:4 Share Users Detail'),
+ dummy, step2_form_view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'share', 'share_step2_form')
+ return {
+ 'name': _('Sharing Wizard - Step 2'),
'view_type': 'form',
'view_mode': 'form',
- 'res_model': 'share.result',
+ 'res_model': 'share.wizard',
'view_id': False,
- 'views': [(form_view_id, 'form'), (False, 'tree'), (False, 'calendar'), (False, 'graph')],
+ 'res_id': ids[0],
+ 'views': [(step2_form_view_id, 'form'), (False, 'tree'), (False, 'calendar'), (False, 'graph')],
'type': 'ir.actions.act_window',
- 'context': context,
'target': 'new'
}
- return value
+
+ def send_emails(self, cr, uid, ids, context=None):
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ if not user.user_email:
+ raise osv.except_osv(_('Email required'), _('The current user must have an email address configured in User Preferences to be able to send outgoing emails.'))
+ for wizard_data in self.browse(cr, uid, ids, context=context):
+ for result_line in wizard_data.result_line_ids:
+ email_to = result_line.login
+ subject = _('%s has shared OpenERP %s information with you') % (user.name, wizard_data.action_id.name)
+ body = _("Dear,\n\n") + subject + "\n\n"
+ body += _("To access it, you can go to the following URL:\n %s") % wizard_data.share_root_url
+ body += "\n\n"
+ if result_line.newly_created:
+ body += _("You may use the following login and password to get access to this protected area:") + "\n"
+ body += "%s: %s" % (_("Username"), result_line.login) + "\n"
+ body += "%s: %s" % (_("Password"), result_line.password) + "\n"
+ else:
+ body += _("This additional data has been automatically added to your current access.\n")
+ body += _("You may use your existing login and password to view it. As a reminder, your login is %s.\n") % result_line.login
+
+ if not tools.email_send(
+ user.user_email,
+ email_to,
+ subject,
+ body):
+ self.__logger.warning('Failed to send sharing email from %s to %s', user.user_email, email_to)
+ return {'type': 'ir.actions.act_window_close'}
share_create()
-
-class share_result(osv.osv_memory):
- _name = "share.result"
+class share_user_ref(osv.osv_memory):
+ _name = 'share.wizard.user'
+ _rec_name = 'user_id'
_columns = {
- 'users': fields.text("Users", readonly=True),
- }
+ 'user_id': fields.many2one('res.users', 'Users', required=True, domain=[('share', '=', True)]),
+ 'share_wizard_id': fields.many2one('share.wizard', 'Share Wizard', required=True),
+ }
+share_user_ref()
-
-
- def do_send_email(self, cr, uid, ids, context=None):
- user_obj = self.pool.get('res.users')
- if not context:
- context={}
- existing_user_ids = context.get('existing_user_ids', [])
- new_user_ids = context.get('new_user_ids', [])
- share_url = tools.config.get('share_root_url', False)
- user = user_obj.browse(cr, uid, uid, context=context)
- for share_user in user_obj.browse(cr, uid, new_user_ids+existing_user_ids, context=context):
- email_to = share_user.user_email
- subject = '%s wants to share private data with you' %(user.name)
- body = """
- Dear,
-
- %s wants to share private data from OpenERP with you!
- """%(user.name)
- if share_url:
- body += """
- To view it, you can access the following URL:
- %s
- """%(user.name, share_url)
- if share_user.id in new_user_ids:
- body += """
- You may use the following login and password to get access to this
- protected area:
- login: %s
- password: %s
- """%(user.login, user.password)
- elif share_user.id in existing_user_ids:
- body += """
- You may use your existing login and password to get access to this
- additional data. As a reminder, your login is %s.
- """%(user.name)
-
- flag = tools.email_send(
- user.user_email,
- email_to,
- subject,
- body
- )
- return flag
-
-
- def default_get(self, cr, uid, fields, context=None):
- """
- To get default values for the object.
- """
-
- res = super(share_result, self).default_get(cr, uid, fields, context=context)
- user_obj = self.pool.get('res.users')
- if not context:
- context={}
- existing_user_ids = context.get('existing_user_ids', [])
- new_user_ids = context.get('new_user_ids', [])
- share_url = tools.config.get('share_root_url', False)
- if 'users' in fields:
- users = []
- for user in user_obj.browse(cr, uid, new_user_ids):
- txt = 'Login: %s Password: %s' %(user.login, user.password)
- if share_url:
- txt += ' Share URL: %s' %(share_url)
- users.append(txt)
- for user in user_obj.browse(cr, uid, existing_user_ids):
- txt = 'Login: %s' %(user.login)
- if share_url:
- txt += ' Share URL: %s' %(share_url)
- users.append(txt)
- res['users'] = '\n'.join(users)
- return res
-
-share_result()
+class share_result_line(osv.osv_memory):
+ _name = 'share.wizard.result.line'
+ _rec_name = 'login'
+ _columns = {
+ 'login': fields.char('Username', size=64, required=True, readonly=True),
+ 'password': fields.char('Password', size=64, readonly=True),
+ 'share_url': fields.char('Share URL', size=512, required=True),
+ 'share_wizard_id': fields.many2one('share.wizard', 'Share Wizard', required=True),
+ 'newly_created': fields.boolean('Newly created', readonly=True),
+ }
+ _defaults = {
+ 'newly_created': True,
+ }
+share_result_line()
diff --git a/addons/share/wizard/share_wizard_view.xml b/addons/share/wizard/share_wizard_view.xml
index 159583eecbb..e6cade91c84 100644
--- a/addons/share/wizard/share_wizard_view.xml
+++ b/addons/share/wizard/share_wizard_view.xml
@@ -1,106 +1,125 @@
-
+
-
+
share.step0.form
- share.create
+ share.wizard
form
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
share.step1.form
- share.create
+ share.wizard
form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
share.step2.form
- share.create
+ share.wizard
form
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- Share Access Rules
+
+
+ Share Wizard
ir.actions.act_window
- share.create
+ share.wizard
form
form
-
+
new
-
-
-
-
-
-
- share.result.form
- share.result
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ Share Wizard
+ ir.actions.act_window
+ share.wizard
+ form
+ form
+
+ new
+
-
+
+
-
+
diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py
index 79d6c860e65..0b85511050d 100644
--- a/addons/stock/__openerp__.py
+++ b/addons/stock/__openerp__.py
@@ -58,7 +58,6 @@ Thanks to the double entry management, the inventory controlling is powerful and
"wizard/stock_splitinto_view.xml",
"wizard/stock_inventory_line_split_view.xml",
"wizard/stock_change_standard_price_view.xml",
- 'wizard/stock_picking_make_view.xml',
'wizard/stock_return_picking_view.xml',
"stock_workflow.xml",
"stock_incoterms.xml",
diff --git a/addons/stock/board_warehouse_view.xml b/addons/stock/board_warehouse_view.xml
index 84a24f3d0b2..fd68f0a2eb5 100644
--- a/addons/stock/board_warehouse_view.xml
+++ b/addons/stock/board_warehouse_view.xml
@@ -5,42 +5,44 @@
Warehouse
-
-
+
+
Incoming Product
stock.move
ir.actions.act_window
form
tree,form
- ['|','&',('picking_id','=',False),('location_id.usage', 'in', ['customer','supplier']),'&',('picking_id','!=',False),('picking_id.type','=','in')]
-
+ ['|','&',('picking_id','=',False),('location_id.usage', 'in', ['customer','supplier']),'&',('picking_id','!=',False),('picking_id.type','=','in')]
+
-
-
+
+
Outgoing Product
stock.move
ir.actions.act_window
form
tree,form
- ['|','&',('picking_id','=',False),('location_dest_id.usage', 'in', ['customer','supplier']),'&',('picking_id','!=',False),('picking_id.type','=','out')]
-
+ ['|','&',('picking_id','=',False),('location_dest_id.usage', 'in', ['customer','supplier']),'&',('picking_id','!=',False),('picking_id.type','=','out')]
+
-
-
- report.stock.move
- form
- graph,tree
-
- {'search_default_month-1':1,'search_default_in':1,'group_by':['day'], 'group_by_no_leaf':1}
+
+
+ report.stock.move
+ form
+ graph,tree
+ [('type','=','in')]
+
+ {'search_default_month-1':1,'search_default_in':1,'group_by':['day'], 'group_by_no_leaf':1}
-
- report.stock.move
- form
- graph,tree
-
- {'search_default_month-1':1,'search_default_out':1,'group_by':['day'], 'group_by_no_leaf':1}
-
-
+
+ report.stock.move
+ form
+ graph,tree
+ [('type','=','out')]
+
+ {'search_default_month-1':1,'search_default_out':1,'group_by':['day'], 'group_by_no_leaf':1}
+
+
board.warehouse.form
board.board
form
@@ -48,13 +50,13 @@
-
-
+
+
-
-
+
+
@@ -69,9 +71,9 @@
-
+
-
+
diff --git a/addons/stock/i18n/mn.po b/addons/stock/i18n/mn.po
index ab28ad3cc9a..33e60ea3573 100644
--- a/addons/stock/i18n/mn.po
+++ b/addons/stock/i18n/mn.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 13:27+0000\n"
-"Last-Translator: sugi \n"
+"PO-Revision-Date: 2010-10-15 08:16+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Mongolian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock
diff --git a/addons/stock/i18n/ru.po b/addons/stock/i18n/ru.po
index 23ddf31636a..d3060e8fcdf 100644
--- a/addons/stock/i18n/ru.po
+++ b/addons/stock/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-09-29 10:02+0000\n"
+"PO-Revision-Date: 2010-10-17 18:49+0000\n"
"Last-Translator: Chertykov Denis \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-30 04:38+0000\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:55+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock
@@ -1150,7 +1150,7 @@ msgstr ""
#. module: stock
#: wizard_button:stock.location.products,init,open:0
msgid "Open Products"
-msgstr ""
+msgstr "Открыть товары"
#. module: stock
#: rml:stock.picking.list:0
@@ -1197,7 +1197,7 @@ msgstr ""
#. module: stock
#: wizard_view:stock.location.products,init:0
msgid "Stock Location Analysis"
-msgstr ""
+msgstr "Анализ местоположения запасов"
#. module: stock
#: selection:stock.location,icon:0
@@ -1484,7 +1484,7 @@ msgstr "Сделать доступным принудительно"
#. module: stock
#: wizard_view:stock.location.products,init:0
msgid "View Stock of Products"
-msgstr ""
+msgstr "Просмотр товаров на складах"
#. module: stock
#: selection:stock.location,icon:0
@@ -1976,7 +1976,7 @@ msgstr "Получение товаров"
#. module: stock
#: view:stock.location:0
msgid "Stock Location"
-msgstr ""
+msgstr "Местоположение запасов"
#. module: stock
#: selection:stock.location,icon:0
@@ -2032,7 +2032,7 @@ msgstr ""
#: model:ir.actions.act_window,name:stock.action_location_tree
#: model:ir.ui.menu,name:stock.menu_action_location_tree
msgid "Stock Locations Structure"
-msgstr ""
+msgstr "Структура местоположений запасов"
#. module: stock
#: selection:stock.location,icon:0
diff --git a/addons/stock/product.py b/addons/stock/product.py
index e1d4c71b46c..ddb582f4a3c 100644
--- a/addons/stock/product.py
+++ b/addons/stock/product.py
@@ -188,6 +188,7 @@ class product_product(osv.osv):
if not ids:
return res
+ # TODO: write in more ORM way, less queries, more pg84 magic
if context.get('shop', False):
cr.execute('select warehouse_id from sale_shop where id=%s', (int(context['shop']),))
res2 = cr.fetchone()
@@ -246,6 +247,7 @@ class product_product(osv.osv):
date_values = [to_date]
+ # TODO: perhaps merge in one query.
if date_values:
where.append(tuple(date_values))
if 'in' in what:
diff --git a/addons/stock/product_view.xml b/addons/stock/product_view.xml
index 60fab009d0e..35715a9e1fb 100644
--- a/addons/stock/product_view.xml
+++ b/addons/stock/product_view.xml
@@ -60,9 +60,11 @@
-
-
-
+
+
+
+
diff --git a/addons/stock/report/lot_overview.rml b/addons/stock/report/lot_overview.rml
index 14f2b25eb4e..4283bd2e960 100644
--- a/addons/stock/report/lot_overview.rml
+++ b/addons/stock/report/lot_overview.rml
@@ -1,8 +1,8 @@
-
-
+
+
-
+
@@ -93,7 +93,7 @@
-
+
Location / Product
@@ -113,10 +113,10 @@
- [[ repeatIn(objects,'o') ]]
+ [[ repeatIn(objects,'o') ]]
- [[ repeatIn(process(o.id),'ob') ]]
-
+ [[ repeatIn(process(o.id),'ob') ]]
+
[[ (not ob['product']) and removeParentNode('blockTable') ]] [[ ob['location_name'] ]]
@@ -136,21 +136,11 @@
-
-
-
-
-
-
-
-
-
-
- [[ repeatIn(ob['product'],'p') ]]
-
+ [[ repeatIn(ob['product'],'p') ]]
+
@@ -167,15 +157,15 @@
[[formatLang( p['prod_qty']) ]] [[ p['uom'] ]]
- [[ formatLang(p['price'], digits=get_digits(dp='Account')) ]]
+ [[ formatLang(p['price']) ]]
- [[ formatLang(p['price_value'], digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol]]
+ [[ formatLang(p['price_value']) ]] [[ o.company_id.currency_id.symbol]]
-
+
[[ (not ob['product']) and removeParentNode('blockTable') ]]
@@ -184,13 +174,13 @@
Total:
- [[ formatLang(price_total(), digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol ]]
+ [[ formatLang(price_total()) ]] [[ o.company_id.currency_id.symbol ]]
-
+
Grand Total:
@@ -201,7 +191,7 @@
- [[ formatLang(grand_total_price(), digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol ]]
+ [[ formatLang(grand_total_price()) ]] [[ o.company_id.currency_id.symbol ]]
@@ -209,4 +199,4 @@
-
+
\ No newline at end of file
diff --git a/addons/stock/report/lot_overview_all.rml b/addons/stock/report/lot_overview_all.rml
index 7d2360068a8..5104671fa11 100644
--- a/addons/stock/report/lot_overview_all.rml
+++ b/addons/stock/report/lot_overview_all.rml
@@ -1,8 +1,8 @@
-
-
+
+
-
+
@@ -23,7 +23,6 @@
-
@@ -93,7 +92,7 @@
-
+
Location / Product
@@ -113,10 +112,10 @@
- [[ repeatIn(objects,'o') ]]
+ [[ repeatIn(objects,'o') ]]
- [[ repeatIn(process(o.id),'ob') ]]
-
+ [[ repeatIn(process(o.id),'ob') ]]
+
[[ (not ob['product']) and removeParentNode('blockTable') ]][[ ob['location_name'] ]]
@@ -136,21 +135,11 @@
-
-
-
-
-
-
-
-
-
-
- [[ repeatIn(ob['product'],'p') ]]
-
+ [[ repeatIn(ob['product'],'p') ]]
+
@@ -167,15 +156,15 @@
[[formatLang( p['prod_qty']) ]] [[ p['uom'] ]]
- [[ formatLang(p['price'], digits=get_digits(dp='Account')) ]]
+ [[ formatLang(p['price']) ]]
- [[ formatLang(p['price_value'], digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol]]
+ [[ formatLang(p['price_value']) ]] [[ o.company_id.currency_id.symbol]]
-
+
[[ (not ob['product']) and removeParentNode('blockTable') ]]
@@ -184,13 +173,13 @@
Total:
- [[ formatLang(price_total(), digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol ]]
+ [[ formatLang(price_total()) ]] [[ o.company_id.currency_id.symbol ]]
-
+
Grand Total:
@@ -201,12 +190,9 @@
- [[ formatLang(grand_total_price(), digits=get_digits(dp='Account')) ]] [[ o.company_id.currency_id.symbol ]]
+ [[ formatLang(grand_total_price()) ]] [[ o.company_id.currency_id.symbol ]]
-
-
-
-
+
\ No newline at end of file
diff --git a/addons/stock/report/report_stock_move_view.xml b/addons/stock/report/report_stock_move_view.xml
index 34e6e53dbdf..507f475a13e 100644
--- a/addons/stock/report/report_stock_move_view.xml
+++ b/addons/stock/report/report_stock_move_view.xml
@@ -143,6 +143,7 @@
tree,graph
{'full':'1','contact_display': 'partner','search_default_done':1, 'search_default_month':1, 'search_default_group_type':1, 'group_by': [], 'group_by_no_leaf':1,}
+ Moves Analysis allows you to easily check and analyse your company stock moves. Use this report when you want to analyse the different routes taken by your products and inventory management performance.
@@ -240,8 +241,9 @@
tree,graph
{'contact_display': 'partner', 'search_default_real':1, 'search_default_location_type_internal':1,'search_default_group_product':1,'group_by':[], 'group_by_no_leaf':1}
+ Inventory Analysis allows you to easily check and analyse your company stock levels. Sort and group by selection criteria in order to better analyse and manage your company activities.
-
+
diff --git a/addons/stock/report/report_stock_view.xml b/addons/stock/report/report_stock_view.xml
index cb690cea931..0fc7f206c6b 100644
--- a/addons/stock/report/report_stock_view.xml
+++ b/addons/stock/report/report_stock_view.xml
@@ -67,6 +67,7 @@
form
{'search_default_stockable':1}
tree,form
+ Display the last inventories done on your products and easily sort them with specific filtering criteria. If you do frequent and partial inventories, you need this report in order to ensure that the stock of each product is controlled at least once a year.
diff --git a/addons/stock/security/ir.model.access.csv b/addons/stock/security/ir.model.access.csv
index e879a03e9e1..4d9c44edd79 100644
--- a/addons/stock/security/ir.model.access.csv
+++ b/addons/stock/security/ir.model.access.csv
@@ -9,40 +9,26 @@
"access_stock_journal_manager","stock.journal.manager","model_stock_journal","stock.group_stock_manager",1,1,1,1
"access_stock_tracking_user","stock.tracking user","model_stock_tracking","stock.group_stock_user",1,1,1,1
"access_stock_tracking_manager","stock.tracking manager","model_stock_tracking","stock.group_stock_manager",1,0,0,0
-"access_stock_tracking_system","stock.tracking systen","model_stock_tracking","base.group_system",1,0,0,0
"access_stock_picking_user","stock.picking user","model_stock_picking","stock.group_stock_user",1,1,1,1
"access_stock_picking_manager","stock.picking manager","model_stock_picking","stock.group_stock_manager",1,0,0,0
-"access_stock_picking_system","stock.picking system","model_stock_picking","base.group_system",1,0,0,0
"access_stock_production_lot_manager","stock.production.lot manager","model_stock_production_lot","stock.group_stock_manager",1,0,0,0
-"access_stock_production_lot_system","stock.production.lot system","model_stock_production_lot","base.group_system",1,0,0,0
"access_stock_production_lot_user","stock.production.lot user","model_stock_production_lot","stock.group_stock_user",1,1,1,1
"access_stock_production_lot_revision","stock.production.lot.revision","model_stock_production_lot_revision","stock.group_stock_user",1,1,1,1
"access_stock_move_manager","stock.move manager","model_stock_move","stock.group_stock_manager",1,0,0,0
"access_stock_move_user","stock.move user","model_stock_move","stock.group_stock_user",1,1,1,1
-"access_stock_move_system","stock.move system","model_stock_move","base.group_system",1,0,0,0
"access_stock_inventory_user","stock.inventory user","model_stock_inventory","stock.group_stock_user",1,1,1,1
-"access_stock_inventory_system","stock.inventory system","model_stock_inventory","base.group_system",1,0,0,0
"access_stock_inventory_manager","stock.inventory manager","model_stock_inventory","stock.group_stock_manager",1,0,0,0
"access_stock_inventory_line_user","stock.inventory.line user","model_stock_inventory_line","stock.group_stock_user",1,1,1,1
"access_stock_inventory_line_manager","stock.inventory.line manager","model_stock_inventory_line","stock.group_stock_manager",1,0,0,0
-"access_stock_inventory_line_system","stock.inventory.line system","model_stock_inventory_line","base.group_system",1,0,0,0
"access_stock_report_prodlots","stock.report.prodlots","model_stock_report_prodlots","stock.group_stock_manager",1,0,0,0
"access_stock_location_product_manager","stock.location product manager","model_stock_location","product.group_product_manager",1,0,0,0
"access_stock_lines_date_user","report.stock.lines.date user","model_report_stock_lines_date","stock.group_stock_user",1,0,0,0
"access_stock_lines_date_manager","report.stock.lines.date manager","model_report_stock_lines_date","stock.group_stock_manager",1,1,1,1
-"access_stock_lines_date_system","report.stock.lines.date system","model_report_stock_lines_date","base.group_system",1,0,0,0
"access_stock_report_tracklots","stock.report.tracklots","model_stock_report_tracklots","stock.group_stock_user",1,1,1,1
"access_report_stock_move_user","report.stock.move user","model_report_stock_move","stock.group_stock_user",1,0,0,0
-"access_report_stock_move_system","report.stock.move system","model_report_stock_move","base.group_system",1,0,0,0
"access_report_stock_move_manager","report.stock.move manager","model_report_stock_move","stock.group_stock_manager",1,1,1,1
"access_report_stock_inventory_user","report.stock.inventory user","model_report_stock_inventory","stock.group_stock_user",1,1,1,1
"access_report_stock_inventory_manager","report.stock.inventory manager","model_report_stock_inventory","stock.group_stock_manager",1,1,1,1
-"access_report_stock_inventory_system","report.stock.inventory system","model_report_stock_inventory","base.group_system",1,0,0,0
-"access_stock_warehouse_system","stock.warehouse.system","model_stock_warehouse","base.group_system",1,1,1,1
-"access_stock_location_system","stock.location.system","model_stock_location","base.group_system",1,1,1,1
-"access_stock_journal_system","stock.journal.system","model_stock_journal","base.group_system",1,1,1,1
-"access_product_product_stock","product_product_stock","product.model_product_product","base.group_system",1,0,0,0
-"access_product_template_stock_system","product.template stock system","product.model_product_template","base.group_system",1,0,0,0
"access_product_product_stock_user","product_product_stock_user","product.model_product_product","stock.group_stock_user",1,1,1,1
"access_product_template_stock_user","product.template stock user","product.model_product_template","stock.group_stock_user",1,1,1,1
"access_product_product_stock_manager","product_product_stock_manager","product.model_product_product","stock.group_stock_manager",1,0,0,0
diff --git a/addons/stock/security/stock_security.xml b/addons/stock/security/stock_security.xml
index 60be468d17e..717486413c6 100644
--- a/addons/stock/security/stock_security.xml
+++ b/addons/stock/security/stock_security.xml
@@ -9,10 +9,6 @@
Warehouse / User
-
-
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index 3983f43b8c0..3daf8f0010c 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -632,7 +632,7 @@ class stock_picking(osv.osv):
'move_lines': fields.one2many('stock.move', 'picking_id', 'Internal Moves', states={'done': [('readonly', True)], 'cancel': [('readonly', True)]}),
'auto_picking': fields.boolean('Auto-Picking'),
'address_id': fields.many2one('res.partner.address', 'Address', help="Address of partner"),
- 'partner_id': fields.related('address_id','partner_id',type='many2one',relation='res.partner',string='Partner',store=True),
+ 'partner_id': fields.related('address_id','partner_id',type='many2one',relation='res.partner',string='Partner'),
'invoice_state': fields.selection([
("invoiced", "Invoiced"),
("2binvoiced", "To Be Invoiced"),
@@ -1246,23 +1246,25 @@ class stock_picking(osv.osv):
@param ids: List of Picking Ids
@param context: A standard dictionary for contextual values
"""
- msg=''
for pick in self.browse(cr, uid, ids, context=context):
+ msg=''
+ if pick.auto_picking:
+ continue
type_list = {
- 'out':'Picking List',
- 'in':'Reception',
- 'internal': 'Internal picking',
+ 'out':_("Delivery Order"),
+ 'in':_('Reception'),
+ 'internal': _('Internal picking'),
}
- message = type_list.get(pick.type, _('Document')) + " '" + (pick.name or 'n/a') + "' "
+ message = type_list.get(pick.type, _('Document')) + " '" + (pick.name or '?') + "' "
if pick.min_date:
- msg=datetime.strptime(pick.min_date, '%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d') + "'."
+ msg= _(' for the ')+ datetime.strptime(pick.min_date, '%Y-%m-%d %H:%M:%S').strftime('%m/%d/%Y')
state_list = {
- 'confirmed': "is scheduled for the '" + msg ,
- 'assigned': 'is ready to process.',
- 'cancel': 'is Cancelled.',
- 'done': 'is processed.',
- 'draft':'is draft.',
- }
+ 'confirmed': _("is scheduled") + msg +'.',
+ 'assigned': _('is ready to process.'),
+ 'cancel': _('is cancelled.'),
+ 'done': _('is done.'),
+ 'draft':_('is in draft state.'),
+ }
message += state_list[pick.state]
self.log(cr, uid, pick.id, message)
return True
@@ -1995,7 +1997,6 @@ class stock_move(osv.osv):
for pick_id in picking_ids:
wf_service.trg_write(uid, 'stock.picking', pick_id, cr)
- picking_obj.log_picking(cr, uid, picking_ids, context=context)
return True
def _create_account_move_line(self, cr, uid, move, src_account_id, dest_account_id, reference_amount, reference_currency_id, context=None):
@@ -2369,7 +2370,7 @@ class stock_inventory(osv.osv):
'state': 'draft',
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c)
}
-
+
def _inventory_line_hook(self, cr, uid, inventory_line, move_vals):
""" Creates a stock move from an inventory line
@param inventory_line:
@@ -2504,57 +2505,4 @@ class stock_warehouse(osv.osv):
stock_warehouse()
-
-# Move wizard :
-# get confirm or assign stock move lines of partner and put in current picking.
-class stock_picking_move_wizard(osv.osv_memory):
- _name = 'stock.picking.move.wizard'
-
- def _get_picking(self, cr, uid, ctx=None):
- if ctx is None:
- ctx = {}
- if ctx.get('active_id', False):
- return ctx['active_id']
- return False
-
- def _get_picking_address(self, cr, uid, context=None):
- picking_obj = self.pool.get('stock.picking')
- if context is None:
- context = {}
- if context.get('active_id', False):
- picking = picking_obj.browse(cr, uid, [context['active_id']])[0]
- return picking.address_id and picking.address_id.id or False
- return False
-
- _columns = {
- 'name': fields.char('Name', size=64, invisible=True),
- 'move_ids': fields.many2many('stock.move', 'picking_move_wizard_rel', 'picking_move_wizard_id', 'move_id', 'Entry lines', required=True),
- 'address_id': fields.many2one('res.partner.address', 'Dest. Address', invisible=True),
- 'picking_id': fields.many2one('stock.picking', 'Picking list', select=True, invisible=True),
- }
- _defaults = {
- 'picking_id': _get_picking,
- 'address_id': _get_picking_address,
- }
-
- def action_move(self, cr, uid, ids, context=None):
- move_obj = self.pool.get('stock.move')
- picking_obj = self.pool.get('stock.picking')
- for act in self.read(cr, uid, ids):
- move_lines = move_obj.browse(cr, uid, act['move_ids'])
- for line in move_lines:
- if line.picking_id:
- picking_obj.write(cr, uid, [line.picking_id.id], {'move_lines': [(1, line.id, {'picking_id': act['picking_id']})]})
- picking_obj.write(cr, uid, [act['picking_id']], {'move_lines': [(1, line.id, {'picking_id': act['picking_id']})]})
- old_picking = picking_obj.read(cr, uid, [line.picking_id.id])[0]
- if not len(old_picking['move_lines']):
- picking_obj.write(cr, uid, [old_picking['id']], {'state': 'done'})
- else:
- raise osv.except_osv(_('UserError'),
- _('You can not create new moves.'))
- return {'type': 'ir.actions.act_window_close'}
-
-stock_picking_move_wizard()
-
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/stock_demo.xml b/addons/stock/stock_demo.xml
index 33d130c2d77..bdc11f208ca 100644
--- a/addons/stock/stock_demo.xml
+++ b/addons/stock/stock_demo.xml
@@ -244,7 +244,7 @@
-
+ Shop 2
@@ -262,7 +262,7 @@
out
direct
2binvoiced
-
+
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index 08a00b200b2..9a53b6d01d2 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -3,12 +3,12 @@
-
+
-
-
+
+
@@ -93,6 +93,7 @@
+
@@ -100,21 +101,20 @@
-
+
+
-
-
@@ -151,6 +151,7 @@
{'full':'1'}
+ The Periodical Inventories are used when you count your number of products available per location. You can use it, once a year, when you do the general inventory or, once you need it, to correct the current stock level of a product.
@@ -209,6 +210,7 @@
stock.tracking
form
+ This is the list of all your packs. After having selected a Pack, you can get the up-stream or down-stream traceability of the products contained in the pack.
{'full':'1',"search_default_available":1}
+ This is the list of all the production lots (serial numbers) you recorded. After having selected a lot, you can get the up-stream or down-stream traceability of the products contained in lot.
@@ -507,8 +510,9 @@
{'full':1, 'search_default_in_location':1}
+ Define your locations in order to reflect to your warehouse structure and organization. OpenERP is able to manage physical locations (warehouses, shelves, bin, etc), partners location (customers, suppliers) and virtual locations which are the counter-part of the stock operations like the manufacturing orders consummations, the inventories, etc. Every stock operation in OpenERP moves the products from one location to another one. For instance, if you receive products from a supplier, OpenERP will move products from the Supplier location into the Stock location. Each report can be performed on physicals, partners or virtual locations.
-
+
stock.location.tree
@@ -528,6 +532,7 @@
[('location_id','=',False)]
tree
+ This is the structure of your company's warehouses and locations. You can click on a location in order to get the list of the products and their stock level in this particular location and all its children.
@@ -567,35 +572,9 @@
ir.actions.act_window
form
+ Create and manage your warehouses and assign them a location from here
-
-
-
- stock.picking.move.wizard.form
- stock.picking.move.wizard
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
stock.picking.calendar
@@ -747,7 +726,9 @@
-
+
+
+
@@ -775,6 +756,7 @@
+
@@ -792,6 +774,10 @@
+
+
+
+
@@ -806,7 +792,7 @@
stock.picking
tree
-
+
@@ -825,7 +811,7 @@
stock.picking
form
-
+
@@ -934,10 +920,12 @@
-
+
-
+
+
+
@@ -962,11 +950,14 @@
-
-
+
+
+
+
+
@@ -989,7 +980,7 @@
- Outgoing Orders
+ Outgoing Deliveries
stock.picking
ir.actions.act_window
form
@@ -997,6 +988,7 @@
[('type','=','out')]
{'contact_display': 'partner_address', 'search_default_available': 1}
+ This is the list of all delivery orders that must be prepared, according to your different sales orders and your logistics rules.
@@ -1152,7 +1144,9 @@
-
+
+
+
@@ -1172,9 +1166,10 @@
stock.picking
search
-
+
-
+
+
@@ -1195,6 +1190,9 @@
+
+
+
@@ -1209,6 +1207,7 @@
[('type','=','in')]
{'contact_display': 'partner_address',"search_default_available":1}
+ The Incoming Shipments is the list of all orders you will receive from your supplier. An incoming shipment contains a list of products to be received according to the original purchase order. You can validate the shipment totally or partially.
@@ -1268,6 +1267,7 @@
[('type','=','internal')]
{'contact_display': 'partner_address',"search_default_available":1}
+ The Internal Moves lists all inventory operations you have to perform in your warehouse. All operations can be categorized into stock journals, so that each worker has it's own list of operations to perform in his own journal. Most operations are prepared automatically by OpenERP according to your pre-configured logistics rules but you can also record manual stock operations.
@@ -1341,35 +1341,38 @@
-
-
-
-
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
-
-
-
+
-
-
-
-
+
+
+
-
@@ -1392,10 +1395,10 @@
-
-
+
+
-
+
@@ -1455,6 +1458,7 @@
{'search_default_Available':1}
+ This menu gives you the full traceability of inventory operations made on a specific product. You can filter on the product to see all the past or future movements made on the product.
@@ -1528,36 +1532,39 @@
form
-
-
-
-
-
-
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
-
+
-
-
-
+
-
-
-
-
+
+
+
-
@@ -1566,7 +1573,7 @@
+ states="draft,assigned,confirmed,done" colspan="1"/>
+ string="Split" type="action" icon="terp-stock_effects-object-colorize" colspan="1"/>
+
-
-
-
-
+
+
+
+
@@ -1661,15 +1669,16 @@
- Incoming Products
+ Receive Products
stock.move
ir.actions.act_window
form
tree,form
['|','&',('picking_id','=',False),('location_id.usage', 'in', ['customer','supplier']),'&',('picking_id','!=',False),('picking_id.type','=','in')]
- {"search_default_receive":1}
+
+ You will find here the list of all products you are waiting for, according to your preceding purchase orders. Once you receive an order, you can filter based on the name of the supplier or the purchase order reference. Then you can confirm all products received using the buttons on the right of each line.
@@ -1795,15 +1804,16 @@
- Outgoing Products
+ Deliver Products
stock.move
ir.actions.act_window
form
tree,form
['|','&',('picking_id','=',False),('location_dest_id.usage', 'in', ['customer','supplier']),'&',('picking_id','!=',False),('picking_id.type','=','out')]
- {"search_default_receive":1}
+
+ The 'Deliver Products' menu lists all products you have to deliver to your customers. You can process the deliveries directly from this list, line by or line or through the Delivery Orders menu.
@@ -1815,7 +1825,7 @@
form
-
+
@@ -1861,6 +1871,7 @@
stock.journal
ir.actions.act_window
form
+ The stock journals system allows you assign each stock operation into a specific journal according to the type of operation to perform or the worker/team that should perform the operation. Examples of stock journals may be: quality control, pick lists, packing, etc.
-
+
Import Inventory
stock.fill.inventory
form
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
+ id="action_view_stock_fill_inventory"/>
diff --git a/addons/stock/wizard/stock_inventory_merge_view.xml b/addons/stock/wizard/stock_inventory_merge_view.xml
index 62cac877179..7a4735bdf41 100644
--- a/addons/stock/wizard/stock_inventory_merge_view.xml
+++ b/addons/stock/wizard/stock_inventory_merge_view.xml
@@ -22,6 +22,7 @@
res_model="stock.inventory.merge"
src_model="stock.inventory"
view_mode="form"
+ multi="True"
target="new"
key2="client_action_multi"
id="action_view_stock_merge_inventories"/>
diff --git a/addons/stock/wizard/stock_invoice_onshipping.py b/addons/stock/wizard/stock_invoice_onshipping.py
index 7e0693b9045..d841c7cb37a 100644
--- a/addons/stock/wizard/stock_invoice_onshipping.py
+++ b/addons/stock/wizard/stock_invoice_onshipping.py
@@ -29,95 +29,77 @@ class stock_invoice_onshipping(osv.osv_memory):
_columns = {
'journal_id': fields.many2one('account.journal', 'Destination Journal', required=True),
'group': fields.boolean("Group by partner"),
- 'type': fields.selection([('out_invoice', 'Customer Invoice'),
- ('in_invoice', 'Supplier Invoice'),
- ('out_refund', 'Customer Refund'),
- ('in_refund', 'Supplier Refund')] , 'Type', required=True),
'invoice_date': fields.date('Invoiced date'),
}
- def _get_type(self, cr, uid, context=None):
- """ To get invoice type.
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param ids: The ID or list of IDs if we want more than one
- @param context: A standard dictionary
- @return: Invoice type
- """
+ def view_init(self, cr, uid, fields_list, context=None):
if context is None:
context = {}
- picking_obj = self.pool.get('stock.picking')
+ res = super(stock_invoice_onshipping, self).view_init(cr, uid, fields_list, context=context)
+ pick_obj = self.pool.get('stock.picking')
+ count = 0
+ active_ids = context.get('active_ids',[])
+ for pick in pick_obj.browse(cr, uid, active_ids):
+ if pick.invoice_state != '2binvoiced':
+ count += 1
+ if len(active_ids) == 1 and count:
+ raise osv.except_osv(_('Warning !'), _('This picking list does not require invoicing.'))
+ if len(active_ids) == count:
+ raise osv.except_osv(_('Warning !'), _('None of these picking lists require invoicing.'))
+ return res
+
+ def _get_type(self, pick):
src_usage = dest_usage = None
- pick = picking_obj.browse(cr, uid, context['active_id'], context=context)
- if pick.invoice_state == 'invoiced':
- raise osv.except_osv(_('UserError'), _('Invoice is already created.'))
- if pick.invoice_state == 'none':
- raise osv.except_osv(_('UserError'), _('This picking does not require any invoicing.'))
- if pick.move_lines:
- src_usage = pick.move_lines[0].location_id.usage
- dest_usage = pick.move_lines[0].location_dest_id.usage
- if pick.type == 'out' and dest_usage == 'supplier':
- type = 'in_refund'
- elif pick.type == 'out' and dest_usage == 'customer':
- type = 'out_invoice'
- elif pick.type == 'in' and src_usage == 'supplier':
- type = 'in_invoice'
- elif pick.type == 'in' and src_usage == 'customer':
- type = 'out_refund'
- else:
- type = 'out_invoice'
- return type
+ pick_type = None
+ if pick.invoice_state=='2binvoiced':
+ if pick.move_lines:
+ src_usage = pick.move_lines[0].location_id.usage
+ dest_usage = pick.move_lines[0].location_dest_id.usage
+ if pick.type == 'out' and dest_usage == 'supplier':
+ pick_type = 'in_refund'
+ elif pick.type == 'out' and dest_usage == 'customer':
+ pick_type = 'out_invoice'
+ elif pick.type == 'in' and src_usage == 'supplier':
+ pick_type = 'in_invoice'
+ elif pick.type == 'in' and src_usage == 'customer':
+ pick_type = 'out_refund'
+ else:
+ pick_type = 'out_invoice'
+ return pick_type
- _defaults = {
- 'type': _get_type,
- }
-
- def create_invoice(self, cr, uid, ids, context):
- """ To create invoice
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param ids: the ID or list of IDs if we want more than one
- @param context: A standard dictionary
- @return: Invoice ids
- """
+ def create_invoice(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
result = []
picking_obj = self.pool.get('stock.picking')
- mod_obj = self.pool.get('ir.model.data')
- act_obj = self.pool.get('ir.actions.act_window')
+ onshipdata_obj = self.read(cr, uid, ids[0], ['journal_id', 'group', 'invoice_date'])
+ if context.get('new_picking', False):
+ onshipdata_obj['id'] = onshipdata_obj.new_picking
+ onshipdata_obj[ids] = onshipdata_obj.new_picking
- for onshipdata_obj in self.read(cr, uid, ids, ['journal_id', 'group', 'type', 'invoice_date']):
- if context.get('new_picking', False):
- onshipdata_obj[id] = onshipdata_obj.new_picking
- onshipdata_obj[ids] = onshipdata_obj.new_picking
+ context['date_inv'] = onshipdata_obj['invoice_date']
+ invoice_ids = []
+ for picking in picking_obj.browse(cr, uid, context.get('active_ids', []), context=context):
+ if picking.invoice_state == '2binvoiced':
+ res = picking_obj.action_invoice_create(cr, uid, [picking.id],
+ journal_id = onshipdata_obj['journal_id'],
+ group=onshipdata_obj['group'],
+ type=self._get_type(picking),
+ context=context)
+ invoice_ids.extend(res.values())
- type = onshipdata_obj['type']
- context['date_inv'] = onshipdata_obj['invoice_date']
- res = picking_obj.action_invoice_create(cr, uid,context['active_ids'],
- journal_id = onshipdata_obj['journal_id'],
- group=onshipdata_obj['group'],
- type=type,
- context=context)
- invoice_ids = res.values()
- if not invoice_ids:
- raise osv.except_osv(_('Error'), _('Invoice is not created'))
+ if not invoice_ids:
+ raise osv.except_osv(_('Error'), _('No invoice were created'))
- if type == 'out_invoice':
- xml_id = 'action_invoice_tree1'
- elif type == 'in_invoice':
- xml_id = 'action_invoice_tree2'
- elif type == 'out_refund':
- xml_id = 'action_invoice_tree3'
- else:
- xml_id = 'action_invoice_tree4'
-
- result = mod_obj._get_id(cr, uid, 'account', xml_id)
- id = mod_obj.read(cr, uid, result, ['res_id'], context=context)
- result = act_obj.read(cr, uid, id['res_id'], context=context)
- result['res_id'] = invoice_ids
- result['context'] = context
- return result
+ return {
+ 'domain': "[('id','in', ["+','.join(map(str,invoice_ids))+"])]",
+ 'name' : _('New picking invoices'),
+ 'view_type': 'form',
+ 'view_mode': 'tree,form',
+ 'res_model': 'account.invoice',
+ 'context': context,
+ 'type': 'ir.actions.act_window',
+ }
stock_invoice_onshipping()
diff --git a/addons/stock/wizard/stock_invoice_onshipping_view.xml b/addons/stock/wizard/stock_invoice_onshipping_view.xml
index 6284121553c..6a4cfec5fca 100644
--- a/addons/stock/wizard/stock_invoice_onshipping_view.xml
+++ b/addons/stock/wizard/stock_invoice_onshipping_view.xml
@@ -1,36 +1,34 @@
-
+
Stock Invoice Onshipping
stock.invoice.onshipping
form
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
-
- Create Invoice
- stock.invoice.onshipping
- ir.actions.act_window
- form
- tree,form
-
- new
-
-
+
+
diff --git a/addons/stock/wizard/stock_partial_picking.py b/addons/stock/wizard/stock_partial_picking.py
index 1b746f230b5..6f84e5ec12c 100644
--- a/addons/stock/wizard/stock_partial_picking.py
+++ b/addons/stock/wizard/stock_partial_picking.py
@@ -60,13 +60,10 @@ class stock_partial_picking(osv.osv_memory):
result = super(stock_partial_picking, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar,submenu)
pick_obj = self.pool.get('stock.picking')
picking_ids = context.get('active_ids', False)
- _moves_arch_lst = """
-
-
-
-
-
- """
+ _moves_arch_lst = """
+
+
+ """ % (_('Process Document'), _('Products'))
_moves_fields = result['fields']
if picking_ids and view_type in ['form']:
for pick in pick_obj.browse(cr, uid, picking_ids, context):
@@ -101,13 +98,20 @@ class stock_partial_picking(osv.osv_memory):
}
})
+ invisible = "1"
+ if pick.type=='in' and m.product_id.track_incoming:
+ invisible=""
+ if pick.type=='out' and m.product_id.track_outgoing:
+ invisible=""
+
+
_moves_arch_lst += """
-
+
-
- """%(m.id, m.id, m.id, m.id,m.id)
+
+ """%(m.id, m.id, m.id, m.id,m.id, invisible)
if (need_product_cost and m.product_id.cost_method == 'average'):
_moves_fields.update({
diff --git a/addons/stock/wizard/stock_picking_make.py b/addons/stock/wizard/stock_picking_make.py
deleted file mode 100644
index 9d26595f00e..00000000000
--- a/addons/stock/wizard/stock_picking_make.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# 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 .
-#
-##############################################################################
-
-from osv import fields, osv
-import netsvc
-
-class stock_picking_make(osv.osv_memory):
- _name = 'stock.picking.make'
- _description = "Make Picking"
-
- _columns = {
- 'picking_ids': fields.many2many('stock.picking', 'stock_picking_ids', 'parent_id', 'child_id', 'Pickings'),
- }
-
- def default_get(self, cursor, user, fields, context):
- """
- To get default values for the object.
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param fields: List of fields for which we want default values
- @param context: A standard dictionary
- @return: A dictionary which of fields with values.
- """
- res = super(stock_picking_make, self).default_get(cursor, user, fields, context=context)
- record_ids = context and context.get('active_ids',False) or False
- if record_ids:
- picking_obj = self.pool.get('stock.picking')
- picking_ids = picking_obj.search(cursor, user, [
- ('id', 'in', record_ids),
- ('state', '<>', 'done'),
- ('state', '<>', 'cancel')], context=context)
- res['picking_ids'] = picking_ids
- return res
-
- def make_packing(self, cursor, user, ids, context):
- """
- Make Picking.
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param fields: List of fields for which we want default values
- @param context: A standard dictionary
- @return: A dictionary which of fields with values.
- """
- record_ids = context and context.get('active_ids',False) or False
- wkf_service = netsvc.LocalService('workflow')
- picking_obj = self.pool.get('stock.picking')
- data = self.read(cursor, user, ids[0])
- pick_ids = data['picking_ids']
- picking_obj.force_assign(cursor, user, pick_ids)
- picking_obj.action_move(cursor, user, pick_ids)
- for picking_id in ids:
- wkf_service.trg_validate(user, 'stock.picking', picking_id,
- 'button_done', cursor)
- return {}
-
-stock_picking_make()
-
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/stock/wizard/stock_picking_make_view.xml b/addons/stock/wizard/stock_picking_make_view.xml
deleted file mode 100644
index 4ecebed1031..00000000000
--- a/addons/stock/wizard/stock_picking_make_view.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
- Make Picking
- stock.picking.make
- form
-
-
-
-
-
-
-
-
-
-
-
- Make Picking
- ir.actions.act_window
- stock.picking.make
- form
- form
- new
-
-
-
diff --git a/addons/stock/wizard/stock_return_picking.py b/addons/stock/wizard/stock_return_picking.py
index 4bddc9a7ee4..78852202440 100644
--- a/addons/stock/wizard/stock_return_picking.py
+++ b/addons/stock/wizard/stock_return_picking.py
@@ -83,7 +83,7 @@ class stock_return_picking(osv.osv_memory):
if 'return%s'%(m.id) not in self._columns:
self._columns['return%s'%(m.id)] = fields.float(string=m.name, required=True)
if 'invoice_state' not in self._columns:
- self._columns['invoice_state'] = fields.selection([('2binvoiced', 'To be Invoiced'), ('none', 'None')], string='Invoice State', required=True)
+ self._columns['invoice_state'] = fields.selection([('2binvoiced', 'To be refunded/invoiced'), ('none', 'No invoicing')], string='Invoicing', required=True)
if not valid_lines:
raise osv.except_osv(_('Warning !'), _("There are no products to return (only lines in Done state and not fully returned yet can be returned)!"))
return res
@@ -119,7 +119,7 @@ class stock_return_picking(osv.osv_memory):
res['fields']['return%s' % m.id]={'string':m.name, 'type':'float', 'required':True}
res.setdefault('returns', []).append(m.id)
arch_lst.append(' \n ')
- res['fields']['invoice_state']={'string':_('Invoice state'), 'type':'selection','required':True, 'selection':[('2binvoiced', _('To Be Invoiced')), ('none', _('None'))]}
+ res['fields']['invoice_state']={'string':_('Invoicing'), 'type':'selection','required':True, 'selection':[('2binvoiced', _('To be refunded/invoiced')), ('none', _('No invoicing'))]}
arch_lst.append('')
arch_lst.append(' ')
arch_lst.append(' ')
diff --git a/addons/stock_invoice_directly/test/stock_invoice_directly.yml b/addons/stock_invoice_directly/test/stock_invoice_directly.yml
index 6a7e99276b9..4a0708b84d9 100644
--- a/addons/stock_invoice_directly/test/stock_invoice_directly.yml
+++ b/addons/stock_invoice_directly/test/stock_invoice_directly.yml
@@ -65,7 +65,6 @@
!record {model: stock.invoice.onshipping, id: stock_invoice_onshipping_0}:
invoice_date: '2010-08-04'
journal_id: account.bank_journal
- type: out_invoice
-
I create a Customer invoice for my outgoing picking order.
-
@@ -82,4 +81,4 @@
partner = picking[0].address_id.partner_id.id
inv_ids = self.search(cr, uid, [('type','=','out_invoice'),('partner_id','=',partner)])
assert inv_ids, 'No Invoice is generated!'
-
\ No newline at end of file
+
diff --git a/addons/stock_location/procurement_pull.py b/addons/stock_location/procurement_pull.py
index 8b780d7a7a6..31316bf4eae 100644
--- a/addons/stock_location/procurement_pull.py
+++ b/addons/stock_location/procurement_pull.py
@@ -42,8 +42,6 @@ class procurement_order(osv.osv):
for procurement in self.browse(cr, uid, ids):
for line in procurement.product_id.flow_pull_ids:
if line.location_id==procurement.location_id:
- if not line.location_src_id:
- self.write(cr, uid, procurement.id, {'message': _('No source location defined to generate the picking !')})
return (line.type_proc=='move') and (line.location_src_id)
return False
diff --git a/addons/stock_location/stock_location_view.xml b/addons/stock_location/stock_location_view.xml
index eca4ade39fa..96d3fd84809 100644
--- a/addons/stock_location/stock_location_view.xml
+++ b/addons/stock_location/stock_location_view.xml
@@ -43,7 +43,7 @@
-
+
@@ -59,7 +59,7 @@
-
+
diff --git a/addons/stock_no_autopicking/i18n/it.po b/addons/stock_no_autopicking/i18n/it.po
index bc0cc16eef2..0486af4d8db 100644
--- a/addons/stock_no_autopicking/i18n/it.po
+++ b/addons/stock_no_autopicking/i18n/it.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-02-03 09:22+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2010-10-17 07:58+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-09-29 05:13+0000\n"
+"X-Launchpad-Export-Date: 2010-10-18 04:55+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock_no_autopicking
@@ -24,7 +24,7 @@ msgstr "XML non valido per Visualizzazione Architettura!"
#. module: stock_no_autopicking
#: field:product.product,auto_pick:0
msgid "Auto Picking"
-msgstr ""
+msgstr "Scelta Automatica"
#. module: stock_no_autopicking
#: help:product.product,auto_pick:0
diff --git a/addons/stock_planning/security/ir.model.access.csv b/addons/stock_planning/security/ir.model.access.csv
index d4d543e25c4..d83c6d2f4d8 100644
--- a/addons/stock_planning/security/ir.model.access.csv
+++ b/addons/stock_planning/security/ir.model.access.csv
@@ -1,8 +1,5 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_stock_planning_system","stock.planning system","model_stock_planning","base.group_system",1,0,0,0
"access_stock_planning_manager","stock.planning manager","model_stock_planning","stock.group_stock_manager",1,0,0,0
"access_stock_planning_user","stock.planning user","model_stock_planning","stock.group_stock_user",1,1,1,1
-"access_stock_period_","stock.period","model_stock_period","base.group_system",1,1,1,1
"access_stock_sale_forecast_user","stock.sale.forecast user","model_stock_sale_forecast","base.group_sale_salesman",1,1,1,1
"access_stock_sale_forecast_manager","stock.sale.forecast manager","model_stock_sale_forecast","base.group_sale_manager",1,0,0,0
-"access_stock_sale_forecast_system","stock.sale.forecast system","model_stock_sale_forecast","base.group_system",1,0,0,0
diff --git a/addons/stock_planning/stock_planning_view.xml b/addons/stock_planning/stock_planning_view.xml
index 704703cb13a..8d8c3cd3790 100644
--- a/addons/stock_planning/stock_planning_view.xml
+++ b/addons/stock_planning/stock_planning_view.xml
@@ -3,7 +3,7 @@
+ parent="base.menu_base_config" sequence="20"/>
@@ -182,7 +182,7 @@
+ parent="base.menu_base_partner" sequence="6" groups="base.group_extended"/>
stock.sale.forecast.list.select
diff --git a/addons/survey/report/survey_browse_response.py b/addons/survey/report/survey_browse_response.py
index 2cdb98622a9..a2ee95e417e 100644
--- a/addons/survey/report/survey_browse_response.py
+++ b/addons/survey/report/survey_browse_response.py
@@ -204,6 +204,7 @@ class survey_browse_response(report_rml):
rml += """
Answer Create Date:-
+ # *-* formatting hard coded, breaks with utf8
""" + to_xml(time.strftime('%d-%m-%Y %I:%M:%S %p', time.strptime(response.date_create.split('.')[0], '%Y-%m-%d %H:%M:%S'))) + """
Answer By:-
diff --git a/addons/survey/survey.py b/addons/survey/survey.py
index 57a78e9ac5d..5343ef3c229 100644
--- a/addons/survey/survey.py
+++ b/addons/survey/survey.py
@@ -68,6 +68,7 @@ class survey(osv.osv):
'users': fields.many2many('res.users', 'survey_users_rel', 'sid', 'uid', 'Users'),
'send_response': fields.boolean('E-mail Notification on Answer'),
'type': fields.many2one('survey.type', 'Type'),
+ 'invited_user_ids': fields.many2many('res.users', 'survey_invited_user_rel', 'sid', 'uid', 'Invited User'),
}
_defaults = {
'state': lambda * a: "draft",
diff --git a/addons/survey/survey_view.xml b/addons/survey/survey_view.xml
index 44bcb4475b5..713f3dbf7a4 100644
--- a/addons/survey/survey_view.xml
+++ b/addons/survey/survey_view.xml
@@ -206,6 +206,9 @@
+
+
+
diff --git a/addons/survey/wizard/survey_selection.py b/addons/survey/wizard/survey_selection.py
index 69cc8e10796..0f7ca8628f0 100644
--- a/addons/survey/wizard/survey_selection.py
+++ b/addons/survey/wizard/survey_selection.py
@@ -62,9 +62,20 @@ class survey_name_wiz(osv.osv_memory):
for sur in surv_obj.browse(cr, uid, [context.get('survey_id',False)]):
result.append((sur.id, sur.title))
return result
+ survey_user_group_id = self.pool.get('res.groups').search(cr, uid, [('name', '=', 'Survey / User')])
group_id = self.pool.get('res.groups').search(cr, uid, [('name', 'in', ('Tools / Manager','Tools / User','Survey / User'))])
user_obj = self.pool.get('res.users')
user_rec = user_obj.read(cr, uid, uid)
+ if survey_user_group_id:
+ if survey_user_group_id == user_rec['groups_id']:
+ for sur in surv_obj.browse(cr, uid, surv_obj.search(cr, uid, [])):
+ if sur.state == 'open':
+ u_list = []
+ for use in sur.invited_user_ids:
+ u_list.append(use.id)
+ if uid in u_list:
+ result.append((sur.id, sur.title))
+ return result
for sur in surv_obj.browse(cr, uid, surv_obj.search(cr, uid, [])):
if sur.state == 'open':
res = False
diff --git a/addons/survey/wizard/survey_send_invitation.py b/addons/survey/wizard/survey_send_invitation.py
index b9740fba6ba..92ba965d880 100644
--- a/addons/survey/wizard/survey_send_invitation.py
+++ b/addons/survey/wizard/survey_send_invitation.py
@@ -113,7 +113,13 @@ class survey_send_invitation(osv.osv_memory):
error = ""
res_user = ""
user_exists = False
+ new_user = []
attachments = []
+ current_sur = survey_ref.browse(cr, uid, context.get('active_id'), context=context)
+ exist_user = current_sur.invited_user_ids
+ if exist_user:
+ for use in exist_user:
+ new_user.append(use.id)
for id in survey_ref.browse(cr, uid, survey_ids):
report = self.create_report(cr, uid, [id.id], 'report.survey.form', id.title)
file = open(tools.config['addons_path'] + '/survey/report/' + id.title +".pdf")
@@ -134,6 +140,8 @@ class survey_send_invitation(osv.osv_memory):
continue
user = user_ref.search(cr, uid, [('login', "=", addr.email)])
if user:
+ if user[0] not in new_user:
+ new_user.append(user[0])
user = user_ref.browse(cr, uid, user[0])
user_ref.write(cr, uid, user.id, {'survey_id':[[6, 0, survey_ids]]})
mail = record['mail']%{'login':addr.email, 'passwd':user.password, \
@@ -172,11 +180,17 @@ class survey_send_invitation(osv.osv_memory):
'survey_id': [[6, 0, survey_ids]]
}
user = user_ref.create(cr, uid, res_data)
+ if user not in new_user:
+ new_user.append(user)
created+= "- %s (Login: %s, Password: %s)\n" % (addr.name or 'Unknown',\
addr.email, passwd)
else:
error+= "- %s (Login: %s, Password: %s)\n" % (addr.name or 'Unknown',\
addr.email, passwd)
+
+ new_vals = {}
+ new_vals.update({'invited_user_ids':[[6,0,new_user]]})
+ survey_ref.write(cr, uid, context.get('active_id'),new_vals)
note= ""
if created:
note += 'Created users:\n%s\n\n' % (created)
diff --git a/addons/warning/i18n/sr.po b/addons/warning/i18n/sr.po
index 9f01330dfd7..733a627ada9 100644
--- a/addons/warning/i18n/sr.po
+++ b/addons/warning/i18n/sr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-10-14 17:20+0000\n"
-"Last-Translator: zmmaj \n"
+"PO-Revision-Date: 2010-10-15 09:41+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Serbian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-10-15 04:42+0000\n"
+"X-Launchpad-Export-Date: 2010-10-16 04:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: warning
diff --git a/addons/wiki/web/widgets/wikimarkup/__init__.py b/addons/wiki/web/widgets/wikimarkup/__init__.py
index 91fec4bc4fd..5eceea0e86d 100644
--- a/addons/wiki/web/widgets/wikimarkup/__init__.py
+++ b/addons/wiki/web/widgets/wikimarkup/__init__.py
@@ -455,7 +455,6 @@ class BaseParser(object):
if hasattr(self, 'count'):
data = self.env[namespace]
test = key in data
- ls
self.count = True
return key in self.env[namespace]
@@ -1114,7 +1113,7 @@ class BaseParser(object):
trail = url[i:] + trail
url = url[0:i]
- url = cleanURL(url)
+ url = self.cleanURL(url)
sb.append(u'\n")
toc.append(u"\n\n" * max(0, toclevel - 1))
- toc.insert(0, u'' + _('Table of Contents') + ' ')
+ #TODO: use gettext
+ #toc.insert(0, u'
' + _('Table of Contents') + ' ')
+ toc.insert(0, u'
Table of Contents ')
toc.append(u'\n')
# split up and insert constructed headlines
diff --git a/addons/wiki/wiki_view.xml b/addons/wiki/wiki_view.xml
index 9730031f630..8afd0435a41 100644
--- a/addons/wiki/wiki_view.xml
+++ b/addons/wiki/wiki_view.xml
@@ -6,7 +6,7 @@
+ parent="knowledge.menu_document" sequence="50"/>
diff --git a/addons/wiki_sale_faq/wiki_sale_faq_view.xml b/addons/wiki_sale_faq/wiki_sale_faq_view.xml
index f65e542aed9..d1432c74b02 100644
--- a/addons/wiki_sale_faq/wiki_sale_faq_view.xml
+++ b/addons/wiki_sale_faq/wiki_sale_faq_view.xml
@@ -13,7 +13,7 @@
ir.attachment
form
-
Documents give your access to all attached documents; it's a repository of all attached documents (mails, documents attached to a project, etc.)
+
Documents gives you an access to all attached files to any record. It is a repository of all documents such as emails, project related attachments or any other documents. From this view, you can search on the content of the documents. OpenERP automatically assign meta-data based on the record like the related partner and indexes the content of .DOC, .ODT, .TXT, .SXW and .PDF documents.
@@ -23,7 +23,7 @@
tree,form
- FAQ is a wiki page used to share frequently ask questions.
+ Wiki pages allow you to share ideas and questions with co-workers. You can create a new document that can be linked to one or several applications (specifications of a project, a FAQ for sales teams, etc.). Keywords can be used to easily tag wiki pages. You should use this application with the OpenERP web client interface.