diff --git a/addons/account/__init__.py b/addons/account/__init__.py
index 98f7a7d5134..90fbdb83980 100644
--- a/addons/account/__init__.py
+++ b/addons/account/__init__.py
@@ -37,4 +37,6 @@ import ir_sequence
import company
import res_currency
import edi
+import res_config
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account/__openerp__.py b/addons/account/__openerp__.py
index 850a8f49842..fba1bd8736f 100644
--- a/addons/account/__openerp__.py
+++ b/addons/account/__openerp__.py
@@ -125,6 +125,7 @@ module named account_voucher.
'board_account_view.xml',
"edi/invoice_action_data.xml",
"account_bank_view.xml",
+ "res_config_view.xml",
"account_pre_install.yml"
],
'demo_xml': [
diff --git a/addons/account/account_bank_view.xml b/addons/account/account_bank_view.xml
index 8d0b1aa5db3..df754da7f90 100644
--- a/addons/account/account_bank_view.xml
+++ b/addons/account/account_bank_view.xml
@@ -50,13 +50,5 @@
id="menu_action_bank_tree"
action="action_bank_tree"/>
-
-
-
-
- 4
-
-
-
diff --git a/addons/account/account_installer.xml b/addons/account/account_installer.xml
index 430d65e0bf9..8c2865ea9b9 100644
--- a/addons/account/account_installer.xml
+++ b/addons/account/account_installer.xml
@@ -62,48 +62,5 @@
automatic
-
- Review your Financial Accounts
- ir.actions.act_window
- account.account
- form
- tree,form
- {'config_invisible': False}
-
-
-
-
-
-
-
-
-
- Review your Financial Journals
- ir.actions.act_window
- account.journal
- form
- tree,form
- Setup your accounting journals. For bank accounts, it's better to use the 'Setup Your Bank Accounts' tool that will automatically create the accounts and journals for you.
-
-
-
-
-
-
-
-
- Review your Payment Terms
- ir.actions.act_window
- account.payment.term
- form
- tree,form
- Payment terms define the conditions to pay a customer or supplier invoice in one or several payments. Customers periodic reminders will use the payment terms for each letter. Each customer or supplier can be assigned to one of these payment terms.
-
-
-
-
-
-
-
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index 700936695b8..d06ba70bf02 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -178,6 +178,7 @@ class account_invoice(osv.osv):
return invoice_ids
_name = "account.invoice"
+ _inherit = ['mail.thread']
_description = 'Invoice'
_order = "id desc"
@@ -355,12 +356,8 @@ class account_invoice(osv.osv):
context = {}
try:
res = super(account_invoice, self).create(cr, uid, vals, context)
- for inv_id, name in self.name_get(cr, uid, [res], context=context):
- ctx = context.copy()
- if vals.get('type', 'in_invoice') in ('out_invoice', 'out_refund'):
- ctx = self.get_log_context(cr, uid, context=ctx)
- message = _("Invoice '%s' is waiting for validation.") % name
- self.log(cr, uid, inv_id, message, context=ctx)
+ if res:
+ self.create_send_note(cr, uid, [res], context=context)
return res
except Exception, e:
if '"journal_id" viol' in e.args[0]:
@@ -373,9 +370,7 @@ class account_invoice(osv.osv):
if context is None:
context = {}
self.write(cr, uid, ids, {'state':'paid'}, context=context)
- for inv_id, name in self.name_get(cr, uid, ids, context=context):
- message = _("Invoice '%s' is paid.") % name
- self.log(cr, uid, inv_id, message)
+ self.confirm_paid_send_note(cr, uid, ids, context=context)
return True
def unlink(self, cr, uid, ids, context=None):
@@ -943,6 +938,11 @@ class account_invoice(osv.osv):
move_obj.post(cr, uid, [move_id], context=ctx)
self._log_event(cr, uid, ids)
return True
+
+ def invoice_validate(self, cr, uid, ids, context=None):
+ self.write(cr, uid, ids, {'state':'open'}, context=context)
+ self.invoice_validate_send_note(cr, uid, ids, context=context)
+ return True
def line_get_convert(self, cr, uid, x, part, date, context=None):
return {
@@ -1033,6 +1033,7 @@ class account_invoice(osv.osv):
# will be automatically deleted too
account_move_obj.unlink(cr, uid, move_ids, context=context)
self._log_event(cr, uid, ids, -1.0, 'Cancel Invoice')
+ self.invoice_cancel_send_note(cr, uid, ids, context=context)
return True
###################
@@ -1240,7 +1241,36 @@ class account_invoice(osv.osv):
# Update the stored value (fields.function), so we write to trigger recompute
self.pool.get('account.invoice').write(cr, uid, ids, {}, context=context)
return True
-
+
+ # -----------------------------------------
+ # OpenChatter notifications and need_action
+ # -----------------------------------------
+
+ def _get_document_type(self, type):
+ type_dict = {
+ 'out_invoice': 'Customer invoice',
+ 'in_invoice': 'Supplier invoice',
+ 'out_refund': 'Customer Refund',
+ 'in_refund': 'Supplier Refund',
+ }
+ return type_dict.get(type, 'Invoice')
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids, context=context):
+ self.message_append_note(cr, uid, [obj.id],body=_("%s created.") % (self._get_document_type(obj.type)), context=context)
+
+ def invoice_validate_send_note(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids, context=context):
+ self.message_append_note(cr, uid, [obj.id], body=_("%s validated.") % (self._get_document_type(obj.type)), context=context)
+
+ def confirm_paid_send_note(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids, context=context):
+ self.message_append_note(cr, uid, [obj.id], body=_("%s paid.") % (self._get_document_type(obj.type)), context=context)
+
+ def invoice_cancel_send_note(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids, context=context):
+ self.message_append_note(cr, uid, [obj.id], body=_("%s cancelled.") % (self._get_document_type(obj.type)), context=context)
+
account_invoice()
class account_invoice_line(osv.osv):
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 6d499b4d3ad..ca8530fb082 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -243,6 +243,7 @@
+
@@ -303,7 +304,7 @@
-
+
@@ -338,6 +339,7 @@
+
@@ -350,7 +352,7 @@
-
+
diff --git a/addons/account/account_invoice_workflow.xml b/addons/account/account_invoice_workflow.xml
index 2af1e192a9b..13db193af8d 100644
--- a/addons/account/account_invoice_workflow.xml
+++ b/addons/account/account_invoice_workflow.xml
@@ -27,7 +27,7 @@
action_date_assign()
action_move_create()
action_number()
-write({'state':'open'})
+invoice_validate()
function
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index b096ce7c0f6..66e5201e214 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -2505,15 +2505,6 @@ action = pool.get('res.config').next(cr, uid, [], context)
New Company Financial Setting
-
-
- New Company Financial Setting
-
-
- STOCK_EXECUTE
-
-
-
account.account.graphaccount.account
diff --git a/addons/account/company.py b/addons/account/company.py
index 4ad4d1226d7..e961fa563e4 100644
--- a/addons/account/company.py
+++ b/addons/account/company.py
@@ -24,6 +24,7 @@ from osv import fields, osv
class res_company(osv.osv):
_inherit = "res.company"
_columns = {
+ 'expects_chart_of_accounts': fields.boolean('Expects a Chart of Accounts'),
'paypal_account': fields.char("Paypal Account", size=128, help="Paypal username (usually email) for receiving online payments."),
'overdue_msg': fields.text('Overdue Payments Message', translate=True),
'property_reserve_and_surplus_account': fields.property(
@@ -37,6 +38,7 @@ class res_company(osv.osv):
}
_defaults = {
+ 'expects_chart_of_accounts': True,
'overdue_msg': '''Our records indicate that the following payments are still due. If the amount
has already been paid, please disregard this notice. However, if you have any
queries regarding your account, please contact us.
diff --git a/addons/account/i18n/es.po b/addons/account/i18n/es.po
index 2362401f47e..4f4a47f3117 100644
--- a/addons/account/i18n/es.po
+++ b/addons/account/i18n/es.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-02-10 17:13+0000\n"
-"Last-Translator: Carlos @ smile-iberia \n"
+"PO-Revision-Date: 2012-04-10 07:47+0000\n"
+"Last-Translator: mikel \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-11 05:08+0000\n"
-"X-Generator: Launchpad (build 14771)\n"
+"X-Launchpad-Export-Date: 2012-04-11 04:38+0000\n"
+"X-Generator: Launchpad (build 15070)\n"
#. module: account
#: view:account.invoice.report:0
@@ -67,7 +67,7 @@ msgstr "Pendiente"
#. module: account
#: constraint:account.period:0
msgid "Error ! The duration of the Period(s) is/are invalid. "
-msgstr "¡Error! La duración del periodo o periodos no es válida "
+msgstr "¡Error! La duración del periodo(s) no es válido. "
#. module: account
#: field:account.analytic.line,currency_id:0
@@ -3690,7 +3690,7 @@ msgstr "Fecha"
#. module: account
#: view:account.move:0
msgid "Post"
-msgstr ""
+msgstr "Enviar"
#. module: account
#: view:account.unreconcile:0
@@ -4733,7 +4733,7 @@ msgstr "Varios"
#. module: account
#: model:email.template,subject:account.email_template_edi_invoice
msgid "${object.company_id.name} Invoice (Ref ${object.number or 'n/a' })"
-msgstr ""
+msgstr "${object.company_id.name} Factura (Ref ${object.number or 'n/d' })"
#. module: account
#: help:res.partner,last_reconciliation_date:0
@@ -4982,6 +4982,9 @@ msgid ""
"From this view, have an analysis of your treasury. It sums the balance of "
"every accounting entries made on liquidity accounts per period."
msgstr ""
+"En esta vista, visualice un análisis de su tesorería. El total es el balance "
+"de todos los apuntes contables realizados en cuentas de liquidez, por "
+"periodo."
#. module: account
#: field:account.journal,group_invoice_lines:0
@@ -6268,7 +6271,7 @@ msgstr "Facturas abiertas y pagadas"
#. module: account
#: selection:account.financial.report,display_detail:0
msgid "Display children flat"
-msgstr ""
+msgstr "Mostrar descendientes en plano"
#. module: account
#: code:addons/account/account.py:629
@@ -6592,7 +6595,7 @@ msgstr "Sólo lectura"
#. module: account
#: view:account.payment.term.line:0
msgid " Valuation: Balance"
-msgstr ""
+msgstr " Evaluación: Balance"
#. module: account
#: field:account.invoice.line,uos_id:0
@@ -8208,6 +8211,8 @@ msgid ""
"The statement balance is incorrect !\n"
"The expected balance (%.2f) is different than the computed one. (%.2f)"
msgstr ""
+"El balance del asiento es incorrecto\n"
+"El balance esperado (%.2f) es diferente al calculado. (%.2f)"
#. module: account
#: code:addons/account/account_bank_statement.py:353
@@ -8498,7 +8503,7 @@ msgstr "Cuenta de la categoría de ingresos"
#. module: account
#: field:account.account,adjusted_balance:0
msgid "Adjusted Balance"
-msgstr ""
+msgstr "Balance ajustado"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_fiscal_position_template_form
@@ -8659,7 +8664,7 @@ msgstr "Tipos de cuentas"
#. module: account
#: view:account.payment.term.line:0
msgid " Value amount: n.a"
-msgstr ""
+msgstr " Valor del importe: n.d."
#. module: account
#: view:account.automatic.reconcile:0
@@ -8755,7 +8760,7 @@ msgstr "La cuenta de la empresa utilizada para esta factura."
#: code:addons/account/account.py:3296
#, python-format
msgid "Tax %.2f%%"
-msgstr ""
+msgstr "Impuestox %.2f%%"
#. module: account
#: view:account.analytic.account:0
@@ -10877,6 +10882,75 @@ msgid ""
"% endif\n"
" "
msgstr ""
+"\n"
+"Hola${object.address_invoice_id.name and ' ' or "
+"''}${object.address_invoice_id.name or ''},\n"
+"\n"
+"Está disponible una nueva factura para ${object.partner_id.name}:\n"
+" | Nº de factura: *${object.number}*\n"
+" | Importe: *${object.amount_total} ${object.currency_id.name}*\n"
+" | Fecha: ${object.date_invoice}\n"
+" % if object.origin:\n"
+" | Referencia: ${object.origin}\n"
+" % endif\n"
+" | Su contacto: ${object.user_id.name} ${object.user_id.user_email and "
+"'<%s>'%(object.user_id.user_email) or ''}\n"
+"\n"
+"Puede ver el documento de la factura, descargarlo y pagarlo online siguiendo "
+"el enlace:\n"
+" ${ctx.get('edi_web_url_view') or 'n/a'}\n"
+"\n"
+"% if object.company_id.paypal_account and object.type in ('out_invoice', "
+"'in_refund'):\n"
+"<% \n"
+"comp_name = quote(object.company_id.name)\n"
+"inv_number = quote(object.number)\n"
+"paypal_account = quote(object.company_id.paypal_account)\n"
+"inv_amount = quote(str(object.amount_total))\n"
+"cur_name = quote(object.currency_id.name)\n"
+"paypal_url = \"https://www.paypal.com/cgi-"
+"bin/webscr?cmd=_xclick&business=%s&item_name=%s%%20Invoice%%20%s\"\\\n"
+" "
+"\"&invoice=%s&amount=%s¤cy_code=%s&button_subtype=services&no_note=1&bn"
+"=OpenERP_Invoice_PayNow_%s\" % \\\n"
+" "
+"(paypal_account,comp_name,inv_number,inv_number,inv_amount,cur_name,cur_name)"
+"\n"
+"%>\n"
+"También puede pagar directamente mediante Paypal:\n"
+" ${paypal_url}\n"
+"% endif\n"
+"\n"
+"Si tiene cualquier consulta no dude en contactarnos.\n"
+"\n"
+"\n"
+"¡Gracia por elegir ${object.company_id.name}!\n"
+"\n"
+"\n"
+"--\n"
+"${object.user_id.name} ${object.user_id.user_email and "
+"'<%s>'%(object.user_id.user_email) or ''}\n"
+"${object.company_id.name}\n"
+"% if object.company_id.street:\n"
+"${object.company_id.street or ''}\n"
+"% endif\n"
+"% if object.company_id.street2:\n"
+"${object.company_id.street2}\n"
+"% endif\n"
+"% if object.company_id.city or object.company_id.zip:\n"
+"${object.company_id.zip or ''} ${object.company_id.city or ''}\n"
+"% endif\n"
+"% if object.company_id.country_id:\n"
+"${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) "
+"or ''} ${object.company_id.country_id.name or ''}\n"
+"% endif\n"
+"% if object.company_id.phone:\n"
+"Phone: ${object.company_id.phone}\n"
+"% endif\n"
+"% if object.company_id.website:\n"
+"${object.company_id.website or ''}\n"
+"% endif\n"
+" "
#. module: account
#: model:ir.model,name:account.model_res_partner_bank
diff --git a/addons/account/res_config.py b/addons/account/res_config.py
new file mode 100644
index 00000000000..ebdf84be35e
--- /dev/null
+++ b/addons/account/res_config.py
@@ -0,0 +1,282 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. ().
+#
+# 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
+import datetime
+from dateutil.relativedelta import relativedelta
+from operator import itemgetter
+from os.path import join as opj
+
+from tools.translate import _
+from osv import osv, fields
+import tools
+
+class account_config_settings(osv.osv_memory):
+ _name = 'account.config.settings'
+ _inherit = 'res.config.settings'
+
+ _columns = {
+ 'company_id': fields.many2one('res.company', 'Company', required=True),
+ 'has_default_company': fields.boolean('Has default company', readonly=True),
+
+ 'expects_chart_of_accounts': fields.related('company_id', 'expects_chart_of_accounts', type='boolean',
+ string='Chart of Accounts for this Company'),
+ 'currency_id': fields.related('company_id', 'currency_id', type='many2one', relation='res.currency', required=True,
+ string='Main currency', help="Main currency of the company."),
+ 'paypal_account': fields.related('company_id', 'paypal_account', type='char', size=128,
+ string='Paypal account', help="Paypal account (email) for receiving online payments (credit card, etc.)"),
+ 'company_footer': fields.related('company_id', 'rml_footer2', type='char', size=250, readonly=True,
+ string='Bank Accounts on Reports', help="Bank accounts as printed on footer of reports."),
+
+ 'has_chart_of_accounts': fields.boolean('Company has a chart of accounts'),
+ 'chart_template_id': fields.many2one('account.chart.template', 'Chart Template', domain="[('visible','=', True)]"),
+ 'code_digits': fields.integer('# of Digits', help="No. of Digits to use for account code"),
+ 'seq_journal': fields.boolean('Separated Journal Sequences', help="Check this box if you want to use a different sequence for each created journal. Otherwise, all will use the same sequence."),
+ 'sale_tax': fields.many2one("account.tax.template", "Default Sale Tax"),
+ 'purchase_tax': fields.many2one("account.tax.template", "Default Purchase Tax"),
+ 'sale_tax_rate': fields.float('Sales Tax (%)'),
+ 'purchase_tax_rate': fields.float('Purchase Tax (%)'),
+ 'complete_tax_set': fields.boolean('Complete Set of Taxes', help='This boolean helps you to choose if you want to propose to the user to encode the sales and purchase rates or use the usual m2o fields. This last choice assumes that the set of tax defined for the chosen template is complete'),
+
+ 'has_fiscal_year': fields.boolean('Company has a fiscal year'),
+ 'date_start': fields.date('Start Date', required=True),
+ 'date_stop': fields.date('End Date', required=True),
+ 'period': fields.selection([('month', 'Monthly'), ('3months','3 Monthly')], 'Periods', required=True),
+
+ 'sale_journal_id': fields.many2one('account.journal', 'Sale Journal'),
+ 'sale_sequence_prefix': fields.related('sale_journal_id', 'sequence_id', 'prefix', type='char', string='Invoice Sequence'),
+ 'sale_sequence_next': fields.related('sale_journal_id', 'sequence_id', 'number_next', type='integer', string='Next Invoice Number'),
+ 'sale_refund_journal_id': fields.many2one('account.journal', 'Sale Refund Journal'),
+ 'sale_refund_sequence_prefix': fields.related('sale_refund_journal_id', 'sequence_id', 'prefix', type='char', string='Refund Sequence'),
+ 'sale_refund_sequence_next': fields.related('sale_refund_journal_id', 'sequence_id', 'number_next', type='integer', string='Next Refund Number'),
+ 'purchase_journal_id': fields.many2one('account.journal', 'Purchase Journal'),
+ 'purchase_sequence_prefix': fields.related('purchase_journal_id', 'sequence_id', 'prefix', type='char', string='Supplier Invoice Sequence'),
+ 'purchase_sequence_next': fields.related('purchase_journal_id', 'sequence_id', 'number_next', type='integer', string='Next Supplier Invoice Number'),
+ 'purchase_refund_journal_id': fields.many2one('account.journal', 'Purchase Refund Journal'),
+ 'purchase_refund_sequence_prefix': fields.related('purchase_refund_journal_id', 'sequence_id', 'prefix', type='char', string='Supplier Refund Sequence'),
+ 'purchase_refund_sequence_next': fields.related('purchase_refund_journal_id', 'sequence_id', 'number_next', type='integer', string='Next Supplier Refund Number'),
+
+ 'module_account_check_writing': fields.boolean('Support check writings',
+ help="""This allows you to check writing and printing.
+ This installs the module account_check_writing."""),
+ 'module_account_accountant': fields.boolean('Accountant Features',
+ help="""This allows you to access all the accounting features, like the journal items and the chart of accounts.
+ This installs the module account_accountant."""),
+ 'module_account_asset': fields.boolean('Assets Management',
+ help="""This allows you to manage the assets owned by a company or a person.
+ It keeps track of the depreciation occurred on those assets, and creates account move for those depreciation lines.
+ This installs the module account_asset."""),
+ 'module_account_budget': fields.boolean('Budgets Management',
+ help="""This allows accountants to manage analytic and crossovered budgets.
+ Once the master budgets and the budgets are defined,
+ the project managers can set the planned amount on each analytic account.
+ This installs the module account_budget."""),
+ 'module_account_payment': fields.boolean('Supplier Payment Orders',
+ help="""This allows you to create and manage your payment orders, with purposes to
+ * serve as base for an easy plug-in of various automated payment mechanisms, and
+ * provide a more efficient way to manage invoice payments.
+ This installs the module account_payment."""),
+ 'module_account_voucher': fields.boolean('Manage Customer Payments',
+ help="""This includes all the basic requirements of voucher entries for bank, cash, sales, purchase, expense, contra, etc.
+ This installs the module account_voucher."""),
+ 'module_account_followup': fields.boolean('Customer Follow-Ups',
+ help="""This allows to automate letters for unpaid invoices, with multi-level recalls.
+ This installs the module account_followup."""),
+ 'module_account_analytic_plans': fields.boolean('Support Multiple Analytic Plans',
+ help="""This allows to use several analytic plans, according to the general journal.
+ This installs the module account_analytic_plans."""),
+ 'module_account_analytic_default': fields.boolean('Rules for Analytic Assignation',
+ help="""Set default values for your analytic accounts.
+ Allows to automatically select analytic accounts based on criteria like product, partner, user, company, date.
+ This installs the module account_analytic_default."""),
+ 'module_account_invoice_layout': fields.boolean('Allow notes and subtotals',
+ help="""This provides some features to improve the layout of invoices.
+ It gives you the possibility to:
+ * order all the lines of an invoice
+ * add titles, comment lines, sub total lines
+ * draw horizontal lines and put page breaks.
+ This installs the module account_invoice_layout."""),
+
+ 'group_proforma_invoices': fields.boolean('Allow Pro-forma Invoices',
+ implied_group='account.group_proforma_invoices',
+ help="Allows you to put invoices in pro-forma state."),
+
+ 'default_sale_tax': fields.many2one('account.tax', 'Default Sale Tax'),
+ 'default_purchase_tax': fields.many2one('account.tax', 'Default Purchase Tax'),
+ }
+
+ def _default_company(self, cr, uid, context=None):
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ return user.company_id.id
+
+ def _default_has_default_company(self, cr, uid, context=None):
+ count = self.pool.get('res.company').search_count(cr, uid, [], context=context)
+ return bool(count == 1)
+
+ _defaults = {
+ 'company_id': _default_company,
+ 'has_default_company': _default_has_default_company,
+ 'seq_journal': True,
+ 'date_start': lambda *a: time.strftime('%Y-01-01'),
+ 'date_stop': lambda *a: time.strftime('%Y-12-31'),
+ 'period': 'month',
+ }
+
+ def create(self, cr, uid, values, context=None):
+ id = super(account_config_settings, self).create(cr, uid, values, context)
+ # Hack: to avoid some nasty bug, related fields are not written upon record creation.
+ # Hence we write on those fields here.
+ vals = {}
+ for fname, field in self._columns.iteritems():
+ if isinstance(field, fields.related) and fname in values:
+ vals[fname] = values[fname]
+ self.write(cr, uid, [id], vals, context)
+ return id
+
+ def onchange_company_id(self, cr, uid, ids, company_id):
+ # update related fields
+ company = self.pool.get('res.company').browse(cr, uid, company_id)
+ has_chart_of_accounts = company_id not in self.pool.get('account.installer').get_unconfigured_cmp(cr, uid)
+ fiscalyear_count = self.pool.get('account.fiscalyear').search_count(cr, uid,
+ [('date_start', '<=', time.strftime('%Y-%m-%d')), ('date_stop', '>=', time.strftime('%Y-%m-%d')),
+ ('company_id', '=', company_id)])
+ values = {
+ 'expects_chart_of_accounts': company.expects_chart_of_accounts,
+ 'currency_id': company.currency_id.id,
+ 'paypal_account': company.paypal_account,
+ 'company_footer': company.rml_footer2,
+ 'has_chart_of_accounts': has_chart_of_accounts,
+ 'has_fiscal_year': bool(fiscalyear_count),
+ 'chart_template_id': False,
+ }
+ # update journals and sequences
+ for journal_type in ('sale', 'sale_refund', 'purchase', 'purchase_refund'):
+ for suffix in ('_journal_id', '_sequence_prefix', '_sequence_next'):
+ values[journal_type + suffix] = False
+ journal_obj = self.pool.get('account.journal')
+ journal_ids = journal_obj.search(cr, uid, [('company_id', '=', company_id)])
+ for journal in journal_obj.browse(cr, uid, journal_ids):
+ if journal.type in ('sale', 'sale_refund', 'purchase', 'purchase_refund'):
+ values.update({
+ journal.type + '_journal_id': journal.id,
+ journal.type + '_sequence_prefix': journal.sequence_id.prefix,
+ journal.type + '_sequence_next': journal.sequence_id.number_next,
+ })
+ # update taxes
+ ir_values = self.pool.get('ir.values')
+ taxes_id = ir_values.get_default(cr, uid, 'product.product', 'taxes_id', company_id=company_id)
+ supplier_taxes_id = ir_values.get_default(cr, uid, 'product.product', 'supplier_taxes_id', company_id=company_id)
+ values.update({
+ 'default_sale_tax': isinstance(taxes_id, list) and taxes_id[0] or taxes_id,
+ 'default_purchase_tax': isinstance(supplier_taxes_id, list) and supplier_taxes_id[0] or supplier_taxes_id,
+ })
+ return {'value': values}
+
+ def onchange_chart_template_id(self, cr, uid, ids, chart_template_id, context=None):
+ tax_templ_obj = self.pool.get('account.tax.template')
+ res = {'value': {
+ 'complete_tax_set': False, 'sale_tax': False, 'purchase_tax': False,
+ 'sale_tax_rate': 15, 'purchase_tax_rate': 15,
+ }}
+ if chart_template_id:
+ # update complete_tax_set, sale_tax and purchase_tax
+ chart_template = self.pool.get('account.chart.template').browse(cr, uid, chart_template_id, context=context)
+ res['value'].update({'complete_tax_set': chart_template.complete_tax_set})
+ if chart_template.complete_tax_set:
+ # default tax is given by the lowest sequence. For same sequence we will take the latest created as it will be the case for tax created while isntalling the generic chart of account
+ sale_tax_ids = tax_templ_obj.search(cr, uid,
+ [("chart_template_id", "=", chart_template_id), ('type_tax_use', 'in', ('sale','all'))],
+ order="sequence, id desc")
+ purchase_tax_ids = tax_templ_obj.search(cr, uid,
+ [("chart_template_id", "=", chart_template_id), ('type_tax_use', 'in', ('purchase','all'))],
+ order="sequence, id desc")
+ res['value']['sale_tax'] = sale_tax_ids and sale_tax_ids[0] or False
+ res['value']['purchase_tax'] = purchase_tax_ids and purchase_tax_ids[0] or False
+ if chart_template.code_digits:
+ res['value']['code_digits'] = chart_template.code_digits
+ return res
+
+ def onchange_tax_rate(self, cr, uid, ids, rate, context=None):
+ return {'value': {'purchase_tax_rate': rate or False}}
+
+ def onchange_start_date(self, cr, uid, id, start_date):
+ if start_date:
+ start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d")
+ end_date = (start_date + relativedelta(months=12)) - relativedelta(days=1)
+ return {'value': {'date_stop': end_date.strftime('%Y-%m-%d')}}
+ return {}
+
+ def set_default_taxes(self, cr, uid, ids, context=None):
+ """ set default sale and purchase taxes for products """
+ ir_values = self.pool.get('ir.values')
+ config = self.browse(cr, uid, ids[0], context)
+ ir_values.set_default(cr, uid, 'product.product', 'taxes_id',
+ config.default_sale_tax and [config.default_sale_tax.id] or False, company_id=config.company_id.id)
+ ir_values.set_default(cr, uid, 'product.product', 'supplier_taxes_id',
+ config.default_purchase_tax and [config.default_purchase_tax.id] or False, company_id=config.company_id.id)
+
+ def set_chart_of_accounts(self, cr, uid, ids, context=None):
+ """ install a chart of accounts for the given company (if required) """
+ config = self.browse(cr, uid, ids[0], context)
+ if config.chart_template_id:
+ assert config.expects_chart_of_accounts and not config.has_chart_of_accounts
+ wizard = self.pool.get('wizard.multi.charts.accounts')
+ wizard_id = wizard.create(cr, uid, {
+ 'company_id': config.company_id.id,
+ 'chart_template_id': config.chart_template_id.id,
+ 'code_digits': config.code_digits or 6,
+ 'seq_journal': config.seq_journal,
+ 'sale_tax': config.sale_tax.id,
+ 'purchase_tax': config.purchase_tax.id,
+ 'sale_tax_rate': config.sale_tax_rate,
+ 'purchase_tax_rate': config.purchase_tax_rate,
+ 'complete_tax_set': config.complete_tax_set,
+ }, context)
+ wizard.execute(cr, uid, [wizard_id], context)
+
+ def set_fiscalyear(self, cr, uid, ids, context=None):
+ """ create a fiscal year for the given company (if necessary) """
+ config = self.browse(cr, uid, ids[0], context)
+ if config.has_chart_of_accounts or config.chart_template_id:
+ fiscalyear = self.pool.get('account.fiscalyear')
+ fiscalyear_count = fiscalyear.search_count(cr, uid,
+ [('date_start', '<=', config.date_start), ('date_stop', '>=', config.date_stop),
+ ('company_id', '=', config.company_id.id)],
+ context=context)
+ if not fiscalyear_count:
+ name = code = config.date_start[:4]
+ if int(name) != int(config.date_stop[:4]):
+ name = config.date_start[:4] +'-'+ config.date_stop[:4]
+ code = config.date_start[2:4] +'-'+ config.date_stop[2:4]
+ vals = {
+ 'name': name,
+ 'code': code,
+ 'date_start': config.date_start,
+ 'date_stop': config.date_stop,
+ 'company_id': config.company_id.id,
+ }
+ fiscalyear_id = fiscalyear.create(cr, uid, vals, context=context)
+ if config.period == 'month':
+ fiscalyear.create_period(cr, uid, [fiscalyear_id])
+ elif config.period == '3months':
+ fiscalyear.create_period3(cr, uid, [fiscalyear_id])
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account/res_config_view.xml b/addons/account/res_config_view.xml
new file mode 100644
index 00000000000..742b842684a
--- /dev/null
+++ b/addons/account/res_config_view.xml
@@ -0,0 +1,120 @@
+
+
+
+
+
+ Chart Templates
+ ir.module.module
+ kanban,tree,form
+
+
+
+
+
+ account settings
+ account.config.settings
+ form
+
+
+
+
+
+
+ Configure Accounting
+ ir.actions.act_window
+ account.config.settings
+ form
+ inline
+
+
+
+
+
+
diff --git a/addons/account/security/account_security.xml b/addons/account/security/account_security.xml
index 64498127dc5..e1a29a6edfb 100644
--- a/addons/account/security/account_security.xml
+++ b/addons/account/security/account_security.xml
@@ -4,18 +4,24 @@
Invoicing & Payments
+
-
+ Accountant
-
+ Manager
+
+ Pro-forma Invoices
+
+
+
Account Entry
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_view.xml b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
index 60d30f9fff0..3391e9ea2fd 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml
+++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
@@ -3,15 +3,15 @@
- account.analytic.account.invoice.stat.form.inherit
- account.analytic.account
- form
+ account.analytic.account.invoice.stat.form.inherit
+ account.analytic.account
+ form
@@ -30,9 +30,9 @@
- account.analytic.account.invoice.form.inherit
- account.analytic.account
- form
+ account.analytic.account.invoice.form.inherit
+ account.analytic.account
+ form
@@ -69,7 +69,7 @@
-
+
@@ -97,14 +97,14 @@
-
-
- account.analytic.account.tree
- account.analytic.account
+
+
+ account.analytic.account.tree
+ account.analytic.account
- tree
-
-
+ tree
+
+
diff --git a/addons/account_analytic_plans/__openerp__.py b/addons/account_analytic_plans/__openerp__.py
index 82739587d4e..1669bd277d3 100644
--- a/addons/account_analytic_plans/__openerp__.py
+++ b/addons/account_analytic_plans/__openerp__.py
@@ -71,7 +71,6 @@ of distribution models.
'account_analytic_plans_report.xml',
'wizard/analytic_plan_create_model_view.xml',
'wizard/account_crossovered_analytic_view.xml',
- 'account_analytic_plans_installer_view.xml'
],
'demo_xml': [],
'test': ['test/acount_analytic_plans_report.yml'],
diff --git a/addons/account_analytic_plans/account_analytic_plans_installer_view.xml b/addons/account_analytic_plans/account_analytic_plans_installer_view.xml
deleted file mode 100644
index c6879774078..00000000000
--- a/addons/account_analytic_plans/account_analytic_plans_installer_view.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
- Define your Analytic Plans
- ir.actions.act_window
- account.analytic.plan
- form
- tree,form
-
- To setup a multiple analytic plans environment, you must define the root analytic accounts for each plan set. Then, you must attach a plan set to your account journals.
-
-
-
-
-
- 15
-
-
-
-
diff --git a/addons/account_asset/account_asset_view.xml b/addons/account_asset/account_asset_view.xml
index 590e7b76aad..1b1df80a5e8 100644
--- a/addons/account_asset/account_asset_view.xml
+++ b/addons/account_asset/account_asset_view.xml
@@ -316,18 +316,5 @@
-
- Review Asset Categories
- account.asset.category
- form
- tree,form
-
-
-
-
-
- 3
-
-
diff --git a/addons/account_asset/i18n/cs.po b/addons/account_asset/i18n/cs.po
index 503a7f9609b..78b7958e229 100644
--- a/addons/account_asset/i18n/cs.po
+++ b/addons/account_asset/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
-"PO-Revision-Date: 2012-01-11 09:11+0000\n"
+"PO-Revision-Date: 2012-04-06 04:57+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 07:10+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: account_asset
@@ -401,6 +401,8 @@ msgid ""
"currency. You should remove the secondary currency on the account or select "
"a multi-currency view on the journal."
msgstr ""
+"Vybraný účet vašeho záznamu deníku vynucuje použití druhotné měny. Měli "
+"byste odstranit druhotnou měnu z účtu nebo vybrat více-měny."
#. module: account_asset
#: view:asset.asset.report:0
@@ -445,6 +447,8 @@ msgid ""
"The date of your Journal Entry is not in the defined period! You should "
"change the date or remove this constraint from the journal."
msgstr ""
+"Datum vašeho záznamu deníku není v určeném období! Měli byste změnit datum "
+"nebo odstranit omezení z deníku."
#. module: account_asset
#: field:account.asset.asset,note:0 field:account.asset.category,note:0
@@ -507,7 +511,7 @@ msgstr "Zaúčtované řádky odpisů"
#. module: account_asset
#: constraint:account.move.line:0
msgid "Company must be the same for its related account and period."
-msgstr ""
+msgstr "Společnost musí být stejná pro své vztažené účty a období."
#. module: account_asset
#: field:account.asset.asset,child_ids:0
@@ -537,7 +541,7 @@ msgstr "Majetek zakoupený v tomto měsíci"
#. module: account_asset
#: constraint:account.move.line:0
msgid "You can not create journal items on an account of type view."
-msgstr ""
+msgstr "Nemůžete vytvořit položky deníku v účtu typu pohled."
#. module: account_asset
#: view:asset.asset.report:0
@@ -769,7 +773,7 @@ msgstr "Vytvořit pohyby majetku"
#. module: account_asset
#: constraint:account.move.line:0
msgid "You can not create journal items on closed account."
-msgstr ""
+msgstr "Nemůžete vytvořit položky deníku v uzavřeném účtu."
#. module: account_asset
#: model:ir.actions.act_window,help:account_asset.action_asset_asset_report
diff --git a/addons/account_budget/i18n/ja.po b/addons/account_budget/i18n/ja.po
new file mode 100644
index 00000000000..b322ad6f76a
--- /dev/null
+++ b/addons/account_budget/i18n/ja.po
@@ -0,0 +1,425 @@
+# Japanese translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:35+0000\n"
+"PO-Revision-Date: 2012-04-11 02:33+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Japanese \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-12 04:50+0000\n"
+"X-Generator: Launchpad (build 15070)\n"
+
+#. module: account_budget
+#: field:crossovered.budget,creating_user_id:0
+msgid "Responsible User"
+msgstr "担当ユーザ"
+
+#. module: account_budget
+#: selection:crossovered.budget,state:0
+msgid "Confirmed"
+msgstr "確認済"
+
+#. module: account_budget
+#: model:ir.actions.act_window,name:account_budget.open_budget_post_form
+#: model:ir.ui.menu,name:account_budget.menu_budget_post_form
+msgid "Budgetary Positions"
+msgstr "予算上の見通し"
+
+#. module: account_budget
+#: report:account.budget:0
+msgid "Printed at:"
+msgstr "印刷:"
+
+#. module: account_budget
+#: view:crossovered.budget:0
+msgid "Confirm"
+msgstr "確認"
+
+#. module: account_budget
+#: field:crossovered.budget,validating_user_id:0
+msgid "Validate User"
+msgstr "ユーザの検証"
+
+#. module: account_budget
+#: model:ir.actions.act_window,name:account_budget.action_account_budget_crossvered_summary_report
+msgid "Print Summary"
+msgstr "要約の印刷"
+
+#. module: account_budget
+#: field:crossovered.budget.lines,paid_date:0
+msgid "Paid Date"
+msgstr "支払日"
+
+#. module: account_budget
+#: field:account.budget.analytic,date_to:0
+#: field:account.budget.crossvered.report,date_to:0
+#: field:account.budget.crossvered.summary.report,date_to:0
+#: field:account.budget.report,date_to:0
+msgid "End of period"
+msgstr "期末"
+
+#. module: account_budget
+#: view:crossovered.budget:0
+#: selection:crossovered.budget,state:0
+msgid "Draft"
+msgstr "ドラフト"
+
+#. module: account_budget
+#: report:account.budget:0
+msgid "at"
+msgstr ""
+
+#. module: account_budget
+#: view:account.budget.report:0
+#: model:ir.actions.act_window,name:account_budget.action_account_budget_analytic
+#: model:ir.actions.act_window,name:account_budget.action_account_budget_crossvered_report
+msgid "Print Budgets"
+msgstr "予算の印刷"
+
+#. module: account_budget
+#: report:account.budget:0
+msgid "Currency:"
+msgstr "通貨:"
+
+#. module: account_budget
+#: model:ir.model,name:account_budget.model_account_budget_crossvered_report
+msgid "Account Budget crossvered report"
+msgstr ""
+
+#. module: account_budget
+#: selection:crossovered.budget,state:0
+msgid "Validated"
+msgstr "検証済"
+
+#. module: account_budget
+#: field:crossovered.budget.lines,percentage:0
+msgid "Percentage"
+msgstr "パーセンテージ"
+
+#. module: account_budget
+#: report:crossovered.budget.report:0
+msgid "to"
+msgstr ""
+
+#. module: account_budget
+#: field:crossovered.budget,state:0
+msgid "Status"
+msgstr "ステータス"
+
+#. module: account_budget
+#: model:ir.actions.act_window,help:account_budget.act_crossovered_budget_view
+msgid ""
+"A budget is a forecast of your company's income and expenses expected for a "
+"period in the future. With a budget, a company is able to carefully look at "
+"how much money they are taking in during a given period, and figure out the "
+"best way to divide it among various categories. By keeping track of where "
+"your money goes, you may be less likely to overspend, and more likely to "
+"meet your financial goals. Forecast a budget by detailing the expected "
+"revenue per analytic account and monitor its evolution based on the actuals "
+"realised during that period."
+msgstr ""
+"予算は将来の期間における、予想される会社の収入と支出です。予算に基づき、会社はその期間の間にどのくらいのお金を得るのかを注意深く見ることができます。そして"
+"、さまざまな分類に分配する最適な方法を理解することができます。お金がどこに行くのかを追跡し続けることで、お金の使い過ぎの可能性を減らし、財務目標を達成しや"
+"すくします。分析的なアカウントごとに期待される収入を詳細化することで予算を予測して下さい。そして、その期間中に実際にそれを実現することを基本にその展開を監"
+"視して下さい。"
+
+#. module: account_budget
+#: code:addons/account_budget/account_budget.py:119
+#, python-format
+msgid "The Budget '%s' has no accounts!"
+msgstr ""
+
+#. module: account_budget
+#: report:account.budget:0
+#: report:crossovered.budget.report:0
+msgid "%"
+msgstr ""
+
+#. module: account_budget
+#: report:account.budget:0
+#: report:crossovered.budget.report:0
+msgid "Description"
+msgstr ""
+
+#. module: account_budget
+#: report:crossovered.budget.report:0
+msgid "Currency"
+msgstr ""
+
+#. module: account_budget
+#: report:crossovered.budget.report:0
+msgid "Total :"
+msgstr ""
+
+#. module: account_budget
+#: field:account.budget.post,company_id:0
+#: field:crossovered.budget,company_id:0
+#: field:crossovered.budget.lines,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: account_budget
+#: view:crossovered.budget:0
+msgid "To Approve"
+msgstr ""
+
+#. module: account_budget
+#: view:crossovered.budget:0
+msgid "Reset to Draft"
+msgstr ""
+
+#. module: account_budget
+#: view:account.budget.post:0
+#: view:crossovered.budget:0
+#: field:crossovered.budget.lines,planned_amount:0
+msgid "Planned Amount"
+msgstr ""
+
+#. module: account_budget
+#: report:account.budget:0
+#: report:crossovered.budget.report:0
+msgid "Perc(%)"
+msgstr ""
+
+#. module: account_budget
+#: view:crossovered.budget:0
+#: selection:crossovered.budget,state:0
+msgid "Done"
+msgstr ""
+
+#. module: account_budget
+#: report:account.budget:0
+#: report:crossovered.budget.report:0
+msgid "Practical Amt"
+msgstr ""
+
+#. module: account_budget
+#: view:account.analytic.account:0
+#: view:account.budget.post:0
+#: view:crossovered.budget:0
+#: field:crossovered.budget.lines,practical_amount:0
+msgid "Practical Amount"
+msgstr ""
+
+#. module: account_budget
+#: field:crossovered.budget,date_to:0
+#: field:crossovered.budget.lines,date_to:0
+msgid "End Date"
+msgstr ""
+
+#. module: account_budget
+#: model:ir.model,name:account_budget.model_account_budget_analytic
+#: model:ir.model,name:account_budget.model_account_budget_report
+msgid "Account Budget report for analytic account"
+msgstr ""
+
+#. module: account_budget
+#: view:account.analytic.account:0
+msgid "Theoritical Amount"
+msgstr ""
+
+#. module: account_budget
+#: field:account.budget.post,name:0
+#: field:crossovered.budget,name:0
+msgid "Name"
+msgstr ""
+
+#. module: account_budget
+#: model:ir.model,name:account_budget.model_crossovered_budget_lines
+msgid "Budget Line"
+msgstr ""
+
+#. module: account_budget
+#: view:account.analytic.account:0
+#: view:account.budget.post:0
+msgid "Lines"
+msgstr ""
+
+#. module: account_budget
+#: report:account.budget:0
+#: view:crossovered.budget:0
+#: field:crossovered.budget.lines,crossovered_budget_id:0
+#: report:crossovered.budget.report:0
+#: model:ir.actions.report.xml,name:account_budget.account_budget
+#: model:ir.model,name:account_budget.model_crossovered_budget
+msgid "Budget"
+msgstr ""
+
+#. module: account_budget
+#: view:crossovered.budget:0
+msgid "To Approve Budgets"
+msgstr ""
+
+#. module: account_budget
+#: code:addons/account_budget/account_budget.py:119
+#, python-format
+msgid "Error!"
+msgstr ""
+
+#. module: account_budget
+#: field:account.budget.post,code:0
+#: field:crossovered.budget,code:0
+msgid "Code"
+msgstr ""
+
+#. module: account_budget
+#: view:account.budget.analytic:0
+#: view:account.budget.crossvered.report:0
+msgid "This wizard is used to print budget"
+msgstr ""
+
+#. module: account_budget
+#: model:ir.actions.act_window,name:account_budget.act_crossovered_budget_view
+#: model:ir.actions.act_window,name:account_budget.action_account_budget_post_tree
+#: model:ir.actions.act_window,name:account_budget.action_account_budget_report
+#: model:ir.actions.report.xml,name:account_budget.report_crossovered_budget
+#: model:ir.ui.menu,name:account_budget.menu_act_crossovered_budget_view
+#: model:ir.ui.menu,name:account_budget.menu_action_account_budget_post_tree
+#: model:ir.ui.menu,name:account_budget.next_id_31
+#: model:ir.ui.menu,name:account_budget.next_id_pos
+msgid "Budgets"
+msgstr ""
+
+#. module: account_budget
+#: view:account.budget.crossvered.summary.report:0
+msgid "This wizard is used to print summary of budgets"
+msgstr ""
+
+#. module: account_budget
+#: selection:crossovered.budget,state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: account_budget
+#: view:crossovered.budget:0
+msgid "Approve"
+msgstr ""
+
+#. module: account_budget
+#: field:crossovered.budget,date_from:0
+#: field:crossovered.budget.lines,date_from:0
+msgid "Start Date"
+msgstr ""
+
+#. module: account_budget
+#: view:account.budget.post:0
+#: field:crossovered.budget.lines,general_budget_id:0
+#: model:ir.model,name:account_budget.model_account_budget_post
+msgid "Budgetary Position"
+msgstr ""
+
+#. module: account_budget
+#: field:account.budget.analytic,date_from:0
+#: field:account.budget.crossvered.report,date_from:0
+#: field:account.budget.crossvered.summary.report,date_from:0
+#: field:account.budget.report,date_from:0
+msgid "Start of period"
+msgstr ""
+
+#. module: account_budget
+#: model:ir.model,name:account_budget.model_account_budget_crossvered_summary_report
+msgid "Account Budget crossvered summary report"
+msgstr ""
+
+#. module: account_budget
+#: report:account.budget:0
+#: report:crossovered.budget.report:0
+msgid "Theoretical Amt"
+msgstr ""
+
+#. module: account_budget
+#: view:account.budget.analytic:0
+#: view:account.budget.crossvered.report:0
+#: view:account.budget.crossvered.summary.report:0
+#: view:account.budget.report:0
+msgid "Select Dates Period"
+msgstr ""
+
+#. module: account_budget
+#: view:account.budget.analytic:0
+#: view:account.budget.crossvered.report:0
+#: view:account.budget.crossvered.summary.report:0
+#: view:account.budget.report:0
+msgid "Print"
+msgstr ""
+
+#. module: account_budget
+#: view:account.budget.post:0
+#: view:crossovered.budget:0
+#: field:crossovered.budget.lines,theoritical_amount:0
+msgid "Theoretical Amount"
+msgstr ""
+
+#. module: account_budget
+#: field:crossovered.budget.lines,analytic_account_id:0
+#: model:ir.model,name:account_budget.model_account_analytic_account
+msgid "Analytic Account"
+msgstr ""
+
+#. module: account_budget
+#: report:account.budget:0
+msgid "Budget :"
+msgstr ""
+
+#. module: account_budget
+#: report:account.budget:0
+#: report:crossovered.budget.report:0
+msgid "Planned Amt"
+msgstr ""
+
+#. module: account_budget
+#: view:account.budget.post:0
+#: field:account.budget.post,account_ids:0
+msgid "Accounts"
+msgstr ""
+
+#. module: account_budget
+#: view:account.analytic.account:0
+#: field:account.analytic.account,crossovered_budget_line:0
+#: view:account.budget.post:0
+#: field:account.budget.post,crossovered_budget_line:0
+#: view:crossovered.budget:0
+#: field:crossovered.budget,crossovered_budget_line:0
+#: view:crossovered.budget.lines:0
+#: model:ir.actions.act_window,name:account_budget.act_account_analytic_account_cb_lines
+#: model:ir.actions.act_window,name:account_budget.act_crossovered_budget_lines_view
+#: model:ir.ui.menu,name:account_budget.menu_act_crossovered_budget_lines_view
+msgid "Budget Lines"
+msgstr ""
+
+#. module: account_budget
+#: view:account.budget.analytic:0
+#: view:account.budget.crossvered.report:0
+#: view:account.budget.crossvered.summary.report:0
+#: view:account.budget.report:0
+#: view:crossovered.budget:0
+msgid "Cancel"
+msgstr ""
+
+#. module: account_budget
+#: constraint:account.analytic.account:0
+msgid "Error! You can not create recursive analytic accounts."
+msgstr ""
+
+#. module: account_budget
+#: report:account.budget:0
+#: report:crossovered.budget.report:0
+msgid "Analysis from"
+msgstr ""
+
+#. module: account_budget
+#: view:crossovered.budget:0
+msgid "Draft Budgets"
+msgstr ""
+
+#, python-format
+#~ msgid "The General Budget '%s' has no Accounts!"
+#~ msgstr "一般的な予算 %s はアカウントを持っていません。"
diff --git a/addons/account_cancel/i18n/cs.po b/addons/account_cancel/i18n/cs.po
new file mode 100644
index 00000000000..0b6a396e044
--- /dev/null
+++ b/addons/account_cancel/i18n/cs.po
@@ -0,0 +1,23 @@
+# Czech translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:35+0000\n"
+"PO-Revision-Date: 2012-04-06 04:54+0000\n"
+"Last-Translator: Jiří Hajda \n"
+"Language-Team: Czech \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: account_cancel
+#: view:account.invoice:0
+msgid "Cancel"
+msgstr "Zrušit"
diff --git a/addons/account_check_writing/i18n/ar.po b/addons/account_check_writing/i18n/ar.po
new file mode 100644
index 00000000000..9c35de222f4
--- /dev/null
+++ b/addons/account_check_writing/i18n/ar.po
@@ -0,0 +1,199 @@
+# Arabic translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:35+0000\n"
+"PO-Revision-Date: 2012-04-06 00:34+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Arabic \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: account_check_writing
+#: selection:res.company,check_layout:0
+msgid "Check on Top"
+msgstr ""
+
+#. module: account_check_writing
+#: model:ir.actions.act_window,help:account_check_writing.action_write_check
+msgid ""
+"The check payment form allows you to track the payment you do to your "
+"suppliers specially by check. 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.You can print the check"
+msgstr ""
+
+#. module: account_check_writing
+#: view:account.voucher:0
+#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_bottom
+#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_middle
+#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_top
+msgid "Print Check"
+msgstr ""
+
+#. module: account_check_writing
+#: selection:res.company,check_layout:0
+msgid "Check in middle"
+msgstr ""
+
+#. module: account_check_writing
+#: help:res.company,check_layout:0
+msgid ""
+"Check on top is compatible with Quicken, QuickBooks and Microsoft Money. "
+"Check in middle is compatible with Peachtree, ACCPAC and DacEasy. Check on "
+"bottom is compatible with Peachtree, ACCPAC and DacEasy only"
+msgstr ""
+
+#. module: account_check_writing
+#: selection:res.company,check_layout:0
+msgid "Check on bottom"
+msgstr ""
+
+#. module: account_check_writing
+#: constraint:res.company:0
+msgid "Error! You can not create recursive companies."
+msgstr "خطأ! لا يمكنك إنشاء شركات متداخلة (شركات تستخدم نفسها)."
+
+#. module: account_check_writing
+#: help:account.journal,allow_check_writing:0
+msgid "Check this if the journal is to be used for writing checks."
+msgstr ""
+
+#. module: account_check_writing
+#: field:account.journal,allow_check_writing:0
+msgid "Allow Check writing"
+msgstr ""
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+#: report:account.print.check.top:0
+msgid "Description"
+msgstr "الوصف"
+
+#. module: account_check_writing
+#: model:ir.model,name:account_check_writing.model_account_journal
+msgid "Journal"
+msgstr "اليومية"
+
+#. module: account_check_writing
+#: model:ir.actions.act_window,name:account_check_writing.action_write_check
+#: model:ir.ui.menu,name:account_check_writing.menu_action_write_check
+msgid "Write Checks"
+msgstr "كتابة شيك"
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+#: report:account.print.check.top:0
+msgid "Discount"
+msgstr "الخصم"
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+#: report:account.print.check.top:0
+msgid "Original Amount"
+msgstr "المبلغ الأصلي"
+
+#. module: account_check_writing
+#: view:res.company:0
+msgid "Configuration"
+msgstr "إعدادات"
+
+#. module: account_check_writing
+#: field:account.voucher,allow_check:0
+msgid "Allow Check Writing"
+msgstr "سماح بكتابة شيك"
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+#: report:account.print.check.top:0
+msgid "Payment"
+msgstr "الدفع"
+
+#. module: account_check_writing
+#: field:account.journal,use_preprint_check:0
+msgid "Use Preprinted Check"
+msgstr ""
+
+#. module: account_check_writing
+#: sql_constraint:res.company:0
+msgid "The company name must be unique !"
+msgstr "اسم الشركة يجب أن يكون فريداً !"
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+#: report:account.print.check.top:0
+msgid "Due Date"
+msgstr "تاريخ الإستحقاق"
+
+#. module: account_check_writing
+#: model:ir.model,name:account_check_writing.model_res_company
+msgid "Companies"
+msgstr "الشركات"
+
+#. module: account_check_writing
+#: view:res.company:0
+msgid "Default Check layout"
+msgstr ""
+
+#. module: account_check_writing
+#: constraint:account.journal:0
+msgid ""
+"Configuration error! The currency chosen should be shared by the default "
+"accounts too."
+msgstr ""
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+msgid "Balance Due"
+msgstr ""
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+#: report:account.print.check.top:0
+msgid "Check Amount"
+msgstr ""
+
+#. module: account_check_writing
+#: model:ir.model,name:account_check_writing.model_account_voucher
+msgid "Accounting Voucher"
+msgstr "القسيمة المحاسبية"
+
+#. module: account_check_writing
+#: sql_constraint:account.journal:0
+msgid "The name of the journal must be unique per company !"
+msgstr "يجب ان يكون الاسم لليومية فريد لكل شركة!"
+
+#. module: account_check_writing
+#: sql_constraint:account.journal:0
+msgid "The code of the journal must be unique per company !"
+msgstr "يجب ان يكون الكود لليومية فريد لكل شركة !"
+
+#. module: account_check_writing
+#: field:account.voucher,amount_in_word:0
+msgid "Amount in Word"
+msgstr ""
+
+#. module: account_check_writing
+#: report:account.print.check.top:0
+msgid "Open Balance"
+msgstr "فتح رصيد"
+
+#. module: account_check_writing
+#: field:res.company,check_layout:0
+msgid "Choose Check layout"
+msgstr ""
diff --git a/addons/account_followup/account_followup_view.xml b/addons/account_followup/account_followup_view.xml
index 764ab81d81a..fe4613d6720 100644
--- a/addons/account_followup/account_followup_view.xml
+++ b/addons/account_followup/account_followup_view.xml
@@ -157,25 +157,5 @@
-
-
-
- Review Invoicing Follow-Ups
- ir.actions.act_window
- account_followup.followup
- form
- form,tree
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/account_payment/security/account_payment_security.xml b/addons/account_payment/security/account_payment_security.xml
index 4bae0c30ce6..135059c79d5 100644
--- a/addons/account_payment/security/account_payment_security.xml
+++ b/addons/account_payment/security/account_payment_security.xml
@@ -4,6 +4,7 @@
Accounting / Payments
+
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index 54226166508..fbbf66c0360 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -202,12 +202,19 @@ class account_voucher(osv.osv):
line_dr_ids = resolve_o2m_operations(cr, uid, line_osv, line_dr_ids, ['amount'], context)
line_cr_ids = resolve_o2m_operations(cr, uid, line_osv, line_cr_ids, ['amount'], context)
- #loop into the lines to see if there is an amount allocated on a voucher line with a currency different than the voucher currency
+ #compute the field is_multi_currency that is used to hide/display options linked to secondary currency on the voucher
is_multi_currency = False
- for voucher_line in line_dr_ids+line_cr_ids:
- if voucher_line.get('currency_id',False) != voucher_currency:
- is_multi_currency = True
- break
+ if voucher_currency:
+ # if the voucher currency is not False, it means it is different than the company currency and we need to display the options
+ is_multi_currency = True
+ else:
+ #loop on the voucher lines to see if one of these has a secondary currency. If yes, we need to define the options
+ for voucher_line in line_dr_ids+line_cr_ids:
+ company_currency = False
+ company_currency = voucher_line.get('move_line_id', False) and self.pool.get('account.move.line').browse(cr, uid, voucher_line.get('move_line_id'), context=context).company_id.currency_id.id
+ if voucher_line.get('currency_id', company_currency) != company_currency:
+ is_multi_currency = True
+ break
return {'value': {'writeoff_amount': self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount), 'is_multi_currency': is_multi_currency}}
def _get_writeoff_amount(self, cr, uid, ids, name, args, context=None):
diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml
index 241bd23d5bb..0ef84e104aa 100644
--- a/addons/account_voucher/voucher_payment_receipt_view.xml
+++ b/addons/account_voucher/voucher_payment_receipt_view.xml
@@ -356,7 +356,7 @@
-
+
diff --git a/addons/analytic/security/analytic_security.xml b/addons/analytic/security/analytic_security.xml
index 3f8ec1036be..69c1a069502 100644
--- a/addons/analytic/security/analytic_security.xml
+++ b/addons/analytic/security/analytic_security.xml
@@ -15,7 +15,7 @@
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
-
+ Analytic Accounting
diff --git a/addons/analytic_user_function/i18n/ja.po b/addons/analytic_user_function/i18n/ja.po
new file mode 100644
index 00000000000..e63fedd273f
--- /dev/null
+++ b/addons/analytic_user_function/i18n/ja.po
@@ -0,0 +1,79 @@
+# Japanese translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:35+0000\n"
+"PO-Revision-Date: 2012-04-08 05:16+0000\n"
+"Last-Translator: Masaki Yamaya \n"
+"Language-Team: Japanese \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-09 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: analytic_user_function
+#: field:analytic.user.funct.grid,product_id:0
+msgid "Product"
+msgstr "商品"
+
+#. module: analytic_user_function
+#: model:ir.model,name:analytic_user_function.model_analytic_user_funct_grid
+msgid "Relation table between users and products on a analytic account"
+msgstr "分析アカウントのユーザと商品の関係テーブル"
+
+#. module: analytic_user_function
+#: constraint:hr.analytic.timesheet:0
+msgid "You cannot modify an entry in a Confirmed/Done timesheet !."
+msgstr "確認済みのタイムシートの項目を変更することはできません。"
+
+#. module: analytic_user_function
+#: field:analytic.user.funct.grid,account_id:0
+#: model:ir.model,name:analytic_user_function.model_account_analytic_account
+msgid "Analytic Account"
+msgstr "分析アカウント"
+
+#. module: analytic_user_function
+#: view:account.analytic.account:0
+#: field:account.analytic.account,user_product_ids:0
+msgid "Users/Products Rel."
+msgstr "ユーザ・商品の関係"
+
+#. module: analytic_user_function
+#: field:analytic.user.funct.grid,user_id:0
+msgid "User"
+msgstr "ユーザ"
+
+#. module: analytic_user_function
+#: code:addons/analytic_user_function/analytic_user_function.py:96
+#: code:addons/analytic_user_function/analytic_user_function.py:131
+#, python-format
+msgid "There is no expense account define for this product: \"%s\" (id:%d)"
+msgstr "商品 \"%s\" (id:%d) のアカウントが定義されていません。"
+
+#. module: analytic_user_function
+#: code:addons/analytic_user_function/analytic_user_function.py:95
+#: code:addons/analytic_user_function/analytic_user_function.py:130
+#, python-format
+msgid "Error !"
+msgstr "エラー"
+
+#. module: analytic_user_function
+#: constraint:account.analytic.account:0
+msgid "Error! You can not create recursive analytic accounts."
+msgstr "エラー。反復した分析アカウントを作ることはできません"
+
+#. module: analytic_user_function
+#: model:ir.model,name:analytic_user_function.model_hr_analytic_timesheet
+msgid "Timesheet Line"
+msgstr "タイムシートの行"
+
+#. module: analytic_user_function
+#: view:analytic.user.funct.grid:0
+msgid "User's Product for this Analytic Account"
+msgstr "この分析アカウントのユーザの商品"
diff --git a/addons/association/i18n/ja.po b/addons/association/i18n/ja.po
new file mode 100644
index 00000000000..02e034238c6
--- /dev/null
+++ b/addons/association/i18n/ja.po
@@ -0,0 +1,135 @@
+# Japanese translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2012-04-08 06:15+0000\n"
+"Last-Translator: Masaki Yamaya \n"
+"Language-Team: Japanese \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-09 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,wiki:0
+msgid "Wiki"
+msgstr ""
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid "Event Management"
+msgstr "イベント管理"
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,project_gtd:0
+msgid "Getting Things Done"
+msgstr "物事を完了"
+
+#. module: association
+#: model:ir.module.module,description:association.module_meta_information
+msgid "This module is to create Profile for Associates"
+msgstr ""
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,progress:0
+msgid "Configuration Progress"
+msgstr "設定を進行中"
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid ""
+"Here are specific applications related to the Association Profile you "
+"selected."
+msgstr ""
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid "title"
+msgstr "タイトル"
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,event_project:0
+msgid "Helps you to manage and organize your events."
+msgstr ""
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,config_logo:0
+msgid "Image"
+msgstr "画像"
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,hr_expense:0
+msgid ""
+"Tracks and manages employee expenses, and can automatically re-invoice "
+"clients if the expenses are project-related."
+msgstr ""
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,project_gtd:0
+msgid ""
+"GTD is a methodology to efficiently organise yourself and your tasks. This "
+"module fully integrates GTD principle with OpenERP's project management."
+msgstr ""
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid "Resources Management"
+msgstr ""
+
+#. module: association
+#: model:ir.module.module,shortdesc:association.module_meta_information
+msgid "Association profile"
+msgstr ""
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,hr_expense:0
+msgid "Expenses Tracking"
+msgstr ""
+
+#. module: association
+#: model:ir.actions.act_window,name:association.action_config_install_module
+#: view:profile.association.config.install_modules_wizard:0
+msgid "Association Application Configuration"
+msgstr ""
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,wiki:0
+msgid ""
+"Lets you create wiki pages and page groups in order to keep track of "
+"business knowledge and share it with and between your employees."
+msgstr ""
+
+#. module: association
+#: help:profile.association.config.install_modules_wizard,project:0
+msgid ""
+"Helps you manage your projects and tasks by tracking them, generating "
+"plannings, etc..."
+msgstr ""
+
+#. module: association
+#: model:ir.model,name:association.model_profile_association_config_install_modules_wizard
+msgid "profile.association.config.install_modules_wizard"
+msgstr ""
+
+#. module: association
+#: field:profile.association.config.install_modules_wizard,event_project:0
+msgid "Events"
+msgstr ""
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+#: field:profile.association.config.install_modules_wizard,project:0
+msgid "Project Management"
+msgstr ""
+
+#. module: association
+#: view:profile.association.config.install_modules_wizard:0
+msgid "Configure"
+msgstr ""
diff --git a/addons/auction/security/auction_security.xml b/addons/auction/security/auction_security.xml
index 087151cb6ea..d71254dd3c2 100644
--- a/addons/auction/security/auction_security.xml
+++ b/addons/auction/security/auction_security.xml
@@ -16,6 +16,7 @@
Manager
+
diff --git a/addons/auth_openid/i18n/ar.po b/addons/auth_openid/i18n/ar.po
new file mode 100644
index 00000000000..a36f5ea011d
--- /dev/null
+++ b/addons/auth_openid/i18n/ar.po
@@ -0,0 +1,113 @@
+# Arabic translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 01:37+0100\n"
+"PO-Revision-Date: 2012-04-06 00:53+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Arabic \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: auth_openid
+#. #-#-#-#-# auth_openid.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: view:res.users:0
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:12
+msgid "OpenID"
+msgstr "معرف OpenID"
+
+#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: auth_openid
+#. #-#-#-#-# auth_openid.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: field:res.users,openid_url:0
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:47
+msgid "OpenID URL"
+msgstr "رابط OpenID"
+
+#. module: auth_openid
+#: help:res.users,openid_email:0
+msgid "Used for disambiguation in case of a shared OpenID URL"
+msgstr "تستخدم للتفرقة في حالة إستخدام معرف OpenID مشترك"
+
+#. module: auth_openid
+#: sql_constraint:res.users:0
+msgid "You can not have two users with the same login !"
+msgstr "لا يمكن ان يكون هناك مستخدمان بنفس اسم الدخول!"
+
+#. module: auth_openid
+#: field:res.users,openid_email:0
+msgid "OpenID Email"
+msgstr "بريد OpenID"
+
+#. module: auth_openid
+#: constraint:res.users:0
+msgid "The chosen company is not in the allowed companies for this user"
+msgstr ""
+"الشركة المختارة غير مدرجة ضمن قائمة الشركات المسموح بها لهذا المستخدم"
+
+#. module: auth_openid
+#: field:res.users,openid_key:0
+msgid "OpenID Key"
+msgstr "مفتاح OpenID"
+
+#. module: auth_openid
+#: model:ir.model,name:auth_openid.model_res_users
+msgid "res.users"
+msgstr "res.users"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:8
+msgid "Password"
+msgstr "كلمة المرور"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:9
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:10
+msgid "Google"
+msgstr "جوجل"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:10
+msgid "Google Apps"
+msgstr "برامج جوجل"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:11
+msgid "Launchpad"
+msgstr "لانشباد (Launchpad)"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:20
+msgid "Google Apps Domain:"
+msgstr "نطاق برامج جوجل:"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:24
+msgid "Username:"
+msgstr "اسم المستخدم:"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:28
+msgid "OpenID URL:"
+msgstr "رابط OpenID:"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:35
+msgid "Google Apps Domain"
+msgstr "نطاق برامج جوجل"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:41
+msgid "Username"
+msgstr "اسم المستخدم"
diff --git a/addons/auth_openid/i18n/sr@latin.po b/addons/auth_openid/i18n/sr@latin.po
new file mode 100644
index 00000000000..e1b4ca7b911
--- /dev/null
+++ b/addons/auth_openid/i18n/sr@latin.po
@@ -0,0 +1,112 @@
+# Serbian Latin translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 01:37+0100\n"
+"PO-Revision-Date: 2012-04-05 15:20+0000\n"
+"Last-Translator: Milan Milosevic \n"
+"Language-Team: Serbian Latin \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-06 04:37+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: auth_openid
+#. #-#-#-#-# auth_openid.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: view:res.users:0
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:12
+msgid "OpenID"
+msgstr "OpenID"
+
+#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: auth_openid
+#. #-#-#-#-# auth_openid.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: field:res.users,openid_url:0
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:47
+msgid "OpenID URL"
+msgstr "OpenID URL"
+
+#. module: auth_openid
+#: help:res.users,openid_email:0
+msgid "Used for disambiguation in case of a shared OpenID URL"
+msgstr "Koristi se za razlikovanje u slučaju deljenog OpenID URL-a"
+
+#. module: auth_openid
+#: sql_constraint:res.users:0
+msgid "You can not have two users with the same login !"
+msgstr "Ne možete imati dva korisnika sa istom prijavom!"
+
+#. module: auth_openid
+#: field:res.users,openid_email:0
+msgid "OpenID Email"
+msgstr "OpenID Email"
+
+#. module: auth_openid
+#: constraint:res.users:0
+msgid "The chosen company is not in the allowed companies for this user"
+msgstr "Odabrano preduzeće nije u dozvoljenim preduzećima za ovog korisnioka"
+
+#. module: auth_openid
+#: field:res.users,openid_key:0
+msgid "OpenID Key"
+msgstr "OpenID Ključ"
+
+#. module: auth_openid
+#: model:ir.model,name:auth_openid.model_res_users
+msgid "res.users"
+msgstr "res.users"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:8
+msgid "Password"
+msgstr "Lozinka"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:9
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:10
+msgid "Google"
+msgstr "Google"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:10
+msgid "Google Apps"
+msgstr "Google-ove aplikacije"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:11
+msgid "Launchpad"
+msgstr "Launchpad"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:20
+msgid "Google Apps Domain:"
+msgstr "Domen Google-ovih aplikacija"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:24
+msgid "Username:"
+msgstr "Korisničko ime:"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:28
+msgid "OpenID URL:"
+msgstr "OpenID URL"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:35
+msgid "Google Apps Domain"
+msgstr "Domen Google-ovih aplikacija"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:41
+msgid "Username"
+msgstr "Korisničko ime"
diff --git a/addons/base_calendar/security/calendar_security.xml b/addons/base_calendar/security/calendar_security.xml
index dd736e11714..5fe8918e05b 100644
--- a/addons/base_calendar/security/calendar_security.xml
+++ b/addons/base_calendar/security/calendar_security.xml
@@ -3,6 +3,7 @@
Survey / User
+
diff --git a/addons/base_contact/i18n/ja.po b/addons/base_contact/i18n/ja.po
new file mode 100644
index 00000000000..8a4fdea09b9
--- /dev/null
+++ b/addons/base_contact/i18n/ja.po
@@ -0,0 +1,264 @@
+# Japanese translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-11 11:29+0000\n"
+"Last-Translator: Tomomi Mengelberg \n"
+"Language-Team: Japanese \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-12 04:50+0000\n"
+"X-Generator: Launchpad (build 15070)\n"
+
+#. module: base_contact
+#: field:res.partner.location,city:0
+msgid "City"
+msgstr "市区町村"
+
+#. module: base_contact
+#: view:res.partner.contact:0
+msgid "First/Lastname"
+msgstr "名/氏"
+
+#. module: base_contact
+#: model:ir.actions.act_window,name:base_contact.action_partner_contact_form
+#: model:ir.ui.menu,name:base_contact.menu_partner_contact_form
+#: model:ir.ui.menu,name:base_contact.menu_purchases_partner_contact_form
+#: model:process.node,name:base_contact.process_node_contacts0
+#: field:res.partner.location,job_ids:0
+msgid "Contacts"
+msgstr "連絡先"
+
+#. module: base_contact
+#: view:res.partner.contact:0
+msgid "Professional Info"
+msgstr ""
+
+#. module: base_contact
+#: field:res.partner.contact,first_name:0
+msgid "First Name"
+msgstr "名"
+
+#. module: base_contact
+#: field:res.partner.address,location_id:0
+msgid "Location"
+msgstr "場所"
+
+#. module: base_contact
+#: model:process.transition,name:base_contact.process_transition_partnertoaddress0
+msgid "Partner to address"
+msgstr ""
+
+#. module: base_contact
+#: help:res.partner.contact,active:0
+msgid ""
+"If the active field is set to False, it will allow you to "
+"hide the partner contact without removing it."
+msgstr ""
+
+#. module: base_contact
+#: field:res.partner.contact,website:0
+msgid "Website"
+msgstr "ウェブサイト"
+
+#. module: base_contact
+#: field:res.partner.location,zip:0
+msgid "Zip"
+msgstr "郵便番号"
+
+#. module: base_contact
+#: field:res.partner.location,state_id:0
+msgid "Fed. State"
+msgstr ""
+
+#. module: base_contact
+#: field:res.partner.location,company_id:0
+msgid "Company"
+msgstr "会社"
+
+#. module: base_contact
+#: field:res.partner.contact,title:0
+msgid "Title"
+msgstr "役職"
+
+#. module: base_contact
+#: field:res.partner.location,partner_id:0
+msgid "Main Partner"
+msgstr ""
+
+#. module: base_contact
+#: model:process.process,name:base_contact.process_process_basecontactprocess0
+msgid "Base Contact"
+msgstr ""
+
+#. module: base_contact
+#: field:res.partner.contact,email:0
+msgid "E-Mail"
+msgstr "メール"
+
+#. module: base_contact
+#: field:res.partner.contact,active:0
+msgid "Active"
+msgstr "有効"
+
+#. module: base_contact
+#: field:res.partner.contact,country_id:0
+msgid "Nationality"
+msgstr "国籍"
+
+#. module: base_contact
+#: view:res.partner:0
+#: view:res.partner.address:0
+msgid "Postal Address"
+msgstr "住所"
+
+#. module: base_contact
+#: field:res.partner.contact,function:0
+msgid "Main Function"
+msgstr ""
+
+#. module: base_contact
+#: model:process.transition,note:base_contact.process_transition_partnertoaddress0
+msgid "Define partners and their addresses."
+msgstr ""
+
+#. module: base_contact
+#: field:res.partner.contact,name:0
+msgid "Name"
+msgstr "名前"
+
+#. module: base_contact
+#: field:res.partner.contact,lang_id:0
+msgid "Language"
+msgstr "言語"
+
+#. module: base_contact
+#: field:res.partner.contact,mobile:0
+msgid "Mobile"
+msgstr "携帯電話"
+
+#. module: base_contact
+#: field:res.partner.location,country_id:0
+msgid "Country"
+msgstr "国名"
+
+#. module: base_contact
+#: view:res.partner.contact:0
+#: field:res.partner.contact,comment:0
+msgid "Notes"
+msgstr ""
+
+#. module: base_contact
+#: model:process.node,note:base_contact.process_node_contacts0
+msgid "People you work with."
+msgstr ""
+
+#. module: base_contact
+#: view:res.partner.contact:0
+msgid "Extra Information"
+msgstr ""
+
+#. module: base_contact
+#: view:res.partner.contact:0
+#: field:res.partner.contact,job_ids:0
+msgid "Functions and Addresses"
+msgstr ""
+
+#. module: base_contact
+#: model:ir.model,name:base_contact.model_res_partner_contact
+#: field:res.partner.address,contact_id:0
+msgid "Contact"
+msgstr "連絡先"
+
+#. module: base_contact
+#: model:ir.model,name:base_contact.model_res_partner_location
+msgid "res.partner.location"
+msgstr ""
+
+#. module: base_contact
+#: model:process.node,note:base_contact.process_node_partners0
+msgid "Companies you work with."
+msgstr ""
+
+#. module: base_contact
+#: field:res.partner.contact,partner_id:0
+msgid "Main Employer"
+msgstr ""
+
+#. module: base_contact
+#: view:res.partner.contact:0
+msgid "Partner Contact"
+msgstr ""
+
+#. module: base_contact
+#: model:process.node,name:base_contact.process_node_addresses0
+msgid "Addresses"
+msgstr ""
+
+#. module: base_contact
+#: model:process.node,note:base_contact.process_node_addresses0
+msgid "Working and private addresses."
+msgstr ""
+
+#. module: base_contact
+#: field:res.partner.contact,last_name:0
+msgid "Last Name"
+msgstr ""
+
+#. module: base_contact
+#: view:res.partner.contact:0
+#: field:res.partner.contact,photo:0
+msgid "Photo"
+msgstr ""
+
+#. module: base_contact
+#: view:res.partner.location:0
+msgid "Locations"
+msgstr ""
+
+#. module: base_contact
+#: view:res.partner.contact:0
+msgid "General"
+msgstr ""
+
+#. module: base_contact
+#: field:res.partner.location,street:0
+msgid "Street"
+msgstr ""
+
+#. module: base_contact
+#: view:res.partner.contact:0
+msgid "Partner"
+msgstr ""
+
+#. module: base_contact
+#: model:process.node,name:base_contact.process_node_partners0
+msgid "Partners"
+msgstr ""
+
+#. module: base_contact
+#: model:ir.model,name:base_contact.model_res_partner_address
+msgid "Partner Addresses"
+msgstr ""
+
+#. module: base_contact
+#: field:res.partner.location,street2:0
+msgid "Street2"
+msgstr ""
+
+#. module: base_contact
+#: view:res.partner.contact:0
+msgid "Personal Information"
+msgstr ""
+
+#. module: base_contact
+#: field:res.partner.contact,birthdate:0
+msgid "Birth Date"
+msgstr ""
diff --git a/addons/base_crypt/i18n/cs.po b/addons/base_crypt/i18n/cs.po
new file mode 100644
index 00000000000..38b1cfda3a5
--- /dev/null
+++ b/addons/base_crypt/i18n/cs.po
@@ -0,0 +1,46 @@
+# Czech translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-06 05:20+0000\n"
+"Last-Translator: Jiří Hajda \n"
+"Language-Team: Czech \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: base_crypt
+#: model:ir.model,name:base_crypt.model_res_users
+msgid "res.users"
+msgstr "res.users"
+
+#. module: base_crypt
+#: sql_constraint:res.users:0
+msgid "You can not have two users with the same login !"
+msgstr "Nemůžete mít dva uživatele se stejným přihlašovacím jménem !"
+
+#. module: base_crypt
+#: constraint:res.users:0
+msgid "The chosen company is not in the allowed companies for this user"
+msgstr ""
+"Vybraná společnost není v povolených společnostech pro tohoto uživatele"
+
+#. module: base_crypt
+#: code:addons/base_crypt/crypt.py:140
+#, python-format
+msgid "Please specify the password !"
+msgstr "Prosíme zadejte heslo!"
+
+#. module: base_crypt
+#: code:addons/base_crypt/crypt.py:140
+#, python-format
+msgid "Error"
+msgstr "Chyba"
diff --git a/addons/base_iban/i18n/cs.po b/addons/base_iban/i18n/cs.po
index 624cd1ced60..6d07d09d8bb 100644
--- a/addons/base_iban/i18n/cs.po
+++ b/addons/base_iban/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2010-08-03 01:50+0000\n"
-"Last-Translator: Mantavya Gajjar (Open ERP) \n"
+"PO-Revision-Date: 2012-04-06 06:16+0000\n"
+"Last-Translator: Jiří Hajda \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:01+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: base_iban
#: constraint:res.partner.bank:0
@@ -23,27 +23,30 @@ msgid ""
"Please define BIC/Swift code on bank for bank type IBAN Account to make "
"valid payments"
msgstr ""
+"\n"
+"Prosíme určete kód BIC/Swift u banky pro IBAN účet bankovního typu k ověření "
+"plateb"
#. module: base_iban
#: code:addons/base_iban/base_iban.py:139
#, python-format
msgid "This IBAN does not pass the validation check, please verify it"
-msgstr ""
+msgstr "Tento IBAN neprošel testem ověření, prosíme zkontrolujte jej"
#. module: base_iban
#: model:res.partner.bank.type,format_layout:base_iban.bank_iban
msgid "%(bank_name)s: IBAN %(acc_number)s - BIC %(bank_bic)s"
-msgstr ""
+msgstr "%(bank_name)s: IBAN %(acc_number)s - BIC %(bank_bic)s"
#. module: base_iban
#: model:res.partner.bank.type.field,name:base_iban.bank_swift_field
msgid "bank_bic"
-msgstr ""
+msgstr "bank_bic"
#. module: base_iban
#: model:res.partner.bank.type.field,name:base_iban.bank_zip_field
msgid "zip"
-msgstr "zip"
+msgstr "psč"
#. module: base_iban
#: help:res.partner.bank,iban:0
@@ -53,12 +56,12 @@ msgstr "Mezinárodní Bankovní Číslo Účtu"
#. module: base_iban
#: model:ir.model,name:base_iban.model_res_partner_bank
msgid "Bank Accounts"
-msgstr ""
+msgstr "Bankovní účty"
#. module: base_iban
#: model:res.partner.bank.type.field,name:base_iban.bank_country_field
msgid "country_id"
-msgstr "id_státu"
+msgstr "country_id"
#. module: base_iban
#: code:addons/base_iban/base_iban.py:136
@@ -66,7 +69,7 @@ msgstr "id_státu"
msgid ""
"The IBAN does not seem to be correct. You should have entered something like "
"this %s"
-msgstr ""
+msgstr "IBAN nevypadá jako správný. Měli byste zadat něco jako toto %s"
#. module: base_iban
#: field:res.partner.bank,iban:0
@@ -77,7 +80,7 @@ msgstr "IBAN"
#: code:addons/base_iban/base_iban.py:140
#, python-format
msgid "The IBAN is invalid, it should begin with the country code"
-msgstr ""
+msgstr "IBAN je neplatný, měl by začínat kódem země"
#. module: base_iban
#: model:res.partner.bank.type,name:base_iban.bank_iban
@@ -87,7 +90,7 @@ msgstr "Účet IBAN"
#. module: base_iban
#: constraint:res.partner.bank:0
msgid "The RIB and/or IBAN is not valid"
-msgstr ""
+msgstr "RIB a/nebo IBAN není platný"
#~ msgid "Invalid XML for View Architecture!"
#~ msgstr "Invalidní XML pro zobrazení architektury!"
diff --git a/addons/base_iban/i18n/ja.po b/addons/base_iban/i18n/ja.po
new file mode 100644
index 00000000000..6a23a021336
--- /dev/null
+++ b/addons/base_iban/i18n/ja.po
@@ -0,0 +1,91 @@
+# Japanese translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-08 06:11+0000\n"
+"Last-Translator: Masaki Yamaya \n"
+"Language-Team: Japanese \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-09 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: base_iban
+#: constraint:res.partner.bank:0
+msgid ""
+"\n"
+"Please define BIC/Swift code on bank for bank type IBAN Account to make "
+"valid payments"
+msgstr ""
+
+#. module: base_iban
+#: code:addons/base_iban/base_iban.py:139
+#, python-format
+msgid "This IBAN does not pass the validation check, please verify it"
+msgstr ""
+
+#. module: base_iban
+#: model:res.partner.bank.type,format_layout:base_iban.bank_iban
+msgid "%(bank_name)s: IBAN %(acc_number)s - BIC %(bank_bic)s"
+msgstr ""
+
+#. module: base_iban
+#: model:res.partner.bank.type.field,name:base_iban.bank_swift_field
+msgid "bank_bic"
+msgstr ""
+
+#. module: base_iban
+#: model:res.partner.bank.type.field,name:base_iban.bank_zip_field
+msgid "zip"
+msgstr ""
+
+#. module: base_iban
+#: help:res.partner.bank,iban:0
+msgid "International Bank Account Number"
+msgstr "国際銀行口座番号"
+
+#. module: base_iban
+#: model:ir.model,name:base_iban.model_res_partner_bank
+msgid "Bank Accounts"
+msgstr "銀行口座"
+
+#. module: base_iban
+#: model:res.partner.bank.type.field,name:base_iban.bank_country_field
+msgid "country_id"
+msgstr ""
+
+#. module: base_iban
+#: code:addons/base_iban/base_iban.py:136
+#, python-format
+msgid ""
+"The IBAN does not seem to be correct. You should have entered something like "
+"this %s"
+msgstr ""
+
+#. module: base_iban
+#: field:res.partner.bank,iban:0
+msgid "IBAN"
+msgstr "国際銀行口座番号"
+
+#. module: base_iban
+#: code:addons/base_iban/base_iban.py:140
+#, python-format
+msgid "The IBAN is invalid, it should begin with the country code"
+msgstr ""
+
+#. module: base_iban
+#: model:res.partner.bank.type,name:base_iban.bank_iban
+msgid "IBAN Account"
+msgstr ""
+
+#. module: base_iban
+#: constraint:res.partner.bank:0
+msgid "The RIB and/or IBAN is not valid"
+msgstr "銀行情報のRIBまたはIBANが正しくありません。"
diff --git a/addons/base_iban/i18n/sr@latin.po b/addons/base_iban/i18n/sr@latin.po
index fa0c4aa20f1..34f2852fb17 100644
--- a/addons/base_iban/i18n/sr@latin.po
+++ b/addons/base_iban/i18n/sr@latin.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-01-20 15:40+0000\n"
+"PO-Revision-Date: 2012-04-05 15:22+0000\n"
"Last-Translator: Milan Milosevic \n"
"Language-Team: Serbian latin \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:02+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-06 04:37+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: base_iban
#: constraint:res.partner.bank:0
@@ -32,7 +32,7 @@ msgstr ""
#: code:addons/base_iban/base_iban.py:139
#, python-format
msgid "This IBAN does not pass the validation check, please verify it"
-msgstr ""
+msgstr "Ovaj IBAN ne prolazi proveru validacije, molimo proverite ga"
#. module: base_iban
#: model:res.partner.bank.type,format_layout:base_iban.bank_iban
@@ -91,7 +91,7 @@ msgstr "IBAN račun"
#. module: base_iban
#: constraint:res.partner.bank:0
msgid "The RIB and/or IBAN is not valid"
-msgstr ""
+msgstr "RIB i / ili IBAN nije validan"
#~ msgid "Invalid XML for View Architecture!"
#~ msgstr "Nevažeći XML za pregled arhitekture"
diff --git a/addons/base_module_record/i18n/cs.po b/addons/base_module_record/i18n/cs.po
index 05034f6c84a..c38439da947 100644
--- a/addons/base_module_record/i18n/cs.po
+++ b/addons/base_module_record/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2011-09-09 10:24+0000\n"
+"PO-Revision-Date: 2012-04-06 05:26+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:14+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: base_module_record
@@ -90,6 +90,9 @@ msgid ""
"publish it on http://www.openerp.com, in the 'Modules' section. You can do "
"it through the website or using features of the 'base_module_publish' module."
msgstr ""
+"Pokud myslíte, že váš modul může zajímat jiné lidi, byli bychom rádi, abyste "
+"jej zveřejnili v sekci 'Moduly' na http://www.openerp.com. Můžete to provést "
+"přes webové stránky nebo použitím schopnosti modulu 'base_module_publish'."
#. module: base_module_record
#: wizard_field:base_module_record.module_record_data,init,check_date:0
diff --git a/addons/base_setup/base_setup.py b/addons/base_setup/base_setup.py
index c10dee7b14b..a3effd98148 100644
--- a/addons/base_setup/base_setup.py
+++ b/addons/base_setup/base_setup.py
@@ -201,4 +201,30 @@ class specify_partner_terminology(osv.osv_memory):
self.make_translations(cr, uid, ids, act_ref, 'model', act_id.help, _case_insensitive_replace(act_id.help,'Customer',o.partner), res_id=act_id.id, context=context)
return {}
+
+
+# Preferences wizard for Sales & CRM.
+# It is defined here because it is inherited independently in modules sale, crm,
+# plugin_outlook and plugin_thunderbird.
+#
+class sale_config_settings(osv.osv_memory):
+ _name = 'sale.config.settings'
+ _inherit = 'res.config.settings'
+ _columns = {
+ 'module_crm': fields.boolean('CRM'),
+ 'module_plugin_thunderbird': fields.boolean('Thunderbird plugin',
+ help="""The plugin allows you archive email and its attachments to the selected
+ OpenERP objects. You can select a partner, a task, a project, an analytical
+ account, or any other object and attach the selected mail as a .eml file in
+ the attachment of a selected record. You can create documents for CRM Lead,
+ HR Applicant and Project Issue from the selected emails.
+ This installs the module plugin_thunderbird."""),
+ 'module_plugin_outlook': fields.boolean('Outlook plugin',
+ help="""The Outlook plugin allows you to select an object that you would like to add
+ to your email and its attachments from MS Outlook. You can select a partner, a task,
+ a project, an analytical account, or any other object and archive a selected
+ email into an OpenERP mail message with attachments.
+ This installs the module plugin_outlook."""),
+ }
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_setup/base_setup_views.xml b/addons/base_setup/base_setup_views.xml
index 4155c7e9957..453d4b167c0 100644
--- a/addons/base_setup/base_setup_views.xml
+++ b/addons/base_setup/base_setup_views.xml
@@ -1,21 +1,6 @@
-
-
- Create or Import Customers
- ir.actions.act_window
- res.partner
- form
- tree,form
-
- Create or Import Customers and their contacts manually from this form or you can import your existing partners by CSV spreadsheet from "Import Data" wizard
-
-
-
-
-
-
Set default users preferences
@@ -117,7 +102,7 @@
formnew
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Configure Sales
+ ir.actions.act_window
+ sale.config.settings
+
+ form
+ inline
+
+
diff --git a/addons/base_tools/i18n/cs.po b/addons/base_tools/i18n/cs.po
new file mode 100644
index 00000000000..6215f692393
--- /dev/null
+++ b/addons/base_tools/i18n/cs.po
@@ -0,0 +1,32 @@
+# Czech translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2012-04-06 06:17+0000\n"
+"Last-Translator: Jiří Hajda \n"
+"Language-Team: Czech \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: base_tools
+#: model:ir.module.module,shortdesc:base_tools.module_meta_information
+msgid "Common base for tools modules"
+msgstr "Obecný základ pro nástrojové moduly"
+
+#. module: base_tools
+#: model:ir.module.module,description:base_tools.module_meta_information
+msgid ""
+"\n"
+" "
+msgstr ""
+"\n"
+" "
diff --git a/addons/base_vat/i18n/cs.po b/addons/base_vat/i18n/cs.po
index 277f65c1989..b770b46f8fd 100644
--- a/addons/base_vat/i18n/cs.po
+++ b/addons/base_vat/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2011-08-07 19:04+0000\n"
-"Last-Translator: Jan B. Krejčí \n"
+"PO-Revision-Date: 2012-04-06 06:22+0000\n"
+"Last-Translator: Jiří Hajda \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:15+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: base_vat
#: code:addons/base_vat/base_vat.py:141
@@ -23,31 +23,33 @@ msgid ""
"This VAT number does not seem to be valid.\n"
"Note: the expected format is %s"
msgstr ""
+"Toto DIČ nevypadá jako platné.\n"
+"Poznámka: očekávaný formát je %s"
#. module: base_vat
#: sql_constraint:res.company:0
msgid "The company name must be unique !"
-msgstr ""
+msgstr "Jméno společnosti musí být jedinečné !"
#. module: base_vat
#: constraint:res.partner:0
msgid "Error ! You cannot create recursive associated members."
-msgstr ""
+msgstr "Chyba ! Nemůžete vytvořit rekurzivní přidružené členy."
#. module: base_vat
#: field:res.company,vat_check_vies:0
msgid "VIES VAT Check"
-msgstr ""
+msgstr "Kontrola DIČ přes VIES"
#. module: base_vat
#: model:ir.model,name:base_vat.model_res_company
msgid "Companies"
-msgstr ""
+msgstr "Společnosti"
#. module: base_vat
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
-msgstr ""
+msgstr "Chyba! Nemůžete vytvořit rekurzivní společnosti."
#. module: base_vat
#: help:res.partner,vat_subjected:0
@@ -55,11 +57,13 @@ msgid ""
"Check this box if the partner is subjected to the VAT. It will be used for "
"the VAT legal statement."
msgstr ""
+"Zaškrtněte toto políčko, pokud partner podléhá DPH. Toto bude použito pro "
+"přiznání k DPH."
#. module: base_vat
#: model:ir.model,name:base_vat.model_res_partner
msgid "Partner"
-msgstr ""
+msgstr "Partner"
#. module: base_vat
#: help:res.company,vat_check_vies:0
@@ -67,6 +71,8 @@ msgid ""
"If checked, Partners VAT numbers will be fully validated against EU's VIES "
"service rather than via a simple format validation (checksum)."
msgstr ""
+"Pokud je zaškrtnuto, DIČ partnera bude plně ověřeno proti službě VIES EU "
+"raději než přes jednoduché ověření formátu (kontrolní součet)."
#. module: base_vat
#: field:res.partner,vat_subjected:0
diff --git a/addons/board/board.py b/addons/board/board.py
index 61ade1203bb..6c28aa33c40 100644
--- a/addons/board/board.py
+++ b/addons/board/board.py
@@ -186,45 +186,4 @@ class board_line(osv.osv):
'position': lambda *args: 'left'
}
-class res_log_report(osv.osv):
- """ Log Report """
- _name = "res.log.report"
- _auto = False
- _description = "Log Report"
- _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),
- 'day': fields.char('Day', size=128, readonly=True),
- 'creation_date': fields.date('Creation Date', readonly=True),
- 'res_model': fields.char('Object', size=128),
- 'nbr': fields.integer('# of Entries', readonly=True)
- }
-
- def init(self, cr):
- """
- Log Report
- @param cr: the current row, from the database cursor
- """
- tools.drop_view_if_exists(cr,'res_log_report')
- cr.execute("""
- CREATE OR REPLACE VIEW res_log_report AS (
- SELECT
- l.id as id,
- 1 as nbr,
- to_char(l.create_date, 'YYYY') as name,
- to_char(l.create_date, 'MM') as month,
- to_char(l.create_date, 'YYYY-MM-DD') as day,
- to_char(l.create_date, 'YYYY-MM-DD') as creation_date,
- l.res_model as res_model,
- date_trunc('day',l.create_date) as create_date
- FROM
- res_log l
- )""")
-res_log_report()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/board/board_data_admin.xml b/addons/board/board_data_admin.xml
index 8cefd04a3b7..5f8c2f1b05c 100644
--- a/addons/board/board_data_admin.xml
+++ b/addons/board/board_data_admin.xml
@@ -1,6 +1,7 @@
-
+
+
user.connection.tree
@@ -21,115 +22,11 @@
-
-
- Latest Activities
- res.log
- form
- tree,form
-
-
-
-
- res.log.report.select
- res.log.report
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- res.log.report.tree
- res.log.report
- tree
-
-
-
-
-
-
-
-
-
-
-
-
Configuration Overviewboard.config.overview
-
-
- board.res.log.report.graph
- res.log.report
- graph
-
-
-
-
-
-
-
-
- Monthly Activity per Document
- res.log.report
- form
- graph,tree
- [('create_date','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%Y-%m-%d'))]
- {'group_by':['res_model'],'group_by_no_leaf':1}
-
-
-
-
-
- board.weekly.res.log.report.graph
- res.log.report
- graph
-
-
-
-
-
-
-
-
- Weekly Global Activity
- res.log.report
- form
- graph,tree
- [('create_date','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%Y-%m-%d'))]
- {'group_by':['day'],'group_by_no_leaf':1}
-
-
-
board.administration.formboard.board
@@ -164,5 +61,5 @@
-
+
diff --git a/addons/board/board_data_home.xml b/addons/board/board_data_home.xml
index 8a0f150d5be..8a75a3ad496 100644
--- a/addons/board/board_data_home.xml
+++ b/addons/board/board_data_home.xml
@@ -61,7 +61,7 @@
-
+
diff --git a/addons/board/i18n/cs.po b/addons/board/i18n/cs.po
index 1252b26e977..5b2f1f21026 100644
--- a/addons/board/i18n/cs.po
+++ b/addons/board/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2009-12-23 20:43+0000\n"
-"Last-Translator: Kuvaly [LCT] \n"
+"PO-Revision-Date: 2012-04-06 06:15+0000\n"
+"Last-Translator: Jiří Hajda \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:40+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: board
@@ -40,13 +40,13 @@ msgstr "Poslední spojení"
#. module: board
#: view:res.log.report:0
msgid "Log created in last month"
-msgstr ""
+msgstr "Záznam vytvořený minulý měsíc"
#. module: board
#: view:board.board:0
#: model:ir.actions.act_window,name:board.open_board_administration_form
msgid "Administration Dashboard"
-msgstr "Správa nástěnky"
+msgstr "Nástěnka správy"
#. module: board
#: view:res.log.report:0
@@ -56,7 +56,7 @@ msgstr "Seskupit podle..."
#. module: board
#: view:res.log.report:0
msgid "Log created in current year"
-msgstr ""
+msgstr "Záznam vytvořený v tomto roce"
#. module: board
#: model:ir.model,name:board.model_board_board
@@ -93,7 +93,7 @@ msgstr "Měsíc"
#. module: board
#: view:res.log.report:0
msgid "Log created in current month"
-msgstr ""
+msgstr "Záznam vytvořený v tomto měsíci"
#. module: board
#: model:ir.actions.act_window,name:board.board_monthly_res_log_report_action
@@ -104,7 +104,7 @@ msgstr "Měsíční činnosti dle dokumentu"
#. module: board
#: view:board.board:0
msgid "Configuration Overview"
-msgstr ""
+msgstr "Přehled nastavení"
#. module: board
#: model:ir.actions.act_window,name:board.action_view_board_list_form
@@ -212,7 +212,7 @@ msgstr "Leden"
#. module: board
#: view:board.board:0
msgid "Users"
-msgstr ""
+msgstr "Uživatelé"
#. module: board
#: selection:res.log.report,month:0
@@ -265,7 +265,7 @@ msgstr "Model"
#. module: board
#: model:ir.actions.act_window,name:board.board_homepage_action
msgid "Home Page"
-msgstr ""
+msgstr "Domovská stránka"
#. module: board
#: model:ir.actions.act_window,name:board.action_latest_activities_tree
diff --git a/addons/board/security/ir.model.access.csv b/addons/board/security/ir.model.access.csv
index 2275cc7d47d..bc9e0844923 100644
--- a/addons/board/security/ir.model.access.csv
+++ b/addons/board/security/ir.model.access.csv
@@ -3,4 +3,3 @@ access_board_board all,board.board,model_board_board,,1,0,0,0
access_board_board_line all,board.board.line,model_board_board_line,,1,0,0,0
access_board_board system,board.board system,model_board_board,base.group_system,1,1,1,1
access_board_board_line system,board.board.line system,model_board_board_line,base.group_system,1,1,1,1
-access_res_log_report all,res.log.report,model_res_log_report,,1,0,0,0
diff --git a/addons/claim_from_delivery/i18n/cs.po b/addons/claim_from_delivery/i18n/cs.po
new file mode 100644
index 00000000000..6f3a8ca0a81
--- /dev/null
+++ b/addons/claim_from_delivery/i18n/cs.po
@@ -0,0 +1,23 @@
+# Czech translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-06 04:57+0000\n"
+"Last-Translator: Jiří Hajda \n"
+"Language-Team: Czech \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: claim_from_delivery
+#: model:ir.actions.act_window,name:claim_from_delivery.action_claim_from_delivery
+msgid "Claim"
+msgstr "Pohledávka"
diff --git a/addons/crm/__init__.py b/addons/crm/__init__.py
index 214c5c3d450..95cf8b53f27 100644
--- a/addons/crm/__init__.py
+++ b/addons/crm/__init__.py
@@ -28,6 +28,7 @@ import crm_phonecall
import report
import wizard
import res_partner
+import res_config
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py
index 4968176e826..447645f615c 100644
--- a/addons/crm/__openerp__.py
+++ b/addons/crm/__openerp__.py
@@ -106,11 +106,12 @@ Creates a dashboard for CRM that includes:
'report/crm_phonecall_report_view.xml',
'process/crm_configuration_process.xml',
- 'crm_installer_view.xml',
'res_partner_view.xml',
'board_crm_statistical_view.xml',
'board_crm_view.xml',
+
+ 'res_config_view.xml',
],
'demo_xml': [
diff --git a/addons/crm/crm.py b/addons/crm/crm.py
index 6fa84a83560..467ea64e633 100644
--- a/addons/crm/crm.py
+++ b/addons/crm/crm.py
@@ -127,7 +127,7 @@ class crm_case_section(osv.osv):
def name_get(self, cr, uid, ids, context=None):
"""Overrides orm name_get method"""
- if not isinstance(ids, list) :
+ if not isinstance(ids, list) :
ids = [ids]
res = []
if not ids:
@@ -256,7 +256,40 @@ class crm_base(object):
data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
return {'value': data}
- def case_open(self, cr, uid, ids, *args):
+ def case_get_note_msg_prefix(self, cr, uid, id, context=None):
+ return ''
+
+ def case_open_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = '%s has been opened.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_close_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = '%s has been closed.'% (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_cancel_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = '%s has been canceled.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_pending_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = '%s is now pending.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_reset_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = '%s has been renewed.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_open(self, cr, uid, ids, context=None):
"""Opens Case
:param ids: List of case Ids
"""
@@ -265,12 +298,13 @@ class crm_base(object):
data = {'state': 'open', 'active': True}
if not case.user_id:
data['user_id'] = uid
- self.write(cr, uid, case.id, data)
-
+ self.write(cr, uid, [case.id], data)
+ self.case_open_send_note(cr, uid, ids, context=context)
self._action(cr, uid, cases, 'open')
+
return True
- def case_close(self, cr, uid, ids, *args):
+ def case_close(self, cr, uid, ids, context=None):
"""Closes Case
:param ids: List of case Ids
"""
@@ -278,10 +312,11 @@ class crm_base(object):
cases[0].state # to fill the browse record cache
self.write(cr, uid, ids, {'state': 'done', 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S'), })
# We use the cache of cases to keep the old case state
+ self.case_close_send_note(cr, uid, ids, context=context)
self._action(cr, uid, cases, 'done')
return True
- def case_cancel(self, cr, uid, ids, *args):
+ def case_cancel(self, cr, uid, ids, context=None):
"""Cancels Case
:param ids: List of case Ids
"""
@@ -289,26 +324,29 @@ class crm_base(object):
cases[0].state # to fill the browse record cache
self.write(cr, uid, ids, {'state': 'cancel', 'active': True})
# We use the cache of cases to keep the old case state
+ self.case_cancel_send_note(cr, uid, ids, context=context)
self._action(cr, uid, cases, 'cancel')
return True
- def case_pending(self, cr, uid, ids, *args):
+ def case_pending(self, cr, uid, ids, context=None):
"""Marks case as pending
:param ids: List of case Ids
"""
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache
self.write(cr, uid, ids, {'state': 'pending', 'active': True})
+ self.case_pending_send_note(cr, uid, ids, context=context)
self._action(cr, uid, cases, 'pending')
return True
- def case_reset(self, cr, uid, ids, *args):
+ def case_reset(self, cr, uid, ids, context=None):
"""Resets case as draft
:param ids: List of case Ids
"""
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache
self.write(cr, uid, ids, {'state': 'draft', 'active': True})
+ self.case_reset_send_note(cr, uid, ids, context=context)
self._action(cr, uid, cases, 'draft')
return True
@@ -323,12 +361,12 @@ class crm_base(object):
return rule_obj._action(cr, uid, rule_ids, cases, scrit=scrit, context=context)
class crm_case(crm_base):
- """ A simple python class to be used for common functions
+ """ A simple python class to be used for common functions
Object that inherit from this class should inherit from mailgate.thread
And need a stage_id field
- And object that inherit (orm inheritance) from a class the overwrite copy
+ And object that inherit (orm inheritance) from a class the overwrite copy
"""
-
+
def stage_find(self, cr, uid, section_id, domain=[], order='sequence'):
domain = list(domain)
if section_id:
@@ -387,34 +425,45 @@ class crm_case(crm_base):
default.update({ 'date_open': False })
return super(crm_case, self).copy(cr, uid, id, default, context=context)
+ def case_escalate_send_note(self, cr, uid, ids, new_section=None, context=None):
+ for id in ids:
+ if new_section:
+ msg = '%s has been escalated to %s.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context), new_section.name)
+ else:
+ msg = '%s has been escalated.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], 'System Notification', msg, context=context)
+ return True
- def case_open(self, cr, uid, ids, *args):
+ def case_get_note_msg_prefix(self, cr, uid, id, context=None):
+ return ''
+
+ def case_open(self, cr, uid, ids, context=None):
"""Opens Case"""
cases = self.browse(cr, uid, ids)
- self.message_append(cr, uid, cases, _('Open'))
for case in cases:
data = {'state': 'open', 'active': True }
if not case.user_id:
data['user_id'] = uid
- self.write(cr, uid, case.id, data)
+ self.write(cr, uid, [case.id], data)
+ self.case_open_send_note(cr, uid, ids, context=context)
self._action(cr, uid, cases, 'open')
return True
- def case_close(self, cr, uid, ids, *args):
+ def case_close(self, cr, uid, ids, context=None):
"""Closes Case"""
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache
- self.message_append(cr, uid, cases, _('Close'))
self.write(cr, uid, ids, {'state': 'done',
'date_closed': time.strftime('%Y-%m-%d %H:%M:%S'),
})
#
# We use the cache of cases to keep the old case state
#
+ self.case_close_send_note(cr, uid, ids, context=context)
self._action(cr, uid, cases, 'done')
return True
- def case_escalate(self, cr, uid, ids, *args):
+ def case_escalate(self, cr, uid, ids, context=None):
"""Escalates case to parent level"""
cases = self.browse(cr, uid, ids)
for case in cases:
@@ -427,42 +476,37 @@ class crm_case(crm_base):
else:
raise osv.except_osv(_('Error !'), _('You can not escalate, you are already at the top level regarding your sales-team category.'))
self.write(cr, uid, [case.id], data)
+ case.case_escalate_send_note(case.section_id.parent_id)
cases = self.browse(cr, uid, ids)
- self.message_append(cr, uid, cases, _('Escalate'))
self._action(cr, uid, cases, 'escalate')
return True
- def case_cancel(self, cr, uid, ids, *args):
+ def case_cancel(self, cr, uid, ids, context=None):
"""Cancels Case"""
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache
- self.message_append(cr, uid, cases, _('Cancel'))
self.write(cr, uid, ids, {'state': 'cancel',
'active': True})
+ self.case_cancel_send_note(cr, uid, ids, context=context)
self._action(cr, uid, cases, 'cancel')
- for case in cases:
- message = _("The case '%s' has been cancelled.") % (case.name,)
- self.log(cr, uid, case.id, message)
return True
- def case_pending(self, cr, uid, ids, *args):
+ def case_pending(self, cr, uid, ids, context=None):
"""Marks case as pending"""
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache
- self.message_append(cr, uid, cases, _('Pending'))
self.write(cr, uid, ids, {'state': 'pending', 'active': True})
+ self.case_pending_send_note(cr, uid, ids, context=context)
self._action(cr, uid, cases, 'pending')
return True
- def case_reset(self, cr, uid, ids, *args):
+ def case_reset(self, cr, uid, ids, context=None):
"""Resets case as draft"""
state = 'draft'
- if 'crm.phonecall' in args:
- state = 'open'
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache
- self.message_append(cr, uid, cases, _('Draft'))
self.write(cr, uid, ids, {'state': state, 'active': True})
+ self.case_reset_send_note(cr, uid, ids, context=context)
self._action(cr, uid, cases, state)
return True
diff --git a/addons/crm/crm_installer_view.xml b/addons/crm/crm_installer_view.xml
deleted file mode 100644
index 5e871a99659..00000000000
--- a/addons/crm/crm_installer_view.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
- Define Sales Team
- ir.actions.act_window
- crm.case.section
- form
- tree,form
-
- Define sales teams to structure your sales organization and assign users to each team. You should also define the sales stage to each team. As an example, if you use Solutions Selling techniques to track your opportunities, you can assign the following stage to the team: Territory, Qualified, Qualified Sponsors, Proposition, Negociaton, Won/Lost.
-
-
-
-
-
- 10
-
-
-
-
- Review Sales Stages
- ir.actions.act_window
- crm.case.stage
- form
- tree,form
- {'default_case_default': 1}
-
- Stages will allow salesmen to easily track how a specific opportunity is positioned in the sales cycle. In order to efficiently manage your sales pipeline, it's important to define conditions to go to the next step. Example: to set an opportunity as 'Qualified', you must set the "Expected Revenue" and the "Expected Closing Date." You should also have a look at the tooltip of the field "Change Probability Automatically".
-
-
-
-
-
- 9
-
-
-
diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py
index 2b319e565da..00f477a75d7 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -40,7 +40,7 @@ class crm_lead(crm_case, osv.osv):
_name = "crm.lead"
_description = "Lead/Opportunity"
_order = "priority,date_action,id desc"
- _inherit = ['mail.thread','res.partner']
+ _inherit = ['ir.needaction_mixin', 'mail.thread','res.partner']
def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
access_rights_uid = access_rights_uid or uid
@@ -183,7 +183,6 @@ class crm_lead(crm_case, osv.osv):
'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
'subjects': fields.function(_get_email_subject, fnct_search=_history_search, string='Subject of Email', type='char', size=64),
-
# Only used for type opportunity
'probability': fields.float('Probability (%)',group_operator="avg"),
'planned_revenue': fields.float('Expected Revenue'),
@@ -215,6 +214,19 @@ class crm_lead(crm_case, osv.osv):
'color': 0,
}
+ def get_needaction_user_ids(self, cr, uid, ids, context=None):
+ result = dict.fromkeys(ids, [])
+ for obj in self.browse(cr, uid, ids, context=context):
+ # salesman must perform an action when in draft mode
+ if obj.state == 'draft' and obj.user_id:
+ result[obj.id] = [obj.user_id.id]
+ return result
+
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(crm_lead, self).create(cr, uid, vals, context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
def on_change_optin(self, cr, uid, ids, optin):
return {'value':{'optin':optin,'optout':False}}
@@ -248,75 +260,58 @@ class crm_lead(crm_case, osv.osv):
def stage_find_won(self, cr, uid, section_id):
return self.stage_find_percent(cr, uid, 100.0, section_id)
- def case_open(self, cr, uid, ids, *args):
- for l in self.browse(cr, uid, ids):
- # When coming from draft override date and stage otherwise just set state
- if l.state == 'draft':
- if l.type == 'lead':
- message = _("The lead '%s' has been opened.") % l.name
- elif l.type == 'opportunity':
- message = _("The opportunity '%s' has been opened.") % l.name
- else:
- message = _("The case '%s' has been opened.") % l.name
- self.log(cr, uid, l.id, message)
+ def case_open(self, cr, uid, ids, context=None):
+ for lead in self.browse(cr, uid, ids, context=context):
+ if lead.state == 'draft':
value = {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')}
- self.write(cr, uid, [l.id], value)
- if l.type == 'opportunity' and not l.stage_id:
- stage_id = self.stage_find(cr, uid, l.section_id.id or False, [('sequence','>',0)])
+ self.write(cr, uid, [lead.id], value)
+ if lead.type == 'opportunity' and not lead.stage_id:
+ stage_id = self.stage_find(cr, uid, lead.section_id.id or False, [('sequence','>',0)])
if stage_id:
- self.stage_set(cr, uid, [l.id], stage_id)
- res = super(crm_lead, self).case_open(cr, uid, ids, *args)
+ self.stage_set(cr, uid, [lead.id], stage_id)
+ res = super(crm_lead, self).case_open(cr, uid, ids, context)
return res
- def case_close(self, cr, uid, ids, *args):
- res = super(crm_lead, self).case_close(cr, uid, ids, *args)
+ def case_close(self, cr, uid, ids, context=None):
+ res = super(crm_lead, self).case_close(cr, uid, ids, context)
self.write(cr, uid, ids, {'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')})
- for case in self.browse(cr, uid, ids):
- if case.type == 'lead':
- message = _("The lead '%s' has been closed.") % case.name
- else:
- message = _("The case '%s' has been closed.") % case.name
- self.log(cr, uid, case.id, message)
return res
- def case_cancel(self, cr, uid, ids, *args):
+ def case_cancel(self, cr, uid, ids, context=None):
"""Overrides cancel for crm_case for setting probability
"""
- res = super(crm_lead, self).case_cancel(cr, uid, ids, args)
+ res = super(crm_lead, self).case_cancel(cr, uid, ids, context)
self.write(cr, uid, ids, {'probability' : 0.0})
return res
- def case_reset(self, cr, uid, ids, *args):
+ def case_reset(self, cr, uid, ids, context=None):
"""Overrides reset as draft in order to set the stage field as empty
"""
- res = super(crm_lead, self).case_reset(cr, uid, ids, *args)
+ res = super(crm_lead, self).case_reset(cr, uid, ids, context)
self.write(cr, uid, ids, {'stage_id': False, 'probability': 0.0})
return res
- def case_mark_lost(self, cr, uid, ids, *args):
+ def case_mark_lost(self, cr, uid, ids, context=None):
"""Mark the case as lost: state = done and probability = 0%
"""
- res = super(crm_lead, self).case_close(cr, uid, ids, *args)
+ res = super(crm_lead, self).case_close(cr, uid, ids, context)
self.write(cr, uid, ids, {'probability' : 0.0})
- for l in self.browse(cr, uid, ids):
- stage_id = self.stage_find_lost(cr, uid, l.section_id.id or False)
+ for lead in self.browse(cr, uid, ids):
+ stage_id = self.stage_find_lost(cr, uid, lead.section_id.id or False)
if stage_id:
- self.stage_set(cr, uid, [l.id], stage_id)
- message = _("The opportunity '%s' has been marked as lost.") % l.name
- self.log(cr, uid, l.id, message)
+ self.stage_set(cr, uid, [lead.id], stage_id)
return res
- def case_mark_won(self, cr, uid, ids, *args):
+ def case_mark_won(self, cr, uid, ids, context=None):
"""Mark the case as lost: state = done and probability = 0%
"""
- res = super(crm_lead, self).case_close(cr, uid, ids, *args)
+ res = super(crm_lead, self).case_close(cr, uid, ids, context=None)
self.write(cr, uid, ids, {'probability' : 100.0})
- for l in self.browse(cr, uid, ids):
- stage_id = self.stage_find_won(cr, uid, l.section_id.id or False)
+ for lead in self.browse(cr, uid, ids):
+ stage_id = self.stage_find_won(cr, uid, lead.section_id.id or False)
if stage_id:
- self.stage_set(cr, uid, [l.id], stage_id)
- message = _("The opportunity '%s' has been been won.") % l.name
- self.log(cr, uid, l.id, message)
+ self.stage_set(cr, uid, [lead.id], stage_id)
+ self.case_mark_won_send_note(cr, uid, [lead.id], context=context)
return res
def set_priority(self, cr, uid, ids, priority):
@@ -324,12 +319,12 @@ class crm_lead(crm_case, osv.osv):
"""
return self.write(cr, uid, ids, {'priority' : priority})
- def set_high_priority(self, cr, uid, ids, *args):
+ def set_high_priority(self, cr, uid, ids, context=None):
"""Set lead priority to high
"""
return self.set_priority(cr, uid, ids, '1')
- def set_normal_priority(self, cr, uid, ids, *args):
+ def set_normal_priority(self, cr, uid, ids, context=None):
"""Set lead priority to normal
"""
return self.set_priority(cr, uid, ids, '3')
@@ -422,7 +417,7 @@ class crm_lead(crm_case, osv.osv):
subject = subject[0] + ", ".join(subject[1:])
details = "\n\n".join(details)
- return self.message_append(cr, uid, [opportunity_id], subject, body_text=details, context=context)
+ return self.message_append_note(cr, uid, [opportunity_id], subject=subject, body=details)
def _merge_opportunity_history(self, cr, uid, opportunity_id, opportunities, context=None):
message = self.pool.get('mail.message')
@@ -529,13 +524,6 @@ class crm_lead(crm_case, osv.osv):
'date_open': time.strftime('%Y-%m-%d %H:%M:%S'),
}
- def _convert_opportunity_notification(self, cr, uid, lead, context=None):
- success_message = _("Lead '%s' has been converted to an opportunity.") % lead.name
- self.message_append(cr, uid, [lead.id], success_message, body_text=success_message, context=context)
- self.log(cr, uid, lead.id, success_message)
- self._send_mail_to_salesman(cr, uid, lead, context=context)
- return True
-
def convert_opportunity(self, cr, uid, ids, partner_id, user_ids=False, section_id=False, context=None):
partner = self.pool.get('res.partner')
mail_message = self.pool.get('mail.message')
@@ -551,7 +539,7 @@ class crm_lead(crm_case, osv.osv):
vals = self._convert_opportunity_data(cr, uid, lead, customer, section_id, context=context)
self.write(cr, uid, [lead.id], vals, context=context)
- self._convert_opportunity_notification(cr, uid, lead, context=context)
+ self.convert_opportunity_send_note(cr, uid, lead, context=context)
#TOCHECK: why need to change partner details in all messages of lead ?
if lead.partner_id:
msg_ids = [ x.id for x in lead.message_ids]
@@ -605,6 +593,7 @@ class crm_lead(crm_case, osv.osv):
res_partner.write(cr, uid, partner_id, {'section_id': lead.section_id.id or False})
contact_id = res_partner.address_get(cr, uid, [partner_id])['default']
res = lead.write({'partner_id' : partner_id, }, context=context)
+ self._lead_set_partner_send_note(cr, uid, [lead.id], context)
return res
def convert_partner(self, cr, uid, ids, action='create', partner_id=False, context=None):
@@ -684,12 +673,12 @@ class crm_lead(crm_case, osv.osv):
'partner_mobile' : lead.partner_id and lead.partner_id.mobile or False,
'priority': lead.priority,
}
-
new_id = phonecall.create(cr, uid, vals, context=context)
- phonecall.case_open(cr, uid, [new_id])
+ phonecall.case_open(cr, uid, [new_id], context=context)
if action == 'log':
- phonecall.case_close(cr, uid, [new_id])
+ phonecall.case_close(cr, uid, [new_id], context=context)
phonecall_dict[lead.id] = new_id
+ self.schedule_phonecall_send_note(cr, uid, [lead.id], new_id, action, context=context)
return phonecall_dict
@@ -767,7 +756,7 @@ class crm_lead(crm_case, osv.osv):
#re-open
values.update(state=crm.AVAILABLE_STATES[1][0])
if not case.date_open:
- values['date_open'] = time.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
+ values['date_open'] = time.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
res = self.write(cr, uid, [case.id], values, context=context)
return res
@@ -831,17 +820,59 @@ class crm_lead(crm_case, osv.osv):
# change probability of lead(s) if required by stage
if not vals.get('probability') and stage.on_change:
vals['probability'] = stage.probability
- text = _("Changed Stage to: %s") % stage.name
- self.message_append(cr, uid, ids, text, body_text=text, context=context)
for case in self.browse(cr, uid, ids, context=context):
- if case.type == 'lead' or context.get('stage_type') == 'lead':
- message = _("The stage of lead '%s' has been changed to '%s'.") % (case.name, stage.name)
- self.log(cr, uid, case.id, message)
- elif case.type == 'opportunity':
- message = _("The stage of opportunity '%s' has been changed to '%s'.") % (case.name, stage.name)
- self.log(cr, uid, case.id, message)
-
+ message = _("Stage changed to %s.") % (stage.name)
+ case.message_append_note(body=message)
return super(crm_lead,self).write(cr, uid, ids, vals, context)
+
+ # ----------------------------------------
+ # OpenChatter methods and notifications
+ # ----------------------------------------
+
+ def message_get_subscribers(self, cr, uid, ids, context=None):
+ sub_ids = self.message_get_subscribers_ids(cr, uid, ids, context=context)
+ # add salesman to the subscribers
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.user_id:
+ sub_ids.append(obj.user_id.id)
+ return self.pool.get('res.users').read(cr, uid, sub_ids, context=context)
+
+ def case_get_note_msg_prefix(self, cr, uid, lead, context=None):
+ if isinstance(lead, (int, long)):
+ lead = self.browse(cr, uid, [lead], context=context)[0]
+ return ('Opportunity' if lead.type == 'opportunity' else 'Lead')
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ message = _("%s has been created.")% (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=message, context=context)
+ return True
+
+ def case_mark_lost_send_note(self, cr, uid, ids, context=None):
+ message = _("Opportunity has been lost.")
+ return self.message_append_note(cr, uid, ids, body=message, context=context)
+
+ def case_mark_won_send_note(self, cr, uid, ids, context=None):
+ message = _("Opportunity has been won.")
+ return self.message_append_note(cr, uid, ids, body=message, context=context)
+
+ def schedule_phonecall_send_note(self, cr, uid, ids, phonecall_id, action, context=None):
+ phonecall = self.pool.get('crm.phonecall').browse(cr, uid, [phonecall_id], context=context)[0]
+ if action == 'log': prefix = 'Logged'
+ else: prefix = 'Scheduled'
+ message = _("%s a call for the %s.") % (prefix, phonecall.date)
+ return self. message_append_note(cr, uid, ids, body=message, context=context)
+
+ def _lead_set_partner_send_note(self, cr, uid, ids, context=None):
+ for lead in self.browse(cr, uid, ids, context=context):
+ message = _("%s partner is now set to %s." % (self.case_get_note_msg_prefix(cr, uid, lead, context=context), lead.partner_id.name))
+ lead.message_append_note(body=message)
+ return True
+
+ def convert_opportunity_send_note(self, cr, uid, lead, context=None):
+ message = _("Lead has been converted to an opportunity.")
+ lead.message_append_note(body=message)
+ return True
crm_lead()
diff --git a/addons/crm/crm_lead_demo.xml b/addons/crm/crm_lead_demo.xml
index e4d32cdaa13..19987f8f61a 100644
--- a/addons/crm/crm_lead_demo.xml
+++ b/addons/crm/crm_lead_demo.xml
@@ -220,21 +220,21 @@
-
-
-
+
-
-
-
+
-
-
-
+
-
-
-
+
diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml
index a0a17e9b985..52b7c88c2d4 100644
--- a/addons/crm/crm_lead_view.xml
+++ b/addons/crm/crm_lead_view.xml
@@ -143,29 +143,6 @@
type="object" icon="gtk-convert" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -176,13 +153,6 @@
-
-
-
-
-
-
-
@@ -195,6 +165,7 @@
+
@@ -545,37 +516,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -588,6 +529,7 @@
+
diff --git a/addons/crm/crm_meeting.py b/addons/crm/crm_meeting.py
index 3b4d701590c..d3b427246e3 100644
--- a/addons/crm/crm_meeting.py
+++ b/addons/crm/crm_meeting.py
@@ -42,7 +42,7 @@ class crm_meeting(crm_base, osv.osv):
_name = 'crm.meeting'
_description = "Meeting"
_order = "id desc"
- _inherit = "calendar.event"
+ _inherit = ["calendar.event", 'ir.needaction_mixin', "mail.thread"]
_columns = {
# From crm.case
'name': fields.char('Summary', size=124, required=True, states={'done': [('readonly', True)]}),
@@ -78,7 +78,55 @@ class crm_meeting(crm_base, osv.osv):
'user_id': lambda self, cr, uid, ctx: uid,
}
- def case_open(self, cr, uid, ids, *args):
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(crm_meeting, self).create(cr, uid, vals, context=context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
+ def get_needaction_user_ids(self, cr, uid, ids, context=None):
+ result = dict.fromkeys(ids, [])
+ for obj in self.browse(cr, uid, ids, context=context):
+ if (obj.state == 'draft' and obj.user_id):
+ result[obj.id] = [obj.user_id.id]
+ return result
+
+ def case_get_note_msg_prefix(self, cr, uid, id, context=None):
+ return 'Meeting'
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ # update context: if come from phonecall, default state values can make the message_append_note crash
+ context.pop('default_state', False)
+ for meeting in self.browse(cr, uid, ids, context=context):
+ message = _("A meeting has been scheduled on %s.") % (meeting.date)
+ if meeting.opportunity_id: # meeting can be create from phonecalls or opportunities, therefore checking for the parent
+ lead = meeting.opportunity_id
+ parent_message = _("Meeting linked to the opportunity %s has been created and cscheduled on %s.") % (lead.name, meeting.date)
+ lead.message_append_note(_('System Notification'), message)
+ elif meeting.phonecall_id:
+ phonecall = meeting.phonecall_id
+ parent_message = _("Meeting linked to the phonecall %s has been created and cscheduled on %s.") % (phonecall.name, meeting.date)
+ phonecall.message_append_note(body=message)
+ else:
+ parent_message = message
+ if parent_message:
+ meeting.message_append_note(body=parent_message)
+ return True
+
+ def case_close_send_note(self, cr, uid, ids, context=None):
+ message = _("Meeting has been done.")
+ return self.message_append_note(cr, uid, ids, body=message, context=context)
+
+ def case_open_send_note(self, cr, uid, ids, context=None):
+ for meeting in self.browse(cr, uid, ids, context=context):
+ if meeting.state != 'draft':
+ return False
+ message = _("Meeting has been confirmed.")
+ meeting.message_append_note(body=message)
+ return True
+
+ def case_open(self, cr, uid, ids, context=None):
"""Confirms meeting
@param self: The object pointer
@param cr: the current row, from the database cursor,
@@ -86,11 +134,9 @@ class crm_meeting(crm_base, osv.osv):
@param ids: List of Meeting Ids
@param *args: Tuple Value for additional Params
"""
- res = super(crm_meeting, self).case_open(cr, uid, ids, args)
+ res = super(crm_meeting, self).case_open(cr, uid, ids, context)
for (id, name) in self.name_get(cr, uid, ids):
- message = _("The meeting '%s' has been confirmed.") % name
id=base_calendar.base_calendar_id2real_id(id)
- self.log(cr, uid, id, message)
return res
crm_meeting()
diff --git a/addons/crm/crm_meeting_view.xml b/addons/crm/crm_meeting_view.xml
index d94fe9e8566..a82a34d80ce 100644
--- a/addons/crm/crm_meeting_view.xml
+++ b/addons/crm/crm_meeting_view.xml
@@ -212,6 +212,7 @@
+
diff --git a/addons/crm/crm_phonecall.py b/addons/crm/crm_phonecall.py
index c6a59d9aace..4fad3ad30ff 100644
--- a/addons/crm/crm_phonecall.py
+++ b/addons/crm/crm_phonecall.py
@@ -32,6 +32,7 @@ class crm_phonecall(crm_base, osv.osv):
_name = "crm.phonecall"
_description = "Phonecall"
_order = "id desc"
+ _inherit = ['ir.needaction_mixin', 'mail.thread']
_columns = {
# From crm.case
'id': fields.integer('ID', readonly=True),
@@ -47,12 +48,12 @@ class crm_phonecall(crm_base, osv.osv):
'company_id': fields.many2one('res.company', 'Company'),
'description': fields.text('Description'),
'state': fields.selection([
- ('draft', 'Draft'),
- ('open', 'Todo'),
- ('cancel', 'Cancelled'),
- ('done', 'Held'),
+ ('draft', 'Draft'),
+ ('open', 'Todo'),
+ ('cancel', 'Cancelled'),
+ ('done', 'Held'),
('pending', 'Not Held'),
- ], 'State', size=16, readonly=True,
+ ], 'State', size=16, readonly=True,
help='The state is set to \'Todo\', when a case is created.\
\nIf the case is in progress the state is set to \'Open\'.\
\nWhen the call is over, the state is set to \'Held\'.\
@@ -67,9 +68,9 @@ class crm_phonecall(crm_base, osv.osv):
'partner_phone': fields.char('Phone', size=32),
'partner_mobile': fields.char('Mobile', size=32),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
- 'date_closed': fields.datetime('Closed', readonly=True),
- 'date': fields.datetime('Date'),
- 'opportunity_id': fields.many2one ('crm.lead', 'Lead/Opportunity'),
+ 'date_closed': fields.datetime('Closed', readonly=True),
+ 'date': fields.datetime('Date'),
+ 'opportunity_id': fields.many2one ('crm.lead', 'Lead/Opportunity'),
'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
}
@@ -80,13 +81,20 @@ class crm_phonecall(crm_base, osv.osv):
_defaults = {
'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
- 'priority': crm.AVAILABLE_PRIORITIES[2][0],
- 'state': _get_default_state,
+ 'priority': crm.AVAILABLE_PRIORITIES[2][0],
+ 'state': _get_default_state,
'user_id': lambda self,cr,uid,ctx: uid,
'active': 1,
}
- def case_close(self, cr, uid, ids, *args):
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(crm_phonecall, self).create(cr, uid, vals, context)
+ for phonecall in self.browse(cr, uid, [obj_id], context=context):
+ if not phonecall.opportunity_id:
+ self.case_open_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
+ def case_close(self, cr, uid, ids, context=None):
"""Overrides close for crm_case for setting close date
"""
res = True
@@ -96,22 +104,22 @@ class crm_phonecall(crm_base, osv.osv):
if phone.duration <=0:
duration = datetime.now() - datetime.strptime(phone.date, '%Y-%m-%d %H:%M:%S')
data.update({'duration': duration.seconds/float(60)})
- res = super(crm_phonecall, self).case_close(cr, uid, [phone_id], args)
+ res = super(crm_phonecall, self).case_close(cr, uid, [phone_id], context)
self.write(cr, uid, [phone_id], data)
return res
- def case_reset(self, cr, uid, ids, *args):
+ def case_reset(self, cr, uid, ids, context=None):
"""Resets case as Todo
"""
- res = super(crm_phonecall, self).case_reset(cr, uid, ids, args, 'crm.phonecall')
+ res = super(crm_phonecall, self).case_reset(cr, uid, ids, context)
self.write(cr, uid, ids, {'duration': 0.0, 'state':'open'})
return res
- def case_open(self, cr, uid, ids, *args):
+ def case_open(self, cr, uid, ids, context=None):
"""Overrides cancel for crm_case for setting Open Date
"""
- res = super(crm_phonecall, self).case_open(cr, uid, ids, *args)
+ res = super(crm_phonecall, self).case_open(cr, uid, ids, context)
self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')})
return res
@@ -143,9 +151,7 @@ class crm_phonecall(crm_base, osv.osv):
'partner_mobile' : call.partner_mobile,
'priority': call.priority,
}
-
new_id = self.create(cr, uid, vals, context=context)
- self.case_open(cr, uid, [new_id])
if action == 'log':
self.case_close(cr, uid, [new_id])
phonecall_dict[call.id] = new_id
@@ -162,7 +168,9 @@ class crm_phonecall(crm_base, osv.osv):
return partner_id
def _call_set_partner(self, cr, uid, ids, partner_id, context=None):
- return self.write(cr, uid, ids, {'partner_id' : partner_id}, context=context)
+ write_res = self.write(cr, uid, ids, {'partner_id' : partner_id}, context=context)
+ self._call_set_partner_send_note(cr, uid, ids, context)
+ return write_res
def _call_create_partner_address(self, cr, uid, phonecall, partner_id, context=None):
address = self.pool.get('res.partner')
@@ -231,7 +239,7 @@ class crm_phonecall(crm_base, osv.osv):
'section_id': call.section_id and call.section_id.id or False,
'description': call.description or False,
'priority': call.priority,
- 'type': 'opportunity',
+ 'type': 'opportunity',
'phone': call.partner_phone or False,
'email_from': default_contact and default_contact.email,
})
@@ -243,7 +251,7 @@ class crm_phonecall(crm_base, osv.osv):
self.case_close(cr, uid, [call.id])
opportunity.case_open(cr, uid, [opportunity_id])
opportunity_dict[call.id] = opportunity_id
- return opportunity_dict
+ return opportunity_dict
def action_make_meeting(self, cr, uid, ids, context=None):
"""
@@ -289,6 +297,41 @@ class crm_phonecall(crm_base, osv.osv):
}
return value
+
+ # ----------------------------------------
+ # OpenChatter methods and notifications
+ # ----------------------------------------
+
+ def get_needaction_user_ids(self, cr, uid, ids, context=None):
+ result = dict.fromkeys(ids)
+ for obj in self.browse(cr, uid, ids, context=context):
+ result[obj.id] = []
+ if (obj.state == 'draft' and obj.user_id):
+ result[obj.id] = [obj.user_id.id]
+ return result
+
+ def case_get_note_msg_prefix(self, cr, uid, id, context=None):
+ return 'Phonecall'
+
+ def case_reset_send_note(self, cr, uid, ids, context=None):
+ message = _('Phonecall has been reset and set as open.')
+ return self.message_append_note(cr, uid, ids, body=message, context=context)
+
+ def case_open_send_note(self, cr, uid, ids, context=None):
+ lead_obj = self.pool.get('crm.lead')
+ for phonecall in self.browse(cr, uid, ids, context=context):
+ phonecall.message_subscribe([phonecall.user_id.id], context=context)
+ if phonecall.opportunity_id:
+ lead = phonecall.opportunity_id
+ message = _("Phonecall linked to the opportunity %s has been created and scheduled on %s.") % (lead.name, phonecall.date)
+ else:
+ message = _("Phonecall has been created and opened.")
+ phonecall.message_append_note(body=message)
+ return True
+
+ def _call_set_partner_send_note(self, cr, uid, ids, context=None):
+ return self.message_append_note(cr, uid, ids, body=_("Partner has been created"), context=context)
+
crm_phonecall()
diff --git a/addons/crm/crm_phonecall_view.xml b/addons/crm/crm_phonecall_view.xml
index 74a6a7ec6aa..ae0e0ce7f3c 100644
--- a/addons/crm/crm_phonecall_view.xml
+++ b/addons/crm/crm_phonecall_view.xml
@@ -120,6 +120,7 @@
states="cancel" type="object"
icon="gtk-convert" />
+
diff --git a/addons/crm/crm_view.xml b/addons/crm/crm_view.xml
index 3df7b002cec..b03f25281af 100644
--- a/addons/crm/crm_view.xml
+++ b/addons/crm/crm_view.xml
@@ -2,7 +2,7 @@
-
diff --git a/addons/delivery/test/delivery_cost.yml b/addons/delivery/test/delivery_cost.yml
index f8d6787a0c5..521f260e136 100644
--- a/addons/delivery/test/delivery_cost.yml
+++ b/addons/delivery/test/delivery_cost.yml
@@ -67,9 +67,9 @@
-
I set default delivery policy.
-
- !record {model: delivery.define.delivery.steps.wizard, id: default_delivery_policy}:
+ !record {model: sale.config.settings, id: default_delivery_policy}:
{}
-
- !python {model: delivery.define.delivery.steps.wizard}: |
- self.apply_cb(cr, uid, [ref('default_delivery_policy')], context=context)
+ !python {model: sale.config.settings}: |
+ self.execute(cr, uid, [ref('default_delivery_policy')], context=context)
diff --git a/addons/document/custom_view.xml b/addons/document/custom_view.xml
index 894e5bac77f..45c4b337d99 100644
--- a/addons/document/custom_view.xml
+++ b/addons/document/custom_view.xml
@@ -2,9 +2,11 @@
grcompta
+ grcomptaadmin
+
diff --git a/addons/document/i18n/cs.po b/addons/document/i18n/cs.po
index f839583f96c..8a4efe5fee7 100644
--- a/addons/document/i18n/cs.po
+++ b/addons/document/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2011-09-05 17:16+0000\n"
+"PO-Revision-Date: 2012-04-06 06:26+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:48+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: document
@@ -152,7 +152,7 @@ msgstr "Název adresáře musí být unikátní!"
#. module: document
#: view:ir.attachment:0
msgid "Filter on my documents"
-msgstr ""
+msgstr "Filtr nad mými dokumenty"
#. module: document
#: field:ir.attachment,index_content:0
@@ -171,7 +171,7 @@ msgstr ""
#. module: document
#: model:ir.actions.todo.category,name:document.category_knowledge_mgmt_config
msgid "Knowledge Management"
-msgstr ""
+msgstr "Správa znalostí"
#. module: document
#: view:document.directory:0
@@ -385,6 +385,8 @@ msgid ""
"When executing this wizard, it will configure your directories automatically "
"according to modules installed."
msgstr ""
+"Když je tento průvodce vykonán, nastaví automaticky vaše adresáře podle "
+"instalovaných modulů."
#. module: document
#: field:document.directory.content,directory_id:0
@@ -520,7 +522,7 @@ msgstr ""
#: view:document.configuration:0
#: model:ir.actions.act_window,name:document.action_config_auto_directory
msgid "Configure Directories"
-msgstr ""
+msgstr "Nastavit adresáře"
#. module: document
#: field:document.directory.content,include_name:0
@@ -674,7 +676,7 @@ msgstr "Pouze ke čtení"
#. module: document
#: model:ir.actions.act_window,name:document.action_document_directory_form
msgid "Document Directory"
-msgstr ""
+msgstr "Adresář dokumentů"
#. module: document
#: sql_constraint:document.directory:0
@@ -700,6 +702,10 @@ msgid ""
"attached to the document, or to print and download any report. This tool "
"will create directories automatically according to modules installed."
msgstr ""
+"Systém správy dokumentů OpenERP podporuje mapování virtuálních složek s "
+"dokumenty. Virtuální složka dokumentů může být použita pro správu souborů "
+"přiložených k dokumentům nebo k vytištění a stažení jakéhokoliv výkazu. "
+"Tento nástroj vytvoří automaticky adresář podle instalovaných modulů."
#. module: document
#: view:board.board:0
@@ -793,7 +799,7 @@ msgstr "Měsíc"
#. module: document
#: view:report.document.user:0
msgid "This Months Files"
-msgstr ""
+msgstr "Soubory za tyto měsíce"
#. module: document
#: model:ir.ui.menu,name:document.menu_reporting
@@ -859,7 +865,7 @@ msgstr "Soubory podle partnerů"
#. module: document
#: view:ir.attachment:0
msgid "Indexed Content - experimental"
-msgstr ""
+msgstr "Indexovaný obsah - pokusné"
#. module: document
#: view:report.document.user:0
@@ -874,7 +880,7 @@ msgstr "Poznámky"
#. module: document
#: model:ir.model,name:document.model_document_configuration
msgid "Directory Configuration"
-msgstr ""
+msgstr "Nastavení adresáře"
#. module: document
#: help:document.directory,type:0
@@ -977,7 +983,7 @@ msgstr "MIME typ"
#. module: document
#: view:report.document.user:0
msgid "All Months Files"
-msgstr ""
+msgstr "Soubory za všechny měsíce"
#. module: document
#: field:document.directory.content,name:0
diff --git a/addons/document/security/document_security.xml b/addons/document/security/document_security.xml
index 9fba954aa0e..cacde50c36e 100644
--- a/addons/document/security/document_security.xml
+++ b/addons/document/security/document_security.xml
@@ -5,6 +5,7 @@
User
+
diff --git a/addons/document_ftp/i18n/cs.po b/addons/document_ftp/i18n/cs.po
index a395a03d09b..a1fdb84d8fc 100644
--- a/addons/document_ftp/i18n/cs.po
+++ b/addons/document_ftp/i18n/cs.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2011-05-09 08:15+0000\n"
-"Last-Translator: Jan B. Krejčí \n"
+"PO-Revision-Date: 2012-04-06 06:13+0000\n"
+"Last-Translator: Jiří Hajda \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 07:06+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: document_ftp
#: model:ir.model,name:document_ftp.model_document_ftp_configuration
@@ -31,6 +31,10 @@ msgid ""
"format is HOST:PORT and the default host (localhost) is only suitable for "
"access from the server machine itself.."
msgstr ""
+"Značí adresu sítě, na které by měl být pro koncové uživatel dostupný váš "
+"OpenERP server. To závisí na vaší síťové topologii a nastavení a ovlivní to "
+"pouze odkazy zobrazené uživatelům. Formát je POĆÍTAČ:PORT a výchozí počítač "
+"(localhost) je vhodný pouze pro přístup ze samotného serveru."
#. module: document_ftp
#: model:ir.actions.url,name:document_ftp.action_document_browse
@@ -67,6 +71,8 @@ msgstr "_Procházet"
msgid ""
"Server address or IP and port to which users should connect to for DMS access"
msgstr ""
+"Adresa serveru nebo IP a port, ke kterému by se měli uživatelé připojit pro "
+"přístup DMS"
#. module: document_ftp
#: model:ir.ui.menu,name:document_ftp.menu_document_browse
@@ -91,27 +97,27 @@ msgstr "název"
#. module: document_ftp
#: model:ir.model,name:document_ftp.model_document_ftp_browse
msgid "Document FTP Browse"
-msgstr ""
+msgstr "Procházení FTP dokumentů"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid "Knowledge Application Configuration"
-msgstr ""
+msgstr "Nastavení aplikace znalostí"
#. module: document_ftp
#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse
msgid "Document Browse"
-msgstr ""
+msgstr "Procházení dokumentů"
#. module: document_ftp
#: view:document.ftp.browse:0
msgid "Browse Document"
-msgstr ""
+msgstr "Procházet dokument"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid "res_config_contents"
-msgstr ""
+msgstr "res_config_contents"
#~ msgid "Integrated FTP Server with Document Management System"
#~ msgstr "FTP server integrovaný s Document Management Systémem"
diff --git a/addons/document_ftp/i18n/sr@latin.po b/addons/document_ftp/i18n/sr@latin.po
index 8355ba1a83c..a28e9bc02ef 100644
--- a/addons/document_ftp/i18n/sr@latin.po
+++ b/addons/document_ftp/i18n/sr@latin.po
@@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2010-12-23 14:06+0000\n"
-"Last-Translator: Olivier Dony (OpenERP) \n"
+"PO-Revision-Date: 2012-04-05 15:29+0000\n"
+"Last-Translator: Milan Milosevic \n"
"Language-Team: Serbian latin \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 07:07+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-06 04:37+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: document_ftp
#: model:ir.model,name:document_ftp.model_document_ftp_configuration
msgid "Auto Directory Configuration"
-msgstr "Auto Podesavanje dIrektorijuma"
+msgstr "Auto-podešavanje direktorijuma"
#. module: document_ftp
#: view:document.ftp.configuration:0
@@ -31,11 +31,16 @@ msgid ""
"format is HOST:PORT and the default host (localhost) is only suitable for "
"access from the server machine itself.."
msgstr ""
+"Odredite adresu mreže na koju bi Vaši OpenERP server trebalo da bude "
+"dostupan za konačne korisnike. Ovo zavisi od Vaše mrežne toplogije i "
+"podešavanja, i neće imati uticaja na linkove prikazane korisnicima. Format "
+"je HOST:PORT i domaćin po defaultu (localhost) je jedino prikladan za "
+"pristup na server sa same mašine."
#. module: document_ftp
#: model:ir.actions.url,name:document_ftp.action_document_browse
msgid "Browse Files"
-msgstr "Pretrazi fajlove"
+msgstr "Pretraži datoteke"
#. module: document_ftp
#: field:document.ftp.configuration,config_logo:0
@@ -45,7 +50,7 @@ msgstr "Slika"
#. module: document_ftp
#: field:document.ftp.configuration,host:0
msgid "Address"
-msgstr ""
+msgstr "Adresa"
#. module: document_ftp
#: field:document.ftp.browse,url:0
@@ -55,12 +60,12 @@ msgstr "FTP Server"
#. module: document_ftp
#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory
msgid "FTP Server Configuration"
-msgstr "KOnfiguracija FTP Servera"
+msgstr "Podešavanje FTP servera"
#. module: document_ftp
#: view:document.ftp.browse:0
msgid "_Browse"
-msgstr "_Browse"
+msgstr "_Pretraži"
#. module: document_ftp
#: help:document.ftp.configuration,host:0
@@ -73,32 +78,32 @@ msgstr ""
#. module: document_ftp
#: model:ir.ui.menu,name:document_ftp.menu_document_browse
msgid "Shared Repository (FTP)"
-msgstr "Deljeno skladiste (FTP)"
+msgstr "Deljeno skladište"
#. module: document_ftp
#: view:document.ftp.browse:0
msgid "_Cancel"
-msgstr "_Cancel"
+msgstr "_Otkaži"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid "Configure FTP Server"
-msgstr ""
+msgstr "Podesi FTP server"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid "title"
-msgstr "Naslov"
+msgstr "naslov"
#. module: document_ftp
#: model:ir.model,name:document_ftp.model_document_ftp_browse
msgid "Document FTP Browse"
-msgstr "FTP pretrazi Dokumente"
+msgstr "Pretraži FTP dokumente"
#. module: document_ftp
#: view:document.ftp.configuration:0
msgid "Knowledge Application Configuration"
-msgstr ""
+msgstr "Podešavanje aplikacije znanja"
#. module: document_ftp
#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse
@@ -108,7 +113,7 @@ msgstr "Pretrazi Dokumente"
#. module: document_ftp
#: view:document.ftp.browse:0
msgid "Browse Document"
-msgstr "Pretrazi Dokument"
+msgstr "Pretraži dokumenta"
#. module: document_ftp
#: view:document.ftp.configuration:0
diff --git a/addons/edi/i18n/ar.po b/addons/edi/i18n/ar.po
new file mode 100644
index 00000000000..486cbbc8533
--- /dev/null
+++ b/addons/edi/i18n/ar.po
@@ -0,0 +1,386 @@
+# Arabic translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 01:37+0100\n"
+"PO-Revision-Date: 2012-04-06 00:12+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Arabic \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: edi
+#: sql_constraint:res.currency:0
+msgid "The currency code must be unique per company!"
+msgstr ""
+
+#. module: edi
+#: model:ir.model,name:edi.model_res_partner_address
+msgid "Partner Addresses"
+msgstr "عناوين الشريك"
+
+#. module: edi
+#: sql_constraint:res.company:0
+msgid "The company name must be unique !"
+msgstr "اسم الشركة يجب أن يكون فريداً !"
+
+#. module: edi
+#: constraint:res.partner:0
+msgid "Error ! You cannot create recursive associated members."
+msgstr ""
+
+#. module: edi
+#: field:edi.document,name:0
+msgid "EDI token"
+msgstr ""
+
+#. module: edi
+#: help:edi.document,name:0
+msgid "Unique identifier for retrieving an EDI document."
+msgstr ""
+
+#. module: edi
+#: constraint:res.company:0
+msgid "Error! You can not create recursive companies."
+msgstr "خطأ! لا يمكنك إنشاء شركات متداخلة (شركات تستخدم نفسها)."
+
+#. module: edi
+#: model:ir.model,name:edi.model_res_company
+msgid "Companies"
+msgstr "الشركات"
+
+#. module: edi
+#: sql_constraint:edi.document:0
+msgid "EDI Tokens must be unique!"
+msgstr ""
+
+#. module: edi
+#: model:ir.model,name:edi.model_res_currency
+msgid "Currency"
+msgstr "العملة"
+
+#. module: edi
+#: code:addons/edi/models/edi.py:153
+#, python-format
+msgid ""
+"The document you are trying to import requires the OpenERP `%s` application. "
+"You can install it by connecting as the administrator and opening the "
+"configuration assistant."
+msgstr ""
+
+#. module: edi
+#: help:edi.document,document:0
+msgid "EDI document content"
+msgstr ""
+
+#. module: edi
+#: model:ir.model,name:edi.model_edi_document
+msgid "EDI Document"
+msgstr ""
+
+#. module: edi
+#: code:addons/edi/models/edi.py:48
+#, python-format
+msgid "'%s' is an invalid external ID"
+msgstr ""
+
+#. module: edi
+#: model:ir.model,name:edi.model_res_partner
+msgid "Partner"
+msgstr "الشريك"
+
+#. module: edi
+#: code:addons/edi/models/edi.py:152
+#, python-format
+msgid "Missing Application"
+msgstr ""
+
+#. module: edi
+#: field:edi.document,document:0
+msgid "Document"
+msgstr "مستند"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:23
+msgid "View/Print"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:28
+msgid "Import this document"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:33
+msgid "Import it into an existing OpenERP instance"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:36
+msgid "OpenERP instance address:"
+msgstr "عنوان مثال أوبنيرب:"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:39
+msgid "Import"
+msgstr "إستيراد"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:44
+msgid "Import it into a new OpenERP Online instance"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:47
+msgid "Create my new OpenERP instance"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:52
+msgid "Import into another application"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:54
+msgid ""
+"OpenERP's Electronic Data Interchange documents are based on a generic and "
+"language\n"
+" independent"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:56
+msgid "JSON"
+msgstr "JSON"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:56
+msgid ""
+"serialization of the document's attribute.\n"
+" It is usually very quick and straightforward to "
+"create a small plug-in for your preferred\n"
+" application that will be capable of importing "
+"any OpenERP EDI document.\n"
+" You can find out more details about how to do "
+"this and what the content of OpenERP EDI documents\n"
+" is like in the"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:60
+msgid "OpenERP documentation"
+msgstr "وثائق أوبنيرب"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:61
+msgid "To get started immediately,"
+msgstr "للبدء خالاً"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:62
+msgid "see is all it takes to use this EDI document in Python"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:70
+msgid "You can download the raw EDI document here:"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:73
+msgid "Download"
+msgstr "تحميل"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:87
+msgid "Powered by"
+msgstr "مدعوم من kifcaliph و"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi.xml:87
+msgid "OpenERP"
+msgstr "أوبنيرب"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:34
+msgid "Invoice"
+msgstr "فاتورة"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:37
+msgid "Description"
+msgstr "الوصف"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:38
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:41
+msgid "Date"
+msgstr "التاريخ"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:39
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:40
+msgid "Your Reference"
+msgstr "مرجعك"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:50
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:57
+msgid "Product Description"
+msgstr "وصف المنتج"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:51
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:58
+msgid "Quantity"
+msgstr "الكمية"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:52
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:59
+msgid "Unit Price"
+msgstr "سعر الوحدة"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:53
+msgid "Discount"
+msgstr "الخصم"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:54
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:61
+msgid "Price"
+msgstr "السعر"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:72
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:81
+msgid "Net Total:"
+msgstr "صافي الإجمالي:"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:83
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:92
+msgid "Taxes:"
+msgstr "ضرائب:"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:94
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:103
+msgid "Total:"
+msgstr "الإجمالي:"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:106
+msgid "Tax"
+msgstr "ضريبة"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:107
+msgid "Base Amount"
+msgstr "المبلغ الأساسي"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:108
+msgid "Amount"
+msgstr "المقدار"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:121
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:113
+msgid "Notes:"
+msgstr "ملاحظات:"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:129
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:121
+msgid "Pay Online"
+msgstr "الدفع أونلاين"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:133
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:125
+msgid "Paypal"
+msgstr "باي بال (Paypal)"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:135
+msgid ""
+"You may directly pay this invoice online via Paypal's secure payment gateway:"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:145
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:137
+msgid "Bank Wire Transfer"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:147
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:139
+msgid "Please transfer"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:148
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:140
+msgid "to"
+msgstr "إلى"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:149
+msgid ""
+"(postal address on the invoice header)\n"
+" using one of the following bank accounts. Be sure to "
+"mention the invoice\n"
+" reference"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_account.xml:151
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:143
+msgid "on the transfer:"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:36
+msgid "Order"
+msgstr "الترتيب"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:42
+msgid "Salesman"
+msgstr "مندوب المبيعات"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:43
+msgid "Payment terms"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:60
+msgid "Discount(%)"
+msgstr "الخصم (%)"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:127
+msgid ""
+"You may directly pay this order online via Paypal's secure payment gateway:"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/edi/static/src/xml/edi_sale_purchase.xml:141
+msgid ""
+"(postal address on the order header)\n"
+" using one of the following bank accounts. Be sure to "
+"mention the document\n"
+" reference"
+msgstr ""
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml
index 0825cef42c5..4e22569c3e1 100644
--- a/addons/event/event_view.xml
+++ b/addons/event/event_view.xml
@@ -387,6 +387,7 @@
+
diff --git a/addons/event/security/event_security.xml b/addons/event/security/event_security.xml
index fb29fffcca9..5055d517bd5 100644
--- a/addons/event/security/event_security.xml
+++ b/addons/event/security/event_security.xml
@@ -17,10 +17,7 @@
Manager
-
-
-
-
+
diff --git a/addons/fetchmail/__init__.py b/addons/fetchmail/__init__.py
index 934df9846dd..7703c4d2f5b 100644
--- a/addons/fetchmail/__init__.py
+++ b/addons/fetchmail/__init__.py
@@ -1,7 +1,7 @@
#-*- coding:utf-8 -*-
##############################################################################
#
-# OpenERP, Open Source Management Solution
+# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (). All Rights Reserved
# mga@tinyerp.com
#
@@ -21,5 +21,6 @@
##############################################################################
import fetchmail
+import res_config
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/fetchmail/fetchmail_view.xml b/addons/fetchmail/fetchmail_view.xml
index a9fb94553ed..3344183a92a 100644
--- a/addons/fetchmail/fetchmail_view.xml
+++ b/addons/fetchmail/fetchmail_view.xml
@@ -105,6 +105,7 @@
action="action_email_server_tree"
name="Incoming Mail Servers"
sequence="14"
+ groups="base.group_no_one"
/>
diff --git a/addons/fetchmail/res_config.py b/addons/fetchmail/res_config.py
new file mode 100644
index 00000000000..2b4072a63c3
--- /dev/null
+++ b/addons/fetchmail/res_config.py
@@ -0,0 +1,123 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. ().
+#
+# 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
+
+class fetchmail_config_settings(osv.osv_memory):
+ """ This wizard can be inherited in conjunction with 'res.config.settings', in order to
+ define fields that configure a fetchmail server.
+
+ It relies on the following convention on a set of fields::
+
+ class my_config_wizard(osv.osv_memory):
+ _name = 'my.settings'
+ _inherits = ['res.config.settings', 'fetchmail.config.settings']
+
+ _columns = {
+ 'fetchmail_X': fields.boolean(..., fetchmail_model='my.model', fetchmail_name='Blah'),
+ 'X_server': fields.char('Server Name', size=256),
+ 'X_port': fields.integer('Port'),
+ 'X_type': fields.selection(
+ [('pop', 'POP Server'), ('imap', 'IMAP Server'), ('local', 'Local Server')],
+ 'Server Type'),
+ 'X_is_ssl': fields.boolean('SSL/TLS'),
+ 'X_user': fields.char('Username', size=256),
+ 'X_password': fields.char('Password', size=1024),
+ }
+
+ The method ``get_default_fetchmail_servers`` retrieves the current fetchmail configuration
+ for all fields that start with 'fetchmail_'. It looks up configurations that match the
+ given model name (``fetchmail_model``). The method ``set_fetchmail_servers`` updates the
+ fetchmail configurations by following the same conventions. Both methods are called
+ automatically by the methods of the model 'res.config.settings'.
+
+ The onchange method ``onchange_fetchmail`` can be used to react on changes on the fields
+ 'X_type' and 'X_is_ssl'. Its first parameter is the fields' prefix (here 'X').
+ """
+ _name = 'fetchmail.config.settings'
+
+ def get_default_fetchmail_servers(self, cr, uid, fields, context=None):
+ ir_model = self.pool.get('ir.model')
+ fetchmail_server = self.pool.get('fetchmail.server')
+ fetchmail_fields = [f for f in self._columns if f.startswith('fetchmail_')]
+ res = {}
+ for field in fetchmail_fields:
+ model_name = self._columns[field].fetchmail_model
+ model_id = ir_model.search(cr, uid, [('model', '=', model_name)])[0]
+ server_ids = fetchmail_server.search(cr, uid, [('object_id', '=', model_id), ('state', '=', 'done')])
+ if server_ids:
+ server = fetchmail_server.browse(cr, uid, server_ids[0], context)
+ prefix = field[10:]
+ res.update({
+ field: True,
+ prefix + '_server': server.server,
+ prefix + '_port': server.port,
+ prefix + '_type': server.type,
+ prefix + '_is_ssl': server.is_ssl,
+ prefix + '_user': server.user,
+ prefix + '_password': server.password,
+ })
+ return res
+
+ def set_fetchmail_servers(self, cr, uid, ids, context):
+ ir_model = self.pool.get('ir.model')
+ fetchmail_server = self.pool.get('fetchmail.server')
+ fetchmail_fields = [f for f in self._columns if f.startswith('fetchmail_')]
+ config = self.browse(cr, uid, ids[0], context)
+ for field in fetchmail_fields:
+ model_name = self._columns[field].fetchmail_model
+ model_id = ir_model.search(cr, uid, [('model', '=', model_name)])[0]
+ server_ids = fetchmail_server.search(cr, uid, [('object_id', '=', model_id), ('state', '=', 'done')])
+ if config[field]:
+ prefix = field[10:]
+ values = {
+ 'server': config[prefix + '_server'],
+ 'port': config[prefix + '_port'],
+ 'type': config[prefix + '_type'],
+ 'is_ssl': config[prefix + '_is_ssl'],
+ 'user': config[prefix + '_user'],
+ 'password': config[prefix + '_password'],
+ }
+ if not server_ids:
+ values.update({
+ 'name': getattr(self._columns[field], 'fetchmail_name', model_name),
+ 'object_id': model_id,
+ })
+ server_ids = [fetchmail_server.create(cr, uid, values, context=context)]
+ else:
+ server_ids = fetchmail_server.search(cr, uid, [('object_id', '=', model_id)], context=context)
+ fetchmail_server.write(cr, uid, server_ids, values, context=context)
+ fetchmail_server.button_confirm_login(cr, uid, server_ids, context)
+ else:
+ fetchmail_server.set_draft(cr, uid, server_ids, context)
+
+ def onchange_fetchmail(self, cr, uid, ids, prefix, server_type, ssl, context=None):
+ values = {}
+ if server_type == 'pop':
+ values[prefix + '_port'] = ssl and 995 or 110
+ elif server_type == 'imap':
+ values[prefix + '_port'] = ssl and 993 or 143
+ else:
+ values[prefix + '_server'] = False
+ values[prefix + '_port'] = 0
+ return {'value': values}
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/fetchmail_crm/__init__.py b/addons/fetchmail_crm/__init__.py
deleted file mode 100644
index b5b36afb7e9..00000000000
--- a/addons/fetchmail_crm/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#-*- coding:utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
-#
-# 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 .
-#
-##############################################################################
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/fetchmail_crm/__openerp__.py b/addons/fetchmail_crm/__openerp__.py
deleted file mode 100644
index 108cc5f4d59..00000000000
--- a/addons/fetchmail_crm/__openerp__.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#-*- coding:utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
-#
-# 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" : "eMail Gateway for Leads",
- "version" : "1.0",
- "depends" : ["fetchmail", "crm"],
- "author" : "OpenERP SA",
- "category": 'Hidden',
- "description": """
- """,
- 'website': 'http://www.openerp.com',
- 'init_xml': [],
- 'update_xml': [
- "installer.xml",
- ],
- 'demo_xml': [
- ],
- 'installable': True,
- 'auto_install': True,
-}
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/fetchmail_crm/i18n/de.po b/addons/fetchmail_crm/i18n/de.po
deleted file mode 100644
index e82e8d68de8..00000000000
--- a/addons/fetchmail_crm/i18n/de.po
+++ /dev/null
@@ -1,36 +0,0 @@
-# German translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-09 15:11+0000\n"
-"Last-Translator: Ferdinand @ Camptocamp \n"
-"Language-Team: German \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-10 04:50+0000\n"
-"X-Generator: Launchpad (build 14771)\n"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,name:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid "Create Leads from Email Account"
-msgstr "Erzeuge Kontakte vom Email Konto"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,help:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid ""
-"You can connect your email account with leads in OpenERP. A new email sent "
-"to this account (example: info@mycompany.com) will automatically create a "
-"lead in OpenERP. The whole communication with the salesman will be attached "
-"to the lead automatically."
-msgstr ""
-"Sie können Ihre E-Mails mit Verkaufs-Kontakten in OpenERP verbinden. Ein "
-"Email das an dieses Konto gesendet wird, erzeugt dann automatische einen "
-"Verkaufskontakt in OpenERP. Die gesamte Kommunikation mit dem Verkäufer wird "
-"dann diesem Verkaufskontakt zugeordnet."
diff --git a/addons/fetchmail_crm/i18n/es.po b/addons/fetchmail_crm/i18n/es.po
deleted file mode 100644
index ef1a0cd6485..00000000000
--- a/addons/fetchmail_crm/i18n/es.po
+++ /dev/null
@@ -1,36 +0,0 @@
-# Spanish translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-10 08:32+0000\n"
-"Last-Translator: Carlos @ smile-iberia \n"
-"Language-Team: Spanish \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-11 05:09+0000\n"
-"X-Generator: Launchpad (build 14771)\n"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,name:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid "Create Leads from Email Account"
-msgstr ""
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,help:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid ""
-"You can connect your email account with leads in OpenERP. A new email sent "
-"to this account (example: info@mycompany.com) will automatically create a "
-"lead in OpenERP. The whole communication with the salesman will be attached "
-"to the lead automatically."
-msgstr ""
-"No puede conectar su cuenta de email con iniciativas en OpenERP. Un nuevo "
-"email enviado a esta cuenta (por ejemplo: info@miempresa.com) creará "
-"automáticamente una iniciativa en OpenERP. Toda la comunicación con el "
-"comercial será adjuntada a la iniciativa automáticamente."
diff --git a/addons/fetchmail_crm/i18n/es_CR.po b/addons/fetchmail_crm/i18n/es_CR.po
deleted file mode 100644
index 6eae3fdc708..00000000000
--- a/addons/fetchmail_crm/i18n/es_CR.po
+++ /dev/null
@@ -1,36 +0,0 @@
-# Spanish (Costa Rica) translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-15 21:55+0000\n"
-"Last-Translator: Freddy Gonzalez \n"
-"Language-Team: Spanish (Costa Rica) \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-16 05:07+0000\n"
-"X-Generator: Launchpad (build 14781)\n"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,name:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid "Create Leads from Email Account"
-msgstr "Crear clientes potenciales de cuentas de correo electrónico"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,help:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid ""
-"You can connect your email account with leads in OpenERP. A new email sent "
-"to this account (example: info@mycompany.com) will automatically create a "
-"lead in OpenERP. The whole communication with the salesman will be attached "
-"to the lead automatically."
-msgstr ""
-"No puede conectar su cuenta de email con iniciativas en OpenERP. Un nuevo "
-"email enviado a esta cuenta (por ejemplo: info@miempresa.com) creará "
-"automáticamente una iniciativa en OpenERP. Toda la comunicación con el "
-"comercial será adjuntada a la iniciativa automáticamente."
diff --git a/addons/fetchmail_crm/i18n/fetchmail_crm.pot b/addons/fetchmail_crm/i18n/fetchmail_crm.pot
deleted file mode 100644
index d614b85fda6..00000000000
--- a/addons/fetchmail_crm/i18n/fetchmail_crm.pot
+++ /dev/null
@@ -1,27 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * fetchmail_crm
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.1rc1\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-08 00:36+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: fetchmail_crm
-#: model:ir.actions.act_window,name:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid "Create Leads from Email Account"
-msgstr ""
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,help:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid "You can connect your email account with leads in OpenERP. A new email sent to this account (example: info@mycompany.com) will automatically create a lead in OpenERP. The whole communication with the salesman will be attached to the lead automatically."
-msgstr ""
-
diff --git a/addons/fetchmail_crm/i18n/fr.po b/addons/fetchmail_crm/i18n/fr.po
deleted file mode 100644
index f1f71379a4d..00000000000
--- a/addons/fetchmail_crm/i18n/fr.po
+++ /dev/null
@@ -1,32 +0,0 @@
-# French translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-10 10:36+0000\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: French \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-11 05:09+0000\n"
-"X-Generator: Launchpad (build 14771)\n"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,name:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid "Create Leads from Email Account"
-msgstr ""
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,help:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid ""
-"You can connect your email account with leads in OpenERP. A new email sent "
-"to this account (example: info@mycompany.com) will automatically create a "
-"lead in OpenERP. The whole communication with the salesman will be attached "
-"to the lead automatically."
-msgstr ""
diff --git a/addons/fetchmail_crm/i18n/ja.po b/addons/fetchmail_crm/i18n/ja.po
deleted file mode 100644
index a8de0fd0bf9..00000000000
--- a/addons/fetchmail_crm/i18n/ja.po
+++ /dev/null
@@ -1,34 +0,0 @@
-# Japanese translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-04-01 05:43+0000\n"
-"Last-Translator: Masaki Yamaya \n"
-"Language-Team: Japanese \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-04-02 04:37+0000\n"
-"X-Generator: Launchpad (build 15032)\n"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,name:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid "Create Leads from Email Account"
-msgstr "Eメールアカウントからリードを作成"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,help:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid ""
-"You can connect your email account with leads in OpenERP. A new email sent "
-"to this account (example: info@mycompany.com) will automatically create a "
-"lead in OpenERP. The whole communication with the salesman will be attached "
-"to the lead automatically."
-msgstr ""
-"あなたのEメールアカウントをリードに結び付けることができます。このアカウントへ送られて来たメールは自動的にリードを作成します。セールス担当者との全ての交信"
-"は自動的にリードに添付されます。"
diff --git a/addons/fetchmail_crm/i18n/nl.po b/addons/fetchmail_crm/i18n/nl.po
deleted file mode 100644
index 58c3ff52e77..00000000000
--- a/addons/fetchmail_crm/i18n/nl.po
+++ /dev/null
@@ -1,36 +0,0 @@
-# Dutch translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-09 12:03+0000\n"
-"Last-Translator: Erwin \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: 2012-02-10 04:50+0000\n"
-"X-Generator: Launchpad (build 14771)\n"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,name:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid "Create Leads from Email Account"
-msgstr "Maakt leads van een E-mail"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,help:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid ""
-"You can connect your email account with leads in OpenERP. A new email sent "
-"to this account (example: info@mycompany.com) will automatically create a "
-"lead in OpenERP. The whole communication with the salesman will be attached "
-"to the lead automatically."
-msgstr ""
-"Het is mogelijk om uw e-mail adres te koppelen aan leads in OpenERP. Van een "
-"nieuwe e-mail, welke naar dit adres (bijvoorbeeld: info@mijnbedrijf.com) "
-"wordt gestuurd, wordt automatisch een lead gemaakt in OPenERP. De gehele "
-"communicatie met de verkoper wordt automatisch gekoppeld aan de lead."
diff --git a/addons/fetchmail_crm/i18n/sr@latin.po b/addons/fetchmail_crm/i18n/sr@latin.po
deleted file mode 100644
index 0d7509139a6..00000000000
--- a/addons/fetchmail_crm/i18n/sr@latin.po
+++ /dev/null
@@ -1,36 +0,0 @@
-# Serbian Latin translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-03-19 11:45+0000\n"
-"Last-Translator: Milan Milosevic \n"
-"Language-Team: Serbian Latin \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-03-20 04:56+0000\n"
-"X-Generator: Launchpad (build 14969)\n"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,name:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid "Create Leads from Email Account"
-msgstr "Napravi ovlašćenja preko email naloga"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,help:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid ""
-"You can connect your email account with leads in OpenERP. A new email sent "
-"to this account (example: info@mycompany.com) will automatically create a "
-"lead in OpenERP. The whole communication with the salesman will be attached "
-"to the lead automatically."
-msgstr ""
-"Možete povezati svoj email nalog sa ovlašćenjima u OpenERP-u. Novi email će "
-"biti poslat na taj nalog (npr: info@mycompany.com) i on će automatski "
-"napraviti ovlašćenje u OpenERP-u. Celokupna komunikacija sa prodavcem biće "
-"povezana s vodećom strankom automatski"
diff --git a/addons/fetchmail_crm/i18n/tr.po b/addons/fetchmail_crm/i18n/tr.po
deleted file mode 100644
index a52dcf088c3..00000000000
--- a/addons/fetchmail_crm/i18n/tr.po
+++ /dev/null
@@ -1,36 +0,0 @@
-# Turkish translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-09 23:08+0000\n"
-"Last-Translator: Ahmet Altınışık \n"
-"Language-Team: Turkish
\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-11 05:09+0000\n"
-"X-Generator: Launchpad (build 14771)\n"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,name:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid "Create Leads from Email Account"
-msgstr "E-posta hesabından fırsatlar oluştur"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,help:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid ""
-"You can connect your email account with leads in OpenERP. A new email sent "
-"to this account (example: info@mycompany.com) will automatically create a "
-"lead in OpenERP. The whole communication with the salesman will be attached "
-"to the lead automatically."
-msgstr ""
-"E-posta hesabınız ile OpenERP fırsatlarını birbirine bağlayabilirsiniz. Bu "
-"hesaba gönderilen yeni bir e-posta (mesela: satis@mycompany.com) için "
-"otomatik olarak bir fırsat oluşturulacak ve satış temsilcisiyle yapılan "
-"bütün mesaj trafiği fırsata otomatik olarak eklenecek."
diff --git a/addons/fetchmail_crm/i18n/zh_CN.po b/addons/fetchmail_crm/i18n/zh_CN.po
deleted file mode 100644
index 6c006483a94..00000000000
--- a/addons/fetchmail_crm/i18n/zh_CN.po
+++ /dev/null
@@ -1,34 +0,0 @@
-# Chinese (Simplified) translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-16 04:42+0000\n"
-"Last-Translator: wangsy \n"
-"Language-Team: Chinese (Simplified) \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-17 05:01+0000\n"
-"X-Generator: Launchpad (build 14814)\n"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,name:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid "Create Leads from Email Account"
-msgstr "从邮件获取商机"
-
-#. module: fetchmail_crm
-#: model:ir.actions.act_window,help:fetchmail_crm.action_create_crm_leads_from_email_account
-msgid ""
-"You can connect your email account with leads in OpenERP. A new email sent "
-"to this account (example: info@mycompany.com) will automatically create a "
-"lead in OpenERP. The whole communication with the salesman will be attached "
-"to the lead automatically."
-msgstr ""
-"你可以在OpenERP中连接包含商机的电子邮件账户,一封发往该账号的邮件(例如:info@mycompany.com)会自动创建一条商机。所有与该销售员的"
-"沟通会自动附加到此商机中。"
diff --git a/addons/fetchmail_crm/installer.xml b/addons/fetchmail_crm/installer.xml
deleted file mode 100644
index 5223367eb29..00000000000
--- a/addons/fetchmail_crm/installer.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- Create Leads from Email Account
- ir.actions.act_window
- fetchmail.server
- form
- tree,form
-
- You can connect your email account with leads in OpenERP. A new email sent to this account (example: info@mycompany.com) will automatically create a lead in OpenERP. The whole communication with the salesman will be attached to the lead automatically.
-
-
-
-
-
-
-
-
diff --git a/addons/fetchmail_crm_claim/__openerp__.py b/addons/fetchmail_crm_claim/__openerp__.py
deleted file mode 100644
index 2a515205f9e..00000000000
--- a/addons/fetchmail_crm_claim/__openerp__.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#-*- coding:utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
-#
-# 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" : "eMail Gateway for CRM Claim",
- "version" : "1.0",
- "depends" : ["fetchmail", "crm_claim"],
- "author" : "OpenERP SA",
- 'category': 'Hidden',
- "description": """
- """,
- 'website': 'http://www.openerp.com',
- 'init_xml': [],
- 'update_xml': [
- "installer.xml",
- ],
- 'demo_xml': [
- ],
- 'installable': True,
- 'auto_install': True,
-}
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/fetchmail_crm_claim/i18n/de.po b/addons/fetchmail_crm_claim/i18n/de.po
deleted file mode 100644
index f70948419f1..00000000000
--- a/addons/fetchmail_crm_claim/i18n/de.po
+++ /dev/null
@@ -1,36 +0,0 @@
-# German translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-09 15:10+0000\n"
-"Last-Translator: Ferdinand @ Camptocamp \n"
-"Language-Team: German \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-10 04:50+0000\n"
-"X-Generator: Launchpad (build 14771)\n"
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,help:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid ""
-"You can connect your email account with claims in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create a "
-"claim for the followup in OpenERP. The whole communication by email will be "
-"attached to the claim automatically to keep track of the history."
-msgstr ""
-"Sie können Ihre E-Mails mit Reklamationen in OpenERP verbinden. Ein Email "
-"das an dieses Konto gesendet wird, erzeugt dann automatische eine "
-"Reklamation in OpenERP. Die gesamte Kommunikation wird dann dieser "
-"Reklamation zugeordnet."
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,name:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid "Create Claims from Email Account"
-msgstr "Erzeuge Reklamationen von diesem Mail Konto"
diff --git a/addons/fetchmail_crm_claim/i18n/es.po b/addons/fetchmail_crm_claim/i18n/es.po
deleted file mode 100644
index 8844c84fec5..00000000000
--- a/addons/fetchmail_crm_claim/i18n/es.po
+++ /dev/null
@@ -1,32 +0,0 @@
-# Spanish translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-10 08:35+0000\n"
-"Last-Translator: Carlos @ smile-iberia \n"
-"Language-Team: Spanish \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-11 05:09+0000\n"
-"X-Generator: Launchpad (build 14771)\n"
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,help:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid ""
-"You can connect your email account with claims in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create a "
-"claim for the followup in OpenERP. The whole communication by email will be "
-"attached to the claim automatically to keep track of the history."
-msgstr ""
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,name:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid "Create Claims from Email Account"
-msgstr "Crear reclamaciones a partir de cuentas de email"
diff --git a/addons/fetchmail_crm_claim/i18n/es_CR.po b/addons/fetchmail_crm_claim/i18n/es_CR.po
deleted file mode 100644
index 8e9a1e171bf..00000000000
--- a/addons/fetchmail_crm_claim/i18n/es_CR.po
+++ /dev/null
@@ -1,37 +0,0 @@
-# Spanish (Costa Rica) translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-15 21:58+0000\n"
-"Last-Translator: Freddy Gonzalez \n"
-"Language-Team: Spanish (Costa Rica) \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-16 05:07+0000\n"
-"X-Generator: Launchpad (build 14781)\n"
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,help:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid ""
-"You can connect your email account with claims in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create a "
-"claim for the followup in OpenERP. The whole communication by email will be "
-"attached to the claim automatically to keep track of the history."
-msgstr ""
-"Puedes conectar tu cuenta de correo electrónico con derechos en OpenERP. Un "
-"nuevo correo enviado a esta cuenta (por ejemplo: support@mycompany.com) "
-"creará automáticamente un reclamo para el seguimiento en OpenERP. Toda la "
-"comunicación por correo electrónico se adjuntará a la solicitud de forma "
-"automática para realizar un seguimiento de la historia."
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,name:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid "Create Claims from Email Account"
-msgstr "Crear reclamaciones a partir de cuentas de email"
diff --git a/addons/fetchmail_crm_claim/i18n/fetchmail_crm_claim.pot b/addons/fetchmail_crm_claim/i18n/fetchmail_crm_claim.pot
deleted file mode 100644
index f4b85a56470..00000000000
--- a/addons/fetchmail_crm_claim/i18n/fetchmail_crm_claim.pot
+++ /dev/null
@@ -1,27 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * fetchmail_crm_claim
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.1rc1\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-08 00:36+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: fetchmail_crm_claim
-#: model:ir.actions.act_window,help:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid "You can connect your email account with claims in OpenERP. A new email sent to this account (example: support@mycompany.com) will automatically create a claim for the followup in OpenERP. The whole communication by email will be attached to the claim automatically to keep track of the history."
-msgstr ""
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,name:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid "Create Claims from Email Account"
-msgstr ""
-
diff --git a/addons/fetchmail_crm_claim/i18n/fr.po b/addons/fetchmail_crm_claim/i18n/fr.po
deleted file mode 100644
index 50a31809630..00000000000
--- a/addons/fetchmail_crm_claim/i18n/fr.po
+++ /dev/null
@@ -1,32 +0,0 @@
-# French translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-15 19:09+0000\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: French \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-16 05:07+0000\n"
-"X-Generator: Launchpad (build 14781)\n"
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,help:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid ""
-"You can connect your email account with claims in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create a "
-"claim for the followup in OpenERP. The whole communication by email will be "
-"attached to the claim automatically to keep track of the history."
-msgstr ""
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,name:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid "Create Claims from Email Account"
-msgstr ""
diff --git a/addons/fetchmail_crm_claim/i18n/ja.po b/addons/fetchmail_crm_claim/i18n/ja.po
index 1d17a5fd162..a1f6db4a764 100644
--- a/addons/fetchmail_crm_claim/i18n/ja.po
+++ b/addons/fetchmail_crm_claim/i18n/ja.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-04-01 06:29+0000\n"
+"PO-Revision-Date: 2012-04-08 05:43+0000\n"
"Last-Translator: Masaki Yamaya \n"
"Language-Team: Japanese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-04-02 04:37+0000\n"
-"X-Generator: Launchpad (build 15032)\n"
+"X-Launchpad-Export-Date: 2012-04-09 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: fetchmail_crm_claim
#: model:ir.actions.act_window,help:fetchmail_crm_claim.action_create_crm_claims_from_email_account
@@ -25,6 +25,8 @@ msgid ""
"claim for the followup in OpenERP. The whole communication by email will be "
"attached to the claim automatically to keep track of the history."
msgstr ""
+"あなたのEメールアカウントをOpenERPのクレームに関連づけることはできません。このアカウントに送られた新しいEメールはOpenERPのフォローアップの"
+"ためのクレームを自動的に作成します。Eメールによる全てのコミュニケーションは、履歴を記録するために、自動的にクレームに関連づけられます。"
#. module: fetchmail_crm_claim
#: model:ir.actions.act_window,name:fetchmail_crm_claim.action_create_crm_claims_from_email_account
diff --git a/addons/fetchmail_crm_claim/i18n/nl.po b/addons/fetchmail_crm_claim/i18n/nl.po
deleted file mode 100644
index 15c9812f502..00000000000
--- a/addons/fetchmail_crm_claim/i18n/nl.po
+++ /dev/null
@@ -1,37 +0,0 @@
-# Dutch translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-12 15:20+0000\n"
-"Last-Translator: Erwin \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: 2012-02-13 04:50+0000\n"
-"X-Generator: Launchpad (build 14781)\n"
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,help:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid ""
-"You can connect your email account with claims in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create a "
-"claim for the followup in OpenERP. The whole communication by email will be "
-"attached to the claim automatically to keep track of the history."
-msgstr ""
-"Het is mogelijk uw e-mail account te koppelen aan claims in OpenERP. Een "
-"nieuwe e-mail, welke wordt verzonden naar dit account (bijvoorbeeld: "
-"support@mijnbedrijf.com), zal automatisch een claim aanmaken welke kan "
-"worden opgevolgd in OpenERP. De gehele communicatie van de e-mail wordt "
-"automatisch gekoppeld aan de claim, zodat de historie getraceerd kan worden."
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,name:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid "Create Claims from Email Account"
-msgstr "Maak claims van e-mail account"
diff --git a/addons/fetchmail_crm_claim/i18n/sr@latin.po b/addons/fetchmail_crm_claim/i18n/sr@latin.po
deleted file mode 100644
index d6db86d1d9e..00000000000
--- a/addons/fetchmail_crm_claim/i18n/sr@latin.po
+++ /dev/null
@@ -1,36 +0,0 @@
-# Serbian Latin translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-03-19 11:51+0000\n"
-"Last-Translator: Milan Milosevic \n"
-"Language-Team: Serbian Latin \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-03-20 04:56+0000\n"
-"X-Generator: Launchpad (build 14969)\n"
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,help:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid ""
-"You can connect your email account with claims in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create a "
-"claim for the followup in OpenERP. The whole communication by email will be "
-"attached to the claim automatically to keep track of the history."
-msgstr ""
-"Možete povezati svoj nalog sa potraživanjima u OpenERP-u. Novi email biće "
-"poslat na taj nalog (npr:support@mycompany.com), i on će automatski "
-"napraviti potraživanje. Celokupna komunikacija biće povezana s potraživanjem "
-"automatski da bi se sačuvao pregled istorije komunikacije."
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,name:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid "Create Claims from Email Account"
-msgstr "Napravi potraživanje preko email naloga"
diff --git a/addons/fetchmail_crm_claim/i18n/tr.po b/addons/fetchmail_crm_claim/i18n/tr.po
deleted file mode 100644
index 3d758e1713f..00000000000
--- a/addons/fetchmail_crm_claim/i18n/tr.po
+++ /dev/null
@@ -1,35 +0,0 @@
-# Turkish translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-09 23:11+0000\n"
-"Last-Translator: Ahmet Altınışık \n"
-"Language-Team: Turkish
\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-11 05:09+0000\n"
-"X-Generator: Launchpad (build 14771)\n"
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,help:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid ""
-"You can connect your email account with claims in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create a "
-"claim for the followup in OpenERP. The whole communication by email will be "
-"attached to the claim automatically to keep track of the history."
-msgstr ""
-"E-posta hesabınızla OpenERP şikayetlerini bağlayabilirsiniz. Bu e-posta "
-"hesabına (örnek: sikayet@sirketim.com) gönderilen her e-posta için bir "
-"şikayet otomatik olarak oluşturulacak."
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,name:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid "Create Claims from Email Account"
-msgstr "E-posta hesabından sikayet oluştur"
diff --git a/addons/fetchmail_crm_claim/i18n/zh_CN.po b/addons/fetchmail_crm_claim/i18n/zh_CN.po
deleted file mode 100644
index 1b4e3aacfcc..00000000000
--- a/addons/fetchmail_crm_claim/i18n/zh_CN.po
+++ /dev/null
@@ -1,34 +0,0 @@
-# Chinese (Simplified) translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-16 04:39+0000\n"
-"Last-Translator: wangsy \n"
-"Language-Team: Chinese (Simplified) \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-17 05:01+0000\n"
-"X-Generator: Launchpad (build 14814)\n"
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,help:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid ""
-"You can connect your email account with claims in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create a "
-"claim for the followup in OpenERP. The whole communication by email will be "
-"attached to the claim automatically to keep track of the history."
-msgstr ""
-"你可以在OpenERP中连接包含支持服务的电子邮件账户,一封发往该账号的邮件(例如:support@mycompany.com)会自动创建一条跟踪服务的记"
-"录。所有电子邮件沟通将自动附加在该支持服务记录上以保留所有跟踪的过程。"
-
-#. module: fetchmail_crm_claim
-#: model:ir.actions.act_window,name:fetchmail_crm_claim.action_create_crm_claims_from_email_account
-msgid "Create Claims from Email Account"
-msgstr "从电子邮件创建支持服务"
diff --git a/addons/fetchmail_crm_claim/installer.xml b/addons/fetchmail_crm_claim/installer.xml
deleted file mode 100644
index b3652a72938..00000000000
--- a/addons/fetchmail_crm_claim/installer.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- Create Claims from Email Account
- ir.actions.act_window
- fetchmail.server
- form
- tree,form
-
- You can connect your email account with claims in OpenERP. A new email sent to this account (example: support@mycompany.com) will automatically create a claim for the followup in OpenERP. The whole communication by email will be attached to the claim automatically to keep track of the history.
-
-
-
-
-
-
-
-
diff --git a/addons/fetchmail_hr_recruitment/__openerp__.py b/addons/fetchmail_hr_recruitment/__openerp__.py
deleted file mode 100644
index 98910a8f977..00000000000
--- a/addons/fetchmail_hr_recruitment/__openerp__.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#-*- coding:utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
-#
-# 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" : "eMail Gateway for Applicants",
- "version" : "1.0",
- "depends" : ["fetchmail", "hr_recruitment"],
- "author" : "OpenERP SA",
- "category": "Hidden",
- "description": """
- """,
- 'website': 'http://www.openerp.com',
- 'init_xml': [],
- 'update_xml': [
- "installer.xml",
- ],
- 'demo_xml': [
- ],
- 'installable': True,
- 'auto_install': True,
-}
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/fetchmail_hr_recruitment/i18n/de.po b/addons/fetchmail_hr_recruitment/i18n/de.po
deleted file mode 100644
index 776a84f7167..00000000000
--- a/addons/fetchmail_hr_recruitment/i18n/de.po
+++ /dev/null
@@ -1,35 +0,0 @@
-# German translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-09 15:13+0000\n"
-"Last-Translator: Ferdinand @ Camptocamp \n"
-"Language-Team: German \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-10 04:50+0000\n"
-"X-Generator: Launchpad (build 14771)\n"
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,help:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid ""
-"You can synchronize the job email account (e.g. job@yourcompany.com) with "
-"OpenERP so that new applicants are created automatically in OpenERP for the "
-"followup of the recruitment process. Attachments are automatically stored in "
-"the DMS of OpenERP so that you get an indexation of all the CVs received."
-msgstr ""
-"Sie können Bewerbungen die auf diesem Konto (job@your.company.com) eingehen "
-"automatisch mit Bewerbungen in OpenERP verbinden. Die Anhänge (zB CV) werden "
-"automatisch im Dokumentenmanagement von OpenERP gespeichert und indiziert."
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,name:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid "Create Applicants from Email Account"
-msgstr "Erzeuge Bewerbungen von diesem EMail Konto"
diff --git a/addons/fetchmail_hr_recruitment/i18n/es_CR.po b/addons/fetchmail_hr_recruitment/i18n/es_CR.po
deleted file mode 100644
index 297439ad7ad..00000000000
--- a/addons/fetchmail_hr_recruitment/i18n/es_CR.po
+++ /dev/null
@@ -1,37 +0,0 @@
-# Spanish (Costa Rica) translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-15 22:01+0000\n"
-"Last-Translator: Freddy Gonzalez \n"
-"Language-Team: Spanish (Costa Rica) \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-16 05:07+0000\n"
-"X-Generator: Launchpad (build 14781)\n"
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,help:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid ""
-"You can synchronize the job email account (e.g. job@yourcompany.com) with "
-"OpenERP so that new applicants are created automatically in OpenERP for the "
-"followup of the recruitment process. Attachments are automatically stored in "
-"the DMS of OpenERP so that you get an indexation of all the CVs received."
-msgstr ""
-"Puede sincronizar la cuenta de correo electrónico de trabajo (por ejemplo, "
-"job@yourcompany.com) con OpenERP para que los nuevos solicitantes se crean "
-"automáticamente en OpenERP para el seguimiento del proceso de contratación. "
-"Los archivos adjuntos se almacenan automáticamente en el DMS de OpenERP para "
-"que usted obtenga una indexación de todos los CV recibidos."
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,name:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid "Create Applicants from Email Account"
-msgstr "Crear solicitantes de la cuenta de correo electrónico"
diff --git a/addons/fetchmail_hr_recruitment/i18n/fetchmail_hr_recruitment.pot b/addons/fetchmail_hr_recruitment/i18n/fetchmail_hr_recruitment.pot
deleted file mode 100644
index 57e54b6c19d..00000000000
--- a/addons/fetchmail_hr_recruitment/i18n/fetchmail_hr_recruitment.pot
+++ /dev/null
@@ -1,27 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * fetchmail_hr_recruitment
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.1rc1\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-08 00:36+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: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,help:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid "You can synchronize the job email account (e.g. job@yourcompany.com) with OpenERP so that new applicants are created automatically in OpenERP for the followup of the recruitment process. Attachments are automatically stored in the DMS of OpenERP so that you get an indexation of all the CVs received."
-msgstr ""
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,name:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid "Create Applicants from Email Account"
-msgstr ""
-
diff --git a/addons/fetchmail_hr_recruitment/i18n/fr.po b/addons/fetchmail_hr_recruitment/i18n/fr.po
deleted file mode 100644
index dd5b0ca99f1..00000000000
--- a/addons/fetchmail_hr_recruitment/i18n/fr.po
+++ /dev/null
@@ -1,32 +0,0 @@
-# French translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-03-05 21:49+0000\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: French \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-03-06 04:48+0000\n"
-"X-Generator: Launchpad (build 14900)\n"
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,help:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid ""
-"You can synchronize the job email account (e.g. job@yourcompany.com) with "
-"OpenERP so that new applicants are created automatically in OpenERP for the "
-"followup of the recruitment process. Attachments are automatically stored in "
-"the DMS of OpenERP so that you get an indexation of all the CVs received."
-msgstr ""
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,name:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid "Create Applicants from Email Account"
-msgstr ""
diff --git a/addons/fetchmail_hr_recruitment/i18n/ja.po b/addons/fetchmail_hr_recruitment/i18n/ja.po
deleted file mode 100644
index 76eeb10ce74..00000000000
--- a/addons/fetchmail_hr_recruitment/i18n/ja.po
+++ /dev/null
@@ -1,32 +0,0 @@
-# Japanese translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-04-01 05:45+0000\n"
-"Last-Translator: Masaki Yamaya \n"
-"Language-Team: Japanese \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-04-02 04:37+0000\n"
-"X-Generator: Launchpad (build 15032)\n"
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,help:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid ""
-"You can synchronize the job email account (e.g. job@yourcompany.com) with "
-"OpenERP so that new applicants are created automatically in OpenERP for the "
-"followup of the recruitment process. Attachments are automatically stored in "
-"the DMS of OpenERP so that you get an indexation of all the CVs received."
-msgstr ""
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,name:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid "Create Applicants from Email Account"
-msgstr "Eメールアカウントから応募者を作成"
diff --git a/addons/fetchmail_hr_recruitment/i18n/nl.po b/addons/fetchmail_hr_recruitment/i18n/nl.po
deleted file mode 100644
index 8dc53088f60..00000000000
--- a/addons/fetchmail_hr_recruitment/i18n/nl.po
+++ /dev/null
@@ -1,37 +0,0 @@
-# Dutch translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-13 14:18+0000\n"
-"Last-Translator: Erwin \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: 2012-02-14 05:46+0000\n"
-"X-Generator: Launchpad (build 14781)\n"
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,help:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid ""
-"You can synchronize the job email account (e.g. job@yourcompany.com) with "
-"OpenERP so that new applicants are created automatically in OpenERP for the "
-"followup of the recruitment process. Attachments are automatically stored in "
-"the DMS of OpenERP so that you get an indexation of all the CVs received."
-msgstr ""
-"Het is mogelijk het vacature e-mail account (bijvoorbeeld: "
-"vacature@mijnbedrijf.nl) te synchroniseren met OpenERP zo dat nieuwe "
-"kandidaten automatisch worden aangemaakt in OpenERP voor het vervolgproces "
-"van de wervingsproces. Bijlagen worden automatisch opgeslagen in de DMS van "
-"OpenERP zo dat alle ontvangen CV's automatisch worden geïndexeerd."
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,name:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid "Create Applicants from Email Account"
-msgstr "Maak kandidaten van een E-mail"
diff --git a/addons/fetchmail_hr_recruitment/i18n/pt.po b/addons/fetchmail_hr_recruitment/i18n/pt.po
deleted file mode 100644
index 6fc0ff57046..00000000000
--- a/addons/fetchmail_hr_recruitment/i18n/pt.po
+++ /dev/null
@@ -1,32 +0,0 @@
-# Portuguese translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-29 22:48+0000\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: Portuguese \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-03-02 04:36+0000\n"
-"X-Generator: Launchpad (build 14886)\n"
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,help:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid ""
-"You can synchronize the job email account (e.g. job@yourcompany.com) with "
-"OpenERP so that new applicants are created automatically in OpenERP for the "
-"followup of the recruitment process. Attachments are automatically stored in "
-"the DMS of OpenERP so that you get an indexation of all the CVs received."
-msgstr ""
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,name:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid "Create Applicants from Email Account"
-msgstr ""
diff --git a/addons/fetchmail_hr_recruitment/i18n/sr@latin.po b/addons/fetchmail_hr_recruitment/i18n/sr@latin.po
deleted file mode 100644
index e5a9512224f..00000000000
--- a/addons/fetchmail_hr_recruitment/i18n/sr@latin.po
+++ /dev/null
@@ -1,36 +0,0 @@
-# Serbian Latin translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-03-19 11:54+0000\n"
-"Last-Translator: Milan Milosevic \n"
-"Language-Team: Serbian Latin \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-03-20 04:56+0000\n"
-"X-Generator: Launchpad (build 14969)\n"
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,help:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid ""
-"You can synchronize the job email account (e.g. job@yourcompany.com) with "
-"OpenERP so that new applicants are created automatically in OpenERP for the "
-"followup of the recruitment process. Attachments are automatically stored in "
-"the DMS of OpenERP so that you get an indexation of all the CVs received."
-msgstr ""
-"Možete sinhronizovati svoj radni email nalog (npr:job@yourcompany.com) sa "
-"OpenERP-om, tako da se novi kandidati prave automatski u OpenERP-u za "
-"nstavak procesa zapošljavanja. Vezane stavke su automatski sačuvane u DMS-u "
-"OpenERP-a, tako da imate indeksaciju svih primljenih CV-a."
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,name:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid "Create Applicants from Email Account"
-msgstr "Napravi kandidate preko email naloga"
diff --git a/addons/fetchmail_hr_recruitment/i18n/zh_CN.po b/addons/fetchmail_hr_recruitment/i18n/zh_CN.po
deleted file mode 100644
index 0e414039a2e..00000000000
--- a/addons/fetchmail_hr_recruitment/i18n/zh_CN.po
+++ /dev/null
@@ -1,35 +0,0 @@
-# Chinese (Simplified) translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-16 12:51+0000\n"
-"Last-Translator: Jeff Wang \n"
-"Language-Team: Chinese (Simplified) \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-17 05:01+0000\n"
-"X-Generator: Launchpad (build 14814)\n"
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,help:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid ""
-"You can synchronize the job email account (e.g. job@yourcompany.com) with "
-"OpenERP so that new applicants are created automatically in OpenERP for the "
-"followup of the recruitment process. Attachments are automatically stored in "
-"the DMS of OpenERP so that you get an indexation of all the CVs received."
-msgstr ""
-"你可以让这个招聘邮件帐号(例如 "
-"job@yourcompany.com)与OpenERP同步。这样用于追踪后续流程的新应聘者就会在OpenERP中自动创建。附件会自动存在文档管理系统中,"
-"这样你就有了所有收到过的简历的一个索引。"
-
-#. module: fetchmail_hr_recruitment
-#: model:ir.actions.act_window,name:fetchmail_hr_recruitment.action_link_applicant_to_email_account
-msgid "Create Applicants from Email Account"
-msgstr "从邮件帐号创建应聘者"
diff --git a/addons/fetchmail_hr_recruitment/installer.xml b/addons/fetchmail_hr_recruitment/installer.xml
deleted file mode 100644
index ae2eb3de3ee..00000000000
--- a/addons/fetchmail_hr_recruitment/installer.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- Create Applicants from Email Account
- ir.actions.act_window
- fetchmail.server
- form
- tree,form
-
- You can synchronize the job email account (e.g. job@yourcompany.com) with OpenERP so that new applicants are created automatically in OpenERP for the followup of the recruitment process. Attachments are automatically stored in the DMS of OpenERP so that you get an indexation of all the CVs received.
-
-
-
-
-
-
-
-
diff --git a/addons/fetchmail_project_issue/__init__.py b/addons/fetchmail_project_issue/__init__.py
deleted file mode 100644
index b5b36afb7e9..00000000000
--- a/addons/fetchmail_project_issue/__init__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#-*- coding:utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
-#
-# 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 .
-#
-##############################################################################
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/fetchmail_project_issue/__openerp__.py b/addons/fetchmail_project_issue/__openerp__.py
deleted file mode 100644
index 4d50a87bac8..00000000000
--- a/addons/fetchmail_project_issue/__openerp__.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#-*- coding:utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
-#
-# 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" : "eMail Gateway for Project Issues",
- "version" : "1.0",
- "depends" : ["fetchmail", "project_issue"],
- "author" : "OpenERP SA",
- "category": "Hidden",
- "description": """
- """,
- 'website': 'http://www.openerp.com',
- 'init_xml': [],
- 'update_xml': [
- "installer.xml",
- ],
- 'demo_xml': [
- ],
- 'installable': True,
- 'auto_install': True,
-}
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/fetchmail_project_issue/i18n/de.po b/addons/fetchmail_project_issue/i18n/de.po
deleted file mode 100644
index 7f11791d711..00000000000
--- a/addons/fetchmail_project_issue/i18n/de.po
+++ /dev/null
@@ -1,35 +0,0 @@
-# German translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-09 15:15+0000\n"
-"Last-Translator: Ferdinand @ Camptocamp \n"
-"Language-Team: German \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-10 04:50+0000\n"
-"X-Generator: Launchpad (build 14771)\n"
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,name:fetchmail_project_issue.action_link_issue_to_email_account
-msgid "Create Issues from Email Account"
-msgstr "Erzeuge Fälle von Email Konto"
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,help:fetchmail_project_issue.action_link_issue_to_email_account
-msgid ""
-"You can connect your email account with issues in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create "
-"an issue. The whole communication will be attached to the issue "
-"automatically."
-msgstr ""
-"Sie können Fälle von diesem Konto mit OpenERP verbinden. Ein Email das an "
-"dieses Konto gesendet wird, erzeugt dann automatische einen Fall in "
-"OpenERP. Die gesamte Kommunikation wird dann diese Fall zugeordnet."
diff --git a/addons/fetchmail_project_issue/i18n/es_CR.po b/addons/fetchmail_project_issue/i18n/es_CR.po
deleted file mode 100644
index 0a5273af5d3..00000000000
--- a/addons/fetchmail_project_issue/i18n/es_CR.po
+++ /dev/null
@@ -1,36 +0,0 @@
-# Spanish (Costa Rica) translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-15 22:03+0000\n"
-"Last-Translator: Freddy Gonzalez \n"
-"Language-Team: Spanish (Costa Rica) \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-16 05:07+0000\n"
-"X-Generator: Launchpad (build 14781)\n"
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,name:fetchmail_project_issue.action_link_issue_to_email_account
-msgid "Create Issues from Email Account"
-msgstr "Crear problemas de la cuenta de correo electrónico"
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,help:fetchmail_project_issue.action_link_issue_to_email_account
-msgid ""
-"You can connect your email account with issues in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create "
-"an issue. The whole communication will be attached to the issue "
-"automatically."
-msgstr ""
-"Puedes conectar tu cuenta de correo electrónico con asuntos en OpenERP. Un "
-"nuevo correo enviado a esta cuenta (por ejemplo: support@mycompany.com) "
-"creará automáticamente un problema. Toda la comunicación se concede a la "
-"cuestión de forma automática."
diff --git a/addons/fetchmail_project_issue/i18n/fetchmail_project_issue.pot b/addons/fetchmail_project_issue/i18n/fetchmail_project_issue.pot
deleted file mode 100644
index 1b0f11ca105..00000000000
--- a/addons/fetchmail_project_issue/i18n/fetchmail_project_issue.pot
+++ /dev/null
@@ -1,27 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * fetchmail_project_issue
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.1rc1\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-08 00:36+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: fetchmail_project_issue
-#: model:ir.actions.act_window,name:fetchmail_project_issue.action_link_issue_to_email_account
-msgid "Create Issues from Email Account"
-msgstr ""
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,help:fetchmail_project_issue.action_link_issue_to_email_account
-msgid "You can connect your email account with issues in OpenERP. A new email sent to this account (example: support@mycompany.com) will automatically create an issue. The whole communication will be attached to the issue automatically."
-msgstr ""
-
diff --git a/addons/fetchmail_project_issue/i18n/fr.po b/addons/fetchmail_project_issue/i18n/fr.po
deleted file mode 100644
index 3738cef0f2a..00000000000
--- a/addons/fetchmail_project_issue/i18n/fr.po
+++ /dev/null
@@ -1,32 +0,0 @@
-# French translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-24 22:39+0000\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: French \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-25 05:13+0000\n"
-"X-Generator: Launchpad (build 14860)\n"
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,name:fetchmail_project_issue.action_link_issue_to_email_account
-msgid "Create Issues from Email Account"
-msgstr ""
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,help:fetchmail_project_issue.action_link_issue_to_email_account
-msgid ""
-"You can connect your email account with issues in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create "
-"an issue. The whole communication will be attached to the issue "
-"automatically."
-msgstr ""
diff --git a/addons/fetchmail_project_issue/i18n/ja.po b/addons/fetchmail_project_issue/i18n/ja.po
deleted file mode 100644
index 2f8d5710325..00000000000
--- a/addons/fetchmail_project_issue/i18n/ja.po
+++ /dev/null
@@ -1,34 +0,0 @@
-# Japanese translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-04-01 05:57+0000\n"
-"Last-Translator: Masaki Yamaya \n"
-"Language-Team: Japanese \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-04-02 04:37+0000\n"
-"X-Generator: Launchpad (build 15032)\n"
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,name:fetchmail_project_issue.action_link_issue_to_email_account
-msgid "Create Issues from Email Account"
-msgstr "Eメールアカウントから課題を作成"
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,help:fetchmail_project_issue.action_link_issue_to_email_account
-msgid ""
-"You can connect your email account with issues in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create "
-"an issue. The whole communication will be attached to the issue "
-"automatically."
-msgstr ""
-"あなたのEメールアカウントを課題に結び付けることができます。このアカウントへ送られて来る新しいEメールは自動的に課題を作成します。全てのコミュニケーション"
-"は自動的にこの課題に帰属されます。"
diff --git a/addons/fetchmail_project_issue/i18n/nl.po b/addons/fetchmail_project_issue/i18n/nl.po
deleted file mode 100644
index df0eacc3177..00000000000
--- a/addons/fetchmail_project_issue/i18n/nl.po
+++ /dev/null
@@ -1,36 +0,0 @@
-# Dutch translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-13 14:21+0000\n"
-"Last-Translator: Erwin \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: 2012-02-14 05:46+0000\n"
-"X-Generator: Launchpad (build 14781)\n"
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,name:fetchmail_project_issue.action_link_issue_to_email_account
-msgid "Create Issues from Email Account"
-msgstr "Maak vraagstukken van een e-mail"
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,help:fetchmail_project_issue.action_link_issue_to_email_account
-msgid ""
-"You can connect your email account with issues in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create "
-"an issue. The whole communication will be attached to the issue "
-"automatically."
-msgstr ""
-"Het is mogelijk het vraagstukken e-mail account (bijvoorbeeld: "
-"vragen@mijnbedrijf.nl) te synchroniseren met OpenERP zo dat nieuwe "
-"vraagstukken automatisch worden aangemaakt in OpenERP. De gehele "
-"communicatie wordt als bijlage toegevoegd aan het vraagstuk."
diff --git a/addons/fetchmail_project_issue/i18n/sr@latin.po b/addons/fetchmail_project_issue/i18n/sr@latin.po
deleted file mode 100644
index 0a7d16b006a..00000000000
--- a/addons/fetchmail_project_issue/i18n/sr@latin.po
+++ /dev/null
@@ -1,35 +0,0 @@
-# Serbian Latin translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-03-19 11:50+0000\n"
-"Last-Translator: Milan Milosevic \n"
-"Language-Team: Serbian Latin \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-03-20 04:56+0000\n"
-"X-Generator: Launchpad (build 14969)\n"
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,name:fetchmail_project_issue.action_link_issue_to_email_account
-msgid "Create Issues from Email Account"
-msgstr "Napravi izdanja preko email naloga"
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,help:fetchmail_project_issue.action_link_issue_to_email_account
-msgid ""
-"You can connect your email account with issues in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create "
-"an issue. The whole communication will be attached to the issue "
-"automatically."
-msgstr ""
-"Možete povezati svoj nalog sa izdanjima u OpenERP-u. Novi email biće poslat "
-"na taj nalog (npr:support@mycompany.com), i on će automatski napraviti "
-"izdanje. Celokupna komunikacija biće povezana s izdanjem automatski."
diff --git a/addons/fetchmail_project_issue/i18n/zh_CN.po b/addons/fetchmail_project_issue/i18n/zh_CN.po
deleted file mode 100644
index c705ff0c111..00000000000
--- a/addons/fetchmail_project_issue/i18n/zh_CN.po
+++ /dev/null
@@ -1,34 +0,0 @@
-# Chinese (Simplified) translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-16 04:36+0000\n"
-"Last-Translator: Jeff Wang \n"
-"Language-Team: Chinese (Simplified) \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-17 05:01+0000\n"
-"X-Generator: Launchpad (build 14814)\n"
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,name:fetchmail_project_issue.action_link_issue_to_email_account
-msgid "Create Issues from Email Account"
-msgstr "从邮件账号创建问题"
-
-#. module: fetchmail_project_issue
-#: model:ir.actions.act_window,help:fetchmail_project_issue.action_link_issue_to_email_account
-msgid ""
-"You can connect your email account with issues in OpenERP. A new email sent "
-"to this account (example: support@mycompany.com) will automatically create "
-"an issue. The whole communication will be attached to the issue "
-"automatically."
-msgstr ""
-"你可以把你的邮件帐号与OpenERP中的问题关联。发送到这个帐号(例如:support@mycompany.com)的新邮件会自动创建一个问题。整个沟通过"
-"程会自动附加在这个问题上。"
diff --git a/addons/fetchmail_project_issue/installer.xml b/addons/fetchmail_project_issue/installer.xml
deleted file mode 100644
index 75554b2de29..00000000000
--- a/addons/fetchmail_project_issue/installer.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- Create Issues from Email Account
- ir.actions.act_window
- fetchmail.server
- form
- tree,form
-
- You can connect your email account with issues in OpenERP. A new email sent to this account (example: support@mycompany.com) will automatically create an issue. The whole communication will be attached to the issue automatically.
-
-
-
-
-
-
-
-
diff --git a/addons/google_base_account/i18n/ar.po b/addons/google_base_account/i18n/ar.po
new file mode 100644
index 00000000000..df74483aa9c
--- /dev/null
+++ b/addons/google_base_account/i18n/ar.po
@@ -0,0 +1,120 @@
+# Arabic translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-06 00:46+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Arabic \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: google_base_account
+#: field:res.users,gmail_user:0
+msgid "Username"
+msgstr "اسم المستخدم"
+
+#. module: google_base_account
+#: model:ir.actions.act_window,name:google_base_account.act_google_login_form
+msgid "Google Login"
+msgstr "حساب جوجل"
+
+#. module: google_base_account
+#: code:addons/google_base_account/wizard/google_login.py:29
+#, python-format
+msgid "Google Contacts Import Error!"
+msgstr "خطأ في إستيراد جهات الإتصال من جوجل!"
+
+#. module: google_base_account
+#: view:res.users:0
+msgid " Synchronization "
+msgstr " تزامن البيانات "
+
+#. module: google_base_account
+#: sql_constraint:res.users:0
+msgid "You can not have two users with the same login !"
+msgstr "لا يمكن ان يكون هناك مستخدمان بنفس اسم الدخول!"
+
+#. module: google_base_account
+#: code:addons/google_base_account/wizard/google_login.py:75
+#, python-format
+msgid "Error"
+msgstr "خطأ"
+
+#. module: google_base_account
+#: view:google.login:0
+msgid "Google login"
+msgstr "دخول بجوجل"
+
+#. module: google_base_account
+#: model:ir.model,name:google_base_account.model_res_users
+msgid "res.users"
+msgstr "res.users"
+
+#. module: google_base_account
+#: field:google.login,password:0
+msgid "Google Password"
+msgstr "كلمة مرور جوجل"
+
+#. module: google_base_account
+#: view:google.login:0
+msgid "_Cancel"
+msgstr "إل_غاء"
+
+#. module: google_base_account
+#: view:res.users:0
+msgid "Google Account"
+msgstr "حساب جوجل"
+
+#. module: google_base_account
+#: field:google.login,user:0
+msgid "Google Username"
+msgstr "اسم مستخدم جوجل"
+
+#. module: google_base_account
+#: code:addons/google_base_account/wizard/google_login.py:29
+#, python-format
+msgid ""
+"Please install gdata-python-client from http://code.google.com/p/gdata-"
+"python-client/downloads/list"
+msgstr ""
+
+#. module: google_base_account
+#: model:ir.model,name:google_base_account.model_google_login
+msgid "Google Contact"
+msgstr "جهات إتصال جوجل"
+
+#. module: google_base_account
+#: view:google.login:0
+msgid "_Login"
+msgstr "تسج_يل دخول"
+
+#. module: google_base_account
+#: constraint:res.users:0
+msgid "The chosen company is not in the allowed companies for this user"
+msgstr ""
+"الشركة المختارة غير مدرجة ضمن قائمة الشركات المسموح بها لهذا المستخدم"
+
+#. module: google_base_account
+#: field:res.users,gmail_password:0
+msgid "Password"
+msgstr "كلمة المرور"
+
+#. module: google_base_account
+#: code:addons/google_base_account/wizard/google_login.py:75
+#, python-format
+msgid "Authentication fail check the user and password !"
+msgstr ""
+
+#. module: google_base_account
+#: view:google.login:0
+msgid "ex: user@gmail.com"
+msgstr "مثال: user@gmail.com"
diff --git a/addons/google_base_account/i18n/sr@latin.po b/addons/google_base_account/i18n/sr@latin.po
new file mode 100644
index 00000000000..e5530045b7d
--- /dev/null
+++ b/addons/google_base_account/i18n/sr@latin.po
@@ -0,0 +1,121 @@
+# Serbian Latin translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-05 15:32+0000\n"
+"Last-Translator: Milan Milosevic \n"
+"Language-Team: Serbian Latin \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-06 04:37+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: google_base_account
+#: field:res.users,gmail_user:0
+msgid "Username"
+msgstr "Korisničko ime"
+
+#. module: google_base_account
+#: model:ir.actions.act_window,name:google_base_account.act_google_login_form
+msgid "Google Login"
+msgstr "Google prijava"
+
+#. module: google_base_account
+#: code:addons/google_base_account/wizard/google_login.py:29
+#, python-format
+msgid "Google Contacts Import Error!"
+msgstr "Greška u uvozu kontakata s Google-a"
+
+#. module: google_base_account
+#: view:res.users:0
+msgid " Synchronization "
+msgstr " Sinhronizacija "
+
+#. module: google_base_account
+#: sql_constraint:res.users:0
+msgid "You can not have two users with the same login !"
+msgstr "Ne možete imati dva korisnika sa istom prijavom!"
+
+#. module: google_base_account
+#: code:addons/google_base_account/wizard/google_login.py:75
+#, python-format
+msgid "Error"
+msgstr "Greška"
+
+#. module: google_base_account
+#: view:google.login:0
+msgid "Google login"
+msgstr "Google prijava"
+
+#. module: google_base_account
+#: model:ir.model,name:google_base_account.model_res_users
+msgid "res.users"
+msgstr "res.users"
+
+#. module: google_base_account
+#: field:google.login,password:0
+msgid "Google Password"
+msgstr "Google lozinka"
+
+#. module: google_base_account
+#: view:google.login:0
+msgid "_Cancel"
+msgstr "_Otkaži"
+
+#. module: google_base_account
+#: view:res.users:0
+msgid "Google Account"
+msgstr "Google nalog"
+
+#. module: google_base_account
+#: field:google.login,user:0
+msgid "Google Username"
+msgstr "Google korisničko ime"
+
+#. module: google_base_account
+#: code:addons/google_base_account/wizard/google_login.py:29
+#, python-format
+msgid ""
+"Please install gdata-python-client from http://code.google.com/p/gdata-"
+"python-client/downloads/list"
+msgstr ""
+"Molimo instalirajte gdata-python-client from http://code.google.com/p/gdata-"
+"python-client/downloads/list"
+
+#. module: google_base_account
+#: model:ir.model,name:google_base_account.model_google_login
+msgid "Google Contact"
+msgstr "Google kontakt"
+
+#. module: google_base_account
+#: view:google.login:0
+msgid "_Login"
+msgstr "_Prijava"
+
+#. module: google_base_account
+#: constraint:res.users:0
+msgid "The chosen company is not in the allowed companies for this user"
+msgstr "Odabrano preduzeće nije u dozvoljenim preduzećima za ovog korisnioka"
+
+#. module: google_base_account
+#: field:res.users,gmail_password:0
+msgid "Password"
+msgstr "Lozinka"
+
+#. module: google_base_account
+#: code:addons/google_base_account/wizard/google_login.py:75
+#, python-format
+msgid "Authentication fail check the user and password !"
+msgstr "Neuspešna autentifikacija, proverite korisnika i lozinku !"
+
+#. module: google_base_account
+#: view:google.login:0
+msgid "ex: user@gmail.com"
+msgstr "pr: user@gmail.com"
diff --git a/addons/hr/__init__.py b/addons/hr/__init__.py
index e2ff754ad35..1ed86ab58bb 100644
--- a/addons/hr/__init__.py
+++ b/addons/hr/__init__.py
@@ -24,5 +24,6 @@ import hr
import report
import wizard
+import res_config
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr/__openerp__.py b/addons/hr/__openerp__.py
index 35afdacae62..482eaaafda0 100644
--- a/addons/hr/__openerp__.py
+++ b/addons/hr/__openerp__.py
@@ -50,6 +50,7 @@ You can manage:
'hr_installer.xml',
'hr_data.xml',
'hr_board.xml',
+ 'res_config_view.xml',
],
'demo_xml': [
'hr_demo.xml',
diff --git a/addons/hr/hr_demo.xml b/addons/hr/hr_demo.xml
index 6c69f7a34ff..6533748bc5e 100644
--- a/addons/hr/hr_demo.xml
+++ b/addons/hr/hr_demo.xml
@@ -189,6 +189,7 @@
Minh Tran
+ Grand-Rosière
@@ -202,6 +203,7 @@
Nicolas Vanhoren
+ Grand-Rosière
@@ -214,6 +216,7 @@
Stéphane Wirtel
+ Grand-Rosière
@@ -226,6 +229,7 @@
Christophe Simonis
+ Grand-Rosière
@@ -238,6 +242,7 @@
Quentin De Paoli
+ Grand-Rosière
@@ -249,6 +254,7 @@
Fabien Meghazi
+ Grand-Rosière
@@ -260,6 +266,7 @@
Francois Pietquin
+ Grand-Rosière
@@ -272,6 +279,7 @@
Julien Thewys
+ Grand-Rosière
@@ -284,6 +292,7 @@
Nicoleta Gherlea
+ Auderghem
@@ -296,6 +305,7 @@
Valérie Descamps
+ Grand-Rosière
diff --git a/addons/hr/hr_installer.xml b/addons/hr/hr_installer.xml
index 7ba3b193cf1..1cf7efe49ba 100644
--- a/addons/hr/hr_installer.xml
+++ b/addons/hr/hr_installer.xml
@@ -1,28 +1,11 @@
-
HR Management5
-
-
- Create your Employees
- ir.actions.act_window
- hr.employee
- form
- tree,form
-
- Create employees form and link them to an OpenERP user if you want them to access this instance. Categories can be set on employees to perform massive operations on all the employees of the same category, i.e. allocating holidays.
-
-
-
-
-
-
-
Create Your Departmentsir.actions.act_window
@@ -33,11 +16,5 @@
Your departments structure is used to manage all documents related to employees by departments: expenses and timesheet validation, leaves management, recruitments, etc.
-
-
-
- 3
-
-
diff --git a/addons/hr/i18n/cs.po b/addons/hr/i18n/cs.po
index 3343d25f922..51393e74e59 100644
--- a/addons/hr/i18n/cs.po
+++ b/addons/hr/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
-"PO-Revision-Date: 2011-09-16 16:27+0000\n"
+"PO-Revision-Date: 2012-04-06 06:28+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:42+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: hr
@@ -57,7 +57,7 @@ msgstr "Seskupit podle..."
#. module: hr
#: model:ir.actions.act_window,name:hr.view_department_form_installer
msgid "Create Your Departments"
-msgstr ""
+msgstr "Vytvořit vaše oddělení"
#. module: hr
#: model:ir.actions.act_window,help:hr.action_hr_job
@@ -109,7 +109,7 @@ msgstr "Očekáván v náboru"
#. module: hr
#: model:ir.actions.todo.category,name:hr.category_hr_management_config
msgid "HR Management"
-msgstr ""
+msgstr "Správa lidských zdrojů"
#. module: hr
#: help:hr.employee,partner_id:0
@@ -162,7 +162,7 @@ msgstr ""
#. module: hr
#: field:hr.employee,color:0
msgid "Color Index"
-msgstr ""
+msgstr "Index barvy"
#. module: hr
#: model:process.transition,note:hr.process_transition_employeeuser0
@@ -191,12 +191,12 @@ msgstr "Žena"
#. module: hr
#: help:hr.job,expected_employees:0
msgid "Required number of employees in total for that job."
-msgstr ""
+msgstr "Celkový požadovaný počet zaměstnanců pro úlohu."
#. module: hr
#: model:ir.ui.menu,name:hr.menu_open_view_attendance_reason_new_config
msgid "Attendance"
-msgstr ""
+msgstr "Docházka"
#. module: hr
#: view:hr.employee:0
@@ -349,7 +349,7 @@ msgstr "hr.department"
#. module: hr
#: model:ir.actions.act_window,name:hr.action_create_hr_employee_installer
msgid "Create your Employees"
-msgstr ""
+msgstr "Vytvořit vaše zaměstnance"
#. module: hr
#: field:hr.employee.category,name:0
@@ -431,7 +431,7 @@ msgstr "neznámé"
#. module: hr
#: help:hr.job,no_of_employee:0
msgid "Number of employees with that job."
-msgstr ""
+msgstr "Počet zaměstnanců v této úlože"
#. module: hr
#: field:hr.employee,ssnid:0
diff --git a/addons/hr/res_config.py b/addons/hr/res_config.py
new file mode 100644
index 00000000000..5f92f2db5a6
--- /dev/null
+++ b/addons/hr/res_config.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. ().
+#
+# 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
+
+class hr_config_settings(osv.osv_memory):
+ _name = 'hr.config.settings'
+ _inherit = 'res.config.settings'
+
+ _columns = {
+ 'module_hr_timesheet_sheet': fields.boolean('Manage Timesheets and Attendances',
+ help ="""This installs the module hr_timesheet_sheet."""),
+ 'module_hr_holidays': fields.boolean('Manage Holidays',
+ help ="""This installs the module hr_holidays."""),
+ 'module_hr_expense': fields.boolean('Manage Employees Expenses',
+ help ="""This installs the module hr_expense."""),
+ 'module_hr_recruitment': fields.boolean('Manage Recruitment Process',
+ help ="""This installs the module hr_recruitment."""),
+ 'module_hr_contract': fields.boolean('Manage Employees Contracts',
+ help ="""This installs the module hr_contract."""),
+ 'module_hr_evaluation': fields.boolean('Manage Appraisals Process',
+ help ="""This installs the module hr_evaluation."""),
+ }
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr/res_config_view.xml b/addons/hr/res_config_view.xml
new file mode 100644
index 00000000000..f195cb1894a
--- /dev/null
+++ b/addons/hr/res_config_view.xml
@@ -0,0 +1,74 @@
+
+
+
+
+ Payroll
+ ir.module.module
+ kanban,tree,form
+ [('state','=','uninstalled'), ('name','ilike','payroll'), ('name','!=','hr_payroll_account')]
+
+
+
+ hr settings
+ hr.config.settings
+ form
+
+
+
+
+
+
+ Configure Human Resources Application
+ hr.config.settings
+
+ form
+ inline
+
+
+
+
+
+
diff --git a/addons/hr/security/hr_security.xml b/addons/hr/security/hr_security.xml
index e8d1edd3712..0f72d37f32f 100644
--- a/addons/hr/security/hr_security.xml
+++ b/addons/hr/security/hr_security.xml
@@ -11,6 +11,7 @@
HR Manager
+ Department multi company rule
diff --git a/addons/hr_attendance/i18n/cs.po b/addons/hr_attendance/i18n/cs.po
index 345ae399709..5467556848e 100644
--- a/addons/hr_attendance/i18n/cs.po
+++ b/addons/hr_attendance/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2011-09-16 09:10+0000\n"
+"PO-Revision-Date: 2012-04-06 04:58+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:45+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: czech\n"
#. module: hr_attendance
@@ -197,7 +197,7 @@ msgstr "Vyhledávání v docházce"
#. module: hr_attendance
#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_week
msgid "Attendances By Week"
-msgstr ""
+msgstr "Docházka podle týdne"
#. module: hr_attendance
#: constraint:hr.attendance:0
@@ -263,7 +263,7 @@ msgstr "Měsíc"
#. module: hr_attendance
#: field:hr.action.reason,action_type:0
msgid "Action Type"
-msgstr ""
+msgstr "Typ akce"
#. module: hr_attendance
#: report:report.hr.timesheet.attendance.error:0
@@ -275,7 +275,7 @@ msgstr ""
#. module: hr_attendance
#: view:hr.attendance:0
msgid "My Attendance"
-msgstr ""
+msgstr "Moje docházka"
#. module: hr_attendance
#: help:hr.attendance,action_desc:0
@@ -312,7 +312,7 @@ msgstr "hr.sign.out.ask"
#. module: hr_attendance
#: view:hr.attendance.week:0
msgid "Print Attendance Report Weekly"
-msgstr ""
+msgstr "Tisknout týdenní výkaz docházky"
#. module: hr_attendance
#: selection:hr.attendance.month,month:0
diff --git a/addons/hr_contract/i18n/cs.po b/addons/hr_contract/i18n/cs.po
index a067e7fc44e..12c9fafb3f2 100644
--- a/addons/hr_contract/i18n/cs.po
+++ b/addons/hr_contract/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: openeobject-addons\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2011-09-20 07:48+0000\n"
+"PO-Revision-Date: 2012-04-06 05:09+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:38+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: hr_contract
@@ -25,7 +25,7 @@ msgstr "Mzda"
#. module: hr_contract
#: view:hr.contract:0
msgid "Information"
-msgstr ""
+msgstr "Informace"
#. module: hr_contract
#: view:hr.contract:0
@@ -87,7 +87,7 @@ msgstr "Hledat smlouvu"
#. module: hr_contract
#: view:hr.contract:0
msgid "Contracts in progress"
-msgstr ""
+msgstr "Smlouvy v běhu"
#. module: hr_contract
#: field:hr.employee,vehicle_distance:0
@@ -111,7 +111,7 @@ msgstr "Osobní informace"
#. module: hr_contract
#: view:hr.contract:0
msgid "Contracts whose end date already passed"
-msgstr ""
+msgstr "Smlouvy jejichž datum ukončení již uplynul"
#. module: hr_contract
#: help:hr.employee,contract_id:0
@@ -163,7 +163,7 @@ msgstr "Datum ukončení"
#. module: hr_contract
#: help:hr.contract,wage:0
msgid "Basic Salary of the employee"
-msgstr ""
+msgstr "Základní plat zaměstnance"
#. module: hr_contract
#: field:hr.contract,name:0
@@ -184,7 +184,7 @@ msgstr "Poznámky"
#. module: hr_contract
#: field:hr.contract,permit_no:0
msgid "Work Permit No"
-msgstr ""
+msgstr "Č. pracovního povolení"
#. module: hr_contract
#: view:hr.contract:0
@@ -217,7 +217,7 @@ msgstr "Pracovní informace"
#. module: hr_contract
#: field:hr.contract,visa_expire:0
msgid "Visa Expire Date"
-msgstr ""
+msgstr "Datum vypršení víza"
#. module: hr_contract
#: field:hr.contract,job_id:0
@@ -242,7 +242,7 @@ msgstr "Chyba! Počáteční datum smlouvy musí být nižší než konečné da
#. module: hr_contract
#: field:hr.contract,visa_no:0
msgid "Visa No"
-msgstr ""
+msgstr "Č. víza"
#. module: hr_contract
#: field:hr.employee,place_of_birth:0
diff --git a/addons/hr_evaluation/hr_evaluation_installer.xml b/addons/hr_evaluation/hr_evaluation_installer.xml
index 10e7773bc62..c8ac9050368 100644
--- a/addons/hr_evaluation/hr_evaluation_installer.xml
+++ b/addons/hr_evaluation/hr_evaluation_installer.xml
@@ -10,9 +10,21 @@
You can define appraisal plans (ex: first interview after 6 months, then every year). Then, each employee can be linked to an appraisal plan so that OpenERP can automatically generate interview requests to managers and/or subordinates.
-
-
-
+
+
+ hr settings for evaluations
+ hr.config.settings
+ form
+
+
+
+
+
+
+
+
+
diff --git a/addons/hr_expense/hr_expense_installer_view.xml b/addons/hr_expense/hr_expense_installer_view.xml
index bdb5fdedcb4..aa9b551df6c 100644
--- a/addons/hr_expense/hr_expense_installer_view.xml
+++ b/addons/hr_expense/hr_expense_installer_view.xml
@@ -27,10 +27,21 @@
Define one product for each expense type allowed for an employee (travel by car, hostel, restaurant, etc). If you reimburse the employees at a fixed rate, set a cost and a unit of measure on the product. If you reimburse based on real costs, set the cost at 0.00. The user will set the real price when recording his expense sheet.
-
-
-
- 3
-
+
+
+ hr settings for expenses
+ hr.config.settings
+ form
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py
index 3bb7a8e4982..e0bab685a4b 100644
--- a/addons/hr_holidays/hr_holidays.py
+++ b/addons/hr_holidays/hr_holidays.py
@@ -93,6 +93,7 @@ class hr_holidays(osv.osv):
_name = "hr.holidays"
_description = "Leave"
_order = "type desc, date_from asc"
+ _inherit = ['ir.needaction_mixin', 'mail.thread']
def _employee_get(self, cr, uid, context=None):
ids = self.pool.get('hr.employee').search(cr, uid, [('user_id', '=', uid)], context=context)
@@ -150,7 +151,12 @@ class hr_holidays(osv.osv):
('date_check2', "CHECK ( (type='add') OR (date_from <= date_to))", "The start date must be before the end date !"),
('date_check', "CHECK ( number_of_days_temp >= 0 )", "The number of days must be greater than 0 !"),
]
-
+
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(hr_holidays, self).create(cr, uid, vals, context=context)
+ self.create_notificate(cr, uid, [obj_id], context=context)
+ return obj_id
+
def _create_resource_leave(self, cr, uid, leaves, context=None):
'''This method will create entry in resource calendar leave object at the time of holidays validated '''
obj_res_leave = self.pool.get('resource.calendar.leaves')
@@ -250,6 +256,7 @@ class hr_holidays(osv.osv):
obj_emp = self.pool.get('hr.employee')
ids2 = obj_emp.search(cr, uid, [('user_id', '=', uid)])
manager = ids2 and ids2[0] or False
+ self.holidays_validate_notificate(cr, uid, ids, context=context)
return self.write(cr, uid, ids, {'state':'validate1', 'manager_id': manager})
def holidays_validate2(self, cr, uid, ids, context=None):
@@ -301,11 +308,13 @@ class hr_holidays(osv.osv):
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'validate', cr)
wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'second_validate', cr)
if holiday_ids:
+ self.holidays_valid2_notificate(self, cr, uid, [holiday_ids], context=context)
self.write(cr, uid, holiday_ids, {'manager_id2': manager})
return True
def holidays_confirm(self, cr, uid, ids, context=None):
self.check_holidays(cr, uid, ids, context=context)
+ self.holidays_confirm_notificate(cr, uid, ids, context=context)
return self.write(cr, uid, ids, {'state':'confirm'})
def holidays_refuse(self, cr, uid, ids, approval, context=None):
@@ -316,6 +325,7 @@ class hr_holidays(osv.osv):
self.write(cr, uid, ids, {'state': 'refuse', 'manager_id': manager})
else:
self.write(cr, uid, ids, {'state': 'refuse', 'manager_id2': manager})
+ self.holidays_refuse_notificate(cr, uid, ids, approval, context=context)
self.holidays_cancel(cr, uid, ids, context=context)
return True
@@ -343,6 +353,69 @@ class hr_holidays(osv.osv):
if leaves_rest < record.number_of_days_temp:
raise osv.except_osv(_('Warning!'),_('You cannot validate leaves for employee %s: too few remaining days (%s).') % (record.employee_id.name, leaves_rest))
return True
+
+ # -----------------------------
+ # OpenChatter and notifications
+ # -----------------------------
+
+ def get_needaction_user_ids(self, cr, uid, ids, context=None):
+ result = dict.fromkeys(ids, [])
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.state == 'confirm' and obj.employee_id.parent_id:
+ result[obj.id] = [obj.employee_id.parent_id.user_id.id]
+ elif obj.state == 'validate1':
+ # get group_hr_manager: everyone will be warned of second validation
+ res = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'group_hr_manager') or False
+ obj_id = res and res[1] or False
+ if obj_id:
+ hr_manager_group = self.pool.get('res.groups').read(cr, uid, [obj_id], ['users'], context=context)[0]
+ result[obj.id] = hr_manager_group['users']
+ return result
+
+ def message_get_subscribers(self, cr, uid, ids, context=None):
+ sub_ids = self.message_get_subscribers_ids(cr, uid, ids, context=context);
+ # add the employee and its manager if specified to the subscribed users
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.employee_id.parent_id:
+ sub_ids.append(obj.employee_id.parent_id.user_id.id)
+ return self.pool.get('res.users').read(cr, uid, sub_ids, context=context)
+
+ def create_notificate(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids, context=context):
+ self.message_append_note(cr, uid, ids, _('System notification'),
+ _("The %s request has been created and is waiting confirmation")
+ % ('leave' if obj.type == 'remove' else 'allocation',), type='notification', context=context)
+ return True
+
+ def holidays_confirm_notificate(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids):
+ self.message_append_note(cr, uid, [obj.id], _('System notification'),
+ _("The %s request has been confirmed and is waiting for validation by the manager.")
+ % ('leave' if obj.type == 'remove' else 'allocation',), type='notification')
+
+ def holidays_validate_notificate(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids):
+ if obj.holiday_status_id.double_validation:
+ self.message_append_note(cr, uid, [obj.id], _('System notification'),
+ _("The %s request has been validated. A second validation is necessary and is now pending.")
+ % ('leave' if obj.type == 'remove' else 'allocation',), type='notification', context=context)
+ else:
+ self.message_append_note(cr, uid, [obj.id], _('System notification'),
+ _("The %s request has been validated. The validation process is now over.")
+ % ('leave' if obj.type == 'remove' else 'allocation',), type='notification', context=context)
+
+ def holidays_valid2_notificate(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids):
+ self.message_append_note(cr, uid, [obj.id], _('System notification'),
+ _("The %s request has been double validated. The validation process is now over.")
+ % ('leave' if obj.type == 'remove' else 'allocation',), type='notification', context=context)
+
+ def holidays_refuse_notificate(self, cr, uid, ids, approval, context=None):
+ for obj in self.browse(cr, uid, ids):
+ self.message_append_note(cr, uid, [obj.id], _('System notification'),
+ _("The %s request has been refused. The validation process is now over.")
+ % ('leave' if obj.type == 'remove' else 'allocation',), type='notification', context=context)
+
hr_holidays()
class resource_calendar_leaves(osv.osv):
diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml
index e57da182f73..9cb7c4d6a32 100644
--- a/addons/hr_holidays/hr_holidays_view.xml
+++ b/addons/hr_holidays/hr_holidays_view.xml
@@ -95,6 +95,7 @@
+
@@ -137,6 +138,7 @@
+
@@ -483,10 +485,21 @@
You can assign remaining Legal Leaves for each employee, OpenERP will automatically create and validate allocation requests.
-
-
-
-
+
+
+ hr settings for holidays
+ hr.config.settings
+ form
+
+
+
+
+
+
+
+
+
diff --git a/addons/hr_payroll/__init__.py b/addons/hr_payroll/__init__.py
index bf7fc8a67e4..b19a4f587d0 100644
--- a/addons/hr_payroll/__init__.py
+++ b/addons/hr_payroll/__init__.py
@@ -24,4 +24,6 @@ import hr_payroll
import report
import wizard
+import res_config
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr_payroll/__openerp__.py b/addons/hr_payroll/__openerp__.py
index 5469b1fb423..560bec7093c 100644
--- a/addons/hr_payroll/__openerp__.py
+++ b/addons/hr_payroll/__openerp__.py
@@ -59,6 +59,7 @@ Generic Payroll system.
'hr_payroll_data.xml',
'security/ir.model.access.csv',
'wizard/hr_payroll_contribution_register_report.xml',
+ 'res_config_view.xml',
],
'test': [
'test/payslip.yml',
diff --git a/addons/fetchmail_hr_recruitment/__init__.py b/addons/hr_payroll/res_config.py
similarity index 56%
rename from addons/fetchmail_hr_recruitment/__init__.py
rename to addons/hr_payroll/res_config.py
index b5b36afb7e9..23ae902148b 100644
--- a/addons/fetchmail_hr_recruitment/__init__.py
+++ b/addons/hr_payroll/res_config.py
@@ -1,13 +1,13 @@
-#-*- coding:utf-8 -*-
+# -*- coding: utf-8 -*-
##############################################################################
#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. ().
#
# 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.
+# 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
@@ -19,4 +19,11 @@
#
##############################################################################
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+from osv import osv, fields
+
+class human_resources_configuration(osv.osv_memory):
+ _inherit = 'hr.config.settings'
+ _columns = {
+ 'module_hr_payroll_account': fields.boolean('Manage Account Payroll',
+ help ="""This installs the module hr_payroll_account."""),
+ }
diff --git a/addons/hr_payroll/res_config_view.xml b/addons/hr_payroll/res_config_view.xml
new file mode 100644
index 00000000000..f2d5886865d
--- /dev/null
+++ b/addons/hr_payroll/res_config_view.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ hr settings for payroll
+ hr.config.settings
+ form
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/hr_payroll_account/i18n/ja.po b/addons/hr_payroll_account/i18n/ja.po
new file mode 100644
index 00000000000..a7f75f49052
--- /dev/null
+++ b/addons/hr_payroll_account/i18n/ja.po
@@ -0,0 +1,140 @@
+# Japanese translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-08 06:04+0000\n"
+"Last-Translator: Masaki Yamaya \n"
+"Language-Team: Japanese \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-09 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: hr_payroll_account
+#: field:hr.payslip,move_id:0
+msgid "Accounting Entry"
+msgstr ""
+
+#. module: hr_payroll_account
+#: field:hr.salary.rule,account_tax_id:0
+msgid "Tax Code"
+msgstr "税金コード"
+
+#. module: hr_payroll_account
+#: field:hr.payslip,journal_id:0
+#: field:hr.payslip.run,journal_id:0
+msgid "Expense Journal"
+msgstr "経費仕訳"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:157
+#: code:addons/hr_payroll_account/hr_payroll_account.py:173
+#, python-format
+msgid "Adjustment Entry"
+msgstr "調整項目"
+
+#. module: hr_payroll_account
+#: field:hr.contract,analytic_account_id:0
+#: field:hr.salary.rule,analytic_account_id:0
+msgid "Analytic Account"
+msgstr "分析アカウント"
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_salary_rule
+msgid "hr.salary.rule"
+msgstr "hr.salary.rule"
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_payslip_run
+msgid "Payslip Batches"
+msgstr "給与明細書の束"
+
+#. module: hr_payroll_account
+#: field:hr.contract,journal_id:0
+msgid "Salary Journal"
+msgstr "給与仕訳"
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_payslip
+msgid "Pay Slip"
+msgstr "給与明細書"
+
+#. module: hr_payroll_account
+#: constraint:hr.payslip:0
+msgid "Payslip 'Date From' must be before 'Date To'."
+msgstr "給与明細書の「開始日付」は「終了日付」の前でなければいけません。"
+
+#. module: hr_payroll_account
+#: help:hr.payslip,period_id:0
+msgid "Keep empty to use the period of the validation(Payslip) date."
+msgstr "給与明細書の発効日の期間を使うために、空白にしておいてください。"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:171
+#, python-format
+msgid ""
+"The Expense Journal \"%s\" has not properly configured the Debit Account!"
+msgstr "経費仕訳 %s は、借方勘定科目を正しく設定していません。"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:155
+#, python-format
+msgid ""
+"The Expense Journal \"%s\" has not properly configured the Credit Account!"
+msgstr "経費仕訳 %s は与信アカウントを正しく設定してありません。"
+
+#. module: hr_payroll_account
+#: field:hr.salary.rule,account_debit:0
+msgid "Debit Account"
+msgstr "借方勘定科目"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:102
+#, python-format
+msgid "Payslip of %s"
+msgstr "%s の給与明細書"
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_contract
+msgid "Contract"
+msgstr "契約"
+
+#. module: hr_payroll_account
+#: constraint:hr.contract:0
+msgid "Error! contract start-date must be lower then contract end-date."
+msgstr "エラー。契約開始日は契約終了日の前でなければいけません。"
+
+#. module: hr_payroll_account
+#: field:hr.payslip,period_id:0
+msgid "Force Period"
+msgstr "強制期間"
+
+#. module: hr_payroll_account
+#: field:hr.salary.rule,account_credit:0
+msgid "Credit Account"
+msgstr "貸方勘定科目"
+
+#. module: hr_payroll_account
+#: model:ir.model,name:hr_payroll_account.model_hr_payslip_employees
+msgid "Generate payslips for all selected employees"
+msgstr "選択した全ての従業員の給与明細書を作成する。"
+
+#. module: hr_payroll_account
+#: code:addons/hr_payroll_account/hr_payroll_account.py:155
+#: code:addons/hr_payroll_account/hr_payroll_account.py:171
+#, python-format
+msgid "Configuration Error!"
+msgstr "設定エラー"
+
+#. module: hr_payroll_account
+#: view:hr.contract:0
+#: view:hr.salary.rule:0
+msgid "Accounting"
+msgstr "会計"
diff --git a/addons/hr_payroll_account/i18n/sr@latin.po b/addons/hr_payroll_account/i18n/sr@latin.po
index 033ab00bc14..7bf908d344c 100644
--- a/addons/hr_payroll_account/i18n/sr@latin.po
+++ b/addons/hr_payroll_account/i18n/sr@latin.po
@@ -8,136 +8,137 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2010-12-10 16:53+0000\n"
+"PO-Revision-Date: 2012-04-05 16:13+0000\n"
"Last-Translator: Milan Milosevic \n"
"Language-Team: Serbian latin \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:59+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-06 04:37+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: hr_payroll_account
#: field:hr.payslip,move_id:0
msgid "Accounting Entry"
-msgstr ""
+msgstr "Stavka naloga"
#. module: hr_payroll_account
#: field:hr.salary.rule,account_tax_id:0
msgid "Tax Code"
-msgstr ""
+msgstr "Šifra poreza"
#. module: hr_payroll_account
#: field:hr.payslip,journal_id:0
#: field:hr.payslip.run,journal_id:0
msgid "Expense Journal"
-msgstr ""
+msgstr "Dnevnik troškova"
#. module: hr_payroll_account
#: code:addons/hr_payroll_account/hr_payroll_account.py:157
#: code:addons/hr_payroll_account/hr_payroll_account.py:173
#, python-format
msgid "Adjustment Entry"
-msgstr ""
+msgstr "Stavka podešavanja"
#. module: hr_payroll_account
#: field:hr.contract,analytic_account_id:0
#: field:hr.salary.rule,analytic_account_id:0
msgid "Analytic Account"
-msgstr ""
+msgstr "Analitički konto"
#. module: hr_payroll_account
#: model:ir.model,name:hr_payroll_account.model_hr_salary_rule
msgid "hr.salary.rule"
-msgstr ""
+msgstr "hr.salary.rule"
#. module: hr_payroll_account
#: model:ir.model,name:hr_payroll_account.model_hr_payslip_run
msgid "Payslip Batches"
-msgstr ""
+msgstr "Serije obračunskih listova plate"
#. module: hr_payroll_account
#: field:hr.contract,journal_id:0
msgid "Salary Journal"
-msgstr ""
+msgstr "Dnevnika plata"
#. module: hr_payroll_account
#: model:ir.model,name:hr_payroll_account.model_hr_payslip
msgid "Pay Slip"
-msgstr ""
+msgstr "Obračunski list"
#. module: hr_payroll_account
#: constraint:hr.payslip:0
msgid "Payslip 'Date From' must be before 'Date To'."
-msgstr ""
+msgstr "'Datum od' mora biti pre 'Datum do' na obračunskom listu"
#. module: hr_payroll_account
#: help:hr.payslip,period_id:0
msgid "Keep empty to use the period of the validation(Payslip) date."
msgstr ""
+"Sačuvajte prazno mesto radi korišćenja datum validacije (obračuski list)"
#. module: hr_payroll_account
#: code:addons/hr_payroll_account/hr_payroll_account.py:171
#, python-format
msgid ""
"The Expense Journal \"%s\" has not properly configured the Debit Account!"
-msgstr ""
+msgstr "Dnevnik troškova \"%s\" nije tačno podesio dužnički nalog!"
#. module: hr_payroll_account
#: code:addons/hr_payroll_account/hr_payroll_account.py:155
#, python-format
msgid ""
"The Expense Journal \"%s\" has not properly configured the Credit Account!"
-msgstr ""
+msgstr "Dnevnik troškova \"%s\" nije tačno podesio platni nalog!"
#. module: hr_payroll_account
#: field:hr.salary.rule,account_debit:0
msgid "Debit Account"
-msgstr ""
+msgstr "Platni nalog"
#. module: hr_payroll_account
#: code:addons/hr_payroll_account/hr_payroll_account.py:102
#, python-format
msgid "Payslip of %s"
-msgstr ""
+msgstr "Obračunski list %s"
#. module: hr_payroll_account
#: model:ir.model,name:hr_payroll_account.model_hr_contract
msgid "Contract"
-msgstr ""
+msgstr "Ugovor"
#. module: hr_payroll_account
#: constraint:hr.contract:0
msgid "Error! contract start-date must be lower then contract end-date."
-msgstr ""
+msgstr "Greška! datum početka ugovora mora da bude pre datuma završetka."
#. module: hr_payroll_account
#: field:hr.payslip,period_id:0
msgid "Force Period"
-msgstr ""
+msgstr "Forsirani period"
#. module: hr_payroll_account
#: field:hr.salary.rule,account_credit:0
msgid "Credit Account"
-msgstr ""
+msgstr "Platni nalog"
#. module: hr_payroll_account
#: model:ir.model,name:hr_payroll_account.model_hr_payslip_employees
msgid "Generate payslips for all selected employees"
-msgstr ""
+msgstr "Napravi obračunski list za sve izabrane zaposlene"
#. module: hr_payroll_account
#: code:addons/hr_payroll_account/hr_payroll_account.py:155
#: code:addons/hr_payroll_account/hr_payroll_account.py:171
#, python-format
msgid "Configuration Error!"
-msgstr ""
+msgstr "Greška podešavanja!"
#. module: hr_payroll_account
#: view:hr.contract:0
#: view:hr.salary.rule:0
msgid "Accounting"
-msgstr ""
+msgstr "Računovodstvo"
#~ msgid "Bank Journal"
#~ msgstr "Dnevnik Banke"
diff --git a/addons/hr_recruitment/__init__.py b/addons/hr_recruitment/__init__.py
index 643a15e94f1..5fdbd707d31 100644
--- a/addons/hr_recruitment/__init__.py
+++ b/addons/hr_recruitment/__init__.py
@@ -22,5 +22,6 @@
import hr_recruitment
import report
import wizard
+import res_config
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr_recruitment/__openerp__.py b/addons/hr_recruitment/__openerp__.py
index 548b5e3baa3..4b6e3fb48b2 100644
--- a/addons/hr_recruitment/__openerp__.py
+++ b/addons/hr_recruitment/__openerp__.py
@@ -49,7 +49,8 @@ system to store and search in your CV base.
'security/ir.model.access.csv',
'report/hr_recruitment_report_view.xml',
'board_hr_recruitment_statistical_view.xml',
- 'hr_recruitment_installer_view.xml'
+ 'hr_recruitment_installer_view.xml',
+ 'res_config_view.xml',
],
'init_xml': [
'hr_recruitment_data.xml'
diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py
index d1a4ba2c285..17a2d11fd0e 100644
--- a/addons/hr_recruitment/hr_recruitment.py
+++ b/addons/hr_recruitment/hr_recruitment.py
@@ -96,7 +96,7 @@ class hr_applicant(crm.crm_case, osv.osv):
_name = "hr.applicant"
_description = "Applicant"
_order = "id desc"
- _inherit = ['mail.thread']
+ _inherit = ['ir.needaction_mixin', 'mail.thread']
def _compute_day(self, cr, uid, ids, fields, args, context=None):
"""
@@ -179,6 +179,7 @@ class hr_applicant(crm.crm_case, osv.osv):
'day_close': fields.function(_compute_day, string='Days to Close', \
multi='day_close', type="float", store=True),
'color': fields.integer('Color Index'),
+ 'emp_id': fields.many2one('hr.employee', 'employee'),
'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True),
}
@@ -389,36 +390,33 @@ class hr_applicant(crm.crm_case, osv.osv):
self.message_append_dict(cr, uid, ids, msg, context=context)
return res
- def case_open(self, cr, uid, ids, *args):
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(hr_applicant, self).create(cr, uid, vals, context=context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
+ def case_open(self, cr, uid, ids, context=None):
"""
- @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 *args: Give Tuple Value
+ open Request of the applicant for the hr_recruitment
"""
- res = super(hr_applicant, self).case_open(cr, uid, ids, *args)
+ res = super(hr_applicant, self).case_open(cr, uid, ids, context)
date = self.read(cr, uid, ids, ['date_open'])[0]
if not date['date_open']:
self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S'),})
- for (id, name) in self.name_get(cr, uid, ids):
- message = _("The job request '%s' has been set 'in progress'.") % name
- self.log(cr, uid, id, message)
return res
- def case_close(self, cr, uid, ids, *args):
- res = super(hr_applicant, self).case_close(cr, uid, ids, *args)
- for (id, name) in self.name_get(cr, uid, ids):
- message = _("Applicant '%s' is being hired.") % name
- self.log(cr, uid, id, message)
+ def case_close(self, cr, uid, ids, context=None):
+ res = super(hr_applicant, self).case_close(cr, uid, ids, context)
return res
- def case_close_with_emp(self, cr, uid, ids, *args):
+ def case_close_with_emp(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
hr_employee = self.pool.get('hr.employee')
model_data = self.pool.get('ir.model.data')
act_window = self.pool.get('ir.actions.act_window')
emp_id = False
- for applicant in self.browse(cr, uid, ids):
+ for applicant in self.browse(cr, uid, ids, context=context):
address_id = False
if applicant.partner_id:
address_id = applicant.partner_id.address_get(['contact'])['contact']
@@ -429,7 +427,8 @@ class hr_applicant(crm.crm_case, osv.osv):
'address_home_id': address_id,
'department_id': applicant.department_id.id
})
- self.case_close(cr, uid, [applicant.id], *args)
+ self.write(cr, uid, [applicant.id], {'emp_id': emp_id}, context=context)
+ self.case_close(cr, uid, [applicant.id], context)
else:
raise osv.except_osv(_('Warning!'),_('You must define Applied Job for this applicant.'))
@@ -440,16 +439,23 @@ class hr_applicant(crm.crm_case, osv.osv):
dict_act_window['view_mode'] = 'form,tree'
return dict_act_window
- def case_reset(self, cr, uid, ids, *args):
- """Resets case as draft
- @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 Ids
- @param *args: Tuple Value for additional Params
+ def case_cancel(self, cr, uid, ids, context=None):
+ """Overrides cancel for crm_case for setting probability
"""
+ res = super(hr_applicant, self).case_cancel(cr, uid, ids, context)
+ self.write(cr, uid, ids, {'probability' : 0.0})
+ return res
- res = super(hr_applicant, self).case_reset(cr, uid, ids, *args)
+ def case_pending(self, cr, uid, ids, context=None):
+ """Marks case as pending"""
+ res = super(hr_applicant, self).case_pending(cr, uid, ids, context)
+ self.write(cr, uid, ids, {'probability' : 0.0})
+ return res
+
+ def case_reset(self, cr, uid, ids, context=None):
+ """Resets case as draft
+ """
+ res = super(hr_applicant, self).case_reset(cr, uid, ids, context)
self.write(cr, uid, ids, {'date_open': False, 'date_closed': False})
return res
@@ -471,10 +477,58 @@ class hr_applicant(crm.crm_case, osv.osv):
def write(self, cr, uid, ids, vals, context=None):
if 'stage_id' in vals and vals['stage_id']:
stage = self.pool.get('hr.recruitment.stage').browse(cr, uid, vals['stage_id'], context=context)
- text = _("Changed Stage to: %s") % stage.name
- self.message_append(cr, uid, ids, text, body_text=text, context=context)
+ self.message_append_note(cr, uid, ids, body=_("Stage changed to %s.") % stage.name, context=context)
return super(hr_applicant,self).write(cr, uid, ids, vals, context=context)
+ # -------------------------------------------------------
+ # OpenChatter methods and notifications
+ # -------------------------------------------------------
+
+ def message_get_subscribers(self, cr, uid, ids, context=None):
+ sub_ids = self.message_get_subscribers_ids(cr, uid, ids, context=context);
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.user_id:
+ sub_ids.append(obj.user_id.id)
+ return self.pool.get('res.users').read(cr, uid, sub_ids, context=context)
+
+ def get_needaction_user_ids(self, cr, uid, ids, context=None):
+ result = dict.fromkeys(ids, [])
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.state == 'draft' and obj.user_id:
+ result[obj.id] = [obj.user_id.id]
+ return result
+
+ def case_get_note_msg_prefix(self, cr, uid, id, context=None):
+ return 'Applicant'
+
+ def case_open_send_note(self, cr, uid, ids, context=None):
+ message = _("Applicant has been set in progress.")
+ return self.message_append_note(cr, uid, ids, body=message, context=context)
+
+ def case_close_send_note(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ for applicant in self.browse(cr, uid, ids, context=context):
+ if applicant.emp_id:
+ message = _("Applicant has been hired and created as an employee.")
+ self.message_append_note(cr, uid, [applicant.id], body=message, context=context)
+ else:
+ message = _("Applicant has been hired.")
+ self.message_append_note(cr, uid, [applicant.id], body=message, context=context)
+ return True
+
+ def case_cancel_send_note(self, cr, uid, ids, context=None):
+ msg = 'Applicant refused.'
+ return self.message_append_note(cr, uid, ids, body=msg, context=context)
+
+ def case_reset_send_note(self, cr, uid, ids, context=None):
+ message =_("Applicant has been set as new.")
+ return self.message_append_note(cr, uid, ids, body=message, context=context)
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ message = _("Applicant has been created.")
+ return self.message_append_note(cr, uid, ids, body=message, context=context)
+
hr_applicant()
class hr_job(osv.osv):
diff --git a/addons/hr_recruitment/hr_recruitment_installer_view.xml b/addons/hr_recruitment/hr_recruitment_installer_view.xml
index 3d7d49d595e..7a38d020f1d 100644
--- a/addons/hr_recruitment/hr_recruitment_installer_view.xml
+++ b/addons/hr_recruitment/hr_recruitment_installer_view.xml
@@ -9,11 +9,5 @@
Check if the following stages are matching your recruitment process. Don't forget to specify the department if your recruitment process is different according to the job position.
-
-
-
-
- 3
-
diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml
index d47ff2b9986..4a438a1f385 100644
--- a/addons/hr_recruitment/hr_recruitment_view.xml
+++ b/addons/hr_recruitment/hr_recruitment_view.xml
@@ -79,6 +79,9 @@
+
@@ -123,13 +126,6 @@
-
-
-
-
-
-
-
@@ -140,33 +136,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/addons/hr_recruitment/res_config.py b/addons/hr_recruitment/res_config.py
new file mode 100644
index 00000000000..2afec802689
--- /dev/null
+++ b/addons/hr_recruitment/res_config.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. ().
+#
+# 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
+
+class hr_applicant_settings(osv.osv_memory):
+ _name = 'hr.config.settings'
+ _inherit = ['hr.config.settings', 'fetchmail.config.settings']
+
+ _columns = {
+ 'module_document_ftp': fields.boolean('Index & Track Documents',
+ help="""Manage your CV's and motivation letter related to all applicants.
+ This installs the module document_ftp."""),
+ 'fetchmail_applicants': fields.boolean('Create Applicants from an Email Account',
+ fetchmail_model='hr.applicant', fetchmail_name='Incoming HR Applications',
+ help ="""Allow applicants to send their job application to an email address (jobs@mycompany.com),
+ and create automatically application documents in the system."""),
+ 'applicants_server': fields.char('Server', size=256),
+ 'applicants_port': fields.integer('Port'),
+ 'applicants_type': fields.selection([
+ ('pop', 'POP Server'),
+ ('imap', 'IMAP Server'),
+ ('local', 'Local Server'),
+ ], 'Type'),
+ 'applicants_is_ssl': fields.boolean('SSL/TLS',
+ help="Connections are encrypted with SSL/TLS through a dedicated port (default: IMAPS=993, POP=995)"),
+ 'applicants_user': fields.char('Username', size=256),
+ 'applicants_password': fields.char('Password', size=1024),
+ }
+
+ _defaults = {
+ 'applicants_type': 'pop',
+ }
+
diff --git a/addons/hr_recruitment/res_config_view.xml b/addons/hr_recruitment/res_config_view.xml
new file mode 100644
index 00000000000..d056d493e2b
--- /dev/null
+++ b/addons/hr_recruitment/res_config_view.xml
@@ -0,0 +1,35 @@
+
+
+
+
+ hr settings for recruitment
+ hr.config.settings
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py b/addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py
index d7a099e7257..5e868e6f49a 100644
--- a/addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py
+++ b/addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py
@@ -63,7 +63,7 @@ class hr_recruitment_partner_create(osv.osv_memory):
'email': case.email_from
}, context=context)
- case_obj.write(cr, uid, case.id, {
+ case_obj.write(cr, uid, [case.id], {
'partner_id': partner_id,
}, context=context)
if data['close']:
@@ -82,4 +82,4 @@ class hr_recruitment_partner_create(osv.osv_memory):
hr_recruitment_partner_create()
-# 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/hr_timesheet/hr_timesheet_installer.xml b/addons/hr_timesheet/hr_timesheet_installer.xml
index cfd2cc8ab88..927ff2f2f40 100644
--- a/addons/hr_timesheet/hr_timesheet_installer.xml
+++ b/addons/hr_timesheet/hr_timesheet_installer.xml
@@ -9,10 +9,5 @@
tree,formYou should create an analytic account structure depending on your needs to analyse costs and revenues. In OpenERP, analytic accounts are also used to track customer contracts.
-
-
-
-
-
diff --git a/addons/hr_timesheet/i18n/cs.po b/addons/hr_timesheet/i18n/cs.po
index 775b4a736d5..9e417187fe1 100644
--- a/addons/hr_timesheet/i18n/cs.po
+++ b/addons/hr_timesheet/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2011-09-20 08:48+0000\n"
+"PO-Revision-Date: 2012-04-06 05:13+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:31+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: hr_timesheet
@@ -107,7 +107,7 @@ msgstr "Pá"
#. module: hr_timesheet
#: field:hr.employee,uom_id:0
msgid "UoM"
-msgstr ""
+msgstr "MJ"
#. module: hr_timesheet
#: view:hr.sign.in.project:0
@@ -152,7 +152,7 @@ msgstr "Jméno zaměstnance"
#. module: hr_timesheet
#: field:hr.sign.out.project,account_id:0
msgid "Project / Analytic Account"
-msgstr ""
+msgstr "Projekt / Analytický účet"
#. module: hr_timesheet
#: model:ir.model,name:hr_timesheet.model_hr_analytical_timesheet_users
@@ -195,7 +195,7 @@ msgstr "Varování"
#. module: hr_timesheet
#: field:hr.analytic.timesheet,partner_id:0
msgid "Partner"
-msgstr ""
+msgstr "Partner"
#. module: hr_timesheet
#: view:hr.sign.in.project:0
@@ -220,7 +220,7 @@ msgstr "Ne"
#. module: hr_timesheet
#: view:hr.analytic.timesheet:0
msgid "Analytic account"
-msgstr ""
+msgstr "Analytický účet"
#. module: hr_timesheet
#: view:hr.analytical.timesheet.employee:0
@@ -263,7 +263,7 @@ msgstr "Kategorie"
#. module: hr_timesheet
#: constraint:hr.analytic.timesheet:0
msgid "You cannot modify an entry in a Confirmed/Done timesheet !."
-msgstr ""
+msgstr "Nemůžete změnit údaj v Potvrzeném/Dokončeném časovém záznamu !."
#. module: hr_timesheet
#: help:hr.employee,product_id:0
@@ -314,7 +314,7 @@ msgstr "Popis práce"
#. module: hr_timesheet
#: view:account.analytic.account:0
msgid "Invoice Analysis"
-msgstr ""
+msgstr "Analýza faktury"
#. module: hr_timesheet
#: model:ir.actions.report.xml,name:hr_timesheet.report_user_timesheet
@@ -330,7 +330,7 @@ msgstr "Přihlášení / Odhlášení podle projektu"
#. module: hr_timesheet
#: model:ir.actions.act_window,name:hr_timesheet.action_define_analytic_structure
msgid "Define your Analytic Structure"
-msgstr ""
+msgstr "Určit vaši analytickou strukturu"
#. module: hr_timesheet
#: view:hr.sign.in.project:0
@@ -364,11 +364,14 @@ msgid ""
"analyse costs and revenues. In OpenERP, analytic accounts are also used to "
"track customer contracts."
msgstr ""
+"Měli byste vytvořit strukturu analytických účtů závisejících na vašich "
+"potřebách k analýze cen a výnosů. Analytické účty jsou v OpenERP také "
+"použity pro sledování smluv zákazníků."
#. module: hr_timesheet
#: field:hr.analytic.timesheet,line_id:0
msgid "Analytic Line"
-msgstr ""
+msgstr "Analytický řádek"
#. module: hr_timesheet
#: code:addons/hr_timesheet/report/user_timesheet.py:40
@@ -515,6 +518,8 @@ msgid ""
"Through this menu you can register and follow your workings hours by project "
"every day."
msgstr ""
+"Pomocí této nabídky můžete každý den registrovat a následovat vaše pracovní "
+"hodiny podle projektu."
#. module: hr_timesheet
#: field:hr.sign.in.project,server_date:0
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
index 65a983de1e4..2f5c8d24d79 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
@@ -14,7 +14,7 @@
-
+
diff --git a/addons/hr_timesheet_sheet/__init__.py b/addons/hr_timesheet_sheet/__init__.py
index d7635359c74..d5c112f9402 100644
--- a/addons/hr_timesheet_sheet/__init__.py
+++ b/addons/hr_timesheet_sheet/__init__.py
@@ -22,5 +22,6 @@
import hr_timesheet_sheet
import wizard
import report
+import res_config
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr_timesheet_sheet/__openerp__.py b/addons/hr_timesheet_sheet/__openerp__.py
index 17df974f1c7..defa3ee5873 100644
--- a/addons/hr_timesheet_sheet/__openerp__.py
+++ b/addons/hr_timesheet_sheet/__openerp__.py
@@ -61,7 +61,8 @@ The validation can be configured in the company:
'report/hr_timesheet_report_view.xml',
'report/timesheet_report_view.xml',
'wizard/hr_timesheet_current_view.xml',
- 'hr_timesheet_sheet_data.xml'
+ 'hr_timesheet_sheet_data.xml',
+ 'res_config_view.xml',
],
'demo_xml': ['hr_timesheet_sheet_demo.xml',
diff --git a/addons/hr_timesheet_sheet/res_config.py b/addons/hr_timesheet_sheet/res_config.py
new file mode 100644
index 00000000000..d7df5950200
--- /dev/null
+++ b/addons/hr_timesheet_sheet/res_config.py
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. ().
+#
+# 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
+
+class hr_timesheet_settings(osv.osv_memory):
+ _inherit = 'hr.config.settings'
+
+ _columns = {
+ 'timesheet_range': fields.selection([('day','Day'),('week','Week'),('month','Month')],
+ 'Timesheet Range', help="Periodicity on which you validate your timesheets."),
+ 'timesheet_max_difference': fields.float('Timesheet Allowed Difference (Hours)',
+ help="""Allowed difference in hours between the sign in/out and the timesheet
+ computation for one sheet. Set this to 0 if you do not want any control."""),
+ }
+
+ def get_default_timesheet(self, cr, uid, fields, context=None):
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ return {
+ 'timesheet_range': user.company_id.timesheet_range,
+ 'timesheet_max_difference': user.company_id.timesheet_max_difference,
+ }
+
+ def set_default_timesheet(self, cr, uid, ids, context=None):
+ config = self.browse(cr, uid, ids[0], context)
+ user = self.pool.get('res.users').browse(cr, uid, uid, context)
+ user.company_id.write({
+ 'timesheet_range': config.timesheet_range,
+ 'timesheet_max_difference': config.timesheet_max_difference,
+ })
diff --git a/addons/hr_timesheet_sheet/res_config_view.xml b/addons/hr_timesheet_sheet/res_config_view.xml
new file mode 100644
index 00000000000..bd4142d7916
--- /dev/null
+++ b/addons/hr_timesheet_sheet/res_config_view.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ hr settings for timesheets
+ hr.config.settings
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/idea/i18n/cs.po b/addons/idea/i18n/cs.po
index 487d1ef1627..3d1ae778834 100644
--- a/addons/idea/i18n/cs.po
+++ b/addons/idea/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2011-10-17 08:27+0000\n"
+"PO-Revision-Date: 2012-04-06 06:33+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: openerp-i18n-czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:29+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: idea
@@ -26,7 +26,7 @@ msgstr ""
#. module: idea
#: view:idea.idea:0
msgid "By States"
-msgstr ""
+msgstr "Podle stavů"
#. module: idea
#: model:ir.actions.act_window,name:idea.action_idea_select
@@ -73,7 +73,7 @@ msgstr "Březen"
#. module: idea
#: view:idea.idea:0
msgid "Accepted Ideas"
-msgstr ""
+msgstr "Schválené nápady"
#. module: idea
#: code:addons/idea/wizard/idea_post_vote.py:94
@@ -84,7 +84,7 @@ msgstr "Nápad musí být ve stavu 'Otevřený' přes hlasováním pro tento ná
#. module: idea
#: view:report.vote:0
msgid "Open Date"
-msgstr ""
+msgstr "Datum otevření"
#. module: idea
#: view:report.vote:0
@@ -239,7 +239,7 @@ msgstr "Stav"
#: view:idea.idea:0
#: selection:idea.idea,state:0
msgid "New"
-msgstr ""
+msgstr "Nový"
#. module: idea
#: selection:idea.idea,my_vote:0
@@ -273,12 +273,12 @@ msgstr ""
#. module: idea
#: view:idea.idea:0
msgid "New Ideas"
-msgstr ""
+msgstr "Nové nápady"
#. module: idea
#: view:report.vote:0
msgid "Idea Vote created last month"
-msgstr ""
+msgstr "Hlas nápadu vytvořený v posledním měsíci"
#. module: idea
#: field:idea.category,visibility:0
@@ -289,7 +289,7 @@ msgstr "Otevřít nápad?"
#. module: idea
#: view:report.vote:0
msgid "Idea Vote created in current month"
-msgstr ""
+msgstr "Hlas nápadu vytvořený v tomto měsíci"
#. module: idea
#: selection:report.vote,month:0
@@ -406,7 +406,7 @@ msgstr "Hlasy nápadů"
#. module: idea
#: view:idea.idea:0
msgid "By Idea Category"
-msgstr ""
+msgstr "Podle kategorie nápadů"
#. module: idea
#: view:idea.idea:0
@@ -543,7 +543,7 @@ msgstr "Nastavte na jedničku, pokud požadujete pouze jeden hlas na uživatele"
#. module: idea
#: view:idea.idea:0
msgid "By Creators"
-msgstr ""
+msgstr "Podle tvůrce"
#. module: idea
#: view:idea.post.vote:0
@@ -564,7 +564,7 @@ msgstr "Otevřít"
#: view:idea.idea:0
#: view:report.vote:0
msgid "In Progress"
-msgstr ""
+msgstr "V běhu"
#. module: idea
#: view:report.vote:0
@@ -594,7 +594,7 @@ msgstr "Skóre"
#. module: idea
#: view:idea.idea:0
msgid "Votes Statistics"
-msgstr ""
+msgstr "Statistika hlasů"
#. module: idea
#: view:idea.vote:0
@@ -632,7 +632,7 @@ msgstr "Únor"
#. module: idea
#: field:idea.category,complete_name:0
msgid "Name"
-msgstr ""
+msgstr "Jméno"
#. module: idea
#: field:idea.vote.stat,nbr:0
@@ -642,7 +642,7 @@ msgstr "Počet hlasů"
#. module: idea
#: view:report.vote:0
msgid "Month-1"
-msgstr ""
+msgstr "Měsíc -1"
#. module: idea
#: selection:report.vote,month:0
@@ -662,7 +662,7 @@ msgstr "Stav hlasu"
#. module: idea
#: view:report.vote:0
msgid "Idea Vote created in current year"
-msgstr ""
+msgstr "Hlasy nápadu vytvořené v tomto roce"
#. module: idea
#: field:idea.idea,vote_avg:0
@@ -672,7 +672,7 @@ msgstr "Průměrné skóre"
#. module: idea
#: constraint:idea.category:0
msgid "Error ! You cannot create recursive categories."
-msgstr ""
+msgstr "Chyba ! Nemůžete vytvořit rekurzivní Kategorie."
#. module: idea
#: field:idea.comment,idea_id:0
@@ -706,7 +706,7 @@ msgstr "Rok"
#: code:addons/idea/idea.py:274
#, python-format
msgid "You can not vote on a Draft/Accepted/Cancelled ideas."
-msgstr ""
+msgstr "Nemůžete hlasovat pro rozpracované/schválené/zrušené nápady."
#. module: idea
#: view:idea.select:0
diff --git a/addons/idea/security/idea_security.xml b/addons/idea/security/idea_security.xml
index 02a3cbdbdd8..b26bd2af0a9 100644
--- a/addons/idea/security/idea_security.xml
+++ b/addons/idea/security/idea_security.xml
@@ -10,6 +10,7 @@
Manager
+
diff --git a/addons/import_base/i18n/ar.po b/addons/import_base/i18n/ar.po
new file mode 100644
index 00000000000..56a3c9dd2de
--- /dev/null
+++ b/addons/import_base/i18n/ar.po
@@ -0,0 +1,100 @@
+# Arabic translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-06 07:49+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Arabic \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:434
+#, python-format
+msgid "Import failed due to an unexpected error"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:461
+#, python-format
+msgid "started at %s and finished at %s \n"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:448
+#, python-format
+msgid "Import of your data finished at %s"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:463
+#, python-format
+msgid ""
+"but failed, in consequence no data were imported to keep database "
+"consistency \n"
+" error : \n"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:477
+#, python-format
+msgid ""
+"The import of data \n"
+" instance name : %s \n"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:470
+#, python-format
+msgid "%s has been successfully imported from %s %s, %s \n"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:447
+#, python-format
+msgid "Data Import failed at %s due to an unexpected error"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:436
+#, python-format
+msgid "Import finished, notification email sended"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:190
+#, python-format
+msgid "%s is not a valid model name"
+msgstr ""
+
+#. module: import_base
+#: model:ir.ui.menu,name:import_base.menu_import_crm
+msgid "Import"
+msgstr "إستيراد"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:467
+#, python-format
+msgid "with no warning"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:469
+#, python-format
+msgid "with warning : %s"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:191
+#, python-format
+msgid " fields imported : "
+msgstr ""
diff --git a/addons/import_base/i18n/pt.po b/addons/import_base/i18n/pt.po
new file mode 100644
index 00000000000..d1bb5caa3bf
--- /dev/null
+++ b/addons/import_base/i18n/pt.po
@@ -0,0 +1,105 @@
+# Portuguese translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-09 13:46+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Portuguese \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-10 04:56+0000\n"
+"X-Generator: Launchpad (build 15070)\n"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:434
+#, python-format
+msgid "Import failed due to an unexpected error"
+msgstr "A importação falhou devido a um erro inesperado"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:461
+#, python-format
+msgid "started at %s and finished at %s \n"
+msgstr "começado em %s e finalizado em %s \n"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:448
+#, python-format
+msgid "Import of your data finished at %s"
+msgstr "Importação de dados terminou em %s"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:463
+#, python-format
+msgid ""
+"but failed, in consequence no data were imported to keep database "
+"consistency \n"
+" error : \n"
+msgstr ""
+"mas não conseguiu, em consequência da não existência de dados, foram "
+"importados para manter a consistência do banco de dados \n"
+" erro: \n"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:477
+#, python-format
+msgid ""
+"The import of data \n"
+" instance name : %s \n"
+msgstr ""
+"Importação de dados \n"
+" nome da instância: %s \n"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:470
+#, python-format
+msgid "%s has been successfully imported from %s %s, %s \n"
+msgstr "%s foi importado com sucesso para %s %s,%s \n"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:447
+#, python-format
+msgid "Data Import failed at %s due to an unexpected error"
+msgstr "Importação de dados falhada em %s devido a um erro inesperado"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:436
+#, python-format
+msgid "Import finished, notification email sended"
+msgstr "Importação concluída, notificação enviada para o email"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:190
+#, python-format
+msgid "%s is not a valid model name"
+msgstr "%s não é um nome de modelo válido"
+
+#. module: import_base
+#: model:ir.ui.menu,name:import_base.menu_import_crm
+msgid "Import"
+msgstr "Importação"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:467
+#, python-format
+msgid "with no warning"
+msgstr "Sem avisos"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:469
+#, python-format
+msgid "with warning : %s"
+msgstr "com aviso: %s"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:191
+#, python-format
+msgid " fields imported : "
+msgstr " campos importados: "
diff --git a/addons/import_google/i18n/sr@latin.po b/addons/import_google/i18n/sr@latin.po
new file mode 100644
index 00000000000..d3e3de36fe4
--- /dev/null
+++ b/addons/import_google/i18n/sr@latin.po
@@ -0,0 +1,223 @@
+# Serbian Latin translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-06 13:42+0000\n"
+"Last-Translator: Milan Milosevic \n"
+"Language-Team: Serbian Latin \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: import_google
+#: help:synchronize.google.import,group_name:0
+msgid "Choose which group to import, By default it takes all."
+msgstr "Izaberite grupu za uvoz, po defaultu, uzima ih sve"
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "Import Google Calendar Events"
+msgstr "Uvezi događaje iz Google-ovog kalendara"
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "_Import Events"
+msgstr "_Uvezi događaje"
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google_data.py:71
+#, python-format
+msgid ""
+"No Google Username or password Defined for user.\n"
+"Please define in user view"
+msgstr ""
+"Nema određenog korisničkog imena ili lozinke za korisnika.\n"
+"Molimo odredite ih u korisničkom pregledu"
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google_data.py:127
+#, python-format
+msgid ""
+"Invalid login detail !\n"
+" Specify Username/Password."
+msgstr ""
+"Nevažeći detalji prijave !\n"
+" Odredite korisničko ime/ lozinku."
+
+#. module: import_google
+#: field:synchronize.google.import,supplier:0
+msgid "Supplier"
+msgstr "Dobavljač"
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "Import Options"
+msgstr "Opcije uvoza"
+
+#. module: import_google
+#: field:synchronize.google.import,group_name:0
+msgid "Group Name"
+msgstr "Ime grupe"
+
+#. module: import_google
+#: model:ir.model,name:import_google.model_crm_case_categ
+msgid "Category of Case"
+msgstr "Kategorija slučaja"
+
+#. module: import_google
+#: model:ir.actions.act_window,name:import_google.act_google_login_contact_form
+#: model:ir.ui.menu,name:import_google.menu_sync_contact
+msgid "Import Google Contacts"
+msgstr "Uvezi Google kontakte"
+
+#. module: import_google
+#: view:google.import.message:0
+msgid "Import Google Data"
+msgstr "Uvezi Google podatke"
+
+#. module: import_google
+#: view:crm.meeting:0
+msgid "Meeting Type"
+msgstr "Tip sastanka"
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google.py:38
+#: code:addons/import_google/wizard/import_google_data.py:28
+#, python-format
+msgid ""
+"Please install gdata-python-client from http://code.google.com/p/gdata-"
+"python-client/downloads/list"
+msgstr ""
+"Molimo instalirajte gdata-python-client from http://code.google.com/p/gdata-"
+"python-client/downloads/list"
+
+#. module: import_google
+#: model:ir.model,name:import_google.model_google_login
+msgid "Google Contact"
+msgstr "Google kontakt"
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "Import contacts from a google account"
+msgstr "Uvezi kontakte s Google naloga"
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google_data.py:133
+#, python-format
+msgid "Please specify correct user and password !"
+msgstr "Molimo odredite tačnog korisnika i lozinku !"
+
+#. module: import_google
+#: field:synchronize.google.import,customer:0
+msgid "Customer"
+msgstr "Mušterija"
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "_Cancel"
+msgstr "_Otkaži"
+
+#. module: import_google
+#: model:ir.model,name:import_google.model_synchronize_google_import
+msgid "synchronize.google.import"
+msgstr "synchronize.google.import"
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "_Import Contacts"
+msgstr "_Uvezi kontakte"
+
+#. module: import_google
+#: model:ir.actions.act_window,name:import_google.act_google_login_form
+#: model:ir.ui.menu,name:import_google.menu_sync_calendar
+msgid "Import Google Calendar"
+msgstr "Uvezi Google-ov kalendar"
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google_data.py:50
+#, python-format
+msgid "Import google"
+msgstr "Uvezi Google"
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google_data.py:127
+#: code:addons/import_google/wizard/import_google_data.py:133
+#, python-format
+msgid "Error"
+msgstr "Greška"
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google_data.py:71
+#, python-format
+msgid "Warning !"
+msgstr "Upozorenje !"
+
+#. module: import_google
+#: field:synchronize.google.import,create_partner:0
+msgid "Options"
+msgstr "Opcije"
+
+#. module: import_google
+#: view:google.import.message:0
+msgid "_Ok"
+msgstr "_Ok"
+
+#. module: import_google
+#: code:addons/import_google/wizard/import_google.py:38
+#: code:addons/import_google/wizard/import_google_data.py:28
+#, python-format
+msgid "Google Contacts Import Error!"
+msgstr "Greška u uvozu kontakata s Google-a"
+
+#. module: import_google
+#: model:ir.model,name:import_google.model_google_import_message
+msgid "Import Message"
+msgstr "Uvezi poruku"
+
+#. module: import_google
+#: field:synchronize.google.import,calendar_name:0
+msgid "Calendar Name"
+msgstr "Ime kalendara"
+
+#. module: import_google
+#: help:synchronize.google.import,supplier:0
+msgid "Check this box to set newly created partner as Supplier."
+msgstr "Označite ovu kućicu da biste novog partnera odredili kao Dobavljača."
+
+#. module: import_google
+#: selection:synchronize.google.import,create_partner:0
+msgid "Import only address"
+msgstr "Uvezi samo adrese"
+
+#. module: import_google
+#: field:crm.case.categ,user_id:0
+msgid "User"
+msgstr "Korisnik"
+
+#. module: import_google
+#: view:synchronize.google.import:0
+msgid "Partner status for this group:"
+msgstr "Stanje partnera za ovu grupu:"
+
+#. module: import_google
+#: field:google.import.message,name:0
+msgid "Message"
+msgstr "Poruka"
+
+#. module: import_google
+#: selection:synchronize.google.import,create_partner:0
+msgid "Create partner for each contact"
+msgstr "Napravi partnera za svaki kontakt"
+
+#. module: import_google
+#: help:synchronize.google.import,customer:0
+msgid "Check this box to set newly created partner as Customer."
+msgstr "Označite ovu kućicu da biste novog partnera odredili kao Mušteriju."
diff --git a/addons/knowledge/security/knowledge_security.xml b/addons/knowledge/security/knowledge_security.xml
index 560fdce0506..4871541b4c9 100644
--- a/addons/knowledge/security/knowledge_security.xml
+++ b/addons/knowledge/security/knowledge_security.xml
@@ -5,6 +5,7 @@
User
+
diff --git a/addons/l10n_at/static/src/img/icon.png b/addons/l10n_at/static/src/img/icon.png
new file mode 100644
index 00000000000..cac568e4224
Binary files /dev/null and b/addons/l10n_at/static/src/img/icon.png differ
diff --git a/addons/l10n_be/static/src/img/icon.png b/addons/l10n_be/static/src/img/icon.png
new file mode 100644
index 00000000000..2ee49b8c1a2
Binary files /dev/null and b/addons/l10n_be/static/src/img/icon.png differ
diff --git a/addons/l10n_be_hr_payroll/i18n/sr@latin.po b/addons/l10n_be_hr_payroll/i18n/sr@latin.po
new file mode 100644
index 00000000000..1401a961377
--- /dev/null
+++ b/addons/l10n_be_hr_payroll/i18n/sr@latin.po
@@ -0,0 +1,158 @@
+# Serbian Latin translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-06 13:53+0000\n"
+"Last-Translator: Milan Milosevic \n"
+"Language-Team: Serbian Latin \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: l10n_be_hr_payroll
+#: help:hr.employee,disabled_spouse_bool:0
+msgid "if recipient spouse is declared disabled by law"
+msgstr "Ako je primalac supružnik određen nevažeći po zakonu"
+
+#. module: l10n_be_hr_payroll
+#: help:hr.employee,disabled_children_bool:0
+msgid "if recipient children is/are declared disabled by law"
+msgstr "Ako je/su primalac/oci dete/deca određen/i nevažeći po zakonu"
+
+#. module: l10n_be_hr_payroll
+#: field:hr.contract,misc_onss_deduction:0
+msgid "Miscellaneous exempt ONSS "
+msgstr "Razni ONSS izuzeci "
+
+#. module: l10n_be_hr_payroll
+#: model:ir.model,name:l10n_be_hr_payroll.model_hr_employee
+msgid "Employee"
+msgstr "Zaposleni"
+
+#. module: l10n_be_hr_payroll
+#: field:hr.employee,disabled_spouse_bool:0
+msgid "Disabled Spouse"
+msgstr "Nevažeći supružnik"
+
+#. module: l10n_be_hr_payroll
+#: field:hr.contract,retained_net_amount:0
+msgid "Net retained "
+msgstr "Neto zadržano "
+
+#. module: l10n_be_hr_payroll
+#: field:hr.employee,resident_bool:0
+msgid "Nonresident"
+msgstr "Neboraveći"
+
+#. module: l10n_be_hr_payroll
+#: help:hr.employee,resident_bool:0
+msgid "if recipient lives in a foreign country"
+msgstr "Ako primalac živi u stranoj zemlji"
+
+#. module: l10n_be_hr_payroll
+#: view:hr.employee:0
+msgid "if spouse has professionnel income or not"
+msgstr "Ako supružnik ima prihod ili ne"
+
+#. module: l10n_be_hr_payroll
+#: view:hr.contract:0
+msgid "Miscellaneous"
+msgstr "Razno"
+
+#. module: l10n_be_hr_payroll
+#: field:hr.contract,insurance_employee_deduction:0
+msgid "Insurance Group - by worker "
+msgstr "Osiguranička grupa - po radniku "
+
+#. module: l10n_be_hr_payroll
+#: selection:hr.employee,spouse_fiscal_status:0
+msgid "With Income"
+msgstr "Sa primanjima"
+
+#. module: l10n_be_hr_payroll
+#: selection:hr.employee,spouse_fiscal_status:0
+msgid "Without Income"
+msgstr "Bez primanja"
+
+#. module: l10n_be_hr_payroll
+#: field:hr.employee,disabled_children_number:0
+msgid "Number of disabled children"
+msgstr "Broj nevažeće dece"
+
+#. module: l10n_be_hr_payroll
+#: field:hr.contract,additional_net_amount:0
+msgid "Net supplements"
+msgstr "Neto dodaci"
+
+#. module: l10n_be_hr_payroll
+#: constraint:hr.employee:0
+msgid "Error ! You cannot create recursive Hierarchy of Employees."
+msgstr "Greška ! Ne možete praviti rekurzivnu hijerarhiju zaposlenih."
+
+#. module: l10n_be_hr_payroll
+#: field:hr.contract,car_company_amount:0
+msgid "Company car employer"
+msgstr "Nadređeni za vozila preduzeća"
+
+#. module: l10n_be_hr_payroll
+#: field:hr.contract,misc_advantage_amount:0
+msgid "Benefits of various nature "
+msgstr "Prihodi razne prirode "
+
+#. module: l10n_be_hr_payroll
+#: field:hr.contract,car_employee_deduction:0
+msgid "Company Car Deduction for Worker"
+msgstr "Odšteta preduzeća za vozila za radnika"
+
+#. module: l10n_be_hr_payroll
+#: field:hr.employee,disabled_children_bool:0
+msgid "Disabled Children"
+msgstr "Nevažeća deca"
+
+#. module: l10n_be_hr_payroll
+#: model:ir.model,name:l10n_be_hr_payroll.model_hr_contract
+msgid "Contract"
+msgstr "Ugovor"
+
+#. module: l10n_be_hr_payroll
+#: field:hr.contract,meal_voucher_amount:0
+msgid "Check Value Meal "
+msgstr "Vrednost toplog obroka "
+
+#. module: l10n_be_hr_payroll
+#: field:hr.contract,travel_reimbursement_amount:0
+msgid "Reimbursement of travel expenses"
+msgstr "Refundacija putnih troškova"
+
+#. module: l10n_be_hr_payroll
+#: constraint:hr.contract:0
+msgid "Error! contract start-date must be lower then contract end-date."
+msgstr "Greška! datum početka ugovora mora da bude pre datuma završetka."
+
+#. module: l10n_be_hr_payroll
+#: field:hr.employee,spouse_fiscal_status:0
+msgid "Tax status for spouse"
+msgstr "stanje poreza za supružnika"
+
+#. module: l10n_be_hr_payroll
+#: view:hr.contract:0
+msgid "by Worker"
+msgstr "po radniku"
+
+#. module: l10n_be_hr_payroll
+#: view:hr.employee:0
+msgid "number of dependent children declared as disabled"
+msgstr "broj zavisne dece proglašene nevažećim"
+
+#. module: l10n_be_hr_payroll
+#: field:hr.contract,meal_voucher_employee_deduction:0
+msgid "Check Value Meal - by worker "
+msgstr "Vrednost toplog obroka - po radniku "
diff --git a/addons/l10n_be_invoice_bba/i18n/ar.po b/addons/l10n_be_invoice_bba/i18n/ar.po
new file mode 100644
index 00000000000..7a25ed89c7b
--- /dev/null
+++ b/addons/l10n_be_invoice_bba/i18n/ar.po
@@ -0,0 +1,141 @@
+# Arabic translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-06 07:45+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Arabic \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: l10n_be_invoice_bba
+#: sql_constraint:account.invoice:0
+msgid "Invoice Number must be unique per Company!"
+msgstr ""
+
+#. module: l10n_be_invoice_bba
+#: model:ir.model,name:l10n_be_invoice_bba.model_account_invoice
+msgid "Invoice"
+msgstr "فاتورة"
+
+#. module: l10n_be_invoice_bba
+#: constraint:res.partner:0
+msgid "Error ! You cannot create recursive associated members."
+msgstr "خطأ ! لا يمكنك إنشاء أعضاء مرتبطين و متداخلين."
+
+#. module: l10n_be_invoice_bba
+#: constraint:account.invoice:0
+msgid "Invalid BBA Structured Communication !"
+msgstr ""
+
+#. module: l10n_be_invoice_bba
+#: selection:res.partner,out_inv_comm_algorithm:0
+msgid "Random"
+msgstr "عشوائي"
+
+#. module: l10n_be_invoice_bba
+#: help:res.partner,out_inv_comm_type:0
+msgid "Select Default Communication Type for Outgoing Invoices."
+msgstr ""
+
+#. module: l10n_be_invoice_bba
+#: help:res.partner,out_inv_comm_algorithm:0
+msgid ""
+"Select Algorithm to generate the Structured Communication on Outgoing "
+"Invoices."
+msgstr ""
+
+#. module: l10n_be_invoice_bba
+#: code:addons/l10n_be_invoice_bba/invoice.py:114
+#: code:addons/l10n_be_invoice_bba/invoice.py:140
+#, python-format
+msgid ""
+"The daily maximum of outgoing invoices with an automatically generated BBA "
+"Structured Communications has been exceeded!\n"
+"Please create manually a unique BBA Structured Communication."
+msgstr ""
+
+#. module: l10n_be_invoice_bba
+#: code:addons/l10n_be_invoice_bba/invoice.py:155
+#, python-format
+msgid "Error!"
+msgstr "خطأ!"
+
+#. module: l10n_be_invoice_bba
+#: code:addons/l10n_be_invoice_bba/invoice.py:126
+#, python-format
+msgid ""
+"The Partner should have a 3-7 digit Reference Number for the generation of "
+"BBA Structured Communications!\n"
+"Please correct the Partner record."
+msgstr ""
+
+#. module: l10n_be_invoice_bba
+#: code:addons/l10n_be_invoice_bba/invoice.py:113
+#: code:addons/l10n_be_invoice_bba/invoice.py:125
+#: code:addons/l10n_be_invoice_bba/invoice.py:139
+#: code:addons/l10n_be_invoice_bba/invoice.py:167
+#: code:addons/l10n_be_invoice_bba/invoice.py:177
+#: code:addons/l10n_be_invoice_bba/invoice.py:202
+#, python-format
+msgid "Warning!"
+msgstr "تحذير!"
+
+#. module: l10n_be_invoice_bba
+#: selection:res.partner,out_inv_comm_algorithm:0
+msgid "Customer Reference"
+msgstr "مرجع العميل"
+
+#. module: l10n_be_invoice_bba
+#: field:res.partner,out_inv_comm_type:0
+msgid "Communication Type"
+msgstr "نوع الاتصال"
+
+#. module: l10n_be_invoice_bba
+#: code:addons/l10n_be_invoice_bba/invoice.py:178
+#: code:addons/l10n_be_invoice_bba/invoice.py:203
+#, python-format
+msgid ""
+"The BBA Structured Communication has already been used!\n"
+"Please create manually a unique BBA Structured Communication."
+msgstr ""
+
+#. module: l10n_be_invoice_bba
+#: selection:res.partner,out_inv_comm_algorithm:0
+msgid "Date"
+msgstr "التاريخ"
+
+#. module: l10n_be_invoice_bba
+#: model:ir.model,name:l10n_be_invoice_bba.model_res_partner
+msgid "Partner"
+msgstr "الشريك"
+
+#. module: l10n_be_invoice_bba
+#: code:addons/l10n_be_invoice_bba/invoice.py:156
+#, python-format
+msgid ""
+"Unsupported Structured Communication Type Algorithm '%s' !\n"
+"Please contact your OpenERP support channel."
+msgstr ""
+
+#. module: l10n_be_invoice_bba
+#: field:res.partner,out_inv_comm_algorithm:0
+msgid "Communication Algorithm"
+msgstr ""
+
+#. module: l10n_be_invoice_bba
+#: code:addons/l10n_be_invoice_bba/invoice.py:168
+#, python-format
+msgid ""
+"Empty BBA Structured Communication!\n"
+"Please fill in a unique BBA Structured Communication."
+msgstr ""
diff --git a/addons/l10n_br/static/src/img/icon.png b/addons/l10n_br/static/src/img/icon.png
new file mode 100644
index 00000000000..d00cbc2de18
Binary files /dev/null and b/addons/l10n_br/static/src/img/icon.png differ
diff --git a/addons/l10n_ca/i18n/sr@latin.po b/addons/l10n_ca/i18n/sr@latin.po
index 26cb937e6ac..b60a3ef1e06 100644
--- a/addons/l10n_ca/i18n/sr@latin.po
+++ b/addons/l10n_ca/i18n/sr@latin.po
@@ -8,45 +8,45 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2010-08-02 21:08+0000\n"
-"PO-Revision-Date: 2010-12-10 17:50+0000\n"
+"PO-Revision-Date: 2012-04-06 13:59+0000\n"
"Last-Translator: Milan Milosevic \n"
"Language-Team: Serbian latin \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:56+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: l10n_ca
#: model:account.account.type,name:l10n_ca.account_type_receivable
msgid "Receivable"
-msgstr ""
+msgstr "Potraživanja"
#. module: l10n_ca
#: model:account.account.type,name:l10n_ca.acct_type_asset_view
msgid "Asset View"
-msgstr ""
+msgstr "Pregled sredstava"
#. module: l10n_ca
#: model:ir.module.module,description:l10n_ca.module_meta_information
msgid ""
"This is the module to manage the canadian accounting chart in OpenERP."
-msgstr ""
+msgstr "Ovo je modul za podešavanja kanadske obračunske tabele u OpenERP-u."
#. module: l10n_ca
#: model:account.account.type,name:l10n_ca.acct_type_expense_view
msgid "Expense View"
-msgstr ""
+msgstr "Pregled troškova"
#. module: l10n_ca
#: constraint:account.account.template:0
msgid "Error ! You can not create recursive account templates."
-msgstr ""
+msgstr "Greška ! Ne možete praviti rekurzivne obrasce naloga."
#. module: l10n_ca
#: model:account.account.type,name:l10n_ca.acct_type_income_view
msgid "Income View"
-msgstr ""
+msgstr "Pregled prihoda"
#. module: l10n_ca
#: model:ir.module.module,shortdesc:l10n_ca.module_meta_information
@@ -56,17 +56,17 @@ msgstr "Kanada - Tabela Nalogâ"
#. module: l10n_ca
#: constraint:account.account.type:0
msgid "Error ! You can not create recursive types."
-msgstr ""
+msgstr "Greška ! Ne možete praviti rekurzivne tipove."
#. module: l10n_ca
#: model:account.account.type,name:l10n_ca.account_type_tax
msgid "Tax"
-msgstr ""
+msgstr "Porez"
#. module: l10n_ca
#: model:account.account.type,name:l10n_ca.account_type_cash
msgid "Cash"
-msgstr ""
+msgstr "Gotovina"
#. module: l10n_ca
#: model:ir.actions.todo,note:l10n_ca.config_call_account_template_ca
@@ -79,43 +79,50 @@ msgid ""
"Management/Configuration/Financial Accounting/Financial Accounts/Generate "
"Chart of Accounts from a Chart Template."
msgstr ""
+"Generiše tabelu računâ iz šablona tabelâ. Bićete upitani za ime kompanije, "
+"šablon tabelâ koji ćete pratiti, broj cifara za generisanje koda za Vaše "
+"naloge i bankovni račun, valuta za pravljenje dnevnika. Na taj način se "
+"generiše čista kopija šablona tabelâ.\n"
+"\tTo je isti setup wizard koji se pokreće iz Financial "
+"Management/Configuration/Financial Accounting/Financial Accounts/Generate "
+"Chart of Accounts from a Chart Template."
#. module: l10n_ca
#: model:account.account.type,name:l10n_ca.account_type_payable
msgid "Payable"
-msgstr ""
+msgstr "Plativo"
#. module: l10n_ca
#: model:account.account.type,name:l10n_ca.account_type_asset
msgid "Asset"
-msgstr ""
+msgstr "Sredstvo"
#. module: l10n_ca
#: model:account.account.type,name:l10n_ca.account_type_equity
msgid "Equity"
-msgstr ""
+msgstr "Kapital"
#. module: l10n_ca
#: constraint:account.tax.code.template:0
msgid "Error ! You can not create recursive Tax Codes."
-msgstr ""
+msgstr "Greška ! Ne možete praviti rekurzivne porezne kodove."
#. module: l10n_ca
#: model:account.account.type,name:l10n_ca.acct_type_liability_view
msgid "Liability View"
-msgstr ""
+msgstr "Pregled odgovornosti"
#. module: l10n_ca
#: model:account.account.type,name:l10n_ca.account_type_expense
msgid "Expense"
-msgstr ""
+msgstr "Trošak"
#. module: l10n_ca
#: model:account.account.type,name:l10n_ca.account_type_income
msgid "Income"
-msgstr ""
+msgstr "Prihod"
#. module: l10n_ca
#: model:account.account.type,name:l10n_ca.account_type_view
msgid "View"
-msgstr ""
+msgstr "Pregled"
diff --git a/addons/l10n_ca/static/src/img/icon.png b/addons/l10n_ca/static/src/img/icon.png
new file mode 100644
index 00000000000..ab85ec08cad
Binary files /dev/null and b/addons/l10n_ca/static/src/img/icon.png differ
diff --git a/addons/l10n_ch/static/src/img/icon.png b/addons/l10n_ch/static/src/img/icon.png
new file mode 100644
index 00000000000..c59e295f733
Binary files /dev/null and b/addons/l10n_ch/static/src/img/icon.png differ
diff --git a/addons/l10n_cn/static/src/img/icon.png b/addons/l10n_cn/static/src/img/icon.png
new file mode 100644
index 00000000000..9f8b4655632
Binary files /dev/null and b/addons/l10n_cn/static/src/img/icon.png differ
diff --git a/addons/l10n_cr/static/src/img/icon.png b/addons/l10n_cr/static/src/img/icon.png
new file mode 100644
index 00000000000..832f576e77e
Binary files /dev/null and b/addons/l10n_cr/static/src/img/icon.png differ
diff --git a/addons/l10n_de/static/src/img/icon.png b/addons/l10n_de/static/src/img/icon.png
new file mode 100644
index 00000000000..e5814496231
Binary files /dev/null and b/addons/l10n_de/static/src/img/icon.png differ
diff --git a/addons/l10n_ec/static/src/img/icon.png b/addons/l10n_ec/static/src/img/icon.png
new file mode 100644
index 00000000000..ae49151db1e
Binary files /dev/null and b/addons/l10n_ec/static/src/img/icon.png differ
diff --git a/addons/l10n_es/static/src/img/icon.png b/addons/l10n_es/static/src/img/icon.png
new file mode 100644
index 00000000000..d7f101e8ca3
Binary files /dev/null and b/addons/l10n_es/static/src/img/icon.png differ
diff --git a/addons/l10n_fr/static/src/img/icon.png b/addons/l10n_fr/static/src/img/icon.png
new file mode 100644
index 00000000000..bbcaa4fcce7
Binary files /dev/null and b/addons/l10n_fr/static/src/img/icon.png differ
diff --git a/addons/l10n_fr_rib/i18n/ar.po b/addons/l10n_fr_rib/i18n/ar.po
new file mode 100644
index 00000000000..ea0fe893eb1
--- /dev/null
+++ b/addons/l10n_fr_rib/i18n/ar.po
@@ -0,0 +1,131 @@
+# Arabic translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-06 07:35+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Arabic \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: l10n_fr_rib
+#: constraint:res.partner.bank:0
+msgid ""
+"\n"
+"Please define BIC/Swift code on bank for bank type IBAN Account to make "
+"valid payments"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
+msgid "RIB and optional IBAN"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: field:res.partner.bank,rib_acc_number:0
+msgid "RIB account number"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: field:res.partner.bank,bank_code:0
+msgid "Bank Code"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: code:addons/l10n_fr_rib/bank.py:54
+#, python-format
+msgid "The RIB key %s does not correspond to the other codes: %s %s %s."
+msgstr ""
+
+#. module: l10n_fr_rib
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
+msgid "office"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: field:res.bank,rib_code:0
+msgid "RIB Bank Code"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: code:addons/l10n_fr_rib/bank.py:58
+#, python-format
+msgid "The IBAN %s is not valid."
+msgstr ""
+
+#. module: l10n_fr_rib
+#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
+msgid "Bank Accounts"
+msgstr "الحسابات المصرفية"
+
+#. module: l10n_fr_rib
+#: field:res.partner.bank,office:0
+msgid "Office Code"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
+msgid "bank_bic"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field
+msgid "bank_code"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
+msgid "key"
+msgstr "مفتاح"
+
+#. module: l10n_fr_rib
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_rib_acc_number_field
+msgid "rib_acc_number"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: help:res.partner.bank,key:0
+msgid ""
+"The key is a number allowing to check the correctness of the other codes."
+msgstr ""
+
+#. module: l10n_fr_rib
+#: field:res.partner.bank,key:0
+msgid "Key"
+msgstr "مفتاح"
+
+#. module: l10n_fr_rib
+#: code:addons/l10n_fr_rib/bank.py:53
+#: code:addons/l10n_fr_rib/bank.py:58
+#, python-format
+msgid "Error"
+msgstr "خطأ"
+
+#. module: l10n_fr_rib
+#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
+msgid "%(bank_name)s: %(bank_code)s %(office)s %(rib_acc_number)s %(key)s"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: constraint:res.partner.bank:0
+msgid "The RIB and/or IBAN is not valid"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: model:ir.model,name:l10n_fr_rib.model_res_bank
+msgid "Bank"
+msgstr "مصرف"
+
+#. module: l10n_fr_rib
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
+msgid "acc_number"
+msgstr "acc_number"
diff --git a/addons/l10n_gr/static/src/img/icon.png b/addons/l10n_gr/static/src/img/icon.png
new file mode 100644
index 00000000000..3267e7c6f39
Binary files /dev/null and b/addons/l10n_gr/static/src/img/icon.png differ
diff --git a/addons/l10n_gt/static/src/img/icon.png b/addons/l10n_gt/static/src/img/icon.png
new file mode 100644
index 00000000000..94edcd1eabe
Binary files /dev/null and b/addons/l10n_gt/static/src/img/icon.png differ
diff --git a/addons/l10n_hn/static/src/img/icon.png b/addons/l10n_hn/static/src/img/icon.png
new file mode 100644
index 00000000000..cd2e26ad427
Binary files /dev/null and b/addons/l10n_hn/static/src/img/icon.png differ
diff --git a/addons/l10n_in/static/src/img/icon.png b/addons/l10n_in/static/src/img/icon.png
new file mode 100644
index 00000000000..ddaf38f8b6d
Binary files /dev/null and b/addons/l10n_in/static/src/img/icon.png differ
diff --git a/addons/l10n_it/static/src/img/icon.png b/addons/l10n_it/static/src/img/icon.png
new file mode 100644
index 00000000000..2aa4dd28bdc
Binary files /dev/null and b/addons/l10n_it/static/src/img/icon.png differ
diff --git a/addons/l10n_lu/static/src/img/icon.png b/addons/l10n_lu/static/src/img/icon.png
new file mode 100644
index 00000000000..b656d945be1
Binary files /dev/null and b/addons/l10n_lu/static/src/img/icon.png differ
diff --git a/addons/l10n_ma/security/compta_security.xml b/addons/l10n_ma/security/compta_security.xml
index bcde4d188b2..8d511ae7154 100644
--- a/addons/l10n_ma/security/compta_security.xml
+++ b/addons/l10n_ma/security/compta_security.xml
@@ -2,6 +2,7 @@
Finance / Expert Comptable
+
diff --git a/addons/l10n_ma/static/src/img/icon.png b/addons/l10n_ma/static/src/img/icon.png
new file mode 100644
index 00000000000..6bd7c5362b6
Binary files /dev/null and b/addons/l10n_ma/static/src/img/icon.png differ
diff --git a/addons/l10n_mx/static/src/img/icon.png b/addons/l10n_mx/static/src/img/icon.png
new file mode 100644
index 00000000000..531a78ed9d8
Binary files /dev/null and b/addons/l10n_mx/static/src/img/icon.png differ
diff --git a/addons/l10n_nl/static/src/img/icon.png b/addons/l10n_nl/static/src/img/icon.png
new file mode 100644
index 00000000000..48485f76ec0
Binary files /dev/null and b/addons/l10n_nl/static/src/img/icon.png differ
diff --git a/addons/l10n_pe/static/src/img/icon.png b/addons/l10n_pe/static/src/img/icon.png
new file mode 100644
index 00000000000..e71af2a4566
Binary files /dev/null and b/addons/l10n_pe/static/src/img/icon.png differ
diff --git a/addons/l10n_pl/static/src/img/icon.png b/addons/l10n_pl/static/src/img/icon.png
new file mode 100644
index 00000000000..7be06bbe532
Binary files /dev/null and b/addons/l10n_pl/static/src/img/icon.png differ
diff --git a/addons/l10n_ro/static/src/img/icon.png b/addons/l10n_ro/static/src/img/icon.png
new file mode 100644
index 00000000000..7ba9c1019cd
Binary files /dev/null and b/addons/l10n_ro/static/src/img/icon.png differ
diff --git a/addons/l10n_syscohada/i18n/ar.po b/addons/l10n_syscohada/i18n/ar.po
new file mode 100644
index 00000000000..ac3539dbc27
--- /dev/null
+++ b/addons/l10n_syscohada/i18n/ar.po
@@ -0,0 +1,115 @@
+# Arabic translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-12-23 09:56+0000\n"
+"PO-Revision-Date: 2012-04-06 07:46+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Arabic \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_receivable
+msgid "Receivable"
+msgstr "الدائنون"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_stocks
+msgid "Actif circulant"
+msgstr ""
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_commitment
+msgid "Engagements"
+msgstr ""
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_expense
+msgid "Expense"
+msgstr "مصروف"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_stock
+msgid "Stocks"
+msgstr "الأسهم"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_provision
+msgid "Provisions"
+msgstr ""
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_income
+msgid "Income"
+msgstr "الدخل"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_tax
+msgid "Tax"
+msgstr "ضريبة"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_cash
+msgid "Cash"
+msgstr "نقدي"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_immobilisations
+msgid "Immobilisations"
+msgstr ""
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_special
+msgid "Comptes spéciaux"
+msgstr ""
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_payable
+msgid "Payable"
+msgstr "مدفوعات"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_asset
+msgid "Asset"
+msgstr "أصل"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_view
+msgid "View"
+msgstr "عرض"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_equity
+msgid "Equity"
+msgstr ""
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_cloture
+msgid "Cloture"
+msgstr ""
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_dettes
+msgid "Dettes long terme"
+msgstr ""
+
+#. module: l10n_syscohada
+#: model:ir.actions.todo,note:l10n_syscohada.config_call_account_template_syscohada
+msgid ""
+"Generate Chart of Accounts from a SYSCOHADA Chart Template. You will be "
+"asked to pass the name of the company, the chart template to follow, the no. "
+"of digits to generate the code for your accounts and Bank account, currency "
+"to create Journals. Thus,the pure copy of chart Template is generated.\n"
+"\tThis is the same wizard that runs from Financial "
+"Management/Configuration/Financial Accounting/Financial Accounts/Generate "
+"Chart of Accounts from a Chart Template."
+msgstr ""
diff --git a/addons/l10n_th/static/src/img/icon.png b/addons/l10n_th/static/src/img/icon.png
new file mode 100644
index 00000000000..2b00b9b9109
Binary files /dev/null and b/addons/l10n_th/static/src/img/icon.png differ
diff --git a/addons/l10n_uk/static/src/img/icon.png b/addons/l10n_uk/static/src/img/icon.png
new file mode 100644
index 00000000000..7842d579341
Binary files /dev/null and b/addons/l10n_uk/static/src/img/icon.png differ
diff --git a/addons/l10n_us/static/src/img/icon.png b/addons/l10n_us/static/src/img/icon.png
new file mode 100644
index 00000000000..8b7fd408ac3
Binary files /dev/null and b/addons/l10n_us/static/src/img/icon.png differ
diff --git a/addons/l10n_uy/static/src/img/icon.png b/addons/l10n_uy/static/src/img/icon.png
new file mode 100644
index 00000000000..090d65271b7
Binary files /dev/null and b/addons/l10n_uy/static/src/img/icon.png differ
diff --git a/addons/l10n_ve/static/src/img/icon.png b/addons/l10n_ve/static/src/img/icon.png
new file mode 100644
index 00000000000..e102f5381de
Binary files /dev/null and b/addons/l10n_ve/static/src/img/icon.png differ
diff --git a/addons/lunch/i18n/cs.po b/addons/lunch/i18n/cs.po
index 7acbefc9e2c..01a5d3b3152 100644
--- a/addons/lunch/i18n/cs.po
+++ b/addons/lunch/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
-"PO-Revision-Date: 2011-09-05 06:39+0000\n"
+"PO-Revision-Date: 2012-04-06 06:39+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 07:07+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: lunch
@@ -25,7 +25,7 @@ msgstr "Nulovat pokladnu"
#. module: lunch
#: view:report.lunch.amount:0
msgid "Box amount in current year"
-msgstr ""
+msgstr "Částka pokladny v aktuálním roce"
#. module: lunch
#: model:ir.actions.act_window,name:lunch.action_lunch_order_form
@@ -96,6 +96,8 @@ msgid ""
"You can create on cashbox by employee if you want to keep track of the "
"amount due by employee according to what have been ordered."
msgstr ""
+"Můžete vytvořit pokladu podle zaměstnance, pokud chcete udržet přehled o "
+"dlužených částkách podle zaměstnance podle toho co si objednal."
#. module: lunch
#: field:lunch.cashmove,amount:0 field:report.lunch.amount,amount:0
@@ -151,7 +153,7 @@ msgstr "Stav"
#. module: lunch
#: selection:lunch.order,state:0
msgid "New"
-msgstr ""
+msgstr "Nový"
#. module: lunch
#: field:report.lunch.order,price_total:0
@@ -181,7 +183,7 @@ msgstr "Popis objednávky"
#. module: lunch
#: view:report.lunch.amount:0
msgid "Box amount in last month"
-msgstr ""
+msgstr "Částka pokladny v minulém měsíci"
#. module: lunch
#: model:ir.actions.act_window,name:lunch.action_lunch_order_confirm
@@ -233,7 +235,7 @@ msgstr "Pohyb hotovosti"
#. module: lunch
#: view:report.lunch.order:0
msgid "Tasks performed in last 365 days"
-msgstr ""
+msgstr "Úkoly vykonané v posledních 365 dnech"
#. module: lunch
#: selection:report.lunch.amount,month:0 selection:report.lunch.order,month:0
@@ -306,6 +308,10 @@ msgid ""
"by supplier. It will be easier for the lunch manager to filter lunch orders "
"by categories."
msgstr ""
+"Určuje všechny výrobky, které zaměstnanci mohou objednat pro obědový čas. "
+"Pokud si objednáte oběd na více místech, můžete použít kategorie výrobků pro "
+"rozdělení dodavatelů. Bude pak jednodušší pro správce obědů filtrovat "
+"objednávky obědů podle kategorie."
#. module: lunch
#: selection:report.lunch.amount,month:0 selection:report.lunch.order,month:0
@@ -398,7 +404,7 @@ msgstr "Nastavit pokladnu na nulu"
#. module: lunch
#: view:lunch.product:0
msgid "General Information"
-msgstr ""
+msgstr "Obecné informace"
#. module: lunch
#: view:lunch.order.confirm:0
@@ -480,7 +486,7 @@ msgstr "Celková částka"
#. module: lunch
#: view:report.lunch.order:0
msgid "Tasks performed in last 30 days"
-msgstr ""
+msgstr "Úkoly vykonané v posledních 30 dnech"
#. module: lunch
#: view:lunch.category:0
@@ -507,17 +513,17 @@ msgstr "Obědnávka obědu"
#. module: lunch
#: view:report.lunch.amount:0
msgid "Box amount in current month"
-msgstr ""
+msgstr "Obsah pokladny v aktuálním měsíci"
#. module: lunch
#: model:ir.actions.act_window,name:lunch.view_lunch_product_form_installer
msgid "Define Your Lunch Products"
-msgstr ""
+msgstr "Určete vaše obědové výrobky"
#. module: lunch
#: view:report.lunch.order:0
msgid "Tasks during last 7 days"
-msgstr ""
+msgstr "Úkoly během posledních 7 dní"
#. module: lunch
#: model:ir.actions.act_window,name:lunch.action_report_lunch_amount_tree
@@ -549,7 +555,7 @@ msgstr "Rok"
#. module: lunch
#: model:ir.actions.act_window,name:lunch.action_create_cashbox
msgid "Create Lunch Cash Boxes"
-msgstr ""
+msgstr "Vytvořit obědové pokladny"
#~ msgid ""
#~ "\n"
diff --git a/addons/lunch/security/lunch_security.xml b/addons/lunch/security/lunch_security.xml
index 7d665c96435..46293a97561 100644
--- a/addons/lunch/security/lunch_security.xml
+++ b/addons/lunch/security/lunch_security.xml
@@ -10,6 +10,7 @@
Manager
+
diff --git a/addons/mail/__init__.py b/addons/mail/__init__.py
index 4787883ef9c..d9835f86fc5 100644
--- a/addons/mail/__init__.py
+++ b/addons/mail/__init__.py
@@ -21,7 +21,11 @@
import mail_message
import mail_thread
+import mail_group
+import mail_subscription
+import res_users
import res_partner
+import report
import wizard
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/mail/__openerp__.py b/addons/mail/__openerp__.py
index 8085d301364..88e932299e1 100644
--- a/addons/mail/__openerp__.py
+++ b/addons/mail/__openerp__.py
@@ -56,16 +56,41 @@ The main features are:
'website': 'http://www.openerp.com',
'depends': ['base', 'base_tools'],
'data': [
- "wizard/mail_compose_message_view.xml",
- "mail_message_view.xml",
- "mail_thread_view.xml",
- "res_partner_view.xml",
+ 'wizard/mail_compose_message_view.xml',
+ 'mail_message_view.xml',
+ 'mail_subscription_view.xml',
+ 'mail_thread_view.xml',
+ 'mail_group_view.xml',
+ 'res_partner_view.xml',
+ 'report/mail_message_report_view.xml',
+ 'security/mail_security.xml',
'security/ir.model.access.csv',
'mail_data.xml',
+ 'res_users_view.xml',
],
'installable': True,
'auto_install': False,
'certificate': '001056784984222247309',
- 'images': ['images/customer_history.jpeg','images/messages_form.jpeg','images/messages_list.jpeg'],
+ 'images': [
+ 'images/customer_history.jpeg',
+ 'images/messages_form.jpeg',
+ 'images/messages_list.jpeg',
+ 'static/src/img/email_icong.png',
+ 'static/src/img/_al.png',
+ 'static/src/img/_pincky.png',
+ 'static/src/img/feeds.png',
+ 'static/src/img/feeds-hover.png',
+ 'static/src/img/groupdefault.png',
+ ],
+ 'css': [
+ 'static/src/css/mail.css',
+ 'static/src/css/mail_group.css',
+ ],
+ 'js': [
+ 'static/src/js/mail.js',
+ ],
+ 'qweb': [
+ 'static/src/xml/mail.xml',
+ ],
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/mail/doc/index.rst b/addons/mail/doc/index.rst
new file mode 100644
index 00000000000..b9217c42443
--- /dev/null
+++ b/addons/mail/doc/index.rst
@@ -0,0 +1,6 @@
+:orphan:
+
+Mail module documentation
+=========================
+
+.. include:: index.rst.inc
diff --git a/addons/mail/doc/index.rst.inc b/addons/mail/doc/index.rst.inc
new file mode 100644
index 00000000000..700c91c7d4f
--- /dev/null
+++ b/addons/mail/doc/index.rst.inc
@@ -0,0 +1,8 @@
+
+Mail Module
+'''''''''''
+
+.. toctree::
+ :maxdepth: 1
+
+ mail_thread
diff --git a/addons/mail/doc/mail_thread.rst b/addons/mail/doc/mail_thread.rst
new file mode 100644
index 00000000000..f21d66da295
--- /dev/null
+++ b/addons/mail/doc/mail_thread.rst
@@ -0,0 +1,23 @@
+.. _mail_thread:
+
+OpenChatter
+===========
+
+TODO
+
+mail.group
+++++++++++
+
+A mail_group is a collection of users sharing messages in a discussion group. Group users are users that follow the mail group, using the subscription/follow mechanism of OpenSocial. A mail group has nothing in common wih res.users.group.
+Additional information on fields:
+ - ``member_ids``: user member of the groups are calculated with ``message_get_subscribers`` method from mail.thread
+ - ``member_count``: calculated with member_ids
+ - ``is_subscriber``: calculated with member_ids
+
+res.users
++++++++++
+
+OpenChatter updates the res.users class:
+ - it adds a preference about sending emails when receiving a notification
+ - make a new user follow itself automatically
+ - create a welcome message when creating a new user, to make his arrival in OpenERP more friendly
diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py
new file mode 100644
index 00000000000..0a8677d7862
--- /dev/null
+++ b/addons/mail/mail_group.py
@@ -0,0 +1,138 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2010-today OpenERP SA ()
+#
+# 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 datetime as DT
+import io
+import openerp
+import openerp.tools as tools
+from operator import itemgetter
+from osv import osv
+from osv import fields
+from PIL import Image
+import StringIO
+import tools
+from tools.translate import _
+
+class mail_group(osv.osv):
+ """
+ A mail_group is a collection of users sharing messages in a discussion
+ group. Group users are users that follow the mail group, using the
+ subscription/follow mechanism of OpenSocial. A mail group has nothing
+ in common wih res.users.group.
+ Additional information on fields:
+ - ``member_ids``: user member of the groups are calculated with
+ ``message_get_subscribers`` method from mail.thread
+ - ``member_count``: calculated with member_ids
+ - ``is_subscriber``: calculated with member_ids
+
+ """
+
+ _description = 'Discussion group'
+ _name = 'mail.group'
+ _inherit = ['mail.thread']
+
+ def action_group_join(self, cr, uid, ids, context={}):
+ return self.message_subscribe(cr, uid, ids, context=context);
+
+ def action_group_leave(self, cr, uid, ids, context={}):
+ return self.message_unsubscribe(cr, uid, ids, context=context);
+
+ def onchange_photo(self, cr, uid, ids, value, context=None):
+ if not value:
+ return {'value': {'avatar_big': value, 'avatar': value} }
+ return {'value': {'photo_big': value, 'photo': self._photo_resize(cr, uid, value) } }
+
+ def _set_photo(self, cr, uid, id, name, value, args, context=None):
+ if value:
+ return self.write(cr, uid, [id], {'photo_big': value}, context=context)
+ else:
+ return self.write(cr, uid, [id], {'photo_big': value}, context=context)
+
+ def _photo_resize(self, cr, uid, photo, width=128, height=128, context=None):
+ image_stream = io.BytesIO(photo.decode('base64'))
+ img = Image.open(image_stream)
+ img.thumbnail((width, height), Image.ANTIALIAS)
+ img_stream = StringIO.StringIO()
+ img.save(img_stream, "JPEG")
+ return img_stream.getvalue().encode('base64')
+
+ def _get_photo(self, cr, uid, ids, name, args, context=None):
+ result = dict.fromkeys(ids, False)
+ for group in self.browse(cr, uid, ids, context=context):
+ if group.photo_big:
+ result[group.id] = self._photo_resize(cr, uid, group.photo_big, context=context)
+ return result
+
+ def get_member_ids(self, cr, uid, ids, field_names, args, context=None):
+ if context is None:
+ context = {}
+ result = dict.fromkeys(ids)
+ for id in ids:
+ result[id] = {}
+ result[id]['member_ids'] = self.message_get_subscribers_ids(cr, uid, [id], context=context)
+ result[id]['member_count'] = len(result[id]['member_ids'])
+ result[id]['is_subscriber'] = uid in result[id]['member_ids']
+ return result
+
+ def search_member_ids(self, cr, uid, obj, name, args, context=None):
+ if context is None:
+ context = {}
+ sub_obj = self.pool.get('mail.subscription')
+ sub_ids = sub_obj.search(cr, uid, ['&', ('res_model', '=', obj._name), ('user_id', '=', args[0][2])], context=context)
+ subs = sub_obj.read(cr, uid, sub_ids, context=context)
+ return [('id', 'in', map(itemgetter('res_id'), subs))]
+
+ def get_last_month_msg_nbr(self, cr, uid, ids, name, args, context=None):
+ result = {}
+ message_obj = self.pool.get('mail.message')
+ for id in ids:
+ lower_date = (DT.datetime.now() - DT.timedelta(days=30)).strftime(tools.DEFAULT_SERVER_DATE_FORMAT)
+ result[id] = message_obj.search(cr, uid, ['&', '&', ('model', '=', self._name), ('res_id', 'in', ids), ('date', '>=', lower_date)], count=True, context=context)
+ return result
+
+ def _get_default_photo(self, cr, uid, context=None):
+ avatar_path = openerp.modules.get_module_resource('mail', 'static/src/img', 'groupdefault.png')
+ return self._photo_resize(cr, uid, open(avatar_path, 'rb').read().encode('base64'), context=context)
+
+ _columns = {
+ 'name': fields.char('Name', size=64, required=True),
+ 'description': fields.text('Description'),
+ 'responsible_id': fields.many2one('res.users', string='Responsible',
+ ondelete='set null', required=True, select=1,
+ help="Responsible of the group that has all rights on the record."),
+ 'public': fields.boolean('Public', help='This group is visible by non members. Invisible groups can add members through the invite button.'),
+ 'photo_big': fields.binary('Full-size photo', help='Field holding the full-sized PIL-supported and base64 encoded version of the group image. The photo field is used as an interface for this field.'),
+ 'photo': fields.function(_get_photo, fnct_inv=_set_photo, string='Photo', type="binary",
+ store = {
+ 'mail.group': (lambda self, cr, uid, ids, c={}: ids, ['photo_big'], 10),
+ }, help='Field holding the automatically resized (128x128) PIL-supported and base64 encoded version of the group image.'),
+ 'member_ids': fields.function(get_member_ids, fnct_search=search_member_ids, type='many2many',
+ relation='res.users', string='Group members', multi='get_member_ids'),
+ 'member_count': fields.function(get_member_ids, type='integer', string='Member count', multi='get_member_ids'),
+ 'is_subscriber': fields.function(get_member_ids, type='boolean', string='Joined', multi='get_member_ids'),
+ 'last_month_msg_nbr': fields.function(get_last_month_msg_nbr, type='integer', string='Messages count for last month'),
+ }
+
+ _defaults = {
+ 'public': True,
+ 'responsible_id': (lambda s, cr, uid, ctx: uid),
+ 'photo': _get_default_photo,
+ }
diff --git a/addons/mail/mail_group_view.xml b/addons/mail/mail_group_view.xml
new file mode 100644
index 00000000000..949dd1cc9b8
--- /dev/null
+++ b/addons/mail/mail_group_view.xml
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+ mail.group.kanban
+ mail.group
+ kanban
+
+
+
+
+
+
+
+
+
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index af8baa314de..dd07cbce9b2 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -200,13 +200,8 @@ class mail_compose_message(osv.osv_memory):
body = mail.body_html if mail.subtype == 'html' else mail.body_text
- # Reply Email
- if context.get('mail.compose.message.mode') == 'reply' and mail.message_id:
- references = (mail.references or '') + " " + mail.message_id
- headers['In-Reply-To'] = mail.message_id
-
+ # Get model, and check whether it is OpenChatter enabled, aka inherit from mail.thread
if context.get('mail.compose.message.mode') == 'mass_mail':
- # Mass mailing: must render the template patterns
if context.get('active_ids') and context.get('active_model'):
active_ids = context['active_ids']
active_model = context['active_model']
@@ -214,7 +209,22 @@ class mail_compose_message(osv.osv_memory):
active_model = mail.model
active_model_pool = self.pool.get(active_model)
active_ids = active_model_pool.search(cr, uid, ast.literal_eval(mail.filter_id.domain), context=ast.literal_eval(mail.filter_id.context))
+ else:
+ active_model = mail.model
+ active_ids = [int(mail.res_id)]
+ active_model_pool = self.pool.get(active_model)
+ if hasattr(active_model_pool, '_inherit') and 'mail.thread' in active_model_pool._inherit:
+ mail_thread_enabled = True
+ else:
+ mail_thread_enabled = False
+
+ # Reply Email
+ if context.get('mail.compose.message.mode') == 'reply' and mail.message_id:
+ references = (mail.references or '') + " " + mail.message_id
+ headers['In-Reply-To'] = mail.message_id
+ if context.get('mail.compose.message.mode') == 'mass_mail':
+ # Mass mailing: must render the template patterns
for active_id in active_ids:
subject = self.render_template(cr, uid, mail.subject, active_model, active_id)
rendered_body = self.render_template(cr, uid, body, active_model, active_id)
@@ -223,21 +233,33 @@ class mail_compose_message(osv.osv_memory):
email_cc = self.render_template(cr, uid, mail.email_cc, active_model, active_id)
email_bcc = self.render_template(cr, uid, mail.email_bcc, active_model, active_id)
reply_to = self.render_template(cr, uid, mail.reply_to, active_model, active_id)
-
+
# in mass-mailing mode we only schedule the mail for sending, it will be
# processed as soon as the mail scheduler runs.
- mail_message.schedule_with_attach(cr, uid, email_from, to_email(email_to), subject, rendered_body,
- model=mail.model, email_cc=to_email(email_cc), email_bcc=to_email(email_bcc), reply_to=reply_to,
- attachments=attachment, references=references, res_id=active_id,
- subtype=mail.subtype, headers=headers, context=context)
+ if mail_thread_enabled:
+ active_model_pool.message_append(cr, uid, [active_id],
+ subject, body_text=mail.body_text, body_html=mail.body_html, subtype=mail.subtype, state='outgoing',
+ email_to=email_to, email_from=email_from, email_cc=email_cc, email_bcc=email_bcc,
+ reply_to=reply_to, references=references, attachments=attachment, headers=headers, context=context)
+ else:
+ mail_message.schedule_with_attach(cr, uid, email_from, to_email(email_to), subject, rendered_body,
+ model=mail.model, email_cc=to_email(email_cc), email_bcc=to_email(email_bcc), reply_to=reply_to,
+ attachments=attachment, references=references, res_id=active_id,
+ subtype=mail.subtype, headers=headers, context=context)
else:
# normal mode - no mass-mailing
- msg_id = mail_message.schedule_with_attach(cr, uid, mail.email_from, to_email(mail.email_to), mail.subject, body,
- model=mail.model, email_cc=to_email(mail.email_cc), email_bcc=to_email(mail.email_bcc), reply_to=mail.reply_to,
- attachments=attachment, references=references, res_id=int(mail.res_id),
- subtype=mail.subtype, headers=headers, context=context)
+ if mail_thread_enabled:
+ msg_ids = active_model_pool.message_append(cr, uid, active_ids,
+ mail.subject, body_text=mail.body_text, body_html=mail.body_html, subtype=mail.subtype, state='outgoing',
+ email_to=mail.email_to, email_from=mail.email_from, email_cc=mail.email_cc, email_bcc=mail.email_bcc,
+ reply_to=mail.reply_to, references=references, attachments=attachment, headers=headers, context=context)
+ else:
+ msg_ids = [mail_message.schedule_with_attach(cr, uid, mail.email_from, to_email(mail.email_to), mail.subject, body,
+ model=mail.model, email_cc=to_email(mail.email_cc), email_bcc=to_email(mail.email_bcc), reply_to=mail.reply_to,
+ attachments=attachment, references=references, res_id=int(mail.res_id),
+ subtype=mail.subtype, headers=headers, context=context)]
# in normal mode, we send the email immediately, as the user expects us to (delay should be sufficiently small)
- mail_message.send(cr, uid, [msg_id], context=context)
+ mail_message.send(cr, uid, msg_ids, context=context)
return {'type': 'ir.actions.act_window_close'}
diff --git a/addons/marketing/i18n/cs.po b/addons/marketing/i18n/cs.po
new file mode 100644
index 00000000000..85d7867b15c
--- /dev/null
+++ b/addons/marketing/i18n/cs.po
@@ -0,0 +1,28 @@
+# Czech translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-06 05:18+0000\n"
+"Last-Translator: Jiří Hajda \n"
+"Language-Team: Czech \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: marketing
+#: model:res.groups,name:marketing.group_marketing_manager
+msgid "Manager"
+msgstr "Vedoucí"
+
+#. module: marketing
+#: model:res.groups,name:marketing.group_marketing_user
+msgid "User"
+msgstr "Uživatel"
diff --git a/addons/marketing/security/marketing_security.xml b/addons/marketing/security/marketing_security.xml
index d04473da8bf..2afc0ab3a8b 100644
--- a/addons/marketing/security/marketing_security.xml
+++ b/addons/marketing/security/marketing_security.xml
@@ -10,6 +10,7 @@
Manager
+
diff --git a/addons/mrp/__init__.py b/addons/mrp/__init__.py
index 52a5bdda77b..e0bdc06d3e3 100644
--- a/addons/mrp/__init__.py
+++ b/addons/mrp/__init__.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
@@ -26,5 +26,6 @@ import wizard
import report
import company
import procurement
+import res_config
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/mrp/__openerp__.py b/addons/mrp/__openerp__.py
index c205b58b547..bdf6f63b755 100644
--- a/addons/mrp/__openerp__.py
+++ b/addons/mrp/__openerp__.py
@@ -82,19 +82,17 @@ Dashboard provided by this module:
'process/stockable_product_process.xml',
'process/service_product_process.xml',
'process/procurement_process.xml',
- 'mrp_installer.xml',
'report/mrp_report_view.xml',
'report/mrp_production_order_view.xml',
'board_manufacturing_view.xml',
-
-
+ 'res_config_view.xml',
],
'demo_xml': [
'mrp_demo.xml',
],
'test': [
'test/order_demo.yml',
- 'test/order_process.yml',
+ 'test/order_process.yml',
'test/cancel_order.yml',
],
'installable': True,
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py
index 1f70f55e505..9ff3a648af9 100644
--- a/addons/mrp/mrp.py
+++ b/addons/mrp/mrp.py
@@ -130,6 +130,7 @@ class mrp_bom(osv.osv):
"""
_name = 'mrp.bom'
_description = 'Bill of Material'
+ _inherit = ['mail.thread']
def _child_compute(self, cr, uid, ids, name, arg, context=None):
""" Gets child bom.
@@ -358,6 +359,18 @@ class mrp_bom(osv.osv):
default.update({'name': bom_data['name'] + ' ' + _('Copy'), 'bom_id':False})
return super(mrp_bom, self).copy_data(cr, uid, id, default, context=context)
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(mrp_bom, self).create(cr, uid, vals, context=context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ prod_obj = self.pool.get('product.product')
+ for obj in self.browse(cr, uid, ids, context=context):
+ for prod in prod_obj.browse(cr, uid, [obj.product_id], context=context):
+ self.message_append_note(cr, uid, [obj.id], body=_("Bill of Material has been created for %s product.") % (prod.id.name_template), context=context)
+ return True
+
mrp_bom()
class mrp_bom_revision(osv.osv):
@@ -393,6 +406,7 @@ class mrp_production(osv.osv):
_name = 'mrp.production'
_description = 'Manufacturing Order'
_date_name = 'date_planned'
+ _inherit = ['ir.needaction_mixin', 'mail.thread']
def _production_calc(self, cr, uid, ids, prop, unknow_none, context=None):
""" Calculates total hours and total no. of cycles for a production order.
@@ -497,6 +511,11 @@ class mrp_production(osv.osv):
(_check_qty, 'Order quantity cannot be negative or zero!', ['product_qty']),
]
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(mrp_production, self).create(cr, uid, vals, context=context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
def unlink(self, cr, uid, ids, context=None):
for production in self.browse(cr, uid, ids, context=context):
if production.state not in ('draft', 'cancel'):
@@ -629,9 +648,10 @@ class mrp_production(osv.osv):
move_obj.action_cancel(cr, uid, [x.id for x in production.move_created_ids])
move_obj.action_cancel(cr, uid, [x.id for x in production.move_lines])
self.write(cr, uid, ids, {'state': 'cancel'})
+ self.action_cancel_send_note(cr, uid, ids, context)
return True
- def action_ready(self, cr, uid, ids):
+ def action_ready(self, cr, uid, ids, context=None):
""" Changes the production state to Ready and location id of stock move.
@return: True
"""
@@ -643,18 +663,18 @@ class mrp_production(osv.osv):
if production.move_prod_id:
move_obj.write(cr, uid, [production.move_prod_id.id],
{'location_id': production.location_dest_id.id})
-
- message = _("Manufacturing order '%s' is ready to produce.") % ( name,)
- self.log(cr, uid, production_id, message)
+ self.action_ready_send_note(cr, uid, [production_id], context)
return True
- def action_production_end(self, cr, uid, ids):
+ def action_production_end(self, cr, uid, ids, context=None):
""" Changes production state to Finish and writes finished date.
@return: True
"""
for production in self.browse(cr, uid, ids):
self._costs_generate(cr, uid, production)
- return self.write(cr, uid, ids, {'state': 'done', 'date_finished': time.strftime('%Y-%m-%d %H:%M:%S')})
+ write_res = self.write(cr, uid, ids, {'state': 'done', 'date_finished': time.strftime('%Y-%m-%d %H:%M:%S')})
+ self.action_done_send_note(cr, uid, ids, context)
+ return write_res
def test_production_done(self, cr, uid, ids):
""" Tests whether production is done or not.
@@ -698,7 +718,6 @@ class mrp_production(osv.osv):
if (produced_product.scrapped) or (produced_product.product_id.id <> production.product_id.id):
continue
produced_qty += produced_product.product_qty
-
if production_mode in ['consume','consume_produce']:
consumed_data = {}
@@ -819,11 +838,12 @@ class mrp_production(osv.osv):
} )
return amount
- def action_in_production(self, cr, uid, ids):
+ def action_in_production(self, cr, uid, ids, context=None):
""" Changes state to In Production and writes starting date.
@return: True
"""
self.write(cr, uid, ids, {'state': 'in_production', 'date_start': time.strftime('%Y-%m-%d %H:%M:%S')})
+ self.action_in_production_send_note(cr, uid, ids, context)
return True
def test_if_product(self, cr, uid, ids):
@@ -997,11 +1017,7 @@ class mrp_production(osv.osv):
wf_service.trg_validate(uid, 'stock.picking', shipment_id, 'button_confirm', cr)
production.write({'state':'confirmed'}, context=context)
- 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)
+ self.action_confirm_send_note(cr, uid, [production.id], context);
return shipment_id
def force_production(self, cr, uid, ids, *args):
@@ -1012,6 +1028,55 @@ class mrp_production(osv.osv):
pick_obj = self.pool.get('stock.picking')
pick_obj.force_assign(cr, uid, [prod.picking_id.id for prod in self.browse(cr, uid, ids)])
return True
+
+ # ---------------------------------------------------
+ # OpenChatter methods and notifications
+ # ---------------------------------------------------
+
+ def get_needaction_user_ids(self, cr, uid, ids, context=None):
+ result = dict.fromkeys(ids, [])
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.state == 'draft' and obj.user_id:
+ result[obj.id] = [obj.user_id.id]
+ return result
+
+ def message_get_subscribers(self, cr, uid, ids, context=None):
+ sub_ids = self.message_get_subscribers_ids(cr, uid, ids, context=context);
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.user_id:
+ sub_ids.append(obj.user_id.id)
+ return self.pool.get('res.users').read(cr, uid, sub_ids, context=context)
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Manufacturing order has been created."), context=context)
+ return True
+
+ def action_cancel_send_note(self, cr, uid, ids, context=None):
+ message = _("Manufacturing order has been canceled.")
+ self.message_append_note(cr, uid, ids, body=message, context=context)
+ return True
+
+ def action_ready_send_note(self, cr, uid, ids, context=None):
+ message = _("Manufacturing order is ready to produce.")
+ self.message_append_note(cr, uid, ids, body=message, context=context)
+ return True
+
+ def action_in_production_send_note(self, cr, uid, ids, context=None):
+ message = _("Manufacturing order is in production.")
+ self.message_append_note(cr, uid, ids, body=message, context=context)
+ return True
+
+ def action_done_send_note(self, cr, uid, ids, context=None):
+ message = _("Manufacturing order has been done.")
+ self.message_append_note(cr, uid, ids, body=message, context=context)
+ return True
+
+ def action_confirm_send_note(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids, context=context):
+ message = _("Manufacturing order has been confirmed and is scheduled for the %s.") % (obj.date_planned)
+ self.message_append_note(cr, uid, [obj.id], body=message, context=context)
+ return True
+
mrp_production()
@@ -1019,6 +1084,7 @@ class mrp_production_workcenter_line(osv.osv):
_name = 'mrp.production.workcenter.line'
_description = 'Work Order'
_order = 'sequence'
+ _inherit = ['mail.thread']
_columns = {
'name': fields.char('Work Order', size=64, required=True),
diff --git a/addons/mrp/mrp_installer.xml b/addons/mrp/mrp_installer.xml
deleted file mode 100644
index b4d4551bda8..00000000000
--- a/addons/mrp/mrp_installer.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
- MRP Management
- 6
-
-
-
- Configure your work centers
- ir.actions.act_window
- mrp.workcenter
- form,tree
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Create or Import Products
- ir.actions.act_window
- product.product
- form
- tree,form
-
- Create a product form for everything you buy or sell. Specify a supplier if the product can be purchased.
-
-
-
-
-
- 20
-
-
-
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index f96147e9344..986e1b2f754 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -105,16 +105,18 @@
+ groups="product.group_mrp_properties"
+ parent="menu_mrp_property"/>
+ groups="product.group_mrp_properties"
+ id="menu_mrp_property_group_action"/>
diff --git a/addons/mrp/wizard/change_production_qty.py b/addons/mrp/wizard/change_production_qty.py
index c41213d93b8..59370e0ff2f 100644
--- a/addons/mrp/wizard/change_production_qty.py
+++ b/addons/mrp/wizard/change_production_qty.py
@@ -70,7 +70,7 @@ class change_production_qty(osv.osv_memory):
bom_obj = self.pool.get('mrp.bom')
for wiz_qty in self.browse(cr, uid, ids, context=context):
prod = prod_obj.browse(cr, uid, record_id, context=context)
- prod_obj.write(cr, uid,prod.id, {'product_qty': wiz_qty.product_qty})
+ prod_obj.write(cr, uid, [prod.id], {'product_qty': wiz_qty.product_qty})
prod_obj.action_compute(cr, uid, [prod.id])
move_lines_obj = self.pool.get('stock.move')
diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py
index fbf307e860e..78deb68e5e7 100644
--- a/addons/mrp_operations/mrp_operations.py
+++ b/addons/mrp_operations/mrp_operations.py
@@ -156,22 +156,24 @@ class mrp_production_workcenter_line(osv.osv):
prod_obj.write(cr, uid, [prod.production_id.id], {'date_start':dstart}, context=context, mini=False)
return result
- def action_draft(self, cr, uid, ids):
+ def action_draft(self, cr, uid, ids, context=None):
""" Sets state to draft.
@return: True
"""
self.write(cr, uid, ids, {'state':'draft'})
+ self.action_draft_send_note(cr, uid, ids, context=context)
return True
- def action_start_working(self, cr, uid, ids):
+ def action_start_working(self, cr, uid, ids, context=None):
""" Sets state to start working and writes starting date.
@return: True
"""
self.modify_production_order_state(cr, uid, ids, 'start')
self.write(cr, uid, ids, {'state':'startworking', 'date_start': time.strftime('%Y-%m-%d %H:%M:%S')})
+ self.action_start_send_note(cr, uid, ids, context=context)
return True
- def action_done(self, cr, uid, ids):
+ def action_done(self, cr, uid, ids, context=None):
""" Sets state to done, writes finish date and calculates delay.
@return: True
"""
@@ -185,28 +187,76 @@ class mrp_production_workcenter_line(osv.osv):
delay += (date_finished-date_start).seconds / float(60*60)
self.write(cr, uid, ids, {'state':'done', 'date_finished': date_now,'delay':delay})
+ self.action_done_send_note(cr, uid, ids, context=context)
self.modify_production_order_state(cr,uid,ids,'done')
return True
- def action_cancel(self, cr, uid, ids):
+ def action_cancel(self, cr, uid, ids, context=None):
""" Sets state to cancel.
@return: True
"""
self.write(cr, uid, ids, {'state':'cancel'})
+ self.action_cancel_send_note(cr, uid, ids, context=context)
return True
- def action_pause(self, cr, uid, ids):
+ def action_pause(self, cr, uid, ids, context=None):
""" Sets state to pause.
@return: True
"""
self.write(cr, uid, ids, {'state':'pause'})
+ self.action_pending_send_note(cr, uid, ids, context=context)
return True
- def action_resume(self, cr, uid, ids):
+ def action_resume(self, cr, uid, ids, context=None):
""" Sets state to startworking.
@return: True
"""
self.write(cr, uid, ids, {'state':'startworking'})
+ self.action_start_send_note(cr, uid, ids, context=context)
+ return True
+
+ # -------------------------------------------------------
+ # OpenChatter methods and notifications
+ # -------------------------------------------------------
+
+ def action_draft_send_note(self, cr, uid, ids, context=None):
+ prod_obj = self.pool.get('mrp.production')
+ for workorder in self.browse(cr, uid, ids):
+ for prod in prod_obj.browse(cr, uid, [workorder.production_id]):
+ message = _("Work order has been created for production order %s.") % (prod.id.name)
+ self.message_append_note(cr, uid, [workorder.id], body=message, context=context)
+ return True
+
+ def action_start_send_note(self, cr, uid, ids, context=None):
+ prod_obj = self.pool.get('mrp.production')
+ for workorder in self.browse(cr, uid, ids):
+ for prod in prod_obj.browse(cr, uid, [workorder.production_id]):
+ message = _("Work order has been started for production order %s.") % (prod.id.name)
+ self.message_append_note(cr, uid, [workorder.id], body=message, context=context)
+ return True
+
+ def action_done_send_note(self, cr, uid, ids, context=None):
+ prod_obj = self.pool.get('mrp.production')
+ for workorder in self.browse(cr, uid, ids):
+ for prod in prod_obj.browse(cr, uid, [workorder.production_id]):
+ message = _("Work order has been done for production order %s.") % (prod.id.name)
+ self.message_append_note(cr, uid, [workorder.id], body=message, context=context)
+ return True
+
+ def action_pending_send_note(self, cr, uid, ids, context=None):
+ prod_obj = self.pool.get('mrp.production')
+ for workorder in self.browse(cr, uid, ids):
+ for prod in prod_obj.browse(cr, uid, [workorder.production_id]):
+ message = _("Work order is pending for production order %s.") % (prod.id.name)
+ self.message_append_note(cr, uid, [workorder.id], body=message, context=context)
+ return True
+
+ def action_cancel_send_note(self, cr, uid, ids, context=None):
+ prod_obj = self.pool.get('mrp.production')
+ for workorder in self.browse(cr, uid, ids):
+ for prod in prod_obj.browse(cr, uid, [workorder.production_id]):
+ message = _("Work order has been cancelled for production order %s.") % (prod.id.name)
+ self.message_append_note(cr, uid, [workorder.id], body=message, context=context)
return True
mrp_production_workcenter_line()
diff --git a/addons/mrp_operations/mrp_operations_view.xml b/addons/mrp_operations/mrp_operations_view.xml
index 00b4947122e..b588ab53b8f 100644
--- a/addons/mrp_operations/mrp_operations_view.xml
+++ b/addons/mrp_operations/mrp_operations_view.xml
@@ -118,6 +118,7 @@
+
diff --git a/addons/mrp_repair/mrp_repair_view.xml b/addons/mrp_repair/mrp_repair_view.xml
index fa0ff192f17..dd29de20f9b 100644
--- a/addons/mrp_repair/mrp_repair_view.xml
+++ b/addons/mrp_repair/mrp_repair_view.xml
@@ -118,7 +118,7 @@
diff --git a/addons/pad/i18n/cs.po b/addons/pad/i18n/cs.po
new file mode 100644
index 00000000000..16f486af859
--- /dev/null
+++ b/addons/pad/i18n/cs.po
@@ -0,0 +1,58 @@
+# Czech translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 01:37+0100\n"
+"PO-Revision-Date: 2012-04-06 06:59+0000\n"
+"Last-Translator: Jiří Hajda \n"
+"Language-Team: Czech \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: pad
+#: sql_constraint:res.company:0
+msgid "The company name must be unique !"
+msgstr "Jméno společnosti musí být jedinečné !"
+
+#. module: pad
+#: help:res.company,pad_url_template:0
+msgid "Template used to generate pad URL."
+msgstr "Šablona použitá pro generování URL bloku"
+
+#. module: pad
+#: model:ir.model,name:pad.model_res_company
+msgid "Companies"
+msgstr "Společnosti"
+
+#. module: pad
+#: constraint:res.company:0
+msgid "Error! You can not create recursive companies."
+msgstr "Chyba! Nemůžete vytvořit rekurzivní společnosti."
+
+#. module: pad
+#: model:ir.model,name:pad.model_ir_attachment
+msgid "ir.attachment"
+msgstr "ir.attachment"
+
+#. module: pad
+#: view:res.company:0
+msgid "Pad"
+msgstr "Blok"
+
+#. module: pad
+#: field:res.company,pad_url_template:0
+msgid "Pad URL Template"
+msgstr "Šablona URL bloku"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/pad/static/src/xml/pad.xml:9
+msgid "Add Pad"
+msgstr "Přidat blok"
diff --git a/addons/pad_project/i18n/ar.po b/addons/pad_project/i18n/ar.po
new file mode 100644
index 00000000000..cfb855158a6
--- /dev/null
+++ b/addons/pad_project/i18n/ar.po
@@ -0,0 +1,38 @@
+# Arabic translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-06 07:58+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Arabic \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: pad_project
+#: constraint:project.task:0
+msgid "Error ! Task end-date must be greater then task start-date"
+msgstr "خطأ ! يجب ان يكون تاريخ نهاية المهمة بعد من تاريخ البداية"
+
+#. module: pad_project
+#: model:ir.model,name:pad_project.model_project_task
+msgid "Task"
+msgstr "مهمة"
+
+#. module: pad_project
+#: view:project.task:0
+msgid "Pad"
+msgstr ""
+
+#. module: pad_project
+#: constraint:project.task:0
+msgid "Error ! You cannot create recursive tasks."
+msgstr "خطأ ! لا يمكنك انشاء مهام متداخلة."
diff --git a/addons/pad_project/i18n/cs.po b/addons/pad_project/i18n/cs.po
new file mode 100644
index 00000000000..1b47ef0abc0
--- /dev/null
+++ b/addons/pad_project/i18n/cs.po
@@ -0,0 +1,38 @@
+# Czech translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-06 06:58+0000\n"
+"Last-Translator: Jiří Hajda \n"
+"Language-Team: Czech \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: pad_project
+#: constraint:project.task:0
+msgid "Error ! Task end-date must be greater then task start-date"
+msgstr "Chyba ! Datum ukončení úkolu musí být větší než počáteční datum"
+
+#. module: pad_project
+#: model:ir.model,name:pad_project.model_project_task
+msgid "Task"
+msgstr "Úkol"
+
+#. module: pad_project
+#: view:project.task:0
+msgid "Pad"
+msgstr "Blok"
+
+#. module: pad_project
+#: constraint:project.task:0
+msgid "Error ! You cannot create recursive tasks."
+msgstr "Chyba ! Nemůžete vytvořit rekurzivní úkoly."
diff --git a/addons/plugin/i18n/ar.po b/addons/plugin/i18n/ar.po
new file mode 100644
index 00000000000..4047918f385
--- /dev/null
+++ b/addons/plugin/i18n/ar.po
@@ -0,0 +1,23 @@
+# Arabic translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-06 07:59+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Arabic \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: plugin
+#: model:ir.model,name:plugin.model_plugin_handler
+msgid "plugin.handler"
+msgstr "plugin.handler"
diff --git a/addons/plugin/i18n/cs.po b/addons/plugin/i18n/cs.po
new file mode 100644
index 00000000000..2991dd9970a
--- /dev/null
+++ b/addons/plugin/i18n/cs.po
@@ -0,0 +1,23 @@
+# Czech translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-04-06 06:59+0000\n"
+"Last-Translator: Jiří Hajda \n"
+"Language-Team: Czech \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:56+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: plugin
+#: model:ir.model,name:plugin.model_plugin_handler
+msgid "plugin.handler"
+msgstr "plugin.handler"
diff --git a/addons/plugin_outlook/plugin_outlook.xml b/addons/plugin_outlook/plugin_outlook.xml
index a267dc24e8f..2d65a09a0f9 100644
--- a/addons/plugin_outlook/plugin_outlook.xml
+++ b/addons/plugin_outlook/plugin_outlook.xml
@@ -48,11 +48,20 @@
new
-
-
-
- 4
- automatic
+
+
+ Sales Application
+ sale.config.settings
+ form
+
+
+
+
+
+
+
+
diff --git a/addons/plugin_thunderbird/i18n/cs.po b/addons/plugin_thunderbird/i18n/cs.po
index 1d669ea3dc6..8918a097082 100644
--- a/addons/plugin_thunderbird/i18n/cs.po
+++ b/addons/plugin_thunderbird/i18n/cs.po
@@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-09 00:36+0000\n"
-"PO-Revision-Date: 2010-01-25 11:49+0000\n"
-"Last-Translator: Kuvaly [LCT] \n"
+"PO-Revision-Date: 2012-04-06 06:56+0000\n"
+"Last-Translator: Jiří Hajda \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-10 04:49+0000\n"
-"X-Generator: Launchpad (build 14771)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: plugin_thunderbird
#: field:plugin_thunderbird.installer,pdf_file:0
msgid "Installation Manual"
-msgstr ""
+msgstr "Instalační příručka"
#. module: plugin_thunderbird
#: field:plugin_thunderbird.installer,description:0
@@ -30,23 +30,23 @@ msgstr "Popis"
#. module: plugin_thunderbird
#: view:plugin_thunderbird.installer:0
msgid "title"
-msgstr ""
+msgstr "nadpis"
#. module: plugin_thunderbird
#: model:ir.model,name:plugin_thunderbird.model_plugin_thunderbird_installer
msgid "plugin_thunderbird.installer"
-msgstr ""
+msgstr "plugin_thunderbird.installer"
#. module: plugin_thunderbird
#: field:plugin_thunderbird.installer,config_logo:0
msgid "Image"
-msgstr ""
+msgstr "Obrázek"
#. module: plugin_thunderbird
#: field:plugin_thunderbird.installer,plugin_file:0
#: field:plugin_thunderbird.installer,thunderbird:0
msgid "Thunderbird Plug-in"
-msgstr ""
+msgstr "Doplněk Thunderbirdu"
#. module: plugin_thunderbird
#: view:plugin_thunderbird.installer:0
@@ -54,6 +54,8 @@ msgid ""
"This plug-in allows you to link your e-mail to OpenERP's documents. You can "
"attach it to any existing one in OpenERP or create a new one."
msgstr ""
+"Doplněk vám umožní spojit váš email k dokumentům OpenERP. Můžete jej "
+"připojit k jakémukoliv existujícímu v OpenERP nebo vytvořit nový."
#. module: plugin_thunderbird
#: help:plugin_thunderbird.installer,thunderbird:0
@@ -61,27 +63,28 @@ msgid ""
"Allows you to select an object that you would like to add to your email and "
"its attachments."
msgstr ""
+"Umožní vám vybrat objekt, který chcete přidat do vašeho emailu a jeho příloh."
#. module: plugin_thunderbird
#: help:plugin_thunderbird.installer,pdf_file:0
msgid "The documentation file :- how to install Thunderbird Plug-in."
-msgstr ""
+msgstr "Dokumentační soubor :- jak instalovat doplněk Thunderbirdu"
#. module: plugin_thunderbird
#: view:plugin_thunderbird.installer:0
msgid "_Close"
-msgstr ""
+msgstr "_Zavřít"
#. module: plugin_thunderbird
#: view:plugin_thunderbird.installer:0
msgid "Installation and Configuration Steps"
-msgstr ""
+msgstr "Kroky instalace a nastavení"
#. module: plugin_thunderbird
#: field:plugin_thunderbird.installer,name:0
#: field:plugin_thunderbird.installer,pdf_name:0
msgid "File name"
-msgstr ""
+msgstr "Název souboru"
#. module: plugin_thunderbird
#: help:plugin_thunderbird.installer,plugin_file:0
@@ -89,10 +92,12 @@ msgid ""
"Thunderbird plug-in file. Save as this file and install this plug-in in "
"thunderbird."
msgstr ""
+"Soubor doplňku Thunderbirdu. Uložit toto jako soubor a nainstalujte tento "
+"doplněk do thunderbirdu."
#. module: plugin_thunderbird
#: model:ir.actions.act_window,name:plugin_thunderbird.action_thunderbird_installer
#: model:ir.ui.menu,name:plugin_thunderbird.menu_base_config_plugins_thunderbird
#: view:plugin_thunderbird.installer:0
msgid "Install Thunderbird Plug-In"
-msgstr ""
+msgstr "Instalovat doplněk Thunderbirdu"
diff --git a/addons/plugin_thunderbird/plugin_thunderbird.xml b/addons/plugin_thunderbird/plugin_thunderbird.xml
index f7971f1f981..233628d5fd5 100644
--- a/addons/plugin_thunderbird/plugin_thunderbird.xml
+++ b/addons/plugin_thunderbird/plugin_thunderbird.xml
@@ -54,11 +54,21 @@
formnew
-
-
-
- 3
- automatic
+
+
+
+ Sales Application
+ sale.config.settings
+ form
+
+
+
+
+
+
+
+
diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml
index adb05fec578..b397bd826cc 100644
--- a/addons/point_of_sale/point_of_sale_view.xml
+++ b/addons/point_of_sale/point_of_sale_view.xml
@@ -80,7 +80,7 @@
-
+
diff --git a/addons/point_of_sale/security/point_of_sale_security.xml b/addons/point_of_sale/security/point_of_sale_security.xml
index 640a33d325b..7f2e91f1b48 100644
--- a/addons/point_of_sale/security/point_of_sale_security.xml
+++ b/addons/point_of_sale/security/point_of_sale_security.xml
@@ -10,6 +10,7 @@
Manager
+
diff --git a/addons/portal/i18n/cs.po b/addons/portal/i18n/cs.po
index 86605d948f3..3aacc86a971 100644
--- a/addons/portal/i18n/cs.po
+++ b/addons/portal/i18n/cs.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-02-03 13:07+0000\n"
+"PO-Revision-Date: 2012-04-06 06:51+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 07:09+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: portal
@@ -57,6 +57,8 @@ msgid ""
"Portal managers have access to the portal definitions, and can easily "
"configure the users, access rights and menus of portal users."
msgstr ""
+"Vedoucí portálu mají přístup k definici portálu a mohou snadno nastavit "
+"uživatel, přístupová práva a nabídky uživatelů portálu."
#. module: portal
#: help:res.portal,override_menu:0
@@ -99,6 +101,7 @@ msgstr "URL, kde uživatelé portálu se mohou připojit k serveru"
#: model:res.groups,comment:portal.group_portal_officer
msgid "Portal officers can create new portal users with the portal wizard."
msgstr ""
+"Úředníci portálu mohou vytvářet uživatele portálu pomocí průvodce portálu."
#. module: portal
#: help:res.portal.wizard,message:0
@@ -144,7 +147,7 @@ msgstr "Uživatelské jméno"
#. module: portal
#: help:res.portal,group_id:0
msgid "The group corresponding to this portal"
-msgstr ""
+msgstr "Skupina odpovídající tomuto portálu"
#. module: portal
#: model:ir.model,name:portal.model_res_portal_widget
@@ -369,7 +372,7 @@ msgstr ""
#. module: portal
#: model:res.groups,name:portal.group_portal_manager
msgid "Manager"
-msgstr ""
+msgstr "Vedoucí"
#. module: portal
#: help:res.portal.wizard.user,name:0
@@ -413,4 +416,4 @@ msgstr "Průvodce sdílením"
#. module: portal
#: model:res.groups,name:portal.group_portal_officer
msgid "Officer"
-msgstr ""
+msgstr "Úředník"
diff --git a/addons/portal/security/portal_security.xml b/addons/portal/security/portal_security.xml
index 4b73db5cdcc..0c0213ec56a 100644
--- a/addons/portal/security/portal_security.xml
+++ b/addons/portal/security/portal_security.xml
@@ -17,6 +17,7 @@
Portal managers have access to the portal definitions, and can easily configure the users, access rights and menus of portal users.
+
diff --git a/addons/product/__init__.py b/addons/product/__init__.py
index 4247b49d41b..3e2fc0c8be4 100644
--- a/addons/product/__init__.py
+++ b/addons/product/__init__.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
import product
diff --git a/addons/product/__openerp__.py b/addons/product/__openerp__.py
index 117d559ddec..9b4d2cadee1 100644
--- a/addons/product/__openerp__.py
+++ b/addons/product/__openerp__.py
@@ -55,7 +55,6 @@ Print product labels with barcode.
'product_data.xml',
'product_report.xml',
'product_view.xml',
- 'wizard/product_installer.xml',
'product_shortcut_data.xml',
'pricelist_view.xml',
'partner_view.xml',
diff --git a/addons/product/partner_view.xml b/addons/product/partner_view.xml
index 51d012b8577..4d917230acc 100644
--- a/addons/product/partner_view.xml
+++ b/addons/product/partner_view.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/addons/product/pricelist_view.xml b/addons/product/pricelist_view.xml
index 3b8eeb750cf..0388b2a4aa3 100644
--- a/addons/product/pricelist_view.xml
+++ b/addons/product/pricelist_view.xml
@@ -4,7 +4,8 @@
-
+ product.pricelist.version.form
diff --git a/addons/product/product.py b/addons/product/product.py
index 0d5fa31ac11..70f6a0683d6 100644
--- a/addons/product/product.py
+++ b/addons/product/product.py
@@ -259,7 +259,7 @@ class product_template(osv.osv):
_description = "Product Template"
def _get_main_product_supplier(self, cr, uid, product, context=None):
- """Determines the main (best) product supplier for ``product``,
+ """Determines the main (best) product supplier for ``product``,
returning the corresponding ``supplierinfo`` record, or False
if none were found. The default strategy is to select the
supplier with the highest priority (i.e. smallest sequence).
@@ -503,6 +503,7 @@ class product_product(osv.osv):
_description = "Product"
_table = "product_product"
_inherits = {'product.template': 'product_tmpl_id'}
+ _inherit = ['mail.thread']
_order = 'default_code,name_template'
_columns = {
'qty_available': fields.function(_product_qty_available, type='float', string='Quantity On Hand'),
@@ -526,7 +527,15 @@ class product_product(osv.osv):
'color': fields.integer('Color Index'),
'product_image': fields.binary('Image'),
}
-
+
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(product_product, self).create(cr, uid, vals, context=context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ return self.message_append_note(cr, uid, ids, body=_("Product has been created."), context=context)
+
def unlink(self, cr, uid, ids, context=None):
unlink_ids = []
unlink_product_tmpl_ids = []
diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml
index e751edc0ae2..2a12fc9ad08 100644
--- a/addons/product/product_view.xml
+++ b/addons/product/product_view.xml
@@ -20,7 +20,7 @@
-
+
@@ -50,7 +50,7 @@
-
+
@@ -69,27 +69,26 @@
@@ -440,7 +440,7 @@
Create and manage the units of measure you want to be used in your system. You can define a conversion rate between several Units of Measure within the same category.
-
+
@@ -494,7 +494,7 @@
Create and manage your packaging dimensions and types you want to be maintained in your system.
+ action="product_ul_form_action" groups="product.group_stock_packaging" id="menu_product_ul_form_action" parent="prod_config_main" sequence="3"/>
product.packaging.tree.view
@@ -552,7 +552,7 @@
-
+
@@ -674,11 +674,11 @@
-
+
-
+
diff --git a/addons/product/security/product_security.xml b/addons/product/security/product_security.xml
index 5c993b9cd61..d0f1cd81d5e 100644
--- a/addons/product/security/product_security.xml
+++ b/addons/product/security/product_security.xml
@@ -2,11 +2,6 @@
-
- Product UoS View
-
-
-
Product multi-company
@@ -14,11 +9,41 @@
['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
-
+ Product Variant
+
+ Sales Pricelists
+
+
+
+
+ Purchase Pricelists
+
+
+
+
+ Manage Multiple Units of Measure
+
+
+
+
+ Manage Secondary UoM
+
+
+
+
+ Manage Product Packaging
+
+
+
+
+ Manage Properties of Product
+
+
+
product pricelist company rule
diff --git a/addons/product/wizard/product_installer.xml b/addons/product/wizard/product_installer.xml
deleted file mode 100644
index 01ddf25c56c..00000000000
--- a/addons/product/wizard/product_installer.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
- Create or Import Products
- ir.actions.act_window
- product.product
- form
- tree,form
-
- Create a product form for everything you buy or sell. Specify a supplier if the product can be purchased.
-
-
-
-
-
-
- 20
-
-
-
-
diff --git a/addons/product/wizard/product_price_view.xml b/addons/product/wizard/product_price_view.xml
index 91fb931b6fa..adc63de872d 100644
--- a/addons/product/wizard/product_price_view.xml
+++ b/addons/product/wizard/product_price_view.xml
@@ -31,6 +31,7 @@
name="Price List"
res_model="product.price_list"
src_model="product.product"
+ groups="product.group_sale_pricelist"
view_mode="form" target="new" view_type="form" />
diff --git a/addons/project/__init__.py b/addons/project/__init__.py
index 01bef264e02..becd17f0b78 100644
--- a/addons/project/__init__.py
+++ b/addons/project/__init__.py
@@ -24,5 +24,6 @@ import company
import report
import wizard
import res_partner
+import res_config
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project/__openerp__.py b/addons/project/__openerp__.py
index 96a7dc4f28f..35b920828b2 100644
--- a/addons/project/__openerp__.py
+++ b/addons/project/__openerp__.py
@@ -52,12 +52,12 @@ Dashboard for project members that includes:
"project_data.xml",
"project_view.xml",
"process/task_process.xml",
- "project_installer.xml",
"res_partner_view.xml",
"report/project_report_view.xml",
"board_project_view.xml",
'board_project_manager_view.xml',
- 'report/project_cumulative.xml'
+ 'report/project_cumulative.xml',
+ 'res_config_view.xml',
],
'demo_xml': [
'project_demo.xml',
diff --git a/addons/project/project.py b/addons/project/project.py
index cff36d2b072..c9cd49e54b9 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -59,6 +59,7 @@ class project(osv.osv):
_name = "project.project"
_description = "Project"
_inherits = {'account.analytic.account': "analytic_account_id"}
+ _inherit = ['ir.needaction_mixin', 'mail.thread']
def search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False):
if user == 1:
@@ -230,9 +231,7 @@ class project(osv.osv):
task_ids = task_obj.search(cr, uid, [('project_id', 'in', ids), ('state', 'not in', ('cancelled', 'done'))])
task_obj.write(cr, uid, task_ids, {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
self.write(cr, uid, ids, {'state':'close'}, context=context)
- for (id, name) in self.name_get(cr, uid, ids):
- message = _("The project '%s' has been closed.") % name
- self.log(cr, uid, id, message)
+ self.set_close_send_note(cr, uid, ids, context=context)
return True
def set_cancel(self, cr, uid, ids, context=None):
@@ -240,23 +239,24 @@ class project(osv.osv):
task_ids = task_obj.search(cr, uid, [('project_id', 'in', ids), ('state', '!=', 'done')])
task_obj.write(cr, uid, task_ids, {'state': 'cancelled', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
self.write(cr, uid, ids, {'state':'cancelled'}, context=context)
+ self.set_cancel_send_note(cr, uid, ids, context=context)
return True
def set_pending(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state':'pending'}, context=context)
+ self.set_pending_send_note(cr, uid, ids, context=context)
return True
def set_open(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state':'open'}, context=context)
+ self.set_open_send_note(cr, uid, ids, context=context)
return True
def reset_project(self, cr, uid, ids, context=None):
res = self.setActive(cr, uid, ids, value=True, context=context)
- for (id, name) in self.name_get(cr, uid, ids):
- message = _("The project '%s' has been opened.") % name
- self.log(cr, uid, id, message)
+ self.set_open_send_note(cr, uid, ids, context=context)
return res
-
+
def map_tasks(self, cr, uid, old_project_id, new_project_id, context=None):
""" copy and map tasks from old to new project """
if context is None:
@@ -266,7 +266,7 @@ class project(osv.osv):
proj = self.browse(cr, uid, old_project_id, context=context)
for task in proj.tasks:
map_task_id[task.id] = task_obj.copy(cr, uid, task.id, {}, context=context)
- self.write(cr, uid, new_project_id, {'tasks':[(6,0, map_task_id.values())]})
+ self.write(cr, uid, [new_project_id], {'tasks':[(6,0, map_task_id.values())]})
task_obj.duplicate_task(cr, uid, map_task_id, context=context)
return True
@@ -448,6 +448,50 @@ def Project():
'user_id': int(p.booked_resource[0].name[5:]),
}, context=context)
return True
+
+ # ------------------------------------------------
+ # OpenChatter methods and notifications
+ # ------------------------------------------------
+
+ def get_needaction_user_ids(self, cr, uid, ids, context=None):
+ result = dict.fromkeys(ids)
+ for obj in self.browse(cr, uid, ids, context=context):
+ result[obj.id] = []
+ if obj.state == 'draft' and obj.user_id:
+ result[obj.id] = [obj.user_id.id]
+ return result
+
+ def message_get_subscribers(self, cr, uid, ids, context=None):
+ sub_ids = self.message_get_subscribers_ids(cr, uid, ids, context=context);
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.user_id:
+ sub_ids.append(obj.user_id.id)
+ return self.pool.get('res.users').read(cr, uid, sub_ids, context=context)
+
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(project, self).create(cr, uid, vals, context=context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ return self.message_append_note(cr, uid, ids, body=_("Project has been created."), context=context)
+
+ def set_open_send_note(self, cr, uid, ids, context=None):
+ message = _("Project has been opened.")
+ return self.message_append_note(cr, uid, ids, body=message, context=context)
+
+ def set_pending_send_note(self, cr, uid, ids, context=None):
+ message = _("Project is now pending.")
+ return self.message_append_note(cr, uid, ids, body=message, context=context)
+
+ def set_cancel_send_note(self, cr, uid, ids, context=None):
+ message = _("Project has been cancelled.")
+ return self.message_append_note(cr, uid, ids, body=message, context=context)
+
+ def set_close_send_note(self, cr, uid, ids, context=None):
+ message = _("Project has been closed.")
+ return self.message_append_note(cr, uid, ids, body=message, context=context)
+
project()
class users(osv.osv):
@@ -462,6 +506,7 @@ class task(osv.osv):
_description = "Task"
_log_create = True
_date_name = "date_start"
+ _inherit = ['ir.needaction_mixin', 'mail.thread']
def _resolve_project_id_from_context(self, cr, uid, context=None):
@@ -848,8 +893,7 @@ class task(osv.osv):
if not task.date_end:
vals.update({ 'date_end':time.strftime('%Y-%m-%d %H:%M:%S')})
self.write(cr, uid, [task.id],vals, context=context)
- message = _("The task '%s' is done") % (task.name,)
- self.log(cr, uid, task.id, message)
+ self.do_close_send_note(cr, uid, [task.id], context)
return True
def do_reopen(self, cr, uid, ids, context=None):
@@ -869,6 +913,7 @@ class task(osv.osv):
}, context=context)
self.write(cr, uid, [task.id], {'state': 'open'}, context=context)
+ self.do_open_send_note(cr, uid, [task.id], context)
return True
def do_cancel(self, cr, uid, ids, context={}):
@@ -887,9 +932,8 @@ class task(osv.osv):
'ref_doc1': 'project.task,%d' % task.id,
'ref_doc2': 'project.project,%d' % project.id,
}, context=context)
- message = _("The task '%s' is cancelled.") % (task.name,)
- self.log(cr, uid, task.id, message)
self.write(cr, uid, [task.id], {'state': 'cancelled', 'remaining_hours':0.0}, context=context)
+ self.do_cancel_send_note(cr, uid, [task.id], context)
return True
def do_open(self, cr, uid, ids, context={}):
@@ -900,12 +944,12 @@ class task(osv.osv):
if not t.date_start:
data['date_start'] = time.strftime('%Y-%m-%d %H:%M:%S')
self.write(cr, uid, [t.id], data, context=context)
- message = _("The task '%s' is opened.") % (t.name,)
- self.log(cr, uid, t.id, message)
+ self.do_open_send_note(cr, uid, [t.id], context)
return True
def do_draft(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state': 'draft'}, context=context)
+ self.do_draft_send_note(cr, uid, ids, context)
return True
@@ -916,7 +960,7 @@ class task(osv.osv):
for attachment_id in attachment_ids:
new_attachment_ids.append(attachment.copy(cr, uid, attachment_id, default={'res_id': delegated_task_id}, context=context))
return new_attachment_ids
-
+
def do_delegate(self, cr, uid, ids, delegate_data={}, context=None):
"""
@@ -944,20 +988,16 @@ class task(osv.osv):
'name': newname,
}, context=context)
if delegate_data['state'] == 'pending':
- self.do_pending(cr, uid, task.id, context=context)
+ self.do_pending(cr, uid, [task.id], context=context)
elif delegate_data['state'] == 'done':
- self.do_close(cr, uid, task.id, context=context)
-
- message = _("The task '%s' has been delegated to %s.") % (delegate_data['name'], delegate_data['user_id'][1])
- self.log(cr, uid, task.id, message)
+ self.do_close(cr, uid, [task.id], context=context)
+ self.do_delegation_send_note(cr, uid, [task.id], context)
delegated_tasks[task.id] = delegated_task_id
return delegated_tasks
def do_pending(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state': 'pending'}, context=context)
- for (id, name) in self.name_get(cr, uid, ids):
- message = _("The task '%s' is pending.") % name
- self.log(cr, uid, id, message)
+ self.do_pending_send_note(cr, uid, ids, context)
return True
def set_remaining_time(self, cr, uid, ids, remaining_time=1.0, context=None):
@@ -988,7 +1028,7 @@ class task(osv.osv):
def set_kanban_state_done(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'kanban_state': 'done'}, context=context)
- def _change_type(self, cr, uid, ids, next, *args):
+ def _change_type(self, cr, uid, ids, next, context=None):
"""
go to the next stage
if next is False, go to previous stage
@@ -1009,13 +1049,14 @@ class task(osv.osv):
elif typeid and typeid in sorted_types and sorted_types.index(typeid) != len(sorted_types)-1:
index = sorted_types.index(typeid)
self.write(cr, uid, task.id, {'type_id': sorted_types[index+1]})
+ self.state_change_send_note(cr, uid, [task.id], context)
return True
- def next_type(self, cr, uid, ids, *args):
- return self._change_type(cr, uid, ids, True, *args)
+ def next_type(self, cr, uid, ids, context=None):
+ return self._change_type(cr, uid, ids, True, context=context)
- def prev_type(self, cr, uid, ids, *args):
- return self._change_type(cr, uid, ids, False, *args)
+ def prev_type(self, cr, uid, ids, context=None):
+ return self._change_type(cr, uid, ids, False, context=context)
def _store_history(self, cr, uid, ids, context=None):
for task in self.browse(cr, uid, ids, context=context):
@@ -1032,9 +1073,10 @@ class task(osv.osv):
return True
def create(self, cr, uid, vals, context=None):
- result = super(task, self).create(cr, uid, vals, context=context)
- self._store_history(cr, uid, [result], context=context)
- return result
+ task_id = super(task, self).create(cr, uid, vals, context=context)
+ self._store_history(cr, uid, [task_id], context=context)
+ self.create_send_note(cr, uid, [task_id], context=context)
+ return task_id
# Overridden to reset the kanban_state to normal whenever
# the stage (type_id) of the task changes.
@@ -1045,13 +1087,14 @@ class task(osv.osv):
new_stage = vals.get('type_id')
vals_reset_kstate = dict(vals, kanban_state='normal')
for t in self.browse(cr, uid, ids, context=context):
- write_vals = vals_reset_kstate if t.type_id != new_stage else vals
+ write_vals = vals_reset_kstate if t.type_id != new_stage else vals
super(task,self).write(cr, uid, [t.id], write_vals, context=context)
result = True
else:
result = super(task,self).write(cr, uid, ids, vals, context=context)
if ('type_id' in vals) or ('remaining_hours' in vals) or ('user_id' in vals) or ('state' in vals) or ('kanban_state' in vals):
self._store_history(cr, uid, ids, context=context)
+ self.state_change_send_note(cr, uid, ids, context)
return result
def unlink(self, cr, uid, ids, context=None):
@@ -1087,6 +1130,62 @@ class task(osv.osv):
result += "\n"
return result
+
+ # ---------------------------------------------------
+ # OpenChatter methods and notifications
+ # ---------------------------------------------------
+
+ def get_needaction_user_ids(self, cr, uid, ids, context=None):
+ result = dict.fromkeys(ids, [])
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.state == 'draft' and obj.user_id:
+ result[obj.id] = [obj.user_id.id]
+ return result
+
+ def message_get_subscribers(self, cr, uid, ids, context=None):
+ sub_ids = self.message_get_subscribers_ids(cr, uid, ids, context=context);
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.user_id:
+ sub_ids.append(obj.user_id.id)
+ if obj.manager_id:
+ sub_ids.append(obj.manager_id.id)
+ return self.pool.get('res.users').read(cr, uid, sub_ids, context=context)
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ return self.message_append_note(cr, uid, ids, body=_("Task has been created."), context=context)
+
+ def do_pending_send_note(self, cr, uid, ids, context=None):
+ if not isinstance(ids,list): ids = [ids]
+ msg = _('Task is now pending.')
+ return self.message_append_note(cr, uid, ids, body=msg, context=context)
+
+ def do_open_send_note(self, cr, uid, ids, context=None):
+ msg = _('Task has been opened.')
+ return self.message_append_note(cr, uid, ids, body=msg, context=context)
+
+ def do_cancel_send_note(self, cr, uid, ids, context=None):
+ msg = _('Task has been canceled.')
+ return self.message_append_note(cr, uid, ids, body=msg, context=context)
+
+ def do_close_send_note(self, cr, uid, ids, context=None):
+ msg = _('Task has been closed.')
+ return self.message_append_note(cr, uid, ids, body=msg, context=context)
+
+ def do_draft_send_note(self, cr, uid, ids, context=None):
+ msg = _('Task has been renewed.')
+ return self.message_append_note(cr, uid, ids, body=msg, context=context)
+
+ def do_delegation_send_note(self, cr, uid, ids, context=None):
+ for task in self.browse(cr, uid, ids, context=context):
+ msg = _('Task has been delegated to %s.') % (task.user_id.name)
+ self.message_append_note(cr, uid, [task.id], body=msg, context=context)
+ return True
+
+ def state_change_send_note(self, cr, uid, ids, context=None):
+ for task in self.browse(cr, uid, ids, context=context):
+ msg = _('Stage changed to %s') % (task.type_id.name)
+ self.message_append_note(cr, uid, [task.id], body=msg, context=context)
+ return True
task()
@@ -1182,7 +1281,7 @@ class project_task_history(osv.osv):
for history in self.browse(cr, uid, ids, context=context):
cr.execute('''select
id
- from
+ from
project_task_history
where
task_id=%s and
@@ -1238,4 +1337,3 @@ class project_task_history_cumulative(osv.osv):
)
""")
project_task_history_cumulative()
-
diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml
index 28d451b9ee0..2f8c9e9638a 100644
--- a/addons/project/project_demo.xml
+++ b/addons/project/project_demo.xml
@@ -190,7 +190,7 @@
-
+
@@ -202,7 +202,7 @@
-
+
@@ -214,7 +214,7 @@
-
+
@@ -249,7 +249,7 @@
Test on Runbot
-
+
@@ -260,7 +260,7 @@
Deploy and Review on Customer System
-
+
@@ -328,7 +328,7 @@
BoM, After sales returns, interventions. Traceability.Specific adaptation to MRP
-
+ 16.0
@@ -338,7 +338,7 @@
Data importation + Doc
-
+ 16.0
@@ -348,7 +348,7 @@
Modifications asked by the customer.
-
+ 16.0
@@ -380,7 +380,7 @@
Analysis, Data Importation
-
+ 20
@@ -391,7 +391,7 @@
Parameters
-
+ 20
@@ -405,8 +405,9 @@
-
-
+
diff --git a/addons/project/project_installer.xml b/addons/project/project_installer.xml
deleted file mode 100644
index 338040df5e2..00000000000
--- a/addons/project/project_installer.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
- Project Management
- 7
-
-
-
- Create your Firsts Projects
- ir.actions.act_window
- project.project
- form
- tree,form
-
-
-
-
-
-
-
-
- Review Task Stages
- ir.actions.act_window
- project.task.type
- form
- tree,form
- {'search_default_common': 1, 'default_project_default': 1}
- []
- The stages can be common to all project or specific to one project. Each task will follow the different stages in order to be closed.
-
-
-
-
-
-
-
-
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index be65b29f7b2..adb50512168 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -96,6 +96,7 @@
+
@@ -291,12 +292,7 @@
-
-
-
-
-
-
+
@@ -309,6 +305,7 @@
+
diff --git a/addons/project/res_config.py b/addons/project/res_config.py
new file mode 100644
index 00000000000..17f3a1cfbb5
--- /dev/null
+++ b/addons/project/res_config.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. ().
+#
+# 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
+
+class project_configuration(osv.osv_memory):
+ _name = 'project.config.settings'
+ _inherit = 'res.config.settings'
+
+ _columns = {
+ 'module_project_mrp': fields.boolean('Create Tasks from a Sale Order',
+ help ="""This feature automatically creates project tasks from service products in sale orders.
+ More precisely, tasks are created for procurement lines with product of type 'Service',
+ procurement method 'Make to Order', and supply method 'Produce'.
+ This installs the module project_mrp."""),
+ 'module_pad': fields.boolean("Use Collaborative Note Pads for Tasks",
+ help="""Lets the company customize which Pad installation should be used to link to new pads
+ (by default, http://ietherpad.com/).
+ This installs the module pad."""),
+ 'module_project_timesheet': fields.boolean("Timesheets and Invoices",
+ help="""This allows you to transfer the entries under tasks defined for Project Management to
+ the timesheet line entries for particular date and user, with the effect of creating,
+ editing and deleting either ways.
+ This installs the module project_timesheet."""),
+ 'module_project_long_term': fields.boolean("Manage Gantt and Resource Planning",
+ help="""A long term project management module that tracks planning, scheduling, and resource allocation.
+ This installs the module project_long_term."""),
+ 'module_project_issue': fields.boolean("Issues and Bug Tracking",
+ help="""Provides management of issues/bugs in projects.
+ This installs the module project_issue."""),
+ 'module_project_issue_sheet': fields.boolean("Track and invoice issues working time",
+ help="""Provides timesheet support for the issues/bugs management in project.
+ This installs the module project_issue_sheet."""),
+ }
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project/res_config_view.xml b/addons/project/res_config_view.xml
new file mode 100644
index 00000000000..daa5bc10d8e
--- /dev/null
+++ b/addons/project/res_config_view.xml
@@ -0,0 +1,44 @@
+
+
+
+
+ project settings
+ project.config.settings
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Configure Project
+ ir.actions.act_window
+ project.config.settings
+ form
+ inline
+
+
+
+
+
+
diff --git a/addons/project/security/project_security.xml b/addons/project/security/project_security.xml
index f1e3a6e9b74..a1ead6aa72c 100644
--- a/addons/project/security/project_security.xml
+++ b/addons/project/security/project_security.xml
@@ -11,6 +11,7 @@
Manager
+
diff --git a/addons/project_issue/__init__.py b/addons/project_issue/__init__.py
index f519698a60c..b04f25914c7 100644
--- a/addons/project_issue/__init__.py
+++ b/addons/project_issue/__init__.py
@@ -22,5 +22,6 @@
import project_issue
import report
+import res_config
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_issue/__openerp__.py b/addons/project_issue/__openerp__.py
index 0d9db1a3bba..6ddbfb07ea4 100644
--- a/addons/project_issue/__openerp__.py
+++ b/addons/project_issue/__openerp__.py
@@ -52,6 +52,7 @@ and decide on their status as they evolve.
'security/project_issue_security.xml',
'security/ir.model.access.csv',
"board_project_issue_view.xml",
+ "res_config_view.xml",
],
'demo_xml': ['project_issue_demo.xml'],
'test': [
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index 4cb98fab0e5..e7c2194d304 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -48,45 +48,7 @@ class project_issue(crm.crm_case, osv.osv):
_name = "project.issue"
_description = "Project Issue"
_order = "priority, create_date desc"
- _inherit = ['mail.thread']
-
- def write(self, cr, uid, ids, vals, context=None):
- #Update last action date everytime the user change the stage, the state or send a new email
- logged_fields = ['type_id', 'state', 'message_ids']
- if any([field in vals for field in logged_fields]):
- vals['date_action_last'] = time.strftime('%Y-%m-%d %H:%M:%S')
- return super(project_issue, self).write(cr, uid, ids, vals, context)
-
- def case_open(self, cr, uid, ids, *args):
- """
- @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 *args: Give Tuple Value
- """
-
- res = super(project_issue, self).case_open(cr, uid, ids, *args)
- self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S'), 'user_id' : uid})
- for (id, name) in self.name_get(cr, uid, ids):
- message = _("Issue '%s' has been opened.") % name
- self.log(cr, uid, id, message)
- return res
-
- def case_close(self, cr, uid, ids, *args):
- """
- @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 *args: Give Tuple Value
- """
-
- res = super(project_issue, self).case_close(cr, uid, ids, *args)
- for (id, name) in self.name_get(cr, uid, ids):
- message = _("Issue '%s' has been closed.") % name
- self.log(cr, uid, id, message)
- return res
+ _inherit = ['ir.needaction_mixin', 'mail.thread']
def _compute_day(self, cr, uid, ids, fields, args, context=None):
"""
@@ -114,7 +76,8 @@ class project_issue(crm.crm_case, osv.osv):
ans = date_open - date_create
date_until = issue.date_open
#Calculating no. of working hours to open the issue
- hours = cal_obj.interval_hours_get(cr, uid, issue.project_id.resource_calendar_id.id,
+ if issue.project_id.resource_calendar_id:
+ hours = cal_obj.interval_hours_get(cr, uid, issue.project_id.resource_calendar_id.id,
date_create,
date_open)
elif field in ['working_hours_close','day_close']:
@@ -123,7 +86,8 @@ class project_issue(crm.crm_case, osv.osv):
date_until = issue.date_closed
ans = date_close - date_create
#Calculating no. of working hours to close the issue
- hours = cal_obj.interval_hours_get(cr, uid, issue.project_id.resource_calendar_id.id,
+ if issue.project_id.resource_calendar_id:
+ hours = cal_obj.interval_hours_get(cr, uid, issue.project_id.resource_calendar_id.id,
date_create,
date_close)
elif field in ['days_since_creation']:
@@ -168,6 +132,25 @@ class project_issue(crm.crm_case, osv.osv):
return res
+ def _hours_get(self, cr, uid, ids, field_names, args, context=None):
+ task_pool = self.pool.get('project.task')
+ res = {}
+ for issue in self.browse(cr, uid, ids, context=context):
+ progress = 0.0
+ if issue.task_id:
+ progress = task_pool._hours_get(cr, uid, [issue.task_id.id], field_names, args, context=context)[issue.task_id.id]['progress']
+ res[issue.id] = {'progress' : progress}
+ return res
+
+ def _get_project(self, cr, uid, context=None):
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ if user.context_project_id:
+ return user.context_project_id.id
+ return False
+
+ def on_change_project(self, cr, uid, ids, project_id, context=None):
+ return {}
+
def _get_issue_task(self, cr, uid, ids, context=None):
issues = []
issue_pool = self.pool.get('project.issue')
@@ -183,16 +166,6 @@ class project_issue(crm.crm_case, osv.osv):
issues += issue_pool.search(cr, uid, [('task_id','=',work.task_id.id)])
return issues
- def _hours_get(self, cr, uid, ids, field_names, args, context=None):
- task_pool = self.pool.get('project.task')
- res = {}
- for issue in self.browse(cr, uid, ids, context=context):
- progress = 0.0
- if issue.task_id:
- progress = task_pool._hours_get(cr, uid, [issue.task_id.id], field_names, args, context=context)[issue.task_id.id]['progress']
- res[issue.id] = {'progress' : progress}
- return res
-
_columns = {
'id': fields.integer('ID', readonly=True),
'name': fields.char('Issue', size=128, required=True),
@@ -247,15 +220,6 @@ class project_issue(crm.crm_case, osv.osv):
}),
}
- def _get_project(self, cr, uid, context=None):
- user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
- if user.context_project_id:
- return user.context_project_id.id
- return False
-
- def on_change_project(self, cr, uid, ids, project_id, context=None):
- return {}
-
_defaults = {
'active': 1,
@@ -285,14 +249,13 @@ class project_issue(crm.crm_case, osv.osv):
return self.set_priority(cr, uid, ids, '3')
def convert_issue_task(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+
case_obj = self.pool.get('project.issue')
data_obj = self.pool.get('ir.model.data')
task_obj = self.pool.get('project.task')
-
-
- if context is None:
- context = {}
-
+
result = data_obj._get_id(cr, uid, 'project', 'view_task_search_form')
res = data_obj.read(cr, uid, result, ['res_id'])
id2 = data_obj._get_id(cr, uid, 'project', 'view_task_form2')
@@ -314,12 +277,13 @@ class project_issue(crm.crm_case, osv.osv):
'user_id': bug.user_id.id,
'planned_hours': 0.0,
})
-
vals = {
'task_id': new_task_id,
'state':'pending'
}
- case_obj.write(cr, uid, [bug.id], vals)
+ self.convert_to_task_send_note(cr, uid, [bug.id], context=context)
+ case_obj.write(cr, uid, [bug.id], vals, context=context)
+ self.case_pending_send_note(cr, uid, [bug.id], context=context)
return {
'name': _('Tasks'),
@@ -351,28 +315,38 @@ class project_issue(crm.crm_case, osv.osv):
def convert_to_bug(self, cr, uid, ids, context=None):
return self._convert(cr, uid, ids, 'bug_categ', context=context)
- def next_type(self, cr, uid, ids, *args):
+ def next_type(self, cr, uid, ids, context=None):
for task in self.browse(cr, uid, ids):
typeid = task.type_id.id
types = map(lambda x:x.id, task.project_id.type_ids or [])
if types:
if not typeid:
- self.write(cr, uid, task.id, {'type_id': types[0]})
+ self.write(cr, uid, [task.id], {'type_id': types[0]})
elif typeid and typeid in types and types.index(typeid) != len(types)-1 :
index = types.index(typeid)
- self.write(cr, uid, task.id, {'type_id': types[index+1]})
+ self.write(cr, uid, [task.id], {'type_id': types[index+1]})
return True
- def prev_type(self, cr, uid, ids, *args):
+ def prev_type(self, cr, uid, ids, context=None):
for task in self.browse(cr, uid, ids):
typeid = task.type_id.id
types = map(lambda x:x.id, task.project_id and task.project_id.type_ids or [])
if types:
if typeid and typeid in types:
index = types.index(typeid)
- self.write(cr, uid, task.id, {'type_id': index and types[index-1] or False})
+ self.write(cr, uid, [task.id], {'type_id': index and types[index-1] or False})
return True
+ def write(self, cr, uid, ids, vals, context=None):
+ #Update last action date every time the user change the stage, the state or send a new email
+ logged_fields = ['type_id', 'state', 'message_ids']
+ if any([field in vals for field in logged_fields]):
+ vals['date_action_last'] = time.strftime('%Y-%m-%d %H:%M:%S')
+ if vals.get('type_id', False):
+ stage = self.pool.get('project.task.type').browse(cr, uid, vals['type_id'], context=context)
+ self.message_append_note(cr, uid, ids, body=_("Stage changed to %s.") % stage.name, context=context)
+ return super(project_issue, self).write(cr, uid, ids, vals, context)
+
def onchange_task_id(self, cr, uid, ids, task_id, context=None):
result = {}
if not task_id:
@@ -380,14 +354,24 @@ class project_issue(crm.crm_case, osv.osv):
task = self.pool.get('project.task').browse(cr, uid, task_id, context=context)
return {'value':{'user_id': task.user_id.id,}}
- def case_escalate(self, cr, uid, ids, *args):
- """Escalates case to top level
- @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 Ids
- @param *args: Tuple Value for additional Params
+ def case_reset(self, cr, uid, ids, context=None):
+ """Resets case as draft
"""
+ res = super(project_issue, self).case_reset(cr, uid, ids, context)
+ self.write(cr, uid, ids, {'date_open': False, 'date_closed': False})
+ return res
+
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(project_issue, self).create(cr, uid, vals, context=context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
+ def case_open(self, cr, uid, ids, context=None):
+ res = super(project_issue, self).case_open(cr, uid, ids, context)
+ self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S'), 'user_id' : uid})
+ return res
+
+ def case_escalate(self, cr, uid, ids, context=None):
cases = self.browse(cr, uid, ids)
for case in cases:
data = {'state' : 'draft'}
@@ -400,7 +384,7 @@ class project_issue(crm.crm_case, osv.osv):
else:
raise osv.except_osv(_('Warning !'), _('You cannot escalate this issue.\nThe relevant Project has not configured the Escalation Project!'))
self.write(cr, uid, [case.id], data)
- self.message_append(cr, uid, cases, _('Escalate'))
+ self.case_escalate_send_note(cr, uid, [case.id], context)
return True
def message_new(self, cr, uid, msg, custom_values=None, context=None):
@@ -432,7 +416,6 @@ class project_issue(crm.crm_case, osv.osv):
return res_id
def message_update(self, cr, uid, ids, msg, vals=None, default_act='pending', context=None):
-
if vals is None:
vals = {}
@@ -477,6 +460,45 @@ class project_issue(crm.crm_case, osv.osv):
default['name'] = issue['name'] + _(' (copy)')
return super(project_issue, self).copy(cr, uid, id, default=default,
context=context)
+
+ # -------------------------------------------------------
+ # OpenChatter methods and notifications
+ # -------------------------------------------------------
+
+ def get_needaction_user_ids(self, cr, uid, ids, context=None):
+ result = dict.fromkeys(ids, [])
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.state == 'draft' and obj.user_id:
+ result[obj.id] = [obj.user_id.id]
+ return result
+
+ def message_get_subscribers(self, cr, uid, ids, context=None):
+ sub_ids = self.message_get_subscribers_ids(cr, uid, ids, context=context);
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.user_id:
+ sub_ids.append(obj.user_id.id)
+ return self.pool.get('res.users').read(cr, uid, sub_ids, context=context)
+
+ def case_get_note_msg_prefix(self, cr, uid, id, context=None):
+ return 'Project issue '
+
+ def convert_to_task_send_note(self, cr, uid, ids, context=None):
+ message = _("Project issue has been converted in to task.")
+ return self.message_append_note(cr, uid, ids, body=message, context=context)
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ message = _("Project issue has been created.")
+ return self.message_append_note(cr, uid, ids, body=message, context=context)
+
+ def case_escalate_send_note(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.project_id:
+ message = _("has been escalated to '%s'.") % (obj.project_id.name)
+ obj.message_append_note(body=message, context=context)
+ else:
+ message = _("has been escalated.")
+ obj.message_append_note(body=message, context=context)
+ return True
project_issue()
@@ -488,11 +510,11 @@ class project(osv.osv):
}
def _check_escalation(self, cr, uid, ids, context=None):
- project_obj = self.browse(cr, uid, ids[0], context=context)
- if project_obj.project_escalation_id:
- if project_obj.project_escalation_id.id == project_obj.id:
- return False
- return True
+ project_obj = self.browse(cr, uid, ids[0], context=context)
+ if project_obj.project_escalation_id:
+ if project_obj.project_escalation_id.id == project_obj.id:
+ return False
+ return True
_constraints = [
(_check_escalation, 'Error! You cannot assign escalation to the same project!', ['project_escalation_id'])
diff --git a/addons/project_issue/project_issue_menu.xml b/addons/project_issue/project_issue_menu.xml
index 086a0c43de3..dd61992a555 100644
--- a/addons/project_issue/project_issue_menu.xml
+++ b/addons/project_issue/project_issue_menu.xml
@@ -1,6 +1,7 @@
+
@@ -53,7 +54,7 @@
view_mode="tree,form,calendar,graph"
view_type="form"/>
-
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index 8a93b6c90a4..d209bfe8958 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -54,7 +54,12 @@
-
+
+
+
+
@@ -91,41 +96,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
@@ -133,13 +106,14 @@
-
-
-
-
+
+
+
+
+
diff --git a/addons/project_issue/res_config.py b/addons/project_issue/res_config.py
new file mode 100644
index 00000000000..1944444923a
--- /dev/null
+++ b/addons/project_issue/res_config.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. ().
+#
+# 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
+
+class project_issue_settings(osv.osv_memory):
+ _name = 'project.config.settings'
+ _inherit = ['project.config.settings', 'fetchmail.config.settings']
+
+ _columns = {
+ 'fetchmail_issue': fields.boolean("Create issues from an email account",
+ fetchmail_model='project.issue', fetchmail_name='Incoming issues',
+ help="""Allows you to configure your incoming mail server, and create issues from incoming emails."""),
+ 'issue_server' : fields.char('Server', size=256),
+ 'issue_port' : fields.integer('Port'),
+ 'issue_type': fields.selection([
+ ('pop', 'POP Server'),
+ ('imap', 'IMAP Server'),
+ ('local', 'Local Server'),
+ ], 'Type'),
+ 'issue_is_ssl': fields.boolean('SSL/TLS', help="Connections are encrypted with SSL/TLS through a dedicated port (default: IMAPS=993, POP=995)"),
+ 'issue_user' : fields.char('Username', size=256),
+ 'issue_password' : fields.char('Password', size=1024),
+ }
+
+ _defaults = {
+ 'issue_type': 'pop',
+ }
diff --git a/addons/project_issue/res_config_view.xml b/addons/project_issue/res_config_view.xml
new file mode 100644
index 00000000000..d2cc501bc96
--- /dev/null
+++ b/addons/project_issue/res_config_view.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+ Project Application
+ project.config.settings
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/project_mailgate/i18n/cs.po b/addons/project_mailgate/i18n/cs.po
new file mode 100644
index 00000000000..4f6517861e1
--- /dev/null
+++ b/addons/project_mailgate/i18n/cs.po
@@ -0,0 +1,78 @@
+# Czech translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:37+0000\n"
+"PO-Revision-Date: 2012-04-06 06:41+0000\n"
+"Last-Translator: Jiří Hajda \n"
+"Language-Team: Czech \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: project_mailgate
+#: view:project.task:0
+msgid "History Information"
+msgstr "Informace historie"
+
+#. module: project_mailgate
+#: model:ir.model,name:project_mailgate.model_project_task
+msgid "Task"
+msgstr "Úkol"
+
+#. module: project_mailgate
+#: constraint:project.task:0
+msgid "Error ! You cannot create recursive tasks."
+msgstr "Chyba ! Nemůžete vytvořit rekurzivní úkoly."
+
+#. module: project_mailgate
+#: field:project.task,message_ids:0
+msgid "Messages"
+msgstr "Zprávy"
+
+#. module: project_mailgate
+#: code:addons/project_mailgate/project_mailgate.py:90
+#, python-format
+msgid "Draft"
+msgstr "Koncept"
+
+#. module: project_mailgate
+#: constraint:project.task:0
+msgid "Error ! Task end-date must be greater then task start-date"
+msgstr "Chyba ! Datum ukončení úkolu musí být větší než počáteční datum"
+
+#. module: project_mailgate
+#: code:addons/project_mailgate/project_mailgate.py:116
+#, python-format
+msgid "Cancel"
+msgstr "Zrušit"
+
+#. module: project_mailgate
+#: code:addons/project_mailgate/project_mailgate.py:110
+#, python-format
+msgid "Done"
+msgstr "Dokončené"
+
+#. module: project_mailgate
+#: code:addons/project_mailgate/project_mailgate.py:96
+#, python-format
+msgid "Open"
+msgstr "Otevřené"
+
+#. module: project_mailgate
+#: code:addons/project_mailgate/project_mailgate.py:102
+#, python-format
+msgid "Pending"
+msgstr "Čekající"
+
+#. module: project_mailgate
+#: view:project.task:0
+msgid "History"
+msgstr "Historie"
diff --git a/addons/project_mrp/i18n/cs.po b/addons/project_mrp/i18n/cs.po
index 965536190b6..7764b0cb120 100644
--- a/addons/project_mrp/i18n/cs.po
+++ b/addons/project_mrp/i18n/cs.po
@@ -7,20 +7,20 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
-"PO-Revision-Date: 2011-09-05 06:12+0000\n"
+"PO-Revision-Date: 2012-04-06 04:53+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:35+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: project_mrp
#: sql_constraint:sale.order:0
msgid "Order Reference must be unique per Company!"
-msgstr ""
+msgstr "Odkaz obědnávky musí být jedinečný na společnost!"
#. module: project_mrp
#: model:process.node,note:project_mrp.process_node_procuretasktask0
@@ -35,12 +35,12 @@ msgstr "Úloha zásobování"
#. module: project_mrp
#: model:ir.model,name:project_mrp.model_sale_order
msgid "Sales Order"
-msgstr ""
+msgstr "Prodejní objednávka"
#. module: project_mrp
#: field:procurement.order,sale_line_id:0
msgid "Sale order line"
-msgstr ""
+msgstr "Řádek prodejní objednávky"
#. module: project_mrp
#: model:process.transition,note:project_mrp.process_transition_createtask0
@@ -55,7 +55,7 @@ msgstr "pokud je typ 'služba', pak vytvoří úkol."
#. module: project_mrp
#: constraint:project.task:0
msgid "Error ! Task end-date must be greater then task start-date"
-msgstr ""
+msgstr "Chyba ! Datum ukončení úkolu musí být větší než počáteční datum"
#. module: project_mrp
#: model:process.node,name:project_mrp.process_node_saleordertask0
@@ -125,7 +125,7 @@ msgstr "V případě, kdy prodáváte služby pomocí prodejního příkazu"
#. module: project_mrp
#: field:project.task,sale_line_id:0
msgid "Sale Order Line"
-msgstr ""
+msgstr "Řádek prodejní objednávky"
#~ msgid "Procurement and Project Management integration"
#~ msgstr "Integrace zásobování a projektového řízení"
diff --git a/addons/project_retro_planning/i18n/cs.po b/addons/project_retro_planning/i18n/cs.po
index 94c289695c0..3949bbf8f3f 100644
--- a/addons/project_retro_planning/i18n/cs.po
+++ b/addons/project_retro_planning/i18n/cs.po
@@ -7,29 +7,29 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
-"PO-Revision-Date: 2009-11-17 10:19+0000\n"
-"Last-Translator: Kuvaly [LCT] \n"
+"PO-Revision-Date: 2012-04-06 04:52+0000\n"
+"Last-Translator: Jiří Hajda \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:51+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: project_retro_planning
#: model:ir.model,name:project_retro_planning.model_project_project
msgid "Project"
-msgstr ""
+msgstr "Projekt"
#. module: project_retro_planning
#: constraint:project.project:0
msgid "Error! project start-date must be lower then project end-date."
-msgstr ""
+msgstr "Chyba! Počáteční datum projektu musí být menší než datum ukončení."
#. module: project_retro_planning
#: constraint:project.project:0
msgid "Error! You cannot assign escalation to the same project!"
-msgstr ""
+msgstr "Chyba! Nemůžete přiřadit stupňování ke stejnému projektu!"
#~ msgid "Project Retro planning"
#~ msgstr "Projekt retro plánování"
diff --git a/addons/project_timesheet/project_timesheet_view.xml b/addons/project_timesheet/project_timesheet_view.xml
index 0412bdabb38..4c357cd68b5 100644
--- a/addons/project_timesheet/project_timesheet_view.xml
+++ b/addons/project_timesheet/project_timesheet_view.xml
@@ -10,7 +10,7 @@
-
+
diff --git a/addons/purchase/__init__.py b/addons/purchase/__init__.py
index 66f92a60831..c9adeac874e 100644
--- a/addons/purchase/__init__.py
+++ b/addons/purchase/__init__.py
@@ -27,6 +27,7 @@ import report
import stock
import company
import edi
+import res_config
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/purchase/__openerp__.py b/addons/purchase/__openerp__.py
index 5b3902cf1cd..c0fb0b8f74d 100644
--- a/addons/purchase/__openerp__.py
+++ b/addons/purchase/__openerp__.py
@@ -50,7 +50,6 @@ Dashboard for purchase management that includes:
'company_view.xml',
'purchase_data.xml',
'wizard/purchase_order_group_view.xml',
- 'wizard/purchase_installer.xml',
'wizard/purchase_line_invoice_view.xml',
'purchase_report.xml',
'purchase_view.xml',
@@ -60,6 +59,7 @@ Dashboard for purchase management that includes:
'report/purchase_report_view.xml',
'board_purchase_view.xml',
'edi/purchase_order_action_data.xml',
+ 'res_config_view.xml',
],
'test': [
'test/process/cancel_order.yml',
diff --git a/addons/purchase/partner_view.xml b/addons/purchase/partner_view.xml
index 06ba97079eb..09e99bfcbdd 100644
--- a/addons/purchase/partner_view.xml
+++ b/addons/purchase/partner_view.xml
@@ -9,7 +9,7 @@
36
-
+
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 79d71f2c2cc..e0c64b5d2a1 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -220,9 +220,16 @@ class purchase_order(osv.osv):
('name_uniq', 'unique(name, company_id)', 'Order Reference must be unique per Company!'),
]
_name = "purchase.order"
+ _inherit = ['ir.needaction_mixin', 'mail.thread']
_description = "Purchase Order"
_order = "name desc"
-
+
+ def create(self, cr, uid, vals, context=None):
+ order = super(purchase_order, self).create(cr, uid, vals, context=context)
+ if order:
+ self.create_send_note(cr, uid, [order], context=context)
+ return order
+
def unlink(self, cr, uid, ids, context=None):
purchase_orders = self.read(cr, uid, ids, ['state'], context=context)
unlink_ids = []
@@ -289,6 +296,7 @@ class purchase_order(osv.osv):
self.pool.get('purchase.order.line').action_confirm(cr, uid, todo, context)
for id in ids:
self.write(cr, uid, [id], {'state' : 'confirmed', 'validator' : uid})
+ self.confirm_send_note(cr, uid, ids, context)
return True
def _prepare_inv_line(self, cr, uid, account_id, order_line, context=None):
@@ -388,8 +396,15 @@ class purchase_order(osv.osv):
# Link this new invoice to related purchase order
order.write({'invoice_ids': [(4, inv_id)]}, context=context)
res = inv_id
+ if res:
+ self.invoice_send_note(cr, uid, ids, res, context)
return res
-
+
+ def invoice_done(self, cr, uid, ids, context=None):
+ self.write(cr, uid, ids, {'state':'approved'}, context=context)
+ self.invoice_done_send_note(cr, uid, ids, context=context)
+ return True
+
def has_stockable_product(self,cr, uid, ids, *args):
for order in self.browse(cr, uid, ids):
for order_line in order.order_line:
@@ -502,8 +517,15 @@ class purchase_order(osv.osv):
# In case of multiple (split) pickings, we should return the ID of the critical one, i.e. the
# one that should trigger the advancement of the purchase workflow.
# By default we will consider the first one as most important, but this behavior can be overridden.
+ if picking_ids:
+ self.shipment_send_note(cr, uid, ids, picking_ids[0], context=context)
return picking_ids[0] if picking_ids else False
+ def picking_done(self, cr, uid, ids, context=None):
+ self.write(cr, uid, ids, {'shipped':1,'state':'approved'}, context=context)
+ self.shipment_done_send_note(cr, uid, ids, context=context)
+ return True
+
def copy(self, cr, uid, id, default=None, context=None):
if not default:
default = {}
@@ -627,6 +649,46 @@ class purchase_order(osv.osv):
wf_service.trg_redirect(uid, 'purchase.order', old_id, neworder_id, cr)
wf_service.trg_validate(uid, 'purchase.order', old_id, 'purchase_cancel', cr)
return orders_info
+
+ # --------------------------------------
+ # OpenChatter methods and notifications
+ # --------------------------------------
+
+ def get_needaction_user_ids(self, cr, uid, ids, context=None):
+ result = dict.fromkeys(ids, [])
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.state == 'approved':
+ result[obj.id] = [obj.validator.id]
+ return result
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ return self.message_append_note(cr, uid, ids, body=_("Request for quotation created."), context=context)
+
+ def confirm_send_note(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids, context=context):
+ self.message_subscribe(cr, uid, [obj.id], [obj.validator.id], context=context)
+ self.message_append_note(cr, uid, [obj.id], body=_("Quotation for %sconverted to a Purchase Order of %s %s.") % (obj.partner_id.name, obj.amount_total, obj.pricelist_id.currency_id.symbol), context=context)
+
+ def shipment_send_note(self, cr, uid, ids, picking_id, context=None):
+ for order in self.browse(cr, uid, ids, context=context):
+ for picking in (pck for pck in order.picking_ids if pck.id == picking_id):
+ pck_date = datetime.strptime(picking.min_date, '%Y-%m-%d %H:%M:%S').strftime('%m/%d/%Y')
+ self.message_append_note(cr, uid, [order.id], body=_("Shipment %sscheduled for %s.") % (picking.name, pck_date), context=context)
+
+ def invoice_send_note(self, cr, uid, ids, invoice_id, context=None):
+ for order in self.browse(cr, uid, ids, context=context):
+ for invoice in (inv for inv in order.invoice_ids if inv.id == invoice_id):
+ self.message_append_note(cr, uid, [order.id], body=_("Draft Invoice of %s %s is waiting for validation.") % (invoice.amount_total, invoice.currency_id.symbol), context=context)
+
+ def shipment_done_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("""Shipment received."""), context=context)
+
+ def invoice_done_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Invoice paid."), context=context)
+
+ def cancel_send_note(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids, context=context):
+ self.message_append_note(cr, uid, [obj.id], body=_("Purchase Order for %scancelled.") % (obj.partner_id.name), context=context)
purchase_order()
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 007c85b98f1..b1511139102 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -14,7 +14,7 @@
+ parent="menu_purchase_config_purchase" sequence="50" groups="product.group_purchase_pricelist"/>
+ parent="purchase.menu_product_in_config_purchase" sequence="20" groups="product.group_uom"/>
-
+
@@ -155,7 +155,7 @@
-
+
@@ -206,6 +206,7 @@
+
@@ -336,13 +337,13 @@
-
+
-
-
+
+
@@ -378,7 +379,7 @@
-
+
@@ -399,12 +400,12 @@
-
+
-
+ invoice_done
- write({'state':'approved'})
+ invoice_done()function
@@ -72,7 +72,7 @@
picking_done
- write({'shipped':1,'state':'approved'})
+ picking_done()functionsubflow.delivery_done
diff --git a/addons/purchase/res_config.py b/addons/purchase/res_config.py
new file mode 100644
index 00000000000..9ee5e8a97de
--- /dev/null
+++ b/addons/purchase/res_config.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. ().
+#
+# 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 pooler
+from tools.translate import _
+
+class purchase_config_settings(osv.osv_memory):
+ _name = 'purchase.config.settings'
+ _inherit = 'res.config.settings'
+
+ _columns = {
+ 'default_invoice_method': fields.selection(
+ [('manual', 'Based on Purchase Order Lines'),
+ ('picking', 'Based on Receptions'),
+ ('order', 'Pre-Generate Draft Invoices based on Purchase Orders'),
+ ], 'Invoicing Method', required=True, default_model='purchase.order'),
+ 'group_purchase_pricelist':fields.boolean("Pricelist per Supplier",
+ implied_group='product.group_purchase_pricelist',
+ help="""Allows to manage different prices based on rules per category of Supplier.
+ Example: 10% for retailers, promotion of 5 EUR on this product, etc."""),
+ 'group_uom':fields.boolean("Manage Different UoM for Products",
+ implied_group='product.group_uom',
+ help="""Allows you to select and maintain different units of measure for products."""),
+ 'module_purchase_analytic_plans': fields.boolean('Purchase Analytic Plan',
+ help ="""Allows the user to maintain several analysis plans. These let you split
+ lines on a purchase order between several accounts and analytic plans.
+ This installs the module purchase_analytic_plans."""),
+ 'module_warning': fields.boolean("Alerts by Products or Supplier",
+ help="""To trigger warnings in OpenERP objects.
+ Warning messages can be displayed for objects like sale order, purchase order, picking and invoice.
+ This installs the module warning."""),
+ 'module_product_manufacturer': fields.boolean("Define a Manufacturer of Products",
+ help="""This allows you to define the following for a product:
+ * Manufacturer
+ * Manufacturer Product Name
+ * Manufacturer Product Code
+ * Product Attributes.
+ This installs the module product_manufacturer."""),
+ 'module_purchase_double_validation': fields.boolean("Double Validation",
+ help="""Provide a double validation mechanism for purchases exceeding minimum amount.
+ This installs the module purchase_double_validation."""),
+ 'module_purchase_requisition': fields.boolean("Purchase Requisition",
+ help="""When a purchase order is created, you have the opportunity to save the related requisition.
+ This object regroups and allows you to keep track and order all your purchase orders.
+ This installs the module purchase_requisition."""),
+ }
+
+ _defaults = {
+ 'default_invoice_method': 'manual',
+ }
+
+
+
+class account_config_settings(osv.osv_memory):
+ _inherit = 'account.config.settings'
+ _columns = {
+ 'group_analytic_account_for_purchases': fields.boolean('Analytic Accounting for Purchases',
+ implied_group='purchase.group_analytic_accounting',
+ help="Allows you to specify an analytic account on purchase orders."),
+ }
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/purchase/res_config_view.xml b/addons/purchase/res_config_view.xml
new file mode 100644
index 00000000000..dcf9f921dbb
--- /dev/null
+++ b/addons/purchase/res_config_view.xml
@@ -0,0 +1,56 @@
+
+
+
+
+ purchase settings
+ purchase.config.settings
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Configure Purchases
+ ir.actions.act_window
+ purchase.config.settings
+ form
+ inline
+
+
+
+
+
+ account settings
+ account.config.settings
+ form
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/purchase/security/purchase_security.xml b/addons/purchase/security/purchase_security.xml
index 4a8ac571703..d3033a37a70 100644
--- a/addons/purchase/security/purchase_security.xml
+++ b/addons/purchase/security/purchase_security.xml
@@ -6,10 +6,18 @@
User
+
Manager
+
+
+
+
+ Analytic Accounting for Purchases
+
+
diff --git a/addons/purchase/test/process/invoice_on_poline.yml b/addons/purchase/test/process/invoice_on_poline.yml
index c2ad07aab95..1072a28f107 100644
--- a/addons/purchase/test/process/invoice_on_poline.yml
+++ b/addons/purchase/test/process/invoice_on_poline.yml
@@ -21,7 +21,6 @@
-
I set the default invoicing control method "Based on Purchase Order Lines".
-
- !python {model: purchase.config.wizard}: |
- new_id = self.create(cr ,uid, {'default_method': 'manual'})
+ !python {model: purchase.config.settings}: |
+ new_id = self.create(cr, uid, {'default_invoice_method': 'manual'})
self.execute(cr, uid, [new_id])
-
diff --git a/addons/purchase/wizard/__init__.py b/addons/purchase/wizard/__init__.py
index dbc3fc5e31b..bfb4810dd5d 100644
--- a/addons/purchase/wizard/__init__.py
+++ b/addons/purchase/wizard/__init__.py
@@ -20,7 +20,6 @@
##############################################################################
import purchase_order_group
-import purchase_installer
import purchase_line_invoice
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/purchase/wizard/purchase_installer.py b/addons/purchase/wizard/purchase_installer.py
deleted file mode 100644
index 484cb4a39dc..00000000000
--- a/addons/purchase/wizard/purchase_installer.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 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
-
-class purchase_config_wizard(osv.osv_memory):
- _name = 'purchase.config.wizard'
- _inherit = 'res.config'
-
- _columns = {
- 'default_method' : fields.selection(
- [('manual', 'Based on Purchase Order Lines'),
- ('picking', 'Based on Receptions'),
- ('order', 'Pre-Generate Draft Invoices based on Purchase Orders'),
- ], 'Default Invoicing Control Method', required=True,
- )
- }
- _defaults = {
- 'default_method': lambda s,c,u,ctx: s.pool.get('purchase.order').default_get(c,u,['invoice_method'],context=ctx)['invoice_method']
- }
-
- def execute(self, cr, uid, ids, context=None):
- wizard = self.browse(cr, uid, ids, context=context)[0]
- proxy = self.pool.get('ir.values')
- proxy.set(cr, uid, 'default', False, 'invoice_method', ['purchase.order'], wizard.default_method),
- return {'type' : 'ir.actions.act_window_close'}
-
-purchase_config_wizard()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/purchase/wizard/purchase_installer.xml b/addons/purchase/wizard/purchase_installer.xml
deleted file mode 100644
index 37ae97e9eca..00000000000
--- a/addons/purchase/wizard/purchase_installer.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
- Create or Import Suppliers
- ir.actions.act_window
- res.partner
- form
- tree,form
- {'search_default_supplier': 1, 'default_supplier' : True, 'default_customer' : False}
-
- Create or Import Suppliers and their contacts manually from this form or you can import your existing partners by CSV spreadsheet from "Import Data" wizard
-
-
-
- Purchase Management
- 5
-
-
-
-
-
-
-
-
- Invoicing Control on Purchases
- purchase.config.wizard
- form
-
-
-
-
- Invoicing Control on Purchases
-
-
-
- Invoicing Control on Purchases
-
-
- This tool will help you to select the method you want to use to control supplier invoices.
-
-
-
- 12
-
-
-
-
-
-
-
-
-
-
-
-
- Set the Default Invoicing Control Method
- purchase.config.wizard
- form
- form
- new
-
-
-
-
-
-
- once
-
-
-
diff --git a/addons/purchase_analytic_plans/i18n/cs.po b/addons/purchase_analytic_plans/i18n/cs.po
index 40fabb0ea94..36968f51af3 100644
--- a/addons/purchase_analytic_plans/i18n/cs.po
+++ b/addons/purchase_analytic_plans/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
-"PO-Revision-Date: 2009-11-17 10:15+0000\n"
-"Last-Translator: Kuvaly [LCT] \n"
+"PO-Revision-Date: 2012-04-06 04:51+0000\n"
+"Last-Translator: Jiří Hajda \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 05:58+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: purchase_analytic_plans
#: field:purchase.order.line,analytics_id:0
@@ -24,17 +24,17 @@ msgstr "Analytická distribuce"
#. module: purchase_analytic_plans
#: sql_constraint:purchase.order:0
msgid "Order Reference must be unique per Company!"
-msgstr ""
+msgstr "Odkaz obědnávky musí být jedinečný na společnost!"
#. module: purchase_analytic_plans
#: model:ir.model,name:purchase_analytic_plans.model_purchase_order_line
msgid "Purchase Order Line"
-msgstr ""
+msgstr "Řádek nákupní objednávky"
#. module: purchase_analytic_plans
#: model:ir.model,name:purchase_analytic_plans.model_purchase_order
msgid "Purchase Order"
-msgstr ""
+msgstr "Nákupní objednávka"
#~ msgid "Invalid XML for View Architecture!"
#~ msgstr "Invalidní XML pro zobrazení architektury!"
diff --git a/addons/purchase_double_validation/purchase_double_validation_installer.py b/addons/purchase_double_validation/purchase_double_validation_installer.py
index 791d1bf6dce..9bf03474e86 100644
--- a/addons/purchase_double_validation/purchase_double_validation_installer.py
+++ b/addons/purchase_double_validation/purchase_double_validation_installer.py
@@ -21,35 +21,29 @@
from osv import fields, osv
-class purchase_double_validation_installer(osv.osv_memory):
- _name = 'purchase.double.validation.installer'
- _inherit = 'res.config'
+class purchase_config_settings(osv.osv_memory):
+ _inherit = 'purchase.config.settings'
_columns = {
- 'limit_amount': fields.integer('Maximum Purchase Amount', required=True, help="Maximum amount after which validation of purchase is required."),
+ 'limit_amount': fields.integer('Double Validation Limit',required=True,
+ help="Amount after which validation of purchase is required."),
}
_defaults = {
'limit_amount': 5000,
}
- def execute(self, cr, uid, ids, context=None):
- data = self.read(cr, uid, ids, context=context)
- if not data:
- return {}
- amt = data[0]['limit_amount']
- data_pool = self.pool.get('ir.model.data')
- transition_obj = self.pool.get('workflow.transition')
- waiting = data_pool._get_id(cr, uid, 'purchase', 'trans_confirmed_router')
- waiting_id = data_pool.browse(cr, uid, waiting, context=context).res_id
- confirm = data_pool._get_id(cr, uid, 'purchase_double_validation', 'trans_waiting_confirmed')
- confirm_id = data_pool.browse(cr, uid, confirm, context=context).res_id
- transition_obj.write(cr, uid, waiting_id, {'condition': 'amount_total>=%s' % (amt)})
- transition_obj.write(cr, uid, confirm_id, {'condition': 'amount_total<%s' % (amt)})
- return {}
-
-purchase_double_validation_installer()
-
+ def get_default_limit_amount(self, cr, uid, fields, context=None):
+ ir_model_data = self.pool.get('ir.model.data')
+ transition = ir_model_data.get_object(cr, uid, 'purchase_double_validation', 'trans_waiting_confirmed')
+ field, value = transition.condition.split('<', 1)
+ return {'limit_amount': int(value)}
+ def set_limit_amount(self, cr, uid, ids, context=None):
+ ir_model_data = self.pool.get('ir.model.data')
+ config = self.browse(cr, uid, ids[0], context)
+ waiting = ir_model_data.get_object(cr, uid, 'purchase', 'trans_confirmed_router')
+ waiting.write({'condition': 'amount_total >= %s' % config.limit_amount})
+ confirm = ir_model_data.get_object(cr, uid, 'purchase_double_validation', 'trans_waiting_confirmed')
+ confirm.write({'condition': 'amount_total < %s' % config.limit_amount})
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/purchase_double_validation/purchase_double_validation_installer.xml b/addons/purchase_double_validation/purchase_double_validation_installer.xml
index 490581e472b..582312bfd6f 100644
--- a/addons/purchase_double_validation/purchase_double_validation_installer.xml
+++ b/addons/purchase_double_validation/purchase_double_validation_installer.xml
@@ -1,51 +1,17 @@
-
-
- Configure Limit Amount for Purchase
- purchase.double.validation.installer
+
+ Purchase Application
+ purchase.config.settingsform
-
+
-
-
- Purchase Application Configuration
-
-
- Configure Limit Amount for Purchase
-
-
- Define minimum amount after which puchase is needed to be validated.
-
-
- 15
-
-
-
-
-
-
-
+
+
+
-
- Configure Limit Amount for Purchase
- ir.actions.act_window
- purchase.double.validation.installer
-
- form
- form
- new
-
-
-
-
-
-
- once
-
-
diff --git a/addons/purchase_double_validation/purchase_double_validation_workflow.xml b/addons/purchase_double_validation/purchase_double_validation_workflow.xml
index b4005133b60..61503564246 100644
--- a/addons/purchase_double_validation/purchase_double_validation_workflow.xml
+++ b/addons/purchase_double_validation/purchase_double_validation_workflow.xml
@@ -3,7 +3,7 @@
- amount_untaxed >= 1000
+ amount_untaxed >= 5000purchase_approve
@@ -11,7 +11,7 @@
- amount_untaxed < 1000
+ amount_untaxed < 5000
diff --git a/addons/purchase_double_validation/test/purchase_double_validation_test.yml b/addons/purchase_double_validation/test/purchase_double_validation_test.yml
index 0d37b22abcf..b7172636386 100755
--- a/addons/purchase_double_validation/test/purchase_double_validation_test.yml
+++ b/addons/purchase_double_validation/test/purchase_double_validation_test.yml
@@ -1,10 +1,10 @@
-
I set new limit amount from Configure Limit Amount for Purchase .
-
- !record {model: purchase.double.validation.installer, id: purchase_double_validation_installer_1}:
+ !record {model: purchase.config.settings, id: purchase_double_validation_installer_1}:
limit_amount: 3000
-
- !python {model: purchase.double.validation.installer}: |
+ !python {model: purchase.config.settings}: |
self.execute(cr, uid, [ref("purchase_double_validation_installer_1")])
-
In order to test the flow, I confirmed the purchase order.
diff --git a/addons/purchase_requisition/security/purchase_tender.xml b/addons/purchase_requisition/security/purchase_tender.xml
index 71c54b973e3..12f9a9e56b8 100644
--- a/addons/purchase_requisition/security/purchase_tender.xml
+++ b/addons/purchase_requisition/security/purchase_tender.xml
@@ -17,6 +17,7 @@
Manager
+
diff --git a/addons/resource/i18n/cs.po b/addons/resource/i18n/cs.po
index 469162aa292..997d85063a0 100644
--- a/addons/resource/i18n/cs.po
+++ b/addons/resource/i18n/cs.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
-"PO-Revision-Date: 2011-09-06 06:16+0000\n"
+"PO-Revision-Date: 2012-04-06 05:18+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:57+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: resource
@@ -94,6 +94,7 @@ msgstr "Zdroje"
#, python-format
msgid "Make sure the Working time has been configured with proper week days!"
msgstr ""
+"Ujistěte se, že pracovní doba byla nastavena se správnými dny v týdnu!"
#. module: resource
#: field:resource.calendar,manager:0
@@ -249,6 +250,8 @@ msgid ""
"Define working hours and time table that could be scheduled to your project "
"members"
msgstr ""
+"Určuje pracovní hodiny a časovou tabulku, která může být naplánována vašim "
+"členům projektu"
#. module: resource
#: help:resource.resource,user_id:0
@@ -263,7 +266,7 @@ msgstr "Určit plánování zdroje"
#. module: resource
#: view:resource.calendar.leaves:0
msgid "Starting Date of Leave"
-msgstr ""
+msgstr "Počáteční datum uvolnění"
#. module: resource
#: field:resource.resource,code:0
@@ -335,7 +338,7 @@ msgstr "(dovolená)"
#: code:addons/resource/resource.py:392
#, python-format
msgid "Configuration Error!"
-msgstr ""
+msgstr "Chyba nastavení!"
#. module: resource
#: selection:resource.resource,resource_type:0
diff --git a/addons/sale/__init__.py b/addons/sale/__init__.py
index b26486e1425..2688b61ddd9 100644
--- a/addons/sale/__init__.py
+++ b/addons/sale/__init__.py
@@ -29,5 +29,6 @@ import wizard
import report
import company
import edi
+import res_config
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py
index ff2cfb03f5f..8a2686cca83 100644
--- a/addons/sale/__openerp__.py
+++ b/addons/sale/__openerp__.py
@@ -66,7 +66,7 @@ Dashboard for Sales Manager that includes:
'author': 'OpenERP SA',
'website': 'http://www.openerp.com',
'images': ['images/deliveries_to_invoice.jpeg','images/sale_dashboard.jpeg','images/Sale_order_line_to_invoice.jpeg','images/sale_order.jpeg','images/sales_analysis.jpeg'],
- 'depends': ['stock', 'procurement', 'board'],
+ 'depends': ['stock', 'procurement', 'board', 'account_voucher'],
'init_xml': [],
'update_xml': [
'wizard/sale_make_invoice_advance.xml',
@@ -85,6 +85,7 @@ Dashboard for Sales Manager that includes:
'process/sale_process.xml',
'board_sale_view.xml',
'edi/sale_order_action_data.xml',
+ 'res_config_view.xml',
],
'demo_xml': ['sale_demo.xml'],
'test': [
diff --git a/addons/sale/res_config.py b/addons/sale/res_config.py
new file mode 100644
index 00000000000..95590f8f0c6
--- /dev/null
+++ b/addons/sale/res_config.py
@@ -0,0 +1,174 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. ().
+#
+# 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 pooler
+from tools.translate import _
+
+class sale_configuration(osv.osv_memory):
+ _inherit = 'sale.config.settings'
+
+ _columns = {
+ 'group_invoice_so_lines': fields.boolean('Based on Sales Orders',
+ implied_group='sale.group_invoice_so_lines',
+ help="To allow your salesman to make invoices for sale order lines using the menu 'Lines to Invoice'."),
+ 'group_invoice_deli_orders': fields.boolean('Based on Delivery Orders',
+ implied_group='sale.group_invoice_deli_orders',
+ help="To allow your salesman to make invoices for Delivery Orders using the menu 'Deliveries to Invoice'."),
+ 'task_work': fields.boolean('Based on Tasks\' Work',
+ help="""Lets you transfer the entries under tasks defined for Project Management to
+ the Timesheet line entries for particular date and particular user with the effect of creating, editing and deleting either ways
+ and to automatically creates project tasks from procurement lines.
+ This installs the modules project_timesheet and project_mrp."""),
+ 'timesheet': fields.boolean('Based on Timesheet',
+ help = """For modifying account analytic view to show important data to project manager of services companies.
+ You can also view the report of account analytic summary user-wise as well as month wise.
+ This installs the module account_analytic_analysis."""),
+ 'module_account_analytic_analysis': fields.boolean('Manage Contracts',
+ help = """This installs the module account_analytic_analysis."""),
+ 'default_order_policy': fields.selection(
+ [('manual', 'Invoice Based on Sales Orders'), ('picking', 'Invoice Based on Deliveries')],
+ 'Main Method Based On', required=True, default_model='sale.order',
+ help="You can generate invoices based on sales orders or based on shippings."),
+ 'module_delivery': fields.boolean('Charge Delivery Costs',
+ help ="""Allows you to add delivery methods in sale orders and delivery orders.
+ You can define your own carrier and delivery grids for prices.
+ This installs the module delivery."""),
+ 'time_unit': fields.many2one('product.uom', 'Working Time Unit'),
+ 'default_picking_policy' : fields.boolean("Deliver all Products at Once",
+ help = "You can set picking policy on sale order that will allow you to deliver all products at once."),
+ 'group_sale_pricelist':fields.boolean("Pricelist per Customer",
+ implied_group='product.group_sale_pricelist',
+ help="""Allows to manage different prices based on rules per category of customers.
+ Example: 10% for retailers, promotion of 5 EUR on this product, etc."""),
+ 'group_uom':fields.boolean("Manage Different UoM for Products",
+ implied_group='product.group_uom',
+ help="""Allows you to select and maintain different units of measure for products."""),
+ 'group_sale_delivery_address': fields.boolean("Allow Different Addresses for Delivery and Invoice",
+ implied_group='sale.group_delivery_invoice_address',
+ help="Allows you to specify different delivery and invoice addresses on a sale order."),
+ 'group_discount_per_so_line': fields.boolean("Discount per Line",
+ implied_group='sale.group_discount_per_so_line',
+ help="Allows you to apply some discount per sale order line."),
+ 'module_sale_layout': fields.boolean("Notes & Subtotals per Line",
+ help="""Allows to format sale order lines using notes, separators, titles and subtotals.
+ This installs the module sale_layout."""),
+ 'module_warning': fields.boolean("Alerts by Products or Customers",
+ help="""To raise user specific warning messages on different products used in Sales Orders, Purchase Orders, Invoices and Deliveries.
+ This installs the module warning."""),
+ 'module_sale_margin': fields.boolean("Display Margins for Users",
+ help="""This adds the 'Margin' on sales order.
+ This gives the profitability by calculating the difference between the Unit Price and Cost Price.
+ This installs the module sale_margin."""),
+ 'module_sale_journal': fields.boolean("Allow Batch Invoicing through Journals",
+ help="""Allows you to categorize your sales and deliveries (picking lists) between different journals,
+ and perform batch operations on journals.
+ This installs the module sale_journal."""),
+ 'module_analytic_user_function': fields.boolean("User Function by Contract",
+ help="""Allows you to define what is the default function of a specific user on a given account.
+ This is mostly used when a user encodes his timesheet. The values are retrieved and the fields are auto-filled.
+ But the possibility to change these values is still available.
+ This installs the module analytic_user_function."""),
+ 'module_analytic_journal_billing_rate': fields.boolean("Billing Rates by Contract",
+ help="""Allows you to define the default invoicing rate for a specific journal on a given account.
+ This installs the module analytic_journal_billing_rate."""),
+ 'module_project_timesheet': fields.boolean("Project Timesheet"),
+ 'module_project_mrp': fields.boolean("Project MRP"),
+ 'module_project': fields.boolean("Project"),
+ }
+
+ def default_get(self, cr, uid, fields, context=None):
+ ir_model_data = self.pool.get('ir.model.data')
+ res = super(sale_configuration, self).default_get(cr, uid, fields, context)
+ # task_work, time_unit depend on other fields
+ res['task_work'] = res.get('module_project_mrp') and res.get('module_project_timesheet')
+ if res.get('module_project'):
+ user = self.pool.get('res.users').browse(cr, uid, uid, context)
+ res['time_unit'] = user.company_id.project_time_mode_id.id
+ else:
+ product = ir_model_data.get_object(cr, uid, 'product', 'product_consultant')
+ res['time_unit'] = product.uom_id.id
+ return res
+
+ def get_default_sale_config(self, cr, uid, ids, context=None):
+ ir_values = self.pool.get('ir.values')
+ default_picking_policy = ir_values.get_default(cr, uid, 'sale.order', 'picking_policy')
+ return {
+ 'default_picking_policy': default_picking_policy == 'one',
+ }
+
+ def _get_default_time_unit(self, cr, uid, context=None):
+ ids = self.pool.get('product.uom').search(cr, uid, [('name', '=', _('Hour'))], context=context)
+ return ids and ids[0] or False
+
+ _defaults = {
+ 'default_order_policy': 'manual',
+ 'time_unit': _get_default_time_unit,
+ }
+
+ def set_sale_defaults(self, cr, uid, ids, context=None):
+ ir_values = self.pool.get('ir.values')
+ ir_model_data = self.pool.get('ir.model.data')
+ wizard = self.browse(cr, uid, ids)[0]
+
+ default_picking_policy = 'one' if wizard.default_picking_policy else 'direct'
+ ir_values.set_default(cr, uid, 'sale.order', 'picking_policy', default_picking_policy)
+
+ if wizard.time_unit:
+ product = ir_model_data.get_object(cr, uid, 'product', 'product_consultant')
+ product.write({'uom_id': wizard.time_unit.id, 'uom_po_id': wizard.time_unit.id})
+
+ if wizard.module_project and wizard.time_unit:
+ user = self.pool.get('res.users').browse(cr, uid, uid, context)
+ user.company_id.write({'project_time_mode_id': wizard.time_unit.id})
+
+ return {}
+
+ def onchange_invoice_methods(self, cr, uid, ids, group_invoice_so_lines, group_invoice_deli_orders, context=None):
+ if not group_invoice_deli_orders:
+ return {'value': {'default_order_policy': 'manual'}}
+ if not group_invoice_so_lines:
+ return {'value': {'default_order_policy': 'picking'}}
+ return {}
+
+ def onchange_task_work(self, cr, uid, ids, task_work, context=None):
+ return {'value': {
+ 'module_project_timesheet': task_work,
+ 'module_project_mrp': task_work,
+ }}
+
+ def onchange_timesheet(self, cr, uid, ids, timesheet, context=None):
+ return {'value': {
+ 'timesheet': timesheet,
+ 'module_account_analytic_analysis': timesheet,
+ }}
+
+
+
+class account_config_settings(osv.osv_memory):
+ _inherit = 'account.config.settings'
+ _columns = {
+ 'group_analytic_account_for_sales': fields.boolean('Analytic Accounting for Sales',
+ implied_group='sale.group_analytic_accounting',
+ help="Allows you to specify an analytic account on sale orders."),
+ }
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale/res_config_view.xml b/addons/sale/res_config_view.xml
new file mode 100644
index 00000000000..5c64121038b
--- /dev/null
+++ b/addons/sale/res_config_view.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+ sale settings
+ sale.config.settings
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account settings
+ account.config.settings
+ form
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index d8e8ac60f3d..5ba6824fe19 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -48,7 +48,9 @@ sale_shop()
class sale_order(osv.osv):
_name = "sale.order"
+ _inherit = ['ir.needaction_mixin', 'mail.thread']
_description = "Sales Order"
+
def copy(self, cr, uid, id, default=None, context=None):
if not default:
@@ -307,7 +309,7 @@ class sale_order(osv.osv):
v['pricelist_id'] = shop.pricelist_id.id
return {'value': v}
- def action_cancel_draft(self, cr, uid, ids, *args):
+ def action_cancel_draft(self, cr, uid, ids, context=None):
if not len(ids):
return False
cr.execute('select id from sale_order_line where order_id IN %s and state=%s', (tuple(ids), 'cancel'))
@@ -319,9 +321,7 @@ class sale_order(osv.osv):
# Deleting the existing instance of workflow for SO
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 = _("The sales order '%s' has been set in draft state.") %(name,)
- self.log(cr, uid, id, message)
+ self.action_cancel_draft_send_note(cr, uid, ids, context=context)
return True
def onchange_pricelist_id(self, cr, uid, ids, pricelist_id, order_lines, context={}):
@@ -388,7 +388,10 @@ class sale_order(osv.osv):
vals.update({'invoice_quantity': 'order'})
if vals['order_policy'] == 'picking':
vals.update({'invoice_quantity': 'procurement'})
- return super(sale_order, self).create(cr, uid, vals, context=context)
+ order = super(sale_order, self).create(cr, uid, vals, context=context)
+ if order:
+ self.create_send_note(cr, uid, [order], context=context)
+ return order
def button_dummy(self, cr, uid, ids, context=None):
return True
@@ -551,6 +554,8 @@ class sale_order(osv.osv):
if order.order_policy == 'picking':
picking_obj.write(cr, uid, map(lambda x: x.id, order.picking_ids), {'invoice_state': 'invoiced'})
cr.execute('insert into sale_order_invoice_rel (order_id,invoice_id) values (%s,%s)', (order.id, res))
+ if res:
+ self.invoice_send_note(cr, uid, ids, res, context)
return res
def action_invoice_cancel(self, cr, uid, ids, context=None):
@@ -635,8 +640,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 = _("The sales order '%s' has been cancelled.") % (sale.name,)
- self.log(cr, uid, sale.id, message)
+ self.cancel_send_note(cr, uid, [sale.id], context=None)
self.write(cr, uid, ids, {'state': 'cancel'})
return True
@@ -649,8 +653,7 @@ class sale_order(osv.osv):
else:
self.write(cr, uid, [o.id], {'state': 'progress', 'date_confirm': fields.date.context_today(self, cr, uid, context=context)})
self.pool.get('sale.order.line').button_confirm(cr, uid, [x.id for x in o.order_line])
- message = _("The quotation '%s' has been converted to a sales order.") % (o.name,)
- self.log(cr, uid, o.id, message)
+ self.confirm_send_note(cr, uid, ids, context)
return True
def procurement_lines_get(self, cr, uid, ids, *args):
@@ -835,6 +838,8 @@ class sale_order(osv.osv):
wf_service = netsvc.LocalService("workflow")
if picking_id:
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
+ self.delivery_send_note(cr, uid, [order.id], picking_id, context)
+
for proc_id in proc_ids:
wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
@@ -873,7 +878,9 @@ class sale_order(osv.osv):
towrite.append(line.id)
if towrite:
self.pool.get('sale.order.line').write(cr, uid, towrite, {'state': 'done'}, context=context)
- self.write(cr, uid, [order.id], val)
+ res = self.write(cr, uid, [order.id], val)
+ if res:
+ self.delivery_end_send_note(cr, uid, [order.id], context=context)
return True
def _log_event(self, cr, uid, ids, factor=0.7, name='Open Order'):
@@ -905,6 +912,52 @@ class sale_order(osv.osv):
if order_line.product_id and order_line.product_id.product_tmpl_id.type in ('product', 'consu'):
return True
return False
+
+ # ------------------------------------------------
+ # OpenChatter methods and notifications
+ # ------------------------------------------------
+
+ def get_needaction_user_ids(self, cr, uid, ids, context=None):
+ result = dict.fromkeys(ids, [])
+ for obj in self.browse(cr, uid, ids, context=context):
+ if (obj.state == 'manual' or obj.state == 'progress'):
+ result[obj.id] = [obj.user_id.id]
+ return result
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids, context=context):
+ self.message_subscribe(cr, uid, [obj.id], [obj.user_id.id], context=context)
+ self.message_append_note(cr, uid, [obj.id], body=_("Quotation for %s has been created.") % (obj.partner_id.name), context=context)
+
+ def confirm_send_note(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids, context=context):
+ self.message_append_note(cr, uid, [obj.id], body=_("Quotation for %sconverted to Sale Order of %s %s.") % (obj.partner_id.name, obj.amount_total, obj.pricelist_id.currency_id.symbol), context=context)
+
+ def cancel_send_note(self, cr, uid, ids, context=None):
+ for obj in self.browse(cr, uid, ids, context=context):
+ self.message_append_note(cr, uid, [obj.id], body=_("Sale Order for %scancelled.") % (obj.partner_id.name), context=context)
+
+ def delivery_send_note(self, cr, uid, ids, picking_id, context=None):
+ for order in self.browse(cr, uid, ids, context=context):
+ for picking in (pck for pck in order.picking_ids if pck.id == picking_id):
+ pck_date = datetime.strptime(picking.min_date, '%Y-%m-%d %H:%M:%S').strftime('%m/%d/%Y')
+ self.message_append_note(cr, uid, [order.id], body=_("Delivery Order %sscheduled for %s.") % (picking.name, pck_date), context=context)
+
+ def delivery_end_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Order delivered."), context=context)
+
+ def invoice_paid_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Invoice paid."), context=context)
+
+ def invoice_send_note(self, cr, uid, ids, invoice_id, context=None):
+ for order in self.browse(cr, uid, ids, context=context):
+ for invoice in (inv for inv in order.invoice_ids if inv.id == invoice_id):
+ self.message_append_note(cr, uid, [order.id], body=_("Draft Invoice of %s %s waiting for validation.") % (invoice.amount_total, invoice.currency_id.symbol), context=context)
+
+ def action_cancel_draft_send_note(self, cr, uid, ids, context=None):
+ return self.message_append_note(cr, uid, ids, body='Sale order has been set in draft.', context=context)
+
+
sale_order()
# TODO add a field price_unit_uos
@@ -1325,95 +1378,4 @@ class sale_order_line(osv.osv):
sale_order_line()
-class sale_config_picking_policy(osv.osv_memory):
- _name = 'sale.config.picking_policy'
- _inherit = 'res.config'
-
- _columns = {
- 'name': fields.char('Name', size=64),
- 'sale_orders': fields.boolean('Based on Sales Orders',),
- 'deli_orders': fields.boolean('Based on Delivery Orders'),
- 'task_work': fields.boolean('Based on Tasks\' Work'),
- 'timesheet': fields.boolean('Based on Timesheet'),
- 'order_policy': fields.selection([
- ('manual', 'Invoice Based on Sales Orders'),
- ('picking', 'Invoice Based on Deliveries'),
- ], 'Main Method Based On', required=True, help="You can generate invoices based on sales orders or based on shippings."),
- 'charge_delivery': fields.boolean('Do you charge the delivery?'),
- 'time_unit': fields.many2one('product.uom','Main Working Time Unit')
- }
- _defaults = {
- 'order_policy': 'manual',
- 'time_unit': lambda self, cr, uid, c: self.pool.get('product.uom').search(cr, uid, [('name', '=', _('Hour'))], context=c) and self.pool.get('product.uom').search(cr, uid, [('name', '=', _('Hour'))], context=c)[0] or False,
- }
-
- def onchange_order(self, cr, uid, ids, sale, deli, context=None):
- res = {}
- if sale:
- res.update({'order_policy': 'manual'})
- elif deli:
- res.update({'order_policy': 'picking'})
- return {'value':res}
-
- def execute(self, cr, uid, ids, context=None):
- ir_values_obj = self.pool.get('ir.values')
- data_obj = self.pool.get('ir.model.data')
- menu_obj = self.pool.get('ir.ui.menu')
- module_obj = self.pool.get('ir.module.module')
- module_upgrade_obj = self.pool.get('base.module.upgrade')
- module_name = []
-
- group_id = data_obj.get_object(cr, uid, 'base', 'group_sale_salesman').id
-
- wizard = self.browse(cr, uid, ids)[0]
-
- if wizard.sale_orders:
- menu_id = data_obj.get_object(cr, uid, 'sale', 'menu_invoicing_sales_order_lines').id
- menu_obj.write(cr, uid, menu_id, {'groups_id':[(4,group_id)]})
-
- if wizard.deli_orders:
- menu_id = data_obj.get_object(cr, uid, 'sale', 'menu_action_picking_list_to_invoice').id
- menu_obj.write(cr, uid, menu_id, {'groups_id':[(4,group_id)]})
-
- if wizard.task_work:
- module_name.append('project_timesheet')
- module_name.append('project_mrp')
- module_name.append('account_analytic_analysis')
-
- if wizard.timesheet:
- module_name.append('account_analytic_analysis')
-
- if wizard.charge_delivery:
- module_name.append('delivery')
-
- if len(module_name):
- module_ids = []
- need_install = False
- module_ids = []
- for module in module_name:
- data_id = module_obj.name_search(cr, uid , module, [], '=')
- module_ids.append(data_id[0][0])
-
- for module in module_obj.browse(cr, uid, module_ids):
- if module.state == 'uninstalled':
- module_obj.state_update(cr, uid, [module.id], 'to install', ['uninstalled'], context)
- need_install = True
- cr.commit()
- if need_install:
- pooler.restart_pool(cr.dbname, update_module=True)[1]
-
- if wizard.time_unit:
- prod_id = data_obj.get_object(cr, uid, 'product', 'product_consultant').id
- product_obj = self.pool.get('product.product')
- product_obj.write(cr, uid, prod_id, {'uom_id':wizard.time_unit.id, 'uom_po_id': wizard.time_unit.id})
-
- ir_values_obj.set(cr, uid, 'default', False, 'order_policy', ['sale.order'], wizard.order_policy)
- if wizard.task_work and wizard.time_unit:
- company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id
- self.pool.get('res.company').write(cr, uid, [company_id], {
- 'project_time_mode_id': wizard.time_unit.id
- }, context=context)
-
-sale_config_picking_policy()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index 09ad9381e26..fa39793f939 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -17,7 +17,7 @@
-
+
@@ -30,7 +30,7 @@
-
+
@@ -112,10 +112,10 @@
-
-
-
-
+
+
+
+
-
-
- Setup your Invoicing Method
-
-
- This tool will help you to install the right module and configure the system according to the method you use to invoice your customers.
-
-
-
- 12
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Setup your Invoicing Method
- ir.actions.act_window
- sale.config.picking_policy
-
- form
- form
- new
-
-
-
-
-
-
- once
-
+
+
diff --git a/addons/sale/security/sale_security.xml b/addons/sale/security/sale_security.xml
index ae8c8bf62e3..0cb55fb0d30 100644
--- a/addons/sale/security/sale_security.xml
+++ b/addons/sale/security/sale_security.xml
@@ -20,7 +20,33 @@
-
+
+ Enable Invoicing Sale order lines
+
+
+
+
+ Enable Invoicing Delivery orders
+
+
+
+
+ Addresses in Sale Orders
+
+
+
+
+ Discount on lines
+
+
+
+
+ Analytic Accounting for Sales
+
+
+
+
+
diff --git a/addons/sale/stock_view.xml b/addons/sale/stock_view.xml
index 7b9e90f6f0a..578a6fb5802 100644
--- a/addons/sale/stock_view.xml
+++ b/addons/sale/stock_view.xml
@@ -74,7 +74,7 @@
{'default_type': 'out', 'contact_display': 'partner_address', 'search_default_to_invoice': 1, 'search_default_done': 1}
-
+
diff --git a/addons/sale/test/manual_order_policy.yml b/addons/sale/test/manual_order_policy.yml
index d997e792696..bb197763486 100644
--- a/addons/sale/test/manual_order_policy.yml
+++ b/addons/sale/test/manual_order_policy.yml
@@ -82,8 +82,8 @@
-
I set order policy "Deliver & invoice on demand" as default policy.
-
- !record {model: sale.config.picking_policy, id: sale.config.picking_policy_0}:
- order_policy: 'manual'
+ !record {model: sale.config.settings, id: sale_configuration_0}:
+ default_order_policy: 'manual'
-
- !python {model: sale.config.picking_policy}: |
- self.execute(cr, uid, [ref("sale.config.picking_policy_0")])
+ !python {model: sale.config.settings}: |
+ self.execute(cr, uid, [ref("sale_configuration_0")], context=context)
diff --git a/addons/sale/wizard/sale_make_invoice_advance.py b/addons/sale/wizard/sale_make_invoice_advance.py
index b51fd9bcb93..94cae45519d 100644
--- a/addons/sale/wizard/sale_make_invoice_advance.py
+++ b/addons/sale/wizard/sale_make_invoice_advance.py
@@ -105,7 +105,7 @@ class sale_advance_payment_inv(osv.osv_memory):
for inv in sale.invoice_ids:
ids_inv.append(inv.id)
ids_inv.append(inv_id)
- obj_sale.write(cr, uid, sale.id, {'invoice_ids': [(6, 0, ids_inv)]})
+ obj_sale.write(cr, uid, [sale.id], {'invoice_ids': [(6, 0, ids_inv)]})
list_inv.append(inv_id)
#
# If invoice on picking: add the cost on the SO
diff --git a/addons/sale_analytic_plans/i18n/cs.po b/addons/sale_analytic_plans/i18n/cs.po
index 09bbc0497a5..de13b709c5d 100644
--- a/addons/sale_analytic_plans/i18n/cs.po
+++ b/addons/sale_analytic_plans/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
-"PO-Revision-Date: 2010-08-03 06:36+0000\n"
-"Last-Translator: Konki \n"
+"PO-Revision-Date: 2012-04-06 04:50+0000\n"
+"Last-Translator: Jiří Hajda \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:43+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: sale_analytic_plans
#: field:sale.order.line,analytics_id:0
@@ -24,7 +24,7 @@ msgstr "Analytická distribuce"
#. module: sale_analytic_plans
#: model:ir.model,name:sale_analytic_plans.model_sale_order_line
msgid "Sales Order Line"
-msgstr ""
+msgstr "Řádek prodejní objednávky"
#~ msgid "Invalid XML for View Architecture!"
#~ msgstr "Neplatný XML pro View Architecture!"
diff --git a/addons/sale_crm/i18n/cs.po b/addons/sale_crm/i18n/cs.po
index a86992afcd4..e799b92548d 100644
--- a/addons/sale_crm/i18n/cs.po
+++ b/addons/sale_crm/i18n/cs.po
@@ -7,31 +7,31 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
-"PO-Revision-Date: 2011-07-15 18:59+0000\n"
+"PO-Revision-Date: 2012-04-06 05:16+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:14+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: sale_crm
#: field:sale.order,categ_id:0
msgid "Category"
-msgstr ""
+msgstr "Kategorie"
#. module: sale_crm
#: sql_constraint:sale.order:0
msgid "Order Reference must be unique per Company!"
-msgstr ""
+msgstr "Odkaz obědnávky musí být jedinečný na společnost!"
#. module: sale_crm
#: code:addons/sale_crm/wizard/crm_make_sale.py:112
#, python-format
msgid "Converted to Sales Quotation(%s)."
-msgstr ""
+msgstr "Převedeno na prodejní ocenění(%s)."
#. module: sale_crm
#: view:crm.make.sale:0
@@ -63,7 +63,7 @@ msgstr "_Vytvořit"
#. module: sale_crm
#: view:sale.order:0
msgid "My Sales Team(s)"
-msgstr ""
+msgstr "Můj prodejní tým"
#. module: sale_crm
#: help:crm.make.sale,close:0
@@ -76,7 +76,7 @@ msgstr ""
#. module: sale_crm
#: view:board.board:0
msgid "My Opportunities"
-msgstr ""
+msgstr "Moje příležitosti"
#. module: sale_crm
#: view:crm.lead:0
@@ -107,7 +107,7 @@ msgstr "Užavřít příležitost"
#. module: sale_crm
#: view:board.board:0
msgid "My Planned Revenues by Stage"
-msgstr ""
+msgstr "Moje plánované výnosy podle fáze"
#. module: sale_crm
#: code:addons/sale_crm/wizard/crm_make_sale.py:110
diff --git a/addons/sale_crm/wizard/crm_make_sale.py b/addons/sale_crm/wizard/crm_make_sale.py
index fe79815fbee..3923336eb5b 100644
--- a/addons/sale_crm/wizard/crm_make_sale.py
+++ b/addons/sale_crm/wizard/crm_make_sale.py
@@ -105,9 +105,8 @@ class crm_make_sale(osv.osv_memory):
sale_order = sale_obj.browse(cr, uid, new_id, context=context)
case_obj.write(cr, uid, [case.id], {'ref': 'sale.order,%s' % new_id})
new_ids.append(new_id)
- message = _("Opportunity '%s' is converted to Quotation.") % (case.name)
- self.log(cr, uid, case.id, message)
- case_obj.message_append(cr, uid, [case], _("Converted to Sales Quotation(%s).") % (sale_order.name), context=context)
+ message = _("Opportunity has been converted to the quotation %s.") % (sale_order.name)
+ case.message_append_note(body=message)
if make.close:
case_obj.case_close(cr, uid, data)
diff --git a/addons/sale_layout/sale_layout_view.xml b/addons/sale_layout/sale_layout_view.xml
index 78f98d3002f..146ca8aa006 100644
--- a/addons/sale_layout/sale_layout_view.xml
+++ b/addons/sale_layout/sale_layout_view.xml
@@ -37,6 +37,7 @@
on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, False, False, parent.date_order, product_packaging, parent.fiscal_position, True, context)"/>
@@ -99,7 +100,7 @@
-
+
diff --git a/addons/sale_order_dates/sale_order_dates_view.xml b/addons/sale_order_dates/sale_order_dates_view.xml
index c6544d5238f..672a1cadd0e 100644
--- a/addons/sale_order_dates/sale_order_dates_view.xml
+++ b/addons/sale_order_dates/sale_order_dates_view.xml
@@ -8,15 +8,16 @@
form
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/addons/share/security/share_security.xml b/addons/share/security/share_security.xml
index 1e92ac44a53..29971077a2c 100644
--- a/addons/share/security/share_security.xml
+++ b/addons/share/security/share_security.xml
@@ -12,6 +12,7 @@
Members of this groups have access to the sharing wizard, which allows them to invite external users to view or edit some of their documents.
+
diff --git a/addons/share/static/src/css/share.css b/addons/share/static/src/css/share.css
index 8b137891791..379b3fbb86b 100644
--- a/addons/share/static/src/css/share.css
+++ b/addons/share/static/src/css/share.css
@@ -1 +1,8 @@
+button.oe-share-mail {
+ width: 120px;
+ display: none;
+}
+a.oe-share_link, a.oe-share {
+ display: none;
+}
diff --git a/addons/share/static/src/js/share.js b/addons/share/static/src/js/share.js
index a4dfba12e28..3563a4bb859 100644
--- a/addons/share/static/src/js/share.js
+++ b/addons/share/static/src/js/share.js
@@ -1,23 +1,29 @@
openerp.share = function(session) {
-function launch_wizard(self, view, user_type) {
+ var has_action_id = false;
+
+ function launch_wizard(self, view, user_type, invite) {
var action = view.getParent().action;
var Share = new session.web.DataSet(self, 'share.wizard', view.dataset.get_context());
var domain = new session.web.CompoundDomain(view.dataset.domain);
if (view.fields_view.type == 'form') {
domain = new session.web.CompoundDomain(domain, [['id', '=', view.datarecord.id]]);
}
+ if (view.fields_view.type == 'form') rec_name = view.datarecord.name;
+ else rec_name = '';
self.rpc('/web/session/eval_domain_and_context', {
domains: [domain],
contexts: [view.dataset.context]
}, function (result) {
Share.create({
name: action.name,
+ record_name: rec_name,
domain: result.domain,
action_id: action.id,
user_type: user_type || 'embedded',
view_type: view.fields_view.type,
+ invite: invite || false,
}, function(result) {
var share_id = result.result;
var step1 = Share.call('go_step_1', [[share_id],], function(result) {
@@ -26,63 +32,90 @@ function launch_wizard(self, view, user_type) {
});
});
});
-}
-
-function has_share(yes, no) {
- if (!session.connection.share_flag) {
- session.connection.share_flag = $.Deferred(function() {
- var func = new session.web.Model("share.wizard").get_func("has_share");
- func(session.connection.uid).pipe(function(res) {
- if(res) {
- session.connection.share_flag.resolve();
- } else {
- session.connection.share_flag.reject();
- }
- });
- });
}
- session.connection.share_flag.done(yes).fail(no);
-}
-session.web.Sidebar = session.web.Sidebar.extend({
- add_default_sections: function() {
- this._super();
- var self = this;
- has_share(function() {
- self.add_items('other', [{
- label: 'Share',
- callback: self.on_sidebar_click_share,
- classname: 'oe-share',
- }]);
- });
- },
- on_sidebar_click_share: function(item) {
- var view = this.getParent()
- launch_wizard(this, view);
- },
-});
+ function has_share(yes, no) {
+ if (!session.connection.share_flag) {
+ session.connection.share_flag = $.Deferred(function() {
+ var func = new session.web.Model("share.wizard").get_func("has_share");
+ func(session.connection.uid).pipe(function(res) {
+ if(res) {
+ session.connection.share_flag.resolve();
+ } else {
+ session.connection.share_flag.reject();
+ }
+ });
+ });
+ }
+ session.connection.share_flag.done(yes).fail(no);
+ }
-session.web.ViewManagerAction.include({
- start: function() {
- var self = this;
- has_share(function() {
- self.$element.find('a.oe-share_link').click(self.on_click_share_link);
- self.$element.find('a.oe-share').click(self.on_click_share);
- }, function() {
- self.$element.find('a.oe-share_link').remove();
- self.$element.find('a.oe-share').remove();
- });
- return this._super.apply(this, arguments);
- },
- on_click_share_link: function(e) {
- e.preventDefault();
- launch_wizard(this, this.views[this.active_view].controller);
- },
- on_click_share: function(e) {
- e.preventDefault();
- launch_wizard(this, this.views[this.active_view].controller, 'emails');
- },
-});
+ session.web.Sidebar = session.web.Sidebar.extend({
+ add_default_sections: function() {
+ this._super();
+ var self = this;
+ has_share(function() {
+ self.add_items('other', [{
+ label: 'Share',
+ callback: self.on_sidebar_click_share,
+ classname: 'oe-share',
+ }]);
+ });
+ },
+ on_sidebar_click_share: function(item) {
+ var view = this.getParent()
+ launch_wizard(this, view);
+ },
+ });
+ session.mail.RecordThread.include( {
+ start: function() {
+ start_res = this._super.apply(this, arguments);
+ if (has_action_id) {
+ this.$element.find('button.oe-share-mail').show();
+ }
+ return start_res;
+ }
+ });
+
+ session.web.ViewManagerAction.include({
+ start: function() {
+ var self = this;
+ this.check_if_action_is_defined();
+ has_share(function() {
+ self.$element.find('a.oe-share_link').click(self.on_click_share_link);
+ self.$element.find('a.oe-share').click(self.on_click_share);
+ self.$element.delegate('button.oe-share-mail', 'click', self.on_click_share_mail);
+ }, function() {
+ self.$element.find('a.oe-share_link').remove();
+ self.$element.find('a.oe-share').remove();
+ });
+ return this._super.apply(this, arguments);
+ },
+
+ check_if_action_is_defined: function() {
+ if (this.action && this.action.id) {
+ has_action_id = true;
+ this.$element.find('a.oe-share_link').show();
+ this.$element.find('a.oe-share').show();
+ }
+ else {
+ has_action_id = false;
+ }
+ },
+
+ on_click_share_link: function(e) {
+ e.preventDefault();
+ launch_wizard(this, this.views[this.active_view].controller, 'embedded', false);
+ },
+ on_click_share: function(e) {
+ e.preventDefault();
+ launch_wizard(this, this.views[this.active_view].controller, 'emails', false);
+ },
+ on_click_share_mail: function(e) {
+ e.preventDefault();
+ launch_wizard(this, this.views[this.active_view].controller, 'emails', true);
+ },
+ });
};
diff --git a/addons/share/static/src/xml/share.xml b/addons/share/static/src/xml/share.xml
index 532e8c74c9d..d79c2d8501e 100644
--- a/addons/share/static/src/xml/share.xml
+++ b/addons/share/static/src/xml/share.xml
@@ -10,4 +10,11 @@
+
+
+
+
+
+
+
diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py
index 09fb43ca361..854f021bf67 100644
--- a/addons/share/wizard/share_wizard.py
+++ b/addons/share/wizard/share_wizard.py
@@ -165,12 +165,17 @@ class share_wizard(osv.osv_memory):
'user_type': fields.selection(lambda s, *a, **k: s._user_type_selection(*a, **k),'Sharing method', required=True,
help="Select the type of user(s) you would like to share data with."),
'new_users': fields.text("Emails"),
+ 'email_1': fields.char('New user email', size=64),
+ 'email_2': fields.char('New user email', size=64),
+ 'email_3': fields.char('New user email', size=64),
+ 'invite': fields.boolean('Invite users to OpenSocial record'),
'access_mode': fields.selection([('readonly','Can view'),('readwrite','Can edit')],'Access Mode', required=True,
help="Access rights to be granted on the shared documents."),
'result_line_ids': fields.one2many('share.wizard.result.line', 'share_wizard_id', 'Summary', readonly=True),
'share_root_url': fields.function(_share_root_url, string='Share Access URL', type='char', size=512, readonly=True,
help='Main access page for users that are granted shared access'),
'name': fields.char('Share Title', size=64, required=True, help="Title for the share (displayed to users as menu and shortcut name)"),
+ 'record_name': fields.char('Record name', size=128, help="Name of the shared record, if sharing a precise record"),
'message': fields.text("Personal Message", help="An optional personal message, to be included in the e-mail notification."),
'embed_code': fields.function(_embed_code, type='text'),
@@ -181,6 +186,7 @@ class share_wizard(osv.osv_memory):
_defaults = {
'view_type': 'page',
'user_type' : 'embedded',
+ 'invite': False,
'domain': lambda self, cr, uid, context, *a: context.get('domain', '[]'),
'action_id': lambda self, cr, uid, context, *a: context.get('action_id'),
'access_mode': 'readonly',
@@ -192,8 +198,8 @@ class share_wizard(osv.osv_memory):
return bool(self.pool.get('res.users').browse(cr, uid, uid, context=context).user_email)
def go_step_1(self, cr, uid, ids, context=None):
- user_type = self.browse(cr,uid,ids,context)[0].user_type
- if user_type == 'emails' and not self.has_email(cr, uid, context=context):
+ wizard_data = self.browse(cr,uid,ids,context)[0]
+ if wizard_data.user_type == 'emails' and not self.has_email(cr, uid, context=context):
raise osv.except_osv(_('No e-mail address configured'),
_('You must configure your e-mail address in the user preferences before using the Share button.'))
model, res_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'share', 'action_share_wizard_step1')
@@ -223,12 +229,18 @@ class share_wizard(osv.osv_memory):
created_ids = []
existing_ids = []
if wizard_data.user_type == 'emails':
- for new_user in (wizard_data.new_users or '').split('\n'):
+ # get new user list from email data
+ new_users = (wizard_data.new_users or '').split('\n')
+ new_users += [wizard_data.email_1 or '', wizard_data.email_2 or '', wizard_data.email_3 or '']
+ for new_user in new_users:
# Ignore blank lines
new_user = new_user.strip()
if not new_user: continue
# Ignore the user if it already exists.
- existing = user_obj.search(cr, UID_ROOT, [('login', '=', new_user)])
+ if not wizard_data.invite:
+ existing = user_obj.search(cr, UID_ROOT, [('login', '=', new_user)])
+ else:
+ existing = user_obj.search(cr, UID_ROOT, [('user_email', '=', new_user)])
existing_ids.extend(existing)
if existing:
new_line = { 'user_id': existing[0],
@@ -243,6 +255,7 @@ class share_wizard(osv.osv_memory):
'user_email': new_user,
'groups_id': [(6,0,[group_id])],
'share': True,
+ 'message_email_pref': 'all',
'company_id': current_user.company_id.id
}, context)
new_line = { 'user_id': user_id,
@@ -643,7 +656,7 @@ class share_wizard(osv.osv_memory):
_('You must be a member of the Share/User group to use the share wizard'),
context=context)
if wizard_data.user_type == 'emails':
- self._assert(wizard_data.new_users,
+ self._assert((wizard_data.new_users or wizard_data.email_1 or wizard_data.email_2 or wizard_data.email_3),
_('Please indicate the emails of the persons to share with, one per line'),
context=context)
@@ -667,21 +680,21 @@ class share_wizard(osv.osv_memory):
if new_ids:
# new users need a new shortcut AND a home action
self._setup_action_and_shortcut(cr, uid, wizard_data, new_ids, make_home=True, context=context)
- return group_id
+ return group_id, new_ids, existing_ids
def go_step_2(self, cr, uid, ids, context=None):
wizard_data = self.browse(cr, uid, ids[0], context=context)
self._check_preconditions(cr, uid, wizard_data, context=context)
# Create shared group and users
- group_id = self._create_share_users_group(cr, uid, wizard_data, context=context)
+ group_id, new_ids, existing_ids = self._create_share_users_group(cr, uid, wizard_data, context=context)
current_user = self.pool.get('res.users').browse(cr, uid, uid, 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:
@@ -731,68 +744,141 @@ class share_wizard(osv.osv_memory):
# refresh wizard_data
wizard_data = self.browse(cr, uid, ids[0], context=context)
+
+ # EMAILS AND NOTIFICATIONS
+ # A. Not invite: as before
+ # -> send emails to destination users
+ # B. Invite (OpenSocial)
+ # -> subscribe all users (existing and new) to the record
+ # -> send a notification with a summary to the current record
+ # -> send a notification to all users; users allowing to receive
+ # emails in preferences will receive it
+ # new users by default receive all notifications by email
+
+ # A.
+ if not wizard_data.invite:
+ self.send_emails(cr, uid, wizard_data, context=context)
+ # B.
+ else:
+ # Invite (OpenSocial): automatically subscribe users to the record
+ res_id = 0
+ for cond in safe_eval(main_domain):
+ if cond[0] == 'id':
+ res_id = cond[2]
+ # Record id not found: issue
+ if res_id <= 0:
+ raise osv.except_osv(_('Record id not found'), _('The share engine has not been able to fetch a record_id for your invitation.'))
+ self.pool.get(model.model).message_subscribe(cr, uid, [res_id], new_ids + existing_ids, context=context)
+ self.send_invite_email(cr, uid, wizard_data, context=context)
+ self.send_invite_note(cr, uid, model.model, res_id, wizard_data, context=context)
+
+ # CLOSE
+ # A. Not invite: as before
+ # B. Invite: skip summary screen, get back to the record
+
+ # A.
+ if not wizard_data.invite:
+ dummy, step2_form_view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'share', 'share_step2_form')
+ return {
+ 'name': _('Shared access created!'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'share.wizard',
+ 'view_id': False,
+ 'res_id': ids[0],
+ 'views': [(step2_form_view_id, 'form'), (False, 'tree'), (False, 'calendar'), (False, 'graph')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new'
+ }
+ # B.
+ else:
+ return {
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': model.model,
+ 'view_id': False,
+ 'res_id': res_id,
+ 'views': [(False, 'form'), (False, 'tree'), (False, 'calendar'), (False, 'graph')],
+ 'type': 'ir.actions.act_window',
+ }
+
- # send the confirmation emails:
- self.send_emails(cr, uid, wizard_data, context=context)
-
- dummy, step2_form_view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'share', 'share_step2_form')
- return {
- 'name': _('Shared access created!'),
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_model': 'share.wizard',
- 'view_id': False,
- 'res_id': ids[0],
- 'views': [(step2_form_view_id, 'form'), (False, 'tree'), (False, 'calendar'), (False, 'graph')],
- 'type': 'ir.actions.act_window',
- 'target': 'new'
- }
-
+ def send_invite_note(self, cr, uid, model_name, res_id, wizard_data, context=None):
+ subject = _('Invitation')
+ body = 'has been shared with'
+ tmp_idx = 0
+ for result_line in wizard_data.result_line_ids:
+ body += ' @%s' % (result_line.user_id.login)
+ if tmp_idx < len(wizard_data.result_line_ids)-2:
+ body += ','
+ elif tmp_idx == len(wizard_data.result_line_ids)-2:
+ body += ' and'
+ body += '.'
+ return self.pool.get(model_name).message_append_note(cr, uid, [res_id], _('System Notification'), body, context=context)
+
+ def send_invite_email(self, cr, uid, wizard_data, context=None):
+ message_obj = self.pool.get('mail.message')
+ notification_obj = self.pool.get('mail.notification')
+ user = self.pool.get('res.users').browse(cr, UID_ROOT, uid)
+ 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.'))
+
+ # TODO: also send an HTML version of this mail
+ for result_line in wizard_data.result_line_ids:
+ email_to = result_line.user_id.user_email
+ if not email_to:
+ continue
+ subject = _('Invitation to collaborate about %s') % (wizard_data.record_name)
+ body = _("Hello,\n\n")
+ body += _("I have shared %s (%s) with you!\n\n") % (wizard_data.record_name, wizard_data.name)
+ if wizard_data.message:
+ body += "%s\n\n" % (wizard_data.message)
+ if result_line.newly_created:
+ body += _("The documents are not attached, you can view them online directly on my OpenERP server at:\n %s\n\n") % (result_line.share_url)
+ body += _("These are your credentials to access this protected area:\n")
+ body += "%s: %s" % (_("Username"), result_line.user_id.login) + "\n"
+ body += "%s: %s" % (_("Password"), result_line.password) + "\n"
+ body += "%s: %s" % (_("Database"), cr.dbname) + "\n"
+ body += _("The documents have been automatically added to your subscriptions.\n\n")
+ body += '%s\n\n' % ((user.signature or ''))
+ body += "--\n"
+ body += _("OpenERP is a powerful and user-friendly suite of Business Applications (CRM, Sales, HR, etc.)\n"
+ "It is open source and can be found on http://www.openerp.com.")
+ msg_id = message_obj.schedule_with_attach(cr, uid, user.user_email, [email_to], subject, body, model='', context=context)
+ notification_obj.create(cr, uid, {'user_id': result_line.user_id.id, 'message_id': msg_id}, context=context)
+
def send_emails(self, cr, uid, wizard_data, context=None):
self._logger.info('Sending share notifications by email...')
mail_message = self.pool.get('mail.message')
user = self.pool.get('res.users').browse(cr, UID_ROOT, uid)
-
+ 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.'))
+
# TODO: also send an HTML version of this mail
msg_ids = []
for result_line in wizard_data.result_line_ids:
email_to = result_line.user_id.user_email
if not email_to:
continue
- 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.'))
subject = wizard_data.name
- body = _("Hello,")
- body += "\n\n"
- body += _("I've shared %s with you!") % wizard_data.name
- body += "\n\n"
- body += _("The documents are not attached, you can view them online directly on my OpenERP server at:")
- body += "\n " + result_line.share_url
- body += "\n\n"
+ body = _("Hello,\n\n")
+ body += _("I've shared %s with you!\n\n") % wizard_data.name
+ body += _("The documents are not attached, you can view them online directly on my OpenERP server at:\n %s\n\n") % (result_line.share_url)
if wizard_data.message:
- body += wizard_data.message
- body += "\n\n"
+ body += '%s\n\n' % (wizard_data.message)
if result_line.newly_created:
body += _("These are your credentials to access this protected area:\n")
- body += "%s: %s" % (_("Username"), result_line.user_id.login) + "\n"
- body += "%s: %s" % (_("Password"), result_line.password) + "\n"
- body += "%s: %s" % (_("Database"), cr.dbname) + "\n"
+ body += "%s: %s\n" % (_("Username"), result_line.user_id.login)
+ body += "%s: %s\n" % (_("Password"), result_line.password)
+ body += "%s: %s\n" % (_("Database"), cr.dbname)
else:
body += _("The documents have been automatically added to your current OpenERP documents.\n")
body += _("You may use your current login (%s) and password to view them.\n") % result_line.user_id.login
- body += "\n\n"
- body += (user.signature or '')
- body += "\n\n"
+ body += "\n\n%s\n\n" % ( (user.signature or '') )
body += "--\n"
body += _("OpenERP is a powerful and user-friendly suite of Business Applications (CRM, Sales, HR, etc.)\n"
"It is open source and can be found on http://www.openerp.com.")
- msg_ids.append(mail_message.schedule_with_attach(cr, uid,
- user.user_email,
- [email_to],
- subject,
- body,
- model='share.wizard',
- context=context))
+ msg_ids.append(mail_message.schedule_with_attach(cr, uid, user.user_email, [email_to], subject, body, model='share.wizard', context=context))
# force direct delivery, as users expect instant notification
mail_message.send(cr, uid, msg_ids, context=context)
self._logger.info('%d share notification(s) sent.', len(msg_ids))
diff --git a/addons/share/wizard/share_wizard_view.xml b/addons/share/wizard/share_wizard_view.xml
index 29bd5e59f01..77d9213f315 100644
--- a/addons/share/wizard/share_wizard_view.xml
+++ b/addons/share/wizard/share_wizard_view.xml
@@ -30,16 +30,23 @@
-
+
+
-
+
+
+
+
+
+
+
-
+
-
-
+
+
diff --git a/addons/stock/__init__.py b/addons/stock/__init__.py
index 0a241209593..0f1e96a9c67 100644
--- a/addons/stock/__init__.py
+++ b/addons/stock/__init__.py
@@ -24,5 +24,6 @@ import partner
import product
import report
import wizard
+import res_config
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py
index 8bca2dc82f0..88ddead6645 100644
--- a/addons/stock/__openerp__.py
+++ b/addons/stock/__openerp__.py
@@ -81,6 +81,7 @@ Thanks to the double entry management, the inventory controlling is powerful and
"report/report_stock_move_view.xml",
"report/report_stock_view.xml",
"board_warehouse_view.xml",
+ "res_config_view.xml",
],
'test': [
'test/opening_stock.yml',
diff --git a/addons/stock/partner_view.xml b/addons/stock/partner_view.xml
index 04cd0207dd3..5a90c20aa81 100644
--- a/addons/stock/partner_view.xml
+++ b/addons/stock/partner_view.xml
@@ -6,20 +6,20 @@
-->
- res.partner.stock.property.form.inherit
- res.partner
- form
-
-
-
-
-
-
-
-
-
-
+ res.partner.stock.property.form.inherit
+ res.partner
+ form
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/addons/stock/product_view.xml b/addons/stock/product_view.xml
index bded802dfe6..19533933002 100644
--- a/addons/stock/product_view.xml
+++ b/addons/stock/product_view.xml
@@ -40,9 +40,9 @@
form
-
+
-
+
@@ -79,7 +79,7 @@
26
-
+
@@ -116,11 +116,11 @@
-
+
-
-
-
+
+
+
@@ -169,7 +169,7 @@
-
+
diff --git a/addons/stock/res_config.py b/addons/stock/res_config.py
new file mode 100644
index 00000000000..0113149278c
--- /dev/null
+++ b/addons/stock/res_config.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# Copyright (C) 2004-2012 OpenERP S.A. ().
+#
+# 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
+
+class stock_config_settings(osv.osv_memory):
+ _name = 'stock.config.settings'
+ _inherit = 'res.config.settings'
+
+ _columns = {
+ 'module_stock_no_autopicking': fields.boolean("Force Picking before Manufactoring Orders",
+ help="""This module allows an intermediate picking process to provide raw materials to production orders.
+ For example to manage production made by your suppliers (sub-contracting).
+ To achieve this, set the assembled product which is sub-contracted to "No Auto-Picking"
+ and put the location of the supplier in the routing of the assembly operation.
+ This installs the module stock_no_autopicking."""),
+ 'module_claim_from_delivery': fields.boolean("Track Claims from Delivery",
+ help="""Adds a Claim link to the delivery order.
+ This installs the module claim_from_delivery."""),
+ 'module_stock_invoice_directly': fields.boolean("Invoice Picking on Delivery",
+ help="""This allows to automatically launch the invoicing wizard if the delivery is
+ to be invoiced when you send or deliver goods.
+ This installs the module stock_invoice_directly."""),
+ 'module_product_expiry': fields.boolean("Expiry Date on Lots",
+ help="""Track different dates on products and production lots.
+ The following dates can be tracked:
+ - end of life
+ - best before date
+ - removal date
+ - alert date.
+ This installs the module product_expiry."""),
+ 'module_stock_location': fields.boolean("Push/Pull Logistic Rules",
+ help="""Provide push and pull inventory flows. Typical uses of this feature are:
+ manage product manufacturing chains, manage default locations per product,
+ define routes within your warehouse according to business needs, etc.
+ This installs the module stock_location."""),
+ 'group_uom': fields.boolean("Manage Different UoM for Products",
+ implied_group='product.group_uom',
+ help="""Allows you to select and maintain different units of measure for products."""),
+ 'group_uos': fields.boolean("Manage Secondary UoM (for Sale)",
+ implied_group='product.group_uos',
+ help="""Allows you to sell units of a product, but invoice based on a different unit of measure.
+ For instance, you can sell pieces of meat that you invoice based on their weight."""),
+ 'group_stock_packaging': fields.boolean("Manage Product Packaging",
+ implied_group='product.group_stock_packaging',
+ help="""Allows you to create and manage your packaging dimensions and types you want to be maintained in your system."""),
+ 'group_stock_production_lot': fields.boolean("Serial Numbers on Products",
+ implied_group='stock.group_production_lot',
+ help="""This allows you to manage products by using serial numbers.
+ When you select a lot, you can get the upstream or downstream traceability of the products contained in lot."""),
+ 'group_stock_tracking_lot': fields.boolean("Serial Numbers on Pallets (Logistic Units)",
+ implied_group='stock.group_tracking_lot',
+ help="""Allows you to get the upstream or downstream traceability of the products contained in lot."""),
+ 'group_stock_inventory_valuation': fields.boolean("Accounting Entries per Stock Movement",
+ implied_group='stock.group_inventory_valuation',
+ help="""This allows to split stock inventory lines according to production lots."""),
+ 'group_stock_multiple_locations': fields.boolean("Manage Multiple Locations and Warehouses",
+ implied_group='stock.group_locations',
+ help="""This allows to configure and use multiple stock locations and warehouses,
+ instead of having a single default one."""),
+ }
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/res_config_view.xml b/addons/stock/res_config_view.xml
new file mode 100644
index 00000000000..aa31c4adf9d
--- /dev/null
+++ b/addons/stock/res_config_view.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+ stock settings
+ stock.config.settings
+ form
+
+
-
+
-
+
-
+
@@ -250,7 +250,7 @@
@@ -345,10 +345,10 @@
-
-
+
+
-
+
@@ -409,7 +409,7 @@
This is the list of all the production lots (serial numbers) you recorded. When you select a lot, you can get the upstream or downstream traceability of the products contained in lot. By default, the list is filtred on the serial numbers that are available in your warehouse but you can uncheck the 'Available' button to get all the lots you produced, received or delivered to customers.
#
@@ -424,10 +424,10 @@
-
-
-
-
+
+
+
+
@@ -448,10 +448,10 @@
-
-
-
-
+
+
+
+
@@ -585,7 +585,8 @@
{'search_default_in_location':1}Define your locations to reflect your warehouse structure and organization. OpenERP is able to manage physical locations (warehouses, shelves, bin, etc), partner locations (customers, suppliers) and virtual locations which are the counterpart of the stock operations like the manufacturing orders consumptions, 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 to the Stock location. Each report can be performed on physical, partner or virtual locations.
-
+ stock.location.tree
@@ -650,7 +651,8 @@
Create and manage your warehouses and assign them a location from here
-
+ stock.picking.calendar
@@ -710,7 +712,7 @@
-
+
-
+
-
+
@@ -749,10 +751,10 @@
string="Scrap" type="action" groups="base.group_extended"
icon="gtk-convert" context="{'scrap': True}"
states="draft,waiting,confirmed,assigned" colspan="1"/>
-
+
-
+
@@ -768,19 +770,19 @@
-
-
-
+
+
+
-
@@ -901,27 +903,27 @@
-
+
-
+
-
+ groups="stock.group_production_lot"/>
+
@@ -938,10 +940,10 @@
string="Scrap" type="action"
icon="gtk-convert" context="{'scrap': True}"
states="draft,waiting,confirmed,assigned" colspan="1" groups="base.group_extended"/>
-
+
-
+
@@ -957,19 +959,19 @@
-
-
-
+
+
+
-
@@ -1006,6 +1008,7 @@
+
@@ -1119,27 +1122,27 @@
-
+
-
+
-
+
@@ -1155,10 +1158,10 @@
string="Scrap" type="action" groups="base.group_extended"
icon="gtk-convert" context="{'scrap': True}"
states="draft,waiting,confirmed,assigned" colspan="1"/>
-
+
-
+
@@ -1174,19 +1177,19 @@
-
-
-
+
+
+
-
@@ -1220,6 +1223,7 @@
+
@@ -1360,25 +1364,25 @@
-
+
-
+
-
+ groups="stock.group_tracking_lot"/>
+
@@ -1403,7 +1407,7 @@
-
+
@@ -1533,24 +1537,24 @@
-
+
-
+
-
+ groups="stock.group_tracking_lot"/>
+
@@ -1571,7 +1575,7 @@
-
+
@@ -1589,7 +1593,7 @@
-
+
-
-
-
+
+
+
-
diff --git a/addons/stock/wizard/stock_change_product_qty.py b/addons/stock/wizard/stock_change_product_qty.py
index 9d3de5692f0..162aea77f86 100644
--- a/addons/stock/wizard/stock_change_product_qty.py
+++ b/addons/stock/wizard/stock_change_product_qty.py
@@ -26,6 +26,7 @@ import tools
class stock_change_product_qty(osv.osv_memory):
_name = "stock.change.product.qty"
+ _inherit = ['mail.thread']
_description = "Change Product Quantity"
_columns = {
'product_id' : fields.many2one('product.product', 'Product'),
@@ -98,9 +99,24 @@ class stock_change_product_qty(osv.osv_memory):
inventry_obj.action_confirm(cr, uid, [inventory_id], context=context)
inventry_obj.action_done(cr, uid, [inventory_id], context=context)
-
+ self.change_product_qty_send_note(cr, uid, [data.id], context)
return {}
+ def change_product_qty_send_note (self, cr, uid, ids, context=None):
+ prod_obj = self.pool.get('product.product')
+ location_obj = self.pool.get('stock.location')
+ prod_temp_obj = self.pool.get('product.template')
+ uom_obj = self.pool.get('product.uom')
+
+ for data in self.browse(cr, uid, ids, context=context):
+ for location in location_obj.browse(cr, uid, [data.location_id.id], context=context):
+ location_name = location.name
+ for prod in prod_obj.browse(cr, uid, [data.product_id.id], context=context):
+ for prod_temp in prod_temp_obj.browse(cr, uid, [prod.product_tmpl_id.id], context=context):
+ for uom in uom_obj.browse(cr, uid, [prod_temp.uom_id.id], context=context):
+ message = _("Quantity has been changed to %s %s for %s location.") % (data.new_quantity,uom.name,location_name)
+ prod_obj.message_append_note(cr, uid, [prod.id], body=message, context=context)
+
stock_change_product_qty()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock_invoice_directly/i18n/cs.po b/addons/stock_invoice_directly/i18n/cs.po
index 26e21813723..8df36e22bae 100644
--- a/addons/stock_invoice_directly/i18n/cs.po
+++ b/addons/stock_invoice_directly/i18n/cs.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: 2012-02-08 00:37+0000\n"
-"PO-Revision-Date: 2009-11-17 10:52+0000\n"
-"Last-Translator: Kuvaly [LCT] \n"
+"PO-Revision-Date: 2012-04-06 04:48+0000\n"
+"Last-Translator: Jiří Hajda \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:51+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: stock_invoice_directly
#: model:ir.model,name:stock_invoice_directly.model_stock_partial_picking
msgid "Partial Picking Processing Wizard"
-msgstr ""
+msgstr "Průvodce zpracování částečného navádění"
#~ msgid "Invoice Picking Directly"
#~ msgstr "Přímé vybírání faktur"
diff --git a/addons/stock_no_autopicking/i18n/cs.po b/addons/stock_no_autopicking/i18n/cs.po
index 453e602407d..9442838c14c 100644
--- a/addons/stock_no_autopicking/i18n/cs.po
+++ b/addons/stock_no_autopicking/i18n/cs.po
@@ -7,24 +7,24 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
-"PO-Revision-Date: 2009-11-17 10:53+0000\n"
-"Last-Translator: Kuvaly [LCT] \n"
+"PO-Revision-Date: 2012-04-06 05:15+0000\n"
+"Last-Translator: Jiří Hajda \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:44+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
#. module: stock_no_autopicking
#: model:ir.model,name:stock_no_autopicking.model_product_product
msgid "Product"
-msgstr ""
+msgstr "Výrobek"
#. module: stock_no_autopicking
#: model:ir.model,name:stock_no_autopicking.model_mrp_production
msgid "Manufacturing Order"
-msgstr ""
+msgstr "Výrobní příkaz"
#. module: stock_no_autopicking
#: field:product.product,auto_pick:0
@@ -34,22 +34,22 @@ msgstr "Auto výběr"
#. module: stock_no_autopicking
#: help:product.product,auto_pick:0
msgid "Auto picking for raw materials of production orders."
-msgstr ""
+msgstr "Automatické navádění pro hrubý materiál výrobních příkazů."
#. module: stock_no_autopicking
#: constraint:product.product:0
msgid "Error: Invalid ean code"
-msgstr ""
+msgstr "Chyba: Neplatný kód ean"
#. module: stock_no_autopicking
#: sql_constraint:mrp.production:0
msgid "Reference must be unique per Company!"
-msgstr ""
+msgstr "Odkaz musí být jedinečný na společnost"
#. module: stock_no_autopicking
#: constraint:mrp.production:0
msgid "Order quantity cannot be negative or zero!"
-msgstr ""
+msgstr "Objednané množství nesmí být záporné nebo nulové!"
#~ msgid "Invalid XML for View Architecture!"
#~ msgstr "Invalidní XML pro zobrazení architektury!"
diff --git a/addons/subscription/security/subcription_security.xml b/addons/subscription/security/subcription_security.xml
index 7d665c96435..46293a97561 100644
--- a/addons/subscription/security/subcription_security.xml
+++ b/addons/subscription/security/subcription_security.xml
@@ -10,6 +10,7 @@
Manager
+
diff --git a/addons/survey/security/survey_security.xml b/addons/survey/security/survey_security.xml
index c44a35e3ee9..3b0cf5844ce 100644
--- a/addons/survey/security/survey_security.xml
+++ b/addons/survey/security/survey_security.xml
@@ -9,9 +9,11 @@
Manager
+ Survey / User
+
diff --git a/addons/web_livechat/i18n/cs.po b/addons/web_livechat/i18n/cs.po
new file mode 100644
index 00000000000..bb1aa79d289
--- /dev/null
+++ b/addons/web_livechat/i18n/cs.po
@@ -0,0 +1,28 @@
+# Czech translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 01:37+0100\n"
+"PO-Revision-Date: 2012-04-06 04:48+0000\n"
+"Last-Translator: Jiří Hajda \n"
+"Language-Team: Czech \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: web_livechat
+#: sql_constraint:publisher_warranty.contract:0
+msgid "That contract is already registered in the system."
+msgstr "Tato smlouva je již v systému registrována."
+
+#. module: web_livechat
+#: model:ir.model,name:web_livechat.model_publisher_warranty_contract
+msgid "publisher_warranty.contract"
+msgstr "publisher_warranty.contract"
diff --git a/addons/web_uservoice/i18n/cs.po b/addons/web_uservoice/i18n/cs.po
new file mode 100644
index 00000000000..44c6db7c35e
--- /dev/null
+++ b/addons/web_uservoice/i18n/cs.po
@@ -0,0 +1,23 @@
+# Czech translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 01:37+0100\n"
+"PO-Revision-Date: 2012-04-06 04:46+0000\n"
+"Last-Translator: Jiří Hajda \n"
+"Language-Team: Czech \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/web_uservoice/static/src/xml/web_uservoice.xml:6
+msgid "feedback"
+msgstr "zpětná vazba"
diff --git a/addons/wiki/i18n/cs.po b/addons/wiki/i18n/cs.po
index fee7fa45d0c..fb63420ede4 100644
--- a/addons/wiki/i18n/cs.po
+++ b/addons/wiki/i18n/cs.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
-"PO-Revision-Date: 2011-09-05 06:39+0000\n"
+"PO-Revision-Date: 2012-04-06 04:44+0000\n"
"Last-Translator: Jiří Hajda \n"
"Language-Team: Czech \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-02-09 06:46+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
"X-Poedit-Language: Czech\n"
#. module: wiki
@@ -98,7 +98,7 @@ msgstr "Rodičovská nabídka"
#: code:addons/wiki/wizard/wiki_make_index.py:52
#, python-format
msgid "There is no section in this Page"
-msgstr ""
+msgstr "Na této stránce není žádná sekce"
#. module: wiki
#: field:wiki.groups,name:0 view:wiki.wiki:0 field:wiki.wiki,group_id:0
diff --git a/addons/wiki/security/wiki_security.xml b/addons/wiki/security/wiki_security.xml
index 16bd30c151f..ca9d34ae99c 100644
--- a/addons/wiki/security/wiki_security.xml
+++ b/addons/wiki/security/wiki_security.xml
@@ -5,6 +5,7 @@
User
+
diff --git a/addons/wiki_faq/i18n/cs.po b/addons/wiki_faq/i18n/cs.po
new file mode 100644
index 00000000000..fde36d8fde9
--- /dev/null
+++ b/addons/wiki_faq/i18n/cs.po
@@ -0,0 +1,32 @@
+# Czech translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:16+0000\n"
+"PO-Revision-Date: 2012-04-06 04:46+0000\n"
+"Last-Translator: Jiří Hajda \n"
+"Language-Team: Czech \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: wiki_faq
+#: model:ir.module.module,description:wiki_faq.module_meta_information
+msgid ""
+"This module provides a wiki FAQ Template\n"
+" "
+msgstr ""
+"Tento modul poskytuje šablonu wiki FAQ\n"
+" "
+
+#. module: wiki_faq
+#: model:ir.module.module,shortdesc:wiki_faq.module_meta_information
+msgid "Document Management - Wiki - FAQ"
+msgstr "Správa dokumentů - Wiki - FAQ"
diff --git a/addons/wiki_quality_manual/i18n/cs.po b/addons/wiki_quality_manual/i18n/cs.po
new file mode 100644
index 00000000000..86cf27747ec
--- /dev/null
+++ b/addons/wiki_quality_manual/i18n/cs.po
@@ -0,0 +1,32 @@
+# Czech translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:16+0000\n"
+"PO-Revision-Date: 2012-04-06 04:47+0000\n"
+"Last-Translator: Jiří Hajda \n"
+"Language-Team: Czech \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-04-07 04:55+0000\n"
+"X-Generator: Launchpad (build 15060)\n"
+
+#. module: wiki_quality_manual
+#: model:ir.module.module,description:wiki_quality_manual.module_meta_information
+msgid ""
+"Quality Manual Template\n"
+" "
+msgstr ""
+"Šablona příručky kvality\n"
+" "
+
+#. module: wiki_quality_manual
+#: model:ir.module.module,shortdesc:wiki_quality_manual.module_meta_information
+msgid "Document Management - Wiki - Quality Manual"
+msgstr "Správa dokumentů - Wiki - Příručka kvality"
diff --git a/addons/wiki_sale_faq/wiki_sale_faq_data.xml b/addons/wiki_sale_faq/wiki_sale_faq_data.xml
index a349f77404f..d9bd8de43ff 100644
--- a/addons/wiki_sale_faq/wiki_sale_faq_data.xml
+++ b/addons/wiki_sale_faq/wiki_sale_faq_data.xml
@@ -3,7 +3,7 @@
Sales Document
-
+ 0