From 1e1b85e95b307f6eb61c46ae9149bf96a46f9145 Mon Sep 17 00:00:00 2001
From: Antony Lesuisse
Date: Sat, 22 Sep 2012 14:43:54 +0200
Subject: [PATCH 001/253] gevent first try
bzr revid: al@openerp.com-20120922124354-unk1u8a9anst5hwo
---
openerp-server | 6 ++++++
openerp/service/__init__.py | 3 ++-
openerp/service/wsgi_server.py | 5 ++++-
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/openerp-server b/openerp-server
index 9025e2d50c2..4d28a4cb759 100755
--- a/openerp-server
+++ b/openerp-server
@@ -223,6 +223,12 @@ def main():
check_root_user()
openerp.tools.config.parse_config(sys.argv[1:])
+ # TODO GEVENT if event
+ import gevent.monkey
+ gevent.monkey.patch_all()
+ import gevent_psycopg2
+ gevent_psycopg2.monkey_patch()
+
check_postgres_user()
openerp.netsvc.init_logger()
report_configuration()
diff --git a/openerp/service/__init__.py b/openerp/service/__init__.py
index 30a765b1f60..d3a57135284 100644
--- a/openerp/service/__init__.py
+++ b/openerp/service/__init__.py
@@ -86,7 +86,8 @@ def start_services():
netrpc_server.init_servers()
# Start the main cron thread.
- openerp.cron.start_master_thread()
+ # TODO GEVENT if event use greenlet in cron
+ # openerp.cron.start_master_thread()
# Start the top-level servers threads (normally HTTP, HTTPS, and NETRPC).
openerp.netsvc.Server.startAll()
diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py
index 61556974a00..d15d423818b 100644
--- a/openerp/service/wsgi_server.py
+++ b/openerp/service/wsgi_server.py
@@ -424,7 +424,10 @@ def serve():
# TODO Change the xmlrpc_* options to http_*
interface = config['xmlrpc_interface'] or '0.0.0.0'
port = config['xmlrpc_port']
- httpd = werkzeug.serving.make_server(interface, port, application, threaded=True)
+ #httpd = werkzeug.serving.make_server(interface, port, application, threaded=True)
+ # TODO GEVENT if event
+ from gevent.wsgi import WSGIServer
+ httpd = WSGIServer((interface, port), application)
_logger.info('HTTP service (werkzeug) running on %s:%s', interface, port)
httpd.serve_forever()
From 966cadcdd66dc9518a389d54eece1cc49a9ee247 Mon Sep 17 00:00:00 2001
From: niv-openerp
Date: Thu, 15 Nov 2012 15:47:28 +0100
Subject: [PATCH 002/253] Put back cron thread
bzr revid: nicolas.vanhoren@openerp.com-20121115144728-0ts5h9m7873892fd
---
openerp/service/__init__.py | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/openerp/service/__init__.py b/openerp/service/__init__.py
index 6e3de89ddff..11fe45aaf31 100644
--- a/openerp/service/__init__.py
+++ b/openerp/service/__init__.py
@@ -82,10 +82,8 @@ def start_services():
# Initialize the HTTP stack.
netrpc_server.init_servers()
- # Start the main cron thread.
- # TODO GEVENT if event use greenlet in cron
- #if openerp.conf.max_cron_threads:
- # openerp.cron.start_master_thread()
+ if openerp.conf.max_cron_threads:
+ openerp.cron.start_master_thread()
# Start the top-level servers threads (normally HTTP, HTTPS, and NETRPC).
openerp.netsvc.Server.startAll()
From 468652ccf7802f2b39a95144aca9e7eeb51dbca5 Mon Sep 17 00:00:00 2001
From: niv-openerp
Date: Fri, 16 Nov 2012 10:41:18 +0100
Subject: [PATCH 003/253] Had to remove the cron again
bzr revid: nicolas.vanhoren@openerp.com-20121116094118-ph3oxmwr5qhcp3c7
---
openerp/service/__init__.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/openerp/service/__init__.py b/openerp/service/__init__.py
index 11fe45aaf31..9f5a7a03009 100644
--- a/openerp/service/__init__.py
+++ b/openerp/service/__init__.py
@@ -83,7 +83,8 @@ def start_services():
netrpc_server.init_servers()
if openerp.conf.max_cron_threads:
- openerp.cron.start_master_thread()
+ #openerp.cron.start_master_thread()
+ pass
# Start the top-level servers threads (normally HTTP, HTTPS, and NETRPC).
openerp.netsvc.Server.startAll()
From 7137bb0b53f38d1a600d47d0b7b9ec83a824337f Mon Sep 17 00:00:00 2001
From: niv-openerp
Date: Thu, 22 Nov 2012 15:53:09 +0100
Subject: [PATCH 004/253] [IMP] Added configuration option for gevent
bzr revid: nicolas.vanhoren@openerp.com-20121122145309-bim6m10p0q7rf6wj
---
openerp-server | 14 +++++++++-----
openerp/service/__init__.py | 6 +++---
openerp/service/wsgi_server.py | 9 +++++----
openerp/tools/config.py | 3 ++-
4 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/openerp-server b/openerp-server
index f0a858bbe2c..73586e58890 100755
--- a/openerp-server
+++ b/openerp-server
@@ -224,15 +224,19 @@ def main():
check_root_user()
openerp.tools.config.parse_config(sys.argv[1:])
- # TODO GEVENT if event
- import gevent.monkey
- gevent.monkey.patch_all()
- import gevent_psycopg2
- gevent_psycopg2.monkey_patch()
+ if openerp.tools.config.options["gevent"]:
+ _logger.info('Using gevent mode')
+ import gevent.monkey
+ gevent.monkey.patch_all()
+ import gevent_psycopg2
+ gevent_psycopg2.monkey_patch()
check_postgres_user()
openerp.netsvc.init_logger()
report_configuration()
+
+ if openerp.tools.config.options["gevent"]:
+ _logger.info('Using gevent mode')
config = openerp.tools.config
diff --git a/openerp/service/__init__.py b/openerp/service/__init__.py
index 9f5a7a03009..154a93df001 100644
--- a/openerp/service/__init__.py
+++ b/openerp/service/__init__.py
@@ -82,9 +82,9 @@ def start_services():
# Initialize the HTTP stack.
netrpc_server.init_servers()
- if openerp.conf.max_cron_threads:
- #openerp.cron.start_master_thread()
- pass
+ if not openerp.tools.config.options["gevent"]:
+ if openerp.conf.max_cron_threads:
+ openerp.cron.start_master_thread()
# Start the top-level servers threads (normally HTTP, HTTPS, and NETRPC).
openerp.netsvc.Server.startAll()
diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py
index 8018657fd28..00ad54575b1 100644
--- a/openerp/service/wsgi_server.py
+++ b/openerp/service/wsgi_server.py
@@ -424,10 +424,11 @@ def serve():
# TODO Change the xmlrpc_* options to http_*
interface = config['xmlrpc_interface'] or '0.0.0.0'
port = config['xmlrpc_port']
- #httpd = werkzeug.serving.make_server(interface, port, application, threaded=True)
- # TODO GEVENT if event
- from gevent.wsgi import WSGIServer
- httpd = WSGIServer((interface, port), application)
+ if not openerp.tools.config.options["gevent"]:
+ httpd = werkzeug.serving.make_server(interface, port, application, threaded=True)
+ else:
+ from gevent.wsgi import WSGIServer
+ httpd = WSGIServer((interface, port), application)
_logger.info('HTTP service (werkzeug) running on %s:%s', interface, port)
httpd.serve_forever()
diff --git a/openerp/tools/config.py b/openerp/tools/config.py
index 56f1e5c7b83..e037bf7a6ac 100644
--- a/openerp/tools/config.py
+++ b/openerp/tools/config.py
@@ -106,6 +106,7 @@ class configmanager(object):
help="specify additional addons paths (separated by commas).",
action="callback", callback=self._check_addons_path, nargs=1, type="string")
group.add_option("--load", dest="server_wide_modules", help="Comma-separated list of server-wide modules default=web")
+ group.add_option("--gevent", dest="gevent", action="store_true", my_default=False, help="Activate the GEvent mode, this also desactivate the cron.")
parser.add_option_group(group)
# XML-RPC / HTTP
@@ -380,7 +381,7 @@ class configmanager(object):
'netrpc', 'xmlrpc', 'syslog', 'without_demo', 'timezone',
'xmlrpcs_interface', 'xmlrpcs_port', 'xmlrpcs',
'static_http_enable', 'static_http_document_root', 'static_http_url_prefix',
- 'secure_cert_file', 'secure_pkey_file', 'dbfilter', 'log_handler', 'log_level'
+ 'secure_cert_file', 'secure_pkey_file', 'dbfilter', 'log_handler', 'log_level', 'gevent'
]
for arg in keys:
From c3cb554ab06df9bee9242dbf30bb0117d7751f03 Mon Sep 17 00:00:00 2001
From: niv-openerp
Date: Thu, 22 Nov 2012 16:06:01 +0100
Subject: [PATCH 005/253] Improved config
bzr revid: nicolas.vanhoren@openerp.com-20121122150601-7wha9rao9ix2myvv
---
openerp/tools/config.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/openerp/tools/config.py b/openerp/tools/config.py
index e037bf7a6ac..7e5b3e0f334 100644
--- a/openerp/tools/config.py
+++ b/openerp/tools/config.py
@@ -381,7 +381,7 @@ class configmanager(object):
'netrpc', 'xmlrpc', 'syslog', 'without_demo', 'timezone',
'xmlrpcs_interface', 'xmlrpcs_port', 'xmlrpcs',
'static_http_enable', 'static_http_document_root', 'static_http_url_prefix',
- 'secure_cert_file', 'secure_pkey_file', 'dbfilter', 'log_handler', 'log_level', 'gevent'
+ 'secure_cert_file', 'secure_pkey_file', 'dbfilter', 'log_handler', 'log_level'
]
for arg in keys:
@@ -400,7 +400,7 @@ class configmanager(object):
'list_db', 'xmlrpcs', 'proxy_mode',
'test_file', 'test_enable', 'test_commit', 'test_report_directory',
'osv_memory_count_limit', 'osv_memory_age_limit', 'max_cron_threads', 'unaccent',
- 'workers', 'limit_memory_hard', 'limit_memory_soft', 'limit_time_cpu', 'limit_time_real', 'limit_request'
+ 'workers', 'limit_memory_hard', 'limit_memory_soft', 'limit_time_cpu', 'limit_time_real', 'limit_request', 'gevent'
]
for arg in keys:
From 96d50a9a40d77680ffbd1719385e33757c89f725 Mon Sep 17 00:00:00 2001
From: Josse Colpaert
Date: Mon, 10 Dec 2012 15:16:02 +0100
Subject: [PATCH 006/253] [FIX] added period_id field to account_voucher dialog
lp bug: https://launchpad.net/bugs/1062621 fixed
bzr revid: jco@openerp.com-20121210141602-z7sa9lou4vkuczw3
---
addons/account_voucher/voucher_payment_receipt_view.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml
index b6f367601ff..0f923bcd1f4 100644
--- a/addons/account_voucher/voucher_payment_receipt_view.xml
+++ b/addons/account_voucher/voucher_payment_receipt_view.xml
@@ -305,6 +305,7 @@
widget="selection"
on_change="onchange_journal(journal_id, line_cr_ids, False, partner_id, date, amount, type, company_id, context)"
string="Payment Method"/>
+
From dc47ad6c737e386d9ad163cb0cb39c6fe0c02724 Mon Sep 17 00:00:00 2001
From: Josse Colpaert
Date: Wed, 19 Dec 2012 10:22:35 +0100
Subject: [PATCH 007/253] [FIX] Added onchange_company for gain and loss
accounts in config settings
lp bug: https://launchpad.net/bugs/1076509 fixed
bzr revid: jco@openerp.com-20121219092235-wci6jo81q2ihgpgd
---
addons/account_voucher/account_voucher.py | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index 41d3476442e..59399a766d5 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -56,6 +56,13 @@ class account_config_settings(osv.osv_memory):
relation='account.account',
string="Loss Exchange Rate Account"),
}
+ def onchange_company_id(self, cr, uid, ids, company_id):
+ res = super(account_config_settings, self).onchange_company_id(cr, uid, ids, company_id)
+ if company_id:
+ company = self.pool.get('res.company').browse(cr, uid, company_id)
+ res['value'].update({'income_currency_exchange_account_id': company.income_currency_exchange_account_id and company.income_currency_exchange_account_id.id,
+ 'expense_currency_exchange_account_id': company.expense_currency_exchange_account_id and company.expense_currency_exchange_account_id.id})
+ return res
class account_voucher(osv.osv):
def _check_paid(self, cr, uid, ids, name, args, context=None):
From a02e894bfcad34945bceaf2a2ef97251555f2d78 Mon Sep 17 00:00:00 2001
From: Josse Colpaert
Date: Wed, 19 Dec 2012 12:55:17 +0100
Subject: [PATCH 008/253] [FIX] Correction when no account or no company
bzr revid: jco@openerp.com-20121219115517-uj3t8embox155kty
---
addons/account_voucher/account_voucher.py | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index 59399a766d5..609a19661c0 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -49,19 +49,24 @@ class account_config_settings(osv.osv_memory):
'company_id', 'income_currency_exchange_account_id',
type='many2one',
relation='account.account',
- string="Gain Exchange Rate Account"),
+ string="Gain Exchange Rate Account",
+ domain="[('type', '=', 'other')]"),
'expense_currency_exchange_account_id': fields.related(
'company_id', 'expense_currency_exchange_account_id',
type="many2one",
relation='account.account',
- string="Loss Exchange Rate Account"),
+ string="Loss Exchange Rate Account",
+ domain="[('type', '=', 'other')]"),
}
def onchange_company_id(self, cr, uid, ids, company_id):
res = super(account_config_settings, self).onchange_company_id(cr, uid, ids, company_id)
if company_id:
company = self.pool.get('res.company').browse(cr, uid, company_id)
- res['value'].update({'income_currency_exchange_account_id': company.income_currency_exchange_account_id and company.income_currency_exchange_account_id.id,
- 'expense_currency_exchange_account_id': company.expense_currency_exchange_account_id and company.expense_currency_exchange_account_id.id})
+ res['value'].update({'income_currency_exchange_account_id': company.income_currency_exchange_account_id and company.income_currency_exchange_account_id.id or False,
+ 'expense_currency_exchange_account_id': company.expense_currency_exchange_account_id and company.expense_currency_exchange_account_id.id or False})
+ else:
+ res['value'].update({'income_currency_exchange_account_id': False,
+ 'expense_currency_exchange_account_id': False})
return res
class account_voucher(osv.osv):
From dba6e07ecdf8ed61316bdc1f4c4af36e489a95be Mon Sep 17 00:00:00 2001
From: Josse Colpaert
Date: Fri, 21 Dec 2012 10:41:47 +0100
Subject: [PATCH 009/253] [FIX] Will take into account the type of the invoice
for the default account in the invoice line
lp bug: https://launchpad.net/bugs/1084819 fixed
bzr revid: jco@openerp.com-20121221094147-mp7dhttfob7y2xis
---
addons/account/account_invoice.py | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index 02903ea8f33..e836e28d6c6 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -1393,8 +1393,13 @@ class account_invoice_line(osv.osv):
def _default_account_id(self, cr, uid, context=None):
# XXX this gets the default account for the user's company,
# it should get the default account for the invoice's company
- # however, the invoice's company does not reach this point
- prop = self.pool.get('ir.property').get(cr, uid, 'property_account_income_categ', 'product.category', context=context)
+ # however, the invoice's company does not reach this point (but will throw error on validation)
+ if context is None:
+ context = {}
+ if context.get('type') in ('out_invoice','out_refund'):
+ prop = self.pool.get('ir.property').get(cr, uid, 'property_account_income_categ', 'product.category', context=context)
+ else:
+ prop = self.pool.get('ir.property').get(cr, uid, 'property_account_expense_categ', 'product.category', context=context)
return prop and prop.id or False
_defaults = {
From 0a6f2417e797e7ade9699d4638f2786f581c6e9f Mon Sep 17 00:00:00 2001
From: Josse Colpaert
Date: Fri, 21 Dec 2012 14:49:56 +0100
Subject: [PATCH 010/253] [FIX] Changes the period used into the period chosen
and not the period of today
lp bug: https://launchpad.net/bugs/1078004 fixed
bzr revid: jco@openerp.com-20121221134956-fgg1ltu1qy1j2ion
---
addons/account_asset/account_asset.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py
index b7330352b12..b335063b758 100644
--- a/addons/account_asset/account_asset.py
+++ b/addons/account_asset/account_asset.py
@@ -331,6 +331,9 @@ class account_asset_asset(osv.osv):
depreciation_obj = self.pool.get('account.asset.depreciation.line')
period = period_obj.browse(cr, uid, period_id, context=context)
depreciation_ids = depreciation_obj.search(cr, uid, [('asset_id', 'in', ids), ('depreciation_date', '<=', period.date_stop), ('depreciation_date', '>=', period.date_start), ('move_check', '=', False)], context=context)
+ if context is None:
+ context = {}
+ context.update({'depreciation_date':period.date_stop})
return depreciation_obj.create_move(cr, uid, depreciation_ids, context=context)
def create(self, cr, uid, vals, context=None):
@@ -388,7 +391,7 @@ class account_asset_depreciation_line(osv.osv):
created_move_ids = []
asset_ids = []
for line in self.browse(cr, uid, ids, context=context):
- depreciation_date = time.strftime('%Y-%m-%d')
+ depreciation_date = context.get('depreciation_date') or time.strftime('%Y-%m-%d')
period_ids = period_obj.find(cr, uid, depreciation_date, context=context)
company_currency = line.asset_id.company_id.currency_id.id
current_currency = line.asset_id.currency_id.id
From 6d69fe663960991fc86faa7dc0bf31005733b6a1 Mon Sep 17 00:00:00 2001
From: "Ravi Gohil (OpenERP)"
Date: Tue, 1 Jan 2013 15:28:10 +0530
Subject: [PATCH 011/253] [FIX] report_webkit: Wrong Report template file path
throws 'Coercing to Unicode' error : (Maintenance Case : 583490)
bzr revid: rgo@tinyerp.com-20130101095810-7cbw337ul443q66g
---
addons/report_webkit/webkit_report.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/report_webkit/webkit_report.py b/addons/report_webkit/webkit_report.py
index b6c273f8852..99e1aa31058 100644
--- a/addons/report_webkit/webkit_report.py
+++ b/addons/report_webkit/webkit_report.py
@@ -220,7 +220,7 @@ class WebKitParser(report_sxw):
if report_xml.report_file :
path = addons.get_module_resource(*report_xml.report_file.split(os.path.sep))
- if os.path.exists(path) :
+ if path and os.path.exists(path) :
template = file(path).read()
if not template and report_xml.report_webkit_data :
template = report_xml.report_webkit_data
From a475013fd83d8319d7b292a5412d943e9b22dac3 Mon Sep 17 00:00:00 2001
From: "Ravi Gohil (OpenERP)"
Date: Mon, 7 Jan 2013 15:58:57 +0530
Subject: [PATCH 012/253] [FIX] account: force account.financial.report balance
of *zero* to be displayed positively: (Maintenance Case: 583915)
bzr revid: rgo@tinyerp.com-20130107102857-hor2hzsmimjttcus
---
addons/account/report/account_financial_report.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/account/report/account_financial_report.py b/addons/account/report/account_financial_report.py
index 3898158c457..d94955a764a 100644
--- a/addons/account/report/account_financial_report.py
+++ b/addons/account/report/account_financial_report.py
@@ -56,7 +56,7 @@ class report_account_common(report_sxw.rml_parse, common_report_header):
for report in self.pool.get('account.financial.report').browse(self.cr, self.uid, ids2, context=data['form']['used_context']):
vals = {
'name': report.name,
- 'balance': report.balance * report.sign,
+ 'balance': report.balance * report.sign or 0.0,
'type': 'report',
'level': bool(report.style_overwrite) and report.style_overwrite or report.level,
'account_type': report.type =='sum' and 'view' or False, #used to underline the financial report balances
From a724a10691cfe37bde5809145fcd32b78fbd59d2 Mon Sep 17 00:00:00 2001
From: "Nimesh Contractor (OpenERP)"
Date: Tue, 8 Jan 2013 14:50:28 +0530
Subject: [PATCH 013/253] [FIX] traceback of Refund customer invoice having
type = modify
bzr revid: nco@tinyerp.com-20130108092028-k9vh7600hpfmdqbk
---
addons/account/wizard/account_invoice_refund.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py
index 54d6c38a353..2d95687ff2d 100644
--- a/addons/account/wizard/account_invoice_refund.py
+++ b/addons/account/wizard/account_invoice_refund.py
@@ -183,9 +183,9 @@ class account_invoice_refund(osv.osv_memory):
'journal_id', 'period_id'], context=context)
invoice = invoice[0]
del invoice['id']
- invoice_lines = inv_line_obj.read(cr, uid, invoice['invoice_line'], context=context)
+ invoice_lines = inv_line_obj.browse(cr, uid, invoice['invoice_line'], context=context)
invoice_lines = inv_obj._refund_cleanup_lines(cr, uid, invoice_lines)
- tax_lines = inv_tax_obj.read(cr, uid, invoice['tax_line'], context=context)
+ tax_lines = inv_tax_obj.browse(cr, uid, invoice['tax_line'], context=context)
tax_lines = inv_obj._refund_cleanup_lines(cr, uid, tax_lines)
invoice.update({
'type': inv.type,
From 383314f27381573294351060c7b6a7e01ec075a5 Mon Sep 17 00:00:00 2001
From: niv-openerp
Date: Thu, 10 Jan 2013 17:19:36 +0100
Subject: [PATCH 014/253] First version working with multicorn
bzr revid: nicolas.vanhoren@openerp.com-20130110161936-4515hhdlamd3d25r
---
openerp/service/workers.py | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/openerp/service/workers.py b/openerp/service/workers.py
index 0a54a80b963..9043eac1bcd 100644
--- a/openerp/service/workers.py
+++ b/openerp/service/workers.py
@@ -45,6 +45,7 @@ class Multicorn(object):
self.socket = None
self.workers_http = {}
self.workers_cron = {}
+ self.workers_longpolling = {}
self.workers = {}
self.generation = 0
self.queue = []
@@ -140,6 +141,8 @@ class Multicorn(object):
self.worker_spawn(WorkerHTTP, self.workers_http)
while len(self.workers_cron) < config['max_cron_threads']:
self.worker_spawn(WorkerCron, self.workers_cron)
+ while len(self.workers_longpolling) < 1:
+ self.worker_spawn(WorkerLongPolling, self.workers_longpolling)
def sleep(self):
try:
@@ -334,6 +337,21 @@ class WorkerHTTP(Worker):
Worker.start(self)
self.server = WorkerBaseWSGIServer(self.multi.app)
+class WorkerLongPolling(Worker):
+ """ Long polling workers """
+ def start(self):
+ config.options["gevent"] = True
+ _logger.info('Using gevent mode')
+ import gevent.monkey
+ gevent.monkey.patch_all()
+ import gevent_psycopg2
+ gevent_psycopg2.monkey_patch()
+
+ Worker.start(self)
+ from gevent.wsgi import WSGIServer
+ httpd = WSGIServer(('0.0.0.0', 8072), self.multi.app)
+ httpd.serve_forever()
+
class WorkerBaseWSGIServer(werkzeug.serving.BaseWSGIServer):
""" werkzeug WSGI Server patched to allow using an external listen socket
"""
From cb33e09d1bedce2aa17d02fc7c8047b4a2753f40 Mon Sep 17 00:00:00 2001
From: niv-openerp
Date: Thu, 10 Jan 2013 17:33:14 +0100
Subject: [PATCH 015/253] Socket is inited by master process
bzr revid: nicolas.vanhoren@openerp.com-20130110163314-449euw1z69eebtpz
---
openerp/service/workers.py | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/openerp/service/workers.py b/openerp/service/workers.py
index 9043eac1bcd..aee639035a6 100644
--- a/openerp/service/workers.py
+++ b/openerp/service/workers.py
@@ -181,6 +181,12 @@ class Multicorn(object):
self.socket.setblocking(0)
self.socket.bind(self.address)
self.socket.listen(8)
+ # long polling socket
+ self.long_polling_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.long_polling_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ self.long_polling_socket.setblocking(0)
+ self.long_polling_socket.bind(('0.0.0.0', 8072))
+ self.long_polling_socket.listen(8)
def stop(self, graceful=True):
if graceful:
@@ -349,8 +355,8 @@ class WorkerLongPolling(Worker):
Worker.start(self)
from gevent.wsgi import WSGIServer
- httpd = WSGIServer(('0.0.0.0', 8072), self.multi.app)
- httpd.serve_forever()
+ self.server = WSGIServer(self.multi.long_polling_socket, self.multi.app)
+ self.server.serve_forever()
class WorkerBaseWSGIServer(werkzeug.serving.BaseWSGIServer):
""" werkzeug WSGI Server patched to allow using an external listen socket
From fc58729b2f2a6a2baa79d474cfc2eb15234f22a1 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Tue, 15 Jan 2013 18:47:05 +0100
Subject: [PATCH 016/253] [WIP] introduce a way to reference specific config
options
bzr revid: abo@openerp.com-20130115174705-qldpq3le1ul4nh0j
---
openerp/addons/base/res/res_config.py | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index ff0c3bfe6ad..a3b168a8d82 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -570,17 +570,17 @@ class res_config_settings(osv.osv_memory):
if action_ids:
return act_window.read(cr, uid, action_ids[0], [], context=context)
return {}
-
+
def name_get(self, cr, uid, ids, context=None):
""" Override name_get method to return an appropriate configuration wizard
name, and not the generated name."""
-
+
if not ids:
return []
# name_get may receive int id instead of an id list
if isinstance(ids, (int, long)):
ids = [ids]
-
+
act_window = self.pool.get('ir.actions.act_window')
action_ids = act_window.search(cr, uid, [('res_model', '=', self._name)], context=context)
name = self._name
@@ -588,4 +588,23 @@ class res_config_settings(osv.osv_memory):
name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name']
return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)]
+ def get_path(self, cr, uid, module_name, menu_xml_id=None, field_name=None, context=None):
+ """
+ Return a string representing the path to access a specific
+ configuration option through the interface.
+ """
+
+ config_path = ''
+
+ # Fetch the path
+ if (menu_xml_id):
+ dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id)
+ config_path += self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context).name
+
+ # Fetch the exact config option name
+ #if (field_name):
+ # self.pool.get('mycfgobj')._get_all_columns().strings[field_name]
+
+ return config_path
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From ff25f7a3d4d6dd15170692487de304a804060b0d Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Wed, 16 Jan 2013 18:14:11 +0100
Subject: [PATCH 017/253] [IMP] use a var to store the menuitem separator makes
it easier to modify makes it possible to import anywhere
bzr revid: abo@openerp.com-20130116171411-iugmyk4vqjewko2z
---
openerp/addons/base/ir/ir_ui_menu.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/openerp/addons/base/ir/ir_ui_menu.py b/openerp/addons/base/ir/ir_ui_menu.py
index 5da85c43577..95379098cf4 100644
--- a/openerp/addons/base/ir/ir_ui_menu.py
+++ b/openerp/addons/base/ir/ir_ui_menu.py
@@ -30,6 +30,8 @@ from openerp.osv import fields, osv
from openerp.tools.translate import _
from openerp import SUPERUSER_ID
+MENU_ITEM_SEPARATOR = "/"
+
def one_in(setA, setB):
"""Check the presence of an element of setA in setB
"""
@@ -154,7 +156,7 @@ class ir_ui_menu(osv.osv):
if level<=0:
return '...'
if elmt.parent_id:
- parent_path = self._get_one_full_name(elmt.parent_id, level-1) + "/"
+ parent_path = self._get_one_full_name(elmt.parent_id, level-1) + MENU_ITEM_SEPARATOR
else:
parent_path = ''
return parent_path + elmt.name
From 70890bfa3250e33769e12a818780f90b3889be63 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Wed, 16 Jan 2013 18:14:54 +0100
Subject: [PATCH 018/253] [WIP] introduce a way to reference specific config
options
bzr revid: abo@openerp.com-20130116171454-s4tt2f6le80oruc0
---
openerp/addons/base/res/res_config.py | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index a3b168a8d82..f7085f44000 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -25,6 +25,7 @@ from openerp import pooler
from openerp.osv import osv, fields
from openerp.tools import ustr
from openerp.tools.translate import _
+from openerp.addons.base.ir.ir_ui_menu import MENU_ITEM_SEPARATOR
_logger = logging.getLogger(__name__)
@@ -588,22 +589,24 @@ class res_config_settings(osv.osv_memory):
name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name']
return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)]
- def get_path(self, cr, uid, module_name, menu_xml_id=None, field_name=None, context=None):
+ def get_config_path(self, cr, uid, module_name, menu_xml_id=None, model_name=None, field_name=None, context=None):
"""
Return a string representing the path to access a specific
configuration option through the interface.
+
+ :return string
"""
config_path = ''
# Fetch the path
- if (menu_xml_id):
+ if (module_name and menu_xml_id):
dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id)
- config_path += self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context).name
+ config_path += self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context).complete_name
# Fetch the exact config option name
- #if (field_name):
- # self.pool.get('mycfgobj')._get_all_columns().strings[field_name]
+ if (model_name and field_name):
+ config_path += MENU_ITEM_SEPARATOR + self.pool.get(model_name)._all_columns.get(field_name).column.string
return config_path
From a4120a879adf2b50dd18ed8a6310b9bae65f0209 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Thu, 17 Jan 2013 11:30:57 +0100
Subject: [PATCH 019/253] [IMP] long polling: disable the watchdog for the
WorkerLongPolling, added command-line option for its port.
bzr revid: vmt@openerp.com-20130117103057-12ez48kj48pntb1g
---
openerp/service/workers.py | 12 ++++++++++--
openerp/tools/config.py | 5 ++++-
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/openerp/service/workers.py b/openerp/service/workers.py
index 29ae9de10c0..7321978e859 100644
--- a/openerp/service/workers.py
+++ b/openerp/service/workers.py
@@ -35,6 +35,7 @@ class Multicorn(object):
def __init__(self, app):
# config
self.address = (config['xmlrpc_interface'] or '0.0.0.0', config['xmlrpc_port'])
+ self.long_polling_address = (config['xmlrpc_interface'] or '0.0.0.0', config['longpolling_port'])
self.population = config['workers']
self.timeout = config['limit_time_real']
self.limit_request = config['limit_request']
@@ -132,7 +133,8 @@ class Multicorn(object):
def process_timeout(self):
now = time.time()
for (pid, worker) in self.workers.items():
- if now - worker.watchdog_time >= worker.watchdog_timeout:
+ if (worker.watchdog_timeout is not None) and \
+ (now - worker.watchdog_time >= worker.watchdog_timeout):
_logger.error("Worker (%s) timeout", pid)
self.worker_kill(pid, signal.SIGKILL)
@@ -185,7 +187,7 @@ class Multicorn(object):
self.long_polling_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.long_polling_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.long_polling_socket.setblocking(0)
- self.long_polling_socket.bind(('0.0.0.0', 8072))
+ self.long_polling_socket.bind(self.long_polling_address)
self.long_polling_socket.listen(8)
def stop(self, graceful=True):
@@ -230,6 +232,7 @@ class Worker(object):
self.multi = multi
self.watchdog_time = time.time()
self.watchdog_pipe = multi.pipe_new()
+ # Can be set to None if no watchdog is desired.
self.watchdog_timeout = multi.timeout
self.ppid = os.getpid()
self.pid = None
@@ -345,6 +348,11 @@ class WorkerHTTP(Worker):
class WorkerLongPolling(Worker):
""" Long polling workers """
+ def __init__(self, multi):
+ super(WorkerLongPolling, self).__init__(multi)
+ # Disable the watchdog feature for this kind of worker.
+ self.watchdog_timeout = None
+
def start(self):
config.options["gevent"] = True
_logger.info('Using gevent mode')
diff --git a/openerp/tools/config.py b/openerp/tools/config.py
index 83a347f0864..dcbf26783e3 100644
--- a/openerp/tools/config.py
+++ b/openerp/tools/config.py
@@ -121,6 +121,8 @@ class configmanager(object):
help="disable the XML-RPC protocol")
group.add_option("--proxy-mode", dest="proxy_mode", action="store_true", my_default=False,
help="Enable correct behavior when behind a reverse proxy")
+ group.add_option("--longpolling-port", dest="longpolling_port", my_default=8072,
+ help="specify the TCP port for longpolling requests", type="int")
parser.add_option_group(group)
# XML-RPC / HTTPS
@@ -378,7 +380,8 @@ class configmanager(object):
self.options['pidfile'] = False
# if defined dont take the configfile value even if the defined value is None
- keys = ['xmlrpc_interface', 'xmlrpc_port', 'db_name', 'db_user', 'db_password', 'db_host',
+ keys = ['xmlrpc_interface', 'xmlrpc_port', 'longpolling_port',
+ 'db_name', 'db_user', 'db_password', 'db_host',
'db_port', 'db_template', 'logfile', 'pidfile', 'smtp_port',
'email_from', 'smtp_server', 'smtp_user', 'smtp_password',
'netrpc_interface', 'netrpc_port', 'db_maxconn', 'import_partial', 'addons_path',
From 8214854b7996804bdfc8ec3d4ea2398f03d50370 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Thu, 17 Jan 2013 15:47:55 +0100
Subject: [PATCH 020/253] [IMP] doc
bzr revid: abo@openerp.com-20130117144755-r9oboeaw8rr1seqa
---
openerp/osv/osv.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/openerp/osv/osv.py b/openerp/osv/osv.py
index 018976ac663..20dfe74b7ff 100644
--- a/openerp/osv/osv.py
+++ b/openerp/osv/osv.py
@@ -39,6 +39,7 @@ import openerp.exceptions
_logger = logging.getLogger(__name__)
# Deprecated.
+# Have a look at exceptions.py instead.
class except_osv(Exception):
def __init__(self, name, value):
self.name = name
From 6b926883ccdb362b85be7b8e878f21775ad0375e Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Thu, 17 Jan 2013 16:50:03 +0100
Subject: [PATCH 021/253] [IMP] add a missing import (exceptions)
bzr revid: abo@openerp.com-20130117155003-5akv67tylaz59s7l
---
openerp/__init__.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/openerp/__init__.py b/openerp/__init__.py
index c9db7076e71..0afcaf0bfc0 100644
--- a/openerp/__init__.py
+++ b/openerp/__init__.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 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 .
#
##############################################################################
@@ -28,6 +28,7 @@ SUPERUSER_ID = 1
import addons
import cli
import conf
+import exceptions
import loglevels
import modules
import netsvc
From c588e762d4dde0680e9609202065e5bf739edcec Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Thu, 17 Jan 2013 17:05:46 +0100
Subject: [PATCH 022/253] [IMP] simplify the new config reference mechanism
code
bzr revid: abo@openerp.com-20130117160546-mg9g9zrbvp4poly6
---
openerp/addons/base/res/res_config.py | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index f7085f44000..cec30a6d303 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -589,24 +589,34 @@ class res_config_settings(osv.osv_memory):
name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name']
return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)]
- def get_config_path(self, cr, uid, module_name, menu_xml_id=None, model_name=None, field_name=None, context=None):
+ def get_path(self, cr, uid, menu_xml_id=None, field_name=None, context=None):
"""
Return a string representing the path to access a specific
configuration option through the interface.
- :return string
+ :return string: may vary depending of the given params
+ - if menu_xml_id and not field_name: the string will contain the
+ path to the config option.
+ e.g.: "Settings/Configuration/Sales"
+ - if not menu_xml_id and field_name: the string will contain the
+ config option's human readable name
+ e.g.: "Create leads from incoming mails"
+ - if menu_xml_id and field_name: the string will contain the path
+ and the config option's human readable name
+ e.g.: "Settings/Configuration/Sales/Create leads from incoming mails"
"""
config_path = ''
- # Fetch the path
- if (module_name and menu_xml_id):
+ # Fetch the path to the config option
+ if (menu_xml_id):
+ module_name, menu_xml_id = menu_xml_id.split('.')
dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id)
config_path += self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context).complete_name
# Fetch the exact config option name
- if (model_name and field_name):
- config_path += MENU_ITEM_SEPARATOR + self.pool.get(model_name)._all_columns.get(field_name).column.string
+ if (field_name):
+ config_path += MENU_ITEM_SEPARATOR + self._all_columns.get(field_name).column.string
return config_path
From fb5288e93cc68197400d2deaf7fa522273d73a5a Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Thu, 17 Jan 2013 19:33:42 +0100
Subject: [PATCH 023/253] [IMP] get_path code; return a tuple instead of a
string also add a helper
bzr revid: abo@openerp.com-20130117183342-rhfnxh4y777rruqt
---
openerp/addons/base/res/res_config.py | 39 +++++++++++++--------------
1 file changed, 19 insertions(+), 20 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index cec30a6d303..910c473a4be 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -589,35 +589,34 @@ class res_config_settings(osv.osv_memory):
name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name']
return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)]
- def get_path(self, cr, uid, menu_xml_id=None, field_name=None, context=None):
+ def get_path(self, cr, uid, menu_xml_id, field_name, context=None):
"""
Return a string representing the path to access a specific
configuration option through the interface.
- :return string: may vary depending of the given params
- - if menu_xml_id and not field_name: the string will contain the
- path to the config option.
- e.g.: "Settings/Configuration/Sales"
- - if not menu_xml_id and field_name: the string will contain the
- config option's human readable name
- e.g.: "Create leads from incoming mails"
- - if menu_xml_id and field_name: the string will contain the path
- and the config option's human readable name
- e.g.: "Settings/Configuration/Sales/Create leads from incoming mails"
+ Note that we'll prefer to find back the model's name through the
+ ui_menu and then its action than directly using self. It will
+ make the call to this method from a helper function possible.
+
+ :return tuple t: t[0] contains the full path, t[1] contains
+ the "human readable" configuration option name
"""
- config_path = ''
-
# Fetch the path to the config option
- if (menu_xml_id):
- module_name, menu_xml_id = menu_xml_id.split('.')
- dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id)
- config_path += self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context).complete_name
+ module_name, menu_xml_id = menu_xml_id.split('.')
+ dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id)
+ ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context)
+ res_name = ir_ui_menu.complete_name
# Fetch the exact config option name
- if (field_name):
- config_path += MENU_ITEM_SEPARATOR + self._all_columns.get(field_name).column.string
+ res_path = self.pool.get(ir_ui_menu.action.res_model)._all_columns.get(field_name).column.string
- return config_path
+ return (res_name, res_path)
+
+def get_config_path(cr, uid, menu_xml_id=None, field_name=None, context=None):
+ """
+ Simple helper for res_config_settings.get_path().
+ """
+ return pooler.get_pool(cr.dbname).get('res.config.settings').get_path(cr, uid, menu_xml_id, field_name, context)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From a075983249df68cc9797b2c92f32f0039a4e68b9 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Fri, 18 Jan 2013 12:03:00 +0100
Subject: [PATCH 024/253] [IMP] simplify the helper by using SUPERUSER_ID
bzr revid: abo@openerp.com-20130118110300-d0z0xr8df0zygiv5
---
openerp/addons/base/res/res_config.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index 910c473a4be..81e01e46f2f 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -21,7 +21,7 @@
import logging
from operator import attrgetter
-from openerp import pooler
+from openerp import pooler, SUPERUSER_ID
from openerp.osv import osv, fields
from openerp.tools import ustr
from openerp.tools.translate import _
@@ -613,10 +613,10 @@ class res_config_settings(osv.osv_memory):
return (res_name, res_path)
-def get_config_path(cr, uid, menu_xml_id=None, field_name=None, context=None):
+def get_config_path(cr, menu_xml_id=None, field_name=None, context=None):
"""
Simple helper for res_config_settings.get_path().
"""
- return pooler.get_pool(cr.dbname).get('res.config.settings').get_path(cr, uid, menu_xml_id, field_name, context)
+ return pooler.get_pool(cr.dbname).get('res.config.settings').get_path(cr, SUPERUSER_ID, menu_xml_id, field_name, context)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From 8bd622202b123b4919ca7862b92d4fe19d5f464b Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Fri, 18 Jan 2013 16:23:46 +0100
Subject: [PATCH 025/253] [IMP] introduce a new type of exception:
WarningConfig. Note that no corresponding RPC_FAULT_CODE has been added;
WarningConfig will share the same RPC_FAULT_CODE than Warning
(RPC_FAULT_CODE_WARNING = 2) Also remove a few whitespaces
bzr revid: abo@openerp.com-20130118152346-5v4j94wjrq34hq4m
---
openerp/exceptions.py | 8 ++++++++
openerp/netsvc.py | 4 +++-
openerp/service/netrpc_server.py | 8 +++++---
openerp/service/wsgi_server.py | 4 +++-
4 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/openerp/exceptions.py b/openerp/exceptions.py
index fbf52c7f3a9..387e126b8c4 100644
--- a/openerp/exceptions.py
+++ b/openerp/exceptions.py
@@ -27,9 +27,17 @@ treated as a 'Server error'.
"""
+import re
+
class Warning(Exception):
pass
+class WarningConfig(Exception):
+ """ Warning bound to a misconfiguration. """
+ def __init__(self, msg):
+ # todo: treat the msg (regex)
+ super(WarningConfig, self).__init__(msg)
+
class AccessDenied(Exception):
""" Login/password error. No message, no traceback. """
def __init__(self):
diff --git a/openerp/netsvc.py b/openerp/netsvc.py
index 533b1659191..3362b86fac7 100644
--- a/openerp/netsvc.py
+++ b/openerp/netsvc.py
@@ -107,7 +107,7 @@ class ExportService(object):
"""
_services = {}
-
+
def __init__(self, name):
ExportService._services[name] = self
self.__name = name
@@ -306,6 +306,8 @@ def dispatch_rpc(service_name, method, params):
raise
except openerp.exceptions.Warning:
raise
+ except openerp.exceptions.WarningConfig:
+ raise
except openerp.exceptions.DeferredException, e:
_logger.exception(tools.exception_to_unicode(e))
post_mortem(e.traceback)
diff --git a/openerp/service/netrpc_server.py b/openerp/service/netrpc_server.py
index af89a734f28..f87274ef6e6 100644
--- a/openerp/service/netrpc_server.py
+++ b/openerp/service/netrpc_server.py
@@ -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 .
#
##############################################################################
@@ -145,7 +145,7 @@ class TinySocketClientThread(threading.Thread):
break
except Exception, e:
try:
- valid_exception = Exception(netrpc_handle_exception_legacy(e))
+ valid_exception = Exception(netrpc_handle_exception_legacy(e))
valid_traceback = getattr(e, 'traceback', sys.exc_info())
formatted_traceback = "".join(traceback.format_exception(*valid_traceback))
_logger.debug("netrpc: communication-level exception", exc_info=True)
@@ -164,12 +164,14 @@ class TinySocketClientThread(threading.Thread):
def stop(self):
self.running = False
-
+
def netrpc_handle_exception_legacy(e):
if isinstance(e, openerp.osv.osv.except_osv):
return 'warning -- ' + e.name + '\n\n' + e.value
if isinstance(e, openerp.exceptions.Warning):
return 'warning -- Warning\n\n' + str(e)
+ if isinstance(e, openerp.exceptions.WarningConfig):
+ return 'warning -- Warning\n\n' + str(e)
if isinstance(e, openerp.exceptions.AccessError):
return 'warning -- AccessError\n\n' + str(e)
if isinstance(e, openerp.exceptions.AccessDenied):
diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py
index 67436a1c0bf..e83f06cc264 100644
--- a/openerp/service/wsgi_server.py
+++ b/openerp/service/wsgi_server.py
@@ -95,6 +95,8 @@ def xmlrpc_handle_exception(e):
response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
elif isinstance(e, openerp.exceptions.Warning):
fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, str(e))
+ elif isinstance(e, openerp.exceptions.WarningConfig):
+ fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, str(e))
response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
elif isinstance (e, openerp.exceptions.AccessError):
fault = xmlrpclib.Fault(RPC_FAULT_CODE_ACCESS_ERROR, str(e))
@@ -311,7 +313,7 @@ def http_to_wsgi(http_dir):
handler.auth_provider.checkRequest(handler, path)
except websrv_lib.AuthRequiredExc, ae:
# Darwin 9.x.x webdav clients will report "HTTP/1.0" to us, while they support (and need) the
- # authorisation features of HTTP/1.1
+ # authorisation features of HTTP/1.1
if request_version != 'HTTP/1.1' and ('Darwin/9.' not in handler.headers.get('User-Agent', '')):
start_response("403 Forbidden", [])
return []
From 571276eb660b58a56f4680f2ba933aa28f521d11 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Fri, 18 Jan 2013 16:24:20 +0100
Subject: [PATCH 026/253] [IMP] introduce a new type of exception:
WarningConfig. Note that no corresponding RPC_FAULT_CODE has been added;
WarningConfig will share the same RPC_FAULT_CODE than Warning
(RPC_FAULT_CODE_WARNING = 2)
bzr revid: abo@openerp.com-20130118152420-9wk5nwuydwdwzoge
---
addons/web/session.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/addons/web/session.py b/addons/web/session.py
index 30e9308d4e1..a2719482a2c 100644
--- a/addons/web/session.py
+++ b/addons/web/session.py
@@ -92,6 +92,8 @@ class OpenERPSession(object):
raise xmlrpclib.Fault(code_string % (e.name, e.value), '')
except openerp.exceptions.Warning, e:
raise xmlrpclib.Fault(code_string % ("Warning", e), '')
+ except openerp.exceptions.WarningConfig, e:
+ raise xmlrpclib.Fault(code_string % ("Warning", e), '')
except openerp.exceptions.AccessError, e:
raise xmlrpclib.Fault(code_string % ("AccessError", e), '')
except openerp.exceptions.AccessDenied, e:
From ed0a292f5d2f766dd0be3cbf258d1f05a13fbbbf Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Fri, 18 Jan 2013 16:25:11 +0100
Subject: [PATCH 027/253] [IMP] gevent: no longer a command-line flag (always
used in multi-process, never otherwise) The internal flag is in
openerp.__init__ (as the multi_process flag).
bzr revid: vmt@openerp.com-20130118152511-57u4gxyolz0hd4y8
---
openerp/__init__.py | 2 ++
openerp/cli/server.py | 10 ----------
openerp/service/__init__.py | 5 +++--
openerp/service/workers.py | 2 +-
openerp/service/wsgi_server.py | 2 +-
openerp/tools/config.py | 3 +--
6 files changed, 8 insertions(+), 16 deletions(-)
diff --git a/openerp/__init__.py b/openerp/__init__.py
index c9db7076e71..307170b9033 100644
--- a/openerp/__init__.py
+++ b/openerp/__init__.py
@@ -51,6 +51,8 @@ wsgi.register_wsgi_handler = wsgi.wsgi_server.register_wsgi_handler
# its own copy of the data structure and we don't need to care about
# locks between threads.
multi_process = False
+# Is the server running with gevent.
+evented = False
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/cli/server.py b/openerp/cli/server.py
index 0df13ffb3a7..84a818c0c5d 100644
--- a/openerp/cli/server.py
+++ b/openerp/cli/server.py
@@ -230,20 +230,10 @@ def main(args):
check_root_user()
openerp.tools.config.parse_config(args)
- if openerp.tools.config.options["gevent"]:
- _logger.info('Using gevent mode')
- import gevent.monkey
- gevent.monkey.patch_all()
- import gevent_psycopg2
- gevent_psycopg2.monkey_patch()
-
check_postgres_user()
openerp.netsvc.init_logger()
report_configuration()
- if openerp.tools.config.options["gevent"]:
- _logger.info('Using gevent mode')
-
config = openerp.tools.config
configure_babel_localedata_path()
diff --git a/openerp/service/__init__.py b/openerp/service/__init__.py
index dd8d4fe9152..dd654b4c8a2 100644
--- a/openerp/service/__init__.py
+++ b/openerp/service/__init__.py
@@ -34,6 +34,7 @@ import web_services
import web_services
import wsgi_server
+import openerp
import openerp.modules
import openerp.netsvc
import openerp.osv
@@ -91,13 +92,13 @@ def start_services():
# Start the WSGI server.
wsgi_server.start_service()
# Start the main cron thread.
- if not openerp.tools.config.options["gevent"]:
+ if not openerp.evented:
cron.start_service()
def stop_services():
""" Stop all services. """
# stop services
- if not openerp.tools.config.options["gevent"]:
+ if not openerp.evented:
cron.stop_service()
netrpc_server.stop_service()
wsgi_server.stop_service()
diff --git a/openerp/service/workers.py b/openerp/service/workers.py
index 7321978e859..3e8df86fede 100644
--- a/openerp/service/workers.py
+++ b/openerp/service/workers.py
@@ -354,7 +354,7 @@ class WorkerLongPolling(Worker):
self.watchdog_timeout = None
def start(self):
- config.options["gevent"] = True
+ openerp.evented = True
_logger.info('Using gevent mode')
import gevent.monkey
gevent.monkey.patch_all()
diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py
index 010a8cde957..196b3f5db7d 100644
--- a/openerp/service/wsgi_server.py
+++ b/openerp/service/wsgi_server.py
@@ -424,7 +424,7 @@ def serve():
# TODO Change the xmlrpc_* options to http_*
interface = config['xmlrpc_interface'] or '0.0.0.0'
port = config['xmlrpc_port']
- if not openerp.tools.config.options["gevent"]:
+ if not openerp.evented:
httpd = werkzeug.serving.make_server(interface, port, application, threaded=True)
else:
from gevent.wsgi import WSGIServer
diff --git a/openerp/tools/config.py b/openerp/tools/config.py
index dcbf26783e3..c4b52c10b31 100644
--- a/openerp/tools/config.py
+++ b/openerp/tools/config.py
@@ -108,7 +108,6 @@ class configmanager(object):
help="specify additional addons paths (separated by commas).",
action="callback", callback=self._check_addons_path, nargs=1, type="string")
group.add_option("--load", dest="server_wide_modules", help="Comma-separated list of server-wide modules default=web")
- group.add_option("--gevent", dest="gevent", action="store_true", my_default=False, help="Activate the GEvent mode, this also desactivate the cron.")
parser.add_option_group(group)
# XML-RPC / HTTP
@@ -412,7 +411,7 @@ class configmanager(object):
'list_db', 'xmlrpcs', 'proxy_mode',
'test_file', 'test_enable', 'test_commit', 'test_report_directory',
'osv_memory_count_limit', 'osv_memory_age_limit', 'max_cron_threads', 'unaccent',
- 'workers', 'limit_memory_hard', 'limit_memory_soft', 'limit_time_cpu', 'limit_time_real', 'limit_request', 'gevent'
+ 'workers', 'limit_memory_hard', 'limit_memory_soft', 'limit_time_cpu', 'limit_time_real', 'limit_request',
]
for arg in keys:
From 6f5c0e1a08a003087b3d61e8602d1c7ab02dd688 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Fri, 18 Jan 2013 18:15:41 +0100
Subject: [PATCH 028/253] [REV] reintroduce the model's name in the
get_path()'s signature, but in a different way
bzr revid: abo@openerp.com-20130118171541-tyxl4k6w1wwa3kyl
---
openerp/addons/base/res/res_config.py | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index 81e01e46f2f..197b60ebab0 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -589,15 +589,11 @@ class res_config_settings(osv.osv_memory):
name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name']
return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)]
- def get_path(self, cr, uid, menu_xml_id, field_name, context=None):
+ def get_path(self, cr, uid, menu_xml_id=None, full_field_name=None, context=None):
"""
Return a string representing the path to access a specific
configuration option through the interface.
- Note that we'll prefer to find back the model's name through the
- ui_menu and then its action than directly using self. It will
- make the call to this method from a helper function possible.
-
:return tuple t: t[0] contains the full path, t[1] contains
the "human readable" configuration option name
"""
@@ -606,12 +602,13 @@ class res_config_settings(osv.osv_memory):
module_name, menu_xml_id = menu_xml_id.split('.')
dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id)
ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context)
- res_name = ir_ui_menu.complete_name
+ res_path = ir_ui_menu.complete_name
# Fetch the exact config option name
- res_path = self.pool.get(ir_ui_menu.action.res_model)._all_columns.get(field_name).column.string
+ model_name, field_name = full_field_name.rsplit('.', 1)
+ res_name = self.pool.get(model_name)._all_columns.get(field_name).column.string
- return (res_name, res_path)
+ return (res_path, res_name)
def get_config_path(cr, menu_xml_id=None, field_name=None, context=None):
"""
From 64eedb68166a418ce355e3aa01c4d0bcba6cd39a Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Fri, 18 Jan 2013 18:16:19 +0100
Subject: [PATCH 029/253] [WIP] start the implementation of WarningConfig
bzr revid: abo@openerp.com-20130118171619-dx0yjwuun0j7m43p
---
openerp/exceptions.py | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/openerp/exceptions.py b/openerp/exceptions.py
index 387e126b8c4..f99ed433049 100644
--- a/openerp/exceptions.py
+++ b/openerp/exceptions.py
@@ -35,7 +35,20 @@ class Warning(Exception):
class WarningConfig(Exception):
""" Warning bound to a misconfiguration. """
def __init__(self, msg):
- # todo: treat the msg (regex)
+ # WIP WIP WIP WIP WIP WIP WIP
+ def sub_path(g):
+ menu_xml_id = g.group(1)
+
+ return '(group to convert: '+menu_xml_id+')'
+
+ def sub_path(g):
+ menu_xml_id = g.group(1)
+
+ return '(group to convert: '+menu_xml_id+')'
+
+ # Treat the msg: find the menu_xml_id and the field_name
+ teststr = 'coucou [path:blabla_bla_bla]'
+ print ">>>>> sub: ", re.sub(r'\[path:([a-z_]*)\]', sub_path, teststr)
super(WarningConfig, self).__init__(msg)
class AccessDenied(Exception):
From 9d8a2b9eb523d2676dd6ed06d550b96094086ffd Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Mon, 21 Jan 2013 16:07:48 +0100
Subject: [PATCH 030/253] [WIP] move the code to another place
bzr revid: abo@openerp.com-20130121150748-3bw28jhvsj23s1zo
---
openerp/addons/base/res/res_config.py | 44 ++++++++++++++++++---------
openerp/exceptions.py | 16 ----------
2 files changed, 30 insertions(+), 30 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index 197b60ebab0..d96b2b5175c 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -20,12 +20,13 @@
##############################################################################
import logging
from operator import attrgetter
+import re
from openerp import pooler, SUPERUSER_ID
from openerp.osv import osv, fields
from openerp.tools import ustr
from openerp.tools.translate import _
-from openerp.addons.base.ir.ir_ui_menu import MENU_ITEM_SEPARATOR
+from openerp import exceptions
_logger = logging.getLogger(__name__)
@@ -594,26 +595,41 @@ class res_config_settings(osv.osv_memory):
Return a string representing the path to access a specific
configuration option through the interface.
- :return tuple t: t[0] contains the full path, t[1] contains
+ :return dict d: d['path'] contains the full path, d['name'] contains
the "human readable" configuration option name
"""
+ res = {'path': None, 'name': None}
+
# Fetch the path to the config option
- module_name, menu_xml_id = menu_xml_id.split('.')
- dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id)
- ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context)
- res_path = ir_ui_menu.complete_name
+ if (menu_xml_id):
+ module_name, menu_xml_id = menu_xml_id.split('.')
+ dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id)
+ ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context)
+ res['path'] = ir_ui_menu.complete_name
# Fetch the exact config option name
- model_name, field_name = full_field_name.rsplit('.', 1)
- res_name = self.pool.get(model_name)._all_columns.get(field_name).column.string
+ if (full_field_name):
+ model_name, field_name = full_field_name.rsplit('.', 1)
+ res['name'] = self.pool.get(model_name)._all_columns.get(field_name).column.string
- return (res_path, res_name)
+ return res
-def get_config_path(cr, menu_xml_id=None, field_name=None, context=None):
- """
- Simple helper for res_config_settings.get_path().
- """
- return pooler.get_pool(cr.dbname).get('res.config.settings').get_path(cr, SUPERUSER_ID, menu_xml_id, field_name, context)
+def get_warning_config(cr, msg, context=None):
+ res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings')
+
+ def sub_path(g):
+ s = g.group(1)
+ return res_config_obj.get_path(cr, SUPERUSER_ID, menu_xml_id=s, full_field_name=None, context=context)['path']
+
+ def sub_field(g):
+ s = g.group(1)
+ return res_config_obj.get_path(cr, SUPERUSER_ID, menu_xml_id=None, full_field_name=s, context=context)['name']
+
+ # Treat the msg: find the menu_xml_id and the field_name
+ msg = re.sub(r'\[path:([a-z_\.]*)\]', sub_path, msg)
+ msg = re.sub(r'\[field:([a-z_\.]*)\]', sub_field, msg)
+
+ return exceptions.WarningConfig(msg)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/exceptions.py b/openerp/exceptions.py
index f99ed433049..c43f706fa61 100644
--- a/openerp/exceptions.py
+++ b/openerp/exceptions.py
@@ -27,28 +27,12 @@ treated as a 'Server error'.
"""
-import re
-
class Warning(Exception):
pass
class WarningConfig(Exception):
""" Warning bound to a misconfiguration. """
def __init__(self, msg):
- # WIP WIP WIP WIP WIP WIP WIP
- def sub_path(g):
- menu_xml_id = g.group(1)
-
- return '(group to convert: '+menu_xml_id+')'
-
- def sub_path(g):
- menu_xml_id = g.group(1)
-
- return '(group to convert: '+menu_xml_id+')'
-
- # Treat the msg: find the menu_xml_id and the field_name
- teststr = 'coucou [path:blabla_bla_bla]'
- print ">>>>> sub: ", re.sub(r'\[path:([a-z_]*)\]', sub_path, teststr)
super(WarningConfig, self).__init__(msg)
class AccessDenied(Exception):
From 0a0e5e9fb02817a0a12c1019590e540ab4f9eb05 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Mon, 21 Jan 2013 17:59:16 +0100
Subject: [PATCH 031/253] [WIP] heavy refactoring of the get option path
feature
bzr revid: abo@openerp.com-20130121165916-9oc7ox7ygmpb6lhm
---
openerp/addons/base/res/res_config.py | 55 ++++++++++++---------------
1 file changed, 24 insertions(+), 31 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index d96b2b5175c..68f11d989c6 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -590,46 +590,39 @@ class res_config_settings(osv.osv_memory):
name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name']
return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)]
- def get_path(self, cr, uid, menu_xml_id=None, full_field_name=None, context=None):
- """
- Return a string representing the path to access a specific
- configuration option through the interface.
+ def get_option_path(self, cr, uid, menu_xml_id=None, context=None):
+ module_name, menu_xml_id = menu_xml_id.split('.')
+ dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id)
+ ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context)
- :return dict d: d['path'] contains the full path, d['name'] contains
- the "human readable" configuration option name
- """
+ return ir_ui_menu.complete_name
- res = {'path': None, 'name': None}
+ def get_option_name(self, cr, uid, full_field_name=None, context=None):
+ model_name, field_name = full_field_name.rsplit('.', 1)
- # Fetch the path to the config option
- if (menu_xml_id):
- module_name, menu_xml_id = menu_xml_id.split('.')
- dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id)
- ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context)
- res['path'] = ir_ui_menu.complete_name
-
- # Fetch the exact config option name
- if (full_field_name):
- model_name, field_name = full_field_name.rsplit('.', 1)
- res['name'] = self.pool.get(model_name)._all_columns.get(field_name).column.string
-
- return res
+ return self.pool.get(model_name)._all_columns.get(field_name).column.string
def get_warning_config(cr, msg, context=None):
res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings')
- def sub_path(g):
- s = g.group(1)
- return res_config_obj.get_path(cr, SUPERUSER_ID, menu_xml_id=s, full_field_name=None, context=context)['path']
+ # Treat the msg
+ # 1/ find the path and field references, put them in a list
+ references = re.findall(r'\[((?:path|field):[a-z_\.]*)\]', msg, flags=re.I)
- def sub_field(g):
- s = g.group(1)
- return res_config_obj.get_path(cr, SUPERUSER_ID, menu_xml_id=None, full_field_name=s, context=context)['name']
+ # 2/ fetch the path and field replacement values
+ # (full path and human readable field's name)
+ values = []
+ for item in references:
+ ref_type, ref = item.split(':')
+ if ref_type == 'path':
+ values.append(res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context))
+ elif ref_type == 'field':
+ values.append(res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context))
- # Treat the msg: find the menu_xml_id and the field_name
- msg = re.sub(r'\[path:([a-z_\.]*)\]', sub_path, msg)
- msg = re.sub(r'\[field:([a-z_\.]*)\]', sub_field, msg)
+ # 3/ replace the text references by the %s conversion symbol
+ msg = re.sub(r'\[((?:path|field):[a-z_\.]*)\]', '%s', msg, flags=re.I)
- return exceptions.WarningConfig(msg)
+ # 4/ translate all the strings, substitute and return the result
+ return exceptions.WarningConfig(_(msg) % tuple(map(_, values)))
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From 8ab50cc0efbc52fd043e4252d32e845abfad00a7 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Mon, 21 Jan 2013 19:16:50 +0100
Subject: [PATCH 032/253] [WIP] remove a useless translation phase
bzr revid: abo@openerp.com-20130121181650-md0t80lokegr5kx1
---
openerp/addons/base/res/res_config.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index 68f11d989c6..7f5dd7779e5 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -605,7 +605,7 @@ class res_config_settings(osv.osv_memory):
def get_warning_config(cr, msg, context=None):
res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings')
- # Treat the msg
+ # Process the msg
# 1/ find the path and field references, put them in a list
references = re.findall(r'\[((?:path|field):[a-z_\.]*)\]', msg, flags=re.I)
@@ -622,7 +622,7 @@ def get_warning_config(cr, msg, context=None):
# 3/ replace the text references by the %s conversion symbol
msg = re.sub(r'\[((?:path|field):[a-z_\.]*)\]', '%s', msg, flags=re.I)
- # 4/ translate all the strings, substitute and return the result
- return exceptions.WarningConfig(_(msg) % tuple(map(_, values)))
+ # 4/ substitute and return the result
+ return exceptions.WarningConfig(msg % tuple(values))
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From 0709ca97e86a5b4895dd065f15d54410d48ba5c0 Mon Sep 17 00:00:00 2001
From: Vidhin Mehta
Date: Tue, 22 Jan 2013 11:28:56 +0530
Subject: [PATCH 033/253] [FIX]View not redering @ proper position.
bzr revid: vme@tinyerp.com-20130122055856-iby255hebyxb72rs
---
addons/web/static/src/js/views.js | 5 +++--
addons/web/static/src/xml/base.xml | 2 +-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js
index 9fd49367171..10d4104921b 100644
--- a/addons/web/static/src/js/views.js
+++ b/addons/web/static/src/js/views.js
@@ -472,6 +472,7 @@ instance.web.ViewManager = instance.web.Widget.extend({
this.registry = instance.web.views;
this.views_history = [];
this.view_completely_inited = $.Deferred();
+ this.uniqueid_dom = _.uniqueId('view_manager');
},
/**
* @returns {jQuery.Deferred} initial view loading promise
@@ -539,7 +540,7 @@ instance.web.ViewManager = instance.web.Widget.extend({
_.each(_.keys(self.views), function(view_name) {
var controller = self.views[view_name].controller;
if (controller) {
- var container = self.$el.find(".oe_view_manager_view_" + view_name + ":first");
+ var container = self.$el.find("#" + self.uniqueid_dom + ".oe_view_manager_view_" + view_name);
if (view_name === view_type) {
container.show();
controller.do_show(view_options || {});
@@ -582,7 +583,7 @@ instance.web.ViewManager = instance.web.Widget.extend({
controller.on('switch_mode', self, this.switch_mode);
controller.on('previous_view', self, this.prev_view);
- var container = this.$el.find(".oe_view_manager_view_" + view_type);
+ var container = this.$el.find("#" + this.uniqueid_dom + ".oe_view_manager_view_" + view_type);
var view_promise = controller.appendTo(container);
this.views[view_type].controller = controller;
this.views[view_type].deferred.resolve(view_type);
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 6d707bb4627..3e510329683 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -520,7 +520,7 @@
From bf07b11a06c00e87aeee09e4584f947d94484bd9 Mon Sep 17 00:00:00 2001
From: "Bhumi Thakkar (Open ERP)"
Date: Tue, 22 Jan 2013 16:56:16 +0530
Subject: [PATCH 034/253] [FIX] Calendar days bar visible under the search
menu.--fixes:lp1095246
bzr revid: bth@tinyerp.com-20130122112616-xw4fxakjn0c7debf
---
addons/web/static/src/js/search.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js
index a0208cc6d7a..1d732292671 100644
--- a/addons/web/static/src/js/search.js
+++ b/addons/web/static/src/js/search.js
@@ -445,6 +445,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
? $('').html(item.label)
: $(' ').text(item.value));
}
+ $(ul[0]).css({'z-index': 2});
return $item.text(item.label)
.css({
borderTop: '1px solid #cccccc',
From 9419e59fefb9fce7450b95cb405623e8710a1d95 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Tue, 22 Jan 2013 15:31:56 +0100
Subject: [PATCH 035/253] [IMP] change the warning string's pattern to
something more familiar to translators
bzr revid: abo@openerp.com-20130122143156-ffp79tdg1ryvr5y2
---
openerp/addons/base/res/res_config.py | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index 7f5dd7779e5..9580121e98f 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -604,25 +604,23 @@ class res_config_settings(osv.osv_memory):
def get_warning_config(cr, msg, context=None):
res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings')
+ regex_path = r'%\(((?:path|field):[a-z_\.]*)\)s'
- # Process the msg
- # 1/ find the path and field references, put them in a list
- references = re.findall(r'\[((?:path|field):[a-z_\.]*)\]', msg, flags=re.I)
+ # Process the message
+ # 1/ find the path and/or field references, put them in a list
+ references = re.findall(regex_path, msg, flags=re.I)
- # 2/ fetch the path and field replacement values
+ # 2/ fetch the path and/or field replacement values
# (full path and human readable field's name)
- values = []
+ values = {}
for item in references:
ref_type, ref = item.split(':')
if ref_type == 'path':
- values.append(res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context))
+ values[item] = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context)
elif ref_type == 'field':
- values.append(res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context))
-
- # 3/ replace the text references by the %s conversion symbol
- msg = re.sub(r'\[((?:path|field):[a-z_\.]*)\]', '%s', msg, flags=re.I)
+ values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context)
# 4/ substitute and return the result
- return exceptions.WarningConfig(msg % tuple(values))
+ return exceptions.WarningConfig(msg % values)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From 5cb047aa75922c2560f18fdf0f973e63a5f6c731 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Tue, 22 Jan 2013 17:22:23 +0100
Subject: [PATCH 036/253] [IMP] add documentation also replace the %(path:)s by
%(menu:)s (more cohesive)
bzr revid: abo@openerp.com-20130122162223-no1wzf1gyxpdvzqk
---
openerp/addons/base/res/res_config.py | 41 +++++++++++++++++++++++++--
1 file changed, 39 insertions(+), 2 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index 9580121e98f..6ed28f88927 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -591,6 +591,15 @@ class res_config_settings(osv.osv_memory):
return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)]
def get_option_path(self, cr, uid, menu_xml_id=None, context=None):
+ """
+ Fetch the path to a specified configuration view.
+
+ :param string menu_xml_id: the xml id of the menuitem where the view
+ is located, structured as follows: module_name.menuitem_xml_id
+ (e.g.: "base.menu_sale_config")
+ :return string: full path to the menuitem
+ (e.g.: "Settings/Configuration/Sales")
+ """
module_name, menu_xml_id = menu_xml_id.split('.')
dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id)
ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context)
@@ -598,13 +607,41 @@ class res_config_settings(osv.osv_memory):
return ir_ui_menu.complete_name
def get_option_name(self, cr, uid, full_field_name=None, context=None):
+ """
+ Fetch the human readable name of a specified configuration option.
+
+ :param string full_field_name: the full name of the field, structured
+ as follows: model_name.field_name
+ (e.g.: "sale.config.settings.fetchmail_lead")
+ :return string: human readable name of the field
+ (e.g.: "Create leads from incoming mails")
+ """
model_name, field_name = full_field_name.rsplit('.', 1)
return self.pool.get(model_name)._all_columns.get(field_name).column.string
def get_warning_config(cr, msg, context=None):
+ """
+ Helper: return a WarningConfig exception with the given message where the
+ %(field:)s and/or %(menu:)s are replaced by the human readable field's name
+ and/or menuitem's full path.
+
+ Usage:
+ ------
+ Just include in your error message %(field:model_name.field_name)s to
+ obtain the human readable field's name, and/or
+ %(menu:module_name.menuitem_xml_id)s to obtain the menuitem's full path.
+
+ Example of use:
+ ---------------
+ from openerp.addons.base.res.res_config import get_warning_config
+ raise get_warning_config(cr, _("Error: this action is prohibited. You should check the field %(field:sale.config.settings.fetchmail_lead)s in %(menu:base.menu_sale_config)s."), context=context)
+ will return an exception containing the following message:
+ Error: this action is prohibited. You should check the field Create leads from incoming mails in Settings/Configuration/Sales.
+ """
+
res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings')
- regex_path = r'%\(((?:path|field):[a-z_\.]*)\)s'
+ regex_path = r'%\(((?:menu|field):[a-z_\.]*)\)s'
# Process the message
# 1/ find the path and/or field references, put them in a list
@@ -615,7 +652,7 @@ def get_warning_config(cr, msg, context=None):
values = {}
for item in references:
ref_type, ref = item.split(':')
- if ref_type == 'path':
+ if ref_type == 'menu':
values[item] = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context)
elif ref_type == 'field':
values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context)
From ffc09a7251fca17e207c6c4f6de01e17da29f4af Mon Sep 17 00:00:00 2001
From: "Bhumi Thakkar (Open ERP)"
Date: Wed, 23 Jan 2013 15:33:22 +0530
Subject: [PATCH 037/253] [FIX] Fixed calendar instead of ul of searchvox.
bzr revid: bth@tinyerp.com-20130123100322-zw0e40btcex2wfjc
---
addons/web/static/src/js/search.js | 1 -
addons/web_calendar/static/src/css/web_calendar.css | 2 +-
addons/web_calendar/static/src/css/web_calendar.sass | 2 +-
3 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js
index 1d732292671..a0208cc6d7a 100644
--- a/addons/web/static/src/js/search.js
+++ b/addons/web/static/src/js/search.js
@@ -445,7 +445,6 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
? $('').html(item.label)
: $(' ').text(item.value));
}
- $(ul[0]).css({'z-index': 2});
return $item.text(item.label)
.css({
borderTop: '1px solid #cccccc',
diff --git a/addons/web_calendar/static/src/css/web_calendar.css b/addons/web_calendar/static/src/css/web_calendar.css
index d40a7a2940a..214c777dbdc 100644
--- a/addons/web_calendar/static/src/css/web_calendar.css
+++ b/addons/web_calendar/static/src/css/web_calendar.css
@@ -18,7 +18,7 @@
.openerp .oe_calendar .dhx_cal_select_menu .dhx_menu_icon.icon_edit {
display: none;
}
-.openerp .oe_calendar .dhx_cal_navline {
+.openerp .oe_calendar .dhx_cal_navline, .openerp .oe_calendar .dhx_cal_header {
z-index: auto;
}
.openerp .oe_calendar.oe_cal_month .dhx_cal_data table tr td:last-child div.dhx_month_body {
diff --git a/addons/web_calendar/static/src/css/web_calendar.sass b/addons/web_calendar/static/src/css/web_calendar.sass
index f6b6a1a5eeb..e4986981609 100644
--- a/addons/web_calendar/static/src/css/web_calendar.sass
+++ b/addons/web_calendar/static/src/css/web_calendar.sass
@@ -20,7 +20,7 @@
// Dhtmlx Scheduler css overrides
.dhx_cal_select_menu .dhx_menu_icon.icon_edit
display: none
- .dhx_cal_navline
+ .dhx_cal_navline, .dhx_cal_header
// dhtmlx sets the index to 3 (in glossy theme)
// I didn't found the reason yet but it overlaps the
// dropdown menus and I want to avoid a z-index war.
From 0b65aa2231e6aac97b3aae844bddfacf9a338c8c Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Wed, 23 Jan 2013 16:22:34 +0100
Subject: [PATCH 038/253] [IMP] fix a comment's indentation, remove a few
whitespaces
bzr revid: abo@openerp.com-20130123152234-g2ou48xajxsq8sqj
---
openerp/osv/orm.py | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index 6056e405b78..8b10d7da168 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -2287,7 +2287,7 @@ class BaseModel(object):
if view_type == 'tree' or not action[2].get('multi')]
resprint = [clean(print_) for print_ in resprint
if view_type == 'tree' or not print_[2].get('multi')]
- #When multi="True" set it will display only in More of the list view
+ #When multi="True" set it will display only in More of the list view
resrelate = [clean(action) for action in resrelate
if (action[2].get('multi') and view_type == 'tree') or (not action[2].get('multi') and view_type == 'form')]
@@ -2682,17 +2682,17 @@ class BaseModel(object):
order = orderby or groupby
data_ids = self.search(cr, uid, [('id', 'in', alldata.keys())], order=order, context=context)
-
+
# the IDs of records that have groupby field value = False or '' should be included too
data_ids += set(alldata.keys()).difference(data_ids)
-
- if groupby:
+
+ if groupby:
data = self.read(cr, uid, data_ids, [groupby], context=context)
# restore order of the search as read() uses the default _order (this is only for groups, so the footprint of data should be small):
data_dict = dict((d['id'], d[groupby] ) for d in data)
result = [{'id': i, groupby: data_dict[i]} for i in data_ids]
else:
- result = [{'id': i} for i in data_ids]
+ result = [{'id': i} for i in data_ids]
for d in result:
if groupby:
@@ -2756,7 +2756,7 @@ class BaseModel(object):
return
_logger.info('Computing parent left and right for table %s...', self._table)
def browse_rec(root, pos=0):
-# TODO: set order
+ # TODO: set order
where = self._parent_name+'='+str(root)
if not root:
where = self._parent_name+' IS NULL'
@@ -3867,7 +3867,7 @@ class BaseModel(object):
if operation in ('read','unlink'):
# No need to warn about deleting an already deleted record.
# And no error when reading a record that was deleted, to prevent spurious
- # errors for non-transactional search/read sequences coming from clients
+ # errors for non-transactional search/read sequences coming from clients
return
_logger.warning('Failed operation on deleted record(s): %s, uid: %s, model: %s', operation, uid, self._name)
raise except_orm(_('Missing document(s)'),
@@ -4355,12 +4355,12 @@ class BaseModel(object):
del vals[self._inherits[table]]
record_id = tocreate[table].pop('id', None)
-
+
# When linking/creating parent records, force context without 'no_store_function' key that
- # defers stored functions computing, as these won't be computed in batch at the end of create().
+ # defers stored functions computing, as these won't be computed in batch at the end of create().
parent_context = dict(context)
parent_context.pop('no_store_function', None)
-
+
if record_id is None or not record_id:
record_id = self.pool.get(table).create(cr, user, tocreate[table], context=parent_context)
else:
@@ -4409,7 +4409,7 @@ class BaseModel(object):
upd0 = upd0 + ',"' + field + '"'
upd1 = upd1 + ',' + self._columns[field]._symbol_set[0]
upd2.append(self._columns[field]._symbol_set[1](vals[field]))
- #for the function fields that receive a value, we set them directly in the database
+ #for the function fields that receive a value, we set them directly in the database
#(they may be required), but we also need to trigger the _fct_inv()
if (hasattr(self._columns[field], '_fnct_inv')) and not isinstance(self._columns[field], fields.related):
#TODO: this way to special case the related fields is really creepy but it shouldn't be changed at
From 11dbed0fb7f9d5720c7e9b49c0df0d3f2a19c339 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Wed, 23 Jan 2013 16:37:22 +0100
Subject: [PATCH 039/253] [IMP] only call ir.translation when necessary
bzr revid: abo@openerp.com-20130123153722-iijbl8hvesstneq3
---
openerp/osv/orm.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index 8b10d7da168..471f72a82ac 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -3504,7 +3504,6 @@ class BaseModel(object):
res = {}
- translation_obj = self.pool.get('ir.translation')
for parent in self._inherits:
res.update(self.pool.get(parent).fields_get(cr, user, allfields, context))
@@ -3520,6 +3519,8 @@ class BaseModel(object):
res[f]['states'] = {}
if 'lang' in context:
+ translation_obj = self.pool.get('ir.translation')
+
if 'string' in res[f]:
res_trans = translation_obj._get_source(cr, user, self._name + ',' + f, 'field', context['lang'])
if res_trans:
From 28960472df20d10024f2c45596a116dd87d81643 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Wed, 23 Jan 2013 16:49:43 +0100
Subject: [PATCH 040/253] [IMP] use fields_get() instead of _all_columns.get():
this method has the advantage to provide translation support
bzr revid: abo@openerp.com-20130123154943-2ux9vpts4pmvr7nq
---
openerp/addons/base/res/res_config.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index 6ed28f88927..d2f2e8a265f 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -618,7 +618,7 @@ class res_config_settings(osv.osv_memory):
"""
model_name, field_name = full_field_name.rsplit('.', 1)
- return self.pool.get(model_name)._all_columns.get(field_name).column.string
+ return self.pool.get(model_name).fields_get(cr, uid, allfields=[field_name], context=context)[field_name]['string']
def get_warning_config(cr, msg, context=None):
"""
From 59dc49061cf5e1520ef02df969e7c5bdf79a470b Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Thu, 24 Jan 2013 16:41:19 +0100
Subject: [PATCH 041/253] [IMP] we don't need a special type of exception
anymore
bzr revid: abo@openerp.com-20130124154119-5283u6x1it5xvt0r
---
openerp/addons/base/res/res_config.py | 4 ++--
openerp/exceptions.py | 5 -----
openerp/netsvc.py | 2 --
openerp/service/netrpc_server.py | 2 --
openerp/service/wsgi_server.py | 3 ---
5 files changed, 2 insertions(+), 14 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index d2f2e8a265f..33615333447 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -622,7 +622,7 @@ class res_config_settings(osv.osv_memory):
def get_warning_config(cr, msg, context=None):
"""
- Helper: return a WarningConfig exception with the given message where the
+ Helper: return a Warning exception with the given message where the
%(field:)s and/or %(menu:)s are replaced by the human readable field's name
and/or menuitem's full path.
@@ -658,6 +658,6 @@ def get_warning_config(cr, msg, context=None):
values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context)
# 4/ substitute and return the result
- return exceptions.WarningConfig(msg % values)
+ return exceptions.Warning(msg % values)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/exceptions.py b/openerp/exceptions.py
index c43f706fa61..fbf52c7f3a9 100644
--- a/openerp/exceptions.py
+++ b/openerp/exceptions.py
@@ -30,11 +30,6 @@ treated as a 'Server error'.
class Warning(Exception):
pass
-class WarningConfig(Exception):
- """ Warning bound to a misconfiguration. """
- def __init__(self, msg):
- super(WarningConfig, self).__init__(msg)
-
class AccessDenied(Exception):
""" Login/password error. No message, no traceback. """
def __init__(self):
diff --git a/openerp/netsvc.py b/openerp/netsvc.py
index 3362b86fac7..47ee4d81e20 100644
--- a/openerp/netsvc.py
+++ b/openerp/netsvc.py
@@ -306,8 +306,6 @@ def dispatch_rpc(service_name, method, params):
raise
except openerp.exceptions.Warning:
raise
- except openerp.exceptions.WarningConfig:
- raise
except openerp.exceptions.DeferredException, e:
_logger.exception(tools.exception_to_unicode(e))
post_mortem(e.traceback)
diff --git a/openerp/service/netrpc_server.py b/openerp/service/netrpc_server.py
index f87274ef6e6..34bb30d8f75 100644
--- a/openerp/service/netrpc_server.py
+++ b/openerp/service/netrpc_server.py
@@ -170,8 +170,6 @@ def netrpc_handle_exception_legacy(e):
return 'warning -- ' + e.name + '\n\n' + e.value
if isinstance(e, openerp.exceptions.Warning):
return 'warning -- Warning\n\n' + str(e)
- if isinstance(e, openerp.exceptions.WarningConfig):
- return 'warning -- Warning\n\n' + str(e)
if isinstance(e, openerp.exceptions.AccessError):
return 'warning -- AccessError\n\n' + str(e)
if isinstance(e, openerp.exceptions.AccessDenied):
diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py
index 0b1cff68114..5da34e2e48a 100644
--- a/openerp/service/wsgi_server.py
+++ b/openerp/service/wsgi_server.py
@@ -95,9 +95,6 @@ def xmlrpc_handle_exception(e):
response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
elif isinstance(e, openerp.exceptions.Warning):
fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, str(e))
- elif isinstance(e, openerp.exceptions.WarningConfig):
- fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, str(e))
- response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
elif isinstance (e, openerp.exceptions.AccessError):
fault = xmlrpclib.Fault(RPC_FAULT_CODE_ACCESS_ERROR, str(e))
response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
From 75ce079a814f8795d43171965a842aa19a51b2f3 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Thu, 24 Jan 2013 16:41:19 +0100
Subject: [PATCH 042/253] [IMP] we don't need a special type of exception
anymore
bzr revid: abo@openerp.com-20130124154119-flmuzwunpi72c02i
---
addons/web/session.py | 2 --
1 file changed, 2 deletions(-)
diff --git a/addons/web/session.py b/addons/web/session.py
index a2719482a2c..30e9308d4e1 100644
--- a/addons/web/session.py
+++ b/addons/web/session.py
@@ -92,8 +92,6 @@ class OpenERPSession(object):
raise xmlrpclib.Fault(code_string % (e.name, e.value), '')
except openerp.exceptions.Warning, e:
raise xmlrpclib.Fault(code_string % ("Warning", e), '')
- except openerp.exceptions.WarningConfig, e:
- raise xmlrpclib.Fault(code_string % ("Warning", e), '')
except openerp.exceptions.AccessError, e:
raise xmlrpclib.Fault(code_string % ("AccessError", e), '')
except openerp.exceptions.AccessDenied, e:
From 7d7fe62ca8147a8d6ebd323034a64d7cc076a0c8 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Fri, 25 Jan 2013 16:49:41 +0100
Subject: [PATCH 043/253] [IMP] procurement: use the new signal_xxx methods
instead of trg_validate.
bzr revid: vmt@openerp.com-20130125154941-8jbzke0diaqhf5j3
---
addons/procurement/schedulers.py | 21 ++++++++-------------
1 file changed, 8 insertions(+), 13 deletions(-)
diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py
index 3cb34d6bdff..76b31cc6da3 100644
--- a/addons/procurement/schedulers.py
+++ b/addons/procurement/schedulers.py
@@ -62,8 +62,7 @@ class procurement_order(osv.osv):
procurement_obj = self.pool.get('procurement.order')
if not ids:
ids = procurement_obj.search(cr, uid, [('state', '=', 'exception')], order="date_planned")
- for id in ids:
- wf_service.trg_validate(uid, 'procurement.order', id, 'button_restart', cr)
+ self.signal_button_restart(cr, uid, ids)
if use_new_cursor:
cr.commit()
company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id
@@ -78,7 +77,7 @@ class procurement_order(osv.osv):
ids = procurement_obj.search(cr, uid, [('state', '=', 'confirmed'), ('procure_method', '=', 'make_to_order')], offset=offset, limit=500, order='priority, date_planned', context=context)
for proc in procurement_obj.browse(cr, uid, ids, context=context):
if maxdate >= proc.date_planned:
- wf_service.trg_validate(uid, 'procurement.order', proc.id, 'button_check', cr)
+ self.signal_button_check(cr, uid, [proc.id])
else:
offset += 1
report_later += 1
@@ -100,7 +99,7 @@ class procurement_order(osv.osv):
ids = procurement_obj.search(cr, uid, [('state', '=', 'confirmed'), ('procure_method', '=', 'make_to_stock')], offset=offset)
for proc in procurement_obj.browse(cr, uid, ids):
if maxdate >= proc.date_planned:
- wf_service.trg_validate(uid, 'procurement.order', proc.id, 'button_check', cr)
+ self.signal_button_check(cr, uid, [proc.id])
report_ids.append(proc.id)
else:
report_later += 1
@@ -178,8 +177,8 @@ class procurement_order(osv.osv):
proc_id = proc_obj.create(cr, uid,
self._prepare_automatic_op_procurement(cr, uid, product, warehouse, location_id, context=context),
context=context)
- wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
- wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_check', cr)
+ self.signal_button_confirm(cr, uid, [proc_id])
+ self.signal_button_check(cr, uid, [proc_id])
return True
def _get_orderpoint_date_planned(self, cr, uid, orderpoint, start_date, context=None):
@@ -254,7 +253,7 @@ class procurement_order(osv.osv):
to_generate = qty
for proc_data in procure_datas:
if to_generate >= proc_data['product_qty']:
- wf_service.trg_validate(uid, 'procurement.order', proc_data['id'], 'button_confirm', cr)
+ self.signal_button_confirm(cr, uid, [proc_data['id']])
procurement_obj.write(cr, uid, [proc_data['id']], {'origin': op.name}, context=context)
to_generate -= proc_data['product_qty']
if not to_generate:
@@ -265,10 +264,8 @@ class procurement_order(osv.osv):
proc_id = procurement_obj.create(cr, uid,
self._prepare_orderpoint_procurement(cr, uid, op, qty, context=context),
context=context)
- wf_service.trg_validate(uid, 'procurement.order', proc_id,
- 'button_confirm', cr)
- wf_service.trg_validate(uid, 'procurement.order', proc_id,
- 'button_check', cr)
+ self.signal_button_confirm(cr, uid, [proc_id])
+ self.signal_button_check(cr, uid, [proc_id])
orderpoint_obj.write(cr, uid, [op.id],
{'procurement_id': proc_id}, context=context)
offset += len(ids)
@@ -279,6 +276,4 @@ class procurement_order(osv.osv):
cr.close()
return {}
-procurement_order()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From 8eb9987b0ea3d437596473c98c71958dd4a697c8 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Fri, 25 Jan 2013 16:50:56 +0100
Subject: [PATCH 044/253] [DOC] Started workflow (technical) documentation.
bzr revid: vmt@openerp.com-20130125155056-9b1nizd4yfsfnd6a
---
doc/workflows.rst | 13 +++++++++++++
1 file changed, 13 insertions(+)
create mode 100644 doc/workflows.rst
diff --git a/doc/workflows.rst b/doc/workflows.rst
new file mode 100644
index 00000000000..61a58575c9b
--- /dev/null
+++ b/doc/workflows.rst
@@ -0,0 +1,13 @@
+.. _workflows:
+
+Workflows
+=========
+
+- Low-level workflow functions (i.e. the openerp.workflow "service").
+ Useful when looking-up a model and its records is not necessary, i.e. when
+ working with raw model name and record ids is preferred (less hit to the
+ database). Cannot really be used as it would bypass the ORM methods.
+- Model-level (ORM) methods.
+- XML-RPC endpoint and methods.
+
+- Blah Model.signal_xxxx()
From ad7d846106af54a631485388623e8a6f69b38d45 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Fri, 25 Jan 2013 16:51:32 +0100
Subject: [PATCH 045/253] [IMP] orm: expose a signal_xxx() method to call
workflow.trg_validate().
bzr revid: vmt@openerp.com-20130125155132-nhyntobe5xm1g7h0
---
openerp/osv/orm.py | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index 6056e405b78..0ffabcf0e19 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -5251,6 +5251,20 @@ class BaseModel(object):
""" stuff to do right after the registry is built """
pass
+ def __getattr__(self, name):
+ if name.startswith('signal_'):
+ signal_name = name[len('signal_'):]
+ assert signal_name
+ def handle_workflow_signal(cr, uid, ids):
+ workflow_service = netsvc.LocalService("workflow")
+ res = {}
+ for id in ids:
+ # TODO consolidate trg_validate() and the functions it calls to work on a list of IDs.
+ res[id] = workflow_service.trg_validate(uid, self._name, id, signal_name, cr)
+ return res
+ return handle_workflow_signal
+ raise AttributeError
+
# keep this import here, at top it will cause dependency cycle errors
import expression
From 200d008fc4c4409d5f8c898d31f9afdaf7275cdd Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Fri, 25 Jan 2013 17:53:14 +0100
Subject: [PATCH 046/253] [FIX] orm: call super in __getattr__.
bzr revid: vmt@openerp.com-20130125165314-66j55mtobvt61c7r
---
openerp/osv/orm.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index 0ffabcf0e19..d3c11118116 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -5263,7 +5263,7 @@ class BaseModel(object):
res[id] = workflow_service.trg_validate(uid, self._name, id, signal_name, cr)
return res
return handle_workflow_signal
- raise AttributeError
+ return super(BaseModel, self).__getattr__(name)
# keep this import here, at top it will cause dependency cycle errors
import expression
From a2679597a0f3f3eaf6277e030ca2a9b44763f873 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Fri, 25 Jan 2013 17:53:55 +0100
Subject: [PATCH 047/253] [IMP] purchase: use the new signal_xxx methods
instead of trg_validate.
bzr revid: vmt@openerp.com-20130125165355-78o1utblskn0sa5e
---
addons/purchase/purchase.py | 36 +++++++++++++++---------------------
1 file changed, 15 insertions(+), 21 deletions(-)
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 799601acb64..bf3686d5a34 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -22,6 +22,7 @@
import time
from datetime import datetime
from dateutil.relativedelta import relativedelta
+from operator import attrgetter
from openerp.osv import fields, osv
from openerp import netsvc
@@ -260,9 +261,7 @@ class purchase_order(osv.osv):
raise osv.except_osv(_('Invalid Action!'), _('In order to delete a purchase order, you must cancel it first.'))
# automatically sending subflow.delete upon deletion
- wf_service = netsvc.LocalService("workflow")
- for id in unlink_ids:
- wf_service.trg_validate(uid, 'purchase.order', id, 'purchase_cancel', cr)
+ self.signal_purchase_cancel(cr, uid, unlink_ids)
return super(purchase_order, self).unlink(cr, uid, unlink_ids, context=context)
@@ -439,8 +438,7 @@ class purchase_order(osv.osv):
This function prints the request for quotation and mark it as sent, so that we can see more easily the next step of the workflow
'''
assert len(ids) == 1, 'This option should only be used for a single id at a time'
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'purchase.order', ids[0], 'send_rfq', cr)
+ self.signal_send_rfq(cr, uid, ids)
datas = {
'model': 'purchase.order',
'ids': ids,
@@ -571,26 +569,24 @@ class purchase_order(osv.osv):
return False
def action_cancel(self, cr, uid, ids, context=None):
- wf_service = netsvc.LocalService("workflow")
for purchase in self.browse(cr, uid, ids, context=context):
for pick in purchase.picking_ids:
if pick.state not in ('draft','cancel'):
raise osv.except_osv(
_('Unable to cancel this purchase order.'),
_('First cancel all receptions related to this purchase order.'))
- for pick in purchase.picking_ids:
- wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_cancel', cr)
+ self.pool.get('stock.picking') \
+ .signal_button_cancel(cr, uid, map(attrgetter('id'), purchase.picking_ids))
for inv in purchase.invoice_ids:
if inv and inv.state not in ('cancel','draft'):
raise osv.except_osv(
_('Unable to cancel this purchase order.'),
_('You must first cancel all receptions related to this purchase order.'))
- if inv:
- wf_service.trg_validate(uid, 'account.invoice', inv.id, 'invoice_cancel', cr)
+ self.pool.get('account.invoice') \
+ .signal_invoice_cancel(cr, uid, map(attrgetter('id'), purchase.invoice_ids))
self.write(cr,uid,ids,{'state':'cancel'})
- for (id, name) in self.name_get(cr, uid, ids):
- wf_service.trg_validate(uid, 'purchase.order', id, 'purchase_cancel', cr)
+ self.signal_purchase_cancel(cr, uid, ids)
return True
def _prepare_order_picking(self, cr, uid, order, context=None):
@@ -648,11 +644,11 @@ class purchase_order(osv.osv):
will be added. A new picking will be created if omitted.
:return: list of IDs of pickings used/created for the given order lines (usually just one)
"""
+ stock_picking = self.pool.get('stock.picking')
if not picking_id:
- picking_id = self.pool.get('stock.picking').create(cr, uid, self._prepare_order_picking(cr, uid, order, context=context))
+ picking_id = stock_picking.create(cr, uid, self._prepare_order_picking(cr, uid, order, context=context))
todo_moves = []
stock_move = self.pool.get('stock.move')
- wf_service = netsvc.LocalService("workflow")
for order_line in order_lines:
if not order_line.product_id:
continue
@@ -663,7 +659,7 @@ class purchase_order(osv.osv):
todo_moves.append(move)
stock_move.action_confirm(cr, uid, todo_moves)
stock_move.force_assign(cr, uid, todo_moves)
- wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
+ stock_picking.signal_button_confirm(cr, uid, [picking_id])
return [picking_id]
def action_picking_create(self, cr, uid, ids, context=None):
@@ -714,7 +710,6 @@ class purchase_order(osv.osv):
"""
#TOFIX: merged order line should be unlink
- wf_service = netsvc.LocalService("workflow")
def make_key(br, fields):
list_key = []
for field in fields:
@@ -782,6 +777,7 @@ class purchase_order(osv.osv):
allorders = []
orders_info = {}
+ wf_service = netsvc.LocalService("workflow")
for order_key, (order_data, old_ids) in new_orders.iteritems():
# skip merges with only one order
if len(old_ids) < 2:
@@ -802,7 +798,7 @@ class purchase_order(osv.osv):
# make triggers pointing to the old orders point to the new order
for old_id in old_ids:
wf_service.trg_redirect(uid, 'purchase.order', old_id, neworder_id, cr)
- wf_service.trg_validate(uid, 'purchase.order', old_id, 'purchase_cancel', cr)
+ self.signal_purchase_cancel(cr, uid, [old_id]) # TODO Is it necessary to interleave the calls?
return orders_info
@@ -1169,8 +1165,7 @@ class mail_mail(osv.Model):
def _postprocess_sent_message(self, cr, uid, mail, context=None):
if mail.model == 'purchase.order':
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'purchase.order', mail.res_id, 'send_rfq', cr)
+ self.pool.get('purchase.order').signal_send_rfq(cr, uid, [mail.res_id])
return super(mail_mail, self)._postprocess_sent_message(cr, uid, mail=mail, context=context)
@@ -1192,8 +1187,7 @@ class mail_compose_message(osv.Model):
context = context or {}
if context.get('default_model') == 'purchase.order' and context.get('default_res_id'):
context = dict(context, mail_post_autofollow=True)
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'purchase.order', context['default_res_id'], 'send_rfq', cr)
+ self.pool.get('purchase.order').signal_send_rfq(cr, uid, [context['default_res_id']])
return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From 11632909ae3e6952d4f26469077819ad57134985 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Fri, 25 Jan 2013 22:17:51 +0100
Subject: [PATCH 048/253] [FIX] lunch: passing self in a super call.
bzr revid: vmt@openerp.com-20130125211751-725w3trha283ypa2
---
addons/lunch/lunch.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/lunch/lunch.py b/addons/lunch/lunch.py
index 0f9033fce38..022eb5208eb 100644
--- a/addons/lunch/lunch.py
+++ b/addons/lunch/lunch.py
@@ -159,7 +159,7 @@ class lunch_order(osv.Model):
def specific_function(cr, uid, ids, context=None):
return self.add_preference(cr, uid, ids, pref_id, context=context)
return specific_function
- return super(lunch_order,self).__getattr__(self,attr)
+ return super(lunch_order, self).__getattr__(attr)
def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False):
"""
From 494b2481e2ce798364eb1548b1e57d9e1e9c2d39 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Mon, 28 Jan 2013 10:17:16 +0100
Subject: [PATCH 049/253] [IMP] purchase: use the new signal_xxx methods
instead of trg_validate.
bzr revid: vmt@openerp.com-20130128091716-ni5zb1qp4sib58rm
---
addons/purchase/test/process/rfq2order2done.yml | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/addons/purchase/test/process/rfq2order2done.yml b/addons/purchase/test/process/rfq2order2done.yml
index 4bf55d61973..be68a8ca01e 100644
--- a/addons/purchase/test/process/rfq2order2done.yml
+++ b/addons/purchase/test/process/rfq2order2done.yml
@@ -62,8 +62,7 @@
import netsvc
invoice_ids = [x.id for x in self.browse(cr, uid, ref("purchase_order_1")).invoice_ids]
wf_service = netsvc.LocalService("workflow")
- for invoice in invoice_ids:
- wf_service.trg_validate(uid, 'account.invoice', invoice, 'invoice_open', cr)
+ self.pool.get('account.invoice').signal_invoice_open(cr, uid, invoice_ids)
-
I check that purchase order is invoiced.
-
From 86680d853b12bd4564ab7d0792eae7534bdbbd9f Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Mon, 28 Jan 2013 10:29:30 +0100
Subject: [PATCH 050/253] [IMP] account_payment: use the new signal_xxx methods
instead of trg_validate.
bzr revid: vmt@openerp.com-20130128092930-6lhgyprwirpt6y3z
---
addons/account_payment/account_payment.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/addons/account_payment/account_payment.py b/addons/account_payment/account_payment.py
index d67db60e590..c57c83aa765 100644
--- a/addons/account_payment/account_payment.py
+++ b/addons/account_payment/account_payment.py
@@ -135,9 +135,8 @@ class payment_order(osv.osv):
return True
def set_done(self, cr, uid, ids, *args):
- wf_service = netsvc.LocalService("workflow")
self.write(cr, uid, ids, {'date_done': time.strftime('%Y-%m-%d')})
- wf_service.trg_validate(uid, 'payment.order', ids[0], 'done', cr)
+ self.signal_done(cr, uid, [ids[0]])
return True
def copy(self, cr, uid, id, default=None, context=None):
From f6fd7368a283439f3d7ca8110acd49066dcac18b Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Mon, 28 Jan 2013 11:00:38 +0100
Subject: [PATCH 051/253] [IMP] procurement: use the new signal_xxx methods
instead of trg_validate.
bzr revid: vmt@openerp.com-20130128100038-6dyftmdm8tfn6j5k
---
addons/procurement/procurement.py | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py
index 50efe0f500e..21c260b99cd 100644
--- a/addons/procurement/procurement.py
+++ b/addons/procurement/procurement.py
@@ -19,10 +19,12 @@
#
##############################################################################
+from operator import attrgetter
+import time
+
from openerp.osv import fields, osv
from openerp.tools.translate import _
from openerp import netsvc
-import time
import openerp.addons.decimal_precision as dp
# Procurement
@@ -42,7 +44,6 @@ class mrp_property_group(osv.osv):
'name': fields.char('Property Group', size=64, required=True),
'description': fields.text('Description'),
}
-mrp_property_group()
class mrp_property(osv.osv):
"""
@@ -59,7 +60,6 @@ class mrp_property(osv.osv):
_defaults = {
'composition': lambda *a: 'min',
}
-mrp_property()
class StockMove(osv.osv):
_inherit = 'stock.move'
@@ -72,7 +72,6 @@ class StockMove(osv.osv):
default['procurements'] = []
return super(StockMove, self).copy(cr, uid, id, default, context=context)
-StockMove()
class procurement_order(osv.osv):
"""
@@ -456,15 +455,13 @@ class procurement_order(osv.osv):
class StockPicking(osv.osv):
_inherit = 'stock.picking'
- def test_finished(self, cursor, user, ids):
+ def test_finished(self, cr, uid, ids):
wf_service = netsvc.LocalService("workflow")
- res = super(StockPicking, self).test_finished(cursor, user, ids)
- for picking in self.browse(cursor, user, ids):
+ res = super(StockPicking, self).test_finished(cr, uid, ids)
+ for picking in self.browse(cr, uid, ids):
for move in picking.move_lines:
if move.state == 'done' and move.procurements:
- for procurement in move.procurements:
- wf_service.trg_validate(user, 'procurement.order',
- procurement.id, 'button_check', cursor)
+ self.pool.get('procurement.order').signal_button_check(cr, uid, map(attrgetter('id'), move.procurements))
return res
class stock_warehouse_orderpoint(osv.osv):
From 99664df35a52019dab329b993801ee1642b0704b Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Mon, 28 Jan 2013 12:39:54 +0100
Subject: [PATCH 052/253] [IMP] stock_location: use the new signal_xxx methods
instead of trg_validate.
bzr revid: vmt@openerp.com-20130128113954-i60z7w4mygprra40
---
addons/stock_location/procurement_pull.py | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/addons/stock_location/procurement_pull.py b/addons/stock_location/procurement_pull.py
index eb5235d35ba..9f5dfb77375 100644
--- a/addons/stock_location/procurement_pull.py
+++ b/addons/stock_location/procurement_pull.py
@@ -49,7 +49,6 @@ class procurement_order(osv.osv):
proc_obj = self.pool.get('procurement.order')
move_obj = self.pool.get('stock.move')
picking_obj=self.pool.get('stock.picking')
- wf_service = netsvc.LocalService("workflow")
for proc in proc_obj.browse(cr, uid, ids, context=context):
line = None
for line in proc.product_id.flow_pull_ids:
@@ -109,9 +108,8 @@ class procurement_order(osv.osv):
'procure_method': line.procure_method,
'move_id': move_id,
})
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
- wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
+ self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id])
+ self.signal_button_confirm(cr, uid, [proc_id])
if proc.move_id:
move_obj.write(cr, uid, [proc.move_id.id],
{'location_id':proc.location_id.id})
@@ -119,9 +117,8 @@ class procurement_order(osv.osv):
self.write(cr, uid, [proc.id], {'state':'running', 'message': msg})
self.message_post(cr, uid, [proc.id], body=msg, context=context)
# trigger direct processing (the new procurement shares the same planned date as the original one, which is already being processed)
- wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_check', cr)
+ self.signal_button_check(cr, uid, [proc_id]) # TODO is it necessary to interleave the calls?
return False
-procurement_order()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From 781e6737acc114b7a76d711aa7e31ba78dd401b3 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Mon, 28 Jan 2013 13:01:47 +0100
Subject: [PATCH 053/253] [IMP] account_followup: use the new signal_xxx
methods instead of trg_validate.
bzr revid: vmt@openerp.com-20130128120147-oj7pvl2015x4764v
---
addons/account_followup/tests/test_account_followup.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/addons/account_followup/tests/test_account_followup.py b/addons/account_followup/tests/test_account_followup.py
index 14f458de98d..8ddf3f82288 100644
--- a/addons/account_followup/tests/test_account_followup.py
+++ b/addons/account_followup/tests/test_account_followup.py
@@ -44,8 +44,7 @@ class TestAccountFollowup(TransactionCase):
'quantity': 5,
'price_unit':200
})]})
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.invoice', self.invoice_id, 'invoice_open', cr)
+ self.registry('account.invoice').signal_invoice_open(cr, uid, [self.invoice_id])
self.voucher = self.registry("account.voucher")
From 8d50446d278643bf645107744a6ba12108c9eea1 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Mon, 28 Jan 2013 15:16:23 +0100
Subject: [PATCH 054/253] [IMP] hr_holidays: use the new signal_xxx methods
instead of trg_validate.
bzr revid: vmt@openerp.com-20130128141623-4rxcgqx7t33yydbp
---
addons/hr_holidays/hr_holidays.py | 21 +++++++++------------
addons/hr_holidays/test/test_hr_holiday.yml | 3 +--
2 files changed, 10 insertions(+), 14 deletions(-)
diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py
index c7d7867911d..234897809e1 100644
--- a/addons/hr_holidays/hr_holidays.py
+++ b/addons/hr_holidays/hr_holidays.py
@@ -24,7 +24,7 @@
import datetime
import time
from itertools import groupby
-from operator import itemgetter
+from operator import attrgetter, itemgetter
import math
from openerp import netsvc
@@ -370,11 +370,11 @@ class hr_holidays(osv.osv):
'employee_id': emp.id
}
leave_ids.append(self.create(cr, uid, vals, context=None))
- wf_service = netsvc.LocalService("workflow")
for leave_id in leave_ids:
- wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'confirm', cr)
- wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'validate', cr)
- wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'second_validate', cr)
+ # TODO is it necessary to interleave the calls?
+ self.signal_confirm(cr, uid, [leave_id])
+ self.signal_validate(cr, uid, [leave_id])
+ self.signal_second_validate(cr, uid, [leave_id])
return True
def holidays_confirm(self, cr, uid, ids, context=None):
@@ -404,9 +404,7 @@ class hr_holidays(osv.osv):
meeting_obj.unlink(cr, uid, [record.meeting_id.id])
# If a category that created several holidays, cancel all related
- wf_service = netsvc.LocalService("workflow")
- for request in record.linked_request_ids or []:
- wf_service.trg_validate(uid, 'hr.holidays', request.id, 'refuse', cr)
+ self.signal_refuse(cr, uid, map(attrgetter('id'), record.linked_request_ids or []))
self._remove_resource_leave(cr, uid, ids, context=context)
return True
@@ -478,10 +476,9 @@ class hr_employee(osv.osv):
leave_id = holiday_obj.create(cr, uid, {'name': _('Leave Request for %s') % employee.name, 'employee_id': employee.id, 'holiday_status_id': status_id, 'type': 'remove', 'holiday_type': 'employee', 'number_of_days_temp': abs(diff)}, context=context)
else:
return False
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'confirm', cr)
- wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'validate', cr)
- wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'second_validate', cr)
+ holidays_obj.signal_confirm(cr, uid, [leave_id])
+ holidays_obj.signal_validate(cr, uid, [leave_id])
+ holidays_obj.signal_second_validate(cr, uid, [leave_id])
return True
def _get_remaining_days(self, cr, uid, ids, name, args, context=None):
diff --git a/addons/hr_holidays/test/test_hr_holiday.yml b/addons/hr_holidays/test/test_hr_holiday.yml
index f0e85d552cb..e78c2fd08bc 100644
--- a/addons/hr_holidays/test/test_hr_holiday.yml
+++ b/addons/hr_holidays/test/test_hr_holiday.yml
@@ -19,9 +19,8 @@
-
!python {model: hr.holidays}: |
import netsvc
- wf_service = netsvc.LocalService("workflow")
self.set_to_draft(cr, uid, [ref('hr_holidays_employee1_cl')])
- wf_service.trg_validate(uid, 'hr.holidays', ref('hr_holidays_employee1_cl'), 'confirm', cr)
+ self.signal_confirm(cr, uid, [ref('hr_holidays_employee1_cl')])
-
I validate the holiday request by clicking on "To Approve" button.
-
From ca919bec2c979a70e615f5023b6241b36b2c0ba1 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Mon, 28 Jan 2013 15:51:43 +0100
Subject: [PATCH 055/253] [IMP] account_voucher: use the new signal_xxx methods
instead of trg_validate.
bzr revid: vmt@openerp.com-20130128145143-w68s6z1kuulqk6ig
---
addons/account_voucher/account_voucher.py | 8 ++------
addons/account_voucher/test/case1_usd_usd.yml | 8 ++------
addons/account_voucher/test/case2_suppl_usd_eur.yml | 8 ++------
.../account_voucher/test/case2_usd_eur_debtor_in_eur.yml | 6 ++----
.../account_voucher/test/case2_usd_eur_debtor_in_usd.yml | 8 ++------
addons/account_voucher/test/case3_eur_eur.yml | 8 ++------
addons/account_voucher/test/case4_cad_chf.yml | 3 +--
addons/account_voucher/test/sales_payment.yml | 3 +--
addons/account_voucher/test/sales_receipt.yml | 3 +--
9 files changed, 15 insertions(+), 40 deletions(-)
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index de9cebdd09b..2046d787ef3 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -820,10 +820,7 @@ class account_voucher(osv.osv):
return vals
def button_proforma_voucher(self, cr, uid, ids, context=None):
- context = context or {}
- wf_service = netsvc.LocalService("workflow")
- for vid in ids:
- wf_service.trg_validate(uid, 'account.voucher', vid, 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, ids)
return {'type': 'ir.actions.act_window_close'}
def proforma_voucher(self, cr, uid, ids, context=None):
@@ -1506,7 +1503,6 @@ class account_bank_statement(osv.osv):
def create_move_from_st_line(self, cr, uid, st_line_id, company_currency_id, next_number, context=None):
voucher_obj = self.pool.get('account.voucher')
- wf_service = netsvc.LocalService("workflow")
move_line_obj = self.pool.get('account.move.line')
bank_st_line_obj = self.pool.get('account.bank.statement.line')
st_line = bank_st_line_obj.browse(cr, uid, st_line_id, context=context)
@@ -1514,7 +1510,7 @@ class account_bank_statement(osv.osv):
voucher_obj.write(cr, uid, [st_line.voucher_id.id], {'number': next_number}, context=context)
if st_line.voucher_id.state == 'cancel':
voucher_obj.action_cancel_draft(cr, uid, [st_line.voucher_id.id], context=context)
- wf_service.trg_validate(uid, 'account.voucher', st_line.voucher_id.id, 'proforma_voucher', cr)
+ voucher_obj.signal_proforma_voucher(cr, uid, [st_line.voucher_id.id])
v = voucher_obj.browse(cr, uid, st_line.voucher_id.id, context=context)
bank_st_line_obj.write(cr, uid, [st_line_id], {
diff --git a/addons/account_voucher/test/case1_usd_usd.yml b/addons/account_voucher/test/case1_usd_usd.yml
index 0f4c2058fc7..fd1945691ba 100644
--- a/addons/account_voucher/test/case1_usd_usd.yml
+++ b/addons/account_voucher/test/case1_usd_usd.yml
@@ -182,10 +182,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
- import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 1 USD/USD'), ('partner_id', '=', ref('base.res_partner_19'))])
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my first voucher is valid
-
@@ -279,10 +277,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
- import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 1'), ('partner_id', '=', ref('base.res_partner_19'))])
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my second voucher is valid
-
diff --git a/addons/account_voucher/test/case2_suppl_usd_eur.yml b/addons/account_voucher/test/case2_suppl_usd_eur.yml
index b32228032d3..91fb99f6360 100644
--- a/addons/account_voucher/test/case2_suppl_usd_eur.yml
+++ b/addons/account_voucher/test/case2_suppl_usd_eur.yml
@@ -161,10 +161,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
- import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_19'))])
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my voucher is valid
-
@@ -266,10 +264,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
- import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_19'))])
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, voucher)
-
I check that my voucher state is posted
-
diff --git a/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml b/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml
index 275e4c58835..2afdc8ad31b 100644
--- a/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml
+++ b/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml
@@ -181,8 +181,7 @@
!python {model: account.voucher}: |
import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_19'))])
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my voucher is valid
-
@@ -256,8 +255,7 @@
!python {model: account.voucher}: |
import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_19'))])
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, voucher)
-
I check that my voucher state is posted
-
diff --git a/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml b/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml
index 667882e3a32..b049fc7692e 100644
--- a/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml
+++ b/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml
@@ -179,10 +179,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
- import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_19'))])
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my voucher is valid
-
@@ -269,10 +267,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
- import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_19'))])
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, voucher)
-
I check that my voucher state is posted
-
diff --git a/addons/account_voucher/test/case3_eur_eur.yml b/addons/account_voucher/test/case3_eur_eur.yml
index f2f9461c31e..d0b18a5231b 100644
--- a/addons/account_voucher/test/case3_eur_eur.yml
+++ b/addons/account_voucher/test/case3_eur_eur.yml
@@ -141,10 +141,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
- import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 3'),('partner_id', '=', ref('base.res_partner_19'))])
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my first voucher is valid
-
@@ -231,10 +229,8 @@
I confirm the voucher
-
!python {model: account.voucher}: |
- import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 3'), ('partner_id', '=', ref('base.res_partner_19'))])
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my second voucher is valid
-
diff --git a/addons/account_voucher/test/case4_cad_chf.yml b/addons/account_voucher/test/case4_cad_chf.yml
index bc33e387a85..e8fe4c8cf9b 100644
--- a/addons/account_voucher/test/case4_cad_chf.yml
+++ b/addons/account_voucher/test/case4_cad_chf.yml
@@ -143,8 +143,7 @@
!python {model: account.voucher}: |
import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 4'), ('partner_id', '=', ref('base.res_partner_19'))])
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, voucher)
-
I check that the move of my voucher is valid
-
diff --git a/addons/account_voucher/test/sales_payment.yml b/addons/account_voucher/test/sales_payment.yml
index b71e42add0b..e7ed61c2cb2 100644
--- a/addons/account_voucher/test/sales_payment.yml
+++ b/addons/account_voucher/test/sales_payment.yml
@@ -61,8 +61,7 @@
id = self.create(cr, uid, vals)
voucher_id = self.browse(cr, uid, id)
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.voucher', voucher_id.id, 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, [voucher_id.id])
-
Finally i will Confirm the state of the invoice is paid
diff --git a/addons/account_voucher/test/sales_receipt.yml b/addons/account_voucher/test/sales_receipt.yml
index cf4bc5c46d3..af10777d98a 100644
--- a/addons/account_voucher/test/sales_receipt.yml
+++ b/addons/account_voucher/test/sales_receipt.yml
@@ -65,8 +65,7 @@
id = self.create(cr, uid, vals)
voucher_id = self.browse(cr, uid, id)
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.voucher', voucher_id.id, 'proforma_voucher', cr)
+ self.signal_proforma_voucher(cr, uid, [voucher_id.id])
-
I check that move lines are reconciled meaning voucher is paid
-
From 752649aa77a350b60e9cad39436f7c90b2b34652 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Mon, 28 Jan 2013 16:29:16 +0100
Subject: [PATCH 056/253] [IMP] l10n_in_hr_payroll: use the new signal_xxx
methods instead of trg_validate.
bzr revid: vmt@openerp.com-20130128152916-kt23l68420hkg49y
---
addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py
index 76fc1247de6..da98bbe681a 100644
--- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py
+++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py
@@ -198,8 +198,9 @@ class hr_payslip_run(osv.osv):
advice_id = advice_pool.create(cr, uid, advice_data, context=context)
slip_ids = []
for slip_id in run.slip_ids:
- wf_service.trg_validate(uid, 'hr.payslip', slip_id.id, 'hr_verify_sheet', cr)
- wf_service.trg_validate(uid, 'hr.payslip', slip_id.id, 'process_sheet', cr)
+ # TODO is it necessary to interleave the calls ?
+ payslip_pool.signal_hr_verify_sheet(cr, uid, [slip_id.id])
+ payslip_pool.signal_process_sheet(cr, uid, [slip_id.id])
slip_ids.append(slip_id.id)
for slip in payslip_pool.browse(cr, uid, slip_ids, context=context):
From 48a371d2b2b31544ed39b567b90c87a2da4ba9d1 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Mon, 28 Jan 2013 16:29:29 +0100
Subject: [PATCH 057/253] [IMP] stock: use the new signal_xxx methods instead
of trg_validate.
bzr revid: vmt@openerp.com-20130128152929-6rpoaccy5huw8kdq
---
addons/stock/stock.py | 22 ++++++++-------------
addons/stock/wizard/stock_return_picking.py | 3 +--
2 files changed, 9 insertions(+), 16 deletions(-)
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index 7198c89e286..2d351d9302e 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -759,10 +759,9 @@ class stock_picking(osv.osv):
""" Changes state of picking to available if all moves are confirmed.
@return: True
"""
- wf_service = netsvc.LocalService("workflow")
for pick in self.browse(cr, uid, ids):
if pick.state == 'draft':
- wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_confirm', cr)
+ self.signal_button_confirm(cr, uid, [pick.id])
move_ids = [x.id for x in pick.move_lines if x.state == 'confirmed']
if not move_ids:
raise osv.except_osv(_('Warning!'),_('Not enough stock, unable to reserve the products.'))
@@ -784,12 +783,10 @@ class stock_picking(osv.osv):
""" Confirms picking directly from draft state.
@return: True
"""
- wf_service = netsvc.LocalService("workflow")
for pick in self.browse(cr, uid, ids):
if not pick.move_lines:
raise osv.except_osv(_('Error!'),_('You cannot process picking without stock moves.'))
- wf_service.trg_validate(uid, 'stock.picking', pick.id,
- 'button_confirm', cr)
+ self.signal_button_confirm(cr, uid, [pick.id])
return True
def draft_validate(self, cr, uid, ids, context=None):
@@ -1345,18 +1342,18 @@ class stock_picking(osv.osv):
# At first we confirm the new picking (if necessary)
if new_picking:
- wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
+ self.signal_button_confirm(cr, uid, [new_picking])
# Then we finish the good picking
self.write(cr, uid, [pick.id], {'backorder_id': new_picking})
self.action_move(cr, uid, [new_picking], context=context)
- wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_done', cr)
+ self.signal_button_done(cr, uid, [new_picking])
wf_service.trg_write(uid, 'stock.picking', pick.id, cr)
delivered_pack_id = new_picking
back_order_name = self.browse(cr, uid, delivered_pack_id, context=context).name
self.message_post(cr, uid, ids, body=_("Back order %s has been created .") % (back_order_name), context=context)
else:
self.action_move(cr, uid, [pick.id], context=context)
- wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_done', cr)
+ self.signal_button_done(cr, uid, [pick.id])
delivered_pack_id = pick.id
delivered_pack = self.browse(cr, uid, delivered_pack_id, context=context)
@@ -2037,7 +2034,6 @@ class stock_move(osv.osv):
res_obj = self.pool.get('res.company')
location_obj = self.pool.get('stock.location')
move_obj = self.pool.get('stock.move')
- wf_service = netsvc.LocalService("workflow")
new_moves = []
if context is None:
context = {}
@@ -2073,7 +2069,7 @@ class stock_move(osv.osv):
})
new_moves.append(self.browse(cr, uid, [new_id])[0])
if pickid:
- wf_service.trg_validate(uid, 'stock.picking', pickid, 'button_confirm', cr)
+ self.signal_button_confirm(cr, uid, [pickid])
if new_moves:
new_moves += self.create_chained_picking(cr, uid, new_moves, context)
return new_moves
@@ -2195,6 +2191,7 @@ class stock_move(osv.osv):
return True
if context is None:
context = {}
+ wf_service = netsvc.LocalService("workflow")
pickings = set()
for move in self.browse(cr, uid, ids, context=context):
if move.state in ('confirmed', 'waiting', 'assigned', 'draft'):
@@ -2203,7 +2200,6 @@ class stock_move(osv.osv):
if move.move_dest_id and move.move_dest_id.state == 'waiting':
self.write(cr, uid, [move.move_dest_id.id], {'state': 'assigned'})
if context.get('call_unlink',False) and move.move_dest_id.picking_id:
- wf_service = netsvc.LocalService("workflow")
wf_service.trg_write(uid, 'stock.picking', move.move_dest_id.picking_id.id, cr)
self.write(cr, uid, ids, {'state': 'cancel', 'move_dest_id': False})
if not context.get('call_unlink',False):
@@ -2211,7 +2207,6 @@ class stock_move(osv.osv):
if all(move.state == 'cancel' for move in pick.move_lines):
self.pool.get('stock.picking').write(cr, uid, [pick.id], {'state': 'cancel'})
- wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_trigger(uid, 'stock.move', id, cr)
return True
@@ -2633,7 +2628,6 @@ class stock_move(osv.osv):
product_obj = self.pool.get('product.product')
currency_obj = self.pool.get('res.currency')
uom_obj = self.pool.get('product.uom')
- wf_service = netsvc.LocalService("workflow")
if context is None:
context = {}
@@ -2734,7 +2728,7 @@ class stock_move(osv.osv):
res = cr.fetchall()
if len(res) == len(move.picking_id.move_lines):
picking_obj.action_move(cr, uid, [move.picking_id.id])
- wf_service.trg_validate(uid, 'stock.picking', move.picking_id.id, 'button_done', cr)
+ picking_obj.signal_button_done(cr, uid, [move.picking_id.id])
return [move.id for move in complete]
diff --git a/addons/stock/wizard/stock_return_picking.py b/addons/stock/wizard/stock_return_picking.py
index 7c6f0655e7a..bc149f86176 100644
--- a/addons/stock/wizard/stock_return_picking.py
+++ b/addons/stock/wizard/stock_return_picking.py
@@ -151,7 +151,6 @@ class stock_return_picking(osv.osv_memory):
data_obj = self.pool.get('stock.return.picking.memory')
act_obj = self.pool.get('ir.actions.act_window')
model_obj = self.pool.get('ir.model.data')
- wf_service = netsvc.LocalService("workflow")
pick = pick_obj.browse(cr, uid, record_id, context=context)
data = self.read(cr, uid, ids[0], context=context)
date_cur = time.strftime('%Y-%m-%d %H:%M:%S')
@@ -206,7 +205,7 @@ class stock_return_picking(osv.osv_memory):
if set_invoice_state_to_none:
pick_obj.write(cr, uid, [pick.id], {'invoice_state':'none'}, context=context)
- wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
+ pick_obj.signal_button_confirm(cr, uid, [new_picking])
pick_obj.force_assign(cr, uid, [new_picking], context)
# Update view id in context, lp:702939
model_list = {
From 45ba35783f556c851e1a6791ea79f309ff43d98c Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Mon, 28 Jan 2013 17:34:03 +0100
Subject: [PATCH 058/253] [IMP] mrp_operations: use the new signal_xxx methods
instead of trg_validate.
bzr revid: vmt@openerp.com-20130128163403-dmbb0a1y0ejbt66t
---
addons/mrp_operations/mrp_operations.py | 46 +++++++++----------
.../test/workcenter_operations.yml | 32 ++++---------
2 files changed, 30 insertions(+), 48 deletions(-)
diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py
index 1ce60946f6c..a60b348559c 100644
--- a/addons/mrp_operations/mrp_operations.py
+++ b/addons/mrp_operations/mrp_operations.py
@@ -118,16 +118,15 @@ class mrp_production_workcenter_line(osv.osv):
@param action: Action to perform.
@return: Nothing
"""
- wf_service = netsvc.LocalService("workflow")
prod_obj_pool = self.pool.get('mrp.production')
oper_obj = self.browse(cr, uid, ids)[0]
prod_obj = oper_obj.production_id
if action == 'start':
if prod_obj.state =='confirmed':
prod_obj_pool.force_production(cr, uid, [prod_obj.id])
- wf_service.trg_validate(uid, 'mrp.production', prod_obj.id, 'button_produce', cr)
+ prod_obj_pool.signal_button_produce(cr, uid, [prod_obj.id])
elif prod_obj.state =='ready':
- wf_service.trg_validate(uid, 'mrp.production', prod_obj.id, 'button_produce', cr)
+ prod_obj_pool.signal_button_produce(cr, uid, [prod_obj.id])
elif prod_obj.state =='in_production':
return
else:
@@ -143,7 +142,7 @@ class mrp_production_workcenter_line(osv.osv):
for production in prod_obj_pool.browse(cr, uid, [prod_obj.id], context= None):
if production.move_lines or production.move_created_ids:
prod_obj_pool.action_produce(cr,uid, production.id, production.product_qty, 'consume_produce', context = None)
- wf_service.trg_validate(uid, 'mrp.production', oper_obj.production_id.id, 'button_produce_done', cr)
+ prod_obj_pool.signal_button_produce_done(cr, uid, [oper_obj.production_id.id])
return
def write(self, cr, uid, ids, vals, context=None, update=True):
@@ -228,23 +227,21 @@ class mrp_production(osv.osv):
@return: Super method
"""
obj = self.browse(cr, uid, ids)[0]
- wf_service = netsvc.LocalService("workflow")
+ workcenter_pool = self.pool.get('mrp.production.workcenter.line')
for workcenter_line in obj.workcenter_lines:
if workcenter_line.state == 'draft':
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_start_working', cr)
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_done', cr)
+ workcenter_pool.signal_button_start_working(cr, uid, [workcenter_line.id])
+ workcenter_pool.signal_button_done(cr, uid, [workcenter_line.id])
return super(mrp_production,self).action_production_end(cr, uid, ids)
def action_in_production(self, cr, uid, ids):
""" Changes state to In Production and writes starting date.
@return: True
"""
- obj = self.browse(cr, uid, ids)[0]
workcenter_pool = self.pool.get('mrp.production.workcenter.line')
- wf_service = netsvc.LocalService("workflow")
for prod in self.browse(cr, uid, ids):
if prod.workcenter_lines:
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', prod.workcenter_lines[0].id, 'button_start_working', cr)
+ workcenter_pool.signal_button_start_working(cr, uid, [prod.workcenter_lines[0].id])
return super(mrp_production,self).action_in_production(cr, uid, ids)
def action_cancel(self, cr, uid, ids, context=None):
@@ -252,9 +249,8 @@ class mrp_production(osv.osv):
@return: Super method
"""
obj = self.browse(cr, uid, ids,context=context)[0]
- wf_service = netsvc.LocalService("workflow")
for workcenter_line in obj.workcenter_lines:
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_cancel', cr)
+ workcenter_pool.signal_button_cancel(cr, uid, [workcenter_line.id])
return super(mrp_production,self).action_cancel(cr,uid,ids,context=context)
def _compute_planned_workcenter(self, cr, uid, ids, context=None, mini=False):
@@ -503,35 +499,35 @@ class mrp_operations_operation(osv.osv):
return super(mrp_operations_operation, self).write(cr, uid, ids, vals, context=context)
def create(self, cr, uid, vals, context=None):
+ workcenter_pool = self.pool.get('mrp.production.workcenter.line')
wf_service = netsvc.LocalService('workflow')
code_ids=self.pool.get('mrp_operations.operation.code').search(cr,uid,[('id','=',vals['code_id'])])
code=self.pool.get('mrp_operations.operation.code').browse(cr, uid, code_ids, context=context)[0]
- wc_op_id=self.pool.get('mrp.production.workcenter.line').search(cr,uid,[('workcenter_id','=',vals['workcenter_id']),('production_id','=',vals['production_id'])])
+ wc_op_id=workcenter_pool.search(cr,uid,[('workcenter_id','=',vals['workcenter_id']),('production_id','=',vals['production_id'])])
if code.start_stop in ('start','done','pause','cancel','resume'):
if not wc_op_id:
production_obj=self.pool.get('mrp.production').browse(cr, uid, vals['production_id'], context=context)
- wc_op_id.append(self.pool.get('mrp.production.workcenter.line').create(cr,uid,{'production_id':vals['production_id'],'name':production_obj.product_id.name,'workcenter_id':vals['workcenter_id']}))
+ wc_op_id.append(workcenter_pool.create(cr,uid,{'production_id':vals['production_id'],'name':production_obj.product_id.name,'workcenter_id':vals['workcenter_id']}))
if code.start_stop=='start':
- self.pool.get('mrp.production.workcenter.line').action_start_working(cr,uid,wc_op_id)
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_start_working', cr)
-
+ workcenter_pool.action_start_working(cr,uid,wc_op_id)
+ workcenter_pool.signal_button_start_working(cr, uid, [wc_op_id[0]])
if code.start_stop=='done':
- self.pool.get('mrp.production.workcenter.line').action_done(cr,uid,wc_op_id)
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_done', cr)
+ workcenter_pool.action_done(cr,uid,wc_op_id)
+ workcenter_pool.signal_button_done(cr, uid, [wc_op_id[0]])
self.pool.get('mrp.production').write(cr,uid,vals['production_id'],{'date_finished':datetime.now().strftime('%Y-%m-%d %H:%M:%S')})
if code.start_stop=='pause':
- self.pool.get('mrp.production.workcenter.line').action_pause(cr,uid,wc_op_id)
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_pause', cr)
+ workcenter_pool.action_pause(cr,uid,wc_op_id)
+ workcenter_pool.signal_button_pause(cr, uid, [wc_op_id[0]])
if code.start_stop=='resume':
- self.pool.get('mrp.production.workcenter.line').action_resume(cr,uid,wc_op_id)
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_resume', cr)
+ workcenter_pool.action_resume(cr,uid,wc_op_id)
+ workcenter_pool.signal_button_resume(cr, uid, [wc_op_id[0]])
if code.start_stop=='cancel':
- self.pool.get('mrp.production.workcenter.line').action_cancel(cr,uid,wc_op_id)
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_cancel', cr)
+ workcenter_pool.action_cancel(cr,uid,wc_op_id)
+ workcenter_pool.signal_button_cancel(cr, uid, [wc_op_id[0]])
if not self.check_operation(cr, uid, vals):
return
diff --git a/addons/mrp_operations/test/workcenter_operations.yml b/addons/mrp_operations/test/workcenter_operations.yml
index c1449657967..4754bb463ff 100644
--- a/addons/mrp_operations/test/workcenter_operations.yml
+++ b/addons/mrp_operations/test/workcenter_operations.yml
@@ -39,62 +39,48 @@
Production start on first work center, so I start work operation on first work center.
-
!python {model: mrp.production}: |
- import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_start_working', cr)
+ self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [order.workcenter_lines[0].id])
-
Now I pause first work operation due to technical fault of work center.
-
!python {model: mrp.production}: |
- import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_pause', cr)
+ self.pool.get('mrp.production.workcenter.line').signal_button_pause(cr, uid, [order.workcenter_lines[0].id])
-
I resume first work operation.
-
!python {model: mrp.production}: |
- import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_resume', cr)
+ self.pool.get('mrp.production.workcenter.line').signal_button_resume(cr, uid, [order.workcenter_lines[0].id])
-
I cancel first work operation.
-
!python {model: mrp.production}: |
- import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_cancel', cr)
+ self.pool.get('mrp.production.workcenter.line').signal_button_cancel(cr, uid, [order.workcenter_lines[0].id])
-
I reset first work operation and start after resolving techninal fault of work center.
-
!python {model: mrp.production}: |
- import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_draft', cr)
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_start_working', cr)
+ self.pool.get('mrp.production.workcenter.line').signal_button_draft(cr, uid, [order.workcenter_lines[0].id])
+ self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [order.workcenter_lines[0].id])
-
I close first work operation as this work center completed its process.
-
!python {model: mrp.production}: |
- import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_done', cr)
+ self.pool.get('mrp.production.workcenter.line').signal_button_done(cr, uid, [order.workcenter_lines[0].id])
-
Now I close other operations one by one which are in start state.
-
!python {model: mrp.production}: |
- import netsvc
order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context)
- wf_service = netsvc.LocalService("workflow")
for work_line in order.workcenter_lines[1:]:
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', work_line.id, 'button_start_working', cr)
- wf_service.trg_validate(uid, 'mrp.production.workcenter.line', work_line.id, 'button_done', cr)
+ self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [work_line.id])
+ self.pool.get('mrp.production.workcenter.line').signal_button_done(cr, uid, [work_line.id])
-
I check that the production order is now done.
From 271aafd8de871e3dc196c48b8cbaccd283a69961 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Tue, 29 Jan 2013 13:27:10 +0100
Subject: [PATCH 059/253] [IMP] added create_workflow,
delete_workflow,redirect_workflow as ORM methods.
bzr revid: vmt@openerp.com-20130129122710-ypvk9x7ndq84mq8r
---
openerp/osv/orm.py | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index d3c11118116..64b44d9e743 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -3928,6 +3928,24 @@ class BaseModel(object):
result[res_id] = wf_service.trg_validate(uid, self._name, res_id, signal, cr)
return result
+ def create_workflow(self, cr, uid, ids):
+ wf_service = netsvc.LocalService("workflow")
+ for res_id in ids:
+ wf_service.trg_create(uid, self._name, res_id, cr)
+ return True
+
+ def delete_workflow(self, cr, uid, ids):
+ wf_service = netsvc.LocalService("workflow")
+ for res_id in ids:
+ wf_service.trg_create(uid, self._name, res_id, cr)
+ return True
+
+ def redirect_workflow(self, cr, uid, old_new_ids):
+ wf_service = netsvc.LocalService("workflow")
+ for old_id, new_id in old_new_ids:
+ wf_service.trg_redirect(uid, self._name, old_id, new_id, cr)
+ return True
+
def unlink(self, cr, uid, ids, context=None):
"""
Delete records with given ids
From 830acb128d8451bebb48c7ab14367d7488a12d57 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Tue, 29 Jan 2013 13:28:08 +0100
Subject: [PATCH 060/253] [IMP] purchase: use the new ORM methods
create_workflow, delete_workflow, redirect_workflow.
bzr revid: vmt@openerp.com-20130129122808-etp3ytphzn2cxnr1
---
addons/purchase/purchase.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index bf3686d5a34..a45da4a2d61 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -487,8 +487,8 @@ class purchase_order(osv.osv):
wf_service = netsvc.LocalService("workflow")
for p_id in ids:
# Deleting the existing instance of workflow for PO
- wf_service.trg_delete(uid, 'purchase.order', p_id, cr)
- wf_service.trg_create(uid, 'purchase.order', p_id, cr)
+ self.delete_workflow(cr, uid, [p_id]) # TODO is it necessary to interleave the calls?
+ self.create_workflow(cr, uid, [p_id])
return True
def action_invoice_create(self, cr, uid, ids, context=None):
@@ -797,7 +797,7 @@ class purchase_order(osv.osv):
# make triggers pointing to the old orders point to the new order
for old_id in old_ids:
- wf_service.trg_redirect(uid, 'purchase.order', old_id, neworder_id, cr)
+ self.redirect_workflow(cr, uid, [(old_id, neworder_id)])
self.signal_purchase_cancel(cr, uid, [old_id]) # TODO Is it necessary to interleave the calls?
return orders_info
From 02a2c8574d101354899ca139221327a36e54a4a1 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Wed, 30 Jan 2013 15:29:03 +0530
Subject: [PATCH 061/253] [IMP] hr_holidays:use the new ORM methods
create_workflow, delete_workflow, redirect_workflow.
bzr revid: cha@tinyerp.com-20130130095903-6exhtm6uruk0ek30
---
addons/hr_holidays/hr_holidays.py | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py
index 234897809e1..ce30951f7a9 100644
--- a/addons/hr_holidays/hr_holidays.py
+++ b/addons/hr_holidays/hr_holidays.py
@@ -304,10 +304,9 @@ class hr_holidays(osv.osv):
'manager_id': False,
'manager_id2': False,
})
- wf_service = netsvc.LocalService("workflow")
for id in ids:
- wf_service.trg_delete(uid, 'hr.holidays', id, cr)
- wf_service.trg_create(uid, 'hr.holidays', id, cr)
+ self.delete_workflow(cr, uid, [id])
+ self.create_workflow(cr, uid, [id])
to_unlink = []
for record in self.browse(cr, uid, ids, context=context):
for record2 in record.linked_request_ids:
From 3d0b141406b397fa989c56af0946f11595951ff5 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Wed, 30 Jan 2013 17:30:32 +0100
Subject: [PATCH 062/253] [IMP] remove default 'None' value (doesn't make sense
anymore)
bzr revid: abo@openerp.com-20130130163032-jsfm0fa5r54wmvpv
---
openerp/addons/base/res/res_config.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index 33615333447..0bbdf5b5e84 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -590,7 +590,7 @@ class res_config_settings(osv.osv_memory):
name = act_window.read(cr, uid, action_ids[0], ['name'], context=context)['name']
return [(record.id, name) for record in self.browse(cr, uid , ids, context=context)]
- def get_option_path(self, cr, uid, menu_xml_id=None, context=None):
+ def get_option_path(self, cr, uid, menu_xml_id, context=None):
"""
Fetch the path to a specified configuration view.
@@ -606,7 +606,7 @@ class res_config_settings(osv.osv_memory):
return ir_ui_menu.complete_name
- def get_option_name(self, cr, uid, full_field_name=None, context=None):
+ def get_option_name(self, cr, uid, full_field_name, context=None):
"""
Fetch the human readable name of a specified configuration option.
@@ -657,7 +657,7 @@ def get_warning_config(cr, msg, context=None):
elif ref_type == 'field':
values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context)
- # 4/ substitute and return the result
+ # 3/ substitute and return the result
return exceptions.Warning(msg % values)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From 2459399cac7426cf57fe9c31fbae43f3636bb221 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Wed, 30 Jan 2013 17:56:42 +0100
Subject: [PATCH 063/253] [IMP] make get_config_warning() a method of
res.config.settings, avoiding heavy import of res_config or long path calls
like 'openerp.addons.base.res.res_config.get_config_warning()' just use
self.pool.get('res.config.settings').get_config_warning() instead
bzr revid: abo@openerp.com-20130130165642-pq5sbdluesxu7p6d
---
openerp/addons/base/res/res_config.py | 66 +++++++++++++--------------
1 file changed, 33 insertions(+), 33 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index 0bbdf5b5e84..32e24238d52 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -620,44 +620,44 @@ class res_config_settings(osv.osv_memory):
return self.pool.get(model_name).fields_get(cr, uid, allfields=[field_name], context=context)[field_name]['string']
-def get_warning_config(cr, msg, context=None):
- """
- Helper: return a Warning exception with the given message where the
- %(field:)s and/or %(menu:)s are replaced by the human readable field's name
- and/or menuitem's full path.
+ def get_config_warning(self, cr, msg, context=None):
+ """
+ Helper: return a Warning exception with the given message where the
+ %(field:)s and/or %(menu:)s are replaced by the human readable field's name
+ and/or menuitem's full path.
- Usage:
- ------
- Just include in your error message %(field:model_name.field_name)s to
- obtain the human readable field's name, and/or
- %(menu:module_name.menuitem_xml_id)s to obtain the menuitem's full path.
+ Usage:
+ ------
+ Just include in your error message %(field:model_name.field_name)s to
+ obtain the human readable field's name, and/or
+ %(menu:module_name.menuitem_xml_id)s to obtain the menuitem's full path.
- Example of use:
- ---------------
- from openerp.addons.base.res.res_config import get_warning_config
- raise get_warning_config(cr, _("Error: this action is prohibited. You should check the field %(field:sale.config.settings.fetchmail_lead)s in %(menu:base.menu_sale_config)s."), context=context)
- will return an exception containing the following message:
- Error: this action is prohibited. You should check the field Create leads from incoming mails in Settings/Configuration/Sales.
- """
+ Example of use:
+ ---------------
+ from openerp.addons.base.res.res_config import get_warning_config
+ raise get_warning_config(cr, _("Error: this action is prohibited. You should check the field %(field:sale.config.settings.fetchmail_lead)s in %(menu:base.menu_sale_config)s."), context=context)
+ will return an exception containing the following message:
+ Error: this action is prohibited. You should check the field Create leads from incoming mails in Settings/Configuration/Sales.
+ """
- res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings')
- regex_path = r'%\(((?:menu|field):[a-z_\.]*)\)s'
+ res_config_obj = pooler.get_pool(cr.dbname).get('res.config.settings')
+ regex_path = r'%\(((?:menu|field):[a-z_\.]*)\)s'
- # Process the message
- # 1/ find the path and/or field references, put them in a list
- references = re.findall(regex_path, msg, flags=re.I)
+ # Process the message
+ # 1/ find the path and/or field references, put them in a list
+ references = re.findall(regex_path, msg, flags=re.I)
- # 2/ fetch the path and/or field replacement values
- # (full path and human readable field's name)
- values = {}
- for item in references:
- ref_type, ref = item.split(':')
- if ref_type == 'menu':
- values[item] = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context)
- elif ref_type == 'field':
- values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context)
+ # 2/ fetch the path and/or field replacement values
+ # (full path and human readable field's name)
+ values = {}
+ for item in references:
+ ref_type, ref = item.split(':')
+ if ref_type == 'menu':
+ values[item] = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context)
+ elif ref_type == 'field':
+ values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context)
- # 3/ substitute and return the result
- return exceptions.Warning(msg % values)
+ # 3/ substitute and return the result
+ return exceptions.Warning(msg % values)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From 19368fb65c24bf21852e50eeae5fb0767f1c1fce Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 10:16:08 +0530
Subject: [PATCH 064/253] [IMP] sale: use the new signal_xxx methods instead of
trg_validate.
bzr revid: cha@tinyerp.com-20130131044608-h5dj2xfqyo8ewm6k
---
addons/sale/sale.py | 19 ++++++-------------
addons/sale/wizard/sale_line_invoice.py | 3 +--
addons/sale/wizard/sale_make_invoice.py | 6 ++----
3 files changed, 9 insertions(+), 19 deletions(-)
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 66653c61849..93556a3e7d5 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -418,8 +418,7 @@ class sale_order(osv.osv):
This function prints the sales order and mark it as sent, so that we can see more easily the next step of the workflow
'''
assert len(ids) == 1, 'This option should only be used for a single id at a time'
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'sale.order', ids[0], 'quotation_sent', cr)
+ self.signal_quotation_sent(cr, uid, [ids[0]])
datas = {
'model': 'sale.order',
'ids': ids,
@@ -432,12 +431,10 @@ class sale_order(osv.osv):
view of one of the newly created invoices
"""
mod_obj = self.pool.get('ir.model.data')
- wf_service = netsvc.LocalService("workflow")
-
+
# create invoices through the sales orders' workflow
inv_ids0 = set(inv.id for sale in self.browse(cr, uid, ids, context) for inv in sale.invoice_ids)
- for id in ids:
- wf_service.trg_validate(uid, 'sale.order', id, 'manual_invoice', cr)
+ self.signal_manual_invoice(cr, uid, ids)
inv_ids1 = set(inv.id for sale in self.browse(cr, uid, ids, context) for inv in sale.invoice_ids)
# determine newly created invoices
new_inv_ids = list(inv_ids1 - inv_ids0)
@@ -555,7 +552,6 @@ class sale_order(osv.osv):
return True
def action_cancel(self, cr, uid, ids, context=None):
- wf_service = netsvc.LocalService("workflow")
if context is None:
context = {}
sale_order_line_obj = self.pool.get('sale.order.line')
@@ -566,8 +562,7 @@ class sale_order(osv.osv):
_('Cannot cancel this sales order!'),
_('First cancel all invoices attached to this sales order.'))
for r in self.read(cr, uid, ids, ['invoice_ids']):
- for inv in r['invoice_ids']:
- wf_service.trg_validate(uid, 'account.invoice', inv, 'invoice_cancel', cr)
+ self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, r['invoice_ids'])
sale_order_line_obj.write(cr, uid, [l.id for l in sale.order_line],
{'state': 'cancel'})
self.write(cr, uid, ids, {'state': 'cancel'})
@@ -575,8 +570,7 @@ class sale_order(osv.osv):
def action_button_confirm(self, cr, uid, ids, context=None):
assert len(ids) == 1, 'This option should only be used for a single id at a time.'
- wf_service = netsvc.LocalService('workflow')
- wf_service.trg_validate(uid, 'sale.order', ids[0], 'order_confirm', cr)
+ self.signal_order_confirm(cr, uid, ids)
# redisplay the record as a sales order
view_ref = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'sale', 'view_order_form')
@@ -992,8 +986,7 @@ class mail_compose_message(osv.Model):
context = context or {}
if context.get('default_model') == 'sale.order' and context.get('default_res_id') and context.get('mark_so_as_sent'):
context = dict(context, mail_post_autofollow=True)
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'sale.order', context['default_res_id'], 'quotation_sent', cr)
+ self.pool.get('sale.order').signal_quotation_sent(cr, uid, context['default_res_id'])
return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale/wizard/sale_line_invoice.py b/addons/sale/wizard/sale_line_invoice.py
index 4aa58088129..4b18c9a4b39 100644
--- a/addons/sale/wizard/sale_line_invoice.py
+++ b/addons/sale/wizard/sale_line_invoice.py
@@ -80,7 +80,6 @@ class sale_order_line_make_invoice(osv.osv_memory):
sales_order_line_obj = self.pool.get('sale.order.line')
sales_order_obj = self.pool.get('sale.order')
- wf_service = netsvc.LocalService('workflow')
for line in sales_order_line_obj.browse(cr, uid, context.get('active_ids', []), context=context):
if (not line.invoiced) and (line.state not in ('draft', 'cancel')):
if not line.order_id.id in invoices:
@@ -103,7 +102,7 @@ class sale_order_line_make_invoice(osv.osv_memory):
flag = False
break
if flag:
- wf_service.trg_validate(uid, 'sale.order', line.order_id.id, 'manual_invoice', cr)
+ sales_order_obj.signal_manual_invoice(cr, uid, line.order_id.id)
sales_order_obj.write(cr, uid, [line.order_id.id], {'state': 'progress'})
if not invoices:
diff --git a/addons/sale/wizard/sale_make_invoice.py b/addons/sale/wizard/sale_make_invoice.py
index d60adbb7b25..608ae0493df 100644
--- a/addons/sale/wizard/sale_make_invoice.py
+++ b/addons/sale/wizard/sale_make_invoice.py
@@ -52,10 +52,8 @@ class sale_make_invoice(osv.osv_memory):
context = {}
data = self.read(cr, uid, ids)[0]
order_obj.action_invoice_create(cr, uid, context.get(('active_ids'), []), data['grouped'], date_inv = data['invoice_date'])
- wf_service = netsvc.LocalService("workflow")
- for id in context.get(('active_ids'), []):
- wf_service.trg_validate(uid, 'sale.order', id, 'manual_invoice', cr)
-
+ order_obj.signal_manual_invoice(cr, uid, context.get(('active_ids'), []))
+
for o in order_obj.browse(cr, uid, context.get(('active_ids'), []), context=context):
for i in o.invoice_ids:
newinv.append(i.id)
From 4fa593ade57fd184f70829d7b70c46ed80ae41be Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 10:42:29 +0530
Subject: [PATCH 065/253] [IMP] sale: for yml use the new signal_xxx methods
instead of trg_validate.
bzr revid: cha@tinyerp.com-20130131051229-r530h3eawm5bm62s
---
addons/sale/test/cancel_order.yml | 5 +----
addons/sale/test/manual_order_policy.yml | 5 +----
2 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/addons/sale/test/cancel_order.yml b/addons/sale/test/cancel_order.yml
index cde3a5b34f2..d9d76f19935 100644
--- a/addons/sale/test/cancel_order.yml
+++ b/addons/sale/test/cancel_order.yml
@@ -51,11 +51,8 @@
I cancel all the invoices.
-
!python {model: sale.order}: |
- import netsvc
invoice_ids = self.browse(cr, uid, ref("sale_order_8")).invoice_ids
- wf_service = netsvc.LocalService("workflow")
- for invoice in invoice_ids:
- wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_cancel', cr)
+ self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, invoice_ids)
-
I check order status in "Invoice Exception" and related invoice is in cancel state.
-
diff --git a/addons/sale/test/manual_order_policy.yml b/addons/sale/test/manual_order_policy.yml
index 5fe29950176..905f04b01f5 100644
--- a/addons/sale/test/manual_order_policy.yml
+++ b/addons/sale/test/manual_order_policy.yml
@@ -41,11 +41,8 @@
I open the Invoice.
-
!python {model: sale.order}: |
- import netsvc
- wf_service = netsvc.LocalService("workflow")
so = self.browse(cr, uid, ref("sale_order_2"))
- for invoice in so.invoice_ids:
- wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_open', cr)
+ self.pool.get('account.invoice').signal_invoice_open(cr, uid, so.invoice_ids)
-
I pay the invoice.
-
From 2ac6d7876f813ece0e13d632b125119f96e035b7 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 11:13:37 +0530
Subject: [PATCH 066/253] [IMP] sale_stock: use the new signal_xxx methods
instead of trg_validate.
bzr revid: cha@tinyerp.com-20130131054337-iph87376e9bhoqpy
---
addons/sale_stock/sale_stock.py | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py
index 1b5ddefbe74..6f891a047a1 100644
--- a/addons/sale_stock/sale_stock.py
+++ b/addons/sale_stock/sale_stock.py
@@ -194,7 +194,6 @@ class sale_order(osv.osv):
return res
def action_cancel(self, cr, uid, ids, context=None):
- wf_service = netsvc.LocalService("workflow")
if context is None:
context = {}
sale_order_line_obj = self.pool.get('sale.order.line')
@@ -209,11 +208,9 @@ class sale_order(osv.osv):
for mov in pick.move_lines:
proc_ids = proc_obj.search(cr, uid, [('move_id', '=', mov.id)])
if proc_ids:
- for proc in proc_ids:
- wf_service.trg_validate(uid, 'procurement.order', proc, 'button_check', cr)
+ self.pool.get('procurement.order').signal_button_check(cr, uid, proc_ids)
for r in self.read(cr, uid, ids, ['picking_ids']):
- for pick in r['picking_ids']:
- wf_service.trg_validate(uid, 'stock.picking', pick, 'button_cancel', cr)
+ self.pool.get('stock.picking').signal_button_cancel(cr, uid, r['picking_ids'])
return super(sale_order, self).action_cancel(cr, uid, ids, context=context)
def action_wait(self, cr, uid, ids, context=None):
@@ -396,11 +393,9 @@ class sale_order(osv.osv):
line.write({'procurement_id': proc_id})
self.ship_recreate(cr, uid, order, line, move_id, proc_id)
- wf_service = netsvc.LocalService("workflow")
if picking_id:
- wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
- for proc_id in proc_ids:
- wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
+ self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id])
+ self.pool.get('procurement.order').signal_button_confirm(cr, uid, proc_ids)
val = {}
if order.state == 'shipping_except':
From 3dfaff6bc3cbe4ad4f479ec6dfb549389126a9cd Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 11:45:33 +0530
Subject: [PATCH 067/253] [IMP] sale_stock: for yml use the new signal_xxx
methods instead of trg_validate.
bzr revid: cha@tinyerp.com-20130131061533-ivbzasitl9a2mi04
---
addons/sale_stock/sale_stock.py | 1 -
addons/sale_stock/test/cancel_order_sale_stock.yml | 8 ++------
addons/sale_stock/test/picking_order_policy.yml | 4 +---
3 files changed, 3 insertions(+), 10 deletions(-)
diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py
index 6f891a047a1..f63282b7a16 100644
--- a/addons/sale_stock/sale_stock.py
+++ b/addons/sale_stock/sale_stock.py
@@ -23,7 +23,6 @@ from datetime import datetime, timedelta
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, float_compare
from dateutil.relativedelta import relativedelta
from openerp.osv import fields, osv
-from openerp import netsvc
from openerp.tools.translate import _
class sale_shop(osv.osv):
diff --git a/addons/sale_stock/test/cancel_order_sale_stock.yml b/addons/sale_stock/test/cancel_order_sale_stock.yml
index 6805a90ca80..9081cac9fa3 100644
--- a/addons/sale_stock/test/cancel_order_sale_stock.yml
+++ b/addons/sale_stock/test/cancel_order_sale_stock.yml
@@ -17,11 +17,9 @@
Now I cancel latest shipment.
-
!python {model: stock.picking}: |
- import netsvc
delivery_orders = self.search(cr, uid, [('sale_id','=',ref("sale.sale_order_8"))])
last_delivery_order_id = delivery_orders[0]
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'stock.picking', last_delivery_order_id, 'button_cancel', cr)
+ self.pool.get('stock.picking').signal_button_cancel(cr, uid, [last_delivery_order_id])
-
I run the scheduler.
-
@@ -50,11 +48,9 @@
To cancel the sale order from Invoice Exception, I have to cancel the invoice of sale order.
-
!python {model: sale.order}: |
- import netsvc
invoice_ids = self.browse(cr, uid, ref("sale.sale_order_8")).invoice_ids
- wf_service = netsvc.LocalService("workflow")
first_invoice_id = invoice_ids[0]
- wf_service.trg_validate(uid, 'account.invoice', first_invoice_id.id, 'invoice_cancel', cr)
+ self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, [first_invoice_id.id])
-
I check order status in "Invoice Exception" and related invoice is in cancel state.
-
diff --git a/addons/sale_stock/test/picking_order_policy.yml b/addons/sale_stock/test/picking_order_policy.yml
index 800c131e288..a28326598ac 100644
--- a/addons/sale_stock/test/picking_order_policy.yml
+++ b/addons/sale_stock/test/picking_order_policy.yml
@@ -132,11 +132,9 @@
I open the Invoice.
-
!python {model: sale.order}: |
- import netsvc
- wf_service = netsvc.LocalService("workflow")
so = self.browse(cr, uid, ref("sale.sale_order_6"))
for invoice in so.invoice_ids:
- wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_open', cr)
+ self.pool.get('account.invoice').signal_invoice_open(cr, uid, [invoice.id])
-
I pay the invoice
-
From ba02e50efacdc621130aff19e02c6d0e69c07a7d Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 12:03:33 +0530
Subject: [PATCH 068/253] [IMP] hr_payroll: use the new signal_xxx methods
instead of trg_validate.
bzr revid: cha@tinyerp.com-20130131063333-jhcpvbingaqxroiq
---
addons/hr_payroll/hr_payroll.py | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py
index b711ed1a9c4..06af3054b68 100644
--- a/addons/hr_payroll/hr_payroll.py
+++ b/addons/hr_payroll/hr_payroll.py
@@ -26,7 +26,6 @@ from datetime import datetime
from datetime import timedelta
from dateutil import relativedelta
-from openerp import netsvc
from openerp.osv import fields, osv
from openerp import tools
from openerp.tools.translate import _
@@ -331,13 +330,12 @@ class hr_payslip(osv.osv):
def refund_sheet(self, cr, uid, ids, context=None):
mod_obj = self.pool.get('ir.model.data')
- wf_service = netsvc.LocalService("workflow")
for payslip in self.browse(cr, uid, ids, context=context):
id_copy = self.copy(cr, uid, payslip.id, {'credit_note': True, 'name': _('Refund: ')+payslip.name}, context=context)
self.compute_sheet(cr, uid, [id_copy], context=context)
- wf_service.trg_validate(uid, 'hr.payslip', id_copy, 'hr_verify_sheet', cr)
- wf_service.trg_validate(uid, 'hr.payslip', id_copy, 'process_sheet', cr)
-
+ self.signal_hr_verify_sheet(cr, uid, [id_copy])
+ self.signal_process_sheet(cr, uid, [id_copy])
+
form_id = mod_obj.get_object_reference(cr, uid, 'hr_payroll', 'view_hr_payslip_form')
form_res = form_id and form_id[1] or False
tree_id = mod_obj.get_object_reference(cr, uid, 'hr_payroll', 'view_hr_payslip_tree')
From da43da8f3b54be5c4e5392f567d51057d2b250c9 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 14:54:40 +0530
Subject: [PATCH 069/253] [IMP] hr_timesheet_sheet: use the new signal_xxx
methods instead of trg_validate.
bzr revid: cha@tinyerp.com-20130131092440-gxhz5y5rxkfuy9k3
---
addons/hr_timesheet_sheet/hr_timesheet_sheet.py | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
index c473670b014..d9b76dcfb89 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
@@ -93,8 +93,7 @@ class hr_timesheet_sheet(osv.osv):
self.check_employee_attendance_state(cr, uid, sheet.id, context=context)
di = sheet.user_id.company_id.timesheet_max_difference
if (abs(sheet.total_difference) < di) or not di:
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'hr_timesheet_sheet.sheet', sheet.id, 'confirm', cr)
+ self.signal_confirm(cr, uid, [sheet.id])
else:
raise osv.except_osv(_('Warning!'), _('Please verify that the total difference of the sheet is lower than %.2f.') %(di,))
return True
@@ -192,9 +191,8 @@ class hr_timesheet_sheet(osv.osv):
def action_set_to_draft(self, cr, uid, ids, *args):
self.write(cr, uid, ids, {'state': 'draft'})
- wf_service = netsvc.LocalService('workflow')
for id in ids:
- wf_service.trg_create(uid, self._name, id, cr)
+ self.create_workflow(cr, uid, [id])
return True
def name_get(self, cr, uid, ids, context=None):
From 4b7ad7da5633f31b1b06237a8e1a4f5985f12555 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 14:59:50 +0530
Subject: [PATCH 070/253] [IMP] removed unused import
bzr revid: cha@tinyerp.com-20130131092950-mm2xjuv2j2t0gk7v
---
addons/hr_timesheet_sheet/hr_timesheet_sheet.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
index d9b76dcfb89..5948c02bc5e 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
@@ -25,7 +25,6 @@ from dateutil.relativedelta import relativedelta
from openerp.osv import fields, osv
from openerp.tools.translate import _
-from openerp import netsvc
class hr_timesheet_sheet(osv.osv):
_name = "hr_timesheet_sheet.sheet"
From d43fa7273659c2600c74d6b8b6ac4a6c62c9f2f2 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 15:09:01 +0530
Subject: [PATCH 071/253] [FIX] l10n_in_hr_payroll: removed unused imports.
bzr revid: cha@tinyerp.com-20130131093901-423rr2g3h5ke0vpb
---
addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py | 2 --
1 file changed, 2 deletions(-)
diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py
index da98bbe681a..6a7638d919a 100644
--- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py
+++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py
@@ -26,7 +26,6 @@ from calendar import isleap
from openerp.tools.translate import _
from openerp.osv import fields, osv
-from openerp import netsvc
import openerp.addons.decimal_precision as dp
DATETIME_FORMAT = "%Y-%m-%d"
@@ -179,7 +178,6 @@ class hr_payslip_run(osv.osv):
return res
def create_advice(self, cr, uid, ids, context=None):
- wf_service = netsvc.LocalService("workflow")
payslip_pool = self.pool.get('hr.payslip')
payslip_line_pool = self.pool.get('hr.payslip.line')
advice_pool = self.pool.get('hr.payroll.advice')
From 4ce0098aa72d05fbfa332c61b694228eb5bf95fd Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 15:17:28 +0530
Subject: [PATCH 072/253] [FIX] purchase: removed unused imports.
bzr revid: cha@tinyerp.com-20130131094728-944bmu3sa1dmbhzy
---
addons/purchase/purchase.py | 3 ---
1 file changed, 3 deletions(-)
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index a45da4a2d61..e76bf4a0358 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -25,7 +25,6 @@ from dateutil.relativedelta import relativedelta
from operator import attrgetter
from openerp.osv import fields, osv
-from openerp import netsvc
from openerp import pooler
from openerp.tools.translate import _
import openerp.addons.decimal_precision as dp
@@ -484,7 +483,6 @@ class purchase_order(osv.osv):
if not len(ids):
return False
self.write(cr, uid, ids, {'state':'draft','shipped':0})
- wf_service = netsvc.LocalService("workflow")
for p_id in ids:
# Deleting the existing instance of workflow for PO
self.delete_workflow(cr, uid, [p_id]) # TODO is it necessary to interleave the calls?
@@ -777,7 +775,6 @@ class purchase_order(osv.osv):
allorders = []
orders_info = {}
- wf_service = netsvc.LocalService("workflow")
for order_key, (order_data, old_ids) in new_orders.iteritems():
# skip merges with only one order
if len(old_ids) < 2:
From de90c600cdc9771494b17504ddc63024f5d18f6c Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 15:25:41 +0530
Subject: [PATCH 073/253] [FIX] purchase: removed unused imports from yml.
bzr revid: cha@tinyerp.com-20130131095541-2p4hocnztgrkvp98
---
addons/purchase/test/process/rfq2order2done.yml | 2 --
1 file changed, 2 deletions(-)
diff --git a/addons/purchase/test/process/rfq2order2done.yml b/addons/purchase/test/process/rfq2order2done.yml
index be68a8ca01e..ff9158b3c09 100644
--- a/addons/purchase/test/process/rfq2order2done.yml
+++ b/addons/purchase/test/process/rfq2order2done.yml
@@ -59,9 +59,7 @@
I Validate Invoice of Purchase Order.
-
!python {model: purchase.order}: |
- import netsvc
invoice_ids = [x.id for x in self.browse(cr, uid, ref("purchase_order_1")).invoice_ids]
- wf_service = netsvc.LocalService("workflow")
self.pool.get('account.invoice').signal_invoice_open(cr, uid, invoice_ids)
-
I check that purchase order is invoiced.
From 8045a7556d4fcef4a9640828e84fb799370d9a18 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 16:00:15 +0530
Subject: [PATCH 074/253] [IMP] purchase_requisition: use the new signal_xxx
methods instead of trg_validate.
bzr revid: cha@tinyerp.com-20130131103015-ooa3nr4j6qllpfgk
---
addons/purchase_requisition/purchase_requisition.py | 4 +---
addons/purchase_requisition/test/purchase_requisition.yml | 4 +---
2 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py
index f773bbd8505..79b8cce4bd5 100644
--- a/addons/purchase_requisition/purchase_requisition.py
+++ b/addons/purchase_requisition/purchase_requisition.py
@@ -22,7 +22,6 @@
from datetime import datetime
from dateutil.relativedelta import relativedelta
import time
-from openerp import netsvc
from openerp.osv import fields,osv
from openerp.tools.translate import _
@@ -211,8 +210,7 @@ class purchase_order(osv.osv):
proc_ids = proc_obj.search(cr, uid, [('purchase_id', '=', order.id)])
if proc_ids and po.state=='confirmed':
proc_obj.write(cr, uid, proc_ids, {'purchase_id': po.id})
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'purchase.order', order.id, 'purchase_cancel', cr)
+ self.signal_purchase_cancel(cr, uid, [order.id])
po.requisition_id.tender_done(context=context)
return res
diff --git a/addons/purchase_requisition/test/purchase_requisition.yml b/addons/purchase_requisition/test/purchase_requisition.yml
index 38e66788dcf..f23737d21b8 100644
--- a/addons/purchase_requisition/test/purchase_requisition.yml
+++ b/addons/purchase_requisition/test/purchase_requisition.yml
@@ -69,10 +69,8 @@
I confirmed RFQ which has best price.
-
!python {model: purchase.order}: |
- import netsvc
- wf_service = netsvc.LocalService("workflow")
purchase = self.browse(cr, uid, ref('rfq2'), context=context)
- wf_service.trg_validate(uid, 'purchase.order', purchase.id, 'purchase_confirm', cr)
+ self.signal_purchase_confirm(cr, uid, [purchase.id])
-
I check status of requisition after confirmed best RFQ.
From fc374647a9c0dad7411992d799132c0475fbaf38 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 16:49:52 +0530
Subject: [PATCH 075/253] [IMP] procurement: use the new signal_xxx methods
instead of trg_validate.
bzr revid: cha@tinyerp.com-20130131111952-tnq7iiwj9u5opyge
---
addons/procurement/procurement.py | 1 -
addons/procurement/schedulers.py | 3 ---
addons/procurement/wizard/make_procurement_product.py | 6 ++----
3 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py
index 21c260b99cd..30d870647e2 100644
--- a/addons/procurement/procurement.py
+++ b/addons/procurement/procurement.py
@@ -456,7 +456,6 @@ class procurement_order(osv.osv):
class StockPicking(osv.osv):
_inherit = 'stock.picking'
def test_finished(self, cr, uid, ids):
- wf_service = netsvc.LocalService("workflow")
res = super(StockPicking, self).test_finished(cr, uid, ids)
for picking in self.browse(cr, uid, ids):
for move in picking.move_lines:
diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py
index 76b31cc6da3..c09d9a22a16 100644
--- a/addons/procurement/schedulers.py
+++ b/addons/procurement/schedulers.py
@@ -57,7 +57,6 @@ class procurement_order(osv.osv):
try:
if use_new_cursor:
cr = pooler.get_db(use_new_cursor).cursor()
- wf_service = netsvc.LocalService("workflow")
procurement_obj = self.pool.get('procurement.order')
if not ids:
@@ -154,7 +153,6 @@ class procurement_order(osv.osv):
product_obj = self.pool.get('product.product')
proc_obj = self.pool.get('procurement.order')
warehouse_obj = self.pool.get('stock.warehouse')
- wf_service = netsvc.LocalService("workflow")
warehouse_ids = warehouse_obj.search(cr, uid, [], context=context)
products_ids = product_obj.search(cr, uid, [('purchase_ok', '=', True)], order='id', context=context)
@@ -224,7 +222,6 @@ class procurement_order(osv.osv):
orderpoint_obj = self.pool.get('stock.warehouse.orderpoint')
procurement_obj = self.pool.get('procurement.order')
- wf_service = netsvc.LocalService("workflow")
offset = 0
ids = [1]
if automatic:
diff --git a/addons/procurement/wizard/make_procurement_product.py b/addons/procurement/wizard/make_procurement_product.py
index 34a146289f6..fa159780af2 100644
--- a/addons/procurement/wizard/make_procurement_product.py
+++ b/addons/procurement/wizard/make_procurement_product.py
@@ -19,7 +19,6 @@
#
##############################################################################
-from openerp import netsvc
from openerp.osv import fields, osv
@@ -64,7 +63,6 @@ class make_procurement(osv.osv_memory):
user = self.pool.get('res.users').browse(cr, uid, uid, context=context).login
wh_obj = self.pool.get('stock.warehouse')
procurement_obj = self.pool.get('procurement.order')
- wf_service = netsvc.LocalService("workflow")
data_obj = self.pool.get('ir.model.data')
for proc in self.browse(cr, uid, ids, context=context):
@@ -78,8 +76,8 @@ class make_procurement(osv.osv_memory):
'location_id': wh.lot_stock_id.id,
'procure_method':'make_to_order',
})
-
- wf_service.trg_validate(uid, 'procurement.order', procure_id, 'button_confirm', cr)
+
+ self.pool.get('procurement.order').signal_button_confirm(cr, uid, [procure_id])
id2 = data_obj._get_id(cr, uid, 'procurement', 'procurement_tree_view')
From d4328ba8d57010a669efc1724264fba534f88b46 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 17:29:54 +0530
Subject: [PATCH 076/253] [IMP] account_voucher: : use the new ORM methods
create_workflow, delete_workflow, redirect_workflow.
bzr revid: cha@tinyerp.com-20130131115954-54u8z5ibntrs4sco
---
addons/account_voucher/account_voucher.py | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index 2046d787ef3..2e808e26b75 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -22,7 +22,6 @@
import time
from lxml import etree
-from openerp import netsvc
from openerp.osv import fields, osv
import openerp.addons.decimal_precision as dp
from openerp.tools.translate import _
@@ -828,9 +827,7 @@ class account_voucher(osv.osv):
return True
def action_cancel_draft(self, cr, uid, ids, context=None):
- wf_service = netsvc.LocalService("workflow")
- for voucher_id in ids:
- wf_service.trg_create(uid, 'account.voucher', voucher_id, cr)
+ self.create_workflow(cr, uid, ids)
self.write(cr, uid, ids, {'state':'draft'})
return True
From eebaf0767ed79a70cc999ff32cae325bc81aa839 Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Thu, 31 Jan 2013 17:30:47 +0530
Subject: [PATCH 077/253] [IMP] mrp_operation: use the new ORM methods
create_workflow, delete_workflow, redirect_workflow.
bzr revid: tta@openerp.com-20130131120047-9ehhi00keo0p6gjq
---
addons/mrp_operations/mrp_operations.py | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py
index a60b348559c..cce27d3a6c2 100644
--- a/addons/mrp_operations/mrp_operations.py
+++ b/addons/mrp_operations/mrp_operations.py
@@ -500,7 +500,6 @@ class mrp_operations_operation(osv.osv):
def create(self, cr, uid, vals, context=None):
workcenter_pool = self.pool.get('mrp.production.workcenter.line')
- wf_service = netsvc.LocalService('workflow')
code_ids=self.pool.get('mrp_operations.operation.code').search(cr,uid,[('id','=',vals['code_id'])])
code=self.pool.get('mrp_operations.operation.code').browse(cr, uid, code_ids, context=context)[0]
wc_op_id=workcenter_pool.search(cr,uid,[('workcenter_id','=',vals['workcenter_id']),('production_id','=',vals['production_id'])])
@@ -545,10 +544,9 @@ class mrp_operations_operation(osv.osv):
return super(mrp_operations_operation, self).create(cr, uid, vals, context=context)
def initialize_workflow_instance(self, cr, uid, context=None):
- wf_service = netsvc.LocalService("workflow")
- line_ids = self.pool.get('mrp.production.workcenter.line').search(cr, uid, [], context=context)
- for line_id in line_ids:
- wf_service.trg_create(uid, 'mrp.production.workcenter.line', line_id, cr)
+ mrp_production_workcenter_line = self.pool.get('mrp.production.workcenter.line')
+ line_ids = mrp_production_workcenter_line.search(cr, uid, [], context=context)
+ mrp_production_workcenter_line.create_workflow(cr, uid, line_ids)
return True
_columns={
From 401b039e809598fc9e242f9dda1a34545430219d Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Thu, 31 Jan 2013 17:49:15 +0530
Subject: [PATCH 078/253] [IMP] mrp: use the new signal_xxx method instead of
trg_validate.
bzr revid: tta@openerp.com-20130131121915-gahj7t5ob6s2y0q8
---
addons/mrp/mrp.py | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py
index 44fbaafbcfe..b8081f461d6 100644
--- a/addons/mrp/mrp.py
+++ b/addons/mrp/mrp.py
@@ -27,7 +27,6 @@ from openerp.osv import fields, osv
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP
from openerp.tools import float_compare
from openerp.tools.translate import _
-from openerp import netsvc
from openerp import tools
#----------------------------------------------------------
@@ -775,8 +774,7 @@ class mrp_production(osv.osv):
for new_parent_id in new_parent_ids:
stock_mov_obj.write(cr, uid, [raw_product.id], {'move_history_ids': [(4,new_parent_id)]})
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'mrp.production', production_id, 'button_produce_done', cr)
+ self.signal_button_produce_done(cr, uid, [production_id])
return True
def _costs_generate(self, cr, uid, production):
@@ -844,7 +842,6 @@ class mrp_production(osv.osv):
return True
def _make_production_line_procurement(self, cr, uid, production_line, shipment_move_id, context=None):
- wf_service = netsvc.LocalService("workflow")
procurement_order = self.pool.get('procurement.order')
production = production_line.production_id
location_id = production.location_src_id.id
@@ -864,7 +861,7 @@ class mrp_production(osv.osv):
'move_id': shipment_move_id,
'company_id': production.company_id.id,
})
- wf_service.trg_validate(uid, procurement_order._name, procurement_id, 'button_confirm', cr)
+ self.signal_button_confirm(cr, uid, [procurement_id])
return procurement_id
def _make_production_internal_shipment_line(self, cr, uid, production_line, shipment_id, parent_move_id, destination_location_id=False, context=None):
@@ -977,7 +974,6 @@ class mrp_production(osv.osv):
@return: Newly generated Shipment Id.
"""
shipment_id = False
- wf_service = netsvc.LocalService("workflow")
uncompute_ids = filter(lambda x:x, [not x.product_lines and x.id or False for x in self.browse(cr, uid, ids, context=context)])
self.action_compute(cr, uid, uncompute_ids, context=context)
for production in self.browse(cr, uid, ids, context=context):
@@ -995,7 +991,7 @@ class mrp_production(osv.osv):
destination_location_id=source_location_id, context=context)
self._make_production_line_procurement(cr, uid, line, shipment_move_id, context=context)
- wf_service.trg_validate(uid, 'stock.picking', shipment_id, 'button_confirm', cr)
+ self.registry('stock.picking').signal_button_confirm(cr, uid, [shipment_id])
production.write({'state':'confirmed'}, context=context)
return shipment_id
From 9a1d53ba2dbd3f5c7e42696f3aef8e4963754013 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Thu, 31 Jan 2013 18:01:22 +0530
Subject: [PATCH 079/253] [IMP] account_payment: : use the new ORM methods
create_workflow, delete_workflow, redirect_workflow.
bzr revid: cha@tinyerp.com-20130131123122-td7ebesygpa605y0
---
addons/account_payment/account_payment.py | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/addons/account_payment/account_payment.py b/addons/account_payment/account_payment.py
index c57c83aa765..bf0377111a8 100644
--- a/addons/account_payment/account_payment.py
+++ b/addons/account_payment/account_payment.py
@@ -23,7 +23,6 @@ import logging
import time
from openerp.osv import fields, osv
-from openerp import netsvc
_logger = logging.getLogger(__name__)
@@ -120,9 +119,7 @@ class payment_order(osv.osv):
def set_to_draft(self, cr, uid, ids, *args):
self.write(cr, uid, ids, {'state': 'draft'})
- wf_service = netsvc.LocalService("workflow")
- for id in ids:
- wf_service.trg_create(uid, 'payment.order', id, cr)
+ self.create_workflow(cr, uid, ids)
return True
def action_open(self, cr, uid, ids, *args):
From c35416245f1932361e65fb7cfbe75a0aee3c1372 Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Thu, 31 Jan 2013 18:18:41 +0530
Subject: [PATCH 080/253] [IMP] mrp_repain: use the new signal_xxx method
instead of trg_validate.
bzr revid: tta@openerp.com-20130131124841-ej81d0ethz8859r0
---
addons/mrp_repair/mrp_repair.py | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py
index 8c43158a876..7bb12b0402a 100644
--- a/addons/mrp_repair/mrp_repair.py
+++ b/addons/mrp_repair/mrp_repair.py
@@ -20,7 +20,6 @@
##############################################################################
from openerp.osv import fields,osv
-from openerp import netsvc
from datetime import datetime
from dateutil.relativedelta import relativedelta
from openerp.tools.translate import _
@@ -314,9 +313,7 @@ class mrp_repair(osv.osv):
for repair in self.browse(cr, uid, ids):
mrp_line_obj.write(cr, uid, [l.id for l in repair.operations], {'state': 'draft'})
self.write(cr, uid, ids, {'state':'draft'})
- wf_service = netsvc.LocalService("workflow")
- for id in ids:
- wf_service.trg_create(uid, 'mrp.repair', id, cr)
+ self.create_workflow(cr, uid, ids)
return True
def action_confirm(self, cr, uid, ids, *args):
@@ -505,7 +502,6 @@ class mrp_repair(osv.osv):
"""
res = {}
move_obj = self.pool.get('stock.move')
- wf_service = netsvc.LocalService("workflow")
repair_line_obj = self.pool.get('mrp.repair.line')
seq_obj = self.pool.get('ir.sequence')
pick_obj = self.pool.get('stock.picking')
@@ -548,7 +544,7 @@ class mrp_repair(osv.osv):
'tracking_id': False,
'state': 'assigned',
})
- wf_service.trg_validate(uid, 'stock.picking', picking, 'button_confirm', cr)
+ self.registry.signal_button_confirm(cr, uid, [picking])
self.write(cr, uid, [repair.id], {'state': 'done', 'picking_id': picking})
res[repair.id] = picking
else:
From f63497e12ff9c933706dec07ba13d6432bd7199a Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Thu, 31 Jan 2013 18:36:50 +0530
Subject: [PATCH 081/253] [IMP] hr_expense: cleanup the code for workflow
declaration.
bzr revid: tta@openerp.com-20130131130650-szwdnjyqiohdimio
---
addons/hr_expense/hr_expense.py | 2 --
1 file changed, 2 deletions(-)
diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py
index f32479c2ae2..0b6ec48974b 100644
--- a/addons/hr_expense/hr_expense.py
+++ b/addons/hr_expense/hr_expense.py
@@ -21,7 +21,6 @@
import time
-from openerp import netsvc
from openerp.osv import fields, osv
from openerp.tools.translate import _
@@ -152,7 +151,6 @@ class hr_expense_expense(osv.osv):
account_journal = self.pool.get('account.journal')
voucher_obj = self.pool.get('account.voucher')
currency_obj = self.pool.get('res.currency')
- wkf_service = netsvc.LocalService("workflow")
if context is None:
context = {}
for exp in self.browse(cr, uid, ids, context=context):
From d80d06514474fc33a262b4e9a736b67e72cae029 Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Thu, 31 Jan 2013 18:41:07 +0530
Subject: [PATCH 082/253] [IMP] hr_payroll_account: use the new signal_xxx
method instead of trg_validate.
bzr revid: tta@openerp.com-20130131131107-4h42x3g19blw6jzw
---
addons/hr_payroll_account/test/hr_payroll_account.yml | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/addons/hr_payroll_account/test/hr_payroll_account.yml b/addons/hr_payroll_account/test/hr_payroll_account.yml
index 5abf7d5dffa..ad0197c7905 100644
--- a/addons/hr_payroll_account/test/hr_payroll_account.yml
+++ b/addons/hr_payroll_account/test/hr_payroll_account.yml
@@ -104,10 +104,8 @@
I want to check cancel button. So I first cancel the sheet then make it set to draft.
-
!python {model: hr.payslip}: |
- import netsvc
- wf_service = netsvc.LocalService("workflow")
self.cancel_sheet(cr, uid, [ref("hr_payslip_0")], None)
- wf_service.trg_validate(uid, 'hr.payslip', ref("hr_payslip_0"), 'draft', cr)
+ self.signal_draft(cr, uid, [ref("hr_payslip_0")])
-
Then I click on the "Confirm" button.
-
From a4af8609686386d3371289ea24e019a897ca13bd Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Thu, 31 Jan 2013 19:15:20 +0100
Subject: [PATCH 083/253] [IMP] introduce a new kind of exception:
RedirectWarning (warning with an additional redirection button)
bzr revid: abo@openerp.com-20130131181520-q5ol3ngsn93u7hg5
---
openerp/exceptions.py | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/openerp/exceptions.py b/openerp/exceptions.py
index fbf52c7f3a9..46f0a29b1e0 100644
--- a/openerp/exceptions.py
+++ b/openerp/exceptions.py
@@ -30,6 +30,19 @@ treated as a 'Server error'.
class Warning(Exception):
pass
+class RedirectWarning(Exception):
+ """ Warning with a possibility to redirect the user instead of simply
+ discarding the warning message.
+ """
+ def __init__(self, msg, action_id, button_text):
+ """
+ :param int action_id: id of the action required to perform the
+ redirection
+ :param string button_text: text to put on the button which will trigger
+ the redirection
+ """
+ super(RedirectWarning, self).__init__(msg, action_id, button_text)
+
class AccessDenied(Exception):
""" Login/password error. No message, no traceback. """
def __init__(self):
From a2d53ee33b23269a3c311daf696d3c919953e4e8 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Thu, 31 Jan 2013 19:18:53 +0100
Subject: [PATCH 084/253] [IMP] the implementation of get_option_path(): return
a tuple with the full path and the id of the action linked to the given menu
xml id
bzr revid: abo@openerp.com-20130131181853-mp7r238q0zf5go4l
---
openerp/addons/base/res/res_config.py | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index 32e24238d52..35afafe1ad7 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -597,14 +597,16 @@ class res_config_settings(osv.osv_memory):
:param string menu_xml_id: the xml id of the menuitem where the view
is located, structured as follows: module_name.menuitem_xml_id
(e.g.: "base.menu_sale_config")
- :return string: full path to the menuitem
- (e.g.: "Settings/Configuration/Sales")
+ :return tuple:
+ - t[0]: string: full path to the menuitem
+ (e.g.: "Settings/Configuration/Sales")
+ - t[1]: int: id of the menuitem's action
"""
module_name, menu_xml_id = menu_xml_id.split('.')
dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id)
ir_ui_menu = self.pool.get('ir.ui.menu').browse(cr, uid, menu_id, context=context)
- return ir_ui_menu.complete_name
+ return (ir_ui_menu.complete_name, ir_ui_menu.action.id)
def get_option_name(self, cr, uid, full_field_name, context=None):
"""
@@ -644,20 +646,25 @@ class res_config_settings(osv.osv_memory):
regex_path = r'%\(((?:menu|field):[a-z_\.]*)\)s'
# Process the message
- # 1/ find the path and/or field references, put them in a list
+ # 1/ find the menu and/or field references, put them in a list
references = re.findall(regex_path, msg, flags=re.I)
- # 2/ fetch the path and/or field replacement values
- # (full path and human readable field's name)
+ # 2/ fetch the menu and/or field replacement values (full path and
+ # human readable field's name) and the action_id if any
values = {}
+ action_id = None
+ buttontext = None
for item in references:
ref_type, ref = item.split(':')
if ref_type == 'menu':
- values[item] = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context)
+ values[item], action_id = res_config_obj.get_option_path(cr, SUPERUSER_ID, ref, context)
+ buttontext = _('Go to the configuration panel')
elif ref_type == 'field':
values[item] = res_config_obj.get_option_name(cr, SUPERUSER_ID, ref, context)
# 3/ substitute and return the result
- return exceptions.Warning(msg % values)
-
+ if (action_id):
+ return exceptions.RedirectWarning(msg % values, action_id, _('Go to the configuration panel'))
+ else:
+ return exceptions.Warning(msg % values)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From 62285a48ed6d6ecba3776b994a10ad217d527f31 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Thu, 31 Jan 2013 19:29:21 +0100
Subject: [PATCH 085/253] [IMP] add a handler for the new exception
RedirectWarning
bzr revid: abo@openerp.com-20130131182921-9tv71vzjr2agdusc
---
addons/web/static/src/js/chrome.js | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js
index 1407df4d33f..86d0a20ed20 100644
--- a/addons/web/static/src/js/chrome.js
+++ b/addons/web/static/src/js/chrome.js
@@ -327,6 +327,34 @@ instance.web.ExceptionHandler = {
*/
instance.web.crash_manager_registry = new instance.web.Registry();
+/**
+ * Handle redirection warnings, which behave more or less like a regular
+ * warning, with an additional redirection button.
+ */
+instance.web.RedirectWarningHandler = instance.web.Dialog.extend(instance.web.ExceptionHandler, {
+ init: function(parent, error) {
+ this._super(parent);
+ this.error = error;
+ },
+ display: function() {
+ error = this.error;
+ error.data.message = error.data.arguments[0];
+
+ instance.web.dialog($('' + QWeb.render('CrashManager.warning', {error: error}) + '
'), {
+ title: "OpenERP " + (_.str.capitalize(error.type) || "Warning"),
+ buttons: [
+ {text: _t("Ok"), click: function() { $(this).dialog("close"); }},
+ {text: error.data.arguments[2], click: function() {
+ window.location.href='#action='+error.data.arguments[1];
+ $(this).dialog("close");
+ }}
+ ]
+ });
+ this.destroy();
+ }
+});
+instance.web.crash_manager_registry.add('openerp.exceptions.RedirectWarning', 'instance.web.RedirectWarningHandler');
+
instance.web.Loading = instance.web.Widget.extend({
template: _t("Loading"),
init: function(parent) {
From 0b7fe8278e8050faa6fbd568db2c704fc619254e Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Fri, 1 Feb 2013 10:23:11 +0530
Subject: [PATCH 086/253] [IMP] mrp: use the new signal_xxx methods instead of
trg_validate.
bzr revid: tta@openerp.com-20130201045311-1njirm57d9cd5mff
---
addons/mrp/stock.py | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/addons/mrp/stock.py b/addons/mrp/stock.py
index ae7edf54750..1ff121c78bd 100644
--- a/addons/mrp/stock.py
+++ b/addons/mrp/stock.py
@@ -21,7 +21,6 @@
from openerp.osv import fields
from openerp.osv import osv
-from openerp import netsvc
class StockMove(osv.osv):
@@ -45,7 +44,6 @@ class StockMove(osv.osv):
move_obj = self.pool.get('stock.move')
procurement_obj = self.pool.get('procurement.order')
product_obj = self.pool.get('product.product')
- wf_service = netsvc.LocalService("workflow")
processed_ids = [move.id]
if move.product_id.supply_method == 'produce' and move.product_id.procure_method == 'make_to_order':
bis = bom_obj.search(cr, uid, [
@@ -90,16 +88,17 @@ class StockMove(osv.osv):
'procure_method': prodobj.procure_method,
'move_id': mid,
})
- wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
+ procurement_obj.signal_button_confirm(cr, uid, [proc_id])
+
move_obj.write(cr, uid, [move.id], {
'location_dest_id': move.location_id.id, # dummy move for the kit
'auto_validate': True,
'picking_id': False,
'state': 'confirmed'
})
- for m in procurement_obj.search(cr, uid, [('move_id','=',move.id)], context):
- wf_service.trg_validate(uid, 'procurement.order', m, 'button_confirm', cr)
- wf_service.trg_validate(uid, 'procurement.order', m, 'button_wait_done', cr)
+ procurement_ids = procurement_obj.search(cr, uid, [('move_id','=',move.id)], context)
+ procurement_obj.signal_button_confirm(cr, uid, procurement_ids)
+ procurement_obj.signal_button_wait_done(cr, uid, procurement_ids)
return processed_ids
def action_consume(self, cr, uid, ids, product_qty, location_id=False, context=None):
@@ -110,7 +109,6 @@ class StockMove(osv.osv):
"""
res = []
production_obj = self.pool.get('mrp.production')
- wf_service = netsvc.LocalService("workflow")
for move in self.browse(cr, uid, ids):
move.action_confirm(context)
new_moves = super(StockMove, self).action_consume(cr, uid, [move.id], product_qty, location_id, context=context)
@@ -118,7 +116,7 @@ class StockMove(osv.osv):
for prod in production_obj.browse(cr, uid, production_ids, context=context):
if prod.state == 'confirmed':
production_obj.force_production(cr, uid, [prod.id])
- wf_service.trg_validate(uid, 'mrp.production', prod.id, 'button_produce', cr)
+ production_obj.signal_button_produce(cr, uid, production_ids)
for new_move in new_moves:
if new_move == move.id:
#This move is already there in move lines of production order
@@ -135,14 +133,13 @@ class StockMove(osv.osv):
"""
res = []
production_obj = self.pool.get('mrp.production')
- wf_service = netsvc.LocalService("workflow")
for move in self.browse(cr, uid, ids, context=context):
new_moves = super(StockMove, self).action_scrap(cr, uid, [move.id], product_qty, location_id, context=context)
#If we are not scrapping our whole move, tracking and lot references must not be removed
#self.write(cr, uid, [move.id], {'prodlot_id': False, 'tracking_id': False})
production_ids = production_obj.search(cr, uid, [('move_lines', 'in', [move.id])])
for prod_id in production_ids:
- wf_service.trg_validate(uid, 'mrp.production', prod_id, 'button_produce', cr)
+ production_obj.signal_button_produce(cr, uid, [prod_id])
for new_move in new_moves:
production_obj.write(cr, uid, production_ids, {'move_lines': [(4, new_move)]})
res.append(new_move)
From 263e0cf4824324d9842cca0688350bee7c726643 Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Fri, 1 Feb 2013 10:35:51 +0530
Subject: [PATCH 087/253] [IMP] hr_timesheet_invoice: code cleanup unused
import.
bzr revid: tta@openerp.com-20130201050551-1v45eut2toek9g7x
---
addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml | 2 --
.../test/test_hr_timesheet_invoice_no_prod_tax.yml | 2 --
2 files changed, 4 deletions(-)
diff --git a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml
index de19ea8fb3a..0896cf7d517 100644
--- a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml
+++ b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml
@@ -115,6 +115,4 @@
I click on "Create Invoice" button to create Invoice and validate the invoice.
-
!python {model: hr.timesheet.invoice.create.final}: |
- import netsvc
- wkf_service = netsvc.LocalService("workflow")
res = self.do_create(cr, uid, [ref("hr_timesheet_invoice_create_final_0")], {"active_ids": [ref("account.analytic_agrolait")]})
diff --git a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml
index 68e827e79f1..d00963073f0 100644
--- a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml
+++ b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml
@@ -114,6 +114,4 @@
I click on "Create Invoice" button to create Invoice and validate the invoice.
-
!python {model: hr.timesheet.invoice.create.final}: |
- import netsvc
- wkf_service = netsvc.LocalService("workflow")
res = self.do_create(cr, uid, [ref("hr_timesheet_invoice_create_final_0")], {"active_ids": [ref("account.analytic_agrolait")]})
From ddf3057db54a72991bd06b4d577da3c5ab4a2ab8 Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Fri, 1 Feb 2013 10:42:33 +0530
Subject: [PATCH 088/253] [IMP] mrp: use the new signal_xxx methods instead of
trg_validate.
bzr revid: tta@openerp.com-20130201051233-tcegov6upxq1jsqo
---
addons/mrp/procurement.py | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/addons/mrp/procurement.py b/addons/mrp/procurement.py
index 8162c3178dc..1f94f0034ad 100644
--- a/addons/mrp/procurement.py
+++ b/addons/mrp/procurement.py
@@ -24,7 +24,6 @@ from dateutil.relativedelta import relativedelta
from openerp.osv import fields
from openerp.osv import osv
from openerp.tools.translate import _
-from openerp import netsvc
class procurement_order(osv.osv):
_inherit = 'procurement.order'
@@ -87,7 +86,6 @@ class procurement_order(osv.osv):
company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id
production_obj = self.pool.get('mrp.production')
move_obj = self.pool.get('stock.move')
- wf_service = netsvc.LocalService("workflow")
procurement_obj = self.pool.get('procurement.order')
for procurement in procurement_obj.browse(cr, uid, ids, context=context):
res_id = procurement.move_id.id
@@ -112,7 +110,7 @@ class procurement_order(osv.osv):
self.write(cr, uid, [procurement.id], {'state': 'running', 'production_id': produce_id})
bom_result = production_obj.action_compute(cr, uid,
[produce_id], properties=[x.id for x in procurement.property_ids])
- wf_service.trg_validate(uid, 'mrp.production', produce_id, 'button_confirm', cr)
+ production_obj.signal_button_confirm(cr, uid, [produce_id])
if res_id:
move_obj.write(cr, uid, [res_id],
{'location_id': procurement.location_id.id})
From 191a095164482f7fe91a897a9ba812dd9c153f46 Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Fri, 1 Feb 2013 10:50:27 +0530
Subject: [PATCH 089/253] [IMP] membership: use the new signal_xxx methods
instead of trg_validate.
bzr revid: tta@openerp.com-20130201052027-2c0quhoqligc6ag2
---
addons/membership/test/test_membership.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/addons/membership/test/test_membership.yml b/addons/membership/test/test_membership.yml
index 357fcbcfc3e..8e8e7887b44 100644
--- a/addons/membership/test/test_membership.yml
+++ b/addons/membership/test/test_membership.yml
@@ -42,8 +42,8 @@
membership_lines = membership_line_pool.browse(cr, uid, membership_line_ids)
assert membership_lines, _('Membership is not registrated.')
membership_line = membership_lines[0]
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.invoice', membership_line.account_invoice_id.id, 'invoice_open', cr)
+ invoice_pool.signal_invoice_open(cr, uid, [membership_line.account_invoice_id.id])
+
- |
I'm checking "Current membership state" of "Seagate". It is an "Invoiced Member" or not.
-
From 89d400f824ba89dc45bc6a982b7b74a64a5f29ed Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Fri, 1 Feb 2013 11:11:20 +0530
Subject: [PATCH 090/253] [IMP] mrp_repair: use the new signal_xxx methods
instead of trg_validate.
bzr revid: tta@openerp.com-20130201054120-lzah0vb83w3ff53z
---
addons/mrp_repair/wizard/make_invoice.py | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/addons/mrp_repair/wizard/make_invoice.py b/addons/mrp_repair/wizard/make_invoice.py
index a6e93aca064..9442746d68e 100644
--- a/addons/mrp_repair/wizard/make_invoice.py
+++ b/addons/mrp_repair/wizard/make_invoice.py
@@ -19,7 +19,6 @@
#
##############################################################################
-from openerp import netsvc
from openerp.osv import fields, osv
class make_invoice(osv.osv_memory):
@@ -50,9 +49,7 @@ class make_invoice(osv.osv_memory):
# We have to trigger the workflow of the given repairs, otherwise they remain 'to be invoiced'.
# Note that the signal 'action_invoice_create' will trigger another call to the method 'action_invoice_create',
# but that second call will not do anything, since the repairs are already invoiced.
- wf_service = netsvc.LocalService("workflow")
- for repair_id in context['active_ids']:
- wf_service.trg_validate(uid, 'mrp.repair', repair_id, 'action_invoice_create', cr)
+ order_obj.signal_action_invoice_create(cr, uid, context['active_ids'])
form_res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form')
form_id = form_res and form_res[1] or False
From 048907a80f9f24986fdba0a0d462adb9dd1e94b1 Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Fri, 1 Feb 2013 11:38:37 +0530
Subject: [PATCH 091/253] [IMP] sale_mrp: use the new signal_xxx methods
instead of trg_validate.
bzr revid: tta@openerp.com-20130201060837-6uiv82cobhwjhimg
---
addons/sale_mrp/test/sale_mrp.yml | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/addons/sale_mrp/test/sale_mrp.yml b/addons/sale_mrp/test/sale_mrp.yml
index 6fd64301af2..c2eff008943 100644
--- a/addons/sale_mrp/test/sale_mrp.yml
+++ b/addons/sale_mrp/test/sale_mrp.yml
@@ -103,11 +103,8 @@
!python {model: procurement.order}: |
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
- import netsvc
- wf_service = netsvc.LocalService("workflow")
proc_ids = self.search(cr, uid, [('origin','=',so.name)])
- for proc in proc_ids:
- wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr)
+ self.signal_button_check(cr, uid, proc_ids)
-
I verify that a procurement state is "running"
-
From 3589c008ad440ea18d8f382c590228977af7c70e Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Fri, 1 Feb 2013 11:54:21 +0530
Subject: [PATCH 092/253] [IMP] POS: use the new signal_xxx methods instead of
trg_validate.
bzr revid: cha@tinyerp.com-20130201062421-luknla6wp3yqxhqm
---
addons/point_of_sale/point_of_sale.py | 20 ++++++++-----------
addons/point_of_sale/wizard/pos_confirm.py | 4 +---
addons/point_of_sale/wizard/pos_payment.py | 4 +---
addons/point_of_sale/wizard/pos_return.py | 10 +++-------
.../wizard/pos_session_opening.py | 4 +---
5 files changed, 14 insertions(+), 28 deletions(-)
diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py
index 970eb1fbed7..9b9e5b951b4 100644
--- a/addons/point_of_sale/point_of_sale.py
+++ b/addons/point_of_sale/point_of_sale.py
@@ -27,7 +27,7 @@ import pdb
import time
import openerp
-from openerp import netsvc, tools
+from openerp import tools
from openerp.osv import fields, osv
from openerp.tools.translate import _
@@ -442,8 +442,7 @@ class pos_session(osv.osv):
}
def _confirm_orders(self, cr, uid, ids, context=None):
- wf_service = netsvc.LocalService("workflow")
-
+
for session in self.browse(cr, uid, ids, context=context):
order_ids = [order.id for order in session.order_ids if order.state == 'paid']
@@ -457,7 +456,7 @@ class pos_session(osv.osv):
_('Error!'),
_("You cannot confirm all orders of this session, because they have not the 'paid' status"))
else:
- wf_service.trg_validate(uid, 'pos.order', order.id, 'done', cr)
+ self.pool.get('pos.order').signal_done(cr, uid, [order.id])
return True
@@ -519,8 +518,7 @@ class pos_order(osv.osv):
'journal': cash_journal.id,
}, context=context)
order_ids.append(order_id)
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'pos.order', order_id, 'paid', cr)
+ self.signal_paid(cr, uid, [order_id])
return order_ids
def unlink(self, cr, uid, ids, context=None):
@@ -695,9 +693,8 @@ class pos_order(osv.osv):
}, context=context)
if line.qty < 0:
location_id, output_id = output_id, location_id
-
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
+
+ self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id])
picking_obj.force_assign(cr, uid, [picking_id], context)
return True
@@ -707,7 +704,7 @@ class pos_order(osv.osv):
"""
stock_picking_obj = self.pool.get('stock.picking')
for order in self.browse(cr, uid, ids, context=context):
- wf_service.trg_validate(uid, 'stock.picking', order.picking_id.id, 'button_cancel', cr)
+ self.pool.get('stock.picking').signal_button_cancel(cr, uid, [order.picking_id.id])
if stock_picking_obj.browse(cr, uid, order.picking_id.id, context=context).state <> 'cancel':
raise osv.except_osv(_('Error!'), _('Unable to cancel the picking.'))
self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
@@ -803,7 +800,6 @@ class pos_order(osv.osv):
return self.write(cr, uid, ids, {'state':'invoiced'}, context=context)
def action_invoice(self, cr, uid, ids, context=None):
- wf_service = netsvc.LocalService("workflow")
inv_ref = self.pool.get('account.invoice')
inv_line_ref = self.pool.get('account.invoice.line')
product_obj = self.pool.get('product.product')
@@ -857,7 +853,7 @@ class pos_order(osv.osv):
and [(6, 0, inv_line['invoice_line_tax_id'])] or []
inv_line_ref.create(cr, uid, inv_line, context=context)
inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context)
- wf_service.trg_validate(uid, 'pos.order', order.id, 'invoice', cr)
+ self.signal_invoice(cr, uid, [order.id])
if not inv_ids: return {}
diff --git a/addons/point_of_sale/wizard/pos_confirm.py b/addons/point_of_sale/wizard/pos_confirm.py
index 4dec36685f0..ebc432a846f 100644
--- a/addons/point_of_sale/wizard/pos_confirm.py
+++ b/addons/point_of_sale/wizard/pos_confirm.py
@@ -19,7 +19,6 @@
#
##############################################################################
-from openerp import netsvc
from openerp.osv import osv
@@ -28,7 +27,6 @@ class pos_confirm(osv.osv_memory):
_description = 'Post POS Journal Entries'
def action_confirm(self, cr, uid, ids, context=None):
- wf_service = netsvc.LocalService("workflow")
order_obj = self.pool.get('pos.order')
ids = order_obj.search(cr, uid, [('state','=','paid')], context=context)
for order in order_obj.browse(cr, uid, ids, context=context):
@@ -38,7 +36,7 @@ class pos_confirm(osv.osv_memory):
todo = False
break
if todo:
- wf_service.trg_validate(uid, 'pos.order', order.id, 'done', cr)
+ self.pool.get('pos.order').signal_done(cr, uid, [order.id])
# Check if there is orders to reconcile their invoices
ids = order_obj.search(cr, uid, [('state','=','invoiced'),('invoice_id.state','=','open')], context=context)
diff --git a/addons/point_of_sale/wizard/pos_payment.py b/addons/point_of_sale/wizard/pos_payment.py
index 0a1684ca9ca..5f90f267f7e 100644
--- a/addons/point_of_sale/wizard/pos_payment.py
+++ b/addons/point_of_sale/wizard/pos_payment.py
@@ -23,7 +23,6 @@ import time
import pos_box_entries
-from openerp import netsvc
from openerp.osv import osv, fields
from openerp.tools.translate import _
@@ -67,8 +66,7 @@ class pos_make_payment(osv.osv_memory):
order_obj.add_payment(cr, uid, active_id, data, context=context)
if order_obj.test_paid(cr, uid, [active_id]):
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'pos.order', active_id, 'paid', cr)
+ self.pool.get('pos.order').signal_paid(cr, uid, [active_id])
return {'type' : 'ir.actions.act_window_close' }
##self.print_report(cr, uid, ids, context=context)
diff --git a/addons/point_of_sale/wizard/pos_return.py b/addons/point_of_sale/wizard/pos_return.py
index d6dfdd1e183..f711a2e56ee 100644
--- a/addons/point_of_sale/wizard/pos_return.py
+++ b/addons/point_of_sale/wizard/pos_return.py
@@ -19,7 +19,6 @@
#
##############################################################################
-from openerp import netsvc
from openerp.osv import osv,fields
from openerp.tools.translate import _
import time
@@ -104,7 +103,6 @@ class pos_return(osv.osv_memory):
property_obj= self.pool.get("ir.property")
uom_obj =self. pool.get('product.uom')
statementl_obj = self.pool.get('account.bank.statement.line')
- wf_service = netsvc.LocalService("workflow")
#Todo :Need to clean the code
if active_id:
data = self.browse(cr, uid, ids, context=context)[0]
@@ -157,7 +155,7 @@ class pos_return(osv.osv_memory):
'amount': -amount,
})
order_obj.write(cr,uid, [active_id,new_order], {'state': 'done'})
- wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
+ self.pool.get('stock.picking').signal_button_confirm(cr, uid, [new_picking])
picking_obj.force_assign(cr, uid, [new_picking], context)
act = {
'domain': "[('id', 'in', ["+str(new_order)+"])]",
@@ -200,7 +198,6 @@ class add_product(osv.osv_memory):
date_cur=time.strftime('%Y-%m-%d')
uom_obj = self.pool.get('product.uom')
prod_obj=self.pool.get('product.product')
- wf_service = netsvc.LocalService("workflow")
order_obj.add_product(cr, uid, active_id, data['product_id'], data['quantity'], context=context)
for order_id in order_obj.browse(cr, uid, [active_id], context=context):
@@ -232,7 +229,7 @@ class add_product(osv.osv_memory):
'date':date_cur
})
- wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
+ self.pool.get('stock.picking').signal_button_confirm(cr, uid, [new_picking])
picking_obj.force_assign(cr, uid, [new_picking], context)
order_obj.write(cr,uid,active_id,{'picking_id':new_picking})
@@ -265,7 +262,6 @@ class add_product(osv.osv_memory):
if return_id:
data = return_boj.read(cr,uid,return_id,[])[0]
- wf_service = netsvc.LocalService("workflow")
self_data = self.browse(cr, uid, ids, context=context)[0]
order_obj.add_product(cr, uid, active_ids[0], self_data.product_id.id, self_data.quantity, context=context)
@@ -306,7 +302,7 @@ class add_product(osv.osv_memory):
'name':'%s (return)' % order_id.name,
'date':date_cur,
})
- wf_service.trg_validate(uid, 'stock.picking',new_picking,'button_confirm', cr)
+ self.poolget('stock.picking').signal_button_confirm(cr, uid, [new_picking])
picking_obj.force_assign(cr, uid, [new_picking], context)
obj=order_obj.browse(cr,uid, active_ids[0])
context.update({'return':'return'})
diff --git a/addons/point_of_sale/wizard/pos_session_opening.py b/addons/point_of_sale/wizard/pos_session_opening.py
index 1aa4cb702c4..e0135de0cdb 100644
--- a/addons/point_of_sale/wizard/pos_session_opening.py
+++ b/addons/point_of_sale/wizard/pos_session_opening.py
@@ -1,6 +1,5 @@
#!/usr/bin/env python
-from openerp import netsvc
from openerp.osv import osv, fields
from openerp.tools.translate import _
@@ -37,9 +36,8 @@ class pos_session_opening(osv.osv_memory):
}
def open_existing_session_cb_close(self, cr, uid, ids, context=None):
- wf_service = netsvc.LocalService("workflow")
wizard = self.browse(cr, uid, ids[0], context=context)
- wf_service.trg_validate(uid, 'pos.session', wizard.pos_session_id.id, 'cashbox_control', cr)
+ self.pool.get('pos.session').signal_cashbox_control(cr, uid, [wizard.pos_session_id.id])
return self.open_session_cb(cr, uid, ids, context)
def open_session_cb(self, cr, uid, ids, context=None):
From b5a9ccbe11af41f0b11e4b07ea6e10eecce72d69 Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Fri, 1 Feb 2013 12:17:40 +0530
Subject: [PATCH 093/253] [IMP] account: use the new signal_xxx methods instead
of trg_validate and also update code with create_workflow and delete_workflow
feature.
bzr revid: tta@openerp.com-20130201064740-wxigbf179uf6dnnt
---
addons/account/account_invoice.py | 10 +++-------
addons/account/wizard/account_state_open.py | 3 +--
2 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index 250a0446534..d7b2052305b 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -23,7 +23,6 @@ import time
from lxml import etree
import openerp.addons.decimal_precision as dp
-from openerp import netsvc
from openerp import pooler
from openerp.osv import fields, osv, orm
from openerp.tools.translate import _
@@ -80,11 +79,10 @@ class account_invoice(osv.osv):
def _reconciled(self, cr, uid, ids, name, args, context=None):
res = {}
- wf_service = netsvc.LocalService("workflow")
for inv in self.browse(cr, uid, ids, context=context):
res[inv.id] = self.test_paid(cr, uid, [inv.id])
if not res[inv.id] and inv.state == 'paid':
- wf_service.trg_validate(uid, 'account.invoice', inv.id, 'open_test', cr)
+ self.signal_open_test(cr, uid, [inv.id])
return res
def _get_reference_type(self, cr, uid, context=None):
@@ -638,10 +636,8 @@ class account_invoice(osv.osv):
# go from canceled state to draft state
def action_cancel_draft(self, cr, uid, ids, *args):
self.write(cr, uid, ids, {'state':'draft'})
- wf_service = netsvc.LocalService("workflow")
- for inv_id in ids:
- wf_service.trg_delete(uid, 'account.invoice', inv_id, cr)
- wf_service.trg_create(uid, 'account.invoice', inv_id, cr)
+ self.delete_workflow(cr, uid, ids)
+ self.create_workflow(cr, uid, ids)
return True
# Workflow stuff
diff --git a/addons/account/wizard/account_state_open.py b/addons/account/wizard/account_state_open.py
index b2cbdc4961b..5d0ae6b66bd 100644
--- a/addons/account/wizard/account_state_open.py
+++ b/addons/account/wizard/account_state_open.py
@@ -35,8 +35,7 @@ class account_state_open(osv.osv_memory):
data_inv = obj_invoice.browse(cr, uid, context['active_ids'][0], context=context)
if data_inv.reconciled:
raise osv.except_osv(_('Warning!'), _('Invoice is already reconciled.'))
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.invoice', context['active_ids'][0], 'open_test', cr)
+ obj_invoice.signal_open_test(cr, uid, context['active_ids'][0])
return {'type': 'ir.actions.act_window_close'}
account_state_open()
From 27bd0dbfef0802bc621e5b80a82fcbbeea4a7ebe Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Fri, 1 Feb 2013 12:29:48 +0530
Subject: [PATCH 094/253] [FIX] sale: did some changes
bzr revid: cha@tinyerp.com-20130201065948-oae060lc7f25z1b3
---
addons/sale/sale.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 93556a3e7d5..c8ccfed1cba 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -418,7 +418,7 @@ class sale_order(osv.osv):
This function prints the sales order and mark it as sent, so that we can see more easily the next step of the workflow
'''
assert len(ids) == 1, 'This option should only be used for a single id at a time'
- self.signal_quotation_sent(cr, uid, [ids[0]])
+ self.signal_quotation_sent(cr, uid, ids)
datas = {
'model': 'sale.order',
'ids': ids,
@@ -986,7 +986,7 @@ class mail_compose_message(osv.Model):
context = context or {}
if context.get('default_model') == 'sale.order' and context.get('default_res_id') and context.get('mark_so_as_sent'):
context = dict(context, mail_post_autofollow=True)
- self.pool.get('sale.order').signal_quotation_sent(cr, uid, context['default_res_id'])
+ self.pool.get('sale.order').signal_quotation_sent(cr, uid, [context['default_res_id']])
return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From 0b2a72f0a8e2ef74f53683fddeb7eddfaf60b9d4 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Fri, 1 Feb 2013 12:36:28 +0530
Subject: [PATCH 095/253] [FIX] sale: did some changes
bzr revid: cha@tinyerp.com-20130201070628-utvt502wrg5ynv44
---
addons/sale/wizard/sale_line_invoice.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/sale/wizard/sale_line_invoice.py b/addons/sale/wizard/sale_line_invoice.py
index 4b18c9a4b39..fe8432fc7db 100644
--- a/addons/sale/wizard/sale_line_invoice.py
+++ b/addons/sale/wizard/sale_line_invoice.py
@@ -102,7 +102,7 @@ class sale_order_line_make_invoice(osv.osv_memory):
flag = False
break
if flag:
- sales_order_obj.signal_manual_invoice(cr, uid, line.order_id.id)
+ sales_order_obj.signal_manual_invoice(cr, uid, [line.order_id.id])
sales_order_obj.write(cr, uid, [line.order_id.id], {'state': 'progress'})
if not invoices:
From 75ffe3c712a8aabb6f8c1d00ed6642ba45439c4b Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Fri, 1 Feb 2013 12:48:33 +0530
Subject: [PATCH 096/253] [IMP] account: use the new signal_xxx methods instead
of trg_validate and also update code with create_workflow and delete_workflow
feature.
bzr revid: tta@openerp.com-20130201071833-x48y4zloat1diqa5
---
addons/account/wizard/account_invoice_refund.py | 5 +----
addons/account/wizard/account_invoice_state.py | 16 +++++++---------
2 files changed, 8 insertions(+), 13 deletions(-)
diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py
index 54d6c38a353..68937004dbc 100644
--- a/addons/account/wizard/account_invoice_refund.py
+++ b/addons/account/wizard/account_invoice_refund.py
@@ -23,7 +23,6 @@ import time
from openerp.osv import fields, osv
from openerp.tools.translate import _
-from openerp import netsvc
class account_invoice_refund(osv.osv_memory):
@@ -90,7 +89,6 @@ class account_invoice_refund(osv.osv_memory):
account_m_line_obj = self.pool.get('account.move.line')
mod_obj = self.pool.get('ir.model.data')
act_obj = self.pool.get('ir.actions.act_window')
- wf_service = netsvc.LocalService('workflow')
inv_tax_obj = self.pool.get('account.invoice.tax')
inv_line_obj = self.pool.get('account.invoice.line')
res_users_obj = self.pool.get('res.users')
@@ -161,8 +159,7 @@ class account_invoice_refund(osv.osv_memory):
to_reconcile_ids[line.account_id.id] = [line.id]
if type(line.reconcile_id) != osv.orm.browse_null:
reconcile_obj.unlink(cr, uid, line.reconcile_id.id)
- wf_service.trg_validate(uid, 'account.invoice', \
- refund.id, 'invoice_open', cr)
+ inv_obj.signal_invoice_open(cr, uid, [refund.id])
refund = inv_obj.browse(cr, uid, refund_id[0], context=context)
for tmpline in refund.move_id.line_id:
if tmpline.account_id.id == inv.account_id.id:
diff --git a/addons/account/wizard/account_invoice_state.py b/addons/account/wizard/account_invoice_state.py
index f79b4c046e3..9fab19ff42c 100644
--- a/addons/account/wizard/account_invoice_state.py
+++ b/addons/account/wizard/account_invoice_state.py
@@ -21,7 +21,6 @@
from openerp.osv import osv
from openerp.tools.translate import _
-from openerp import netsvc
from openerp import pooler
class account_invoice_confirm(osv.osv_memory):
@@ -33,16 +32,16 @@ class account_invoice_confirm(osv.osv_memory):
_description = "Confirm the selected invoices"
def invoice_confirm(self, cr, uid, ids, context=None):
- wf_service = netsvc.LocalService('workflow')
if context is None:
context = {}
pool_obj = pooler.get_pool(cr.dbname)
- data_inv = pool_obj.get('account.invoice').read(cr, uid, context['active_ids'], ['state'], context=context)
-
+ account_invoice_obj = pool_obj.get('account.invoice')
+ data_inv = account_invoice_obj.read(cr, uid, context['active_ids'], ['state'], context=context)
for record in data_inv:
if record['state'] not in ('draft','proforma','proforma2'):
raise osv.except_osv(_('Warning!'), _("Selected invoice(s) cannot be confirmed as they are not in 'Draft' or 'Pro-Forma' state."))
- wf_service.trg_validate(uid, 'account.invoice', record['id'], 'invoice_open', cr)
+ account_invoice_obj.signal_invoice_open(cr, uid, [ record['id'] ])
+
return {'type': 'ir.actions.act_window_close'}
account_invoice_confirm()
@@ -59,14 +58,13 @@ class account_invoice_cancel(osv.osv_memory):
def invoice_cancel(self, cr, uid, ids, context=None):
if context is None:
context = {}
- wf_service = netsvc.LocalService('workflow')
pool_obj = pooler.get_pool(cr.dbname)
- data_inv = pool_obj.get('account.invoice').read(cr, uid, context['active_ids'], ['state'], context=context)
-
+ account_invoice_obj = pool_obj.get('account.invoice')
+ data_inv = account_invoice_obj.read(cr, uid, context['active_ids'], ['state'], context=context)
for record in data_inv:
if record['state'] in ('cancel','paid'):
raise osv.except_osv(_('Warning!'), _("Selected invoice(s) cannot be cancelled as they are already in 'Cancelled' or 'Done' state."))
- wf_service.trg_validate(uid, 'account.invoice', record['id'], 'invoice_cancel', cr)
+ account_invoice_obj.signal_invoice_cancel(cr , uid, [record['id']])
return {'type': 'ir.actions.act_window_close'}
account_invoice_cancel()
From f3c4e973cd74c3be9f47cd254cef69dbbb652c80 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Fri, 1 Feb 2013 14:14:04 +0530
Subject: [PATCH 097/253] [FIX] hr_holidays: did some changes.
bzr revid: cha@tinyerp.com-20130201084404-uanxza6nx80l8pn9
---
addons/hr_holidays/hr_holidays.py | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py
index ce30951f7a9..c81c4062a73 100644
--- a/addons/hr_holidays/hr_holidays.py
+++ b/addons/hr_holidays/hr_holidays.py
@@ -27,7 +27,6 @@ from itertools import groupby
from operator import attrgetter, itemgetter
import math
-from openerp import netsvc
from openerp import tools
from openerp.osv import fields, osv
from openerp.tools.translate import _
@@ -304,9 +303,8 @@ class hr_holidays(osv.osv):
'manager_id': False,
'manager_id2': False,
})
- for id in ids:
- self.delete_workflow(cr, uid, [id])
- self.create_workflow(cr, uid, [id])
+ self.delete_workflow(cr, uid, ids)
+ self.create_workflow(cr, uid, ids)
to_unlink = []
for record in self.browse(cr, uid, ids, context=context):
for record2 in record.linked_request_ids:
From 19685c35a592408b223b8a6b1a7503c6ecb2cd26 Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Fri, 1 Feb 2013 14:36:21 +0530
Subject: [PATCH 098/253] [FIX] code corrected.
bzr revid: tta@openerp.com-20130201090621-sym8rxhgofk6wg9p
---
addons/mrp/mrp.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py
index b8081f461d6..9f2d651d3d0 100644
--- a/addons/mrp/mrp.py
+++ b/addons/mrp/mrp.py
@@ -991,7 +991,7 @@ class mrp_production(osv.osv):
destination_location_id=source_location_id, context=context)
self._make_production_line_procurement(cr, uid, line, shipment_move_id, context=context)
- self.registry('stock.picking').signal_button_confirm(cr, uid, [shipment_id])
+ self.pool.get('stock.picking').signal_button_confirm(cr, uid, [shipment_id])
production.write({'state':'confirmed'}, context=context)
return shipment_id
From 95a8d5759e6b033978af444813d1436828e640ea Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Fri, 1 Feb 2013 14:53:07 +0530
Subject: [PATCH 099/253] [FIX] hr_timesheet_sheet: did some changes.
bzr revid: cha@tinyerp.com-20130201092307-yajxn97wnhz3xofj
---
addons/hr_timesheet_sheet/hr_timesheet_sheet.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
index 5948c02bc5e..d4e71cedbf5 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
@@ -190,8 +190,7 @@ class hr_timesheet_sheet(osv.osv):
def action_set_to_draft(self, cr, uid, ids, *args):
self.write(cr, uid, ids, {'state': 'draft'})
- for id in ids:
- self.create_workflow(cr, uid, [id])
+ self.create_workflow(cr, uid, ids)
return True
def name_get(self, cr, uid, ids, context=None):
From aded1b1840f3f98e68fcea07cdbc9cf99b4c57e1 Mon Sep 17 00:00:00 2001
From: Tejas Tank
Date: Fri, 1 Feb 2013 15:20:35 +0530
Subject: [PATCH 100/253] [FIX] code corrected for mrp.repair.
bzr revid: tta@openerp.com-20130201095035-2hbkwbc9npxf74kr
---
addons/mrp_repair/mrp_repair.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py
index 7bb12b0402a..6c3f0ce21e1 100644
--- a/addons/mrp_repair/mrp_repair.py
+++ b/addons/mrp_repair/mrp_repair.py
@@ -544,7 +544,7 @@ class mrp_repair(osv.osv):
'tracking_id': False,
'state': 'assigned',
})
- self.registry.signal_button_confirm(cr, uid, [picking])
+ pick_obj.signal_button_confirm(cr, uid, [picking])
self.write(cr, uid, [repair.id], {'state': 'done', 'picking_id': picking})
res[repair.id] = picking
else:
From c2ffb389a3d6125461e63f0c85193931a9bdb76f Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Fri, 1 Feb 2013 17:36:10 +0530
Subject: [PATCH 101/253] [FIX] sale: Made some changes
bzr revid: cha@tinyerp.com-20130201120610-eotziutfkhsgd77o
---
addons/sale/test/manual_order_policy.yml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/addons/sale/test/manual_order_policy.yml b/addons/sale/test/manual_order_policy.yml
index 905f04b01f5..d138e917a4d 100644
--- a/addons/sale/test/manual_order_policy.yml
+++ b/addons/sale/test/manual_order_policy.yml
@@ -42,7 +42,9 @@
-
!python {model: sale.order}: |
so = self.browse(cr, uid, ref("sale_order_2"))
- self.pool.get('account.invoice').signal_invoice_open(cr, uid, so.invoice_ids)
+ account_invoice_obj = self.pool.get('account.invoice')
+ for invoice in so.invoice_ids:
+ account_invoice_obj.signal_invoice_open(cr, uid, [invoice.id])
-
I pay the invoice.
-
From a500b5d24942ee1bc4b1746793fef54f3d800dab Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Fri, 1 Feb 2013 18:49:55 +0530
Subject: [PATCH 102/253] [FIX] sale: Made some changes
bzr revid: cha@tinyerp.com-20130201131955-nmcaji8bkblipxo3
---
addons/sale/test/cancel_order.yml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/addons/sale/test/cancel_order.yml b/addons/sale/test/cancel_order.yml
index d9d76f19935..982452bc50e 100644
--- a/addons/sale/test/cancel_order.yml
+++ b/addons/sale/test/cancel_order.yml
@@ -52,7 +52,9 @@
-
!python {model: sale.order}: |
invoice_ids = self.browse(cr, uid, ref("sale_order_8")).invoice_ids
- self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, invoice_ids)
+ account_invoice_obj = self.pool.get('account.invoice')
+ for invoice in invoice_ids:
+ account_invoice_obj.signal_invoice_cancel(cr, uid, [invoice.id])
-
I check order status in "Invoice Exception" and related invoice is in cancel state.
-
From df29fec0906661bf4cd58f8e2d631b088c8c6193 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Fri, 1 Feb 2013 19:04:40 +0530
Subject: [PATCH 103/253] [FIX] sale_stock: Made some changes
bzr revid: cha@tinyerp.com-20130201133440-fgo2lj4q22i4dpfb
---
addons/sale_stock/sale_stock.py | 3 ++-
addons/sale_stock/test/picking_order_policy.yml | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py
index f63282b7a16..b121bf425b6 100644
--- a/addons/sale_stock/sale_stock.py
+++ b/addons/sale_stock/sale_stock.py
@@ -208,8 +208,9 @@ class sale_order(osv.osv):
proc_ids = proc_obj.search(cr, uid, [('move_id', '=', mov.id)])
if proc_ids:
self.pool.get('procurement.order').signal_button_check(cr, uid, proc_ids)
+ stock_obj = self.pool.get('stock.picking')
for r in self.read(cr, uid, ids, ['picking_ids']):
- self.pool.get('stock.picking').signal_button_cancel(cr, uid, r['picking_ids'])
+ stock_obj.signal_button_cancel(cr, uid, r['picking_ids'])
return super(sale_order, self).action_cancel(cr, uid, ids, context=context)
def action_wait(self, cr, uid, ids, context=None):
diff --git a/addons/sale_stock/test/picking_order_policy.yml b/addons/sale_stock/test/picking_order_policy.yml
index a28326598ac..406aaf0bf8a 100644
--- a/addons/sale_stock/test/picking_order_policy.yml
+++ b/addons/sale_stock/test/picking_order_policy.yml
@@ -133,8 +133,9 @@
-
!python {model: sale.order}: |
so = self.browse(cr, uid, ref("sale.sale_order_6"))
+ account_invoice_obj = self.pool.get('account.invoice')
for invoice in so.invoice_ids:
- self.pool.get('account.invoice').signal_invoice_open(cr, uid, [invoice.id])
+ account_invoice_obj.signal_invoice_open(cr, uid, [invoice.id])
-
I pay the invoice
-
From 8d5340a27d818929a7ce3e008cff7328ac0d260d Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Fri, 1 Feb 2013 17:50:15 +0100
Subject: [PATCH 104/253] [IMP] fix a typo, even if it doesn't matter (odo
would probably say something like 'stop acting nitpicky !' ;))
bzr revid: abo@openerp.com-20130201165015-l3dtvil3u59kqzf7
---
openerp/tests/addons/test_exceptions/models.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/openerp/tests/addons/test_exceptions/models.py b/openerp/tests/addons/test_exceptions/models.py
index 45f0e6dbd47..03788159bf8 100644
--- a/openerp/tests/addons/test_exceptions/models.py
+++ b/openerp/tests/addons/test_exceptions/models.py
@@ -29,5 +29,5 @@ class m(openerp.osv.osv.Model):
raise Exception('AccessDenied')
def generate_undefined(self, cr, uid, ids, context=None):
- self.surely_undefined_sumbol
+ self.surely_undefined_symbol
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
From 195be49479f93239849cd18c8807425e1fc983e7 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Fri, 1 Feb 2013 18:17:42 +0100
Subject: [PATCH 105/253] [IMP] add a new test for the new exception type
bzr revid: abo@openerp.com-20130201171742-axfcg7y99uxpersw
---
openerp/exceptions.py | 2 ++
openerp/tests/addons/test_exceptions/models.py | 4 ++++
openerp/tests/addons/test_exceptions/view.xml | 4 ++++
3 files changed, 10 insertions(+)
diff --git a/openerp/exceptions.py b/openerp/exceptions.py
index 46f0a29b1e0..41fff85010c 100644
--- a/openerp/exceptions.py
+++ b/openerp/exceptions.py
@@ -25,6 +25,8 @@ This module defines a few exception types. Those types are understood by the
RPC layer. Any other exception type bubbling until the RPC layer will be
treated as a 'Server error'.
+If you consider introducing new exceptions, check out the test_exceptions
+addon.
"""
class Warning(Exception):
diff --git a/openerp/tests/addons/test_exceptions/models.py b/openerp/tests/addons/test_exceptions/models.py
index 03788159bf8..78f0e182b48 100644
--- a/openerp/tests/addons/test_exceptions/models.py
+++ b/openerp/tests/addons/test_exceptions/models.py
@@ -19,6 +19,9 @@ class m(openerp.osv.osv.Model):
def generate_warning(self, cr, uid, ids, context=None):
raise openerp.exceptions.Warning('description')
+ def generate_redirect_warning(self, cr, uid, ids, context=None):
+ raise openerp.exceptions.RedirectWarning('description', self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'action_client_base_menu'), 'go to the redirection')
+
def generate_access_denied(self, cr, uid, ids, context=None):
raise openerp.exceptions.AccessDenied()
@@ -30,4 +33,5 @@ class m(openerp.osv.osv.Model):
def generate_undefined(self, cr, uid, ids, context=None):
self.surely_undefined_symbol
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/tests/addons/test_exceptions/view.xml b/openerp/tests/addons/test_exceptions/view.xml
index 180029e739a..0c8e373a278 100644
--- a/openerp/tests/addons/test_exceptions/view.xml
+++ b/openerp/tests/addons/test_exceptions/view.xml
@@ -21,6 +21,10 @@
+
+
+
+
From 85f6cb82390714e86b7b82e81afc0fee798eb7b6 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Mon, 4 Feb 2013 12:11:42 +0530
Subject: [PATCH 106/253] [IMP] POS: made some changes in code
bzr revid: cha@tinyerp.com-20130204064142-xivaomscssibwsb8
---
addons/point_of_sale/point_of_sale.py | 4 ++--
addons/point_of_sale/wizard/pos_confirm.py | 2 +-
addons/point_of_sale/wizard/pos_payment.py | 2 +-
addons/point_of_sale/wizard/pos_return.py | 6 +++---
4 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py
index 9b9e5b951b4..7687ee3aa4e 100644
--- a/addons/point_of_sale/point_of_sale.py
+++ b/addons/point_of_sale/point_of_sale.py
@@ -694,7 +694,7 @@ class pos_order(osv.osv):
if line.qty < 0:
location_id, output_id = output_id, location_id
- self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id])
+ picking_obj.signal_button_confirm(cr, uid, [picking_id])
picking_obj.force_assign(cr, uid, [picking_id], context)
return True
@@ -704,7 +704,7 @@ class pos_order(osv.osv):
"""
stock_picking_obj = self.pool.get('stock.picking')
for order in self.browse(cr, uid, ids, context=context):
- self.pool.get('stock.picking').signal_button_cancel(cr, uid, [order.picking_id.id])
+ stock_picking_obj.signal_button_cancel(cr, uid, [order.picking_id.id])
if stock_picking_obj.browse(cr, uid, order.picking_id.id, context=context).state <> 'cancel':
raise osv.except_osv(_('Error!'), _('Unable to cancel the picking.'))
self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
diff --git a/addons/point_of_sale/wizard/pos_confirm.py b/addons/point_of_sale/wizard/pos_confirm.py
index ebc432a846f..f37bdd9f8b8 100644
--- a/addons/point_of_sale/wizard/pos_confirm.py
+++ b/addons/point_of_sale/wizard/pos_confirm.py
@@ -36,7 +36,7 @@ class pos_confirm(osv.osv_memory):
todo = False
break
if todo:
- self.pool.get('pos.order').signal_done(cr, uid, [order.id])
+ order_obj.signal_done(cr, uid, [order.id])
# Check if there is orders to reconcile their invoices
ids = order_obj.search(cr, uid, [('state','=','invoiced'),('invoice_id.state','=','open')], context=context)
diff --git a/addons/point_of_sale/wizard/pos_payment.py b/addons/point_of_sale/wizard/pos_payment.py
index 5f90f267f7e..47814761b20 100644
--- a/addons/point_of_sale/wizard/pos_payment.py
+++ b/addons/point_of_sale/wizard/pos_payment.py
@@ -66,7 +66,7 @@ class pos_make_payment(osv.osv_memory):
order_obj.add_payment(cr, uid, active_id, data, context=context)
if order_obj.test_paid(cr, uid, [active_id]):
- self.pool.get('pos.order').signal_paid(cr, uid, [active_id])
+ order_obj.signal_paid(cr, uid, [active_id])
return {'type' : 'ir.actions.act_window_close' }
##self.print_report(cr, uid, ids, context=context)
diff --git a/addons/point_of_sale/wizard/pos_return.py b/addons/point_of_sale/wizard/pos_return.py
index f711a2e56ee..b4e0e7b2041 100644
--- a/addons/point_of_sale/wizard/pos_return.py
+++ b/addons/point_of_sale/wizard/pos_return.py
@@ -155,7 +155,7 @@ class pos_return(osv.osv_memory):
'amount': -amount,
})
order_obj.write(cr,uid, [active_id,new_order], {'state': 'done'})
- self.pool.get('stock.picking').signal_button_confirm(cr, uid, [new_picking])
+ picking_obj.signal_button_confirm(cr, uid, [new_picking])
picking_obj.force_assign(cr, uid, [new_picking], context)
act = {
'domain': "[('id', 'in', ["+str(new_order)+"])]",
@@ -229,7 +229,7 @@ class add_product(osv.osv_memory):
'date':date_cur
})
- self.pool.get('stock.picking').signal_button_confirm(cr, uid, [new_picking])
+ picking_obj.signal_button_confirm(cr, uid, [new_picking])
picking_obj.force_assign(cr, uid, [new_picking], context)
order_obj.write(cr,uid,active_id,{'picking_id':new_picking})
@@ -302,7 +302,7 @@ class add_product(osv.osv_memory):
'name':'%s (return)' % order_id.name,
'date':date_cur,
})
- self.poolget('stock.picking').signal_button_confirm(cr, uid, [new_picking])
+ picking_obj.signal_button_confirm(cr, uid, [new_picking])
picking_obj.force_assign(cr, uid, [new_picking], context)
obj=order_obj.browse(cr,uid, active_ids[0])
context.update({'return':'return'})
From f33d11f0a46a15ed2b8c3e82f523b1dd2d641366 Mon Sep 17 00:00:00 2001
From: "Ajay Chauhan (OpenERP)"
Date: Mon, 4 Feb 2013 12:45:26 +0530
Subject: [PATCH 107/253] [IMP] sale_stock: made some changes in code
bzr revid: cha@tinyerp.com-20130204071526-6ey9lfunu4mbnjhn
---
addons/sale_stock/sale_stock.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py
index b121bf425b6..95404ec0a93 100644
--- a/addons/sale_stock/sale_stock.py
+++ b/addons/sale_stock/sale_stock.py
@@ -207,7 +207,7 @@ class sale_order(osv.osv):
for mov in pick.move_lines:
proc_ids = proc_obj.search(cr, uid, [('move_id', '=', mov.id)])
if proc_ids:
- self.pool.get('procurement.order').signal_button_check(cr, uid, proc_ids)
+ proc_obj.signal_button_check(cr, uid, proc_ids)
stock_obj = self.pool.get('stock.picking')
for r in self.read(cr, uid, ids, ['picking_ids']):
stock_obj.signal_button_cancel(cr, uid, r['picking_ids'])
@@ -394,8 +394,8 @@ class sale_order(osv.osv):
self.ship_recreate(cr, uid, order, line, move_id, proc_id)
if picking_id:
- self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id])
- self.pool.get('procurement.order').signal_button_confirm(cr, uid, proc_ids)
+ picking_obj.signal_button_confirm(cr, uid, [picking_id])
+ procurement_obj.signal_button_confirm(cr, uid, proc_ids)
val = {}
if order.state == 'shipping_except':
From b4aedf0cc65a2ceb4501619652bf2cdd11fce3b2 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Mon, 4 Feb 2013 17:59:03 +0100
Subject: [PATCH 108/253] [FIX] cron: Looping over all existing databases seems
a bad idea (when -d is not given on the command-line).
bzr revid: vmt@openerp.com-20130204165903-gzjghbg7bgjqn5jy
---
openerp/service/workers.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/openerp/service/workers.py b/openerp/service/workers.py
index 3e8df86fede..870aae7fe9d 100644
--- a/openerp/service/workers.py
+++ b/openerp/service/workers.py
@@ -141,7 +141,8 @@ class Multicorn(object):
def process_spawn(self):
while len(self.workers_http) < self.population:
self.worker_spawn(WorkerHTTP, self.workers_http)
- while len(self.workers_cron) < config['max_cron_threads']:
+ while len(self.workers_cron) < config['max_cron_threads'] \
+ and config['db_name']:
self.worker_spawn(WorkerCron, self.workers_cron)
while len(self.workers_longpolling) < 1:
self.worker_spawn(WorkerLongPolling, self.workers_longpolling)
@@ -393,7 +394,7 @@ class WorkerCron(Worker):
if config['db_name']:
db_names = config['db_name'].split(',')
else:
- db_names = openerp.netsvc.ExportService._services['db'].exp_list(True)
+ db_names = []
for db_name in db_names:
if rpc_request_flag:
start_time = time.time()
From 6b459a1f279bc9568737ad75ac274facf76f29d4 Mon Sep 17 00:00:00 2001
From: Vo Minh Thu
Date: Wed, 6 Feb 2013 16:02:44 +0100
Subject: [PATCH 109/253] [DOC] orm: documented workflow-related methods.
bzr revid: vmt@openerp.com-20130206150244-hs67hhe35okl42ei
---
doc/index.rst | 1 +
doc/orm-methods.rst | 51 +++++++++++++++++++++++++++++++++++++++++++++
doc/workflows.rst | 13 ------------
openerp/osv/orm.py | 7 +++++++
4 files changed, 59 insertions(+), 13 deletions(-)
create mode 100644 doc/orm-methods.rst
delete mode 100644 doc/workflows.rst
diff --git a/doc/index.rst b/doc/index.rst
index 33474e2da57..0040394a789 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -34,6 +34,7 @@ OpenERP Server API
.. toctree::
:maxdepth: 1
+ orm-methods.rst
api_models.rst
Concepts
diff --git a/doc/orm-methods.rst b/doc/orm-methods.rst
new file mode 100644
index 00000000000..6085a12c50b
--- /dev/null
+++ b/doc/orm-methods.rst
@@ -0,0 +1,51 @@
+.. _orm-methods:
+
+ORM methods
+===========
+
+.. _orm-workflows:
+
+Workflow-related methods
+------------------------
+
+.. versionadded:: 7.1
+
+Creating, deleting, or otherwise manipulating workflow instances is possible
+right from a Model instance. (Previously, workflows were handled throught a
+call to ``LocalService('workflow')``. Using the ORM methods is now the preferred
+way.)
+
+.. currentmodule:: openerp.osv.orm
+
+.. automethod:: BaseModel.create_workflow
+ :noindex:
+
+ This is used instead of ``LocalService('workflow').trg_create()``.
+
+.. automethod:: BaseModel.delete_workflow
+ :noindex:
+
+ This is used instead of ``LocalService('workflow').trg_delete()``.
+
+.. automethod:: BaseModel.redirect_workflow
+ :noindex:
+
+.. method:: BaseModel.signal_xxx(cr, uid, ids)
+ :noindex:
+
+ Sends a signal ``xxx`` to the workflow instances bound to the given record
+ IDs. (This is implemented using ``__getattr__`` so no source link is
+ rendered on the right.)
+
+ This is used instead of ``LocalService('workflow').trg_validate()``.
+
+
+.. note::
+ Low-level access to the workflows is still possible by using the
+ ``openerp.workflow`` module, that is, in a similar way to what was possible
+ with the previous ``LocalService('workflow')`` access. This may be useful
+ when looking-up a model in the registry and/or its records is not necessary.
+ For instance when working with raw model names and record IDs is preferred (to
+ avoid hitting unnecessarily the database). But this is something that should be
+ carefully considered as it would bypass the ORM methods (and thus any inherited
+ behaviors).
diff --git a/doc/workflows.rst b/doc/workflows.rst
deleted file mode 100644
index 61a58575c9b..00000000000
--- a/doc/workflows.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. _workflows:
-
-Workflows
-=========
-
-- Low-level workflow functions (i.e. the openerp.workflow "service").
- Useful when looking-up a model and its records is not necessary, i.e. when
- working with raw model name and record ids is preferred (less hit to the
- database). Cannot really be used as it would bypass the ORM methods.
-- Model-level (ORM) methods.
-- XML-RPC endpoint and methods.
-
-- Blah Model.signal_xxxx()
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index 64b44d9e743..5255792800e 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -3929,18 +3929,25 @@ class BaseModel(object):
return result
def create_workflow(self, cr, uid, ids):
+ """Create a workflow instance for each given record IDs."""
wf_service = netsvc.LocalService("workflow")
for res_id in ids:
wf_service.trg_create(uid, self._name, res_id, cr)
return True
def delete_workflow(self, cr, uid, ids):
+ """Delete the workflow instances bound to the given record IDs."""
wf_service = netsvc.LocalService("workflow")
for res_id in ids:
wf_service.trg_create(uid, self._name, res_id, cr)
return True
def redirect_workflow(self, cr, uid, old_new_ids):
+ """
+ Rebind the workflow instance bound to the given 'old' record IDs to
+ the given 'new' IDs. (``old_new_ids`` is a list of pairs
+ ``(old, new)``.
+ """
wf_service = netsvc.LocalService("workflow")
for old_id, new_id in old_new_ids:
wf_service.trg_redirect(uid, self._name, old_id, new_id, cr)
From cfcc0e2205edbd78ef4484413ac5db7df52559a7 Mon Sep 17 00:00:00 2001
From: Fabien Meghazi
Date: Mon, 11 Feb 2013 15:10:56 +0100
Subject: [PATCH 110/253] [FIX] use active_id in url states
bzr revid: fme@openerp.com-20130211141056-zjn7xy034r2331gp
---
addons/web/static/src/js/views.js | 46 ++++++++++++++++++++++++-------
1 file changed, 36 insertions(+), 10 deletions(-)
diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js
index 04984f5eefd..247304e41b8 100644
--- a/addons/web/static/src/js/views.js
+++ b/addons/web/static/src/js/views.js
@@ -190,6 +190,14 @@ instance.web.ActionManager = instance.web.Widget.extend({
});
state = _.extend(params || {}, state);
}
+ if (this.inner_action.context) {
+ if (this.inner_action.context.active_id) {
+ state["active_id"] = this.inner_action.context.active_id;
+ }
+ if (this.inner_action.context.active_ids) {
+ state["active_ids"] = this.inner_action.context.active_ids.toString();
+ }
+ }
}
if(!this.dialog) {
this.getParent().do_push_state(state);
@@ -212,8 +220,15 @@ instance.web.ActionManager = instance.web.Widget.extend({
} else {
var run_action = (!this.inner_widget || !this.inner_widget.action) || this.inner_widget.action.id !== state.action;
if (run_action) {
+ var add_context = {};
+ if (state.active_id) {
+ add_context.active_id = state.active_id;
+ }
+ if (state.active_ids) {
+ add_context.active_ids = state.active_ids.toString().split(',');
+ }
this.null_action();
- action_loaded = this.do_action(state.action);
+ action_loaded = this.do_action(state.action, { additional_context: add_context });
$.when(action_loaded || null).done(function() {
instance.webclient.menu.has_been_loaded.done(function() {
if (self.inner_action && self.inner_action.id) {
@@ -249,12 +264,25 @@ instance.web.ActionManager = instance.web.Widget.extend({
}
});
},
+ /**
+ * Execute an OpenERP action
+ *
+ * @param {Number|String|Object} Can be either an action id, a client action or an action descriptor.
+ * @param {Object} [options]
+ * @param {Boolean} [options.clear_breadcrumbs=false] Clear the breadcrumbs history list
+ * @param {Function} [options.on_reverse_breadcrumb] Callback to be executed whenever an anterior breadcrumb item is clicked on.
+ * @param {Function} [options.on_close] Callback to be executed when the dialog is closed (only relevant for target=new actions)
+ * @param {Function} [options.action_menu_id] Manually set the menu id on the fly.
+ * @param {Object} [options.additional_context] Additional context to be merged with the action's context.
+ * @return {jQuery.Deferred} Action loaded
+ */
do_action: function(action, options) {
options = _.defaults(options || {}, {
clear_breadcrumbs: false,
on_reverse_breadcrumb: function() {},
on_close: function() {},
action_menu_id: null,
+ additional_context: {},
});
if (action === false) {
action = { type: 'ir.actions.act_window_close' };
@@ -269,15 +297,13 @@ instance.web.ActionManager = instance.web.Widget.extend({
}
// Ensure context & domain are evaluated and can be manipulated/used
- if (action.context) {
- action.context = instance.web.pyeval.eval(
- 'context', action.context);
- if (action.context.active_id || action.context.active_ids) {
- // Here we assume that when an `active_id` or `active_ids` is used
- // in the context, we are in a `related` action, so we disable the
- // searchview's default custom filters.
- action.context.search_disable_custom_filters = true;
- }
+ var ncontext = new instance.web.CompoundContext(options.additional_context, action.context || {});
+ action.context = instance.web.pyeval.eval('context', ncontext);
+ if (action.context.active_id || action.context.active_ids) {
+ // Here we assume that when an `active_id` or `active_ids` is used
+ // in the context, we are in a `related` action, so we disable the
+ // searchview's default custom filters.
+ action.context.search_disable_custom_filters = true;
}
if (action.domain) {
action.domain = instance.web.pyeval.eval(
From 8d748498fb1013f9a07700b8c3bb7f2b27ba522b Mon Sep 17 00:00:00 2001
From: Fabien Meghazi
Date: Mon, 11 Feb 2013 15:42:41 +0100
Subject: [PATCH 111/253] [FIX] active_ids list items should be numeric
bzr revid: fme@openerp.com-20130211144241-zvygwtgvsk17szo4
---
addons/web/static/src/js/views.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js
index 247304e41b8..a729a57b7d2 100644
--- a/addons/web/static/src/js/views.js
+++ b/addons/web/static/src/js/views.js
@@ -225,7 +225,9 @@ instance.web.ActionManager = instance.web.Widget.extend({
add_context.active_id = state.active_id;
}
if (state.active_ids) {
- add_context.active_ids = state.active_ids.toString().split(',');
+ add_context.active_ids = state.active_ids.toString().split(',').map(function(id) {
+ return parseInt(id, 10);
+ });
}
this.null_action();
action_loaded = this.do_action(state.action, { additional_context: add_context });
From 8d853758355bb8ebc2192d8e373272dead7d436b Mon Sep 17 00:00:00 2001
From: Fabien Meghazi
Date: Tue, 12 Feb 2013 12:57:40 +0100
Subject: [PATCH 112/253] [IMP] Improved code and doc
bzr revid: fme@openerp.com-20130212115740-riqecuhb1zq22dkq
---
addons/web/static/src/js/views.js | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js
index a729a57b7d2..fbb1a2ec770 100644
--- a/addons/web/static/src/js/views.js
+++ b/addons/web/static/src/js/views.js
@@ -195,7 +195,7 @@ instance.web.ActionManager = instance.web.Widget.extend({
state["active_id"] = this.inner_action.context.active_id;
}
if (this.inner_action.context.active_ids) {
- state["active_ids"] = this.inner_action.context.active_ids.toString();
+ state["active_ids"] = this.inner_action.context.active_ids.join(',');
}
}
}
@@ -225,6 +225,9 @@ instance.web.ActionManager = instance.web.Widget.extend({
add_context.active_id = state.active_id;
}
if (state.active_ids) {
+ // The jQuery BBQ plugin does some parsing on values that are valid integers.
+ // It means that if there's only one item, it will do parseInt() on it,
+ // otherwise it will keep the comma seperated list as string.
add_context.active_ids = state.active_ids.toString().split(',').map(function(id) {
return parseInt(id, 10);
});
From ef7978efded7d853f1abab8edd9ddb7b4b1aa506 Mon Sep 17 00:00:00 2001
From: Fabien Meghazi
Date: Tue, 12 Feb 2013 14:18:52 +0100
Subject: [PATCH 113/253] [FIX] support virtual ids
bzr revid: fme@openerp.com-20130212131852-xuq4otkb9ooloc9u
---
addons/web/static/src/js/views.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js
index fbb1a2ec770..ad6569b2076 100644
--- a/addons/web/static/src/js/views.js
+++ b/addons/web/static/src/js/views.js
@@ -229,7 +229,8 @@ instance.web.ActionManager = instance.web.Widget.extend({
// It means that if there's only one item, it will do parseInt() on it,
// otherwise it will keep the comma seperated list as string.
add_context.active_ids = state.active_ids.toString().split(',').map(function(id) {
- return parseInt(id, 10);
+ var rid = parseInt(id, 10);
+ return rid || id;
});
}
this.null_action();
From 47959a688994849055372cc025536376ac84c7ba Mon Sep 17 00:00:00 2001
From: Fabien Meghazi
Date: Tue, 12 Feb 2013 14:30:25 +0100
Subject: [PATCH 114/253] [END] This is the end of the world
bzr revid: fme@openerp.com-20130212133025-544phlyp83gdabu6
---
addons/web/static/src/js/views.js | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js
index ad6569b2076..2cbd966b6bb 100644
--- a/addons/web/static/src/js/views.js
+++ b/addons/web/static/src/js/views.js
@@ -229,8 +229,7 @@ instance.web.ActionManager = instance.web.Widget.extend({
// It means that if there's only one item, it will do parseInt() on it,
// otherwise it will keep the comma seperated list as string.
add_context.active_ids = state.active_ids.toString().split(',').map(function(id) {
- var rid = parseInt(id, 10);
- return rid || id;
+ return parseInt(id, 10) || id;
});
}
this.null_action();
From f9f5b19fc2d08bdf72030ea14eb2779984466572 Mon Sep 17 00:00:00 2001
From: "dle@openerp.com" <>
Date: Tue, 12 Feb 2013 14:36:32 +0100
Subject: [PATCH 115/253] [FIX]stages with sequence 0 was regarded as canceled,
because of 0 meaned false. Replaced and assignment expression with if
bzr revid: dle@openerp.com-20130212133632-i1wqwo3jrwy07fvl
---
addons/crm/crm_lead.py | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py
index d5f90d8a653..c17948f3646 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -627,7 +627,10 @@ class crm_lead(base_stage, format_address, osv.osv):
opportunities = self.browse(cr, uid, ids, context=context)
sequenced_opps = []
for opportunity in opportunities:
- sequenced_opps.append((opportunity.stage_id and opportunity.stage_id.state != 'cancel' and opportunity.stage_id.sequence or 0, opportunity))
+ if opportunity.stage_id and opportunity.stage_id.state != 'cancel':
+ sequenced_opps.append((opportunity.stage_id.sequence, opportunity))
+ else:
+ sequenced_opps.append((-1, opportunity))
sequenced_opps.sort(key=lambda tup: tup[0], reverse=True)
opportunities = [opportunity for sequence, opportunity in sequenced_opps]
ids = [opportunity.id for opportunity in opportunities]
@@ -651,7 +654,7 @@ class crm_lead(base_stage, format_address, osv.osv):
section_stages = self.pool.get('crm.case.section').read(cr, uid, merged_data['section_id'], ['stage_ids'], context=context)
if merged_data.get('stage_id') not in section_stages['stage_ids']:
stages_sequences = self.pool.get('crm.case.stage').search(cr, uid, [('id','in',section_stages['stage_ids'])], order='sequence', limit=1, context=context)
- merged_data['stage_id'] = stages_sequences[0]
+ merged_data['stage_id'] = stages_sequences and stages_sequences[0] or False
# Write merged data into first opportunity
self.write(cr, uid, [highest.id], merged_data, context=context)
# Delete tail opportunities
From ce9421a130fe821e9828c264af59866adc193a13 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Tue, 12 Feb 2013 15:18:30 +0100
Subject: [PATCH 116/253] [FIX] remove useless asserts text
bzr revid: abo@openerp.com-20130212141830-m3vzarby99fob74e
---
openerp/addons/base/tests/test_res_lang.py | 26 +++++++++++-----------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/openerp/addons/base/tests/test_res_lang.py b/openerp/addons/base/tests/test_res_lang.py
index 325d1f72065..1206a1de831 100644
--- a/openerp/addons/base/tests/test_res_lang.py
+++ b/openerp/addons/base/tests/test_res_lang.py
@@ -7,20 +7,20 @@ class test_res_lang(common.TransactionCase):
def test_00_intersperse(self):
from openerp.addons.base.res.res_lang import intersperse
- assert intersperse("", []) == ("", 0), "Assert passed"
- assert intersperse("0", []) == ("0", 0), "Assert passed"
- assert intersperse("012", []) == ("012", 0), "Assert passed"
- assert intersperse("1", []) == ("1", 0), "Assert passed"
- assert intersperse("12", []) == ("12", 0), "Assert passed"
- assert intersperse("123", []) == ("123", 0), "Assert passed"
- assert intersperse("1234", []) == ("1234", 0), "Assert passed"
- assert intersperse("123456789", []) == ("123456789", 0), "Assert passed"
- assert intersperse("&ab%#@1", []) == ("&ab%#@1", 0), "Assert passed"
+ assert intersperse("", []) == ("", 0)
+ assert intersperse("0", []) == ("0", 0)
+ assert intersperse("012", []) == ("012", 0)
+ assert intersperse("1", []) == ("1", 0)
+ assert intersperse("12", []) == ("12", 0)
+ assert intersperse("123", []) == ("123", 0)
+ assert intersperse("1234", []) == ("1234", 0)
+ assert intersperse("123456789", []) == ("123456789", 0)
+ assert intersperse("&ab%#@1", []) == ("&ab%#@1", 0)
- assert intersperse("0", []) == ("0", 0), "Assert passed"
- assert intersperse("0", [1]) == ("0", 0), "Assert passed"
- assert intersperse("0", [2]) == ("0", 0), "Assert passed"
- assert intersperse("0", [200]) == ("0", 0), "Assert passed"
+ assert intersperse("0", []) == ("0", 0)
+ assert intersperse("0", [1]) == ("0", 0)
+ assert intersperse("0", [2]) == ("0", 0)
+ assert intersperse("0", [200]) == ("0", 0)
assert intersperse("12345678", [1], '.') == ('1234567.8', 1)
assert intersperse("12345678", [1], '.') == ('1234567.8', 1)
From 01392ddd8db5b61d56080a3793ff4962f9c0f8c2 Mon Sep 17 00:00:00 2001
From: Fabien Meghazi
Date: Tue, 12 Feb 2013 16:44:06 +0100
Subject: [PATCH 117/253] [FIX] Missing aggregates headers in kanban view
bzr revid: fme@openerp.com-20130212154406-zj8l9t7rw72vikv8
---
addons/web_kanban/static/src/js/kanban.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js
index f3169f3cfd3..164c4ea9798 100644
--- a/addons/web_kanban/static/src/js/kanban.js
+++ b/addons/web_kanban/static/src/js/kanban.js
@@ -233,7 +233,8 @@ instance.web_kanban.KanbanView = instance.web.View.extend({
self.grouped_by_m2o = (self.group_by_field.type === 'many2one');
self.$buttons.find('.oe_alternative').toggle(self.grouped_by_m2o);
self.$el.toggleClass('oe_kanban_grouped_by_m2o', self.grouped_by_m2o);
- var grouping = new instance.web.Model(self.dataset.model, context, domain).query().group_by(self.group_by);
+ var grouping_fields = self.group_by ? [self.group_by].concat(_.keys(self.aggregates)) : undefined;
+ var grouping = new instance.web.Model(self.dataset.model, context, domain).query().group_by(grouping_fields);
return $.when(grouping).done(function(groups) {
if (groups) {
self.do_process_groups(groups);
From ff80a156c26d395dd91ca4f17f788ee1ab433987 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Tue, 12 Feb 2013 17:03:02 +0100
Subject: [PATCH 118/253] [IMP] use a better xml id for the example
bzr revid: abo@openerp.com-20130212160302-6nty4c18wsiw62d4
---
openerp/tests/addons/test_exceptions/models.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/openerp/tests/addons/test_exceptions/models.py b/openerp/tests/addons/test_exceptions/models.py
index 78f0e182b48..2735b43f509 100644
--- a/openerp/tests/addons/test_exceptions/models.py
+++ b/openerp/tests/addons/test_exceptions/models.py
@@ -20,7 +20,7 @@ class m(openerp.osv.osv.Model):
raise openerp.exceptions.Warning('description')
def generate_redirect_warning(self, cr, uid, ids, context=None):
- raise openerp.exceptions.RedirectWarning('description', self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'action_client_base_menu'), 'go to the redirection')
+ raise openerp.exceptions.RedirectWarning('description', self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'menu_action_res_users'), 'go to the redirection')
def generate_access_denied(self, cr, uid, ids, context=None):
raise openerp.exceptions.AccessDenied()
From 6a88cc0f7b8a7dcc99aaae62135e45240ccddad0 Mon Sep 17 00:00:00 2001
From: Olivier Dony
Date: Tue, 12 Feb 2013 17:29:20 +0100
Subject: [PATCH 119/253] [FIX] auth_oauth_signup: do not attempt to signup
users for failed signings coming back from the oauth provider
See also auth_oauth/controllers/main.py:106
bzr revid: odo@openerp.com-20130212162920-5i0swgn4phqitg53
---
addons/auth_oauth_signup/res_users.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/addons/auth_oauth_signup/res_users.py b/addons/auth_oauth_signup/res_users.py
index 83400f7c008..495331124b1 100644
--- a/addons/auth_oauth_signup/res_users.py
+++ b/addons/auth_oauth_signup/res_users.py
@@ -36,6 +36,8 @@ class res_users(osv.Model):
login = super(res_users, self)._auth_oauth_signin(cr, uid, provider, validation, params, context=context)
except openerp.exceptions.AccessDenied:
+ if context and context.get('no_user_creation'):
+ return None
state = simplejson.loads(params['state'])
token = state.get('t')
oauth_uid = validation['user_id']
From 9d6a4205d0065d91d6ccec6b9042d03031cef817 Mon Sep 17 00:00:00 2001
From: Olivier Dony
Date: Tue, 12 Feb 2013 17:33:01 +0100
Subject: [PATCH 120/253] [FIX] auth_oauth: redirect to login page in case of
failure with an automatic oauth signin, but avoid destroying user session
bzr revid: odo@openerp.com-20130212163301-cnq949vr1h6hfvf5
---
addons/auth_oauth/controllers/main.py | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/addons/auth_oauth/controllers/main.py b/addons/auth_oauth/controllers/main.py
index f461a675a47..1c38f7f4eae 100644
--- a/addons/auth_oauth/controllers/main.py
+++ b/addons/auth_oauth/controllers/main.py
@@ -2,8 +2,10 @@ import functools
import logging
import simplejson
+import werkzeug.utils
from werkzeug.exceptions import BadRequest
+import openerp
from openerp import SUPERUSER_ID
import openerp.addons.web.http as oeweb
from openerp.addons.web.controllers.main import db_monodb, set_cookie_and_redirect, login_and_redirect
@@ -69,6 +71,13 @@ class OAuthController(oeweb.Controller):
# auth_signup is not installed
_logger.error("auth_signup not installed on database %s: oauth sign up cancelled." % (dbname,))
url = "/#action=login&oauth_error=1"
+ except openerp.exceptions.AccessDenied:
+ # oauth credentials not valid, user could be on a temporary session
+ _logger.info('OAuth2: access denied, redirect to main page in case a valid session exists, without setting cookies')
+ url = "/#action=login&oauth_error=3"
+ redirect = werkzeug.utils.redirect(url, 303)
+ redirect.autocorrect_location_header = False
+ return redirect
except Exception, e:
# signup error
_logger.exception("OAuth2: %s" % str(e))
From fd530ec981ef361a0e7f0fc403ef47aec972fefb Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Tue, 12 Feb 2013 17:53:18 +0100
Subject: [PATCH 121/253] [FIX] doc: the id of an action is a long, not an int
bzr revid: abo@openerp.com-20130212165318-joldqhz0apilwmsp
---
openerp/addons/base/res/res_config.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index 826c3d2b726..2dae5c7f865 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -594,7 +594,8 @@ class res_config_settings(osv.osv_memory):
def get_option_path(self, cr, uid, menu_xml_id, context=None):
"""
- Fetch the path to a specified configuration view.
+ Fetch the path to a specified configuration view and the action id
+ to access it.
:param string menu_xml_id: the xml id of the menuitem where the view
is located, structured as follows: module_name.menuitem_xml_id
@@ -602,7 +603,7 @@ class res_config_settings(osv.osv_memory):
:return tuple:
- t[0]: string: full path to the menuitem
(e.g.: "Settings/Configuration/Sales")
- - t[1]: int: id of the menuitem's action
+ - t[1]: long: id of the menuitem's action
"""
module_name, menu_xml_id = menu_xml_id.split('.')
dummy, menu_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module_name, menu_xml_id)
From dc94fc592c0ae251906d7d0344645272bec5866c Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Tue, 12 Feb 2013 17:57:06 +0100
Subject: [PATCH 122/253] [IMP] add a test for get_option_path()
bzr revid: abo@openerp.com-20130212165706-pohcwrvr2llhsaeo
---
openerp/addons/base/tests/__init__.py | 2 ++
openerp/addons/base/tests/test_res_config.py | 28 ++++++++++++++++++++
2 files changed, 30 insertions(+)
create mode 100644 openerp/addons/base/tests/test_res_config.py
diff --git a/openerp/addons/base/tests/__init__.py b/openerp/addons/base/tests/__init__.py
index 5023494172c..e54fc892282 100644
--- a/openerp/addons/base/tests/__init__.py
+++ b/openerp/addons/base/tests/__init__.py
@@ -3,6 +3,7 @@ import test_expression
import test_ir_attachment
import test_ir_values
import test_menu
+import test_res_config
import test_res_lang
import test_search
@@ -12,6 +13,7 @@ checks = [
test_ir_attachment,
test_ir_values,
test_menu,
+ test_res_config,
test_res_lang,
test_search,
]
diff --git a/openerp/addons/base/tests/test_res_config.py b/openerp/addons/base/tests/test_res_config.py
new file mode 100644
index 00000000000..17ba4918db8
--- /dev/null
+++ b/openerp/addons/base/tests/test_res_config.py
@@ -0,0 +1,28 @@
+import unittest2
+
+import openerp.tests.common as common
+
+class test_res_config(common.TransactionCase):
+
+ def setUp(self):
+ super(test_res_config, self).setUp()
+ self.res_config = self.registry('res.config.settings')
+ self.menu_xml_id = 'base.menu_action_res_users'
+
+ def test_00_get_option_path(self):
+ """ The get_option_path() should return a tuple containing a string and an integer """
+ res = self.res_config.get_option_path(self.cr, self.uid, self.menu_xml_id, context=None)
+
+ # Check types
+ self.assertTrue(isinstance(res, tuple)), "The result of get_option_path() should be a tuple (got %s)" % type(res)
+ self.assertTrue(len(res) == 2), "The tuple should contain 2 elements (got %s)" % len(res)
+ self.assertTrue(isinstance(res[0], basestring)), "The first element of the tuple should be a string (got %s)" % type(res[0])
+ self.assertTrue(isinstance(res[1], long)), "The second element of the tuple should be an long (got %s)" % type(res[1])
+
+ # Check returned values
+ module_name, menu_xml_id = self.menu_xml_id.split('.')
+ dummy, menu_id = self.registry('ir.model.data').get_object_reference(self.cr, self.uid, module_name, menu_xml_id)
+ ir_ui_menu = self.registry('ir.ui.menu').browse(self.cr, self.uid, menu_id, context=None)
+
+ self.assertTrue(res[0] == ir_ui_menu.complete_name), "Result mismatch: expected %s, got %s" % (ir_ui_menu.complete_name, res[0])
+ self.assertTrue(res[1] == ir_ui_menu.action.id), "Result mismatch: expected %s, got %s" % (ir_ui_menu.action.id, res[1])
From 0091477f127eca762a4711d0189cb82f41651cb0 Mon Sep 17 00:00:00 2001
From: Antonin Bourguignon
Date: Tue, 12 Feb 2013 19:07:36 +0100
Subject: [PATCH 123/253] [IMP] add a test for get_option_name()
bzr revid: abo@openerp.com-20130212180736-kwpqlouw27o6u6nz
---
openerp/addons/base/tests/test_res_config.py | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/openerp/addons/base/tests/test_res_config.py b/openerp/addons/base/tests/test_res_config.py
index 17ba4918db8..b1013bf18e8 100644
--- a/openerp/addons/base/tests/test_res_config.py
+++ b/openerp/addons/base/tests/test_res_config.py
@@ -8,6 +8,7 @@ class test_res_config(common.TransactionCase):
super(test_res_config, self).setUp()
self.res_config = self.registry('res.config.settings')
self.menu_xml_id = 'base.menu_action_res_users'
+ self.full_field_name = 'res.partner.lang'
def test_00_get_option_path(self):
""" The get_option_path() should return a tuple containing a string and an integer """
@@ -26,3 +27,16 @@ class test_res_config(common.TransactionCase):
self.assertTrue(res[0] == ir_ui_menu.complete_name), "Result mismatch: expected %s, got %s" % (ir_ui_menu.complete_name, res[0])
self.assertTrue(res[1] == ir_ui_menu.action.id), "Result mismatch: expected %s, got %s" % (ir_ui_menu.action.id, res[1])
+
+ def test_10_get_option_name(self):
+ """ The get_option_name() should return a string """
+ res = self.res_config.get_option_name(self.cr, self.uid, self.full_field_name, context=None)
+
+ # Check type
+ self.assertTrue(isinstance(res, basestring)), "The result of get_option_name() should be a basestring (got %s)" % type(res)
+
+ # Check returned value
+ model_name, field_name = self.full_field_name.rsplit('.', 1)
+ expected_value = self.registry(model_name).fields_get(self.cr, self.uid, allfields=[field_name], context=None)[field_name]['string']
+
+ self.assertTrue(res == expected_value), "Result mismatch: expected %s, got %s" % (res, expected_value)
From 8fdbf2a66b17aba5d96b3419c968c5f032d00527 Mon Sep 17 00:00:00 2001
From: Olivier Dony
Date: Tue, 12 Feb 2013 19:15:47 +0100
Subject: [PATCH 124/253] [FIX] edi: properly escape URL parameter for
import_url controller
lp bug: https://launchpad.net/bugs/1118601 fixed
bzr revid: odo@openerp.com-20130212181547-ktdklbz2msfkcw6h
---
addons/edi/controllers/main.py | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/addons/edi/controllers/main.py b/addons/edi/controllers/main.py
index 14cd97b3e62..7e27428b63b 100644
--- a/addons/edi/controllers/main.py
+++ b/addons/edi/controllers/main.py
@@ -1,4 +1,5 @@
import simplejson
+import urllib
import openerp.addons.web.http as openerpweb
import openerp.addons.web.controllers.main as webmain
@@ -14,11 +15,15 @@ class EDI(openerpweb.Controller):
modules_json = simplejson.dumps(modules)
js = "\n ".join('' % i for i in webmain.manifest_list(req, modules_str, 'js'))
css = "\n ".join(' ' % i for i in webmain.manifest_list(req, modules_str, 'css'))
+
+ # `url` may contain a full URL with a valid query string, we basically want to watch out for XML brackets and double-quotes
+ safe_url = urllib.quote_plus(url,':/?&;=')
+
return webmain.html_template % {
'js': js,
'css': css,
'modules': modules_json,
- 'init': 's.edi.edi_import("%s");' % url,
+ 'init': 's.edi.edi_import("%s");' % safe_url,
}
@openerpweb.jsonrequest
From ead19a73b21ec5c4f709065e0a061d3a9fba5862 Mon Sep 17 00:00:00 2001
From: Launchpad Translations on behalf of openerp <>
Date: Wed, 13 Feb 2013 05:22:01 +0000
Subject: [PATCH 125/253] Launchpad automatic translations update.
bzr revid: launchpad_translations_on_behalf_of_openerp-20130213052157-zdt86kcrn8mbwa23
bzr revid: launchpad_translations_on_behalf_of_openerp-20130213052201-hnwd7qjf3tesspnh
---
addons/account/i18n/mn.po | 208 +-
addons/account/i18n/tr.po | 6 +-
addons/account_asset/i18n/fr.po | 22 +-
addons/base_calendar/i18n/cs.po | 18 +-
addons/base_gengo/i18n/hr.po | 58 +-
addons/crm/i18n/tr.po | 2 +-
addons/crm_claim/i18n/tr.po | 2 +-
addons/crm_helpdesk/i18n/tr.po | 2 +-
addons/crm_partner_assign/i18n/tr.po | 2 +-
addons/delivery/i18n/fr.po | 10 +-
addons/document_page/i18n/fr.po | 8 +-
addons/hr/i18n/fr.po | 13 +-
addons/hr_evaluation/i18n/tr.po | 208 +-
addons/hr_holidays/i18n/tr.po | 256 +-
addons/hr_payroll/i18n/tr.po | 306 +--
addons/hr_recruitment/i18n/tr.po | 8 +-
addons/mail/i18n/hu.po | 155 +-
addons/mail/i18n/pl.po | 45 +-
addons/mrp/i18n/tr.po | 212 +-
addons/procurement/i18n/mn.po | 153 +-
addons/product/i18n/lo.po | 2479 ++++++++++++++++++
addons/project_timesheet/i18n/ro.po | 52 +-
addons/purchase_double_validation/i18n/ro.po | 20 +-
addons/resource/i18n/ro.po | 22 +-
addons/sale/i18n/fr.po | 14 +-
addons/sale_analytic_plans/i18n/ro.po | 10 +-
addons/sale_journal/i18n/ro.po | 16 +-
addons/sale_margin/i18n/ro.po | 10 +-
addons/sale_mrp/i18n/ro.po | 12 +-
addons/sale_order_dates/i18n/ro.po | 14 +-
addons/stock/i18n/mn.po | 16 +-
addons/subscription/i18n/ro.po | 12 +-
addons/web/i18n/hu.po | 8 +-
33 files changed, 3625 insertions(+), 754 deletions(-)
create mode 100644 addons/product/i18n/lo.po
diff --git a/addons/account/i18n/mn.po b/addons/account/i18n/mn.po
index ec689506b2d..b7b5092501c 100644
--- a/addons/account/i18n/mn.po
+++ b/addons/account/i18n/mn.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2013-02-12 05:15+0000\n"
+"PO-Revision-Date: 2013-02-13 04:11+0000\n"
"Last-Translator: gobi \n"
"Language-Team: Mongolian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-02-12 05:29+0000\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: account
@@ -1310,6 +1310,17 @@ msgid ""
"
\n"
" "
msgstr ""
+"\n"
+" Кассын бүртгэл үүсгэхээр бол дарна уу.\n"
+"
\n"
+" Кассын бүртгэл нь кассын журналын бичилтийг менежмент \n"
+" хийх боломжоор хангадаг. Энэ боломж нь кассын төлбөрийг \n"
+" өдөр тутамд хянаж, ажиглах хялбар аргыг олгодог.\n"
+" Мөнгөний хайрцаг дахь дэвсгэртүүдийг оруулж дараа нь\n"
+" мөнгөний хайрцагаас мөнгө гарах, орох болгонд хөтлөж бичүүлэх "
+"боломжтой.\n"
+"
\n"
+" "
#. module: account
#: model:account.account.type,name:account.data_account_type_bank
@@ -1369,6 +1380,9 @@ msgid ""
"The amount expressed in the secondary currency must be positif when journal "
"item are debit and negatif when journal item are credit."
msgstr ""
+"Хоёрдогч валютаар илэрхийлэгдэж байгаа дүн нь журналын бичилт дебит байгаа "
+"тохиолдолд эерэг тоо, журналын бичилт нь кредит байгаа тохиолдолд сөрөг тоо "
+"байх ёстой."
#. module: account
#: view:account.invoice.cancel:0
@@ -1740,7 +1754,7 @@ msgstr "Ангилалын код"
#. module: account
#: field:account.config.settings,company_footer:0
msgid "Bank accounts footer preview"
-msgstr ""
+msgstr "Банкны дансны хөлийн урьдчилсан харагдац"
#. module: account
#: selection:account.account,type:0
@@ -1850,6 +1864,19 @@ msgid ""
" \n"
" "
msgstr ""
+"\n"
+" Дансны шинэ төрөл үүсгэхдээ дарна.\n"
+"
\n"
+" Дансны төрөл нь данс журналуудад яаж хэрэглэгдэхийг \n"
+" тодорхойлоход хэрэглэгдэнэ. Дансны төрөлийн өндөрлөх арга "
+"нь\n"
+" жил тутам дансыг хэрхэн хаах аргыг тодорхойлно. Баланс болон "
+"\n"
+" Ашиг/Алдагдлын тайлангууд нь ангилал (ашиг/алдагдал эсвэл "
+"баланс)\n"
+" -г ашиглагадаг.\n"
+"
\n"
+" "
#. module: account
#: report:account.invoice:0
@@ -1939,6 +1966,8 @@ msgid ""
"The journal must have centralized counterpart without the Skipping draft "
"state option checked."
msgstr ""
+"Ноорог төлөвийг алгасахыг сонгохгүйгээр журнал нь төвлөрсөн эсрэгтэй талтай "
+"байж болохгүй."
#. module: account
#: code:addons/account/account_move_line.py:857
@@ -1962,6 +1991,9 @@ msgid ""
"Select a configuration package to setup automatically your\n"
" taxes and chart of accounts."
msgstr ""
+"Татвар болон дансыг автоматаар тохируулахын \n"
+" тулд тохиргооны багцыг "
+"сонгоно уу."
#. module: account
#: view:account.analytic.account:0
@@ -2087,6 +2119,12 @@ msgid ""
"useful because it enables you to preview at any time the tax that you owe at "
"the start and end of the month or quarter."
msgstr ""
+"Энэ меню нь нэхэмжлэл юм уу төлбөр дээр суурилан татварын тодорхойлолтыг "
+"хэвлэнэ. Санхүүгийн жилийн нэг юм уу хэд хэдэн мөчлөгийг сонгоно. Татварын "
+"тодорхойлолтонд шаардлагатай мэдээлэл нь нэхэмжлэлүүдээс (зарим улсын хувьд "
+"төлбөрүүдээс) OpenERP-р автоматаар үүсгэгдэнэ. Энэ өгөгдөл нь бодит "
+"хугацаанд шинэчлэгдэнэ. Энэ нь сарын эсвэл улиралын эхлэл төгсгөлд татварын "
+"өрийг урьдчилан харж хянах боломжийг олгодог тустай талтай."
#. module: account
#: code:addons/account/account.py:409
@@ -2157,6 +2195,16 @@ msgid ""
" \n"
" "
msgstr ""
+"\n"
+" Нийлүүлэгчийн нэхэмжлэлийг шинээр бүртгэхдээ дарна.\n"
+"
\n"
+" Худалдан авсан, хүлээн авсан зүйлсийн дагуух нийлүүлэгчийн\n"
+" нэхэмжлэлийг хянах боломжтой. Түүнчлэн OpenERP нь "
+"борлуулалтын \n"
+" захиалга болон талоноос ноорог нэхэмжлэлийг автоматаар \n"
+" үүсгэх боломжтой.\n"
+"
\n"
+" "
#. module: account
#: sql_constraint:account.move.line:0
@@ -2217,6 +2265,19 @@ msgid ""
" \n"
" "
msgstr ""
+"\n"
+" Банкны хуулга бүртгэхдээ дарна.\n"
+"
\n"
+" Банкны хуулга гэдэг нь өгсөн хугацаанд банкны харилцах\n"
+" данс дээр явагдсан бүх гүйлгээнүүд юм. Үүнийг банкнаас "
+"тогтмол\n"
+" хугацаанд хүлээн авдаг байх ёстой.\n"
+"
\n"
+" OpenERP нь хуулганы мөрийг борлуулалт эсвэл худалдан "
+"авалтын\n"
+" нэхэмжлэлтэй шууд тулгах боломжийг олгоно.\n"
+"
\n"
+" "
#. module: account
#: field:account.config.settings,currency_id:0
@@ -2687,6 +2748,10 @@ msgid ""
"amount greater than the total invoiced amount. In order to avoid rounding "
"issues, the latest line of your payment term must be of type 'balance'."
msgstr ""
+"Нэхэмжлэл үүсгэх боломжгүй.\n"
+"Төлбөрийн нөхцөл буруу тохируулагдсан байж болзошгүй байна. Тооцоолсон дүн "
+"нь нэхэмжилсэн дүнгээс их байна. Тоймлолтын асуудлаас зайлсхийхийн тулд "
+"төлбөрийн нөхцлийн хамгийн сүүлийн мөр нь 'баланс' төрөлтэй байх хэрэгтэй."
#. module: account
#: view:account.move:0
@@ -2868,6 +2933,19 @@ msgid ""
" \n"
" "
msgstr ""
+"\n"
+" Журнал бичилт үүсгэхдээ дарна.\n"
+"
\n"
+" Журналын бичилт нь хэд хэдэн журналын зүйлээс бүрдэнэ. \n"
+" Журналын зүйл бүр нь дебит эсвэл кредит гүйлгээ байна.\n"
+"
\n"
+" OpenERP нь санхүүгийн баримт бүрд нэг журналын бичилтийг \n"
+" автоматаар үүсгэдэг. Баримт нь: нэхэмжлэл, буцаалт, \n"
+" нийлүүлэгчийн төлбөр, банкны хуулга гэх мэт байж болно. \n"
+" Иймд журналын бичилтийг гараар хийх явдал нь зөвхөн \n"
+" бусад төрлийн тохиолдолд л хэрэглэгдэнэ.\n"
+"
\n"
+" "
#. module: account
#: help:account.invoice,payment_term:0
@@ -3081,6 +3159,21 @@ msgid ""
" \n"
" "
msgstr ""
+"\n"
+" Шинэ санхүүгийн жил үүсгэхдээ дарна.\n"
+"
\n"
+" Компанийн санхүүгийн жилээ өөрийн хэрэгцээнд нийцүүлэн \n"
+" үүсгэнэ. Санхүүгийн жил компаний санхүүгийн дансдыг \n"
+" тооцоолох хугацаа бөгөөд ихэвчлэн 12 сар байдаг. Санхүүгийн "
+"\n"
+" жил нь төгсөж байгаа хугацааныхаа жилээр ихэвчлэн "
+"нэрлэгддэг. \n"
+" Жишээлбэл санхүүгийн жил нь 2011 оны 11 сарын 30-нд дуусч \n"
+" байгаа бол 2010 оны 12 сарын 1-с 2011 оны 11 сарын 30-ны "
+"хоорондох \n"
+" хугацааг FY 2011 гэж нэрлэнэ.\n"
+"
\n"
+" "
#. module: account
#: view:account.common.report:0
@@ -3212,6 +3305,8 @@ msgid ""
"You need an Opening journal with centralisation checked to set the initial "
"balance."
msgstr ""
+"Эхлэлийн балансыг тохируулахын тулд Нээлтийн журнал танд хэрэгтэй бөгөөд "
+"төвлөрүүлсэн эсрэг талыг тэмдэглэсэн байх хэрэгтэй."
#. module: account
#: model:ir.actions.act_window,name:account.action_tax_code_list
@@ -3389,7 +3484,7 @@ msgstr "Шалгах баланс"
#: code:addons/account/account.py:431
#, python-format
msgid "Unable to adapt the initial balance (negative value)."
-msgstr ""
+msgstr "Эхлэлийн балансыг тохируулах боломжгүй (сөрөг утга)."
#. module: account
#: selection:account.invoice,type:0
@@ -3408,7 +3503,7 @@ msgstr "Санхүүгийн жил сонгох"
#: view:account.config.settings:0
#: view:account.installer:0
msgid "Date Range"
-msgstr ""
+msgstr "Огнооны Муж"
#. module: account
#: view:account.period:0
@@ -3460,7 +3555,7 @@ msgstr ""
#: code:addons/account/account.py:2630
#, python-format
msgid "There is no parent code for the template account."
-msgstr ""
+msgstr "Үлгэр дансанд эцэг код байхгүй байна"
#. module: account
#: help:account.chart.template,code_digits:0
@@ -3646,6 +3741,90 @@ msgid ""
"\n"
" "
msgstr ""
+"\n"
+"\n"
+"\n"
+"
Сайн байна уу ${object.partner_id.name},
\n"
+"\n"
+"
Танд шинэ нэхэмжлэл үүссэн байна:
\n"
+" \n"
+"
\n"
+" REFERENCES \n"
+" Нэхэмжлэлийн дугаар: ${object.number} \n"
+" Нэхэмжлэлийн дүн: ${object.amount_total} "
+"${object.currency_id.name} \n"
+" Нэхэмжлэлийн огноо: ${object.date_invoice} \n"
+" % if object.origin:\n"
+" Захиалгын код: ${object.origin} \n"
+" % endif\n"
+" % if object.user_id:\n"
+" Таны харилцах хаяг: ${object.user_id.name} \n"
+" % endif\n"
+"
\n"
+" \n"
+" % if object.paypal_url:\n"
+"
\n"
+"
Түүнчлэн шууд Paypal-р төлөх боломжтой:
\n"
+"
\n"
+" \n"
+" \n"
+" % endif\n"
+" \n"
+"
\n"
+"
Хэрэв танд ямарваа асуулт байгаа бол эргэлзэлгүй бидэнтэй холбогдоно "
+"уу.
\n"
+"
Биднийг сонгосон ${object.company_id.name or 'us'} танд "
+"баярлалаа!
\n"
+"
\n"
+"
\n"
+"
\n"
+"
\n"
+" ${object.company_id.name} \n"
+" \n"
+"
\n"
+"
\n"
+" % if object.company_id.street:\n"
+" ${object.company_id.street} \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} ${object.company_id.city} \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"
+" \n"
+" % if object.company_id.phone:\n"
+"
\n"
+" Phone: ${object.company_id.phone}\n"
+"
\n"
+" % endif\n"
+" % if object.company_id.website:\n"
+"
\n"
+" %endif\n"
+"
\n"
+"
\n"
+"
\n"
+" "
#. module: account
#: view:account.period:0
@@ -3800,6 +3979,8 @@ msgid ""
"centralized counterpart box in the related journal from the configuration "
"menu."
msgstr ""
+"Төвлөрсөн журнал дээр нэхэмжлэл үүсгэх боломжгүй. Тохиргооны менюгээс "
+"журналын төвлөрсөн эсрэг тал тэмдэглэгээг арилгана уу."
#. module: account
#: field:account.bank.statement,balance_start:0
@@ -3824,7 +4005,7 @@ msgstr "Мөчлөг хаах"
#: view:account.bank.statement:0
#: field:account.cashbox.line,subtotal_opening:0
msgid "Opening Subtotal"
-msgstr ""
+msgstr "Нээлтийн Дэд дүн"
#. module: account
#: constraint:account.move.line:0
@@ -3832,6 +4013,8 @@ msgid ""
"You cannot create journal items with a secondary currency without recording "
"both 'currency' and 'amount currency' field."
msgstr ""
+"Хоёрдогч валюттай журналын бичилтийг 'валют' болон 'валютын дүн' талбаруудыг "
+"сонгохгүйгээр үүсгэх боломжгүй."
#. module: account
#: field:account.financial.report,display_detail:0
@@ -3858,6 +4041,10 @@ msgid ""
"quotations with a button \"Pay with Paypal\" in automated emails or through "
"the OpenERP portal."
msgstr ""
+"Онлайн төлбөр (кредит карт гм) Paypal данс (email). Хэрэв та Paypal данс "
+"тохируулбал таны захиалагчид OpenERP-н порталаас автоматаар очсон имэйл дахь "
+"\"Paypal-р төлөх\" даруулыг дарж таны нэхэмжлэл болон үнийн саналын "
+"төлбөрийг хийх боломжтой."
#. module: account
#: code:addons/account/account_move_line.py:535
@@ -8471,7 +8658,7 @@ msgstr "Журналын бичилтүүд хүчингүй байна."
#. module: account
#: field:account.account.type,close_method:0
msgid "Deferral Method"
-msgstr "Хойшлогдсон Арга"
+msgstr "Өндөрлөх Арга"
#. module: account
#: model:process.node,note:account.process_node_electronicfile0
@@ -9349,6 +9536,9 @@ msgid ""
"You cannot select an account type with a deferral method different of "
"\"Unreconciled\" for accounts with internal type \"Payable/Receivable\"."
msgstr ""
+"Тохиргооны алдаа!\n"
+"\"Тулгагдахгүй\"-с ялгаатай өндөрлөх аргатай дотоод төрөл нь "
+"\"Өглөг/Авлага\" байх дансны төрөлийг сонгох боломжгүй."
#. module: account
#: field:account.config.settings,has_fiscal_year:0
@@ -9869,7 +10059,7 @@ msgstr "Өөр компаниудад хөдөлгөөн хийх боломжг
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_periodical_processing
msgid "Periodic Processing"
-msgstr ""
+msgstr "Тогтмол хугацааны боловсруулалт"
#. module: account
#: view:account.invoice.report:0
diff --git a/addons/account/i18n/tr.po b/addons/account/i18n/tr.po
index 412d0fce696..59b45bf69e1 100644
--- a/addons/account/i18n/tr.po
+++ b/addons/account/i18n/tr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2013-02-11 08:03+0000\n"
+"PO-Revision-Date: 2013-02-12 06:56+0000\n"
"Last-Translator: Ayhan KIZILTAN \n"
"Language-Team: OpenERP Türkiye Yerelleştirmesi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-02-12 05:29+0000\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
"X-Generator: Launchpad (build 16491)\n"
"Language: tr\n"
@@ -2186,7 +2186,7 @@ msgstr ""
" Tedarikçilerinizden gelen faturaları buradan "
"girebilirsiniz.\n"
" OpenERP tedarikçi faturalarınızı satınalma siparişlerinden\n"
-" veya teslimatlardan da otomatik olarak oluşturabilir.\n"
+" ya da makbuzlarından otomatik olarak oluşturabilir.\n"
" \n"
" "
diff --git a/addons/account_asset/i18n/fr.po b/addons/account_asset/i18n/fr.po
index 27008c02e93..9486c820337 100755
--- a/addons/account_asset/i18n/fr.po
+++ b/addons/account_asset/i18n/fr.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-12 09:04+0000\n"
+"Last-Translator: WANTELLET Sylvain \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: 2013-01-18 06:32+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: account_asset
#: view:account.asset.asset:0
@@ -148,7 +148,7 @@ msgstr "Il s'agit de la part non dépréciable de l'immobilisation."
#. module: account_asset
#: help:account.asset.asset,method_period:0
msgid "The amount of time between two depreciations, in months"
-msgstr ""
+msgstr "La durée entre deux amortissements, en mois"
#. module: account_asset
#: field:account.asset.depreciation.line,depreciation_date:0
@@ -266,6 +266,7 @@ msgstr "Modifier la durée"
#: help:account.asset.history,method_number:0
msgid "The number of depreciations needed to depreciate your asset"
msgstr ""
+"Le nombre d'amortissements nécessaire pour amortir votre immobilisation"
#. module: account_asset
#: view:account.asset.category:0
@@ -295,7 +296,7 @@ msgstr ""
#. module: account_asset
#: field:account.asset.depreciation.line,remaining_value:0
msgid "Next Period Depreciation"
-msgstr ""
+msgstr "Période d'amortissement suivante"
#. module: account_asset
#: help:account.asset.history,method_period:0
@@ -346,7 +347,7 @@ msgstr "Recherche une catérogie d'immobilisation"
#. module: account_asset
#: view:asset.modify:0
msgid "months"
-msgstr ""
+msgstr "mois"
#. module: account_asset
#: model:ir.model,name:account_asset.model_account_invoice_line
@@ -610,7 +611,7 @@ msgstr "Méthode d'amortissement"
#. module: account_asset
#: field:account.asset.depreciation.line,amount:0
msgid "Current Depreciation"
-msgstr ""
+msgstr "Amortissement courant"
#. module: account_asset
#: field:account.asset.asset,name:0
@@ -655,6 +656,11 @@ msgid ""
" * Linear: Calculated on basis of: Gross Value / Number of Depreciations\n"
" * Degressive: Calculated on basis of: Residual Value * Degressive Factor"
msgstr ""
+"Veuillez choisir la méthode pour calculer le montant des lignes "
+"d'amortissement.\n"
+" * Linéaire : Calculé sur la base de : Valeur brute / Nombre "
+"d'amortissements\n"
+" * Dégressif : Calculé sur la base de : Valeur résiduelle * Taux dégressif"
#. module: account_asset
#: field:account.asset.depreciation.line,move_check:0
diff --git a/addons/base_calendar/i18n/cs.po b/addons/base_calendar/i18n/cs.po
index 1c890d079fd..02184604710 100644
--- a/addons/base_calendar/i18n/cs.po
+++ b/addons/base_calendar/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-12-21 17:05+0000\n"
-"PO-Revision-Date: 2013-01-24 01:17+0000\n"
+"PO-Revision-Date: 2013-02-12 18:30+0000\n"
"Last-Translator: Radomil Urbánek \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: 2013-01-25 06:04+0000\n"
-"X-Generator: Launchpad (build 16445)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: base_calendar
#: selection:calendar.alarm,trigger_related:0
@@ -180,7 +180,7 @@ msgstr "Volno"
#. module: base_calendar
#: help:crm.meeting,message_unread:0
msgid "If checked new messages require your attention."
-msgstr ""
+msgstr "Pokud je zaškrtnuto, nové zprávy vyžadují vaši pozornost."
#. module: base_calendar
#: help:calendar.attendee,rsvp:0
@@ -405,7 +405,7 @@ msgstr "Organizátor"
#: field:calendar.todo,user_id:0
#: field:crm.meeting,user_id:0
msgid "Responsible"
-msgstr "Odopovědné"
+msgstr "Odpovědný"
#. module: base_calendar
#: view:calendar.event:0
@@ -1463,7 +1463,7 @@ msgstr "Den v týdnu"
#: code:addons/base_calendar/base_calendar.py:1008
#, python-format
msgid "Interval cannot be negative."
-msgstr ""
+msgstr "Rozsah nemůže být záporný."
#. module: base_calendar
#: field:calendar.event,byday:0
@@ -1532,7 +1532,7 @@ msgstr "Odeslal"
#: field:calendar.todo,sequence:0
#: field:crm.meeting,sequence:0
msgid "Sequence"
-msgstr "Přadí"
+msgstr "Pořadí"
#. module: base_calendar
#: help:calendar.event,alarm_id:0
@@ -1545,7 +1545,7 @@ msgstr "Nastavit upozornění, než nastane událost"
#: view:calendar.event:0
#: view:crm.meeting:0
msgid "Accept"
-msgstr "Přijmout"
+msgstr "Potvrdit"
#. module: base_calendar
#: selection:calendar.event,week_list:0
@@ -1572,7 +1572,7 @@ msgstr "Druhý"
#: field:calendar.attendee,availability:0
#: field:res.users,availability:0
msgid "Free/Busy"
-msgstr "Volno/Zaneprázdněn(a)"
+msgstr "Volný/Zaneprázdněný"
#. module: base_calendar
#: field:calendar.alarm,duration:0
diff --git a/addons/base_gengo/i18n/hr.po b/addons/base_gengo/i18n/hr.po
index 6192935ebdb..d8920123944 100644
--- a/addons/base_gengo/i18n/hr.po
+++ b/addons/base_gengo/i18n/hr.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-12 20:39+0000\n"
+"Last-Translator: Davor Bojkić \n"
"Language-Team: Croatian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-18 06:36+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: base_gengo
#: view:res.company:0
@@ -25,13 +25,13 @@ msgstr "Komentari prevoditelju"
#. module: base_gengo
#: field:ir.translation,job_id:0
msgid "Gengo Job ID"
-msgstr ""
+msgstr "ID Gengo zadatka"
#. module: base_gengo
#: code:addons/base_gengo/wizard/base_gengo_translations.py:114
#, python-format
msgid "This language is not supported by the Gengo translation services."
-msgstr ""
+msgstr "Ovaj jezik nije podržan od GENGO prevoditeljskih servera"
#. module: base_gengo
#: field:res.company,gengo_comment:0
@@ -51,7 +51,7 @@ msgstr ""
#. module: base_gengo
#: help:res.company,gengo_auto_approve:0
msgid "Jobs are Automatically Approved by Gengo."
-msgstr ""
+msgstr "Zadaci su automatski odobreni od GENGO-a."
#. module: base_gengo
#: field:base.gengo.translations,lang_id:0
@@ -61,13 +61,13 @@ msgstr "Jezik"
#. module: base_gengo
#: field:ir.translation,gengo_comment:0
msgid "Comments & Activity Linked to Gengo"
-msgstr ""
+msgstr "Komentari i aktivnosti povezani sa GENGO"
#. module: base_gengo
#: code:addons/base_gengo/wizard/base_gengo_translations.py:124
#, python-format
msgid "Gengo Sync Translation (Response)"
-msgstr ""
+msgstr "Sinhronizacija GENGO prijevoda (odaziv)"
#. module: base_gengo
#: code:addons/base_gengo/wizard/base_gengo_translations.py:72
@@ -76,11 +76,13 @@ msgid ""
"Gengo `Public Key` or `Private Key` are missing. Enter your Gengo "
"authentication parameters under `Settings > Companies > Gengo Parameters`."
msgstr ""
+"Gengo 'Javni ključ' ili ' Privatni ključ' nedostaju. Unesite Gengo "
+"autorizacijske podatke pod 'Postavke> Organizacije> Gengo postavke'."
#. module: base_gengo
#: selection:ir.translation,gengo_translation:0
msgid "Translation By Machine"
-msgstr ""
+msgstr "Prevelo računalo"
#. module: base_gengo
#: code:addons/base_gengo/wizard/base_gengo_translations.py:155
@@ -91,17 +93,21 @@ msgid ""
"--\n"
" Commented on %s by %s."
msgstr ""
+"%s\n"
+"\n"
+"--\n"
+" Komentirano dana %s od %s."
#. module: base_gengo
#: field:ir.translation,gengo_translation:0
msgid "Gengo Translation Service Level"
-msgstr ""
+msgstr "Nivo usluge Gengo prijevoda"
#. module: base_gengo
#: constraint:ir.translation:0
msgid ""
"The Gengo translation service selected is not supported for this language."
-msgstr ""
+msgstr "OdabraniGengo sustav prijevoda nije podržan za ovaj jezik."
#. module: base_gengo
#: selection:ir.translation,gengo_translation:0
@@ -114,16 +120,18 @@ msgid ""
"You can select here the service level you want for an automatic translation "
"using Gengo."
msgstr ""
+"Ovdje ožete odabrati nivo usluge koju želite koristiti kod automatskih "
+"prijevoda koristeći Gengo."
#. module: base_gengo
#: field:base.gengo.translations,restart_send_job:0
msgid "Restart Sending Job"
-msgstr ""
+msgstr "Ponavljanje slanja"
#. module: base_gengo
#: view:ir.translation:0
msgid "To Approve In Gengo"
-msgstr ""
+msgstr "Čeka odobrenje u Gengo"
#. module: base_gengo
#: view:res.company:0
@@ -144,7 +152,7 @@ msgstr "Gengo Javni ključ"
#: code:addons/base_gengo/wizard/base_gengo_translations.py:123
#, python-format
msgid "Gengo Sync Translation (Request)"
-msgstr ""
+msgstr "Sinkronizacija Gengo prijevoda (zahtjev)"
#. module: base_gengo
#: view:ir.translation:0
@@ -154,20 +162,20 @@ msgstr "Prijevodi"
#. module: base_gengo
#: field:res.company,gengo_auto_approve:0
msgid "Auto Approve Translation ?"
-msgstr ""
+msgstr "Automatski odobri prijevod?"
#. module: base_gengo
#: model:ir.actions.act_window,name:base_gengo.action_wizard_base_gengo_translations
#: model:ir.ui.menu,name:base_gengo.menu_action_wizard_base_gengo_translations
msgid "Gengo: Manual Request of Translation"
-msgstr ""
+msgstr "Gengo: ručni zahtjev za prijevodom"
#. module: base_gengo
#: code:addons/base_gengo/ir_translation.py:62
#: code:addons/base_gengo/wizard/base_gengo_translations.py:109
#, python-format
msgid "Gengo Authentication Error"
-msgstr ""
+msgstr "Gengo autorizacjska greška"
#. module: base_gengo
#: model:ir.model,name:base_gengo.model_res_company
@@ -181,6 +189,9 @@ msgid ""
"translation has to be approved to be uploaded in this system. You are "
"supposed to do that directly by using your Gengo Account"
msgstr ""
+"Napomena: Ako je status prijevoda 'U tijeku', to znači da prijevod mora biti "
+"odobren za dodavanje u sistem. To bi vi trebali direktno učiniti prijavom na "
+"svoj Gengo račun"
#. module: base_gengo
#: code:addons/base_gengo/wizard/base_gengo_translations.py:82
@@ -189,11 +200,13 @@ msgid ""
"Gengo connection failed with this message:\n"
"``%s``"
msgstr ""
+"Gengo veza je pukla sa sljedećom porukom:\n"
+"''%s''"
#. module: base_gengo
#: view:res.company:0
msgid "Gengo Parameters"
-msgstr ""
+msgstr "Gengo parametri"
#. module: base_gengo
#: view:base.gengo.translations:0
@@ -213,7 +226,7 @@ msgstr ""
#. module: base_gengo
#: view:ir.translation:0
msgid "Gengo Translation Service"
-msgstr ""
+msgstr "Servis Gengo prijevoda"
#. module: base_gengo
#: selection:ir.translation,gengo_translation:0
@@ -223,7 +236,7 @@ msgstr ""
#. module: base_gengo
#: view:base.gengo.translations:0
msgid "Gengo Request Form"
-msgstr ""
+msgstr "Forma Gengo zahtjeva"
#. module: base_gengo
#: code:addons/base_gengo/wizard/base_gengo_translations.py:114
@@ -237,6 +250,7 @@ msgid ""
"This comment will be automatically be enclosed in each an every request sent "
"to Gengo"
msgstr ""
+"Ovaj komentar će automatski biti uključen u svaki zahtjev poslan u Gengo"
#. module: base_gengo
#: view:base.gengo.translations:0
@@ -246,4 +260,4 @@ msgstr "Otkaži"
#. module: base_gengo
#: view:base.gengo.translations:0
msgid "or"
-msgstr ""
+msgstr "ili"
diff --git a/addons/crm/i18n/tr.po b/addons/crm/i18n/tr.po
index 52442eeaed7..21740059767 100644
--- a/addons/crm/i18n/tr.po
+++ b/addons/crm/i18n/tr.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-02-12 05:29+0000\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: crm
diff --git a/addons/crm_claim/i18n/tr.po b/addons/crm_claim/i18n/tr.po
index 6ea90e03f37..e9e25bd045c 100644
--- a/addons/crm_claim/i18n/tr.po
+++ b/addons/crm_claim/i18n/tr.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-02-12 05:29+0000\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: crm_claim
diff --git a/addons/crm_helpdesk/i18n/tr.po b/addons/crm_helpdesk/i18n/tr.po
index 35a8cbc5f8d..2840ffb4ae5 100644
--- a/addons/crm_helpdesk/i18n/tr.po
+++ b/addons/crm_helpdesk/i18n/tr.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-02-12 05:29+0000\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: crm_helpdesk
diff --git a/addons/crm_partner_assign/i18n/tr.po b/addons/crm_partner_assign/i18n/tr.po
index 966df3269fd..3665b5c6446 100644
--- a/addons/crm_partner_assign/i18n/tr.po
+++ b/addons/crm_partner_assign/i18n/tr.po
@@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-02-12 05:29+0000\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: crm_partner_assign
diff --git a/addons/delivery/i18n/fr.po b/addons/delivery/i18n/fr.po
index 1d073fafb78..ec342c92e8f 100644
--- a/addons/delivery/i18n/fr.po
+++ b/addons/delivery/i18n/fr.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
-"PO-Revision-Date: 2013-01-03 13:51+0000\n"
-"Last-Translator: Florian Hatat \n"
+"PO-Revision-Date: 2013-02-12 11:07+0000\n"
+"Last-Translator: WANTELLET Sylvain \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: 2013-01-18 06:40+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: delivery
#: report:sale.shipping:0
@@ -52,7 +52,7 @@ msgstr "Ligne du tarif de livraison"
#: field:stock.move,weight_uom_id:0
#: field:stock.picking,weight_uom_id:0
msgid "Unit of Measure"
-msgstr ""
+msgstr "Unité de mesure"
#. module: delivery
#: view:delivery.carrier:0
diff --git a/addons/document_page/i18n/fr.po b/addons/document_page/i18n/fr.po
index 3a7e548767f..08a88eb1579 100644
--- a/addons/document_page/i18n/fr.po
+++ b/addons/document_page/i18n/fr.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
-"PO-Revision-Date: 2013-01-30 10:30+0000\n"
+"PO-Revision-Date: 2013-02-12 08:21+0000\n"
"Last-Translator: WANTELLET Sylvain \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: 2013-01-31 05:17+0000\n"
-"X-Generator: Launchpad (build 16455)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: document_page
#: view:document.page:0
@@ -46,7 +46,7 @@ msgstr "Menu"
#: view:document.page:0
#: model:ir.model,name:document_page.model_document_page
msgid "Document Page"
-msgstr ""
+msgstr "Gestion documentaire de pages Web"
#. module: document_page
#: model:ir.actions.act_window,name:document_page.action_related_page_history
diff --git a/addons/hr/i18n/fr.po b/addons/hr/i18n/fr.po
index a391535170e..ccb4582906e 100644
--- a/addons/hr/i18n/fr.po
+++ b/addons/hr/i18n/fr.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2013-01-09 12:52+0000\n"
-"Last-Translator: Numérigraphe \n"
+"PO-Revision-Date: 2013-02-12 17:01+0000\n"
+"Last-Translator: David Halgand \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: 2013-01-18 06:43+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: hr
#: model:process.node,name:hr.process_node_openerpuser0
@@ -107,6 +107,8 @@ msgid ""
"This field holds the image used as photo for the employee, limited to "
"1024x1024px."
msgstr ""
+"Ce champ contient l'image originale utilisée comme photo pour l'employé, "
+"limitée à 1024x1024px."
#. module: hr
#: help:hr.config.settings,module_hr_holidays:0
@@ -301,6 +303,9 @@ msgid ""
"image, with aspect ratio preserved. Use this field anywhere a small image is "
"required."
msgstr ""
+"Photo de l'employé. Elle est automatiquement redimensionnée comme une image "
+"64x64px, le ratio est préservé. Ce champ est utilisé lorsqu'une petite image "
+"est nécessaire."
#. module: hr
#: field:hr.employee,birthday:0
diff --git a/addons/hr_evaluation/i18n/tr.po b/addons/hr_evaluation/i18n/tr.po
index 330cbe4420d..8d7daedb2f3 100644
--- a/addons/hr_evaluation/i18n/tr.po
+++ b/addons/hr_evaluation/i18n/tr.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2013-02-01 23:51+0000\n"
+"PO-Revision-Date: 2013-02-12 16:38+0000\n"
"Last-Translator: Ali Sağlam \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: 2013-02-02 05:59+0000\n"
-"X-Generator: Launchpad (build 16462)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,send_anonymous_manager:0
@@ -32,7 +32,7 @@ msgstr "Değerlendirmeye Başla"
#: view:hr.evaluation.report:0
#: view:hr_evaluation.plan:0
msgid "Group By..."
-msgstr "Grupla..."
+msgstr "Grupla İle..."
#. module: hr_evaluation
#: field:hr.evaluation.interview,request_id:0
@@ -60,7 +60,7 @@ msgstr ""
#: field:hr_evaluation.plan,company_id:0
#: field:hr_evaluation.plan.phase,company_id:0
msgid "Company"
-msgstr ""
+msgstr "Firma"
#. module: hr_evaluation
#: field:hr.evaluation.interview,evaluation_id:0
@@ -78,12 +78,12 @@ msgstr "Gün"
#: view:hr_evaluation.plan:0
#: field:hr_evaluation.plan,phase_ids:0
msgid "Appraisal Phases"
-msgstr "Değerlendirme aşamaları"
+msgstr "Değerlendirme Evreleri"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
msgid "Send Request"
-msgstr ""
+msgstr "İstek Gönder"
#. module: hr_evaluation
#: help:hr_evaluation.plan,month_first:0
@@ -96,18 +96,18 @@ msgstr ""
#: view:hr.employee:0
#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_hr_evaluation_tree
msgid "Appraisals"
-msgstr ""
+msgstr "Değerlendirmeler"
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "(eval_name)s:Appraisal Name"
-msgstr "Değerlendirme adı"
+msgstr "(eval_name)s:Değerlendirme Adı"
#. module: hr_evaluation
#: field:hr.evaluation.interview,message_ids:0
#: field:hr_evaluation.evaluation,message_ids:0
msgid "Messages"
-msgstr ""
+msgstr "Mesajlar"
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
@@ -117,18 +117,18 @@ msgstr ""
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,wait:0
msgid "Wait Previous Phases"
-msgstr ""
+msgstr "Önceki Evreleri Bekle"
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_evaluation
msgid "Employee Appraisal"
-msgstr "Çalışan Değerlendirme"
+msgstr "Personel Değerlendirme"
#. module: hr_evaluation
#: selection:hr.evaluation.report,state:0
#: selection:hr_evaluation.evaluation,state:0
msgid "Cancelled"
-msgstr ""
+msgstr "Vazgeçildi"
#. module: hr_evaluation
#: selection:hr.evaluation.report,rating:0
@@ -147,7 +147,7 @@ msgstr "Değerlendirme"
#: help:hr.evaluation.interview,message_unread:0
#: help:hr_evaluation.evaluation,message_unread:0
msgid "If checked new messages require your attention."
-msgstr ""
+msgstr "Eğer seçilirse yeni mesajlar dikkat gerektirir."
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
@@ -169,7 +169,7 @@ msgstr "Değerlendirme yeterli değilse yeni bir proses belirleyebilirsin"
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Send to Employees"
-msgstr "Değerlendirilen ile paylaş"
+msgstr "Personel Gönder"
#. module: hr_evaluation
#: code:addons/hr_evaluation/hr_evaluation.py:84
@@ -208,24 +208,24 @@ msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Reset to Draft"
-msgstr "Taslağı iptal et"
+msgstr "Taslağı Sıfırla"
#. module: hr_evaluation
#: field:hr.evaluation.report,deadline:0
msgid "Deadline"
-msgstr "Bitiş tarihi"
+msgstr "ZamanSınırı"
#. module: hr_evaluation
#: code:addons/hr_evaluation/hr_evaluation.py:235
#: code:addons/hr_evaluation/hr_evaluation.py:320
#, python-format
msgid "Warning!"
-msgstr ""
+msgstr "Uyarı!"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid "In progress Evaluations"
-msgstr "Değerlendirme durumu"
+msgstr "Değerlendirme DevamEdiyor"
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_survey_request
@@ -235,12 +235,12 @@ msgstr "İstek"
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "(date)s: Current Date"
-msgstr "Güncel Tarih"
+msgstr "(tarih)s: Güncel Tarih"
#. module: hr_evaluation
#: model:ir.actions.act_window,name:hr_evaluation.act_hr_employee_2_hr__evaluation_interview
msgid "Interviews"
-msgstr ""
+msgstr "Görüşme"
#. module: hr_evaluation
#: code:addons/hr_evaluation/hr_evaluation.py:83
@@ -252,13 +252,13 @@ msgstr "Hakkında "
#: field:hr.evaluation.interview,message_follower_ids:0
#: field:hr_evaluation.evaluation,message_follower_ids:0
msgid "Followers"
-msgstr ""
+msgstr "Takipçiler"
#. module: hr_evaluation
#: field:hr.evaluation.interview,message_unread:0
#: field:hr_evaluation.evaluation,message_unread:0
msgid "Unread Messages"
-msgstr ""
+msgstr "Okunmamış mesajlar"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
@@ -267,7 +267,7 @@ msgstr ""
#: field:hr_evaluation.evaluation,employee_id:0
#: model:ir.model,name:hr_evaluation.model_hr_employee
msgid "Employee"
-msgstr "Çalışan"
+msgstr "Personel"
#. module: hr_evaluation
#: selection:hr_evaluation.evaluation,state:0
@@ -321,7 +321,7 @@ msgstr "Hatırlatma e-posta gönder"
#: view:hr.evaluation.report:0
#: field:hr_evaluation.evaluation,rating:0
msgid "Appreciation"
-msgstr ""
+msgstr "Değerlenmesi"
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
@@ -331,7 +331,7 @@ msgstr "Mülakatı yazdır"
#. module: hr_evaluation
#: field:hr.evaluation.report,closed:0
msgid "closed"
-msgstr "kapalı"
+msgstr "kapandı"
#. module: hr_evaluation
#: selection:hr.evaluation.report,rating:0
@@ -343,7 +343,7 @@ msgstr "Beklentileri karşılıyor"
#: view:hr.evaluation.report:0
#: field:hr.evaluation.report,nbr:0
msgid "# of Requests"
-msgstr ""
+msgstr "# nın Talepleri"
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
@@ -357,7 +357,7 @@ msgstr "Temmuz"
#: view:hr_evaluation.evaluation:0
#: field:hr_evaluation.evaluation,state:0
msgid "Status"
-msgstr ""
+msgstr "Durumu"
#. module: hr_evaluation
#: model:ir.actions.act_window,name:hr_evaluation.action_evaluation_plans_installer
@@ -383,17 +383,17 @@ msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Action to Perform"
-msgstr ""
+msgstr "İşlemi Gerçekleştirin"
#. module: hr_evaluation
#: field:hr_evaluation.evaluation,note_action:0
msgid "Action Plan"
-msgstr ""
+msgstr "İşlem Planı"
#. module: hr_evaluation
#: model:ir.ui.menu,name:hr_evaluation.menu_eval_hr_config
msgid "Periodic Appraisal"
-msgstr ""
+msgstr "Periyodik Değerleme"
#. module: hr_evaluation
#: field:hr_evaluation.plan,month_next:0
@@ -404,60 +404,60 @@ msgstr ""
#: selection:hr.evaluation.report,rating:0
#: selection:hr_evaluation.evaluation,rating:0
msgid "Significantly exceeds expectations"
-msgstr ""
+msgstr "Önemli Ölçüde beklentileri aşıyor"
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "In progress"
-msgstr ""
+msgstr "DevamEden"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
msgid "Interview Request"
-msgstr ""
+msgstr "Görüşme İsteği"
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,send_answer_employee:0
#: field:hr_evaluation.plan.phase,send_answer_manager:0
msgid "All Answers"
-msgstr ""
+msgstr "Tüm Yanıtlar"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Answer Survey"
-msgstr ""
+msgstr "Anket Cevap"
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "September"
-msgstr ""
+msgstr "Eylül"
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "December"
-msgstr ""
+msgstr "Aralık"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: field:hr.evaluation.report,month:0
msgid "Month"
-msgstr ""
+msgstr "Ay"
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Group by..."
-msgstr ""
+msgstr "Grupla ile"
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Mail Settings"
-msgstr ""
+msgstr "Posta Ayarları"
#. module: hr_evaluation
#: model:ir.actions.act_window,name:hr_evaluation.evaluation_reminders
msgid "Appraisal Reminders"
-msgstr ""
+msgstr "Değerleme Hatırlatmaları"
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,wait:0
@@ -479,13 +479,13 @@ msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,state:0
msgid "Draft"
-msgstr ""
+msgstr "Taslak"
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,send_anonymous_employee:0
#: field:hr_evaluation.plan.phase,send_anonymous_manager:0
msgid "Anonymous Summary"
-msgstr ""
+msgstr "Anonim Özeti"
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
@@ -500,44 +500,44 @@ msgstr "Bekleyen"
#: field:hr_evaluation.plan.phase,plan_id:0
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_plan
msgid "Appraisal Plan"
-msgstr ""
+msgstr "Değerleme Planı"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
msgid "Print Survey"
-msgstr ""
+msgstr "Anket Yazdır"
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "August"
-msgstr ""
+msgstr "Ağustos"
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "June"
-msgstr ""
+msgstr "Haziran"
#. module: hr_evaluation
#: selection:hr.evaluation.report,rating:0
#: selection:hr_evaluation.evaluation,rating:0
msgid "Significantly bellow expectations"
-msgstr ""
+msgstr "Önemli Ölçüde beklentilerin altında"
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Validate Appraisal"
-msgstr ""
+msgstr "Değerleme Doğrulama"
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid " (employee_name)s: Partner name"
-msgstr ""
+msgstr " (employee_name)s: Partner adı"
#. module: hr_evaluation
#: field:hr.evaluation.interview,message_is_follower:0
#: field:hr_evaluation.evaluation,message_is_follower:0
msgid "Is a Follower"
-msgstr ""
+msgstr "Bir Takipçisi mi"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
@@ -545,22 +545,22 @@ msgstr ""
#: view:hr_evaluation.evaluation:0
#: field:hr_evaluation.evaluation,plan_id:0
msgid "Plan"
-msgstr ""
+msgstr "Plan"
#. module: hr_evaluation
#: field:hr_evaluation.plan,active:0
msgid "Active"
-msgstr ""
+msgstr "Etkin"
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "November"
-msgstr ""
+msgstr "Kasım"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid "Extended Filters..."
-msgstr ""
+msgstr "Genişletilmiş Filtreler ..."
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,send_anonymous_employee:0
@@ -570,82 +570,82 @@ msgstr "Çalışana genel bir değerlendirme özeti gönder"
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_plan_phase
msgid "Appraisal Plan Phase"
-msgstr ""
+msgstr "Değerleme Planı Evre"
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "January"
-msgstr ""
+msgstr "Ocak"
#. module: hr_evaluation
#: view:hr.employee:0
msgid "Appraisal Interviews"
-msgstr ""
+msgstr "Değerleme Görüşmeler"
#. module: hr_evaluation
#: field:hr.evaluation.interview,message_summary:0
#: field:hr_evaluation.evaluation,message_summary:0
msgid "Summary"
-msgstr ""
+msgstr "Özet"
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Date"
-msgstr ""
+msgstr "Tarih"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
msgid "Survey"
-msgstr ""
+msgstr "Anket"
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,action:0
msgid "Action"
-msgstr ""
+msgstr "İşlem"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: selection:hr.evaluation.report,state:0
msgid "Final Validation"
-msgstr ""
+msgstr "Final Onaylama"
#. module: hr_evaluation
#: selection:hr_evaluation.evaluation,state:0
msgid "Waiting Appreciation"
-msgstr ""
+msgstr "Bekleyen Değerlenme"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: model:ir.actions.act_window,name:hr_evaluation.action_evaluation_report_all
#: model:ir.ui.menu,name:hr_evaluation.menu_evaluation_report_all
msgid "Appraisal Analysis"
-msgstr ""
+msgstr "Değerleme Analizi"
#. module: hr_evaluation
#: field:hr_evaluation.evaluation,date:0
msgid "Appraisal Deadline"
-msgstr ""
+msgstr "Değerleme ZamanSınırı"
#. module: hr_evaluation
#: field:hr.evaluation.report,rating:0
msgid "Overall Rating"
-msgstr ""
+msgstr "Genel Derecelendirme"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Interviewer"
-msgstr ""
+msgstr "Görüşmeci"
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_report
msgid "Evaluations Statistics"
-msgstr ""
+msgstr "Değerlendirme İstatistikleri"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
msgid "Deadline Date"
-msgstr ""
+msgstr "ZamanSınırı Tarihi"
#. module: hr_evaluation
#: help:hr_evaluation.evaluation,rating:0
@@ -660,12 +660,12 @@ msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "General"
-msgstr ""
+msgstr "Genel"
#. module: hr_evaluation
#: help:hr_evaluation.plan.phase,send_answer_employee:0
msgid "Send all answers to the employee"
-msgstr ""
+msgstr "Personel tüm cevaplar gönder"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
@@ -674,40 +674,40 @@ msgstr ""
#: view:hr_evaluation.evaluation:0
#: selection:hr_evaluation.evaluation,state:0
msgid "Done"
-msgstr ""
+msgstr "Biten"
#. module: hr_evaluation
#: view:hr_evaluation.plan:0
#: model:ir.actions.act_window,name:hr_evaluation.open_view_hr_evaluation_plan_tree
#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_hr_evaluation_plan_tree
msgid "Appraisal Plans"
-msgstr ""
+msgstr "Değerleme Planlar"
#. module: hr_evaluation
#: model:ir.model,name:hr_evaluation.model_hr_evaluation_interview
msgid "Appraisal Interview"
-msgstr ""
+msgstr "Değerleme Görüşme"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Cancel"
-msgstr ""
+msgstr "İptal"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid "In Progress"
-msgstr ""
+msgstr "DevamEden"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
msgid "To Do"
-msgstr ""
+msgstr "Yapılacak"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
msgid "Final Validation Evaluations"
-msgstr ""
+msgstr "Final Onaylama Değerlendirmeleri"
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,mail_feature:0
@@ -722,7 +722,7 @@ msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "October"
-msgstr ""
+msgstr "Ekim"
#. module: hr_evaluation
#: help:hr.employee,evaluation_date:0
@@ -734,7 +734,7 @@ msgstr ""
#. module: hr_evaluation
#: field:hr.evaluation.report,overpass_delay:0
msgid "Overpassed Deadline"
-msgstr ""
+msgstr "ZamanSınırı Geçen"
#. module: hr_evaluation
#: help:hr_evaluation.plan,month_next:0
@@ -746,18 +746,18 @@ msgstr ""
#. module: hr_evaluation
#: selection:hr_evaluation.plan.phase,action:0
msgid "Self Appraisal Requests"
-msgstr ""
+msgstr "Öz Değerlendirme İstekleri"
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
#: field:hr_evaluation.evaluation,survey_request_ids:0
msgid "Appraisal Forms"
-msgstr ""
+msgstr "Değerleme Formları"
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "May"
-msgstr ""
+msgstr "Mayıs"
#. module: hr_evaluation
#: model:ir.actions.act_window,help:hr_evaluation.open_view_hr_evaluation_tree
@@ -780,17 +780,17 @@ msgstr ""
#. module: hr_evaluation
#: view:hr_evaluation.evaluation:0
msgid "Internal Notes"
-msgstr ""
+msgstr "Dahili not"
#. module: hr_evaluation
#: selection:hr_evaluation.plan.phase,action:0
msgid "Final Interview"
-msgstr ""
+msgstr "Nihai Görüşme"
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,name:0
msgid "Phase"
-msgstr ""
+msgstr "Evre"
#. module: hr_evaluation
#: selection:hr_evaluation.plan.phase,action:0
@@ -800,29 +800,29 @@ msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "February"
-msgstr ""
+msgstr "Şubat"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Interview Appraisal"
-msgstr ""
+msgstr "Görüşme Değerleme"
#. module: hr_evaluation
#: field:survey.request,is_evaluation:0
msgid "Is Appraisal?"
-msgstr ""
+msgstr "Değerleme mi?"
#. module: hr_evaluation
#: code:addons/hr_evaluation/hr_evaluation.py:320
#, python-format
msgid "You cannot start evaluation without Appraisal."
-msgstr ""
+msgstr "Sen Değerleme olmadan değerlendirilmesi başlatılamıyor."
#. module: hr_evaluation
#: field:hr.evaluation.interview,user_to_review_id:0
msgid "Employee to Interview"
-msgstr ""
+msgstr "Personel Görüşmesi"
#. module: hr_evaluation
#: code:addons/hr_evaluation/hr_evaluation.py:235
@@ -835,12 +835,12 @@ msgstr ""
#. module: hr_evaluation
#: selection:hr.evaluation.report,month:0
msgid "April"
-msgstr ""
+msgstr "Nisan"
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "Appraisal Plan Phases"
-msgstr ""
+msgstr "Değerleme Planının Evreleri"
#. module: hr_evaluation
#: model:ir.actions.act_window,help:hr_evaluation.action_hr_evaluation_interview_tree
@@ -862,23 +862,23 @@ msgstr ""
#: help:hr.evaluation.interview,message_ids:0
#: help:hr_evaluation.evaluation,message_ids:0
msgid "Messages and communication history"
-msgstr ""
+msgstr "Mesajlar ve iletişim geçmişi"
#. module: hr_evaluation
#: view:hr.evaluation.interview:0
#: view:hr_evaluation.evaluation:0
msgid "Search Appraisal"
-msgstr ""
+msgstr "Değerleme Arama"
#. module: hr_evaluation
#: field:hr_evaluation.plan.phase,sequence:0
msgid "Sequence"
-msgstr ""
+msgstr "Sıralama"
#. module: hr_evaluation
#: view:hr_evaluation.plan.phase:0
msgid "(user_signature)s: User name"
-msgstr ""
+msgstr "(user_signature)s: Kullanıcı adı"
#. module: hr_evaluation
#: view:board.board:0
@@ -886,25 +886,25 @@ msgstr ""
#: model:ir.actions.act_window,name:hr_evaluation.action_hr_evaluation_interview_tree
#: model:ir.ui.menu,name:hr_evaluation.menu_open_hr_evaluation_interview_requests
msgid "Interview Requests"
-msgstr ""
+msgstr "Görüşme İstekleri"
#. module: hr_evaluation
#: field:hr.evaluation.report,create_date:0
msgid "Create Date"
-msgstr ""
+msgstr "Oluşturma Tarihi"
#. module: hr_evaluation
#: view:hr.evaluation.report:0
#: field:hr.evaluation.report,year:0
msgid "Year"
-msgstr ""
+msgstr "Yıl"
#. module: hr_evaluation
#: field:hr_evaluation.evaluation,note_summary:0
msgid "Appraisal Summary"
-msgstr ""
+msgstr "Değerleme Özeti"
#. module: hr_evaluation
#: field:hr.employee,evaluation_date:0
msgid "Next Appraisal Date"
-msgstr ""
+msgstr "Sonraki Değerleme Tarihi"
diff --git a/addons/hr_holidays/i18n/tr.po b/addons/hr_holidays/i18n/tr.po
index 58aaafe5197..6d11b7b9a55 100644
--- a/addons/hr_holidays/i18n/tr.po
+++ b/addons/hr_holidays/i18n/tr.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-12 21:49+0000\n"
+"Last-Translator: Ediz Duman \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: 2013-01-18 06:45+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
@@ -25,7 +25,7 @@ msgstr "Mavi"
#. module: hr_holidays
#: field:hr.holidays,linked_request_ids:0
msgid "Linked Requests"
-msgstr ""
+msgstr "Linked İstekleri"
#. module: hr_holidays
#: selection:hr.employee,current_leave_state:0
@@ -39,6 +39,8 @@ msgid ""
"You cannot modify a leave request that has been approved. Contact a human "
"resource manager."
msgstr ""
+"Sen onaylanmış bir izin isteği değiştiremezsiniz. Bir insan İletişimkayank "
+"yöneticisi"
#. module: hr_holidays
#: help:hr.holidays.status,remaining_leaves:0
@@ -53,7 +55,7 @@ msgstr "İzinlerin Yönetimi"
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Group By..."
-msgstr "Gruplandır..."
+msgstr "Grupla İle..."
#. module: hr_holidays
#: field:hr.holidays,holiday_type:0
@@ -69,28 +71,28 @@ msgstr ""
#: view:hr.holidays:0
#: field:hr.holidays,department_id:0
msgid "Department"
-msgstr "Bölüm"
+msgstr "Departmen"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.request_approve_allocation
#: model:ir.ui.menu,name:hr_holidays.menu_request_approve_allocation
msgid "Allocation Requests to Approve"
-msgstr ""
+msgstr "Tahsis İstekleri Onaylayacak"
#. module: hr_holidays
#: help:hr.holidays,category_id:0
msgid "Category of Employee"
-msgstr ""
+msgstr "Personel kategorisi"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Brown"
-msgstr ""
+msgstr "Kahverengi"
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Remaining Days"
-msgstr ""
+msgstr "Kalan Günleri"
#. module: hr_holidays
#: xsl:holidays.summary:0
@@ -100,7 +102,7 @@ msgstr ""
#. module: hr_holidays
#: selection:hr.holidays,holiday_type:0
msgid "By Employee"
-msgstr ""
+msgstr "Personel Tarafından"
#. module: hr_holidays
#: view:hr.holidays:0
@@ -112,12 +114,12 @@ msgstr ""
#. module: hr_holidays
#: model:mail.message.subtype,description:hr_holidays.mt_holidays_refused
msgid "Request refused"
-msgstr ""
+msgstr "İstek reddedildi"
#. module: hr_holidays
#: field:hr.holidays,number_of_days_temp:0
msgid "Allocation"
-msgstr ""
+msgstr "Tahsis"
#. module: hr_holidays
#: xsl:holidays.summary:0
@@ -127,7 +129,7 @@ msgstr ""
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Cyan"
-msgstr ""
+msgstr "Açık Mavi"
#. module: hr_holidays
#: constraint:hr.holidays:0
@@ -137,17 +139,17 @@ msgstr ""
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Green"
-msgstr ""
+msgstr "Açık Yeşil"
#. module: hr_holidays
#: field:hr.employee,current_leave_id:0
msgid "Current Leave Type"
-msgstr ""
+msgstr "Mevcut İzin Türü"
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Validate"
-msgstr ""
+msgstr "Doğrula"
#. module: hr_holidays
#: selection:hr.employee,current_leave_state:0
@@ -166,25 +168,25 @@ msgstr ""
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Refuse"
-msgstr ""
+msgstr "Reddetme"
#. module: hr_holidays
#: code:addons/hr_holidays/hr_holidays.py:433
#, python-format
msgid "Request approved , waiting second validation."
-msgstr ""
+msgstr "İstek onaylanan b>, ikinci doğrulama bekliyor."
#. module: hr_holidays
#: view:hr.employee:0
#: model:ir.actions.act_window,name:hr_holidays.act_hr_employee_holiday_request
#: model:ir.ui.menu,name:hr_holidays.menu_open_ask_holidays
msgid "Leaves"
-msgstr ""
+msgstr "İzinler"
#. module: hr_holidays
#: field:hr.holidays,message_ids:0
msgid "Messages"
-msgstr ""
+msgstr "Mesajlar"
#. module: hr_holidays
#: xsl:holidays.summary:0
@@ -195,31 +197,31 @@ msgstr ""
#: code:addons/hr_holidays/wizard/hr_holidays_summary_department.py:44
#, python-format
msgid "Error!"
-msgstr ""
+msgstr "Hata!"
#. module: hr_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_request_approve_holidays
msgid "Leave Requests to Approve"
-msgstr ""
+msgstr "İzin için Onay İste"
#. module: hr_holidays
#: view:hr.holidays.summary.dept:0
#: model:ir.actions.act_window,name:hr_holidays.action_hr_holidays_summary_dept
#: model:ir.ui.menu,name:hr_holidays.menu_account_central_journal
msgid "Leaves by Department"
-msgstr ""
+msgstr "İzinler Departmana Göre"
#. module: hr_holidays
#: field:hr.holidays,manager_id2:0
#: selection:hr.holidays,state:0
msgid "Second Approval"
-msgstr ""
+msgstr "İkinci Onay"
#. module: hr_holidays
#: selection:hr.employee,current_leave_state:0
#: selection:hr.holidays,state:0
msgid "Cancelled"
-msgstr ""
+msgstr "Vazgeçildi"
#. module: hr_holidays
#: help:hr.holidays,type:0
@@ -232,12 +234,12 @@ msgstr ""
#. module: hr_holidays
#: view:hr.holidays.status:0
msgid "Validation"
-msgstr ""
+msgstr "Onaylama"
#. module: hr_holidays
#: help:hr.holidays,message_unread:0
msgid "If checked new messages require your attention."
-msgstr ""
+msgstr "Işaretli yeni mesajları, dikkat etmenizi gerektiren varsa"
#. module: hr_holidays
#: field:hr.holidays.status,color_name:0
@@ -258,7 +260,7 @@ msgstr ""
#: field:hr.holidays.summary.dept,holiday_type:0
#: model:ir.model,name:hr_holidays.model_hr_holidays_status
msgid "Leave Type"
-msgstr ""
+msgstr "İzin Türü"
#. module: hr_holidays
#: help:hr.holidays,message_summary:0
@@ -276,22 +278,22 @@ msgstr ""
#: code:addons/hr_holidays/hr_holidays.py:464
#, python-format
msgid "Warning!"
-msgstr ""
+msgstr "Uyarı!"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Magenta"
-msgstr ""
+msgstr "Macenta"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.act_hr_leave_request_to_meeting
msgid "Leave Meetings"
-msgstr ""
+msgstr "İzin Toplantıs"
#. module: hr_holidays
#: model:hr.holidays.status,name:hr_holidays.holiday_status_cl
msgid "Legal Leaves 2012"
-msgstr ""
+msgstr "Yasal 2012 İzinleri"
#. module: hr_holidays
#: selection:hr.holidays.summary.dept,holiday_type:0
@@ -308,39 +310,39 @@ msgstr "Başlangıç"
#. module: hr_holidays
#: model:hr.holidays.status,name:hr_holidays.holiday_status_sl
msgid "Sick Leaves"
-msgstr ""
+msgstr "Hastalık İzinleri"
#. module: hr_holidays
#: code:addons/hr_holidays/hr_holidays.py:471
#, python-format
msgid "Leave Request for %s"
-msgstr ""
+msgstr "İzni İsteği %s"
#. module: hr_holidays
#: xsl:holidays.summary:0
msgid "Sum"
-msgstr ""
+msgstr "Toplam"
#. module: hr_holidays
#: view:hr.holidays.status:0
#: model:ir.actions.act_window,name:hr_holidays.open_view_holiday_status
msgid "Leave Types"
-msgstr ""
+msgstr "İzin Türleri"
#. module: hr_holidays
#: field:hr.holidays.status,remaining_leaves:0
msgid "Remaining Leaves"
-msgstr ""
+msgstr "Kalan İzinler"
#. module: hr_holidays
#: field:hr.holidays,message_follower_ids:0
msgid "Followers"
-msgstr ""
+msgstr "Takipçiler"
#. module: hr_holidays
#: model:ir.model,name:hr_holidays.model_hr_holidays_remaining_leaves_user
msgid "Total holidays by type"
-msgstr ""
+msgstr "Tipine göre toplam tatil"
#. module: hr_holidays
#: view:hr.employee:0
@@ -354,38 +356,38 @@ msgstr "Personel"
#. module: hr_holidays
#: selection:hr.employee,current_leave_state:0
msgid "New"
-msgstr ""
+msgstr "Yeni"
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Type"
-msgstr ""
+msgstr "Türü"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Red"
-msgstr ""
+msgstr "Kırmızı"
#. module: hr_holidays
#: view:hr.holidays.remaining.leaves.user:0
msgid "Leaves by Type"
-msgstr ""
+msgstr "Türüne göre İzinler"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Salmon"
-msgstr ""
+msgstr "Açık Somon"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Wheat"
-msgstr ""
+msgstr "Buğday"
#. module: hr_holidays
#: code:addons/hr_holidays/hr_holidays.py:469
#, python-format
msgid "Allocation for %s"
-msgstr ""
+msgstr "Tahsisi %s"
#. module: hr_holidays
#: help:hr.holidays,state:0
@@ -403,7 +405,7 @@ msgstr ""
#: view:hr.holidays:0
#: field:hr.holidays,number_of_days:0
msgid "Number of Days"
-msgstr "Gün Sayısı"
+msgstr "Günlerin Sayısı"
#. module: hr_holidays
#: code:addons/hr_holidays/hr_holidays.py:464
@@ -421,22 +423,22 @@ msgstr ""
#. module: hr_holidays
#: view:hr.holidays.status:0
msgid "Search Leave Type"
-msgstr ""
+msgstr "İzin Türü Arama"
#. module: hr_holidays
#: selection:hr.employee,current_leave_state:0
msgid "Waiting Approval"
-msgstr ""
+msgstr "Onay Bekleyen"
#. module: hr_holidays
#: field:hr.holidays,category_id:0
msgid "Employee Tag"
-msgstr ""
+msgstr "Personel Etiketi"
#. module: hr_holidays
#: field:hr.holidays.summary.employee,emp:0
msgid "Employee(s)"
-msgstr ""
+msgstr "Personel (ler)"
#. module: hr_holidays
#: view:hr.holidays:0
@@ -467,34 +469,34 @@ msgstr ""
#: code:addons/hr_holidays/wizard/hr_holidays_summary_department.py:44
#, python-format
msgid "You have to select at least one Department. And try again."
-msgstr ""
+msgstr "En az bir Depatmen seçmek gerekir. Ve tekrar deneyin."
#. module: hr_holidays
#: field:hr.holidays,parent_id:0
msgid "Parent"
-msgstr ""
+msgstr "Üst"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Lavender"
-msgstr ""
+msgstr "lavanta"
#. module: hr_holidays
#: xsl:holidays.summary:0
msgid "Month"
-msgstr ""
+msgstr "Ay"
#. module: hr_holidays
#: field:hr.holidays,message_unread:0
msgid "Unread Messages"
-msgstr ""
+msgstr "Okunmamış mesajlar"
#. module: hr_holidays
#: view:hr.holidays:0
#: model:ir.actions.act_window,name:hr_holidays.open_ask_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_open_ask_holidays_new
msgid "Leave Requests"
-msgstr ""
+msgstr "İzin İstekleri"
#. module: hr_holidays
#: field:hr.holidays.status,limit:0
@@ -505,7 +507,7 @@ msgstr ""
#: view:hr.holidays:0
#: field:hr.holidays,date_from:0
msgid "Start Date"
-msgstr ""
+msgstr "Başlama Tarihi"
#. module: hr_holidays
#: code:addons/hr_holidays/hr_holidays.py:414
@@ -519,7 +521,7 @@ msgstr ""
#: view:hr.holidays.summary.dept:0
#: view:hr.holidays.summary.employee:0
msgid "or"
-msgstr ""
+msgstr "veya"
#. module: hr_holidays
#: model:ir.actions.act_window,help:hr_holidays.open_ask_holidays
@@ -534,6 +536,15 @@ msgid ""
" \n"
" "
msgstr ""
+" \n"
+" Yeni bir izin isteği oluşturmak için tıklayın.\n"
+"
\n"
+" izin isteği kayıtedildikten sonra, gönderilecek\n"
+" doğrulama için Yöneticisine.İzni ayarlamak için emin olun\n"
+" türü (iyileşme, resmi tatil, hastalık) ve kesin\n"
+" number of open days related to your leave.\n"
+"
\n"
+" "
#. module: hr_holidays
#: sql_constraint:hr.holidays:0
@@ -543,7 +554,7 @@ msgstr ""
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Category"
-msgstr ""
+msgstr "Kategori"
#. module: hr_holidays
#: help:hr.holidays.status,max_leaves:0
@@ -563,42 +574,42 @@ msgstr ""
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Reset to New"
-msgstr ""
+msgstr "Yeni Sıfırla"
#. module: hr_holidays
#: sql_constraint:hr.holidays:0
msgid "The number of days must be greater than 0."
-msgstr ""
+msgstr "Gün sayısı 0'dan büyük olmalıdır."
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Coral"
-msgstr ""
+msgstr "Açık Mercan"
#. module: hr_holidays
#: field:hr.employee,leave_date_to:0
msgid "To Date"
-msgstr ""
+msgstr "Tarihine"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Black"
-msgstr ""
+msgstr "Siyah"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.hr_holidays_leaves_assign_legal
msgid "Allocate Leaves for Employees"
-msgstr "Çalışanlar için İzin Tahsisi"
+msgstr "Personel için İzin Tahsisi"
#. module: hr_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_open_view_holiday_status
msgid "Leaves Types"
-msgstr ""
+msgstr "İzin Türleri"
#. module: hr_holidays
#: field:hr.holidays,meeting_id:0
msgid "Meeting"
-msgstr ""
+msgstr "Toplantı"
#. module: hr_holidays
#: help:hr.holidays.status,color_name:0
@@ -611,32 +622,32 @@ msgstr ""
#: view:hr.holidays:0
#: field:hr.holidays,state:0
msgid "Status"
-msgstr ""
+msgstr "Durumu"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Ivory"
-msgstr ""
+msgstr "Fildişi"
#. module: hr_holidays
#: model:ir.model,name:hr_holidays.model_hr_holidays_summary_employee
msgid "HR Leaves Summary Report By Employee"
-msgstr ""
+msgstr "İK Personel Özet Raporu İzinlerin"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.request_approve_holidays
msgid "Requests to Approve"
-msgstr ""
+msgstr "Onaylayacak İstekleri"
#. module: hr_holidays
#: field:hr.holidays.status,leaves_taken:0
msgid "Leaves Already Taken"
-msgstr ""
+msgstr "Daima Alınan İzinler"
#. module: hr_holidays
#: field:hr.holidays,message_is_follower:0
msgid "Is a Follower"
-msgstr ""
+msgstr "Bir Takipçisi mi"
#. module: hr_holidays
#: field:hr.holidays,user_id:0
@@ -647,28 +658,28 @@ msgstr "Kullanıcı"
#. module: hr_holidays
#: field:hr.holidays.status,active:0
msgid "Active"
-msgstr "Aktif"
+msgstr "Etkin"
#. module: hr_holidays
#: view:hr.employee:0
#: field:hr.employee,remaining_leaves:0
msgid "Remaining Legal Leaves"
-msgstr ""
+msgstr "Kalan Yasal İzinler"
#. module: hr_holidays
#: field:hr.holidays,manager_id:0
msgid "First Approval"
-msgstr ""
+msgstr "İlk Onay"
#. module: hr_holidays
#: field:hr.holidays,message_summary:0
msgid "Summary"
-msgstr ""
+msgstr "Özet"
#. module: hr_holidays
#: model:hr.holidays.status,name:hr_holidays.holiday_status_unpaid
msgid "Unpaid"
-msgstr ""
+msgstr "Ödenmemiş"
#. module: hr_holidays
#: xsl:holidays.summary:0
@@ -679,27 +690,27 @@ msgstr ""
#: model:ir.actions.report.xml,name:hr_holidays.report_holidays_summary
#: model:ir.ui.menu,name:hr_holidays.menu_open_company_allocation
msgid "Leaves Summary"
-msgstr ""
+msgstr "İzin Özetleri"
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Submit to Manager"
-msgstr ""
+msgstr "Yöneticisi Gönder"
#. module: hr_holidays
#: view:hr.employee:0
msgid "Assign Leaves"
-msgstr ""
+msgstr "İzin Atamaları"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Blue"
-msgstr ""
+msgstr "Açık Mavi"
#. module: hr_holidays
#: view:hr.holidays:0
msgid "My Department Leaves"
-msgstr ""
+msgstr "Departmen İzinlerim"
#. module: hr_holidays
#: model:mail.message.subtype,description:hr_holidays.mt_holidays_confirmed
@@ -709,12 +720,12 @@ msgstr ""
#. module: hr_holidays
#: field:hr.employee,current_leave_state:0
msgid "Current Leave Status"
-msgstr ""
+msgstr "Mevcut İzin Durum"
#. module: hr_holidays
#: field:hr.holidays,type:0
msgid "Request Type"
-msgstr ""
+msgstr "İstek Türü"
#. module: hr_holidays
#: help:hr.holidays.status,active:0
@@ -731,18 +742,18 @@ msgstr ""
#. module: hr_holidays
#: model:hr.holidays.status,name:hr_holidays.holiday_status_comp
msgid "Compensatory Days"
-msgstr ""
+msgstr "Telafi Günleri"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Yellow"
-msgstr ""
+msgstr "Açık Sarı"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.action_hr_available_holidays_report
#: model:ir.ui.menu,name:hr_holidays.menu_hr_available_holidays_report_tree
msgid "Leaves Analysis"
-msgstr ""
+msgstr "İzin Analizleri"
#. module: hr_holidays
#: view:hr.holidays.summary.dept:0
@@ -765,7 +776,7 @@ msgstr ""
#: view:hr.holidays:0
#: selection:hr.holidays,type:0
msgid "Allocation Request"
-msgstr ""
+msgstr "Tahsis İsteği"
#. module: hr_holidays
#: help:hr.holidays,holiday_type:0
@@ -777,19 +788,19 @@ msgstr ""
#. module: hr_holidays
#: model:ir.model,name:hr_holidays.model_resource_calendar_leaves
msgid "Leave Detail"
-msgstr ""
+msgstr "İzin Ayrıntısı"
#. module: hr_holidays
#: field:hr.holidays,double_validation:0
#: field:hr.holidays.status,double_validation:0
msgid "Apply Double Validation"
-msgstr ""
+msgstr "Çift Doğrulama Uygula"
#. module: hr_holidays
#: view:hr.employee:0
#: view:hr.holidays:0
msgid "days"
-msgstr ""
+msgstr "günler"
#. module: hr_holidays
#: view:hr.holidays.summary.dept:0
@@ -800,24 +811,24 @@ msgstr "Yazdır"
#. module: hr_holidays
#: view:hr.holidays.status:0
msgid "Details"
-msgstr ""
+msgstr "Detaylar"
#. module: hr_holidays
#: view:board.board:0
#: view:hr.holidays:0
#: model:ir.actions.act_window,name:hr_holidays.action_hr_holidays_leaves_by_month
msgid "My Leaves"
-msgstr ""
+msgstr "İzinlerim"
#. module: hr_holidays
#: field:hr.holidays.summary.dept,depts:0
msgid "Department(s)"
-msgstr ""
+msgstr "Departmen (ler)"
#. module: hr_holidays
#: selection:hr.holidays,state:0
msgid "To Submit"
-msgstr ""
+msgstr "Gönderin"
#. module: hr_holidays
#: code:addons/hr_holidays/hr_holidays.py:336
@@ -826,7 +837,7 @@ msgstr ""
#: field:resource.calendar.leaves,holiday_id:0
#, python-format
msgid "Leave Request"
-msgstr ""
+msgstr "İzni İsteği"
#. module: hr_holidays
#: view:hr.holidays:0
@@ -849,27 +860,27 @@ msgstr "Reddedildi"
#. module: hr_holidays
#: field:hr.holidays.status,categ_id:0
msgid "Meeting Type"
-msgstr ""
+msgstr "Toplantı Türü"
#. module: hr_holidays
#: field:hr.holidays.remaining.leaves.user,no_of_leaves:0
msgid "Remaining leaves"
-msgstr ""
+msgstr "Kalan izni"
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Allocated Days"
-msgstr ""
+msgstr "Tahsis Günleri"
#. module: hr_holidays
#: view:hr.holidays:0
msgid "To Confirm"
-msgstr ""
+msgstr "Onayla"
#. module: hr_holidays
#: field:hr.holidays,date_to:0
msgid "End Date"
-msgstr ""
+msgstr "Bitiş Tarihi"
#. module: hr_holidays
#: help:hr.holidays.status,leaves_taken:0
@@ -877,16 +888,17 @@ msgid ""
"This value is given by the sum of all holidays requests with a negative "
"value."
msgstr ""
+"Bu değer, negatif olan tüm tatilleri istekleri toplamı ile verilirdeğer"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Violet"
-msgstr ""
+msgstr "Menekşe"
#. module: hr_holidays
#: field:hr.holidays.status,max_leaves:0
msgid "Maximum Allowed"
-msgstr ""
+msgstr "Maksimum İzin"
#. module: hr_holidays
#: help:hr.holidays,manager_id2:0
@@ -909,12 +921,12 @@ msgstr ""
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Approve"
-msgstr ""
+msgstr "Onay"
#. module: hr_holidays
#: help:hr.holidays,message_ids:0
msgid "Messages and communication history"
-msgstr ""
+msgstr "Mesajlar ve iletişim geçmişi"
#. module: hr_holidays
#: code:addons/hr_holidays/hr_holidays.py:249
@@ -922,12 +934,12 @@ msgstr ""
#: sql_constraint:hr.holidays:0
#, python-format
msgid "The start date must be anterior to the end date."
-msgstr ""
+msgstr "Başlangıç tarihi bitiş tarihinden anterior olmalıdır."
#. module: hr_holidays
#: model:ir.model,name:hr_holidays.model_hr_holidays
msgid "Leave"
-msgstr ""
+msgstr "İzin"
#. module: hr_holidays
#: help:hr.holidays.status,double_validation:0
@@ -941,12 +953,12 @@ msgstr ""
#: model:ir.actions.act_window,name:hr_holidays.open_allocation_holidays
#: model:ir.ui.menu,name:hr_holidays.menu_open_allocation_holidays
msgid "Allocation Requests"
-msgstr ""
+msgstr "Tahsis İstekleri"
#. module: hr_holidays
#: xsl:holidays.summary:0
msgid "Color"
-msgstr ""
+msgstr "Renk"
#. module: hr_holidays
#: help:hr.employee,remaining_leaves:0
@@ -959,17 +971,17 @@ msgstr ""
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Pink"
-msgstr ""
+msgstr "Açık Pembe"
#. module: hr_holidays
#: xsl:holidays.summary:0
msgid "leaves."
-msgstr ""
+msgstr "izinler."
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Manager"
-msgstr ""
+msgstr "Yönetici"
#. module: hr_holidays
#: model:ir.model,name:hr_holidays.model_hr_holidays_summary_dept
@@ -979,31 +991,31 @@ msgstr ""
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Year"
-msgstr ""
+msgstr "Yıl"
#. module: hr_holidays
#: view:hr.holidays:0
msgid "Duration"
-msgstr ""
+msgstr "Süre"
#. module: hr_holidays
#: view:hr.holidays:0
#: selection:hr.holidays,state:0
#: model:mail.message.subtype,name:hr_holidays.mt_holidays_confirmed
msgid "To Approve"
-msgstr ""
+msgstr "Onaylama"
#. module: hr_holidays
#: model:mail.message.subtype,description:hr_holidays.mt_holidays_approved
msgid "Request approved"
-msgstr ""
+msgstr "İstek onaylandı"
#. module: hr_holidays
#: field:hr.holidays,notes:0
msgid "Reasons"
-msgstr ""
+msgstr "Nedenleri"
#. module: hr_holidays
#: field:hr.holidays.summary.employee,holiday_type:0
msgid "Select Leave Type"
-msgstr ""
+msgstr "İzin Türü Seç"
diff --git a/addons/hr_payroll/i18n/tr.po b/addons/hr_payroll/i18n/tr.po
index 3aba2b1993d..71abad9410b 100644
--- a/addons/hr_payroll/i18n/tr.po
+++ b/addons/hr_payroll/i18n/tr.po
@@ -8,20 +8,20 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-12 21:49+0000\n"
+"Last-Translator: Ediz Duman \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: 2013-01-18 06:46+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: hr_payroll
#: field:hr.payslip.line,condition_select:0
#: field:hr.salary.rule,condition_select:0
msgid "Condition Based on"
-msgstr ""
+msgstr "Koşu Bazında"
#. module: hr_payroll
#: selection:hr.contract,schedule_pay:0
@@ -31,19 +31,19 @@ msgstr "Aylık"
#. module: hr_payroll
#: field:hr.payslip.line,rate:0
msgid "Rate (%)"
-msgstr ""
+msgstr "Oran (%)"
#. module: hr_payroll
#: view:hr.payslip.line:0
#: model:ir.model,name:hr_payroll.model_hr_salary_rule_category
#: report:paylip.details:0
msgid "Salary Rule Category"
-msgstr ""
+msgstr "Maaş Kural Kategorisi"
#. module: hr_payroll
#: field:hr.payslip.worked_days,number_of_days:0
msgid "Number of Days"
-msgstr ""
+msgstr "Gün Sayısı"
#. module: hr_payroll
#: help:hr.salary.rule.category,parent_id:0
@@ -57,25 +57,25 @@ msgstr ""
#: view:hr.payslip.line:0
#: view:hr.salary.rule:0
msgid "Group By..."
-msgstr "Grupla..."
+msgstr "Grupla İle..."
#. module: hr_payroll
#: view:hr.payslip:0
msgid "States"
-msgstr ""
+msgstr "Durumu"
#. module: hr_payroll
#: field:hr.payslip.line,input_ids:0
#: view:hr.salary.rule:0
#: field:hr.salary.rule,input_ids:0
msgid "Inputs"
-msgstr ""
+msgstr "Girişler"
#. module: hr_payroll
#: field:hr.payslip.line,parent_rule_id:0
#: field:hr.salary.rule,parent_rule_id:0
msgid "Parent Salary Rule"
-msgstr ""
+msgstr "Esas Maaş Kural"
#. module: hr_payroll
#: view:hr.employee:0
@@ -85,13 +85,13 @@ msgstr ""
#: field:hr.payslip.run,slip_ids:0
#: model:ir.actions.act_window,name:hr_payroll.act_hr_employee_payslip_list
msgid "Payslips"
-msgstr ""
+msgstr "Maaş Bordroları"
#. module: hr_payroll
#: field:hr.payroll.structure,parent_id:0
#: field:hr.salary.rule.category,parent_id:0
msgid "Parent"
-msgstr ""
+msgstr "Ana"
#. module: hr_payroll
#: field:hr.contribution.register,company_id:0
@@ -101,7 +101,7 @@ msgstr ""
#: field:hr.salary.rule,company_id:0
#: field:hr.salary.rule.category,company_id:0
msgid "Company"
-msgstr ""
+msgstr "Firma"
#. module: hr_payroll
#: view:hr.payslip:0
@@ -112,7 +112,7 @@ msgstr ""
#: view:hr.payslip:0
#: view:hr.payslip.run:0
msgid "Set to Draft"
-msgstr ""
+msgstr "Taslağa Ayarlayın"
#. module: hr_payroll
#: model:ir.model,name:hr_payroll.model_hr_salary_rule
@@ -144,12 +144,12 @@ msgstr ""
#: report:paylip.details:0
#: report:payslip:0
msgid "Quantity/Rate"
-msgstr ""
+msgstr "Miktar/Oran"
#. module: hr_payroll
#: view:hr.salary.rule:0
msgid "Children Definition"
-msgstr ""
+msgstr "Alt Tanımı"
#. module: hr_payroll
#: field:hr.payslip.input,payslip_id:0
@@ -158,12 +158,12 @@ msgstr ""
#: model:ir.model,name:hr_payroll.model_hr_payslip
#: report:payslip:0
msgid "Pay Slip"
-msgstr ""
+msgstr "Makbuz"
#. module: hr_payroll
#: view:hr.payslip.employees:0
msgid "Generate"
-msgstr ""
+msgstr "Genel"
#. module: hr_payroll
#: help:hr.payslip.line,amount_percentage_base:0
@@ -174,28 +174,28 @@ msgstr ""
#. module: hr_payroll
#: report:contribution.register.lines:0
msgid "Total:"
-msgstr ""
+msgstr "Toplam:"
#. module: hr_payroll
#: model:ir.actions.act_window,name:hr_payroll.act_children_salary_rules
msgid "All Children Rules"
-msgstr ""
+msgstr "Tüm Alt Kurallar"
#. module: hr_payroll
#: view:hr.payslip:0
#: view:hr.salary.rule:0
msgid "Input Data"
-msgstr ""
+msgstr "Data Giriş"
#. module: hr_payroll
#: constraint:hr.payslip:0
msgid "Payslip 'Date From' must be before 'Date To'."
-msgstr ""
+msgstr "Maaş bordrosu 'Gönderen: Tarih' önce 'Tarihine' olmalıdır."
#. module: hr_payroll
#: view:hr.salary.rule.category:0
msgid "Notes"
-msgstr ""
+msgstr "Notlar"
#. module: hr_payroll
#: code:addons/hr_payroll/hr_payroll.py:866
@@ -205,7 +205,7 @@ msgstr ""
#: code:addons/hr_payroll/hr_payroll.py:900
#, python-format
msgid "Error!"
-msgstr ""
+msgstr "Hata!"
#. module: hr_payroll
#: report:contribution.register.lines:0
@@ -214,52 +214,52 @@ msgstr ""
#: report:paylip.details:0
#: report:payslip:0
msgid "Amount"
-msgstr ""
+msgstr "Tutar"
#. module: hr_payroll
#: view:hr.payslip:0
#: view:hr.payslip.line:0
#: model:ir.model,name:hr_payroll.model_hr_payslip_line
msgid "Payslip Line"
-msgstr ""
+msgstr "Maaş bordrosu Satır"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Other Information"
-msgstr ""
+msgstr "Diğer Bilgisi"
#. module: hr_payroll
#: field:hr.config.settings,module_hr_payroll_account:0
msgid "Link your payroll to accounting system"
-msgstr ""
+msgstr "Muhasebe sistemi için bordro bağlantı"
#. module: hr_payroll
#: help:hr.payslip.line,amount_select:0
#: help:hr.salary.rule,amount_select:0
msgid "The computation method for the rule amount."
-msgstr ""
+msgstr "Kural miktarı hesaplama yöntemi."
#. module: hr_payroll
#: view:payslip.lines.contribution.register:0
msgid "Contribution Register's Payslip Lines"
-msgstr ""
+msgstr "Destek Kayıtlı kullanıcısının maaş bordro Satırları"
#. module: hr_payroll
#: code:addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py:52
#, python-format
msgid "Warning !"
-msgstr ""
+msgstr "Uyarı!"
#. module: hr_payroll
#: report:paylip.details:0
msgid "Details by Salary Rule Category:"
-msgstr ""
+msgstr "Maaş Kural Kategori Detayları:"
#. module: hr_payroll
#: report:paylip.details:0
#: report:payslip:0
msgid "Note"
-msgstr ""
+msgstr "Not"
#. module: hr_payroll
#: field:hr.payroll.structure,code:0
@@ -267,45 +267,45 @@ msgstr ""
#: report:paylip.details:0
#: report:payslip:0
msgid "Reference"
-msgstr ""
+msgstr "Referans"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Draft Slip"
-msgstr ""
+msgstr "Taslak Fiş"
#. module: hr_payroll
#: code:addons/hr_payroll/hr_payroll.py:427
#, python-format
msgid "Normal Working Days paid at 100%"
-msgstr ""
+msgstr "Normal Çalışma Günleri %100 ödenmektedir"
#. module: hr_payroll
#: field:hr.payslip.line,condition_range_max:0
#: field:hr.salary.rule,condition_range_max:0
msgid "Maximum Range"
-msgstr ""
+msgstr "Maksimum Aralık"
#. module: hr_payroll
#: report:paylip.details:0
#: report:payslip:0
msgid "Identification No"
-msgstr ""
+msgstr "Kimlik No"
#. module: hr_payroll
#: field:hr.payslip,struct_id:0
msgid "Structure"
-msgstr ""
+msgstr "Yapı"
#. module: hr_payroll
#: field:hr.contribution.register,partner_id:0
msgid "Partner"
-msgstr ""
+msgstr "Partner"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Total Working Days"
-msgstr ""
+msgstr "Toplam Çalışma Günleri"
#. module: hr_payroll
#: help:hr.payslip.line,code:0
@@ -318,17 +318,17 @@ msgstr ""
#. module: hr_payroll
#: selection:hr.contract,schedule_pay:0
msgid "Weekly"
-msgstr ""
+msgstr "Haftalık"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "From"
-msgstr ""
+msgstr "itibaren"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Confirm"
-msgstr ""
+msgstr "Onaylamak"
#. module: hr_payroll
#: model:ir.actions.act_window,help:hr_payroll.action_contribution_register_form
@@ -349,7 +349,7 @@ msgstr ""
#: help:hr.payslip.line,condition_range_max:0
#: help:hr.salary.rule,condition_range_max:0
msgid "The maximum amount, applied for this rule."
-msgstr ""
+msgstr "Bu kural için uygulanan azami tutar."
#. module: hr_payroll
#: help:hr.payslip.line,condition_python:0
@@ -363,22 +363,22 @@ msgstr ""
#: report:contribution.register.lines:0
#: report:paylip.details:0
msgid "Register Name"
-msgstr ""
+msgstr "Kayıt Adı"
#. module: hr_payroll
#: view:hr.payslip.employees:0
msgid "Payslips by Employees"
-msgstr ""
+msgstr "Personel maaş bordroları"
#. module: hr_payroll
#: selection:hr.contract,schedule_pay:0
msgid "Quarterly"
-msgstr ""
+msgstr "Çeyrek"
#. module: hr_payroll
#: selection:hr.payslip,state:0
msgid "Waiting"
-msgstr ""
+msgstr "Bekleyen"
#. module: hr_payroll
#: help:hr.salary.rule,quantity:0
@@ -391,52 +391,52 @@ msgstr ""
#. module: hr_payroll
#: view:hr.salary.rule:0
msgid "Search Salary Rule"
-msgstr ""
+msgstr "Maaş Arama Kuralı"
#. module: hr_payroll
#: field:hr.payslip,employee_id:0
#: field:hr.payslip.line,employee_id:0
#: model:ir.model,name:hr_payroll.model_hr_employee
msgid "Employee"
-msgstr ""
+msgstr "Personel"
#. module: hr_payroll
#: selection:hr.contract,schedule_pay:0
msgid "Semi-annually"
-msgstr ""
+msgstr "Yarı-yıllık"
#. module: hr_payroll
#: report:paylip.details:0
#: report:payslip:0
msgid "Email"
-msgstr ""
+msgstr "Email"
#. module: hr_payroll
#: view:hr.payslip.run:0
msgid "Search Payslip Batches"
-msgstr ""
+msgstr "Maaş bordrosu Toplu işlemi Arama"
#. module: hr_payroll
#: field:hr.payslip.line,amount_percentage_base:0
#: field:hr.salary.rule,amount_percentage_base:0
msgid "Percentage based on"
-msgstr ""
+msgstr "Yüzde Bazında"
#. module: hr_payroll
#: code:addons/hr_payroll/hr_payroll.py:85
#, python-format
msgid "%s (copy)"
-msgstr ""
+msgstr "%s (kopya)"
#. module: hr_payroll
#: help:hr.config.settings,module_hr_payroll_account:0
msgid "Create journal entries from payslips"
-msgstr ""
+msgstr "Maaş bordroları dan yevmiye girişleri oluşturma"
#. module: hr_payroll
#: field:hr.payslip,paid:0
msgid "Made Payment Order ? "
-msgstr ""
+msgstr "Ödeme Sipariş yapılır? "
#. module: hr_payroll
#: report:contribution.register.lines:0
@@ -449,17 +449,17 @@ msgstr ""
#: view:hr.payslip.line:0
#: model:ir.actions.act_window,name:hr_payroll.act_contribution_reg_payslip_lines
msgid "Payslip Lines"
-msgstr ""
+msgstr "Maaş bordrosu Satırları"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Miscellaneous"
-msgstr ""
+msgstr "Çeşitli"
#. module: hr_payroll
#: selection:hr.payslip,state:0
msgid "Rejected"
-msgstr ""
+msgstr "Reddedildi"
#. module: hr_payroll
#: view:hr.payroll.structure:0
@@ -468,13 +468,13 @@ msgstr ""
#: model:ir.actions.act_window,name:hr_payroll.action_salary_rule_form
#: model:ir.ui.menu,name:hr_payroll.menu_action_hr_salary_rule_form
msgid "Salary Rules"
-msgstr ""
+msgstr "Maaş Kuralları"
#. module: hr_payroll
#: code:addons/hr_payroll/hr_payroll.py:336
#, python-format
msgid "Refund: "
-msgstr ""
+msgstr "İade: "
#. module: hr_payroll
#: model:ir.model,name:hr_payroll.model_payslip_lines_contribution_register
@@ -486,13 +486,13 @@ msgstr ""
#: selection:hr.payslip,state:0
#: view:hr.payslip.run:0
msgid "Done"
-msgstr ""
+msgstr "Biten"
#. module: hr_payroll
#: field:hr.payslip.line,appears_on_payslip:0
#: field:hr.salary.rule,appears_on_payslip:0
msgid "Appears on Payslip"
-msgstr ""
+msgstr "Maaş bordrosu üzerinde Görünüyor"
#. module: hr_payroll
#: field:hr.payslip.line,amount_fix:0
@@ -500,13 +500,13 @@ msgstr ""
#: field:hr.salary.rule,amount_fix:0
#: selection:hr.salary.rule,amount_select:0
msgid "Fixed Amount"
-msgstr ""
+msgstr "Sabit Tutar"
#. module: hr_payroll
#: code:addons/hr_payroll/hr_payroll.py:365
#, python-format
msgid "Warning!"
-msgstr ""
+msgstr "Uyarı!"
#. module: hr_payroll
#: help:hr.payslip.line,active:0
@@ -520,50 +520,50 @@ msgstr ""
#: field:hr.payslip,state:0
#: field:hr.payslip.run,state:0
msgid "Status"
-msgstr ""
+msgstr "Durumu"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Worked Days & Inputs"
-msgstr ""
+msgstr "Çalışılan Gün ve Girişler"
#. module: hr_payroll
#: field:hr.payslip,details_by_salary_rule_category:0
msgid "Details by Salary Rule Category"
-msgstr ""
+msgstr "Maaş Kural Kategori Detayları"
#. module: hr_payroll
#: model:ir.actions.act_window,name:hr_payroll.action_payslip_lines_contribution_register
msgid "PaySlip Lines"
-msgstr ""
+msgstr "Maaş Bordrosu Satırları"
#. module: hr_payroll
#: help:hr.payslip.line,register_id:0
#: help:hr.salary.rule,register_id:0
msgid "Eventual third party involved in the salary payment of the employees."
-msgstr ""
+msgstr "Nihai üçüncü parti Personellerin maaş ödemeleri dahil."
#. module: hr_payroll
#: field:hr.payslip.worked_days,number_of_hours:0
msgid "Number of Hours"
-msgstr ""
+msgstr "Saat Sayısı"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "PaySlip Batch"
-msgstr ""
+msgstr "Maaş Bordrosu Toplu İş"
#. module: hr_payroll
#: field:hr.payslip.line,condition_range_min:0
#: field:hr.salary.rule,condition_range_min:0
msgid "Minimum Range"
-msgstr ""
+msgstr "Minimum Aralık"
#. module: hr_payroll
#: field:hr.payslip.line,child_ids:0
#: field:hr.salary.rule,child_ids:0
msgid "Child Salary Rule"
-msgstr ""
+msgstr "Alt Maaş Kural"
#. module: hr_payroll
#: report:contribution.register.lines:0
@@ -573,70 +573,70 @@ msgstr ""
#: report:payslip:0
#: field:payslip.lines.contribution.register,date_to:0
msgid "Date To"
-msgstr ""
+msgstr "için Tarihi"
#. module: hr_payroll
#: selection:hr.payslip.line,condition_select:0
#: selection:hr.salary.rule,condition_select:0
msgid "Range"
-msgstr ""
+msgstr "Aralık"
#. module: hr_payroll
#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payroll_structure_tree
#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_structure_tree
msgid "Salary Structures Hierarchy"
-msgstr ""
+msgstr "Maaş Yapı Hiyerarşi"
#. module: hr_payroll
#: help:hr.employee,total_wage:0
msgid "Sum of all current contract's wage of employee."
-msgstr ""
+msgstr "Presonelin tüm mevcut sözleşmenin ücret toplamı."
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Payslip"
-msgstr ""
+msgstr "Maaş Bordrosu"
#. module: hr_payroll
#: field:hr.payslip,credit_note:0
#: field:hr.payslip.run,credit_note:0
msgid "Credit Note"
-msgstr ""
+msgstr "Alack Notu"
#. module: hr_payroll
#: view:hr.payslip:0
#: model:ir.actions.act_window,name:hr_payroll.act_payslip_lines
msgid "Payslip Computation Details"
-msgstr ""
+msgstr "Maaş Bordrosu Hesaplama Ayrıntıları"
#. module: hr_payroll
#: help:hr.payslip.line,appears_on_payslip:0
#: help:hr.salary.rule,appears_on_payslip:0
msgid "Used to display the salary rule on payslip."
-msgstr ""
+msgstr "Maaş bordrosu üzerinde maaş kuralı göstermek için kullanılır."
#. module: hr_payroll
#: model:ir.model,name:hr_payroll.model_hr_payslip_input
msgid "Payslip Input"
-msgstr ""
+msgstr "Maaş Bordro Girdisi"
#. module: hr_payroll
#: view:hr.salary.rule.category:0
#: model:ir.actions.act_window,name:hr_payroll.action_hr_salary_rule_category
#: model:ir.ui.menu,name:hr_payroll.menu_hr_salary_rule_category
msgid "Salary Rule Categories"
-msgstr ""
+msgstr "Maaş Kural Kategoriler"
#. module: hr_payroll
#: help:hr.payslip.input,contract_id:0
#: help:hr.payslip.worked_days,contract_id:0
msgid "The contract for which applied this input"
-msgstr ""
+msgstr "Sözleşme bu giriş uygulandı"
#. module: hr_payroll
#: view:hr.salary.rule:0
msgid "Computation"
-msgstr ""
+msgstr "Hesaplama"
#. module: hr_payroll
#: code:addons/hr_payroll/hr_payroll.py:894
@@ -657,14 +657,14 @@ msgstr ""
#: field:hr.payslip.line,amount_select:0
#: field:hr.salary.rule,amount_select:0
msgid "Amount Type"
-msgstr ""
+msgstr "Tutar Türü"
#. module: hr_payroll
#: field:hr.payslip.line,category_id:0
#: view:hr.salary.rule:0
#: field:hr.salary.rule,category_id:0
msgid "Category"
-msgstr ""
+msgstr "Kategori"
#. module: hr_payroll
#: view:hr.salary.rule:0
@@ -688,7 +688,7 @@ msgstr ""
#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payroll_structure_list_form
#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_structure_view
msgid "Salary Structures"
-msgstr ""
+msgstr "Maaş Yapısı"
#. module: hr_payroll
#: view:hr.payslip.run:0
@@ -701,7 +701,7 @@ msgstr ""
#: view:hr.payslip.run:0
#: selection:hr.payslip.run,state:0
msgid "Draft"
-msgstr ""
+msgstr "Taslak"
#. module: hr_payroll
#: report:contribution.register.lines:0
@@ -726,7 +726,7 @@ msgstr ""
#. module: hr_payroll
#: view:hr.salary.rule:0
msgid "Conditions"
-msgstr ""
+msgstr "Koşullar"
#. module: hr_payroll
#: field:hr.payslip.line,amount_percentage:0
@@ -734,7 +734,7 @@ msgstr ""
#: field:hr.salary.rule,amount_percentage:0
#: selection:hr.salary.rule,amount_select:0
msgid "Percentage (%)"
-msgstr ""
+msgstr "Yüzde (%)"
#. module: hr_payroll
#: code:addons/hr_payroll/hr_payroll.py:866
@@ -760,7 +760,7 @@ msgstr ""
#. module: hr_payroll
#: field:hr.payslip.line,salary_rule_id:0
msgid "Rule"
-msgstr ""
+msgstr "Kural"
#. module: hr_payroll
#: model:ir.actions.report.xml,name:hr_payroll.payslip_details_report
@@ -776,12 +776,12 @@ msgstr ""
#: field:hr.payslip.line,active:0
#: field:hr.salary.rule,active:0
msgid "Active"
-msgstr ""
+msgstr "Etkin"
#. module: hr_payroll
#: view:hr.salary.rule:0
msgid "Child Rules"
-msgstr ""
+msgstr "Alt Kurallar"
#. module: hr_payroll
#: help:hr.payslip.line,condition_range_min:0
@@ -799,18 +799,18 @@ msgstr ""
#: report:paylip.details:0
#: report:payslip:0
msgid "Designation"
-msgstr ""
+msgstr "Atama"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Companies"
-msgstr ""
+msgstr "Şirketler"
#. module: hr_payroll
#: report:paylip.details:0
#: report:payslip:0
msgid "Authorized Signature"
-msgstr ""
+msgstr "Yetkili İmza"
#. module: hr_payroll
#: field:hr.payslip,contract_id:0
@@ -819,7 +819,7 @@ msgstr ""
#: field:hr.payslip.worked_days,contract_id:0
#: model:ir.model,name:hr_payroll.model_hr_contract
msgid "Contract"
-msgstr ""
+msgstr "Sözleşme"
#. module: hr_payroll
#: code:addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py:52
@@ -831,7 +831,7 @@ msgstr ""
#: report:paylip.details:0
#: report:payslip:0
msgid "Credit"
-msgstr ""
+msgstr "Alacak"
#. module: hr_payroll
#: field:hr.contract,schedule_pay:0
@@ -853,24 +853,24 @@ msgstr ""
#: code:addons/hr_payroll/hr_payroll.py:346
#, python-format
msgid "Refund Payslip"
-msgstr ""
+msgstr "Maaş Bordrosu İade"
#. module: hr_payroll
#: field:hr.rule.input,input_id:0
#: model:ir.model,name:hr_payroll.model_hr_rule_input
msgid "Salary Rule Input"
-msgstr ""
+msgstr "Maaş Kural Girdisi"
#. module: hr_payroll
#: field:hr.payslip.line,quantity:0
#: field:hr.salary.rule,quantity:0
msgid "Quantity"
-msgstr ""
+msgstr "Miktar"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Refund"
-msgstr ""
+msgstr "İadesi"
#. module: hr_payroll
#: report:contribution.register.lines:0
@@ -883,7 +883,7 @@ msgstr ""
#: report:paylip.details:0
#: report:payslip:0
msgid "Code"
-msgstr ""
+msgstr "Kod"
#. module: hr_payroll
#: field:hr.payslip.line,amount_python_compute:0
@@ -899,12 +899,12 @@ msgstr ""
#: field:hr.payslip.worked_days,sequence:0
#: field:hr.salary.rule,sequence:0
msgid "Sequence"
-msgstr ""
+msgstr "Sıralama"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Period"
-msgstr ""
+msgstr "Dönem"
#. module: hr_payroll
#: view:hr.payslip.run:0
@@ -914,7 +914,7 @@ msgstr ""
#. module: hr_payroll
#: view:hr.salary.rule:0
msgid "General"
-msgstr ""
+msgstr "Genel"
#. module: hr_payroll
#: code:addons/hr_payroll/hr_payroll.py:669
@@ -925,7 +925,7 @@ msgstr ""
#. module: hr_payroll
#: model:ir.model,name:hr_payroll.model_hr_payslip_employees
msgid "Generate payslips for all selected employees"
-msgstr ""
+msgstr "Seçilen tüm çalışanlar için maaş bordroları üret"
#. module: hr_payroll
#: field:hr.contract,struct_id:0
@@ -934,23 +934,23 @@ msgstr ""
#: view:hr.payslip.line:0
#: model:ir.model,name:hr_payroll.model_hr_payroll_structure
msgid "Salary Structure"
-msgstr ""
+msgstr "Maaş Yapısı"
#. module: hr_payroll
#: field:hr.contribution.register,register_line_ids:0
msgid "Register Line"
-msgstr ""
+msgstr "Kayıt Satırı"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Cancel"
-msgstr ""
+msgstr "İptal"
#. module: hr_payroll
#: view:hr.payslip.run:0
#: selection:hr.payslip.run,state:0
msgid "Close"
-msgstr ""
+msgstr "Kapalı"
#. module: hr_payroll
#: help:hr.payslip,struct_id:0
@@ -965,28 +965,28 @@ msgstr ""
#: field:hr.payroll.structure,children_ids:0
#: field:hr.salary.rule.category,children_ids:0
msgid "Children"
-msgstr ""
+msgstr "Alt"
#. module: hr_payroll
#: help:hr.payslip,credit_note:0
msgid "Indicates this payslip has a refund of another"
-msgstr ""
+msgstr "Bu maaş bordrosu başka bir geri ödeme var gösterir"
#. module: hr_payroll
#: selection:hr.contract,schedule_pay:0
msgid "Bi-monthly"
-msgstr ""
+msgstr "İki Aylık"
#. module: hr_payroll
#: report:paylip.details:0
msgid "Pay Slip Details"
-msgstr ""
+msgstr "Öde Fiş Detaylar"
#. module: hr_payroll
#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payslip_form
#: model:ir.ui.menu,name:hr_payroll.menu_department_tree
msgid "Employee Payslips"
-msgstr ""
+msgstr "Personel maaş bordroları"
#. module: hr_payroll
#: model:ir.model,name:hr_payroll.model_hr_config_settings
@@ -1004,29 +1004,29 @@ msgstr ""
#. module: hr_payroll
#: view:payslip.lines.contribution.register:0
msgid "Print"
-msgstr ""
+msgstr "Yazıcı"
#. module: hr_payroll
#: view:hr.payslip.line:0
msgid "Calculations"
-msgstr ""
+msgstr "Hesaplamalar"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Worked Days"
-msgstr ""
+msgstr "Çalışılan Günler"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Search Payslips"
-msgstr ""
+msgstr "Arama MaaşBordroları"
#. module: hr_payroll
#: view:hr.payslip.run:0
#: model:ir.actions.act_window,name:hr_payroll.action_hr_payslip_run_tree
#: model:ir.ui.menu,name:hr_payroll.menu_hr_payslip_run
msgid "Payslips Batches"
-msgstr ""
+msgstr "MaaşBordroları Toplu-İşlemi"
#. module: hr_payroll
#: view:hr.contribution.register:0
@@ -1042,12 +1042,12 @@ msgstr ""
#: field:hr.salary.rule,note:0
#: field:hr.salary.rule.category,note:0
msgid "Description"
-msgstr ""
+msgstr "Açıklama"
#. module: hr_payroll
#: field:hr.employee,total_wage:0
msgid "Total Basic Salary"
-msgstr ""
+msgstr "Toplam Temel Maaş"
#. module: hr_payroll
#: view:hr.contribution.register:0
@@ -1061,7 +1061,7 @@ msgstr ""
#: model:ir.ui.menu,name:hr_payroll.menu_hr_root_payroll
#: model:ir.ui.menu,name:hr_payroll.payroll_configure
msgid "Payroll"
-msgstr ""
+msgstr "Bordro"
#. module: hr_payroll
#: model:ir.actions.report.xml,name:hr_payroll.contribution_register
@@ -1072,24 +1072,24 @@ msgstr ""
#: code:addons/hr_payroll/hr_payroll.py:365
#, python-format
msgid "You cannot delete a payslip which is not draft or cancelled!"
-msgstr ""
+msgstr "Sen taslak veya iptal olmayan bir maaş bordrosu silemezsiniz!"
#. module: hr_payroll
#: report:paylip.details:0
#: report:payslip:0
msgid "Address"
-msgstr ""
+msgstr "adres"
#. module: hr_payroll
#: field:hr.payslip,worked_days_line_ids:0
#: model:ir.model,name:hr_payroll.model_hr_payslip_worked_days
msgid "Payslip Worked Days"
-msgstr ""
+msgstr "Maaş Bordrosu Çalışılan Günler"
#. module: hr_payroll
#: view:hr.salary.rule.category:0
msgid "Salary Categories"
-msgstr ""
+msgstr "Maaş Kategoriler"
#. module: hr_payroll
#: report:contribution.register.lines:0
@@ -1102,7 +1102,7 @@ msgstr ""
#: report:paylip.details:0
#: report:payslip:0
msgid "Name"
-msgstr ""
+msgstr "Adı"
#. module: hr_payroll
#: help:hr.payslip.line,amount_percentage:0
@@ -1113,7 +1113,7 @@ msgstr ""
#. module: hr_payroll
#: view:hr.payroll.structure:0
msgid "Payroll Structures"
-msgstr ""
+msgstr "Bordro Yapısı"
#. module: hr_payroll
#: view:hr.payslip:0
@@ -1121,19 +1121,19 @@ msgstr ""
#: field:hr.payslip.employees,employee_ids:0
#: view:hr.payslip.line:0
msgid "Employees"
-msgstr ""
+msgstr "Personeller"
#. module: hr_payroll
#: report:paylip.details:0
#: report:payslip:0
msgid "Bank Account"
-msgstr ""
+msgstr "Banka Hesabı"
#. module: hr_payroll
#: help:hr.payslip.line,sequence:0
#: help:hr.salary.rule,sequence:0
msgid "Use to arrange calculation sequence"
-msgstr ""
+msgstr "Hesaplama sırasını düzenlemek için kullanın"
#. module: hr_payroll
#: help:hr.payslip,state:0
@@ -1157,17 +1157,17 @@ msgstr ""
#. module: hr_payroll
#: selection:hr.contract,schedule_pay:0
msgid "Annually"
-msgstr ""
+msgstr "Yıllık"
#. module: hr_payroll
#: field:hr.payslip,input_line_ids:0
msgid "Payslip Inputs"
-msgstr ""
+msgstr "Maaş Bordrosu Girdileri"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Other Inputs"
-msgstr ""
+msgstr "Diğer Girdiler"
#. module: hr_payroll
#: model:ir.actions.act_window,name:hr_payroll.action_hr_salary_rule_category_tree_view
@@ -1187,17 +1187,17 @@ msgstr ""
#: report:paylip.details:0
#: report:payslip:0
msgid "Total"
-msgstr ""
+msgstr "Toplam"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Salary Computation"
-msgstr ""
+msgstr "Maaş Hesaplama"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Details By Salary Rule Category"
-msgstr ""
+msgstr "Maaş Kural Kategori Detayları"
#. module: hr_payroll
#: help:hr.payslip.input,code:0
@@ -1210,42 +1210,42 @@ msgstr ""
#: code:addons/hr_payroll/hr_payroll.py:900
#, python-format
msgid "Wrong python condition defined for salary rule %s (%s)."
-msgstr ""
+msgstr "Maaş kuralı için tanımlanan Yanlış python koşulu %s (%s)."
#. module: hr_payroll
#: view:hr.payslip.run:0
#: model:ir.actions.act_window,name:hr_payroll.action_hr_payslip_by_employees
msgid "Generate Payslips"
-msgstr ""
+msgstr "MaaşBordroları Oluştur"
#. module: hr_payroll
#: view:hr.payslip.line:0
msgid "Search Payslip Lines"
-msgstr ""
+msgstr "Arama MaaşBordro Satırları"
#. module: hr_payroll
#: selection:hr.contract,schedule_pay:0
msgid "Bi-weekly"
-msgstr ""
+msgstr "İki haftalık"
#. module: hr_payroll
#: selection:hr.payslip.line,condition_select:0
#: selection:hr.salary.rule,condition_select:0
msgid "Always True"
-msgstr ""
+msgstr "Daima Gerçek"
#. module: hr_payroll
#: report:contribution.register.lines:0
msgid "PaySlip Name"
-msgstr ""
+msgstr "MaaşBordro Adı"
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Accounting"
-msgstr ""
+msgstr "Muhasebe"
#. module: hr_payroll
#: field:hr.payslip.line,condition_range:0
#: field:hr.salary.rule,condition_range:0
msgid "Range Based on"
-msgstr ""
+msgstr "Aralığı Bazında"
diff --git a/addons/hr_recruitment/i18n/tr.po b/addons/hr_recruitment/i18n/tr.po
index 64d47c773b3..91c88b19199 100644
--- a/addons/hr_recruitment/i18n/tr.po
+++ b/addons/hr_recruitment/i18n/tr.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2013-02-11 19:28+0000\n"
+"PO-Revision-Date: 2013-02-12 09:22+0000\n"
"Last-Translator: Ediz Duman \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: 2013-02-12 05:29+0000\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: hr_recruitment
@@ -28,12 +28,12 @@ msgstr ""
#: view:hr.recruitment.stage:0
#: field:hr.recruitment.stage,requirements:0
msgid "Requirements"
-msgstr "Gereksinimler"
+msgstr "İşe alım"
#. module: hr_recruitment
#: view:hr.applicant:0
msgid "Application Summary"
-msgstr "Uygulama Özeti"
+msgstr "Başvuru Özeti"
#. module: hr_recruitment
#: view:hr.applicant:0
diff --git a/addons/mail/i18n/hu.po b/addons/mail/i18n/hu.po
index 4cbab2f210b..8096d6a7f6b 100644
--- a/addons/mail/i18n/hu.po
+++ b/addons/mail/i18n/hu.po
@@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2013-01-12 19:12+0000\n"
-"Last-Translator: Herczeg Péter \n"
+"PO-Revision-Date: 2013-02-12 14:55+0000\n"
+"Last-Translator: Balint (eSolve) \n"
"Language-Team: Hungarian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-18 06:52+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: mail
#: view:mail.followers:0
msgid "Followers Form"
-msgstr ""
+msgstr "Követők űrlapjai"
#. module: mail
#: model:ir.model,name:mail.model_publisher_warranty_contract
@@ -46,7 +46,7 @@ msgstr "Üzenet címzettjei"
#. module: mail
#: help:mail.message.subtype,default:0
msgid "Activated by default when subscribing."
-msgstr ""
+msgstr "Alapértelmezetten aktiválva lesz a feliratkozásnál."
#. module: mail
#: view:mail.message:0
@@ -71,6 +71,8 @@ msgid ""
"The name of the email alias, e.g. 'jobs' if you want to catch emails for "
""
msgstr ""
+"Az e-mail álnáv neve, pl. 'állások' ha az "
+"helyről akarjuk az e-maileket megkapni"
#. module: mail
#: model:ir.actions.act_window,name:mail.action_email_compose_message_wizard
@@ -83,7 +85,7 @@ msgstr "Email írás"
#: code:addons/mail/static/src/xml/mail.xml:132
#, python-format
msgid "Add them into recipients and followers"
-msgstr ""
+msgstr "A címzettekhez és a követőkhőz adja hozzá"
#. module: mail
#: view:mail.group:0
@@ -112,6 +114,8 @@ msgid ""
"Email address of the sender. This field is set when no matching partner is "
"found for incoming emails."
msgstr ""
+"A küldő e-mail címei. Ez a mező lesz beállítva, ha nem talált egyező "
+"partnert a bejövő levelekhez."
#. module: mail
#: model:ir.model,name:mail.model_mail_compose_message
@@ -128,7 +132,7 @@ msgstr "Hozzáadás"
#. module: mail
#: field:mail.message.subtype,parent_id:0
msgid "Parent"
-msgstr ""
+msgstr "Szülő"
#. module: mail
#: field:mail.group,message_unread:0
@@ -150,6 +154,9 @@ msgid ""
"Members of those groups will automatically added as followers. Note that "
"they will be able to manage their subscription manually if necessary."
msgstr ""
+"Ezeknek a csoportoknak a tagjai automatikusan hozzá lesznek adva a "
+"követőkhöz. Megjegyezve, hogy ha szükséges szerkeszteni tudják a "
+"feliratkozásukat."
#. module: mail
#. openerp-web
@@ -162,7 +169,7 @@ msgstr "Valóban törölni kívánja ezt az üzenetet?"
#: view:mail.message:0
#: field:mail.notification,read:0
msgid "Read"
-msgstr ""
+msgstr "Olvas"
#. module: mail
#: view:mail.group:0
@@ -189,18 +196,21 @@ msgid ""
"image, with aspect ratio preserved. Use this field in form views or some "
"kanban views."
msgstr ""
+"Közepes méretű fotó a csoportról. Automatikusa át lesz méretezve 128x128px "
+"képpé, az arányok megtartásával. Használja ezt a mezőt az osztályozott "
+"nézetban és egyes kanban nézetekben."
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:194
#, python-format
msgid "Uploading error"
-msgstr ""
+msgstr "Feltöltési hiba"
#. module: mail
#: model:mail.group,name:mail.group_support
msgid "Support"
-msgstr ""
+msgstr "Támogatás"
#. module: mail
#: code:addons/mail/mail_message.py:727
@@ -211,6 +221,10 @@ msgid ""
"\n"
"(Document type: %s, Operation: %s)"
msgstr ""
+"Az igényelt műveletet nem lehetett végrehajtani biztonsági korlátok miatt. "
+"Kérem vegye fel a kapcsolatot a rendszer adminisztrátorral.\n"
+"\n"
+"(Dokumentum típus: %s, Művelet: %s)"
#. module: mail
#: view:mail.mail:0
@@ -228,24 +242,24 @@ msgstr "Szál"
#: code:addons/mail/static/src/xml/mail.xml:37
#, python-format
msgid "Open the full mail composer"
-msgstr ""
+msgstr "Nyissa meg a taljes levél szerkesztőt"
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:37
#, python-format
msgid "ò"
-msgstr ""
+msgstr "ò"
#. module: mail
#: field:base.config.settings,alias_domain:0
msgid "Alias Domain"
-msgstr ""
+msgstr "Domain álnév"
#. module: mail
#: field:mail.group,group_ids:0
msgid "Auto Subscription"
-msgstr ""
+msgstr "Auto feliratkozás"
#. module: mail
#: field:mail.mail,references:0
@@ -257,12 +271,12 @@ msgstr "Hivatkozások"
#: code:addons/mail/static/src/xml/mail.xml:188
#, python-format
msgid "No messages."
-msgstr ""
+msgstr "Nincs üzenet."
#. module: mail
#: model:ir.model,name:mail.model_mail_group
msgid "Discussion group"
-msgstr ""
+msgstr "Tárgyalási csoport"
#. module: mail
#. openerp-web
@@ -277,7 +291,7 @@ msgstr "feltöltés"
#: code:addons/mail/static/src/xml/mail_followers.xml:52
#, python-format
msgid "more."
-msgstr ""
+msgstr "több."
#. module: mail
#: help:mail.compose.message,type:0
@@ -286,6 +300,8 @@ msgid ""
"Message type: email for email message, notification for system message, "
"comment for other messages such as user replies"
msgstr ""
+"Üzenet típus: email az email üzenetre, figyelmeztetés egy rendszer üzenetre, "
+"hozzászólás egy másik üzenetre mint felhasználói válaszok"
#. module: mail
#: help:mail.message.subtype,relation_field:0
@@ -294,6 +310,8 @@ msgid ""
"automatic subscription on a related document. The field is used to compute "
"getattr(related_document.relation_field)."
msgstr ""
+"A mező az ide vonatkozó modell hivatkozására használt az altípus modellhez, "
+"ha automatikus feliratkozást használ az ide vonatkozó dokumentumhoz."
#. module: mail
#: selection:mail.mail,state:0
@@ -316,12 +334,12 @@ msgstr "Önt meghívták, hogy kövesse: %s
"
#: help:mail.thread,message_unread:0
#: help:res.partner,message_unread:0
msgid "If checked new messages require your attention."
-msgstr ""
+msgstr "Ha be van jelölve, akkor figyelje az új üzeneteket."
#. module: mail
#: field:mail.group,image_medium:0
msgid "Medium-sized photo"
-msgstr ""
+msgstr "Közepes méretű fotó"
#. module: mail
#: model:ir.actions.client,name:mail.action_mail_to_me_feeds
@@ -352,21 +370,21 @@ msgstr "Követés leállítása"
#: code:addons/mail/static/src/xml/mail.xml:261
#, python-format
msgid "show one more message"
-msgstr ""
+msgstr "mutass még egy üzenetet"
#. module: mail
#: code:addons/mail/mail_mail.py:71
#: code:addons/mail/res_users.py:79
#, python-format
msgid "Invalid Action!"
-msgstr ""
+msgstr "Érvénytelen lépés!"
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:25
#, python-format
msgid "User img"
-msgstr ""
+msgstr "Felhasználói kép"
#. module: mail
#: model:ir.actions.act_window,name:mail.action_view_mail_mail
@@ -379,7 +397,7 @@ msgstr "E-mailek"
#. module: mail
#: field:mail.followers,partner_id:0
msgid "Related Partner"
-msgstr ""
+msgstr "Kapcsolódó partner"
#. module: mail
#: help:mail.group,message_summary:0
@@ -389,6 +407,8 @@ msgid ""
"Holds the Chatter summary (number of messages, ...). This summary is "
"directly in html format in order to be inserted in kanban views."
msgstr ""
+"A chettelés összegzést megállítja (üzenetek száma,...). Ez az összegzés "
+"direkt HTML formátumú ahhoz hogy beilleszthető legyen a kanban nézetekbe."
#. module: mail
#: help:mail.alias,alias_model_id:0
@@ -397,11 +417,14 @@ msgid ""
"incoming email that does not reply to an existing record will cause the "
"creation of a new record of this model (e.g. a Project Task)"
msgstr ""
+"A modell (OpenERP Documentum féle) amivel ez az álnév összhangban van. "
+"Bármely beérkező email ami nem válaszol a meglévő rekordra az egy, a "
+"modellhez tartozó új rekord létrehozást okozza (pl. a Projekt feladat)"
#. module: mail
#: field:mail.message.subtype,relation_field:0
msgid "Relation field"
-msgstr ""
+msgstr "Reléciós/összefüggés mező"
#. module: mail
#: selection:mail.compose.message,type:0
@@ -496,7 +519,7 @@ msgstr "Archívum"
#: code:addons/mail/static/src/xml/mail.xml:94
#, python-format
msgid "Delete this attachment"
-msgstr ""
+msgstr "Törli ezt a mellékletet"
#. module: mail
#. openerp-web
@@ -517,35 +540,35 @@ msgstr "Egy követő"
#: field:mail.compose.message,type:0
#: field:mail.message,type:0
msgid "Type"
-msgstr ""
+msgstr "Típus"
#. module: mail
#: selection:mail.compose.message,type:0
#: view:mail.mail:0
#: selection:mail.message,type:0
msgid "Email"
-msgstr ""
+msgstr "E-mail"
#. module: mail
#: field:ir.ui.menu,mail_group_id:0
msgid "Mail Group"
-msgstr ""
+msgstr "Levelezési csoport"
#. module: mail
#: selection:res.partner,notification_email_send:0
msgid "Comments and Emails"
-msgstr ""
+msgstr "Megjegyzések és e-mailok"
#. module: mail
#: field:mail.alias,alias_defaults:0
msgid "Default Values"
-msgstr ""
+msgstr "Alapértelmezett értékek"
#. module: mail
#: code:addons/mail/res_users.py:100
#, python-format
msgid "%s has joined the %s network."
-msgstr ""
+msgstr "%s csatlakozott a %s hálózathoz."
#. module: mail
#: help:mail.group,image_small:0
@@ -554,6 +577,9 @@ msgid ""
"image, with aspect ratio preserved. Use this field anywhere a small image is "
"required."
msgstr ""
+"Kis mérető fotó a csoportról. Automatikusan át lesz méretezve 64x64px képpé, "
+"az arány megtartása mellett. Használja ezt a mezőt bárhol ahol kisméretű "
+"képet szeretne."
#. module: mail
#: view:mail.compose.message:0
@@ -566,7 +592,7 @@ msgstr "Címzettek"
#: code:addons/mail/static/src/xml/mail.xml:127
#, python-format
msgid "<<<"
-msgstr ""
+msgstr "<<<"
#. module: mail
#. openerp-web
@@ -578,7 +604,7 @@ msgstr "Bejegyzés írás a dokumentum követőinek..."
#. module: mail
#: field:mail.group,group_public_id:0
msgid "Authorized Group"
-msgstr ""
+msgstr "Jogosult csoport"
#. module: mail
#: view:mail.group:0
@@ -588,7 +614,7 @@ msgstr "Csatlakozás a csoporthoz"
#. module: mail
#: help:mail.mail,email_from:0
msgid "Message sender, taken from user preferences."
-msgstr ""
+msgstr "Üzenet küldő, a felhasználói meghatározásokból vett."
#. module: mail
#: code:addons/mail/wizard/invite.py:39
@@ -600,7 +626,7 @@ msgstr "Önt meghívták, hogy kövessen egy új dokumentumot.
"
#: field:mail.compose.message,parent_id:0
#: field:mail.message,parent_id:0
msgid "Parent Message"
-msgstr ""
+msgstr "Szülő üzenet"
#. module: mail
#: field:mail.compose.message,res_id:0
@@ -608,7 +634,7 @@ msgstr ""
#: field:mail.message,res_id:0
#: field:mail.wizard.invite,res_id:0
msgid "Related Document ID"
-msgstr ""
+msgstr "Kapcsolódó dokument azonosító ID"
#. module: mail
#: model:ir.actions.client,help:mail.action_mail_to_me_feeds
@@ -630,19 +656,19 @@ msgstr ""
#. module: mail
#: model:mail.group,name:mail.group_rd
msgid "R&D"
-msgstr ""
+msgstr "R&D"
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:61
#, python-format
msgid "/web/binary/upload_attachment"
-msgstr ""
+msgstr "/web/binary/upload_attachment"
#. module: mail
#: model:ir.model,name:mail.model_mail_thread
msgid "Email Thread"
-msgstr ""
+msgstr "E-mail összafűzés"
#. module: mail
#: view:mail.mail:0
@@ -654,19 +680,19 @@ msgstr "Speciális"
#: code:addons/mail/static/src/xml/mail.xml:226
#, python-format
msgid "Move to Inbox"
-msgstr ""
+msgstr "Bejövő üzenetekbe mozgatás"
#. module: mail
#: code:addons/mail/wizard/mail_compose_message.py:165
#, python-format
msgid "Re:"
-msgstr ""
+msgstr "Vissza:"
#. module: mail
#: field:mail.compose.message,to_read:0
#: field:mail.message,to_read:0
msgid "To read"
-msgstr ""
+msgstr "Elolvas"
#. module: mail
#: code:addons/mail/res_users.py:79
@@ -675,19 +701,21 @@ msgid ""
"You may not create a user. To create new users, you should use the "
"\"Settings > Users\" menu."
msgstr ""
+"Talán nem hozott létre felhasználót. Egy felhasználó létrehozásához, "
+"használja a \"Beállítások > Felhasználók\" menüt."
#. module: mail
#: help:mail.followers,res_model:0
#: help:mail.wizard.invite,res_model:0
msgid "Model of the followed resource"
-msgstr ""
+msgstr "A követett forrás modellje"
#. module: mail
#. openerp-web
#: code:addons/mail/static/src/xml/mail.xml:286
#, python-format
msgid "like"
-msgstr ""
+msgstr "hasonló"
#. module: mail
#: view:mail.compose.message:0
@@ -706,7 +734,7 @@ msgstr "Üzenet a követőimnek..."
#. module: mail
#: field:mail.notification,partner_id:0
msgid "Contact"
-msgstr ""
+msgstr "Kapcsolat"
#. module: mail
#: view:mail.group:0
@@ -714,21 +742,23 @@ msgid ""
"Only the invited followers can read the\n"
" discussions on this group."
msgstr ""
+"Csak a meghívott követők olvashatják ennek a\n"
+" csoportnak a beszélgetését."
#. module: mail
#: model:ir.model,name:mail.model_ir_ui_menu
msgid "ir.ui.menu"
-msgstr ""
+msgstr "ir.ui.menu"
#. module: mail
#: view:mail.message:0
msgid "Has attachments"
-msgstr ""
+msgstr "Vannak mellékletei"
#. module: mail
#: view:mail.mail:0
msgid "on"
-msgstr ""
+msgstr "ezen:"
#. module: mail
#: code:addons/mail/mail_message.py:916
@@ -737,6 +767,8 @@ msgid ""
"The following partners chosen as recipients for the email have no email "
"address linked :"
msgstr ""
+"A következő partnerek lettek kiválasztva mint címzettek, azokhoz az e-"
+"mailekhez amelyekhez nem lett kapcsolva e-mail cím :"
#. module: mail
#: help:mail.alias,alias_defaults:0
@@ -744,11 +776,13 @@ msgid ""
"A Python dictionary that will be evaluated to provide default values when "
"creating new records for this alias."
msgstr ""
+"Egy Python szótár aminak a kiértékelésével alapértékeket biztosít, ha ehhez "
+"az álnévhez új rekordokat hoz létre."
#. module: mail
#: model:ir.model,name:mail.model_mail_message_subtype
msgid "Message subtypes"
-msgstr ""
+msgstr "Üzenet altípusok"
#. module: mail
#: help:mail.compose.message,notified_partner_ids:0
@@ -756,13 +790,15 @@ msgstr ""
msgid ""
"Partners that have a notification pushing this message in their mailboxes"
msgstr ""
+"Partnerek akiknek van egy értesítésük ennek az üzenetnek a levelező "
+"ládájukba való mozgatására"
#. module: mail
#: selection:mail.compose.message,type:0
#: view:mail.mail:0
#: selection:mail.message,type:0
msgid "Comment"
-msgstr ""
+msgstr "Megjegyzés"
#. module: mail
#: model:ir.actions.client,help:mail.action_mail_inbox_feeds
@@ -792,7 +828,7 @@ msgstr ""
#. module: mail
#: field:mail.mail,notification:0
msgid "Is Notification"
-msgstr ""
+msgstr "Ez egy üzenet"
#. module: mail
#. openerp-web
@@ -812,6 +848,7 @@ msgstr "Küldés most"
msgid ""
"Unable to send email, please configure the sender's email address or alias."
msgstr ""
+"Nem tud e-mailt küldeni, kérem állítsa be a küldő e-mail címét vagy álnevet"
#. module: mail
#: help:res.users,alias_id:0
@@ -819,11 +856,13 @@ msgid ""
"Email address internally associated with this user. Incoming emails will "
"appear in the user's notifications."
msgstr ""
+"E-mail cím belsőleg összekapcsolva ezzel a felhasználóval. Bejövő e-mail-ok "
+"megjelennek a felhasználó értesítéseinél."
#. module: mail
#: field:mail.group,image:0
msgid "Photo"
-msgstr ""
+msgstr "Fénykép"
#. module: mail
#. openerp-web
@@ -832,13 +871,13 @@ msgstr ""
#: view:mail.wizard.invite:0
#, python-format
msgid "or"
-msgstr ""
+msgstr "vagy"
#. module: mail
#: help:mail.compose.message,vote_user_ids:0
#: help:mail.message,vote_user_ids:0
msgid "Users that voted for this message"
-msgstr ""
+msgstr "Felhasználók akik szavaztak erre az üzenetre"
#. module: mail
#: help:mail.group,alias_id:0
@@ -846,6 +885,8 @@ msgid ""
"The email address associated with this group. New emails received will "
"automatically create new topics."
msgstr ""
+"Az ezzel a csoporttal társított e-mail cím. Új beérkezett e-mailek "
+"automatikusan új témákat hoznak létre."
#. module: mail
#: view:mail.mail:0
@@ -861,7 +902,7 @@ msgstr "E-mail keresésée"
#: field:mail.compose.message,child_ids:0
#: field:mail.message,child_ids:0
msgid "Child Messages"
-msgstr ""
+msgstr "Alcsoportba rakott üzenetek"
#. module: mail
#: field:mail.alias,alias_user_id:0
@@ -1274,7 +1315,7 @@ msgstr ""
#. module: mail
#: model:mail.message.subtype,name:mail.mt_comment
msgid "Discussions"
-msgstr ""
+msgstr "Hozzászólások"
#. module: mail
#. openerp-web
diff --git a/addons/mail/i18n/pl.po b/addons/mail/i18n/pl.po
index 70281521c3a..9f2c10c394f 100644
--- a/addons/mail/i18n/pl.po
+++ b/addons/mail/i18n/pl.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-12 11:25+0000\n"
+"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) \n"
"Language-Team: Polish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-18 06:52+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: mail
#: view:mail.followers:0
@@ -85,7 +85,7 @@ msgstr "Utwórz wiadomość e-mail"
#: code:addons/mail/static/src/xml/mail.xml:132
#, python-format
msgid "Add them into recipients and followers"
-msgstr ""
+msgstr "Dodaj je do odbiorców i obserwatorów"
#. module: mail
#: view:mail.group:0
@@ -127,12 +127,12 @@ msgstr "Kreator email"
#: code:addons/mail/static/src/xml/mail_followers.xml:23
#, python-format
msgid "Add others"
-msgstr ""
+msgstr "Dodaj innych"
#. module: mail
#: field:mail.message.subtype,parent_id:0
msgid "Parent"
-msgstr ""
+msgstr "Nadrzędne"
#. module: mail
#: field:mail.group,message_unread:0
@@ -204,7 +204,7 @@ msgstr ""
#: code:addons/mail/static/src/xml/mail.xml:194
#, python-format
msgid "Uploading error"
-msgstr ""
+msgstr "Błąd uploadu"
#. module: mail
#: model:mail.group,name:mail.group_support
@@ -253,7 +253,7 @@ msgstr ""
#. module: mail
#: field:base.config.settings,alias_domain:0
msgid "Alias Domain"
-msgstr "Alisa domeny"
+msgstr "Alias domeny"
#. module: mail
#: field:mail.group,group_ids:0
@@ -290,7 +290,7 @@ msgstr "wysyłanie"
#: code:addons/mail/static/src/xml/mail_followers.xml:52
#, python-format
msgid "more."
-msgstr ""
+msgstr "więcej."
#. module: mail
#: help:mail.compose.message,type:0
@@ -422,7 +422,7 @@ msgstr ""
#. module: mail
#: field:mail.message.subtype,relation_field:0
msgid "Relation field"
-msgstr ""
+msgstr "Pole relacji"
#. module: mail
#: selection:mail.compose.message,type:0
@@ -678,7 +678,7 @@ msgstr "Zaawansowane"
#: code:addons/mail/static/src/xml/mail.xml:226
#, python-format
msgid "Move to Inbox"
-msgstr ""
+msgstr "Przejdź do przychodzącej"
#. module: mail
#: code:addons/mail/wizard/mail_compose_message.py:165
@@ -808,6 +808,15 @@ msgid ""
" \n"
" "
msgstr ""
+"\n"
+" Dobra robota! Nie masz maili przychodzących.\n"
+"
\n"
+" Przychodzące zawiera wiadomości prywatne lub przysłane\n"
+" do ciebie, jak również informacje związane z "
+"dokumentami\n"
+" lub ludźmi powiązanymi z tobą.\n"
+"
\n"
+" "
#. module: mail
#: field:mail.mail,notification:0
@@ -962,7 +971,7 @@ msgstr "Powiadomienie"
#: code:addons/mail/static/src/js/mail.js:585
#, python-format
msgid "Please complete partner's informations"
-msgstr ""
+msgstr "Uzupełnij informacje o partnerze"
#. module: mail
#: view:mail.wizard.invite:0
@@ -972,7 +981,7 @@ msgstr "Dodaj obserwatorów"
#. module: mail
#: view:mail.compose.message:0
msgid "Followers of selected items and"
-msgstr ""
+msgstr "Obserwatorzy wybranych elementów i"
#. module: mail
#: field:mail.alias,alias_force_thread_id:0
@@ -1165,7 +1174,7 @@ msgstr "Oznacz jako Do zrobienia"
#. module: mail
#: help:mail.message.subtype,parent_id:0
msgid "Parent subtype, used for automatic subscription."
-msgstr ""
+msgstr "Podtyp nadrzędny, stosowany do automatycznych subskrypcji."
#. module: mail
#: model:ir.model,name:mail.model_mail_wizard_invite
@@ -1203,7 +1212,7 @@ msgstr "Formularz grupy"
#: field:mail.message,starred:0
#: field:mail.notification,starred:0
msgid "Starred"
-msgstr ""
+msgstr "Oznaczone gwiazdką"
#. module: mail
#. openerp-web
@@ -1248,7 +1257,7 @@ msgstr ""
#: code:addons/mail/static/src/xml/mail_followers.xml:52
#, python-format
msgid "And"
-msgstr ""
+msgstr "I"
#. module: mail
#: field:mail.compose.message,message_id:0
@@ -1285,7 +1294,7 @@ msgstr "Kopia"
#. module: mail
#: help:mail.notification,starred:0
msgid "Starred message that goes into the todo mailbox"
-msgstr ""
+msgstr "Wiadomość oznaczona gwiazdką, która wejdzie do skrzynki Do zrobienia"
#. module: mail
#. openerp-web
diff --git a/addons/mrp/i18n/tr.po b/addons/mrp/i18n/tr.po
index 7f1e8761ac4..8c7298de6fb 100644
--- a/addons/mrp/i18n/tr.po
+++ b/addons/mrp/i18n/tr.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2013-02-07 13:51+0000\n"
-"Last-Translator: Ayhan KIZILTAN \n"
+"PO-Revision-Date: 2013-02-12 21:50+0000\n"
+"Last-Translator: Ediz Duman \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: 2013-02-08 05:24+0000\n"
-"X-Generator: Launchpad (build 16482)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: mrp
#: help:mrp.config.settings,module_mrp_repair:0
@@ -91,7 +91,7 @@ msgstr "Rotalar"
#. module: mrp
#: view:mrp.bom:0
msgid "Search Bill Of Material"
-msgstr "Ürün Ağacı Ara"
+msgstr "Ürün Ağacı Arama"
#. module: mrp
#: model:process.node,note:mrp.process_node_stockproduct1
@@ -103,7 +103,7 @@ msgstr "Stoklanabilir ürünler ve sarf malzemeleri için"
#: help:mrp.production,message_unread:0
#: help:mrp.production.workcenter.line,message_unread:0
msgid "If checked new messages require your attention."
-msgstr ""
+msgstr "Eğer seçilirse yeni mesajlar dikkat gerektirir."
#. module: mrp
#: help:mrp.routing.workcenter,cycle_nbr:0
@@ -117,7 +117,7 @@ msgstr ""
#. module: mrp
#: view:product.product:0
msgid "False"
-msgstr ""
+msgstr "Yanlış"
#. module: mrp
#: view:mrp.bom:0
@@ -149,7 +149,7 @@ msgstr ""
#: model:process.transition,name:mrp.process_transition_servicerfq0
#: model:process.transition,name:mrp.process_transition_stockrfq0
msgid "To Buy"
-msgstr "Satınalınır"
+msgstr "SatınAl"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_purchaseprocure0
@@ -160,7 +160,7 @@ msgstr ""
#. module: mrp
#: view:mrp.production:0
msgid "Products to Finish"
-msgstr "Bitirilecek Ürünler"
+msgstr "Bitecek Ürünler"
#. module: mrp
#: selection:mrp.bom,method:0
@@ -189,7 +189,7 @@ msgstr "Ürün Mik."
#. module: mrp
#: view:mrp.production:0
msgid "Unit of Measure"
-msgstr "Birim"
+msgstr "Ölçü Birimi"
#. module: mrp
#: model:process.node,note:mrp.process_node_purchaseprocure0
@@ -199,7 +199,7 @@ msgstr "Satın alınan malzemeler için"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menu_mrp_production_order_action
msgid "Order Planning"
-msgstr ""
+msgstr "Sipariş Planlama"
#. module: mrp
#: field:mrp.config.settings,module_mrp_operations:0
@@ -226,7 +226,7 @@ msgstr "İş Maliyeti"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_procureserviceproduct0
msgid "Procurement of services"
-msgstr "Hizmet satınalma"
+msgstr "Hizmet tedariki"
#. module: mrp
#: view:mrp.workcenter:0
@@ -262,7 +262,7 @@ msgstr "Üretilmiş Ürünler"
#. module: mrp
#: report:mrp.production.order:0
msgid "Destination Location"
-msgstr "Varış Konumu"
+msgstr "Hedef Lokasyon"
#. module: mrp
#: view:mrp.config.settings:0
@@ -292,12 +292,12 @@ msgstr ""
#. module: mrp
#: report:mrp.production.order:0
msgid "Partner Ref"
-msgstr "Paydaş Ref"
+msgstr "Partner Ref"
#. module: mrp
#: selection:mrp.workcenter.load,measure_unit:0
msgid "Amount in hours"
-msgstr "Saat olarak miktar"
+msgstr "Saat Tutarı"
#. module: mrp
#: field:mrp.production,product_lines:0
@@ -307,13 +307,13 @@ msgstr "Planlanmış mallar"
#. module: mrp
#: selection:mrp.bom,type:0
msgid "Sets / Phantom"
-msgstr "Takımlar / Görüntü"
+msgstr "Ayarlar / Görüntü"
#. module: mrp
#: view:mrp.production:0
#: field:mrp.production,state:0
msgid "Status"
-msgstr "Durum"
+msgstr "Durumu"
#. module: mrp
#: help:mrp.bom,position:0
@@ -323,12 +323,12 @@ msgstr "Dış bir plandaki duruma gönderme."
#. module: mrp
#: model:res.groups,name:mrp.group_mrp_routings
msgid "Manage Routings"
-msgstr ""
+msgstr "Rotaları Yönet"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_product_produce
msgid "Product Produce"
-msgstr "Ürün Üret"
+msgstr "Ürün Üretme"
#. module: mrp
#: constraint:mrp.bom:0
@@ -419,7 +419,7 @@ msgstr ""
#: field:mrp.production,product_qty:0
#: field:mrp.production.product.line,product_qty:0
msgid "Product Quantity"
-msgstr ""
+msgstr "Ürün Miktar"
#. module: mrp
#: help:mrp.production,picking_id:0
@@ -431,7 +431,7 @@ msgstr "Bu, bitmiş ürünü üretim planına getiren İç Toplama Listesidir"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menu_view_resource_calendar_search_mrp
msgid "Working Time"
-msgstr "Çalışma Süresi"
+msgstr "Çalışma Zamanı"
#. module: mrp
#: help:mrp.production,state:0
@@ -517,7 +517,7 @@ msgstr "Ürün Ağacı Yapısı"
#. module: mrp
#: model:process.node,note:mrp.process_node_serviceproduct0
msgid "Product type is service"
-msgstr "Ürün tipi hizmettir"
+msgstr "Ürün türü hizmetse"
#. module: mrp
#: help:mrp.workcenter,costs_cycle:0
@@ -547,7 +547,7 @@ msgstr "Teklif Talebi"
#: view:mrp.product_price:0
#: view:mrp.workcenter.load:0
msgid "or"
-msgstr ""
+msgstr "veya"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_billofmaterialrouting0
@@ -565,7 +565,7 @@ msgstr "Üretilecek Ürünler"
#. module: mrp
#: view:mrp.config.settings:0
msgid "Apply"
-msgstr ""
+msgstr "Uygula"
#. module: mrp
#: view:mrp.routing:0
@@ -576,12 +576,12 @@ msgstr "Üretim Lokasyonu"
#. module: mrp
#: view:mrp.production:0
msgid "Force Reservation"
-msgstr "Rezerve Et"
+msgstr "Rezerve Zorla"
#. module: mrp
#: field:report.mrp.inout,value:0
msgid "Stock value"
-msgstr "Stok Değeri"
+msgstr "Stok değeri"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.action_product_bom_structure
@@ -591,7 +591,7 @@ msgstr "Ürün Ürün Ağacı Yapısı"
#. module: mrp
#: view:mrp.production:0
msgid "Search Production"
-msgstr "Üretim Ara"
+msgstr "Üretim Arama"
#. module: mrp
#: help:mrp.routing.workcenter,sequence:0
@@ -607,7 +607,7 @@ msgstr "Ürün Ağacı Sıradüzeni"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_stockproduction0
msgid "To Produce"
-msgstr "Üretilir"
+msgstr "Üret"
#. module: mrp
#: help:mrp.config.settings,module_stock_no_autopicking:0
@@ -626,12 +626,12 @@ msgstr ""
#. module: mrp
#: selection:mrp.production,state:0
msgid "Picking Exception"
-msgstr "Toplama İstisnası"
+msgstr "Seçme İstisnası"
#. module: mrp
#: field:mrp.bom,bom_lines:0
msgid "BoM Lines"
-msgstr "Ürün Ağacı Satırları"
+msgstr "BoM Satırları"
#. module: mrp
#: field:mrp.workcenter,time_start:0
@@ -762,7 +762,7 @@ msgstr "Yazdır"
#: view:mrp.bom:0
#: view:mrp.workcenter:0
msgid "Type"
-msgstr "Tür"
+msgstr "Türü"
#. module: mrp
#: model:ir.actions.act_window,help:mrp.mrp_workcenter_action
@@ -817,7 +817,7 @@ msgstr "Uyarı!"
#. module: mrp
#: report:mrp.production.order:0
msgid "Printing date"
-msgstr "Yazdırma Tarihi"
+msgstr "Yazdırma tarihi"
#. module: mrp
#: model:process.node,name:mrp.process_node_orderrfq0
@@ -828,7 +828,7 @@ msgstr "Teklif İsteği"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_producttostockrules0
msgid "Procurement rule"
-msgstr "Satınalma kuralı"
+msgstr "Tedarik kuralı"
#. module: mrp
#: help:mrp.workcenter,costs_cycle_account_id:0
@@ -851,7 +851,7 @@ msgstr "Kısmi"
#. module: mrp
#: report:mrp.production.order:0
msgid "WorkCenter"
-msgstr "İş Merkezi"
+msgstr "İşMerkezi"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_procureserviceproduct0
@@ -894,7 +894,7 @@ msgstr "Üretim Emri"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_productionprocureproducts0
msgid "Procurement of raw material"
-msgstr "Ham malzeme satınalma"
+msgstr "Ham malzeme tedariki"
#. module: mrp
#: sql_constraint:mrp.bom:0
@@ -913,14 +913,14 @@ msgstr "Toplam Çevrim"
#. module: mrp
#: selection:mrp.production,state:0
msgid "Ready to Produce"
-msgstr "Üretim için Hazır"
+msgstr "Üretime Hazır"
#. module: mrp
#: field:mrp.bom,message_is_follower:0
#: field:mrp.production,message_is_follower:0
#: field:mrp.production.workcenter.line,message_is_follower:0
msgid "Is a Follower"
-msgstr ""
+msgstr "Bir Takipçisi mi"
#. module: mrp
#: view:mrp.bom:0
@@ -949,7 +949,7 @@ msgstr ""
#. module: mrp
#: field:mrp.bom,type:0
msgid "BoM Type"
-msgstr "Ürün Ağacı Tipi"
+msgstr "Bom Türü"
#. module: mrp
#: code:addons/mrp/procurement.py:52
@@ -963,7 +963,7 @@ msgstr ""
#. module: mrp
#: view:mrp.property:0
msgid "Search"
-msgstr "Ara"
+msgstr "Arama"
#. module: mrp
#: model:process.node,note:mrp.process_node_billofmaterial0
@@ -1028,7 +1028,7 @@ msgstr "Özellik Grubu"
#. module: mrp
#: field:mrp.config.settings,group_mrp_routings:0
msgid "Manage routings and work orders "
-msgstr ""
+msgstr "Rotalar ve iş emirleri yönet "
#. module: mrp
#: model:process.node,note:mrp.process_node_production0
@@ -1068,7 +1068,7 @@ msgstr "Son"
#. module: mrp
#: model:process.node,name:mrp.process_node_servicemts0
msgid "Make to stock"
-msgstr "Stoğa Üretim"
+msgstr "Stok için Üretim"
#. module: mrp
#: report:bom.structure:0
@@ -1087,17 +1087,17 @@ msgstr "Üretim Emirleri"
#. module: mrp
#: selection:mrp.production,state:0
msgid "Awaiting Raw Materials"
-msgstr ""
+msgstr "Hammaddeler Bekliyor"
#. module: mrp
#: field:mrp.bom,position:0
msgid "Internal Reference"
-msgstr "İç Kaynak"
+msgstr "Dahili Referans"
#. module: mrp
#: field:mrp.production,product_uos_qty:0
msgid "Product UoS Quantity"
-msgstr ""
+msgstr "Ürün UoS Miktarı"
#. module: mrp
#: field:mrp.bom,name:0
@@ -1124,12 +1124,12 @@ msgstr "Biçim"
#: help:mrp.production,message_ids:0
#: help:mrp.production.workcenter.line,message_ids:0
msgid "Messages and communication history"
-msgstr ""
+msgstr "Mesajlar ve iletişim geçmişi"
#. module: mrp
#: field:mrp.workcenter.load,measure_unit:0
msgid "Amount measuring unit"
-msgstr "Tutar Ölçü Birimi"
+msgstr "Tutar ölçü birimi"
#. module: mrp
#: help:mrp.config.settings,module_mrp_jit:0
@@ -1158,7 +1158,7 @@ msgstr ""
#. module: mrp
#: model:ir.actions.act_window,name:mrp.mrp_production_action3
msgid "Manufacturing Orders in Progress"
-msgstr "İşlemdeki Üretim Emirleri"
+msgstr "DevamEden Üretim Emirleri"
#. module: mrp
#: model:ir.actions.client,name:mrp.action_client_mrp_menu
@@ -1177,7 +1177,7 @@ msgstr "Ürün bekleyen Üretim Emirleri"
#: view:mrp.routing:0
#: view:mrp.workcenter:0
msgid "Group By..."
-msgstr "Gruplandır..."
+msgstr "Grupla İle..."
#. module: mrp
#: code:addons/mrp/report/price.py:130
@@ -1190,7 +1190,7 @@ msgstr "Çevrim Maliyeti"
#: code:addons/mrp/wizard/change_production_qty.py:88
#, python-format
msgid "Cannot find bill of material for this product."
-msgstr ""
+msgstr "Bu ürün için malzeme faturası bulamıyor."
#. module: mrp
#: selection:mrp.workcenter.load,measure_unit:0
@@ -1200,7 +1200,7 @@ msgstr "Çevrim tutarı"
#. module: mrp
#: field:mrp.production,location_dest_id:0
msgid "Finished Products Location"
-msgstr "Bitmiş Ürün Konumu"
+msgstr "Bitmiş Ürün Lokasyonu"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menu_pm_resources_config
@@ -1217,25 +1217,25 @@ msgstr "Bu iş merkezinin belirlenen rotadaki iemi yapması için gereken saat"
#. module: mrp
#: field:mrp.workcenter,costs_journal_id:0
msgid "Analytic Journal"
-msgstr "Analiz Günlüğü"
+msgstr "Analitik Yevmiye"
#. module: mrp
#: code:addons/mrp/report/price.py:139
#, python-format
msgid "Supplier Price per Unit of Measure"
-msgstr ""
+msgstr "Ölçü Birim başına Tedarikçi Fiyatı"
#. module: mrp
#: selection:mrp.workcenter.load,time_unit:0
msgid "Per week"
-msgstr "Her Hafta"
+msgstr "Her hafta"
#. module: mrp
#: field:mrp.bom,message_unread:0
#: field:mrp.production,message_unread:0
#: field:mrp.production.workcenter.line,message_unread:0
msgid "Unread Messages"
-msgstr ""
+msgstr "Okunmamış mesajlar"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_stockmts0
@@ -1280,7 +1280,7 @@ msgstr "Zaman birimini seç"
#: model:ir.ui.menu,name:mrp.menu_mrp_product_form
#: view:mrp.config.settings:0
msgid "Products"
-msgstr ""
+msgstr "Ürünler"
#. module: mrp
#: view:report.workcenter.load:0
@@ -1307,7 +1307,7 @@ msgstr ""
#: code:addons/mrp/mrp.py:505
#, python-format
msgid "Invalid Action!"
-msgstr ""
+msgstr "Geçersiz İşlem!"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_producttostockrules0
@@ -1339,7 +1339,7 @@ msgstr "Öncelik"
#: model:ir.model,name:mrp.model_stock_picking
#: field:mrp.production,picking_id:0
msgid "Picking List"
-msgstr "Toplama Listesi"
+msgstr "Seçim Listesi"
#. module: mrp
#: help:mrp.production,bom_id:0
@@ -1352,7 +1352,7 @@ msgstr ""
#: code:addons/mrp/mrp.py:375
#, python-format
msgid "%s (copy)"
-msgstr ""
+msgstr "%s (kopya)"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_production_product_line
@@ -1393,12 +1393,12 @@ msgstr ""
#. module: mrp
#: model:ir.model,name:mrp.model_procurement_order
msgid "Procurement"
-msgstr "Satınalma"
+msgstr "Tedarik"
#. module: mrp
#: field:mrp.config.settings,module_product_manufacturer:0
msgid "Define manufacturers on products "
-msgstr ""
+msgstr "Ürünleri üreticileri tanımlayın "
#. module: mrp
#: model:ir.actions.act_window,name:mrp.action_view_mrp_product_price_wizard
@@ -1425,12 +1425,12 @@ msgstr "mrp iş merkezini ara"
#. module: mrp
#: view:mrp.bom:0
msgid "BoM Structure"
-msgstr "BOM YAPISI"
+msgstr "BoM Yapısı"
#. module: mrp
#: field:mrp.production,date_start:0
msgid "Start Date"
-msgstr "Baş. Tarihi"
+msgstr "Başlama Tarihi"
#. module: mrp
#: field:mrp.workcenter,costs_hour_account_id:0
@@ -1442,7 +1442,7 @@ msgstr "Saat Hesabı"
#: field:mrp.production,product_uom:0
#: field:mrp.production.product.line,product_uom:0
msgid "Product Unit of Measure"
-msgstr ""
+msgstr "Ürün Ölçü Birimi"
#. module: mrp
#: view:mrp.production:0
@@ -1457,13 +1457,13 @@ msgstr "Yöntem"
#. module: mrp
#: view:mrp.production:0
msgid "Pending"
-msgstr "&Kalan Mesajları Gönder"
+msgstr "Bekleyen"
#. module: mrp
#: field:mrp.bom,active:0
#: field:mrp.routing,active:0
msgid "Active"
-msgstr "Aktif"
+msgstr "Etkin"
#. module: mrp
#: help:mrp.config.settings,group_mrp_routings:0
@@ -1504,7 +1504,7 @@ msgstr "'Minimum stok kuralı' malzemesi"
#. module: mrp
#: view:mrp.production:0
msgid "Extra Information"
-msgstr "Extra Bilgi"
+msgstr "Ekstra Bilgisi"
#. module: mrp
#: model:ir.model,name:mrp.model_change_production_qty
@@ -1519,7 +1519,7 @@ msgstr "Ham malzeme için satınalma emrlerini yönetir."
#. module: mrp
#: field:mrp.production.product.line,product_uos_qty:0
msgid "Product UOS Quantity"
-msgstr ""
+msgstr "Ürün UOS Miktarı"
#. module: mrp
#: field:mrp.workcenter,costs_general_account_id:0
@@ -1540,23 +1540,23 @@ msgstr "'%s' durumundaki bir üretim emri silinemez."
#. module: mrp
#: selection:mrp.production,state:0
msgid "Done"
-msgstr "Bitti"
+msgstr "Biten"
#. module: mrp
#: view:product.product:0
msgid "When you sell this product, OpenERP will trigger"
-msgstr ""
+msgstr "Bu ürünü satarken, OpenERP tetikleyecek"
#. module: mrp
#: field:mrp.production,origin:0
#: report:mrp.production.order:0
msgid "Source Document"
-msgstr "Kaynak belge"
+msgstr "Kaynak Belge"
#. module: mrp
#: selection:mrp.production,priority:0
msgid "Not urgent"
-msgstr "Acil Değil"
+msgstr "Acil değil"
#. module: mrp
#: field:mrp.production,user_id:0
@@ -1640,7 +1640,7 @@ msgstr "Ürünün Maliyet Yapısını Yazdır."
#: field:mrp.bom,product_uos:0
#: field:mrp.production.product.line,product_uos:0
msgid "Product UOS"
-msgstr "Stok 2.Birim"
+msgstr "Ürün UOS"
#. module: mrp
#: view:mrp.production:0
@@ -1690,7 +1690,7 @@ msgstr ""
#. module: mrp
#: field:mrp.production,product_uos:0
msgid "Product UoS"
-msgstr "Stok 2.Birim"
+msgstr "Ürün UoS"
#. module: mrp
#: selection:mrp.production,priority:0
@@ -1718,12 +1718,12 @@ msgstr "Onayla"
#. module: mrp
#: view:mrp.config.settings:0
msgid "Order"
-msgstr ""
+msgstr "Sipariş"
#. module: mrp
#: view:mrp.property.group:0
msgid "Properties categories"
-msgstr "Özellik Grubu"
+msgstr "Özellik kategorisi"
#. module: mrp
#: help:mrp.production.workcenter.line,sequence:0
@@ -1774,17 +1774,17 @@ msgstr "Çevrim Maliyeti"
#: model:process.node,name:mrp.process_node_serviceproduct0
#: model:process.node,name:mrp.process_node_serviceproduct1
msgid "Service"
-msgstr "Servis"
+msgstr "Hizmetler"
#. module: mrp
#: selection:mrp.production,state:0
msgid "Cancelled"
-msgstr "İptal Edildi"
+msgstr "İptalEdildi"
#. module: mrp
#: view:mrp.production:0
msgid "(Update)"
-msgstr ""
+msgstr "(güncelle)"
#. module: mrp
#: help:mrp.config.settings,module_mrp_operations:0
@@ -1826,7 +1826,7 @@ msgstr "Şirket"
#. module: mrp
#: view:mrp.bom:0
msgid "Default Unit of Measure"
-msgstr ""
+msgstr "Öntanımlı Ölçü Birimi"
#. module: mrp
#: field:mrp.workcenter,time_cycle:0
@@ -1844,14 +1844,14 @@ msgstr "Üretim Emri"
#. module: mrp
#: model:process.node,note:mrp.process_node_productminimumstockrule0
msgid "Automatic procurement rule"
-msgstr "Otomatik satınalma kuralı"
+msgstr "Otomatik tedarik kuralı"
#. module: mrp
#: field:mrp.bom,message_ids:0
#: field:mrp.production,message_ids:0
#: field:mrp.production.workcenter.line,message_ids:0
msgid "Messages"
-msgstr ""
+msgstr "Mesajlar"
#. module: mrp
#: view:mrp.production:0
@@ -1864,35 +1864,35 @@ msgstr "Veri Hesapla"
#: code:addons/mrp/wizard/change_production_qty.py:88
#, python-format
msgid "Error!"
-msgstr ""
+msgstr "Hatta!"
#. module: mrp
#: code:addons/mrp/report/price.py:139
#: view:mrp.bom:0
#, python-format
msgid "Components"
-msgstr "Elemanlar"
+msgstr "Bileşenleri"
#. module: mrp
#: report:bom.structure:0
#: model:ir.actions.report.xml,name:mrp.report_bom_structure
msgid "BOM Structure"
-msgstr "BOM YAPISI"
+msgstr "BOM Yapısı"
#. module: mrp
#: field:mrp.config.settings,module_mrp_jit:0
msgid "Generate procurement in real time"
-msgstr ""
+msgstr "Gerçek zamanlı tedarik Üret"
#. module: mrp
#: field:mrp.bom,date_stop:0
msgid "Valid Until"
-msgstr "Geç. Bitiş"
+msgstr "Kadar Geçerli"
#. module: mrp
#: field:mrp.bom,date_start:0
msgid "Valid From"
-msgstr "Geç. Başl."
+msgstr "İtibaren Geçerli"
#. module: mrp
#: selection:mrp.bom,type:0
@@ -1908,17 +1908,17 @@ msgstr "Üretim Teslimat Süresi"
#: code:addons/mrp/mrp.py:285
#, python-format
msgid "Warning"
-msgstr ""
+msgstr "Uyarı"
#. module: mrp
#: field:mrp.bom,product_uos_qty:0
msgid "Product UOS Qty"
-msgstr "Stok 2.Br. Mik."
+msgstr "Ürün UOS Qty"
#. module: mrp
#: field:mrp.production,move_prod_id:0
msgid "Product Move"
-msgstr ""
+msgstr "Ürün Hareketi"
#. module: mrp
#: model:ir.actions.act_window,help:mrp.action_report_in_out_picking_tree
@@ -1945,7 +1945,7 @@ msgstr "Üretim Verimliliği"
#: field:mrp.production,message_follower_ids:0
#: field:mrp.production.workcenter.line,message_follower_ids:0
msgid "Followers"
-msgstr ""
+msgstr "Takipçileri"
#. module: mrp
#: help:mrp.bom,active:0
@@ -1974,12 +1974,12 @@ msgstr "Yalnızca Sarf Et"
#. module: mrp
#: view:mrp.production:0
msgid "Recreate Picking"
-msgstr "Hazırlığı Yeniden Oluştur"
+msgstr "Seçimi Yeniden Oluştur"
#. module: mrp
#: selection:mrp.bom,method:0
msgid "On Order"
-msgstr "Sipariş"
+msgstr "Sipariş'den"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menu_mrp_configuration
@@ -1989,7 +1989,7 @@ msgstr "Ayarlar"
#. module: mrp
#: view:mrp.bom:0
msgid "Starting Date"
-msgstr "Başlangıç Tarihi"
+msgstr "Başlama Tarihi"
#. module: mrp
#: field:mrp.workcenter,time_stop:0
@@ -2021,7 +2021,7 @@ msgstr "Maliyet Bilgisi"
#. module: mrp
#: model:process.node,name:mrp.process_node_purchaseprocure0
msgid "Procurement Orders"
-msgstr "Satınalma Siparişleri"
+msgstr "Tedarik Siparişleri"
#. module: mrp
#: help:mrp.bom,product_rounding:0
@@ -2055,7 +2055,7 @@ msgstr ""
#. module: mrp
#: field:mrp.routing.workcenter,routing_id:0
msgid "Parent Routing"
-msgstr "Ana Rota"
+msgstr "Üst Rota"
#. module: mrp
#: help:mrp.workcenter,time_start:0
@@ -2065,7 +2065,7 @@ msgstr "Ayar için saat cinsinden süre."
#. module: mrp
#: field:mrp.config.settings,module_mrp_repair:0
msgid "Manage repairs of products "
-msgstr ""
+msgstr "Ürün onarım yönetme "
#. module: mrp
#: help:mrp.config.settings,module_mrp_byproduct:0
@@ -2097,7 +2097,7 @@ msgstr "Stoktan atama."
#: code:addons/mrp/report/price.py:139
#, python-format
msgid "Cost Price per Unit of Measure"
-msgstr ""
+msgstr "Ölçü Birim başına Maliyet Fiyatı"
#. module: mrp
#: field:report.mrp.inout,date:0
@@ -2136,12 +2136,12 @@ msgstr "Kullanıcı"
#. module: mrp
#: selection:mrp.product.produce,mode:0
msgid "Consume & Produce"
-msgstr "Sarf Et ve Üret"
+msgstr "Sarf & Üret"
#. module: mrp
#: field:mrp.bom,bom_id:0
msgid "Parent BoM"
-msgstr "Ana BOM"
+msgstr "Üst BoM"
#. module: mrp
#: report:bom.structure:0
@@ -2176,7 +2176,7 @@ msgstr "Ürün Satınal"
#. module: mrp
#: field:mrp.product.produce,product_qty:0
msgid "Select Quantity"
-msgstr "Miiktar Seç"
+msgstr "Miktar Seç"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.mrp_bom_form_action
@@ -2192,7 +2192,7 @@ msgstr "Ürün Ağaçları"
#: code:addons/mrp/mrp.py:610
#, python-format
msgid "Cannot find a bill of material for this product."
-msgstr ""
+msgstr "Bu ürün için malzeme faturası bulamıyor."
#. module: mrp
#: view:product.product:0
@@ -2211,7 +2211,7 @@ msgstr ""
#: view:mrp.routing.workcenter:0
#: view:mrp.workcenter:0
msgid "General Information"
-msgstr "Genel Bilgiler"
+msgstr "Genel Bilgisi"
#. module: mrp
#: view:mrp.production:0
@@ -2309,7 +2309,7 @@ msgstr ""
#: model:ir.actions.act_window,name:mrp.action_mrp_configuration
#: view:mrp.config.settings:0
msgid "Configure Manufacturing"
-msgstr "Üretimi Yapılandır"
+msgstr "Üretimi Yapılandırma"
#. module: mrp
#: view:product.product:0
@@ -2323,7 +2323,7 @@ msgstr ""
#. module: mrp
#: field:mrp.config.settings,group_mrp_properties:0
msgid "Allow several bill of materials per products using properties"
-msgstr ""
+msgstr "Özelliklerini kullanarak ürün başına malzemelerin birkaç fatura İzni"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.mrp_property_group_action
@@ -2361,7 +2361,7 @@ msgstr "Temizlik için saat cinsinden süre."
#: field:mrp.production,message_summary:0
#: field:mrp.production.workcenter.line,message_summary:0
msgid "Summary"
-msgstr ""
+msgstr "Özet"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_purchaseprocure0
diff --git a/addons/procurement/i18n/mn.po b/addons/procurement/i18n/mn.po
index f5f1625a81d..c88ed5041b2 100644
--- a/addons/procurement/i18n/mn.po
+++ b/addons/procurement/i18n/mn.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-13 04:55+0000\n"
+"Last-Translator: gobi \n"
"Language-Team: Mongolian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-18 06:58+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: procurement
#: model:ir.ui.menu,name:procurement.menu_stock_sched
@@ -54,6 +54,8 @@ msgid ""
"required quantities are always\n"
" available"
msgstr ""
+"шаардлагатай тоо хэмжээ үргэлж \n"
+" бэлэн"
#. module: procurement
#: view:product.product:0
@@ -63,6 +65,10 @@ msgid ""
"inventory, you should\n"
" create others rules like orderpoints."
msgstr ""
+"Хэрэв хангалттай тоо хэмжээ байхгүй бол хүргэх захиалга\n"
+" шинэ бараа иртэл хүлээгдэнэ. Нөөцийг дүүргэхийн "
+"тулд\n"
+" бусад дүрэмүүдийг тодорхойлох хэрэгтэй."
#. module: procurement
#: field:procurement.order,procure_method:0
@@ -73,7 +79,7 @@ msgstr "Татан авах арга"
#. module: procurement
#: selection:product.template,supply_method:0
msgid "Manufacture"
-msgstr ""
+msgstr "Үйлдвэрлэл"
#. module: procurement
#: model:process.process,name:procurement.process_process_serviceproductprocess0
@@ -88,7 +94,7 @@ msgstr "Зохистой нөөцийн дүрмийг хангах"
#. module: procurement
#: view:stock.warehouse.orderpoint:0
msgid "Rules"
-msgstr ""
+msgstr "Дүрэм"
#. module: procurement
#: field:procurement.order,company_id:0
@@ -119,7 +125,7 @@ msgstr "Сүүлд гарсан алдаа"
#. module: procurement
#: field:stock.warehouse.orderpoint,product_min_qty:0
msgid "Minimum Quantity"
-msgstr ""
+msgstr "Хамгийн бага тоо хэмжээ"
#. module: procurement
#: help:mrp.property,composition:0
@@ -148,22 +154,22 @@ msgstr ""
#. module: procurement
#: field:procurement.order,message_ids:0
msgid "Messages"
-msgstr ""
+msgstr "Зурвасууд"
#. module: procurement
#: help:procurement.order,message:0
msgid "Exception occurred while computing procurement orders."
-msgstr "Татан авалтын захиалгуудыг тооцоолоход сондгой зүйлс тохиолдлоо."
+msgstr "Татан авалтын захиалгуудыг тооцоолоход саатал тохиолдлоо."
#. module: procurement
#: view:product.product:0
msgid "Products"
-msgstr ""
+msgstr "Бараа"
#. module: procurement
#: selection:procurement.order,state:0
msgid "Cancelled"
-msgstr ""
+msgstr "Цуцлагдсан"
#. module: procurement
#: view:procurement.order:0
@@ -174,6 +180,7 @@ msgstr "Татан авалтын хугацаагүй саатал"
#: help:procurement.order,message_unread:0
msgid "If checked new messages require your attention."
msgstr ""
+"Хэрэв тэмдэглэгдсэн бол таныг шинэ зурвасуудад анхаарал хандуулахыг шаардана."
#. module: procurement
#: view:procurement.order.compute.all:0
@@ -188,13 +195,13 @@ msgstr "Барааны хөдөлгөөн"
#. module: procurement
#: view:product.product:0
msgid "Stockable products"
-msgstr ""
+msgstr "Хадгалах бараа"
#. module: procurement
#: code:addons/procurement/procurement.py:137
#, python-format
msgid "Invalid Action!"
-msgstr ""
+msgstr "Буруу Үйлдэл!"
#. module: procurement
#: help:procurement.order,message_summary:0
@@ -202,6 +209,8 @@ msgid ""
"Holds the Chatter summary (number of messages, ...). This summary is "
"directly in html format in order to be inserted in kanban views."
msgstr ""
+"Чаатлагчийн хураангуйг агуулна (зурвасын тоо,...). Энэ хураангуй нь шууд "
+"html форматтай бөгөөд канбан харагдацад шууд орж харагдах боломжтой."
#. module: procurement
#: selection:procurement.order,state:0
@@ -230,6 +239,18 @@ msgid ""
" \n"
" "
msgstr ""
+"\n"
+" Татан авах захиалга нь тодорхой бараанууд тодорхой "
+"хэмжээгээр тодорхой байрлалд шаардлагатай болохыг илэрхийлнэ. Борлуулалтын "
+"захиалга нь Татан авах захиалгыг үүсгэгч байж болох ч энэ нь тусдаа баримт "
+"байна. Татан авалт болон барааны тохиргооноос хамаарч татан авалтын механизм "
+"нь барааг нөөцлөх ажлыг агуулахаас хангах, нийлүүлэгчээс захиалах, "
+"үйлдвэрлүүлэх зэрэг оролдлогыг хийнэ. Татан авалтыг яаж хийхийг "
+"тодорхойлоогүй тохиолдолд систем Татан авалтын сааталыг үүсгэнэ. Зарим "
+"саатал нь автоматаар шийдэгдэх боловч зарим нь гар боловсруулалт хийхийг "
+"шаардана. Эдгээр нь алдааны тусгай мэдэгдлээр ялгагдана.\n"
+"
\n"
+" "
#. module: procurement
#: selection:procurement.order,state:0
@@ -255,7 +276,7 @@ msgstr "Батлах"
#. module: procurement
#: view:stock.warehouse.orderpoint:0
msgid "Quantity Multiple"
-msgstr ""
+msgstr "Олон тоо хэмжээ"
#. module: procurement
#: help:procurement.order,origin:0
@@ -290,17 +311,17 @@ msgstr "Урьтамж"
#. module: procurement
#: view:stock.warehouse.orderpoint:0
msgid "Reordering Rules Search"
-msgstr ""
+msgstr "Дахин захиалах дүрэмийн хайлт"
#. module: procurement
#: selection:procurement.order,state:0
msgid "Waiting"
-msgstr "Хүлээж байна"
+msgstr "Хүлээгдэж буй"
#. module: procurement
#: field:procurement.order,message_follower_ids:0
msgid "Followers"
-msgstr ""
+msgstr "Дагагчид"
#. module: procurement
#: field:procurement.order,location_id:0
@@ -379,7 +400,7 @@ msgstr "Хэмжих нэгж"
#: selection:procurement.order,procure_method:0
#: selection:product.template,procure_method:0
msgid "Make to Stock"
-msgstr ""
+msgstr "Нөөцлүүлэх"
#. module: procurement
#: model:ir.actions.act_window,help:procurement.procurement_action
@@ -401,6 +422,21 @@ msgid ""
" \n"
" "
msgstr ""
+"\n"
+" Татан авалтын захиалга үүсгэхдээ дарна. \n"
+"
\n"
+" Татан авалтын захиалга нь тодорхой бараа тодорхой байрлалд\n"
+" тодорхой тоо хэмжээгээр хэрэгтэй болохыг илэрхийлнэ. Татан "
+"\n"
+" авалтын захиалга нь борлуулалтын захиалга, татах "
+"логистикийн \n"
+" дүрэм, хамгийн бага нөөцийн дүрэм зэрэгээс автоматаар "
+"үүсгэгдэнэ.\n"
+"
\n"
+" Татан авах захиалга батлагдмагц татан авах шаардлагатай \n"
+" үйлдлүүдийг үүсгэнэ: худалдан авах, үйлдвэрлэх, гм.\n"
+"
\n"
+" "
#. module: procurement
#: help:procurement.order,procure_method:0
@@ -422,6 +458,8 @@ msgid ""
"use the available\n"
" inventory"
msgstr ""
+"Бэлэн байгаа бараа материалыг \n"
+" хэрэглэх"
#. module: procurement
#: model:ir.model,name:procurement.model_procurement_order
@@ -474,7 +512,7 @@ msgstr "Холбогдох Татан Авалтын Захиалгууд"
#. module: procurement
#: field:procurement.order,message_unread:0
msgid "Unread Messages"
-msgstr ""
+msgstr "Уншаагүй Зурвасууд"
#. module: procurement
#: selection:mrp.property,composition:0
@@ -494,6 +532,13 @@ msgid ""
" It is in 'Waiting'. status when the procurement is waiting for another one "
"to finish."
msgstr ""
+"Татан авалт үүсгэгдмэгцээ төлөв нь 'Ноорог' байна.\n"
+" Батласан дараа төлөв нь 'Батлагдсан' болно. \n"
+"Батласан дараа 'Хийгдэж буй' төлөвт шилжинэ.\n"
+" Хэрэв ямарваа сондгойрол үүссэн бол 'Саатал' төлөвт орно.\n"
+" Саатлыг шийдвэрлэсэн дараа 'Бэлэн' төлөвтэй болно.\n"
+" Хэрэв татан авалт нь өөр ямар нэг татан авалт дуусахыг хүлээж байгаа бол "
+"'Хүлээж буй' төлөвтэй байна."
#. module: procurement
#: help:stock.warehouse.orderpoint,active:0
@@ -512,6 +557,9 @@ msgid ""
"procurement method as\n"
" 'Make to Stock'."
msgstr ""
+"Үйлчилгээг борлуулах үед ямарваа зүйл өдөөгдөхгүй.\n"
+" Захиалагчид хүргэхийн тулд татан авах аргыг\n"
+" 'Нөөцлүүлэх' гэж сонгоно."
#. module: procurement
#: help:procurement.orderpoint.compute,automatic:0
@@ -523,7 +571,7 @@ msgstr ""
#: field:procurement.order,product_uom:0
#: field:stock.warehouse.orderpoint,product_uom:0
msgid "Product Unit of Measure"
-msgstr ""
+msgstr "Барааны хэмжих нэгж"
#. module: procurement
#: constraint:stock.warehouse.orderpoint:0
@@ -531,6 +579,8 @@ msgid ""
"You have to select a product unit of measure in the same category than the "
"default unit of measure of the product"
msgstr ""
+"Барааны хэмжих нэгжийг ижил ангилалд сонгох хэрэгтэй. Барааны анхны хэмжих "
+"нэгжээс ялгаатайгаар."
#. module: procurement
#: view:procurement.order:0
@@ -543,6 +593,9 @@ msgid ""
"as it's a consumable (as a result of this, the quantity\n"
" on hand may become negative)."
msgstr ""
+"хангамжийн гэсэн тохиолдолд (гарт байгаа тоо хэмжээ нь \n"
+" "
+"сөрөг утгатай болж болно)."
#. module: procurement
#: field:procurement.order,note:0
@@ -556,6 +609,9 @@ msgid ""
"OpenERP generates a procurement to bring the forecasted quantity to the Max "
"Quantity."
msgstr ""
+"Ирээдүйн тоо хэмжээ нь энэ талбарт заасан хамгийн бага тоо хэмжээнээс бага "
+"болоход OpenERP нь автоматаар татан авалтыг хамгийн их тоо хэмжээгээр "
+"байхаар үүсгэнэ."
#. module: procurement
#: selection:procurement.order,state:0
@@ -567,7 +623,7 @@ msgstr "Ноорог"
#: model:ir.ui.menu,name:procurement.menu_stock_proc_schedulers
#: view:procurement.order.compute.all:0
msgid "Run Schedulers"
-msgstr ""
+msgstr "Товлогчдыг ажиллуулах"
#. module: procurement
#: view:procurement.order.compute:0
@@ -583,12 +639,12 @@ msgstr "Төлөв"
#. module: procurement
#: selection:product.template,supply_method:0
msgid "Buy"
-msgstr ""
+msgstr "Худалдаж авах"
#. module: procurement
#: view:product.product:0
msgid "for the delivery order."
-msgstr ""
+msgstr "хүргэлтийн захиалгад."
#. module: procurement
#: selection:procurement.order,priority:0
@@ -602,16 +658,19 @@ msgid ""
"will be generated, depending on the product type. \n"
"Buy: When procuring the product, a purchase order will be generated."
msgstr ""
+"Үйлдвэрлэх: Барааг татан авахад үйлдвэрлэлийн захиалга үүснэ. Барааны "
+"төрөлөөс энэ гэхдээ хамаарна. \n"
+"Худалдан авах: Барааг татан авахад худалдан авалтын захиалга үүснэ."
#. module: procurement
#: field:stock.warehouse.orderpoint,product_max_qty:0
msgid "Maximum Quantity"
-msgstr ""
+msgstr "Хамгийн их тоо хэмжээ"
#. module: procurement
#: field:procurement.order,message_is_follower:0
msgid "Is a Follower"
-msgstr ""
+msgstr "Дагагч эсэх"
#. module: procurement
#: code:addons/procurement/procurement.py:366
@@ -636,6 +695,8 @@ msgid ""
"Please check the quantity in procurement order(s) for the product \"%s\", it "
"should not be 0 or less!"
msgstr ""
+"Татан авалтын захиалгуудад \"%s\" барааны тоо хэмжээг шалгана уу, энэ нь 0 "
+"юмуу түүнээс бага байж болохгүй!"
#. module: procurement
#: field:procurement.order,date_planned:0
@@ -653,6 +714,8 @@ msgid ""
"When you sell this product, a delivery order will be created.\n"
" OpenERP will consider that the"
msgstr ""
+"Барааг зарахад хүргэх захиалга үүснэ.\n"
+" OpenERP үүнийг үзэхдээ"
#. module: procurement
#: code:addons/procurement/schedulers.py:133
@@ -688,7 +751,7 @@ msgstr "Нэмэлт мэдээлэл"
#. module: procurement
#: field:procurement.order,message_summary:0
msgid "Summary"
-msgstr ""
+msgstr "Хураангуй"
#. module: procurement
#: sql_constraint:stock.warehouse.orderpoint:0
@@ -708,7 +771,7 @@ msgstr "Хаагдсан огноо"
#. module: procurement
#: view:res.company:0
msgid "Logistics"
-msgstr ""
+msgstr "Логистик"
#. module: procurement
#: help:product.template,procure_method:0
@@ -717,6 +780,9 @@ msgid ""
"for replenishment. \n"
"Make to Order: When needed, the product is purchased or produced."
msgstr ""
+"Нөөцлүүлэх: Шаардлагатай болсон үед агуулахаас авах юмуу нөхөн дүүргэгдэхийг "
+"хүлээнэ. \n"
+"Захиалуулах: Шаардлагатай болсон үед барааг худалдан авах юм уу үйлдвэрлэнэ."
#. module: procurement
#: field:mrp.property,composition:0
@@ -784,7 +850,7 @@ msgstr "Яаралтай бус"
#: model:ir.actions.act_window,name:procurement.product_open_orderpoint
#: view:product.product:0
msgid "Orderpoints"
-msgstr ""
+msgstr "Захиалгын цэг"
#. module: procurement
#: help:stock.warehouse.orderpoint,product_max_qty:0
@@ -793,6 +859,9 @@ msgid ""
"procurement to bring the forecasted quantity to the Quantity specified as "
"Max Quantity."
msgstr ""
+"Ирээдүйн үлдэгдэл нь Хамгийн Бага тоо хэмжээнээс бага болоход OpenERP нь "
+"ирээдүйн үлдэгдлийг Хамгийн их тоо хэмжээтэй байхаар татан авалтын захиалгыг "
+"үүсгэнэ."
#. module: procurement
#: model:ir.model,name:procurement.model_procurement_order_compute_all
@@ -807,7 +876,7 @@ msgstr "Хожимдсон"
#. module: procurement
#: view:board.board:0
msgid "Procurements in Exception"
-msgstr "Сондгойрсон Татан авалтууд"
+msgstr "Саатсан Татан авалтууд"
#. module: procurement
#: model:ir.actions.act_window,name:procurement.procurement_action5
@@ -833,6 +902,12 @@ msgid ""
"order or\n"
" a new task."
msgstr ""
+"Энэ барааны татан авалтыг эхлүүлэхийг тулд бөглөнө үү.\n"
+" Барааны тохиргооны дагууд энэ нь ноорог худалдан "
+"авалтын\n"
+" захиалга эсвэл үйлдвэрлэлийн захиалга эсвэл шинэ "
+"даалгавар\n"
+" үүсгэж болно."
#. module: procurement
#: field:procurement.order,close_move:0
@@ -873,7 +948,7 @@ msgstr "Яаралтай"
#. module: procurement
#: selection:procurement.order,state:0
msgid "Running"
-msgstr "Ажиллаж байна"
+msgstr "Хийгдэж буй"
#. module: procurement
#: model:process.node,name:procurement.process_node_serviceonorder0
@@ -885,7 +960,7 @@ msgstr "Захиалга хийх"
#. module: procurement
#: field:product.template,supply_method:0
msgid "Supply Method"
-msgstr ""
+msgstr "Нийлүүлэх арга"
#. module: procurement
#: field:procurement.order,move_id:0
@@ -900,7 +975,7 @@ msgstr "Татан авах хэлбэр нь барааны төрлөөс ха
#. module: procurement
#: view:product.product:0
msgid "When you sell this product, OpenERP will"
-msgstr ""
+msgstr "Энэ барааг зарахад OpenERP нь дараах үйлдлийг хийнэ"
#. module: procurement
#: view:procurement.order:0
@@ -925,13 +1000,13 @@ msgstr "макс"
#: model:ir.ui.menu,name:procurement.menu_stock_order_points
#: view:stock.warehouse.orderpoint:0
msgid "Reordering Rules"
-msgstr ""
+msgstr "Дахин захиалах дүрэм"
#. module: procurement
#: code:addons/procurement/procurement.py:138
#, python-format
msgid "Cannot delete Procurement Order(s) which are in %s state."
-msgstr ""
+msgstr "%s төлөвтэй татан авалтын захиалгыг устгаж чадахгүй."
#. module: procurement
#: field:procurement.order,product_uos:0
@@ -941,7 +1016,7 @@ msgstr "Хоёрдогч х.нэгж"
#. module: procurement
#: model:ir.model,name:procurement.model_product_template
msgid "Product Template"
-msgstr ""
+msgstr "Барааны үлгэр"
#. module: procurement
#: view:procurement.orderpoint.compute:0
@@ -980,7 +1055,7 @@ msgstr "Автоматаар үлдэгдэл нөхөх"
#. module: procurement
#: help:procurement.order,message_ids:0
msgid "Messages and communication history"
-msgstr ""
+msgstr "Зурвас болон харилцсан түүх"
#. module: procurement
#: view:procurement.order:0
@@ -998,7 +1073,7 @@ msgstr "мин"
#: view:procurement.order.compute.all:0
#: view:procurement.orderpoint.compute:0
msgid "or"
-msgstr ""
+msgstr "эсвэл"
#. module: procurement
#: code:addons/procurement/schedulers.py:134
@@ -1009,7 +1084,7 @@ msgstr "ТОВЛОГЧ"
#. module: procurement
#: view:product.product:0
msgid "Request Procurement"
-msgstr ""
+msgstr "Татан авалт хүсэх"
#. module: procurement
#: code:addons/procurement/schedulers.py:87
@@ -1021,4 +1096,4 @@ msgstr "ТАТ.А %d: захиалгад - %3.2f %-5s - %s"
#: code:addons/procurement/procurement.py:338
#, python-format
msgid "Products reserved from stock."
-msgstr ""
+msgstr "Бараа агуулахаас нөөцлөгдсөн"
diff --git a/addons/product/i18n/lo.po b/addons/product/i18n/lo.po
new file mode 100644
index 00000000000..798856a4fe4
--- /dev/null
+++ b/addons/product/i18n/lo.po
@@ -0,0 +1,2479 @@
+# Lao translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:06+0000\n"
+"PO-Revision-Date: 2013-02-12 11:22+0000\n"
+"Last-Translator: Phoxaysy \n"
+"Language-Team: Lao \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
+
+#. module: product
+#: field:product.packaging,rows:0
+msgid "Number of Layers"
+msgstr "ຈໍານວນຊັ້ນ"
+
+#. module: product
+#: help:product.pricelist.item,base:0
+msgid "Base price for computation."
+msgstr "ລາຄາພື້ນຖານໃນການຄິດໄລ່"
+
+#. module: product
+#: help:product.product,seller_qty:0
+msgid "This is minimum quantity to purchase from Main Supplier."
+msgstr "ນີ້ແມ່ນປະລິມານໜ້ອຍສຸດທີ່ຊື້ຈາກຜູ້ຈໍາໜ່າຍ"
+
+#. module: product
+#: model:product.template,name:product.product_product_34_product_template
+msgid "Webcam"
+msgstr "ກ້ອງຖ່າຍຮູບ"
+
+#. module: product
+#: field:product.product,incoming_qty:0
+msgid "Incoming"
+msgstr "ກໍາລັງມາຮອດ"
+
+#. module: product
+#: view:product.product:0
+msgid "Product Name"
+msgstr "ຊື່ຜະລິດຕະພັນ"
+
+#. module: product
+#: view:product.template:0
+msgid "Second Unit of Measure"
+msgstr "ຫົວໜ່ວຍສໍາຮອງ"
+
+#. module: product
+#: help:res.partner,property_product_pricelist:0
+msgid ""
+"This pricelist will be used, instead of the default one, for sales to the "
+"current partner"
+msgstr ""
+"ລາຍການລາຄານີ້ຈະຖຶກນໍາໃຊ້, ແທນທີ່ຈະຕັ້ງຄ່າເທົ່າກັບໜື່ງ "
+"ເພື່ອຂາຍໃຫ້ແກ່ລູກຄ້າໃນປະຈຸບັນ"
+
+#. module: product
+#: field:product.product,seller_qty:0
+msgid "Supplier Quantity"
+msgstr "ຈໍານວນຜູ້ສະໜອງ"
+
+#. module: product
+#: selection:product.template,mes_type:0
+msgid "Fixed"
+msgstr "ກໍານົດ"
+
+#. module: product
+#: model:product.template,name:product.product_product_10_product_template
+msgid "Mouse, Optical"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+msgid "Base Prices"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,name:0
+msgid "Rule Name"
+msgstr ""
+
+#. module: product
+#: help:product.template,list_price:0
+msgid ""
+"Base price to compute the customer price. Sometimes called the catalog price."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_3_product_template
+msgid "PC Assemble SC234"
+msgstr ""
+
+#. module: product
+#: help:product.product,message_summary:0
+msgid ""
+"Holds the Chatter summary (number of messages, ...). This summary is "
+"directly in html format in order to be inserted in kanban views."
+msgstr ""
+
+#. module: product
+#: code:addons/product/pricelist.py:179
+#: code:addons/product/product.py:208
+#, python-format
+msgid "Warning!"
+msgstr ""
+
+#. module: product
+#: field:product.product,image_small:0
+msgid "Small-sized image"
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:176
+#, python-format
+msgid ""
+"Conversion from Product UoM %s to Default UoM %s is not possible as they "
+"both belong to different Category!."
+msgstr ""
+
+#. module: product
+#: selection:product.template,cost_method:0
+msgid "Average Price"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,name:0
+msgid "Explicit rule name for this pricelist line."
+msgstr ""
+
+#. module: product
+#: field:product.template,uos_coeff:0
+msgid "Unit of Measure -> UOS Coeff"
+msgstr ""
+
+#. module: product
+#: field:product.price_list,price_list:0
+msgid "PriceList"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_4_product_template
+msgid "PC Assemble SC349"
+msgstr ""
+
+#. module: product
+#: help:product.product,seller_delay:0
+msgid ""
+"This is the average delay in days between the purchase order confirmation "
+"and the reception of goods for this product and for the default supplier. It "
+"is used by the scheduler to order requests based on reordering delays."
+msgstr ""
+
+#. module: product
+#: model:product.pricelist.version,name:product.ver0
+msgid "Default Public Pricelist Version"
+msgstr ""
+
+#. module: product
+#: selection:product.template,cost_method:0
+msgid "Standard Price"
+msgstr ""
+
+#. module: product
+#: model:product.pricelist.type,name:product.pricelist_type_sale
+#: field:res.partner,property_product_pricelist:0
+msgid "Sale Pricelist"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+#: field:product.template,type:0
+msgid "Product Type"
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:412
+#, python-format
+msgid "Products: "
+msgstr ""
+
+#. module: product
+#: constraint:decimal.precision:0
+msgid ""
+"Error! You cannot define the decimal precision of 'Account' as greater than "
+"the rounding factor of the company's main currency"
+msgstr ""
+
+#. module: product
+#: field:product.category,parent_id:0
+msgid "Parent Category"
+msgstr "ໜວດຫຼັກ"
+
+#. module: product
+#: model:product.template,description:product.product_product_33_product_template
+msgid "Headset for laptop PC with USB connector."
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_all
+msgid "All products"
+msgstr "ຜະລິດຕະພັນທັງໝັດ"
+
+#. module: product
+#: model:process.node,note:product.process_node_supplier0
+msgid "Supplier name, price, product code, ..."
+msgstr "ຊື່ຜູ້ສະໜອງ, ລາຄາ, ລະຫັດຜະລິດຕະພັນ"
+
+#. module: product
+#: constraint:res.currency:0
+msgid ""
+"Error! You cannot define a rounding factor for the company's main currency "
+"that is smaller than the decimal precision of 'Account'."
+msgstr ""
+
+#. module: product
+#: help:product.product,outgoing_qty:0
+msgid ""
+"Quantity of products that are planned to leave.\n"
+"In a context with a single Stock Location, this includes goods leaving this "
+"Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods leaving the Stock "
+"Location of this Warehouse, or any of its children.\n"
+"In a context with a single Shop, this includes goods leaving the Stock "
+"Location of the Warehouse of this Shop, or any of its children.\n"
+"Otherwise, this includes goods leaving any Stock Location with 'internal' "
+"type."
+msgstr ""
+
+#. module: product
+#: model:product.template,description_sale:product.product_product_42_product_template
+msgid ""
+"Office Editing Software with word processing, spreadsheets, presentations, "
+"graphics, and databases..."
+msgstr ""
+
+#. module: product
+#: field:product.product,seller_id:0
+msgid "Main Supplier"
+msgstr "ຜູ້ສະໜອງຫຼັກ"
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_ul_form_action
+#: model:ir.model,name:product.model_product_packaging
+#: model:ir.ui.menu,name:product.menu_product_ul_form_action
+#: view:product.packaging:0
+#: view:product.product:0
+#: view:product.ul:0
+msgid "Packaging"
+msgstr "ການຫຸ້ມຫໍ່"
+
+#. module: product
+#: help:product.product,active:0
+msgid ""
+"If unchecked, it will allow you to hide the product without removing it."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: field:product.template,categ_id:0
+#: field:product.uom,category_id:0
+msgid "Category"
+msgstr "ໝວດ"
+
+#. module: product
+#: model:product.template,name:product.product_product_25_product_template
+msgid "Laptop E5023"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,ul_qty:0
+msgid "The number of packages by layer"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_30_product_template
+msgid "Pen drive, SP-4"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,qty:0
+msgid "Quantity by Package"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_29_product_template
+msgid "Pen drive, SP-2"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+#: field:product.template,state:0
+msgid "Status"
+msgstr ""
+
+#. module: product
+#: help:product.template,categ_id:0
+msgid "Select category for the current product"
+msgstr ""
+
+#. module: product
+#: field:product.product,outgoing_qty:0
+msgid "Outgoing"
+msgstr ""
+
+#. module: product
+#: model:product.price.type,name:product.list_price
+#: field:product.product,lst_price:0
+msgid "Public Price"
+msgstr ""
+
+#. module: product
+#: field:product.price_list,qty5:0
+msgid "Quantity-5"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_ul_form_action
+msgid ""
+"\n"
+" Click to add a new packaging type.\n"
+"
\n"
+" The packaging type define the dimensions as well as the "
+"number\n"
+" of products per package. This will ensure salesperson sell "
+"the\n"
+" right number of products according to the package selected.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: product
+#: field:product.template,product_manager:0
+msgid "Product Manager"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_7_product_template
+msgid "17” LCD Monitor"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,product_name:0
+msgid "Supplier Product Name"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist:0
+msgid "Products Price Search"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+#: field:product.template,description_sale:0
+msgid "Sale Description"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,length:0
+msgid "The length of the package"
+msgstr ""
+
+#. module: product
+#: field:product.product,message_summary:0
+msgid "Summary"
+msgstr ""
+
+#. module: product
+#: help:product.template,weight_net:0
+msgid "The net weight in Kg."
+msgstr ""
+
+#. module: product
+#: field:pricelist.partnerinfo,min_quantity:0
+#: field:product.supplierinfo,qty:0
+msgid "Quantity"
+msgstr ""
+
+#. module: product
+#: view:product.price_list:0
+msgid "Calculate Product Price per Unit Based on Pricelist Version."
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,product_id:0
+msgid ""
+"Specify a product if this rule only applies to one product. Keep empty "
+"otherwise."
+msgstr ""
+
+#. module: product
+#: model:product.uom.categ,name:product.product_uom_categ_kgm
+msgid "Weight"
+msgstr ""
+
+#. module: product
+#: help:product.product,virtual_available:0
+msgid ""
+"Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming)\n"
+"In a context with a single Stock Location, this includes goods stored in "
+"this location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the "
+"Stock Location of this Warehouse, or any of its children.\n"
+"In a context with a single Shop, this includes goods stored in the Stock "
+"Location of the Warehouse of this Shop, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' "
+"type."
+msgstr ""
+
+#. module: product
+#: field:product.packaging,height:0
+msgid "Height"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Procurements"
+msgstr ""
+
+#. module: product
+#: model:res.groups,name:product.group_mrp_properties
+msgid "Manage Properties of Product"
+msgstr ""
+
+#. module: product
+#: help:product.uom,factor:0
+msgid ""
+"How much bigger or smaller this unit is compared to the reference Unit of "
+"Measure for this category:\n"
+"1 * (reference unit) = ratio * (this unit)"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_pricelist_partnerinfo
+msgid "pricelist.partnerinfo"
+msgstr ""
+
+#. module: product
+#: field:product.price_list,qty2:0
+msgid "Quantity-2"
+msgstr ""
+
+#. module: product
+#: field:product.price_list,qty3:0
+msgid "Quantity-3"
+msgstr ""
+
+#. module: product
+#: field:product.price_list,qty1:0
+msgid "Quantity-1"
+msgstr ""
+
+#. module: product
+#: field:product.price_list,qty4:0
+msgid "Quantity-4"
+msgstr ""
+
+#. module: product
+#: view:res.partner:0
+msgid "Sales & Purchases"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_44_product_template
+msgid "GrapWorks Software"
+msgstr ""
+
+#. module: product
+#: model:product.uom.categ,name:product.uom_categ_wtime
+msgid "Working Time"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_42_product_template
+msgid "Office Suite"
+msgstr ""
+
+#. module: product
+#: field:product.template,mes_type:0
+msgid "Measure Type"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_32_product_template
+msgid "Headset standard"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_day
+msgid "Day(s)"
+msgstr "ມື້"
+
+#. module: product
+#: help:product.product,incoming_qty:0
+msgid ""
+"Quantity of products that are planned to arrive.\n"
+"In a context with a single Stock Location, this includes goods arriving to "
+"this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods arriving to the "
+"Stock Location of this Warehouse, or any of its children.\n"
+"In a context with a single Shop, this includes goods arriving to the Stock "
+"Location of the Warehouse of this Shop, or any of its children.\n"
+"Otherwise, this includes goods arriving to any Stock Location with "
+"'internal' type."
+msgstr ""
+
+#. module: product
+#: constraint:product.template:0
+msgid ""
+"Error: The default Unit of Measure and the purchase Unit of Measure must be "
+"in the same category."
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_uom_categ
+msgid "Product uom categ"
+msgstr ""
+
+#. module: product
+#: model:product.ul,name:product.product_ul_box
+msgid "Box 20x20x40"
+msgstr ""
+
+#. module: product
+#: field:product.template,warranty:0
+msgid "Warranty"
+msgstr "ຮັບປະກັນ"
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Price Computation"
+msgstr ""
+
+#. module: product
+#: constraint:product.product:0
+msgid ""
+"You provided an invalid \"EAN13 Barcode\" reference. You may use the "
+"\"Internal Reference\" field instead."
+msgstr ""
+
+#. module: product
+#: model:res.groups,name:product.group_purchase_pricelist
+msgid "Purchase Pricelists"
+msgstr "ລາຍການລາຄາຊື້"
+
+#. module: product
+#: model:product.template,name:product.product_product_5_product_template
+msgid "PC Assemble + Custom (PC on Demand)"
+msgstr ""
+
+#. module: product
+#: model:product.template,description:product.product_product_27_product_template
+msgid "Custom Laptop based on customer's requirement."
+msgstr ""
+
+#. module: product
+#: help:product.packaging,width:0
+msgid "The width of the package"
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:361
+#, python-format
+msgid "Unit of Measure categories Mismatch!"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_36_product_template
+msgid "Blank DVD-RW"
+msgstr ""
+
+#. module: product
+#: selection:product.category,type:0
+msgid "View"
+msgstr "ເບຶ່ງ"
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_template_action_tree
+msgid "Product Templates"
+msgstr ""
+
+#. module: product
+#: field:product.category,parent_left:0
+msgid "Left Parent"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,price_max_margin:0
+msgid "Specify the maximum amount of margin over the base price."
+msgstr ""
+
+#. module: product
+#: constraint:product.pricelist.item:0
+msgid ""
+"Error! You cannot assign the Main Pricelist as Other Pricelist in PriceList "
+"Item!"
+msgstr ""
+
+#. module: product
+#: view:product.price_list:0
+msgid "or"
+msgstr "ຫຼື"
+
+#. module: product
+#: constraint:product.packaging:0
+msgid "Error: Invalid ean code"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,min_quantity:0
+msgid "Min. Quantity"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_12_product_template
+msgid "Mouse, Wireless"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_22_product_template
+msgid "Processor Core i5 2.70 Ghz"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_price_type
+msgid "Price Type"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Max. Margin"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Base Price"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,name:0
+msgid "Supplier of this product"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.version,active:0
+msgid ""
+"When a version is duplicated it is set to non active, so that the dates do "
+"not overlaps with original version. You should change the dates and "
+"reactivate the pricelist"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_18_product_template
+msgid "HDD SH-2"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_17_product_template
+msgid "HDD SH-1"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,name:0
+#: field:product.template,seller_ids:0
+msgid "Supplier"
+msgstr "ຜູ້ສະໜອງ"
+
+#. module: product
+#: help:product.template,cost_method:0
+msgid ""
+"Standard Price: The cost price is manually updated at the end of a specific "
+"period (usually every year). \n"
+"Average Price: The cost price is recomputed at each incoming shipment."
+msgstr ""
+
+#. module: product
+#: field:product.product,qty_available:0
+msgid "Quantity On Hand"
+msgstr ""
+
+#. module: product
+#: field:product.price.type,name:0
+msgid "Price Name"
+msgstr ""
+
+#. module: product
+#: help:product.product,message_unread:0
+msgid "If checked new messages require your attention."
+msgstr ""
+
+#. module: product
+#: field:product.product,ean13:0
+msgid "EAN13 Barcode"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.action_product_price_list
+#: model:ir.model,name:product.model_product_price_list
+#: view:product.price_list:0
+#: report:product.pricelist:0
+#: field:product.pricelist.version,pricelist_id:0
+msgid "Price List"
+msgstr "ລາຍການລາຄາ"
+
+#. module: product
+#: field:product.product,virtual_available:0
+msgid "Forecasted Quantity"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Purchase"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_33_product_template
+msgid "Headset USB"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+msgid "Suppliers"
+msgstr ""
+
+#. module: product
+#: model:res.groups,name:product.group_sale_pricelist
+msgid "Sales Pricelists"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "New Price ="
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_7
+msgid "Accessories"
+msgstr ""
+
+#. module: product
+#: model:process.transition,name:product.process_transition_supplierofproduct0
+msgid "Supplier of the product"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_28_product_template
+msgid "External Hard disk"
+msgstr ""
+
+#. module: product
+#: help:product.template,standard_price:0
+msgid ""
+"Cost price of the product used for standard stock valuation in accounting "
+"and used as a base price on purchase orders."
+msgstr ""
+
+#. module: product
+#: field:product.category,child_id:0
+msgid "Child Categories"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.version,date_end:0
+msgid "End Date"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_litre
+msgid "Liter(s)"
+msgstr ""
+
+#. module: product
+#: view:product.price_list:0
+msgid "Print"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: field:product.ul,type:0
+#: field:product.uom,uom_type:0
+msgid "Type"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_pricelist_action2
+#: model:ir.actions.act_window,name:product.product_pricelist_action_for_purchase
+#: model:ir.ui.menu,name:product.menu_product_pricelist_action2
+#: model:ir.ui.menu,name:product.menu_product_pricelist_main
+msgid "Pricelists"
+msgstr ""
+
+#. module: product
+#: field:product.product,partner_ref:0
+msgid "Customer ref"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.type,key:0
+msgid "Key"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.report.xml,name:product.report_product_pricelist
+#: model:ir.model,name:product.model_product_pricelist
+#: field:product.product,pricelist_id:0
+#: view:product.supplierinfo:0
+msgid "Pricelist"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_hour
+msgid "Hour(s)"
+msgstr ""
+
+#. module: product
+#: selection:product.template,state:0
+msgid "In Development"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: product
+#: model:process.transition,note:product.process_transition_supplierofproduct0
+msgid ""
+"1 or several supplier(s) can be linked to a product. All information stands "
+"in the product form."
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_round:0
+msgid "Price Rounding"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_1_product_template
+msgid "On Site Monitoring"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+msgid "days"
+msgstr ""
+
+#. module: product
+#: model:process.node,name:product.process_node_supplier0
+#: view:product.supplierinfo:0
+msgid "Supplier Information"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_res_currency
+#: field:product.price.type,currency_id:0
+#: report:product.pricelist:0
+#: field:product.pricelist,currency_id:0
+msgid "Currency"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_46_product_template
+msgid "Datacard"
+msgstr ""
+
+#. module: product
+#: help:product.template,uos_coeff:0
+msgid ""
+"Coefficient to convert default Unit of Measure to Unit of Sale\n"
+" uos = uom * coeff"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_category_action_form
+#: model:ir.ui.menu,name:product.menu_product_category_action_form
+#: view:product.category:0
+msgid "Product Categories"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+msgid "Procurement & Locations"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_20_product_template
+msgid "Motherboard I9P57"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,weight:0
+msgid "Total Package Weight"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,code:0
+msgid "The code of the transport unit."
+msgstr ""
+
+#. module: product
+#: view:product.price.type:0
+msgid "Products Price Type"
+msgstr ""
+
+#. module: product
+#: field:product.product,message_is_follower:0
+msgid "Is a Follower"
+msgstr ""
+
+#. module: product
+#: field:product.product,price_extra:0
+msgid "Variant Price Extra"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_supplierinfo
+msgid "Information about a product supplier"
+msgstr ""
+
+#. module: product
+#: help:product.uom,factor_inv:0
+msgid ""
+"How many times this Unit of Measure is bigger than the reference Unit of "
+"Measure in this category:\n"
+"1 * (this unit) = ratio * (reference unit)"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+#: field:product.template,description_purchase:0
+msgid "Purchase Description"
+msgstr ""
+
+#. module: product
+#: constraint:product.pricelist.version:0
+msgid "You cannot have 2 pricelist versions that overlap!"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,min_quantity:0
+msgid ""
+"Specify the minimum quantity that needs to be bought/sold for the rule to "
+"apply."
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.version,date_start:0
+msgid "First valid date for the version."
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,delay:0
+msgid ""
+"Lead time in days between the confirmation of the purchase order and the "
+"reception of the products in your warehouse. Used by the scheduler for "
+"automatic computation of the purchase order planning."
+msgstr ""
+
+#. module: product
+#: model:product.template,description_sale:product.product_product_3_product_template
+msgid ""
+"17\" LCD Monitor\n"
+"Processor AMD 8-Core\n"
+"512MB RAM\n"
+"HDD SH-1"
+msgstr ""
+
+#. module: product
+#: selection:product.template,type:0
+msgid "Stockable Product"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,code:0
+msgid "Code"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_27_product_template
+msgid "Laptop Customized"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_ul
+msgid "Shipping Unit"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_35_product_template
+msgid "Blank CD"
+msgstr ""
+
+#. module: product
+#: field:pricelist.partnerinfo,suppinfo_id:0
+msgid "Partner Information"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_normal_action_sell
+msgid ""
+"\n"
+" Click to define a new product.\n"
+"
\n"
+" You must define a product for everything you sell, whether "
+"it's\n"
+" a physical product, a consumable or a service you offer to\n"
+" customers.\n"
+"
\n"
+" The product form contains information to simplify the sale\n"
+" process: price, notes in the quotation, accounting data,\n"
+" procurement methods, etc.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: product
+#: view:product.price_list:0
+msgid "Cancel"
+msgstr ""
+
+#. module: product
+#: model:product.template,description:product.product_product_37_product_template
+msgid "All in one hi-speed printer with fax and scanner."
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,min_qty:0
+msgid ""
+"The minimal quantity to purchase to this supplier, expressed in the supplier "
+"Product Unit of Measure if not empty, in the default unit of measure of the "
+"product otherwise."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Information"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Products Listprices Items"
+msgstr ""
+
+#. module: product
+#: view:product.packaging:0
+msgid "Other Info"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.version,items_id:0
+msgid "Price List Items"
+msgstr ""
+
+#. module: product
+#: field:pricelist.partnerinfo,price:0
+msgid "Unit Price"
+msgstr ""
+
+#. module: product
+#: field:product.category,parent_right:0
+msgid "Right Parent"
+msgstr ""
+
+#. module: product
+#: field:product.product,price:0
+msgid "Price"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_surcharge:0
+msgid "Price Surcharge"
+msgstr ""
+
+#. module: product
+#: field:product.product,code:0
+#: field:product.product,default_code:0
+msgid "Internal Reference"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_8_product_template
+msgid "USB Keyboard, QWERTY"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_9
+msgid "Softwares"
+msgstr ""
+
+#. module: product
+#: field:product.product,packaging:0
+msgid "Logistical Units"
+msgstr ""
+
+#. module: product
+#: field:product.category,complete_name:0
+#: field:product.category,name:0
+#: field:product.pricelist.type,name:0
+#: field:product.pricelist.version,name:0
+#: field:product.product,name_template:0
+#: field:product.template,name:0
+#: field:product.ul,name:0
+#: field:product.uom.categ,name:0
+msgid "Name"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_4
+msgid "Computers"
+msgstr ""
+
+#. module: product
+#: help:product.product,message_ids:0
+msgid "Messages and communication history"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_kgm
+msgid "kg"
+msgstr ""
+
+#. module: product
+#: selection:product.template,state:0
+msgid "Obsolete"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_km
+msgid "km"
+msgstr ""
+
+#. module: product
+#: field:product.template,standard_price:0
+msgid "Cost"
+msgstr ""
+
+#. module: product
+#: help:product.category,sequence:0
+msgid ""
+"Gives the sequence order when displaying a list of product categories."
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_dozen
+msgid "Dozen(s)"
+msgstr ""
+
+#. module: product
+#: field:product.uom,factor:0
+#: field:product.uom,factor_inv:0
+msgid "Ratio"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,width:0
+msgid "Width"
+msgstr ""
+
+#. module: product
+#: help:product.price.type,field:0
+msgid "Associated field in the product form."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+#: field:product.template,uom_id:0
+#: field:product.uom,name:0
+msgid "Unit of Measure"
+msgstr ""
+
+#. module: product
+#: report:product.pricelist:0
+msgid "Printing Date"
+msgstr ""
+
+#. module: product
+#: field:product.template,uos_id:0
+msgid "Unit of Sale"
+msgstr ""
+
+#. module: product
+#: field:product.product,message_unread:0
+msgid "Unread Messages"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_uom_categ_form_action
+#: model:ir.ui.menu,name:product.menu_product_uom_categ_form_action
+msgid "Unit of Measure Categories"
+msgstr ""
+
+#. module: product
+#: help:product.product,seller_id:0
+msgid "Main Supplier who has highest priority in Supplier List."
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_5
+#: view:product.product:0
+msgid "Services"
+msgstr ""
+
+#. module: product
+#: help:product.product,ean13:0
+msgid "International Article Number used for product identification."
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_category_action
+msgid ""
+"\n"
+" Here is a list of all your products classified by category. "
+"You\n"
+" can click a category to get the list of all products linked "
+"to\n"
+" this category or to a child of this category.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:361
+#, python-format
+msgid ""
+"New Unit of Measure '%s' must belong to same Unit of Measure category '%s' "
+"as of old Unit of Measure '%s'. If you need to change the unit of measure, "
+"you may deactivate this product from the 'Procurements' tab and create a new "
+"one."
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_normal_action
+#: model:ir.actions.act_window,name:product.product_normal_action_puchased
+#: model:ir.actions.act_window,name:product.product_normal_action_sell
+#: model:ir.actions.act_window,name:product.product_normal_action_tree
+#: model:ir.ui.menu,name:product.menu_products
+#: model:ir.ui.menu,name:product.prod_config_main
+#: view:product.product:0
+msgid "Products"
+msgstr ""
+
+#. module: product
+#: model:product.template,description:product.product_product_32_product_template
+msgid ""
+"Hands free headset for laptop PC with in-line microphone and headphone plug."
+msgstr ""
+
+#. module: product
+#: help:product.packaging,rows:0
+msgid "The number of layers on a pallet or box"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,price_min_margin:0
+msgid "Specify the minimum amount of margin over the base price."
+msgstr ""
+
+#. module: product
+#: field:product.template,weight_net:0
+msgid "Net Weight"
+msgstr ""
+
+#. module: product
+#: view:product.packaging:0
+#: view:product.product:0
+msgid "Pallet Dimension"
+msgstr ""
+
+#. module: product
+#: help:product.product,image:0
+msgid ""
+"This field holds the image used as image for the product, limited to "
+"1024x1024px."
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,categ_id:0
+msgid ""
+"Specify a product category if this rule only applies to products belonging "
+"to this category or its children categories. Keep empty otherwise."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Inventory"
+msgstr ""
+
+#. module: product
+#: field:product.product,seller_info_id:0
+msgid "Supplier Info"
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:729
+#, python-format
+msgid "%s (copy)"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_2_product_template
+msgid "On Site Assistance"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_39_product_template
+msgid "Toner Cartridge"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_uom_form_action
+#: model:ir.ui.menu,name:product.menu_product_uom_form_action
+#: model:ir.ui.menu,name:product.next_id_16
+#: view:product.uom:0
+msgid "Units of Measure"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,min_qty:0
+msgid "Minimal Quantity"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,product_code:0
+msgid ""
+"This supplier's product code will be used when printing a request for "
+"quotation. Keep empty to use the internal one."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_43_product_template
+msgid "Zed+ Antivirus"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_version_id:0
+msgid "Price List Version"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,sequence:0
+msgid ""
+"Gives the order in which the pricelist items will be checked. The evaluation "
+"gives highest priority to lowest sequence and stops as soon as a matching "
+"item is found."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: selection:product.template,type:0
+msgid "Consumable"
+msgstr ""
+
+#. module: product
+#: help:product.price.type,currency_id:0
+msgid "The currency the field is expressed in."
+msgstr ""
+
+#. module: product
+#: help:product.template,weight:0
+msgid "The gross weight in Kg."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_37_product_template
+msgid "Printer, All-in-one"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+msgid "Procurement"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_23_product_template
+msgid "Processor AMD 8-Core"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: view:product.template:0
+msgid "Weights"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Description for Quotations"
+msgstr ""
+
+#. module: product
+#: help:pricelist.partnerinfo,price:0
+msgid ""
+"This price will be considered as a price for the supplier Unit of Measure if "
+"any or the default Unit of Measure of the product otherwise"
+msgstr ""
+
+#. module: product
+#: field:product.template,uom_po_id:0
+msgid "Purchase Unit of Measure"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Group by..."
+msgstr ""
+
+#. module: product
+#: field:product.product,image_medium:0
+msgid "Medium-sized image"
+msgstr ""
+
+#. module: product
+#: selection:product.ul,type:0
+#: model:product.uom.categ,name:product.product_uom_categ_unit
+msgid "Unit"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.version,date_start:0
+msgid "Start Date"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_38_product_template
+msgid "Ink Cartridge"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_cm
+msgid "cm"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_uom
+msgid "Product Unit of Measure"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_pricelist_action
+msgid ""
+"\n"
+" Click to add a pricelist version.\n"
+"
\n"
+" There can be more than one version of a pricelist, each of\n"
+" these must be valid during a certain period of time. Some\n"
+" examples of versions: Main Prices, 2010, 2011, Summer "
+"Sales,\n"
+" etc.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: product
+#: help:product.template,uom_po_id:0
+msgid ""
+"Default Unit of Measure used for purchase orders. It must be in the same "
+"category than the default unit of measure."
+msgstr ""
+
+#. module: product
+#: view:product.pricelist:0
+msgid "Products Price"
+msgstr ""
+
+#. module: product
+#: model:product.template,description:product.product_product_26_product_template
+msgid ""
+"17\" Monitor\n"
+"6GB RAM\n"
+"Hi-Speed 234Q Processor\n"
+"QWERTY keyboard"
+msgstr ""
+
+#. module: product
+#: field:product.uom,rounding:0
+msgid "Rounding Precision"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Consumable products"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_21_product_template
+msgid "Motherboard A20Z7"
+msgstr ""
+
+#. module: product
+#: model:product.template,description:product.product_product_1_product_template
+#: model:product.template,description_sale:product.product_product_1_product_template
+msgid "This type of service include basic monitoring of products."
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.version,date_end:0
+msgid "Last valid date for the version."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_19_product_template
+msgid "HDD on Demand"
+msgstr ""
+
+#. module: product
+#: field:product.price.type,active:0
+#: field:product.pricelist,active:0
+#: field:product.pricelist.version,active:0
+#: field:product.product,active:0
+#: field:product.uom,active:0
+msgid "Active"
+msgstr ""
+
+#. module: product
+#: field:product.product,price_margin:0
+msgid "Variant Price Margin"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist,name:0
+msgid "Pricelist Name"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_1
+msgid "Saleable"
+msgstr ""
+
+#. module: product
+#: sql_constraint:product.uom:0
+msgid "The conversion ratio for a unit of measure cannot be 0!"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_24_product_template
+msgid "Graphics Card"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,ean:0
+msgid "The EAN code of the package unit."
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,product_uom:0
+msgid "This comes from the product form."
+msgstr ""
+
+#. module: product
+#: field:product.packaging,weight_ul:0
+msgid "Empty Package Weight"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_41_product_template
+msgid "Windows Home Server 2011"
+msgstr ""
+
+#. module: product
+#: field:product.price.type,field:0
+msgid "Product Field"
+msgstr ""
+
+#. module: product
+#: model:product.template,description:product.product_product_5_product_template
+msgid "Custom computer assembled on order based on customer's requirement."
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_price_type_action
+#: model:ir.ui.menu,name:product.menu_product_price_type
+msgid "Price Types"
+msgstr ""
+
+#. module: product
+#: help:product.template,uom_id:0
+msgid "Default Unit of Measure used for all stock operation."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Sales"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_uom_categ_form_action
+msgid ""
+"\n"
+" Click to add a new unit of measure category.\n"
+"
\n"
+" Units of measure belonging to the same category can be\n"
+" converted between each others. For example, in the category\n"
+" 'Time' , you will have the following units of "
+"measure:\n"
+" Hours, Days.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: product
+#: help:pricelist.partnerinfo,min_quantity:0
+msgid ""
+"The minimal quantity to trigger this rule, expressed in the supplier Unit of "
+"Measure if any or in the default Unit of Measure of the product otherrwise."
+msgstr ""
+
+#. module: product
+#: selection:product.uom,uom_type:0
+msgid "Smaller than the reference Unit of Measure"
+msgstr ""
+
+#. module: product
+#: model:product.pricelist,name:product.list0
+msgid "Public Pricelist"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,product_code:0
+msgid "Supplier Product Code"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist,active:0
+msgid ""
+"If unchecked, it will allow you to hide the pricelist without removing it."
+msgstr ""
+
+#. module: product
+#: selection:product.ul,type:0
+msgid "Pallet"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,ul_qty:0
+msgid "Package by layer"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_product
+#: model:process.node,name:product.process_node_product0
+#: model:process.process,name:product.process_process_productprocess0
+#: field:product.packaging,product_id:0
+#: field:product.pricelist.item,product_id:0
+#: view:product.product:0
+#: field:product.supplierinfo,product_id:0
+#: model:res.request.link,name:product.req_link_product
+msgid "Product"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Price:"
+msgstr ""
+
+#. module: product
+#: field:product.template,weight:0
+msgid "Gross Weight"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,qty:0
+msgid "The total number of products you can put by pallet or box."
+msgstr ""
+
+#. module: product
+#: field:product.product,variants:0
+msgid "Variants"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_category_action
+#: model:ir.ui.menu,name:product.menu_products_category
+msgid "Products by Category"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_16_product_template
+msgid "Computer Case"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_9_product_template
+msgid "USB Keyboard, AZERTY"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,sequence:0
+msgid "Assigns the priority to the list of product supplier."
+msgstr ""
+
+#. module: product
+#: constraint:product.pricelist.item:0
+msgid "Error! The minimum margin should be lower than the maximum margin."
+msgstr ""
+
+#. module: product
+#: model:res.groups,name:product.group_uos
+msgid "Manage Secondary Unit of Measure"
+msgstr ""
+
+#. module: product
+#: help:product.uom,rounding:0
+msgid ""
+"The computed quantity will be a multiple of this value. Use 1.0 for a Unit "
+"of Measure that cannot be further split, such as a piece."
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Rounding Method"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.report.xml,name:product.report_product_label
+msgid "Products Labels"
+msgstr ""
+
+#. module: product
+#: model:product.ul,name:product.product_ul_big_box
+msgid "Box 30x40x60"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_47_product_template
+msgid "Switch, 24 ports"
+msgstr ""
+
+#. module: product
+#: selection:product.uom,uom_type:0
+msgid "Bigger than the reference Unit of Measure"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_consultant_product_template
+#: selection:product.template,type:0
+msgid "Service"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+msgid "Internal Description"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_48_product_template
+msgid "USB Adapter"
+msgstr ""
+
+#. module: product
+#: help:product.template,uos_id:0
+msgid ""
+"Sepcify a unit of measure here if invoicing is made in another unit of "
+"measure than inventory. Keep empty to use the default unit of measure."
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:208
+#, python-format
+msgid "Cannot change the category of existing Unit of Measure '%s'."
+msgstr ""
+
+#. module: product
+#: help:product.packaging,height:0
+msgid "The height of the package"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist:0
+msgid "Products Price List"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist,company_id:0
+#: field:product.pricelist.item,company_id:0
+#: field:product.pricelist.version,company_id:0
+#: view:product.product:0
+#: field:product.supplierinfo,company_id:0
+#: field:product.template,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_26_product_template
+msgid "Laptop S3450"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Default Unit of Measure"
+msgstr ""
+
+#. module: product
+#: code:addons/product/pricelist.py:377
+#, python-format
+msgid "Partner section of the product form"
+msgstr ""
+
+#. module: product
+#: help:product.price.type,name:0
+msgid "Name of this kind of price."
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_3
+msgid "Other Products"
+msgstr ""
+
+#. module: product
+#: model:product.template,description:product.product_product_9_product_template
+msgid "This product is configured with example of push/pull flows"
+msgstr ""
+
+#. module: product
+#: field:product.product,message_ids:0
+msgid "Messages"
+msgstr ""
+
+#. module: product
+#: model:product.uom,name:product.product_uom_unit
+msgid "Unit(s)"
+msgstr ""
+
+#. module: product
+#: code:addons/product/product.py:176
+#, python-format
+msgid "Error!"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,length:0
+msgid "Length"
+msgstr ""
+
+#. module: product
+#: model:product.uom.categ,name:product.uom_categ_length
+msgid "Length / Distance"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_8
+msgid "Components"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_pricelist_type
+#: field:product.pricelist,type:0
+msgid "Pricelist Type"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_6
+msgid "External Devices"
+msgstr ""
+
+#. module: product
+#: field:product.product,color:0
+msgid "Color Index"
+msgstr ""
+
+#. module: product
+#: help:product.template,sale_ok:0
+msgid "Specify if the product can be selected in a sales order line."
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: field:product.template,sale_ok:0
+msgid "Can be Sold"
+msgstr ""
+
+#. module: product
+#: field:product.template,produce_delay:0
+msgid "Manufacturing Lead Time"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,pricelist_ids:0
+msgid "Supplier Pricelist"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,base:0
+msgid "Based on"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_10
+msgid "Raw Materials"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_13_product_template
+msgid "RAM SR5"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_14_product_template
+msgid "RAM SR2"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_normal_action_puchased
+msgid ""
+"\n"
+" Click to define a new product.\n"
+"
\n"
+" You must define a product for everything you purchase, "
+"whether\n"
+" it's a physical product, a consumable or services you buy "
+"to\n"
+" subcontractants.\n"
+"
\n"
+" The product form contains detailed information to improve "
+"the\n"
+" purchase process: prices, procurement logistics, accounting "
+"data,\n"
+" available suppliers, etc.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: product
+#: model:product.template,description_sale:product.product_product_44_product_template
+msgid "Full featured image editing software."
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_pricelist_version
+#: view:product.pricelist:0
+#: view:product.pricelist.version:0
+msgid "Pricelist Version"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "* ( 1 + "
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_31_product_template
+msgid "Multimedia Speakers"
+msgstr ""
+
+#. module: product
+#: field:product.product,message_follower_ids:0
+msgid "Followers"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Sale Conditions"
+msgstr ""
+
+#. module: product
+#: view:product.packaging:0
+#: view:product.product:0
+msgid "Palletization"
+msgstr ""
+
+#. module: product
+#: report:product.pricelist:0
+msgid "Price List Name"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Description for Suppliers"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,delay:0
+msgid "Delivery Lead Time"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "months"
+msgstr ""
+
+#. module: product
+#: help:product.uom,active:0
+msgid ""
+"By unchecking the active field you can disable a unit of measure without "
+"deleting it."
+msgstr ""
+
+#. module: product
+#: field:product.product,seller_delay:0
+msgid "Supplier Lead Time"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_decimal_precision
+msgid "decimal.precision"
+msgstr ""
+
+#. module: product
+#: selection:product.ul,type:0
+msgid "Box"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,price_surcharge:0
+msgid ""
+"Specify the fixed amount to add or substract(if negative) to the amount "
+"calculated with the discount."
+msgstr ""
+
+#. module: product
+#: help:product.product,qty_available:0
+msgid ""
+"Current quantity of products.\n"
+"In a context with a single Stock Location, this includes goods stored at "
+"this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the "
+"Stock Location of this Warehouse, or any of its children.\n"
+"In a context with a single Shop, this includes goods stored in the Stock "
+"Location of the Warehouse of this Shop, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' "
+"type."
+msgstr ""
+
+#. module: product
+#: help:product.template,type:0
+msgid ""
+"Consumable: Will not imply stock management for this product. \n"
+"Stockable product: Will imply stock management for this product."
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.type,key:0
+msgid ""
+"Used in the code to select specific prices based on the context. Keep "
+"unchanged."
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_normal_action
+msgid ""
+"\n"
+" Click to define a new product.\n"
+"
\n"
+" You must define a product for everything you buy or sell,\n"
+" whether it's a physical product, a consumable or service.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+msgid "Context..."
+msgstr ""
+
+#. module: product
+#: field:product.packaging,ul:0
+msgid "Type of Package"
+msgstr ""
+
+#. module: product
+#: help:product.category,type:0
+msgid ""
+"A category of the view type is a virtual category that can be used as the "
+"parent of another category to create a hierarchical structure."
+msgstr ""
+
+#. module: product
+#: selection:product.ul,type:0
+msgid "Pack"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,product_tmpl_id:0
+msgid ""
+"Specify a template if this rule only applies to one product template. Keep "
+"empty otherwise."
+msgstr ""
+
+#. module: product
+#: model:product.template,description:product.product_product_2_product_template
+msgid ""
+"This type of service include assistance for security questions, system "
+"configuration requirements, implementation or special needs."
+msgstr ""
+
+#. module: product
+#: field:product.product,image:0
+msgid "Image"
+msgstr ""
+
+#. module: product
+#: view:product.uom.categ:0
+msgid "Units of Measure categories"
+msgstr ""
+
+#. module: product
+#: model:product.template,description_sale:product.product_product_4_product_template
+msgid ""
+"19\" LCD Monitor\n"
+"Processor Core i5 2.70 Ghz\n"
+"2GB RAM\n"
+"HDD SH-1"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+msgid "Descriptions"
+msgstr ""
+
+#. module: product
+#: model:res.groups,name:product.group_stock_packaging
+msgid "Manage Product Packaging"
+msgstr ""
+
+#. module: product
+#: model:product.category,name:product.product_category_2
+msgid "Internal"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_45_product_template
+msgid "Router R430"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,sequence:0
+msgid "Gives the sequence order when displaying a list of packaging."
+msgstr ""
+
+#. module: product
+#: selection:product.category,type:0
+#: selection:product.template,state:0
+msgid "Normal"
+msgstr ""
+
+#. module: product
+#: code:addons/product/pricelist.py:179
+#, python-format
+msgid ""
+"At least one pricelist has no active version !\n"
+"Please create or activate one."
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_max_margin:0
+msgid "Max. Price Margin"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid "Min. Margin"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,product_name:0
+msgid ""
+"This supplier's product name will be used when printing a request for "
+"quotation. Keep empty to use the internal one."
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_pricelist_action_for_purchase
+msgid ""
+"\n"
+" Click to create a pricelist.\n"
+"
\n"
+" A price list contains rules to be evaluated in order to "
+"compute\n"
+" the purchase price. The default price list has only one "
+"rule; use\n"
+" the cost price defined on the product form, so that you do "
+"not have to\n"
+" worry about supplier pricelists if you have very simple "
+"needs.\n"
+"
\n"
+" But you can also import complex price lists form your "
+"supplier\n"
+" that may depends on the quantities ordered or the current\n"
+" promotions.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: product
+#: selection:product.template,mes_type:0
+msgid "Variable"
+msgstr ""
+
+#. module: product
+#: field:product.template,rental:0
+msgid "Can be Rent"
+msgstr ""
+
+#. module: product
+#: model:product.price.type,name:product.standard_price
+msgid "Cost Price"
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_min_margin:0
+msgid "Min. Price Margin"
+msgstr ""
+
+#. module: product
+#: model:res.groups,name:product.group_uom
+msgid "Manage Multiple Units of Measure"
+msgstr ""
+
+#. module: product
+#: help:product.packaging,weight:0
+msgid "The weight of a full package, pallet or box."
+msgstr ""
+
+#. module: product
+#: view:product.uom:0
+msgid "e.g: 1 * (this unit) = ratio * (reference unit)"
+msgstr ""
+
+#. module: product
+#: model:product.template,description:product.product_product_25_product_template
+msgid ""
+"17\" Monitor\n"
+"4GB RAM\n"
+"Standard-1294P Processor\n"
+"QWERTY keyboard"
+msgstr ""
+
+#. module: product
+#: field:product.category,sequence:0
+#: field:product.packaging,sequence:0
+#: field:product.pricelist.item,sequence:0
+#: field:product.supplierinfo,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: product
+#: help:product.template,produce_delay:0
+msgid ""
+"Average delay in days to produce this product. In the case of multi-level "
+"BOM, the manufacturing lead times of the components will be added."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_assembly_product_template
+msgid "Assembly Service Cost"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_pricelist_item
+msgid "Pricelist item"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_uom_form_action
+msgid ""
+"\n"
+" Click to add a new unit of measure.\n"
+"
\n"
+" You must define a conversion rate between several Units of\n"
+" Measure within the same category.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_11_product_template
+msgid "Mouse, Laser"
+msgstr ""
+
+#. module: product
+#: view:product.template:0
+msgid "Delays"
+msgstr ""
+
+#. module: product
+#: field:product.category,type:0
+msgid "Category Type"
+msgstr ""
+
+#. module: product
+#: model:process.node,note:product.process_node_product0
+msgid "Creation of the product"
+msgstr ""
+
+#. module: product
+#: field:pricelist.partnerinfo,name:0
+#: field:product.packaging,name:0
+#: report:product.pricelist:0
+#: view:product.product:0
+#: field:product.template,description:0
+msgid "Description"
+msgstr ""
+
+#. module: product
+#: field:product.packaging,ean:0
+msgid "EAN"
+msgstr ""
+
+#. module: product
+#: view:product.pricelist.item:0
+msgid " ) + "
+msgstr ""
+
+#. module: product
+#: field:product.template,volume:0
+#: model:product.uom.categ,name:product.product_uom_categ_vol
+msgid "Volume"
+msgstr ""
+
+#. module: product
+#: help:product.product,image_small:0
+msgid ""
+"Small-sized image of the product. It is automatically resized as a 64x64px "
+"image, with aspect ratio preserved. Use this field anywhere a small image is "
+"required."
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_40_product_template
+msgid "Windows 7 Professional"
+msgstr ""
+
+#. module: product
+#: selection:product.uom,uom_type:0
+msgid "Reference Unit of Measure for this category"
+msgstr ""
+
+#. module: product
+#: field:product.supplierinfo,product_uom:0
+msgid "Supplier Unit of Measure"
+msgstr ""
+
+#. module: product
+#: view:product.product:0
+#: model:res.groups,name:product.group_product_variant
+msgid "Product Variant"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_6_product_template
+msgid "15” LCD Monitor"
+msgstr ""
+
+#. module: product
+#: code:addons/product/pricelist.py:376
+#: field:product.pricelist.item,base_pricelist_id:0
+#, python-format
+msgid "Other Pricelist"
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,help:product.product_pricelist_action2
+msgid ""
+"\n"
+" Click to create a pricelist.\n"
+"
\n"
+" A price list contains rules to be evaluated in order to "
+"compute\n"
+" the sales price of the products.\n"
+"
\n"
+" Price lists may have several versions (2010, 2011, Promotion "
+"of\n"
+" February 2010, etc.) and each version may have several "
+"rules.\n"
+" (e.g. the customer price of a product category will be based "
+"on\n"
+" the supplier price multiplied by 1.80).\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_template
+#: field:product.pricelist.item,product_tmpl_id:0
+#: field:product.product,product_tmpl_id:0
+#: view:product.template:0
+msgid "Product Template"
+msgstr ""
+
+#. module: product
+#: field:product.template,cost_method:0
+#: model:res.groups,name:product.group_costing_method
+msgid "Costing Method"
+msgstr ""
+
+#. module: product
+#: model:ir.model,name:product.model_product_category
+#: field:product.pricelist.item,categ_id:0
+msgid "Product Category"
+msgstr ""
+
+#. module: product
+#: model:product.template,description:product.product_product_19_product_template
+msgid "On demand hard-disk having capacity based on requirement."
+msgstr ""
+
+#. module: product
+#: selection:product.template,state:0
+msgid "End of Lifecycle"
+msgstr ""
+
+#. module: product
+#: model:product.template,name:product.product_product_15_product_template
+msgid "RAM SR3"
+msgstr ""
+
+#. module: product
+#: help:product.product,packaging:0
+msgid ""
+"Gives the different ways to package the same product. This has no impact on "
+"the picking order and is mainly used if you use the EDI module."
+msgstr ""
+
+#. module: product
+#: model:ir.actions.act_window,name:product.product_pricelist_action
+#: model:ir.ui.menu,name:product.menu_product_pricelist_action
+#: field:product.pricelist,version_id:0
+msgid "Pricelist Versions"
+msgstr ""
+
+#. module: product
+#: help:product.pricelist.item,price_round:0
+msgid ""
+"Sets the price so that it is a multiple of this value.\n"
+"Rounding is applied after the discount and before the surcharge.\n"
+"To have prices that end in 9.99, set rounding 10, surcharge -0.01"
+msgstr ""
+
+#. module: product
+#: field:product.template,list_price:0
+msgid "Sale Price"
+msgstr ""
+
+#. module: product
+#: help:product.uom,category_id:0
+msgid ""
+"Conversion between Units of Measure can only occur if they belong to the "
+"same category. The conversion will be made based on the ratios."
+msgstr ""
+
+#. module: product
+#: constraint:product.category:0
+msgid "Error ! You cannot create recursive categories."
+msgstr ""
+
+#. module: product
+#: help:product.product,image_medium:0
+msgid ""
+"Medium-sized image of the product. It is automatically resized as a "
+"128x128px image, with aspect ratio preserved, only when the image exceeds "
+"one of those sizes. Use this field in form views or some kanban views."
+msgstr ""
+
+#. module: product
+#: view:product.uom:0
+msgid "e.g: 1 * (reference unit) = ratio * (this unit)"
+msgstr ""
+
+#. module: product
+#: help:product.supplierinfo,qty:0
+msgid "This is a quantity which is converted into Default Unit of Measure."
+msgstr ""
+
+#. module: product
+#: help:product.template,volume:0
+msgid "The volume in m3."
+msgstr ""
+
+#. module: product
+#: field:product.pricelist.item,price_discount:0
+msgid "Price Discount"
+msgstr ""
diff --git a/addons/project_timesheet/i18n/ro.po b/addons/project_timesheet/i18n/ro.po
index cc4e4ff6161..f67da23770b 100644
--- a/addons/project_timesheet/i18n/ro.po
+++ b/addons/project_timesheet/i18n/ro.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-12 18:51+0000\n"
+"Last-Translator: Fekete Mihai \n"
"Language-Team: Romanian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-18 07:03+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: project_timesheet
#: view:report.timesheet.task.user:0
@@ -44,6 +44,8 @@ msgid ""
"You cannot delete a partner which is assigned to project, but you can "
"uncheck the active box."
msgstr ""
+"Nu puteti sterge un partener care este alocat unui proiect, dar puteti "
+"debifa casuta activa."
#. module: project_timesheet
#: model:ir.model,name:project_timesheet.model_project_task_work
@@ -56,6 +58,7 @@ msgstr "Sarcina de lucru Proiect"
msgid ""
"You cannot select a Analytic Account which is in Close or Cancelled state."
msgstr ""
+"Nu puteti selecta un Cont Analitic care se afla in starea Inchis sau Anulat."
#. module: project_timesheet
#: view:report.timesheet.task.user:0
@@ -72,7 +75,7 @@ msgstr "Octombrie"
#: view:project.project:0
#, python-format
msgid "Timesheets"
-msgstr ""
+msgstr "Fise de pontaj"
#. module: project_timesheet
#: view:project.project:0
@@ -90,11 +93,19 @@ msgid ""
" \n"
" "
msgstr ""
+"\n"
+" Dati clic pentru a adauga un contract al clientului.\n"
+" \n"
+" Aici veti gasi contractele asociate proiectelor\n"
+" clientului dumneavoastra pentru a urmari progresul "
+"facturarii.\n"
+"
\n"
+" "
#. module: project_timesheet
#: view:account.analytic.line:0
msgid "Analytic Account/Project"
-msgstr ""
+msgstr "Cont/Proiect Analitic"
#. module: project_timesheet
#: view:account.analytic.line:0
@@ -114,6 +125,9 @@ msgid ""
"employee.\n"
"Fill in the HR Settings tab of the employee form."
msgstr ""
+"Va rugam sa definiti produsul si proprietatea contului categoriei produsului "
+"pentru angajatul respectiv.\n"
+"Completati tabul HR Settings (Setari RU) din formularul angajatului."
#. module: project_timesheet
#: model:ir.model,name:project_timesheet.model_account_analytic_line
@@ -147,6 +161,8 @@ msgid ""
"Please define journal on the related employee.\n"
"Fill in the timesheet tab of the employee form."
msgstr ""
+"Va rugam sa definiti registrul angajatului respectiv.\n"
+"Completati tabul fisa de pontaj din formularul angajatului."
#. module: project_timesheet
#: model:ir.ui.menu,name:project_timesheet.menu_hr_timesheet_sign_in
@@ -166,7 +182,7 @@ msgstr "Contracte de reinnoit"
#. module: project_timesheet
#: view:project.project:0
msgid "Hours"
-msgstr ""
+msgstr "Ore"
#. module: project_timesheet
#: view:report.timesheet.task.user:0
@@ -221,6 +237,13 @@ msgid ""
" \n"
" "
msgstr ""
+"\n"
+" Aici veti gasi fisele de pontaj si achizitiile pe care le-"
+"ati facut pentru contracte care pot fi refacturate clientului.\n"
+" Daca doriti sa inregistrati noi activitati de facturat, ar "
+"trebui sa folositi meniul fisa de pontaj.\n"
+"
\n"
+" "
#. module: project_timesheet
#: model:process.node,name:project_timesheet.process_node_timesheettask0
@@ -283,6 +306,8 @@ msgstr ""
#, python-format
msgid "Please define employee for user \"%s\". You must create one."
msgstr ""
+"Va rugam sa definiti angajatul pentru utilizatorul \"%s\". Trebuie sa creati "
+"unul."
#. module: project_timesheet
#: model:ir.model,name:project_timesheet.model_res_partner
@@ -317,7 +342,7 @@ msgstr "Facturare"
#. module: project_timesheet
#: model:process.node,note:project_timesheet.process_node_triggerinvoice0
msgid "Trigger invoices from sales order lines"
-msgstr ""
+msgstr "Declansati facturi din liniile comenzii de vanzare"
#. module: project_timesheet
#: code:addons/project_timesheet/project_timesheet.py:100
@@ -327,6 +352,9 @@ msgid ""
"employee.\n"
"Fill in the timesheet tab of the employee form."
msgstr ""
+"Va rugam sa definiti produsul si proprietatile contului categoriei "
+"produsului pentru angajatul respectiv.\n"
+"Completati tabul fisa de pontaj din formularul angajatului."
#. module: project_timesheet
#: code:addons/project_timesheet/project_timesheet.py:60
@@ -335,6 +363,8 @@ msgid ""
"Timesheets on this project may be invoiced to %s, according to the terms "
"defined in the contract.
"
msgstr ""
+"Fisele de pontaj pentru acest proiect pot fi facturate lui %s, in functie "
+"de termenii definti in contract.
"
#. module: project_timesheet
#: model:process.node,note:project_timesheet.process_node_taskwork0
@@ -345,7 +375,7 @@ msgstr "Lucrul la sarcina"
#: model:ir.actions.act_window,name:project_timesheet.action_project_timesheet_bill_task
#: model:ir.ui.menu,name:project_timesheet.menu_project_billing_line
msgid "Invoice Tasks"
-msgstr ""
+msgstr "Facturati Sarcini"
#. module: project_timesheet
#: model:ir.actions.act_window,name:project_timesheet.action_report_timesheet_task_user
@@ -373,7 +403,7 @@ msgstr "Dupa ce sarcina este incheiata, Creeaza factura acesteia."
#: code:addons/project_timesheet/project_timesheet.py:266
#, python-format
msgid "Invalid Action!"
-msgstr ""
+msgstr "Actiune Nevalida!"
#. module: project_timesheet
#: view:report.timesheet.task.user:0
@@ -388,6 +418,8 @@ msgid ""
"Record your timesheets for the project "
"'%s'.
"
msgstr ""
+"Inregistrati-va fisele de "
+"pontaj pentru proiectul '%s'."
#. module: project_timesheet
#: field:report.timesheet.task.user,timesheet_hrs:0
diff --git a/addons/purchase_double_validation/i18n/ro.po b/addons/purchase_double_validation/i18n/ro.po
index 750f48847d2..ab88804cbe2 100644
--- a/addons/purchase_double_validation/i18n/ro.po
+++ b/addons/purchase_double_validation/i18n/ro.po
@@ -8,42 +8,42 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-12 15:28+0000\n"
+"Last-Translator: Fekete Mihai \n"
"Language-Team: Romanian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-18 07:04+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: purchase_double_validation
#: model:ir.model,name:purchase_double_validation.model_purchase_config_settings
msgid "purchase.config.settings"
-msgstr ""
+msgstr "purchase.config.settings (achizitie.config.setari)"
#. module: purchase_double_validation
#: view:purchase.order:0
msgid "Purchase orders which are not approved yet."
-msgstr ""
+msgstr "Comenzi de achizitii care nu sunt aprobate inca."
#. module: purchase_double_validation
#: field:purchase.config.settings,limit_amount:0
msgid "limit to require a second approval"
-msgstr ""
+msgstr "limita pentru a solicita o a doua aprobare"
#. module: purchase_double_validation
#: view:board.board:0
#: model:ir.actions.act_window,name:purchase_double_validation.purchase_waiting
msgid "Purchase Orders Waiting Approval"
-msgstr ""
+msgstr "Comenzi de Achizitie care Asteapta Aprobarea"
#. module: purchase_double_validation
#: view:purchase.order:0
msgid "To Approve"
-msgstr ""
+msgstr "De Aprobat"
#. module: purchase_double_validation
#: help:purchase.config.settings,limit_amount:0
msgid "Amount after which validation of purchase is required."
-msgstr ""
+msgstr "Valoarea dupa care este necesara validarea achizitiei."
diff --git a/addons/resource/i18n/ro.po b/addons/resource/i18n/ro.po
index 1b40b885bb5..1848475743a 100644
--- a/addons/resource/i18n/ro.po
+++ b/addons/resource/i18n/ro.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-12 18:55+0000\n"
+"Last-Translator: Fekete Mihai \n"
"Language-Team: Romanian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-18 07:05+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: resource
#: help:resource.calendar.leaves,resource_id:0
@@ -101,7 +101,7 @@ msgstr ""
#: code:addons/resource/resource.py:307
#, python-format
msgid "%s (copy)"
-msgstr ""
+msgstr "%s (copie)"
#. module: resource
#: view:resource.calendar:0
@@ -137,7 +137,7 @@ msgstr "Vineri"
#. module: resource
#: view:resource.calendar.attendance:0
msgid "Hours"
-msgstr ""
+msgstr "Ore"
#. module: resource
#: view:resource.calendar.leaves:0
@@ -163,7 +163,7 @@ msgstr "Cauta Concediile pentru perioada de lucru"
#. module: resource
#: field:resource.calendar.attendance,date_from:0
msgid "Starting Date"
-msgstr ""
+msgstr "Data de inceput"
#. module: resource
#: field:resource.calendar,manager:0
@@ -209,7 +209,7 @@ msgstr "Program de lucru"
#. module: resource
#: help:resource.calendar.attendance,hour_from:0
msgid "Start and End time of working."
-msgstr ""
+msgstr "Inceputul si Sfarsitul programului de lucru."
#. module: resource
#: view:resource.calendar.leaves:0
@@ -308,6 +308,10 @@ msgid ""
"show a load of 100% for this phase by default, but if we put a efficiency of "
"200%, then his load will only be 50%."
msgstr ""
+"Acest camp prezinta eficienta resurselor pentru a finaliza sarcinile. de "
+"exemplu resursele setate singure pe 5 zile cu 5 sarcini alocate, vor arata o "
+"incarcare de 100% pentru aceasta etapa in mod implicit, dar daca introducem "
+"o eficienta de 200%, atunci incarcarea va fi de doar 50%."
#. module: resource
#: model:ir.actions.act_window,name:resource.action_resource_calendar_leave_tree
@@ -352,7 +356,7 @@ msgstr "Om"
#. module: resource
#: view:resource.calendar.leaves:0
msgid "Duration"
-msgstr ""
+msgstr "Durata"
#. module: resource
#: field:resource.calendar.leaves,date_from:0
diff --git a/addons/sale/i18n/fr.po b/addons/sale/i18n/fr.po
index 8615d304cf9..a343a39648a 100644
--- a/addons/sale/i18n/fr.po
+++ b/addons/sale/i18n/fr.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2013-01-08 09:23+0000\n"
-"Last-Translator: David Halgand \n"
+"PO-Revision-Date: 2013-02-12 08:24+0000\n"
+"Last-Translator: WANTELLET Sylvain \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: 2013-01-18 07:05+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: sale
#: model:res.groups,name:sale.group_analytic_accounting
@@ -264,7 +264,7 @@ msgstr "Messages"
#. module: sale
#: field:sale.report,state:0
msgid "Order Status"
-msgstr ""
+msgstr "État de la commande"
#. module: sale
#: field:sale.order,amount_tax:0
@@ -280,7 +280,7 @@ msgstr "Montant hors-taxe"
#. module: sale
#: field:sale.config.settings,module_project:0
msgid "Project"
-msgstr ""
+msgstr "Projet"
#. module: sale
#: code:addons/sale/sale.py:360
@@ -345,7 +345,7 @@ msgstr "Assistant de composition de courriel"
#. module: sale
#: help:sale.order,message_unread:0
msgid "If checked new messages require your attention."
-msgstr ""
+msgstr "Si coché, de nouveaux messages requièrent votre attention."
#. module: sale
#: selection:sale.order,state:0
diff --git a/addons/sale_analytic_plans/i18n/ro.po b/addons/sale_analytic_plans/i18n/ro.po
index 7ac61494f34..ccdefcd49f8 100644
--- a/addons/sale_analytic_plans/i18n/ro.po
+++ b/addons/sale_analytic_plans/i18n/ro.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-12 18:56+0000\n"
+"Last-Translator: Fekete Mihai \n"
"Language-Team: Romanian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-18 07:06+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: sale_analytic_plans
#: field:sale.order.line,analytics_id:0
@@ -25,7 +25,7 @@ msgstr "Distributie analitica"
#. module: sale_analytic_plans
#: model:ir.model,name:sale_analytic_plans.model_sale_order
msgid "Sales Order"
-msgstr ""
+msgstr "Comanda de vanzare"
#. module: sale_analytic_plans
#: model:ir.model,name:sale_analytic_plans.model_sale_order_line
diff --git a/addons/sale_journal/i18n/ro.po b/addons/sale_journal/i18n/ro.po
index 70c1e23d928..a953e26961f 100644
--- a/addons/sale_journal/i18n/ro.po
+++ b/addons/sale_journal/i18n/ro.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-12 18:57+0000\n"
+"Last-Translator: Fekete Mihai \n"
"Language-Team: Romanian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-18 07:06+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: sale_journal
#: field:sale_journal.invoice.type,note:0
@@ -32,6 +32,8 @@ msgstr "Tip de facturare"
msgid ""
"This invoicing type will be used, by default, to invoice the current partner."
msgstr ""
+"Acest tip de facturare va fi folosit implicit pentru a factura partenerul "
+"curent."
#. module: sale_journal
#: view:res.partner:0
@@ -46,7 +48,7 @@ msgstr "Facturare"
#. module: sale_journal
#: model:ir.model,name:sale_journal.model_stock_picking_in
msgid "Incoming Shipments"
-msgstr ""
+msgstr "Incarcaturi primite"
#. module: sale_journal
#: help:sale_journal.invoice.type,active:0
@@ -103,7 +105,7 @@ msgstr ""
#. module: sale_journal
#: help:sale.order,invoice_type_id:0
msgid "Generate invoice based on the selected option."
-msgstr ""
+msgstr "Generati facturi pe baza optiunii selectate."
#. module: sale_journal
#: view:sale.order:0
@@ -137,4 +139,4 @@ msgstr "Comanda de vanzare"
#. module: sale_journal
#: model:ir.model,name:sale_journal.model_stock_picking_out
msgid "Delivery Orders"
-msgstr ""
+msgstr "Comenzi de Livrare"
diff --git a/addons/sale_margin/i18n/ro.po b/addons/sale_margin/i18n/ro.po
index 522cf0bef71..0e98b86d02c 100644
--- a/addons/sale_margin/i18n/ro.po
+++ b/addons/sale_margin/i18n/ro.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-12 18:58+0000\n"
+"Last-Translator: Fekete Mihai \n"
"Language-Team: Romanian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-18 07:06+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: sale_margin
#: field:sale.order.line,purchase_price:0
@@ -44,3 +44,5 @@ msgid ""
"It gives profitability by calculating the difference between the Unit Price "
"and the cost price."
msgstr ""
+"Prezinta profitabilitatea prin calcularea diferentei dintre Pretul Unitar si "
+"pretul de cost."
diff --git a/addons/sale_mrp/i18n/ro.po b/addons/sale_mrp/i18n/ro.po
index 459cd423862..28470d9fd67 100644
--- a/addons/sale_mrp/i18n/ro.po
+++ b/addons/sale_mrp/i18n/ro.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: Dorin \n"
+"PO-Revision-Date: 2013-02-12 18:59+0000\n"
+"Last-Translator: Fekete Mihai \n"
"Language-Team: Romanian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-18 07:06+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: sale_mrp
#: model:ir.model,name:sale_mrp.model_mrp_production
@@ -35,9 +35,9 @@ msgstr "Indica Referinta clientului din comanda de vanzare."
#. module: sale_mrp
#: field:mrp.production,sale_ref:0
msgid "Sale Reference"
-msgstr ""
+msgstr "Referinta Vanzarii"
#. module: sale_mrp
#: field:mrp.production,sale_name:0
msgid "Sale Name"
-msgstr ""
+msgstr "Denumirea Vanzarii"
diff --git a/addons/sale_order_dates/i18n/ro.po b/addons/sale_order_dates/i18n/ro.po
index dd321467343..0b983b98571 100644
--- a/addons/sale_order_dates/i18n/ro.po
+++ b/addons/sale_order_dates/i18n/ro.po
@@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-12 19:00+0000\n"
+"Last-Translator: Fekete Mihai \n"
"Language-Team: Romanian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-18 07:06+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: sale_order_dates
#: view:sale.order:0
msgid "Dates"
-msgstr ""
+msgstr "Date"
#. module: sale_order_dates
#: field:sale.order,commitment_date:0
@@ -40,7 +40,7 @@ msgstr "Data cand este creata ridicarea."
#. module: sale_order_dates
#: help:sale.order,requested_date:0
msgid "Date requested by the customer for the sale."
-msgstr ""
+msgstr "Data solicitata de catre client pentru vanzare."
#. module: sale_order_dates
#: field:sale.order,requested_date:0
@@ -55,4 +55,4 @@ msgstr "Comanda de vanzare"
#. module: sale_order_dates
#: help:sale.order,commitment_date:0
msgid "Committed date for delivery."
-msgstr ""
+msgstr "Data stabilita pentru livrare."
diff --git a/addons/stock/i18n/mn.po b/addons/stock/i18n/mn.po
index 037f0ac8987..b42839648c0 100644
--- a/addons/stock/i18n/mn.po
+++ b/addons/stock/i18n/mn.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2013-02-08 05:39+0000\n"
-"Last-Translator: Altangerel \n"
+"PO-Revision-Date: 2013-02-13 04:17+0000\n"
+"Last-Translator: gobi \n"
"Language-Team: Mongolian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-02-09 05:29+0000\n"
-"X-Generator: Launchpad (build 16482)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: stock
#: field:stock.inventory.line.split,line_exist_ids:0
@@ -212,7 +212,7 @@ msgstr "Барааны журнал"
#. module: stock
#: view:report.stock.move:0
msgid "Incoming"
-msgstr "Орох"
+msgstr "Ирж буй"
#. module: stock
#: code:addons/stock/wizard/stock_move.py:223
@@ -646,7 +646,7 @@ msgstr ""
#. module: stock
#: model:ir.ui.menu,name:stock.menu_stock_products_moves
msgid "Receive/Deliver Products"
-msgstr ""
+msgstr "Бараа хүлээн авах/хүргэх"
#. module: stock
#: field:stock.move,move_history_ids:0
@@ -1133,7 +1133,7 @@ msgstr "Бараа Байрлалаар"
#. module: stock
#: model:ir.ui.menu,name:stock.menu_stock_warehouse_mgmt
msgid "Receive/Deliver By Orders"
-msgstr ""
+msgstr "Захиалгаарх хүлээн авалт/хүргэлт"
#. module: stock
#: view:stock.production.lot:0
@@ -4234,7 +4234,7 @@ msgstr ""
#: model:ir.actions.act_window,name:stock.action_reception_picking_move
#: model:ir.ui.menu,name:stock.menu_action_pdct_in
msgid "Incoming Products"
-msgstr ""
+msgstr "Ирж буй бараа"
#. module: stock
#: view:product.product:0
diff --git a/addons/subscription/i18n/ro.po b/addons/subscription/i18n/ro.po
index 058635d7192..3deff9c6479 100644
--- a/addons/subscription/i18n/ro.po
+++ b/addons/subscription/i18n/ro.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
-"PO-Revision-Date: 2012-12-21 23:00+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2013-02-12 15:23+0000\n"
+"Last-Translator: Fekete Mihai \n"
"Language-Team: Romanian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-18 07:10+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:21+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: subscription
#: field:subscription.subscription,doc_source:0
@@ -67,7 +67,7 @@ msgstr "Saptamani"
#: view:subscription.subscription:0
#: field:subscription.subscription,state:0
msgid "Status"
-msgstr ""
+msgstr "Status"
#. module: subscription
#: model:ir.ui.menu,name:subscription.config_recuuring_event
@@ -176,7 +176,7 @@ msgstr "Zile"
#: code:addons/subscription/subscription.py:136
#, python-format
msgid "Error!"
-msgstr ""
+msgstr "Eroare!"
#. module: subscription
#: field:subscription.subscription,cron_id:0
diff --git a/addons/web/i18n/hu.po b/addons/web/i18n/hu.po
index 3c820122505..9ef88396e9d 100644
--- a/addons/web/i18n/hu.po
+++ b/addons/web/i18n/hu.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
-"PO-Revision-Date: 2012-12-27 09:12+0000\n"
+"PO-Revision-Date: 2013-02-12 13:23+0000\n"
"Last-Translator: krnkris \n"
"Language-Team: Hungarian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-12-28 05:37+0000\n"
-"X-Generator: Launchpad (build 16378)\n"
+"X-Launchpad-Export-Date: 2013-02-13 05:22+0000\n"
+"X-Generator: Launchpad (build 16491)\n"
#. module: web
#. openerp-web
@@ -103,7 +103,7 @@ msgstr "Hozzáférés megtagadva"
#: code:addons/web/static/src/js/view_form.js:5183
#, python-format
msgid "Uploading error"
-msgstr "Feltültési hiba"
+msgstr "Feltöltési hiba"
#. module: web
#. openerp-web
From 11051d4a08de2db72d76a9d715c6cd9c4229c9b6 Mon Sep 17 00:00:00 2001
From: Raphael Collet
Date: Wed, 13 Feb 2013 09:20:35 +0100
Subject: [PATCH 126/253] [FIX] web: rewrite reference to removed module
openerp.service.web_services
bzr revid: rco@openerp.com-20130213082035-9ajx7jlzim1qunv4
---
addons/web/controllers/main.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index e1a3c476a32..e23246d7288 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -683,7 +683,7 @@ class WebClient(openerpweb.Controller):
@openerpweb.jsonrequest
def version_info(self, req):
- return openerp.service.web_services.RPC_VERSION_1
+ return openerp.service.common.exp_version()
class Proxy(openerpweb.Controller):
_cp_path = '/web/proxy'
From ba591e26327e26363a725044acdc1f876596c83a Mon Sep 17 00:00:00 2001
From: Fabien Meghazi
Date: Wed, 13 Feb 2013 10:47:43 +0100
Subject: [PATCH 127/253] [FIX] Customer kanban view does not display tags on
results coming from "show more"
lp bug: https://launchpad.net/bugs/1115066 fixed
bzr revid: fme@openerp.com-20130213094743-6rjzgp9y46j9cewh
---
addons/web_kanban/static/src/js/kanban.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js
index 164c4ea9798..72e2fa70750 100644
--- a/addons/web_kanban/static/src/js/kanban.js
+++ b/addons/web_kanban/static/src/js/kanban.js
@@ -41,7 +41,7 @@ instance.web_kanban.KanbanView = instance.web.View.extend({
this.has_been_loaded = $.Deferred();
this.search_domain = this.search_context = this.search_group_by = null;
this.currently_dragging = {};
- this.limit = options.limit || 40;
+ this.limit = options.limit || 3;
this.add_group_mutex = new $.Mutex();
},
view_loading: function(r) {
@@ -636,6 +636,7 @@ instance.web_kanban.KanbanGroup = instance.web.Widget.extend({
self.view.dataset.ids = ids.concat(self.dataset.ids);
self.do_add_records(records);
self.compute_cards_auto_height();
+ self.view.postprocess_m2m_tags();
return records;
});
},
From c9e710b5b48e91dfd37f352ed365eead872c8229 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?=
Date: Wed, 13 Feb 2013 10:59:42 +0100
Subject: [PATCH 128/253] [FIX] mailgateway: author of incoming emails are not
put into the recipients anymore.
bzr revid: tde@openerp.com-20130213095942-gwmt2mmthrthca5n
---
addons/mail/mail_thread.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py
index 9d7237ca907..7a2be4aed01 100644
--- a/addons/mail/mail_thread.py
+++ b/addons/mail/mail_thread.py
@@ -773,7 +773,7 @@ class mail_thread(osv.AbstractModel):
msg_dict['author_id'] = author_ids[0]
else:
msg_dict['email_from'] = message.get('from')
- partner_ids = self._message_find_partners(cr, uid, message, ['From', 'To', 'Cc'], context=context)
+ partner_ids = self._message_find_partners(cr, uid, message, ['To', 'Cc'], context=context)
msg_dict['partner_ids'] = [(4, partner_id) for partner_id in partner_ids]
if 'Date' in message:
From 55625f52db111c75563a72a04dd3d5e992fadaf9 Mon Sep 17 00:00:00 2001
From: Raphael Collet
Date: Wed, 13 Feb 2013 11:18:03 +0100
Subject: [PATCH 129/253] [FIX] fix import statements in yml files
bzr revid: rco@openerp.com-20130213101803-4y1ponocx6oai2mz
---
addons/account_voucher/test/case1_usd_usd.yml | 2 --
addons/account_voucher/test/case2_suppl_usd_eur.yml | 2 --
.../account_voucher/test/case2_usd_eur_debtor_in_usd.yml | 2 --
addons/account_voucher/test/case3_eur_eur.yml | 2 --
addons/hr_holidays/test/test_hr_holiday.yml | 1 -
addons/hr_payroll_account/test/hr_payroll_account.yml | 4 ++--
addons/membership/test/test_membership.yml | 1 -
addons/purchase_requisition/test/purchase_requisition.yml | 3 ++-
addons/sale_mrp/test/sale_mrp.yml | 2 +-
addons/sale_stock/test/picking_order_policy.yml | 7 ++++---
10 files changed, 9 insertions(+), 17 deletions(-)
diff --git a/addons/account_voucher/test/case1_usd_usd.yml b/addons/account_voucher/test/case1_usd_usd.yml
index fd1945691ba..44269104370 100644
--- a/addons/account_voucher/test/case1_usd_usd.yml
+++ b/addons/account_voucher/test/case1_usd_usd.yml
@@ -159,7 +159,6 @@
I fill amounts 180 for the invoice of 200$ and 70 for the invoice of 100$>
-
!python {model: account.voucher}: |
- import netsvc, time
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_1_case1'))
data = []
@@ -254,7 +253,6 @@
I fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$
-
!python {model: account.voucher}: |
- import netsvc, time
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_2_case1'))
data = []
diff --git a/addons/account_voucher/test/case2_suppl_usd_eur.yml b/addons/account_voucher/test/case2_suppl_usd_eur.yml
index 91fb99f6360..c13bfcbd5d4 100644
--- a/addons/account_voucher/test/case2_suppl_usd_eur.yml
+++ b/addons/account_voucher/test/case2_suppl_usd_eur.yml
@@ -131,7 +131,6 @@
I fill amounts 180 for the invoice of 200$ and 70 for the invoice of 100$
-
!python {model: account.voucher}: |
- import netsvc, time
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_1_case2_suppl'))
data = []
@@ -234,7 +233,6 @@
I fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$>
-
!python {model: account.voucher}: |
- import netsvc, time
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_2_case2_suppl'))
data = []
diff --git a/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml b/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml
index b049fc7692e..52c416e06cc 100644
--- a/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml
+++ b/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml
@@ -163,7 +163,6 @@
I fill amounts 130 for the invoice of 200$ and 70 for the invoice of 100$>
-
!python {model: account.voucher}: |
- import netsvc, time
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_1_case2b'))
data = []
@@ -244,7 +243,6 @@
and I fully reconcil the 2 previous invoices
-
!python {model: account.voucher}: |
- import netsvc, time
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_2_case2b'))
data = []
diff --git a/addons/account_voucher/test/case3_eur_eur.yml b/addons/account_voucher/test/case3_eur_eur.yml
index d0b18a5231b..99153ceeca4 100644
--- a/addons/account_voucher/test/case3_eur_eur.yml
+++ b/addons/account_voucher/test/case3_eur_eur.yml
@@ -118,7 +118,6 @@
I fill amounts 100 for the invoice of 150€ and 20 for the invoice of 80€
-
!python {model: account.voucher}: |
- import netsvc, time
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_1_case3'))
data = []
@@ -206,7 +205,6 @@
I fill amounts 50 for the invoice of 150€ and 70 for the invoice of 80€
-
!python {model: account.voucher}: |
- import netsvc, time
vals = {}
voucher_id = self.browse(cr, uid, ref('account_voucher_2_case3'))
data = []
diff --git a/addons/hr_holidays/test/test_hr_holiday.yml b/addons/hr_holidays/test/test_hr_holiday.yml
index e78c2fd08bc..2bb60300cff 100644
--- a/addons/hr_holidays/test/test_hr_holiday.yml
+++ b/addons/hr_holidays/test/test_hr_holiday.yml
@@ -18,7 +18,6 @@
I again set to draft and then confirm.
-
!python {model: hr.holidays}: |
- import netsvc
self.set_to_draft(cr, uid, [ref('hr_holidays_employee1_cl')])
self.signal_confirm(cr, uid, [ref('hr_holidays_employee1_cl')])
-
diff --git a/addons/hr_payroll_account/test/hr_payroll_account.yml b/addons/hr_payroll_account/test/hr_payroll_account.yml
index ad0197c7905..c8b6bf42fdd 100644
--- a/addons/hr_payroll_account/test/hr_payroll_account.yml
+++ b/addons/hr_payroll_account/test/hr_payroll_account.yml
@@ -89,7 +89,7 @@
I verify the payslip is in draft state.
-
!python {model: hr.payslip}: |
- from tools.translate import _
+ from openerp.tools.translate import _
payslip_brw=self.browse(cr, uid, ref("hr_payslip_0"))
assert(payslip_brw.state == 'draft'), _('State not changed!')
-
@@ -120,7 +120,7 @@
I verify that the payslip is in done state.
-
!python {model: hr.payslip}: |
- from tools.translate import _
+ from openerp.tools.translate import _
payslip_brw=self.browse(cr, uid, ref("hr_payslip_0"))
assert(payslip_brw.state == 'done'), _('State not changed!')
diff --git a/addons/membership/test/test_membership.yml b/addons/membership/test/test_membership.yml
index 8e8e7887b44..6fb392670e9 100644
--- a/addons/membership/test/test_membership.yml
+++ b/addons/membership/test/test_membership.yml
@@ -31,7 +31,6 @@
I'm Opening that Invoice which is created for "Seagate".
-
!python {model: res.partner}: |
- import netsvc
from tools.translate import _
invoice_pool = self.pool.get('account.invoice')
partner_pool = self.pool.get('res.partner')
diff --git a/addons/purchase_requisition/test/purchase_requisition.yml b/addons/purchase_requisition/test/purchase_requisition.yml
index f23737d21b8..8fd36e07d71 100644
--- a/addons/purchase_requisition/test/purchase_requisition.yml
+++ b/addons/purchase_requisition/test/purchase_requisition.yml
@@ -82,7 +82,8 @@
I print a Requisition report
-
!python {model: purchase.requisition}: |
- import netsvc, tools, os
+ import os
+ from openerp import netsvc, tools
(data, format) = netsvc.LocalService('report.purchase.requisition').create(cr, uid, [ref('purchase_requisition.requisition1')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'purchase_requisition-purchase_requisition_report.'+format), 'wb+').write(data)
diff --git a/addons/sale_mrp/test/sale_mrp.yml b/addons/sale_mrp/test/sale_mrp.yml
index c2eff008943..9b70e052854 100644
--- a/addons/sale_mrp/test/sale_mrp.yml
+++ b/addons/sale_mrp/test/sale_mrp.yml
@@ -92,7 +92,7 @@
I verify that a procurement has been generated for sale order
-
!python {model: procurement.order}: |
- from tools.translate import _
+ from openerp.tools.translate import _
sale_order_obj = self.pool.get('sale.order')
so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
proc_ids = self.search(cr, uid, [('origin','=',so.name)])
diff --git a/addons/sale_stock/test/picking_order_policy.yml b/addons/sale_stock/test/picking_order_policy.yml
index 406aaf0bf8a..f761dfb65db 100644
--- a/addons/sale_stock/test/picking_order_policy.yml
+++ b/addons/sale_stock/test/picking_order_policy.yml
@@ -22,7 +22,7 @@
!python {model: sale.order}: |
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
- from tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
+ from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
order = self.browse(cr, uid, ref("sale.sale_order_6"))
for order_line in order.order_line:
procurement = order_line.procurement_id
@@ -44,7 +44,7 @@
!python {model: sale.order}: |
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
- from tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
+ from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
sale_order = self.browse(cr, uid, ref("sale.sale_order_6"))
assert sale_order.picking_ids, "Delivery order is not created."
for picking in sale_order.picking_ids:
@@ -161,7 +161,8 @@
I print a sale order report.
-
!python {model: sale.order}: |
- import netsvc, tools, os
+ import os
+ from openerp import netsvc, tools
(data, format) = netsvc.LocalService('report.sale.order').create(cr, uid, [ref('sale.sale_order_6')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'sale-sale_order.'+format), 'wb+').write(data)
From 9e05f4d291845c642da3ba018c0b16e42ac744e8 Mon Sep 17 00:00:00 2001
From: Raphael Collet
Date: Wed, 13 Feb 2013 11:32:39 +0100
Subject: [PATCH 130/253] [FIX] membership: fix import statements in yml file
bzr revid: rco@openerp.com-20130213103239-5tq1ib4xcbykgjzk
---
addons/membership/test/test_membership.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/addons/membership/test/test_membership.yml b/addons/membership/test/test_membership.yml
index 6fb392670e9..40d1785c29a 100644
--- a/addons/membership/test/test_membership.yml
+++ b/addons/membership/test/test_membership.yml
@@ -31,7 +31,7 @@
I'm Opening that Invoice which is created for "Seagate".
-
!python {model: res.partner}: |
- from tools.translate import _
+ from openerp.tools.translate import _
invoice_pool = self.pool.get('account.invoice')
partner_pool = self.pool.get('res.partner')
membership_line_pool = self.pool.get('membership.membership_line')
@@ -105,7 +105,7 @@
I'm doing to make credit note of invoice which is paid by "Seagate" to cancel membership.
-
!python {model: account.invoice}: |
- from tools.translate import _
+ from openerp.tools.translate import _
invoice_pool = self.pool.get('account.invoice')
partner_pool = self.pool.get('res.partner')
membership_line_pool = self.pool.get('membership.membership_line')
From 3cd5a856be7a20cbcee884f10903a6c0e6ad6e41 Mon Sep 17 00:00:00 2001
From: Fabien Meghazi
Date: Wed, 13 Feb 2013 11:42:29 +0100
Subject: [PATCH 131/253] [FIX] Properly escape values in templates
bzr revid: fme@openerp.com-20130213104229-jjlhilp355lpi22p
---
addons/web/controllers/testing.py | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/addons/web/controllers/testing.py b/addons/web/controllers/testing.py
index 5692139f002..b6327bf4622 100644
--- a/addons/web/controllers/testing.py
+++ b/addons/web/controllers/testing.py
@@ -32,12 +32,12 @@ NOMODULE_TEMPLATE = Template(u"""