diff --git a/addons/account/account_financial_report.py b/addons/account/account_financial_report.py
index 28b5e08dc99..1d9a4a794eb 100644
--- a/addons/account/account_financial_report.py
+++ b/addons/account/account_financial_report.py
@@ -39,6 +39,8 @@ class account_financial_report(osv.osv):
_description = "Account Report"
def _get_level(self, cr, uid, ids, field_name, arg, context=None):
+ '''Returns a dictionary with key=the ID of a record and value = the level of this
+ record in the tree structure.'''
res = {}
for report in self.browse(cr, uid, ids, context=context):
level = 0
@@ -48,6 +50,8 @@ class account_financial_report(osv.osv):
return res
def _get_children_by_order(self, cr, uid, ids, context=None):
+ '''returns a dictionary with the key= the ID of a record and value = all its children,
+ computed recursively, and sorted by sequence. Ready for the printing'''
res = []
for id in ids:
res.append(id)
@@ -56,6 +60,12 @@ class account_financial_report(osv.osv):
return res
def _get_balance(self, cr, uid, ids, field_names, args, context=None):
+ '''returns a dictionary with key=the ID of a record and value=the balance amount
+ computed for this record. If the record is of type :
+ 'accounts' : it's the sum of the linked accounts
+ 'account_type' : it's the sum of leaf accoutns with such an account_type
+ 'account_report' : it's the amount of the related report
+ 'sum' : it's the sum of the children of this record (aka a 'view' record)'''
account_obj = self.pool.get('account.account')
res = {}
for report in self.browse(cr, uid, ids, context=context):
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index 250a0446534..e07a003c981 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
@@ -1394,7 +1390,12 @@ class account_invoice_line(osv.osv):
# 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)
+ 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 = {
diff --git a/addons/account/res_config.py b/addons/account/res_config.py
index 72d30c11cfd..53c604161ea 100644
--- a/addons/account/res_config.py
+++ b/addons/account/res_config.py
@@ -151,12 +151,12 @@ class account_config_settings(osv.osv_memory):
self.write(cr, uid, [id], vals, context)
return id
- def onchange_company_id(self, cr, uid, ids, company_id):
+ def onchange_company_id(self, cr, uid, ids, company_id, context=None):
# update related fields
values = {}
values['currency_id'] = False
if company_id:
- company = self.pool.get('res.company').browse(cr, uid, company_id)
+ company = self.pool.get('res.company').browse(cr, uid, company_id, context=context)
has_chart_of_accounts = company_id not in self.pool.get('account.installer').get_unconfigured_cmp(cr, uid)
fiscalyear_count = self.pool.get('account.fiscalyear').search_count(cr, uid,
[('date_start', '<=', time.strftime('%Y-%m-%d')), ('date_stop', '>=', time.strftime('%Y-%m-%d')),
diff --git a/addons/account/res_config_view.xml b/addons/account/res_config_view.xml
index 4bfd3697d89..7977c0fc505 100644
--- a/addons/account/res_config_view.xml
+++ b/addons/account/res_config_view.xml
@@ -33,7 +33,7 @@
| Invoice date | -Reference | -Due date | -Amount (%s) | -Lit. | +''' + _("Invoice Date") + ''' | +''' + _("Description") + ''' | +''' + _("Reference") + ''' | +''' + _("Due Date") + ''' | +''' + _("Amount") + " (%s)" % (currency.symbol) + ''' | +''' + _("Lit.") + ''' | " strend = " | " - followup_table +="
\n" +" Click to create Accounting Test.\n" +"
\n" +" " +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,desc:account_test.account_test_01 +msgid "Check the balance: Debit sum = Credit sum" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,desc:account_test.account_test_08 +msgid "Check that general accounts and partners on account moves are active" +msgstr "" + +#. module: account_test +#: model:accounting.assert.test,name:account_test.account_test_06_1 +msgid "Test 7: « View » account type" +msgstr "" + +#. module: account_test +#: view:accounting.assert.test:0 +msgid "Code Help" +msgstr "" diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index d615eaf7d8c..c6f754ed18f 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 _ @@ -50,13 +49,25 @@ 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, context=None): + res = super(account_config_settings, self).onchange_company_id(cr, uid, ids, company_id, context=context) + if company_id: + company = self.pool.get('res.company').browse(cr, uid, company_id, context=context) + 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): def _check_paid(self, cr, uid, ids, name, args, context=None): @@ -820,10 +831,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): @@ -831,9 +839,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 @@ -1508,7 +1514,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) @@ -1516,7 +1521,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 8e9bd5de584..44269104370 100644 --- a/addons/account_voucher/test/case1_usd_usd.yml +++ b/addons/account_voucher/test/case1_usd_usd.yml @@ -159,8 +159,6 @@ I fill amounts 180 for the invoice of 200$ and 70 for the invoice of 100$> - !python {model: account.voucher}: | - import time - from openerp import netsvc vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_1_case1')) data = [] @@ -183,10 +181,8 @@ I confirm the voucher - !python {model: account.voucher}: | - from openerp 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 - @@ -257,8 +253,6 @@ I fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$ - !python {model: account.voucher}: | - import time - from openerp import netsvc vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_2_case1')) data = [] @@ -281,10 +275,8 @@ I confirm the voucher - !python {model: account.voucher}: | - from openerp 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 194bd1be2de..c13bfcbd5d4 100644 --- a/addons/account_voucher/test/case2_suppl_usd_eur.yml +++ b/addons/account_voucher/test/case2_suppl_usd_eur.yml @@ -131,8 +131,6 @@ I fill amounts 180 for the invoice of 200$ and 70 for the invoice of 100$ - !python {model: account.voucher}: | - import time - from openerp import netsvc vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_1_case2_suppl')) data = [] @@ -162,10 +160,8 @@ I confirm the voucher - !python {model: account.voucher}: | - from openerp 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 - @@ -237,8 +233,6 @@ I fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$> - !python {model: account.voucher}: | - import time - from openerp import netsvc vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_2_case2_suppl')) data = [] @@ -268,10 +262,8 @@ I confirm the voucher - !python {model: account.voucher}: | - from openerp 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 bf785376613..02dd82f5c14 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 @@ -182,8 +182,7 @@ !python {model: account.voucher}: | from openerp 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 - @@ -258,8 +257,7 @@ !python {model: account.voucher}: | from openerp 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 3caf0a747c6..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,8 +163,6 @@ I fill amounts 130 for the invoice of 200$ and 70 for the invoice of 100$> - !python {model: account.voucher}: | - import time - from openerp import netsvc vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_1_case2b')) data = [] @@ -180,10 +178,8 @@ I confirm the voucher - !python {model: account.voucher}: | - from openerp 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 - @@ -247,8 +243,6 @@ and I fully reconcil the 2 previous invoices - !python {model: account.voucher}: | - import time - from openerp import netsvc vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_2_case2b')) data = [] @@ -271,10 +265,8 @@ I confirm the voucher - !python {model: account.voucher}: | - from openerp 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 5d1c1eb18a3..99153ceeca4 100644 --- a/addons/account_voucher/test/case3_eur_eur.yml +++ b/addons/account_voucher/test/case3_eur_eur.yml @@ -118,8 +118,6 @@ I fill amounts 100 for the invoice of 150€ and 20 for the invoice of 80€ - !python {model: account.voucher}: | - import time - from openerp import netsvc vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_1_case3')) data = [] @@ -142,10 +140,8 @@ I confirm the voucher - !python {model: account.voucher}: | - from openerp 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 - @@ -209,8 +205,6 @@ I fill amounts 50 for the invoice of 150€ and 70 for the invoice of 80€ - !python {model: account.voucher}: | - import time - from openerp import netsvc vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_2_case3')) data = [] @@ -233,10 +227,8 @@ I confirm the voucher - !python {model: account.voucher}: | - from openerp 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 a5deb8877c9..a0ef13d96aa 100644 --- a/addons/account_voucher/test/case4_cad_chf.yml +++ b/addons/account_voucher/test/case4_cad_chf.yml @@ -144,8 +144,7 @@ !python {model: account.voucher}: | from openerp 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 25382a49d68..37264de114a 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 b30e1263cdd..dc5602753fd 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 - diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index 5a204d605d6..b869f6c83b2 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -307,8 +307,9 @@\n" +"Nincs privát üzenet.\n" +"
\n" +"Ez a lista az önnek küldött üzeneteket tartalmazza.\n" +"
\n" +" " #. 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 @@ -647,19 +679,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 @@ -668,19 +700,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 @@ -694,12 +728,12 @@ msgstr "Mégsem" #: code:addons/mail/static/src/xml/mail.xml:44 #, python-format msgid "Share with my followers..." -msgstr "" +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 @@ -707,21 +741,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 @@ -730,6 +766,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 @@ -737,11 +775,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 @@ -749,13 +789,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 @@ -771,18 +813,28 @@ msgid "" " \n" " " msgstr "" +"\n" +" Szép munka! Az ön postafiókja üres.\n" +"
\n" +" A \"Beérkezett üzenetek\" az önnek küldött privát " +"üzeneteket vagy email-eket,\n" +" továbbá az ön által követett dokumentumokhoz vagy " +"emberekhez kapcsolódó\n" +" információkat tartalmaz.\n" +"
\n" +" " #. module: mail #: field:mail.mail,notification:0 msgid "Is Notification" -msgstr "" +msgstr "Ez egy üzenet" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:170 #, python-format msgid "Compose a new message" -msgstr "" +msgstr "Új üzenet küldés" #. module: mail #: view:mail.mail:0 @@ -795,6 +847,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 @@ -802,11 +855,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 @@ -815,13 +870,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 @@ -829,6 +884,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 @@ -844,17 +901,17 @@ 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 msgid "Owner" -msgstr "" +msgstr "Tulajdonos" #. module: mail #: model:ir.model,name:mail.model_res_users msgid "Users" -msgstr "" +msgstr "Felhasználók" #. module: mail #: model:ir.model,name:mail.model_mail_message @@ -863,25 +920,25 @@ msgstr "" #: field:mail.notification,message_id:0 #: field:mail.wizard.invite,message:0 msgid "Message" -msgstr "" +msgstr "Üzenet" #. module: mail #: help:mail.followers,res_id:0 #: help:mail.wizard.invite,res_id:0 msgid "Id of the followed resource" -msgstr "" +msgstr "A követett forrás ID azonosítója" #. module: mail #: field:mail.compose.message,body:0 #: field:mail.message,body:0 msgid "Contents" -msgstr "" +msgstr "Tartalmak" #. module: mail #: model:ir.actions.act_window,name:mail.action_view_mail_alias #: model:ir.ui.menu,name:mail.mail_alias_menu msgid "Aliases" -msgstr "" +msgstr "Álnevek" #. module: mail #: help:mail.message.subtype,description:0 @@ -889,60 +946,64 @@ msgid "" "Description that will be added in the message posted for this subtype. If " "void, the name will be added instead." msgstr "" +"Leírás ami hozzá lesz adva az altípusnak elküldendő üzenethez. Ha üres, a " +"név lesz hozzáadva helyette." #. module: mail #: field:mail.compose.message,vote_user_ids:0 #: field:mail.message,vote_user_ids:0 msgid "Votes" -msgstr "" +msgstr "Szavazatok" #. module: mail #: view:mail.group:0 msgid "Group" -msgstr "" +msgstr "Csoport" #. module: mail #: help:mail.compose.message,starred:0 #: help:mail.message,starred:0 msgid "Current user has a starred notification linked to this message" msgstr "" +"A jelenlegi felhasználónak van egy kicsillagozott értesítése mely hozzá van " +"rendelve az üzenethez." #. module: mail #: field:mail.group,public:0 msgid "Privacy" -msgstr "" +msgstr "Adatvédelem" #. module: mail #: view:mail.mail:0 msgid "Notification" -msgstr "" +msgstr "Értesítés" #. module: mail #. openerp-web #: code:addons/mail/static/src/js/mail.js:585 #, python-format msgid "Please complete partner's informations" -msgstr "" +msgstr "Kérem egészítse ki a partner információkat" #. module: mail #: view:mail.wizard.invite:0 msgid "Add Followers" -msgstr "" +msgstr "Követők hozzáadása" #. module: mail #: view:mail.compose.message:0 msgid "Followers of selected items and" -msgstr "" +msgstr "A kijelölt elemek követői és" #. module: mail #: field:mail.alias,alias_force_thread_id:0 msgid "Record Thread ID" -msgstr "" +msgstr "Összefűzési azonosító ID elmentése" #. module: mail #: model:ir.ui.menu,name:mail.mail_group_root msgid "My Groups" -msgstr "" +msgstr "Saját csoportok" #. module: mail #: model:ir.actions.client,help:mail.action_mail_archives_feeds @@ -956,12 +1017,21 @@ msgid "" " \n" " " msgstr "" +"\n" +" Nem található üzenet és nem lett még elküldve üzenet.\n" +"
\n" +" Kattintson felül jobbra az ikonra egy üzenet " +"összeállításához. Ez az\n" +" üzenet lesz elküldve e-mailként, ha ez egy belső " +"kapcsolat.\n" +"
\n" +" " #. module: mail #: view:mail.mail:0 #: field:mail.mail,state:0 msgid "Status" -msgstr "" +msgstr "Állapot" #. module: mail #: view:mail.mail:0 @@ -972,13 +1042,13 @@ msgstr "Kimenő" #. module: mail #: selection:res.partner,notification_email_send:0 msgid "All feeds" -msgstr "" +msgstr "Összes betáplálás" #. module: mail #: help:mail.compose.message,record_name:0 #: help:mail.message,record_name:0 msgid "Name get of the related document." -msgstr "" +msgstr "A név az ide vonatkozó dokumentumról levéve." #. module: mail #: model:ir.actions.act_window,name:mail.action_view_notifications @@ -989,12 +1059,12 @@ msgstr "" #: field:mail.message,notification_ids:0 #: view:mail.notification:0 msgid "Notifications" -msgstr "" +msgstr "Értesítések" #. module: mail #: view:mail.alias:0 msgid "Search Alias" -msgstr "" +msgstr "Álnév keresés" #. module: mail #: help:mail.alias,alias_force_thread_id:0 @@ -1003,6 +1073,9 @@ msgid "" "attached, even if they did not reply to it. If set, this will disable the " "creation of new records completely." msgstr "" +"Az összefűzés (rekord) választható ID azonosítója, amely minden beérkezett " +"üzenethez hozzá lesz mellékleve, még akkor is ha nem válaszoltak rá. Ha " +"beállított, akkor teljesen ki lesz kapcsolva az új rekord létrehozása." #. module: mail #: help:mail.message.subtype,name:0 @@ -1013,28 +1086,33 @@ msgid "" "subtypes allow to precisely tune the notifications the user want to receive " "on its wall." msgstr "" +"Üzenet altípus sokkal pontosabb típust ad az üzenetekhez, főként a rendszer " +"értesítésekhez. Például, az értesítés kapcsolódhat új rekordhoz (Új), vagy " +"egy szakasz változás a műveletben (Szakasz változás). Üzenet altípusok " +"lehetővé teszik az értesítések pontos behangolását, melyeket a felhasználó " +"az üzenet falán látni szeretne." #. module: mail #: view:mail.mail:0 msgid "by" -msgstr "" +msgstr "által" #. module: mail #: model:mail.group,name:mail.group_best_sales_practices msgid "Best Sales Practices" -msgstr "" +msgstr "Legjobb Értékesítési Praktikák" #. module: mail #: selection:mail.group,public:0 msgid "Selected Group Only" -msgstr "" +msgstr "Csak a kiválasztott csoport" #. module: mail #: field:mail.group,message_is_follower:0 #: field:mail.thread,message_is_follower:0 #: field:res.partner,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Ez egy követő" #. module: mail #: view:mail.alias:0 @@ -1045,12 +1123,12 @@ msgstr "Felhasználó" #. module: mail #: view:mail.group:0 msgid "Groups" -msgstr "" +msgstr "Csoportok" #. module: mail #: view:mail.message:0 msgid "Messages Search" -msgstr "" +msgstr "Üzenetek keresése" #. module: mail #: field:mail.compose.message,date:0 @@ -1063,7 +1141,7 @@ msgstr "Dátum" #: code:addons/mail/static/src/xml/mail.xml:34 #, python-format msgid "Post" -msgstr "" +msgstr "Elküld" #. module: mail #: view:mail.mail:0 @@ -1075,31 +1153,31 @@ msgstr "Kiterjesztett szűrők…" #: code:addons/mail/static/src/xml/mail.xml:107 #, python-format msgid "To:" -msgstr "" +msgstr "Címzett:" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:175 #, python-format msgid "Write to my followers" -msgstr "" +msgstr "Bejegyzés írás a követőimnek" #. module: mail #: model:ir.model,name:mail.model_res_groups msgid "Access Groups" -msgstr "" +msgstr "Csoportok hozzáférése" #. module: mail #: field:mail.message.subtype,default:0 msgid "Default" -msgstr "" +msgstr "Alapértelmezett" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:260 #, python-format msgid "show more message" -msgstr "" +msgstr "mutassa a többi üzenetet" #. module: mail #. openerp-web @@ -1111,25 +1189,27 @@ msgstr "Megjelölés feladatkét" #. module: mail #: help:mail.message.subtype,parent_id:0 msgid "Parent subtype, used for automatic subscription." -msgstr "" +msgstr "Szülő altípus, ami automatikus feliratkozáshoz használt." #. module: mail #: model:ir.model,name:mail.model_mail_wizard_invite msgid "Invite wizard" -msgstr "" +msgstr "Meghívó varázsló" #. module: mail #: field:mail.group,message_summary:0 #: field:mail.thread,message_summary:0 #: field:res.partner,message_summary:0 msgid "Summary" -msgstr "" +msgstr "Összegzés" #. module: mail #: help:mail.message.subtype,res_model:0 msgid "" "Model the subtype applies to. If False, this subtype applies to all models." msgstr "" +"Az altípushoz alkalmazott minta. Ha téves, akkor ez az altípus lesz " +"használva az összes mintához." #. module: mail #: field:mail.compose.message,subtype_id:0 @@ -1137,45 +1217,46 @@ msgstr "" #: field:mail.message,subtype_id:0 #: view:mail.message.subtype:0 msgid "Subtype" -msgstr "" +msgstr "Altípus" #. module: mail #: view:mail.group:0 msgid "Group Form" -msgstr "" +msgstr "Csoport űrlap" #. module: mail #: field:mail.compose.message,starred:0 #: field:mail.message,starred:0 #: field:mail.notification,starred:0 msgid "Starred" -msgstr "" +msgstr "Csillagozott" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:262 #, python-format msgid "more messages" -msgstr "" +msgstr "több üzenet" #. module: mail #: code:addons/mail/update.py:93 #, python-format msgid "Error" -msgstr "" +msgstr "Hiba" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail_followers.xml:13 #, python-format msgid "Following" -msgstr "" +msgstr "Követés" #. module: mail #: sql_constraint:mail.alias:0 msgid "" "Unfortunately this email alias is already used, please choose a unique one" msgstr "" +"Sajnos ez az email álnév már használva van, kérem válasszon egy egyedit." #. module: mail #: help:mail.alias,alias_user_id:0 @@ -1185,19 +1266,24 @@ msgid "" "the sender (From) address, or will use the Administrator account if no " "system user is found for that address." msgstr "" +"A rekord tulajdonosa létrehozva amikor erre az álnévre e-mailek érkeznek. " +"Ha ez a mező nincs kialakítva akkor a rendszer megpróbálja megkeresni a " +"jogos tulajdonost a elküldési (űrlap) címről, vagy az adminisztrátor " +"felhasználót fogja használni ha nem talált rendszer felhasználót azzal a " +"címmel." #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail_followers.xml:52 #, python-format msgid "And" -msgstr "" +msgstr "És" #. module: mail #: field:mail.compose.message,message_id:0 #: field:mail.message,message_id:0 msgid "Message-Id" -msgstr "" +msgstr "Üzenet-ID azonosító" #. module: mail #: help:mail.group,image:0 @@ -1205,6 +1291,7 @@ msgid "" "This field holds the image used as photo for the group, limited to " "1024x1024px." msgstr "" +"Ez a mező a képet tárolja amit a csoporthoz használ, limitálva 1024x1024px." #. module: mail #: field:mail.compose.message,attachment_ids:0 @@ -1217,7 +1304,7 @@ msgstr "Mellékletek" #: field:mail.compose.message,record_name:0 #: field:mail.message,record_name:0 msgid "Message Record Name" -msgstr "" +msgstr "Üzenet rekord név" #. module: mail #: field:mail.mail,email_cc:0 @@ -1227,7 +1314,7 @@ msgstr "Másolat" #. module: mail #: help:mail.notification,starred:0 msgid "Starred message that goes into the todo mailbox" -msgstr "" +msgstr "Csillagos üzenet amely a teendők levélládába megy" #. module: mail #. openerp-web @@ -1235,41 +1322,42 @@ msgstr "" #: view:mail.compose.message:0 #, python-format msgid "Followers of" -msgstr "" +msgstr "Követők ehhez" #. module: mail #: help:mail.mail,auto_delete:0 msgid "Permanently delete this email after sending it, to save space" msgstr "" +"Tartósan törli ezt az üzenetet az elküldés után, hely felszabadítása miatt" #. module: mail #: model:ir.actions.client,name:mail.action_mail_group_feeds msgid "Discussion Group" -msgstr "" +msgstr "Megbeszélés csoport" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:224 #, python-format msgid "Done" -msgstr "" +msgstr "Kész" #. module: mail #: model:mail.message.subtype,name:mail.mt_comment msgid "Discussions" -msgstr "" +msgstr "Hozzászólások" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail_followers.xml:11 #, python-format msgid "Follow" -msgstr "" +msgstr "Követ" #. module: mail #: field:mail.group,name:0 msgid "Name" -msgstr "" +msgstr "Név" #. module: mail #: model:mail.group,name:mail.group_all_employees @@ -1282,45 +1370,45 @@ msgstr "Teljes vállalat" #: view:mail.compose.message:0 #, python-format msgid "and" -msgstr "" +msgstr "és" #. module: mail #: help:mail.mail,body_html:0 msgid "Rich-text/HTML message" -msgstr "" +msgstr "Rich-text/HTML üzenet" #. module: mail #: view:mail.mail:0 msgid "Creation Month" -msgstr "" +msgstr "Létrehozás hónapja" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:272 #, python-format msgid "Compose new Message" -msgstr "" +msgstr "Új üzenet létrehozása" #. module: mail #: field:mail.group,menu_id:0 msgid "Related Menu" -msgstr "" +msgstr "Kapcsolódó menü" #. module: mail #: view:mail.message:0 msgid "Content" -msgstr "" +msgstr "Tartalom" #. module: mail #: field:mail.mail,email_to:0 msgid "To" -msgstr "" +msgstr "Címzett" #. module: mail #: field:mail.compose.message,notified_partner_ids:0 #: field:mail.message,notified_partner_ids:0 msgid "Notified partners" -msgstr "" +msgstr "Értesített partnerek" #. module: mail #: help:mail.group,public:0 @@ -1328,11 +1416,13 @@ msgid "" "This group is visible by non members. Invisible groups can add " "members through the invite button." msgstr "" +"Ez a csoport azoknak is látható akik nem tagok. A nem látható csoportok " +"tagokat adhatnak a meghívó gombbal." #. module: mail #: model:mail.group,name:mail.group_board msgid "Board meetings" -msgstr "" +msgstr "Tanácskozás" #. module: mail #: constraint:mail.alias:0 @@ -1340,40 +1430,42 @@ msgid "" "Invalid expression, it must be a literal python dictionary definition e.g. " "\"{'field': 'value'}\"" msgstr "" +"Nem érvényes kifejezés, ennek python szótár kifejezésnek kell lennie pl.: " +"\"{'field': 'value'}\"" #. module: mail #: field:mail.alias,alias_model_id:0 msgid "Aliased Model" -msgstr "" +msgstr "Minta álnév" #. module: mail #: help:mail.compose.message,message_id:0 #: help:mail.message,message_id:0 msgid "Message unique identifier" -msgstr "" +msgstr "Üzenet egyedi azonosító" #. module: mail #: field:mail.group,description:0 #: field:mail.message.subtype,description:0 msgid "Description" -msgstr "" +msgstr "Leírás" #. module: mail #: model:ir.model,name:mail.model_mail_followers msgid "Document Followers" -msgstr "" +msgstr "Követők dokumentuma" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail_followers.xml:35 #, python-format msgid "Remove this follower" -msgstr "" +msgstr "Követő eltávolítása" #. module: mail #: selection:res.partner,notification_email_send:0 msgid "Never" -msgstr "" +msgstr "Soha" #. module: mail #: field:mail.mail,mail_server_id:0 @@ -1384,7 +1476,7 @@ msgstr "Kimenő levelező szerver" #: code:addons/mail/mail_message.py:920 #, python-format msgid "Partners email addresses not found" -msgstr "" +msgstr "A partnerek e-mail címei nem találhatóak" #. module: mail #: view:mail.mail:0 @@ -1395,25 +1487,27 @@ msgstr "Elküldött" #. module: mail #: field:mail.mail,body_html:0 msgid "Rich-text Contents" -msgstr "" +msgstr "Rich-text tartalmak" #. module: mail #: help:mail.compose.message,to_read:0 #: help:mail.message,to_read:0 msgid "Current user has an unread notification linked to this message" msgstr "" +"A jelenlegi felhasználónak van egy olvasatlan értesítése ehhez az üzenethez " +"csatolva" #. module: mail #: help:res.partner,notification_email_send:0 msgid "" "Choose in which case you want to receive an email when you receive new feeds." -msgstr "" +msgstr "Válassza ki milyen esetekben kíván e-mail kapni az új bevitelekből." #. module: mail #: model:ir.actions.act_window,name:mail.action_view_groups #: model:ir.ui.menu,name:mail.mail_allgroups msgid "Join a group" -msgstr "" +msgstr "Csoporthoz csatlakozás" #. module: mail #: model:ir.actions.client,help:mail.action_mail_group_feeds @@ -1423,13 +1517,17 @@ msgid "" " \n" " " msgstr "" +"\n" +" nincs üzenete ebben a csoportban.\n" +"
\n" +" " #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:195 #, python-format msgid "Please, wait while the file is uploading." -msgstr "" +msgstr "Kérem várjon amíg a fájl feltöltődik." #. module: mail #: view:mail.group:0 @@ -1439,6 +1537,9 @@ msgid "" "installed\n" " the portal module." msgstr "" +"Ez a csoport mindenki számára látható,\n" +" az ügyfeleinek is, ha telepítette a\n" +" portal modult." #. module: mail #. openerp-web @@ -1452,17 +1553,17 @@ msgstr "Visszahelyezés a feladatokhoz" #: code:addons/mail/static/src/xml/mail.xml:113 #, python-format msgid "this document" -msgstr "" +msgstr "ez a dokumentum" #. module: mail #: field:mail.compose.message,filter_id:0 msgid "Filters" -msgstr "" +msgstr "Szűrők" #. module: mail #: field:res.partner,notification_email_send:0 msgid "Receive Feeds by Email" -msgstr "" +msgstr "Új hozzászólások e-mailen fogadva" #. module: mail #: help:base.config.settings,alias_domain:0 @@ -1470,6 +1571,8 @@ msgid "" "If you have setup a catch-all email domain redirected to the OpenERP server, " "enter the domain name here." msgstr "" +"Ha be állítja az összes e-mail fogadása domain átirányítás az openERP " +"szerverre, akkor írja ide a domain nevet." #. module: mail #: model:ir.actions.act_window,name:mail.action_view_mail_message @@ -1486,13 +1589,13 @@ msgstr "Üzenetek" #: code:addons/mail/static/src/xml/mail.xml:126 #, python-format msgid "others..." -msgstr "" +msgstr "mások..." #. module: mail #: model:ir.actions.client,name:mail.action_mail_star_feeds #: model:ir.ui.menu,name:mail.mail_starfeeds msgid "To-do" -msgstr "" +msgstr "Feladat" #. module: mail #: view:mail.alias:0 @@ -1500,12 +1603,12 @@ msgstr "" #: field:mail.group,alias_id:0 #: field:res.users,alias_id:0 msgid "Alias" -msgstr "" +msgstr "Álnév" #. module: mail #: model:ir.model,name:mail.model_mail_mail msgid "Outgoing Mails" -msgstr "" +msgstr "Elküldött levelek" #. module: mail #: help:mail.compose.message,notification_ids:0 @@ -1514,6 +1617,8 @@ msgid "" "Technical field holding the message notifications. Use notified_partner_ids " "to access notified partners." msgstr "" +"Technikai mező a értesítés üzenetek tárolásához. Használja a " +"notified_partner_ids az értesített partnerek eléréséhez." #. module: mail #: model:ir.ui.menu,name:mail.mail_feeds @@ -1525,12 +1630,12 @@ msgstr "Üzenetek" #: view:mail.alias:0 #: field:mail.message.subtype,res_model:0 msgid "Model" -msgstr "" +msgstr "Modell" #. module: mail #: view:mail.message:0 msgid "Unread" -msgstr "" +msgstr "Olvasatlan" #. module: mail #: help:mail.followers,subtype_ids:0 @@ -1538,23 +1643,25 @@ msgid "" "Message subtypes followed, meaning subtypes that will be pushed onto the " "user's Wall." msgstr "" +"Üzenet altípus követve, azt jelenti, hogy az altípus ki lesz rakva a " +"felhasználó üzenőfalára." #. module: mail #: help:mail.group,message_ids:0 #: help:mail.thread,message_ids:0 #: help:res.partner,message_ids:0 msgid "Messages and communication history" -msgstr "" +msgstr "Üzenetek és kommunikáció történet" #. module: mail #: help:mail.mail,references:0 msgid "Message references, such as identifiers of previous messages" -msgstr "" +msgstr "Üzenet hivatkozások, mint előző üzenetek azonosítói" #. module: mail #: field:mail.compose.message,composition_mode:0 msgid "Composition mode" -msgstr "" +msgstr "Összeállítási mód" #. module: mail #: field:mail.compose.message,model:0 @@ -1562,14 +1669,14 @@ msgstr "" #: field:mail.message,model:0 #: field:mail.wizard.invite,res_model:0 msgid "Related Document Model" -msgstr "" +msgstr "Ide vonatkozó dokumentum modell" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:287 #, python-format msgid "unlike" -msgstr "" +msgstr "nem valószínű" #. module: mail #: help:mail.compose.message,author_id:0 @@ -1578,27 +1685,29 @@ msgid "" "Author of the message. If not set, email_from may hold an email address that " "did not match any partner." msgstr "" +"Az üzenet szerzője. Ha nincs beállítva, az e-mail ettől, egy címet " +"tartalmaz ami nem mutat egyik partnerre sem." #. module: mail #: help:mail.mail,email_cc:0 msgid "Carbon copy message recipients" -msgstr "" +msgstr "Üzenet másolat címzettjei" #. module: mail #: field:mail.alias,alias_domain:0 msgid "Alias domain" -msgstr "" +msgstr "Álénév domain" #. module: mail #: code:addons/mail/update.py:93 #, python-format msgid "Error during communication with the publisher warranty server." -msgstr "" +msgstr "Hiba a kiadó garancia szerverével történő kommunikációval." #. module: mail #: selection:mail.group,public:0 msgid "Private" -msgstr "" +msgstr "Privát" #. module: mail #: model:ir.actions.client,help:mail.action_mail_star_feeds @@ -1613,32 +1722,41 @@ msgid "" " \n" " " msgstr "" +"\n" +" Nincs teendő.\n" +"
\n" +" Ha a Beérkezett üzeneteinél végez műveletet, " +"megjelölheti\n" +" mint teendő. Ebből a menüből, minden teendőjét " +"elvégezheti.\n" +"
\n" +" " #. module: mail #: selection:mail.mail,state:0 msgid "Delivery Failed" -msgstr "" +msgstr "Küldés sikertelen" #. module: mail #: field:mail.compose.message,partner_ids:0 msgid "Additional contacts" -msgstr "" +msgstr "További kapcsolatok" #. module: mail #: help:mail.compose.message,parent_id:0 #: help:mail.message,parent_id:0 msgid "Initial thread message." -msgstr "" +msgstr "Elsődleges összefűzött üzenet." #. module: mail #: model:mail.group,name:mail.group_hr_policies msgid "HR Policies" -msgstr "" +msgstr "HR Emberi erőforrás menedzsment házirend" #. module: mail #: selection:res.partner,notification_email_send:0 msgid "Emails only" -msgstr "" +msgstr "Kizárólag e-mailek" #. module: mail #: model:ir.actions.client,name:mail.action_mail_inbox_feeds @@ -1651,35 +1769,35 @@ msgstr "Beérkezett üzenetek" #: code:addons/mail/static/src/xml/mail.xml:58 #, python-format msgid "File" -msgstr "" +msgstr "Fájl" #. module: mail #. openerp-web #: code:addons/mail/static/src/js/many2many_tags_email.js:63 #, python-format msgid "Please complete partner's informations and Email" -msgstr "" +msgstr "Kérem egészítse ki a partner információkat és e-mailjét" #. module: mail #: model:ir.actions.act_window,name:mail.action_view_message_subtype #: model:ir.ui.menu,name:mail.menu_message_subtype msgid "Subtypes" -msgstr "" +msgstr "Altípusok" #. module: mail #: model:ir.model,name:mail.model_mail_alias msgid "Email Aliases" -msgstr "" +msgstr "e-amil álnevek" #. module: mail #: field:mail.group,image_small:0 msgid "Small-sized photo" -msgstr "" +msgstr "Kis-méretű fotó" #. module: mail #: help:mail.mail,reply_to:0 msgid "Preferred response address for the message" -msgstr "" +msgstr "Előnyben részesített válasz cím ehhez az üzenethez" #~ msgid "Open Attachments" #~ msgstr "Mellékletek megnyitása" diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 16587ae24fd..77573f0d2f8 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -310,8 +310,8 @@ class mail_message(osv.Model): partner_tree = dict((partner[0], partner) for partner in partners) # 2. Attachments as SUPERUSER, because could receive msg and attachments for doc uid cannot see - attachments = ir_attachment_obj.read(cr, SUPERUSER_ID, list(attachment_ids), ['id', 'datas_fname'], context=context) - attachments_tree = dict((attachment['id'], {'id': attachment['id'], 'filename': attachment['datas_fname']}) for attachment in attachments) + attachments = ir_attachment_obj.read(cr, SUPERUSER_ID, list(attachment_ids), ['id', 'datas_fname', 'name'], context=context) + attachments_tree = dict((attachment['id'], {'id': attachment['id'], 'filename': attachment['datas_fname'], 'name': attachment['name']}) for attachment in attachments) # 3. Update message dictionaries for message_dict in messages: 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: diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index 0b3bddffde1..0872d049162 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -104,8 +104,8 @@ openerp.mail = function (session) { // returns the file type of a file based on its extension // As it only looks at the extension it is quite approximative. filetype: function(url){ - url = url.filename || url; - var tokens = (url+'').split('.'); + var url = url && url.filename || url; + var tokens = typeof url == 'string' ? url.split('.') : []; if(tokens.length <= 1){ return 'unknown'; } diff --git a/addons/marketing/i18n/hu.po b/addons/marketing/i18n/hu.po index 48acf144f2e..cc8760c35a6 100644 --- a/addons/marketing/i18n/hu.po +++ b/addons/marketing/i18n/hu.po @@ -7,19 +7,19 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-01-31 14:00+0000\n" -"Last-Translator: Krisztian EyssenRegards,OpenERP Team,
" msgstr "" +"Hello,
\n" +"Köszönjük érdeklődésedet és feliratkozásodat a műszaki " +"képzésre.
\n" +" Egyéb, további felmerülő kérdésekben állunk rendelkezésre. " +"Nagyon köszönjük együttműködésedet.\n" +"Ha további információra van szükség, küldj választ erre az " +"üzenetre.
\n" +"Tisztelettel,OpenERP csapata,
" #. module: marketing_campaign_crm_demo #: model:ir.actions.report.xml,name:marketing_campaign_crm_demo.mc_crm_lead_demo_report @@ -37,7 +45,7 @@ msgstr "Marketingkampány demojelentés" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_8 msgid "Thanks for subscribing to technical training" -msgstr "" +msgstr "Köszönjük a feliratkozást a műszaki képzésre" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_3 @@ -49,6 +57,12 @@ msgid "" "reply to this message.\n" "Regards,OpenERP Team,
" msgstr "" +"Hello,
\n" +"Köszönjük érdeklődésedet és feliratkozásodat az OpenERP " +"felfedező napra.
\n" +"Ha további információra van szükség, küldj válasz választ " +"erre az üzenetre.
\n" +"Tisztelettel,OpenERP csapat,
" #. module: marketing_campaign_crm_demo #: report:crm.lead.demo:0 @@ -58,7 +72,7 @@ msgstr "Vállalat :" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_4 msgid "Thanks for buying the OpenERP book" -msgstr "" +msgstr "Köszönjük, hogy megvásárolta az OpenERP könyvet" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_6 @@ -71,16 +85,23 @@ msgid "" "reply to this message.\n" "Regards,OpenERP Team,
" msgstr "" +"Hello,
\n" +"Van egy nagyon jó ajánlatunk ami megfelelhet Önnek.\n" +" Az ezüst tagjainknak, mi fizetjük a műszaki oktatást 2013 " +"Júniusában.
\n" +"Ha további információra van szükség, küldj válasz választ " +"erre az üzenetre.
\n" +"Tisztelettel,OpenERP csapat,
" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_1 msgid "Thanks for showing interest in OpenERP" -msgstr "" +msgstr "Köszönjük érdeklődését az OpenERP iránt" #. module: marketing_campaign_crm_demo #: model:ir.actions.server,name:marketing_campaign_crm_demo.action_dummy msgid "Dummy Action" -msgstr "" +msgstr "Látszólagos művelet" #. module: marketing_campaign_crm_demo #: report:crm.lead.demo:0 @@ -98,6 +119,13 @@ msgid "" "reply to this message.\n" "Regards,OpenERP Team,
" msgstr "" +"Hello,
\n" +"an egy nagyon jó ajánlatunk ami megfelelhet Önnek.\n" +" Ajánljuk, hogy iratkozzon fel az OpenERP felfedező napra 2013 " +"májusában.
\n" +"Ha további információra van szükség, küldj válasz választ " +"erre az üzenetre.
\n" +"Tisztelettel,OpenERP csapat,
" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_5 @@ -110,26 +138,33 @@ msgid "" "reply to this message.\n" "Regards,OpenERP Team,
" msgstr "" +"Hello,
\n" +"an egy nagyon jó ajánlatunk ami megfelelhet Önnek.\n" +" Az arany partnereknek, mi szervezzük az ingyenes oktatást 2013 " +"Júniusában.
\n" +"Ha további információra van szükség, küldj válasz választ " +"erre az üzenetre.
\n" +"Tisztelettel,OpenERP csapat,
" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_2 msgid "Propose to subscribe to the OpenERP Discovery Day on May 2010" -msgstr "" +msgstr "Javasolja a feliratkozást az OpenERP felfedező napra 2013 Májusában" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_3 msgid "Thanks for subscribing to the OpenERP Discovery Day" -msgstr "" +msgstr "Köszönjük, hogy feliratkozott az OpenERP felfedező napra" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_7 msgid "Propose gold partnership to silver partners" -msgstr "" +msgstr "Javasolja az arany partner tagságot az ezüst tagoknak" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_6 msgid "Propose paid training to Silver partners" -msgstr "" +msgstr "Javasolja a költségtérítéses oktatást az Ezüst partnereknek" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_4 @@ -139,6 +174,12 @@ msgid "" " If any further information required kindly revert back.\n" "Regards,OpenERP Team,
" msgstr "" +"Hello,
\n" +"Köszönjük az OpenERP könyv utáni érdeklődését és a " +"vásárlását.
\n" +" Ha további információra van szüksége kérjük forduljon hozzánk " +"bizalommal.\n" +"Tisztelettel,OpenERP csapata,
" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_7 @@ -150,11 +191,17 @@ msgid "" "reply to this message.\n" "Regards,OpenERP Team,
" msgstr "" +"Hello,
\n" +"Nagyon jó ajánlatunk van ami illeszkedhet az Ön igényeihez.\n" +" Az Ezüst partnereinknek, Arany tagságot ajánlunk.
\n" +"Ha további információra van szükségük, kérjük válaszoljon " +"erre az üzenetre.
\n" +"Tisztelettel,OpenERP csapata,
" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_5 msgid "Propose a free technical training to Gold partners" -msgstr "" +msgstr "Ajánljon ingyenes műszaki oktatást az Arany partnereknek" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_1 @@ -166,3 +213,8 @@ msgid "" "reply to this message.\n" "Regards,OpenERP Team,
" msgstr "" +"Hello,
\n" +"Köszönjük az OpenERP iránti őszinte érdeklődését.
\n" +"Ha további információra van szükségük, kérjük válaszoljon " +"erre az üzenetre.
\n" +"Tisztelettel,OpenERP csapata,
" diff --git a/addons/membership/test/test_membership.yml b/addons/membership/test/test_membership.yml index cc5e0ed30a9..40d1785c29a 100644 --- a/addons/membership/test/test_membership.yml +++ b/addons/membership/test/test_membership.yml @@ -31,19 +31,18 @@ I'm Opening that Invoice which is created for "Seagate". - !python {model: res.partner}: | - from openerp import netsvc - 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') - membership_pool = self.pool.get('product.product') + 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') + membership_pool = self.pool.get('product.product') + + membership_line_ids = membership_line_pool.search(cr, uid, [('membership_id','=',ref('product_product_membershipproduct0')),('partner','=',ref('base.res_partner_19'))]) + membership_lines = membership_line_pool.browse(cr, uid, membership_line_ids) + assert membership_lines, _('Membership is not registrated.') + membership_line = membership_lines[0] + invoice_pool.signal_invoice_open(cr, uid, [membership_line.account_invoice_id.id]) - membership_line_ids = membership_line_pool.search(cr, uid, [('membership_id','=',ref('product_product_membershipproduct0')),('partner','=',ref('base.res_partner_19'))]) - 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) - | I'm checking "Current membership state" of "Seagate". It is an "Invoiced Member" or not. - diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index 44fbaafbcfe..9f2d651d3d0 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.pool.get('stock.picking').signal_button_confirm(cr, uid, [shipment_id]) production.write({'state':'confirmed'}, context=context) return shipment_id 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}) 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) diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py index 1ce60946f6c..cce27d3a6c2 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,34 @@ 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): - wf_service = netsvc.LocalService('workflow') + workcenter_pool = self.pool.get('mrp.production.workcenter.line') 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 @@ -549,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={ diff --git a/addons/mrp_operations/test/workcenter_operations.yml b/addons/mrp_operations/test/workcenter_operations.yml index 795e3998459..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}: | - from openerp 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}: | - from openerp 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}: | - from openerp 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}: | - from openerp 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}: | - from openerp 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}: | - from openerp 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}: | - from openerp 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. @@ -106,8 +92,7 @@ I print a Barcode Report of Operation line. - !python {model: mrp_operations.operation.code}: | - import os - from openerp import netsvc, tools + import netsvc, tools, os (data, format) = netsvc.LocalService('report.mrp.code.barcode').create(cr, uid, [ref('mrp_operations.mrp_op_1'),ref('mrp_operations.mrp_op_2'),ref('mrp_operations.mrp_op_3'),ref('mrp_operations.mrp_op_4'),ref('mrp_operations.mrp_op_5')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp_operations-barcode_report.'+format), 'wb+').write(data) @@ -116,8 +101,7 @@ I print Workcenter's Barcode Report. - !python {model: mrp.workcenter}: | - import os - from openerp import netsvc, tools + import netsvc, tools, os (data, format) = netsvc.LocalService('report.mrp.wc.barcode').create(cr, uid, [ref('mrp.mrp_workcenter_0'),ref('mrp.mrp_workcenter_1')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp_operations-workcenter_barcode_report.'+format), 'wb+').write(data) diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py index 8c43158a876..6c3f0ce21e1 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) + pick_obj.signal_button_confirm(cr, uid, [picking]) self.write(cr, uid, [repair.id], {'state': 'done', 'picking_id': picking}) res[repair.id] = picking else: 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 diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 8e47d83aa24..ea7460dae21 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 _ @@ -364,7 +364,7 @@ class pos_session(osv.osv): ids = [ids] this_record = self.browse(cr, uid, ids[0], context=context) - this_record._workflow_signal('open') + this_record.signal_workflow('open') context.update(active_id=this_record.id) @@ -442,14 +442,14 @@ class pos_session(osv.osv): } def _confirm_orders(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") - + account_move_obj = self.pool.get('account.move') + pos_order_obj = self.pool.get('pos.order') for session in self.browse(cr, uid, ids, context=context): order_ids = [order.id for order in session.order_ids if order.state == 'paid'] - move_id = self.pool.get('account.move').create(cr, uid, {'ref' : session.name, 'journal_id' : session.config_id.journal_id.id, }, context=context) + move_id = account_move_obj.create(cr, uid, {'ref' : session.name, 'journal_id' : session.config_id.journal_id.id, }, context=context) - self.pool.get('pos.order')._create_account_move_line(cr, uid, order_ids, session, move_id, context=context) + pos_order_obj._create_account_move_line(cr, uid, order_ids, session, move_id, context=context) for order in session.order_ids: if order.state not in ('paid', 'invoiced'): @@ -457,7 +457,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) + pos_order_obj.signal_done(cr, uid, [order.id]) return True @@ -519,8 +519,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 +694,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) + + picking_obj.signal_button_confirm(cr, uid, [picking_id]) picking_obj.force_assign(cr, uid, [picking_id], context) return True @@ -707,7 +705,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) + 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) @@ -803,7 +801,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') @@ -856,7 +853,7 @@ class pos_order(osv.osv): inv_line['invoice_line_tax_id'] = [(6, 0, [x.id for x in line.product_id.taxes_id] )] 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..f37bdd9f8b8 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) + 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 0a1684ca9ca..47814761b20 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) + 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 d6dfdd1e183..b4e0e7b2041 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) + 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)+"])]", @@ -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) + 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}) @@ -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) + 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'}) 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): diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index 1ccc08236c7..299d1494fa6 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): """ @@ -103,7 +102,7 @@ class procurement_order(osv.osv): readonly=True, required=True, help="If you encode manually a Procurement, you probably want to use" \ " a make to order method."), 'note': fields.text('Note'), - 'message': fields.char('Latest error', help="Exception occurred while computing procurement orders."), + 'message': fields.text('Latest error', help="Exception occurred while computing procurement orders."), 'state': fields.selection([ ('draft','Draft'), ('cancel','Cancelled'), @@ -374,14 +373,13 @@ class procurement_order(osv.osv): self.message_post(cr, uid, [procurement.id], body=message, context=context) return ok - def _workflow_trigger(self, cr, uid, ids, trigger, context=None): - """ Don't trigger workflow for the element specified in trigger - """ - wkf_op_key = 'workflow.%s.%s' % (trigger, self._name) + def step_workflow(self, cr, uid, ids, context=None): + """ Don't trigger workflow for the element specified in trigger """ + wkf_op_key = 'workflow.trg_write.%s' % self._name if context and not context.get(wkf_op_key, True): # make sure we don't have a trigger loop while processing triggers return - return super(procurement_order,self)._workflow_trigger(cr, uid, ids, trigger, context=context) + return super(procurement_order, self).step_workflow(cr, uid, ids, context=context) def action_produce_assign_service(self, cr, uid, ids, context=None): """ Changes procurement state to Running. @@ -468,15 +466,12 @@ class procurement_order(osv.osv): class StockPicking(osv.osv): _inherit = 'stock.picking' - def test_finished(self, cursor, user, ids): - wf_service = netsvc.LocalService("workflow") - res = super(StockPicking, self).test_finished(cursor, user, ids) - for picking in self.browse(cursor, user, ids): + def test_finished(self, cr, uid, 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): diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py index 3cb34d6bdff..c09d9a22a16 100644 --- a/addons/procurement/schedulers.py +++ b/addons/procurement/schedulers.py @@ -57,13 +57,11 @@ 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: 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 +76,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 +98,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 @@ -155,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) @@ -178,8 +175,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): @@ -225,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: @@ -254,7 +250,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 +261,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 +273,4 @@ class procurement_order(osv.osv): cr.close() return {} -procurement_order() - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/procurement/wizard/make_procurement_product.py b/addons/procurement/wizard/make_procurement_product.py index 34a146289f6..aab49bf8e80 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,9 +76,7 @@ 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) - + procurement_obj.signal_button_confirm(cr, uid, [procure_id]) id2 = data_obj._get_id(cr, uid, 'procurement', 'procurement_tree_view') id3 = data_obj._get_id(cr, uid, 'procurement', 'procurement_form_view') diff --git a/addons/product/i18n/lo.po b/addons/product/i18n/lo.po new file mode 100644 index 00000000000..0f63a200e88 --- /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\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/purchase/purchase.py b/addons/purchase/purchase.py index 799601acb64..e76bf4a0358 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -22,9 +22,9 @@ 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 from openerp import pooler from openerp.tools.translate import _ import openerp.addons.decimal_precision as dp @@ -260,9 +260,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 +437,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, @@ -486,11 +483,10 @@ 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 - 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): @@ -571,26 +567,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 +642,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 +657,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 +708,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: @@ -801,8 +794,8 @@ 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.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 @@ -1169,8 +1162,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 +1184,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: diff --git a/addons/purchase/test/process/rfq2order2done.yml b/addons/purchase/test/process/rfq2order2done.yml index 4308ffb8be4..ff9158b3c09 100644 --- a/addons/purchase/test/process/rfq2order2done.yml +++ b/addons/purchase/test/process/rfq2order2done.yml @@ -59,11 +59,8 @@ I Validate Invoice of Purchase Order. - !python {model: purchase.order}: | - from openerp 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. - 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 bf0b7cdc400..8fd36e07d71 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}: | - from openerp 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. diff --git a/addons/report_webkit/ir_report.py b/addons/report_webkit/ir_report.py index 1385f504928..01b65987a8e 100644 --- a/addons/report_webkit/ir_report.py +++ b/addons/report_webkit/ir_report.py @@ -30,21 +30,22 @@ ############################################################################## from openerp.osv import fields, osv -from openerp import netsvc -from webkit_report import WebKitParser +import openerp.report.interface from openerp.report.report_sxw import rml_parse +from webkit_report import WebKitParser + def register_report(name, model, tmpl_path, parser=rml_parse): """Register the report into the services""" name = 'report.%s' % name - if netsvc.Service._services.get(name, False): - service = netsvc.Service._services[name] + if name in openerp.report.interface.report_int._reports: + service = openerp.report.interface.report_int[name] if isinstance(service, WebKitParser): #already instantiated properly, skip it return if hasattr(service, 'parser'): parser = service.parser - del netsvc.Service._services[name] + del openerp.report.interface.report_int[name] WebKitParser(name, model, tmpl_path, parser=parser) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index cddde4a5f08..df12a75a567 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) 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,10 +552,10 @@ 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') + account_invoice_obj = self.pool.get('account.invoice') for sale in self.browse(cr, uid, ids, context=context): for inv in sale.invoice_ids: if inv.state not in ('draft', 'cancel'): @@ -566,8 +563,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) + account_invoice_obj.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 +571,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') @@ -880,7 +875,7 @@ class sale_order_line(osv.osv): date_order = time.strftime(DEFAULT_SERVER_DATE_FORMAT) result = {} - warning_msgs = {} + warning_msgs = '' product_obj = product_obj.browse(cr, uid, product, context=context_partner) uom2 = False @@ -991,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/test/cancel_order.yml b/addons/sale/test/cancel_order.yml index 7ad349cc1fa..12b28fcb7e8 100644 --- a/addons/sale/test/cancel_order.yml +++ b/addons/sale/test/cancel_order.yml @@ -51,11 +51,10 @@ I cancel all the invoices. - !python {model: sale.order}: | - from openerp import netsvc invoice_ids = self.browse(cr, uid, ref("sale_order_8")).invoice_ids - wf_service = netsvc.LocalService("workflow") + account_invoice_obj = self.pool.get('account.invoice') for invoice in invoice_ids: - wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_cancel', cr) + account_invoice_obj.signal_invoice_cancel(cr, uid, [invoice.id]) - 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 8e88fb187a0..d138e917a4d 100644 --- a/addons/sale/test/manual_order_policy.yml +++ b/addons/sale/test/manual_order_policy.yml @@ -41,11 +41,10 @@ I open the Invoice. - !python {model: sale.order}: | - from openerp import netsvc - wf_service = netsvc.LocalService("workflow") so = self.browse(cr, uid, ref("sale_order_2")) + account_invoice_obj = self.pool.get('account.invoice') for invoice in so.invoice_ids: - wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_open', cr) + account_invoice_obj.signal_invoice_open(cr, uid, [invoice.id]) - I pay the invoice. - diff --git a/addons/sale/wizard/sale_line_invoice.py b/addons/sale/wizard/sale_line_invoice.py index 4aa58088129..fe8432fc7db 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) diff --git a/addons/sale_mrp/test/sale_mrp.yml b/addons/sale_mrp/test/sale_mrp.yml index ee0669367ad..9b70e052854 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")) - from openerp 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" - diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index 1b5ddefbe74..bd4eb2b8256 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): @@ -194,11 +193,11 @@ 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') proc_obj = self.pool.get('procurement.order') + stock_obj = self.pool.get('stock.picking') for sale in self.browse(cr, uid, ids, context=context): for pick in sale.picking_ids: if pick.state not in ('draft', 'cancel'): @@ -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) + proc_obj.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) + 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): @@ -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) + picking_obj.signal_button_confirm(cr, uid, [picking_id]) + procurement_obj.signal_button_confirm(cr, uid, proc_ids) val = {} if order.state == 'shipping_except': diff --git a/addons/sale_stock/test/cancel_order_sale_stock.yml b/addons/sale_stock/test/cancel_order_sale_stock.yml index f3dd28f1564..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}: | - from openerp 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}: | - from openerp 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 7b29afa3875..f761dfb65db 100644 --- a/addons/sale_stock/test/picking_order_policy.yml +++ b/addons/sale_stock/test/picking_order_policy.yml @@ -132,11 +132,10 @@ I open the Invoice. - !python {model: sale.order}: | - from openerp import netsvc - wf_service = netsvc.LocalService("workflow") so = self.browse(cr, uid, ref("sale.sale_order_6")) + account_invoice_obj = self.pool.get('account.invoice') for invoice in so.invoice_ids: - wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_open', cr) + account_invoice_obj.signal_invoice_open(cr, uid, [invoice.id]) - I pay the invoice - diff --git a/addons/stock/i18n/fr.po b/addons/stock/i18n/fr.po index 26b941990b5..764d2d3196d 100644 --- a/addons/stock/i18n/fr.po +++ b/addons/stock/i18n/fr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2012-11-26 17:09+0000\n" -"Last-Translator: Numérigraphe\n" +" Cliquer pour pour créer un mouvement interne.\n" +"
\n" +" La plupart des opérations sont préparées automatiquement par " +"OpenERP selon\n" +" les règles de logistique prédéfinies, mais vous pouvez aussi " +"enregistrer\n" +" manuellement des mouvements de stock.\n" +" \n" +" " #. module: stock #: model:ir.actions.report.xml,name:stock.report_move_labels @@ -633,7 +655,7 @@ msgstr "Etiquettes des articles" #: code:addons/stock/stock.py:1356 #, python-format msgid "Back order %s has been created." -msgstr "" +msgstr "Le reliquat %s a été crée." #. module: stock #: model:ir.model,name:stock.model_report_stock_move @@ -645,11 +667,13 @@ msgstr "Statistiques des mouvements" msgid "" "Allows you to select and maintain different units of measure for products." msgstr "" +"Permet de choisir et de gérer différentes unités de mesures pour les " +"articles." #. module: stock #: model:ir.model,name:stock.model_stock_report_tracklots msgid "Stock report by logistic serial number" -msgstr "" +msgstr "Rapport de stock par numéro de série logistique" #. module: stock #: help:product.product,track_outgoing:0 @@ -657,11 +681,13 @@ msgid "" "Forces to specify a Serial Number for all moves containing this product and " "going to a Customer Location" msgstr "" +"Force à préciser un numéro de série pour tous les mouvements contenant cet " +"article et à destination d'un emplacement client." #. module: stock #: model:ir.ui.menu,name:stock.menu_stock_products_moves msgid "Receive/Deliver Products" -msgstr "" +msgstr "Recevoir/livrer des articles" #. module: stock #: field:stock.move,move_history_ids:0 @@ -696,7 +722,7 @@ msgstr "Conditionnement" #. module: stock #: model:ir.actions.report.xml,name:stock.report_picking_list_in msgid "Receipt Slip" -msgstr "" +msgstr "Bon de réception" #. module: stock #: code:addons/stock/wizard/stock_move.py:214 @@ -713,7 +739,7 @@ msgstr "Commande(Origine)" #. module: stock #: model:ir.ui.menu,name:stock.menu_stock_uom_categ_form_action msgid "Unit of Measure Categories" -msgstr "" +msgstr "Catégories d'unités de mesure" #. module: stock #: report:lot.stock.overview:0 @@ -758,7 +784,7 @@ msgstr "Référence supplémentaire" #. module: stock #: view:stock.partial.picking.line:0 msgid "Stock Picking Line" -msgstr "" +msgstr "Mouvement de stock" #. module: stock #: field:stock.location,complete_name:0 @@ -779,7 +805,7 @@ msgstr "Ligne d'assitant mère (pour les lignes existantes)" #. module: stock #: view:report.stock.move:0 msgid "Year Planned" -msgstr "" +msgstr "Année prévue" #. module: stock #: view:report.stock.inventory:0 @@ -822,7 +848,7 @@ msgstr "Colis" #. module: stock #: selection:stock.location.product,type:0 msgid "Analyse Current Inventory" -msgstr "" +msgstr "Analyser le stock actuel" #. module: stock #: view:stock.move:0 @@ -852,6 +878,10 @@ msgid "" " For instance, you can sell pieces of meat that you invoice " "based on their weight." msgstr "" +"Permet de vendre des articles dans une unité, mais de facturer dans une " +"unité de mesure différente.\n" +" Par exemple, vous pouvez vendre des viandes à la pièce et " +"les facturer au poids." #. module: stock #: field:product.template,property_stock_procurement:0 @@ -890,13 +920,15 @@ msgid "" "Please define stock output account for this product or its category: \"%s\" " "(id: %d)" msgstr "" +"Veuillez définir le compte de sortie de stock de cet article ou de sa " +"catégorie : \"%s\" (id. : %d)" #. module: stock #: field:stock.picking,message_summary:0 #: field:stock.picking.in,message_summary:0 #: field:stock.picking.out,message_summary:0 msgid "Summary" -msgstr "" +msgstr "Résumé" #. module: stock #: view:product.category:0 @@ -915,7 +947,7 @@ msgstr "La référence doit être unique par société !" #: field:stock.picking.in,date:0 #: field:stock.picking.out,date:0 msgid "Time" -msgstr "" +msgstr "Heure" #. module: stock #: code:addons/stock/product.py:447 @@ -931,7 +963,7 @@ msgstr "Urgent" #. module: stock #: selection:stock.picking.out,state:0 msgid "Delivered" -msgstr "" +msgstr "Livré" #. module: stock #: field:stock.move,move_dest_id:0 @@ -953,7 +985,7 @@ msgstr "Mettre au rebut" #. module: stock #: view:product.product:0 msgid "- update" -msgstr "" +msgstr "- mettre à jour" #. module: stock #: report:stock.picking.list:0 @@ -972,6 +1004,8 @@ msgid "" "This field is for internal purpose. It is used to decide if the column " "production lot has to be shown on the moves or not." msgstr "" +"Ce champ est à usage interne uniquement : il permet de choisir si la colonne " +"\"n° de série\" doit être visible sur les mouvements ou pas." #. module: stock #: selection:product.product,valuation:0 @@ -991,7 +1025,7 @@ msgstr "Fournisseurs IT" #. module: stock #: view:stock.config.settings:0 msgid "Location & Warehouse" -msgstr "" +msgstr "Emplacement & Entrepôt" #. module: stock #: selection:report.stock.inventory,location_type:0 @@ -1006,16 +1040,18 @@ msgid "" "You cannot cancel the picking as some moves have been done. You should " "cancel the picking lines." msgstr "" +"Vous ne pouvez pas annuler ce bon de préparation car certains mouvements " +"sont déjà terminés. Vous devriez annuler les lignes du bon de préparation." #. module: stock #: field:stock.config.settings,decimal_precision:0 msgid "Decimal precision on weight" -msgstr "" +msgstr "Précision décimale pour le poids" #. module: stock #: view:stock.production.lot:0 msgid "Available Product Lots" -msgstr "" +msgstr "Numéros de série disponibles" #. module: stock #: model:ir.model,name:stock.model_stock_change_product_qty @@ -1057,16 +1093,17 @@ msgstr "Vous devez attribuer un numéro de série pour cet article." #, python-format msgid "Please define journal on the product category: \"%s\" (id: %d)" msgstr "" +"Veuillez définir un journal sur la catégorie d'articles : \"%s\" (id. : %d)" #. module: stock #: view:stock.move:0 msgid "Details" -msgstr "" +msgstr "Détails" #. module: stock #: selection:stock.picking,state:0 msgid "Ready to Transfer" -msgstr "" +msgstr "Prêt à transférer" #. module: stock #: report:lot.stock.overview:0 @@ -1106,7 +1143,7 @@ msgstr "Journal" #. module: stock #: model:ir.actions.act_window,name:stock.action_stock_invoice_onshipping msgid "Create Draft Invoices" -msgstr "" +msgstr "Créer les factures brouillon" #. module: stock #: help:stock.picking,location_id:0 @@ -1117,14 +1154,14 @@ msgid "" "needed.Set a location if you produce at a fixed location. This can be a " "partner location if you subcontract the manufacturing operations." msgstr "" -"Laissez vide si vous produisez là où les produits finis sont nécessaires. " -"Précisez l'emplacement si vous produisez sur un endroit fixe. Cela peut être " -"chez un partenaire si vous sous-traitez votre production." +"Laissez vide si vous produisez à l'emplacement où les produits finis sont " +"nécessaires. Précisez l'emplacement si vous produisez sur un endroit fixe. " +"Cela peut être chez un partenaire si vous sous-traitez votre production." #. module: stock #: selection:stock.picking.in,state:0 msgid "Ready to Receive" -msgstr "" +msgstr "Prêt à recevoir" #. module: stock #: view:stock.move:0 @@ -1150,22 +1187,22 @@ msgstr "Stock par emplacement" #. module: stock #: model:ir.ui.menu,name:stock.menu_stock_warehouse_mgmt msgid "Receive/Deliver By Orders" -msgstr "" +msgstr "Recevoir/Livrer par commandes" #. module: stock #: view:stock.production.lot:0 msgid "Product Lots" -msgstr "" +msgstr "Lots de production" #. module: stock #: view:stock.picking:0 msgid "Reverse Transfer" -msgstr "" +msgstr "Annuler le transfert" #. module: stock #: field:stock.config.settings,group_uos:0 msgid "Invoice products in a different unit of measure than the sales order" -msgstr "" +msgstr "Facturer les articles dans une unité différente du bon de commande" #. module: stock #: help:stock.location,active:0 @@ -1191,6 +1228,8 @@ msgid "" "No products to return (only lines in Done state and not fully returned yet " "can be returned)!" msgstr "" +"Aucun article à retourner : seules les lignes en état \"Terminé\" et qui " +"n'ont pas été entièrement retournées peuvent être retournées !" #. module: stock #: view:stock.picking:0 @@ -1222,12 +1261,12 @@ msgstr "Compte de valorisation de stock" #. module: stock #: view:stock.config.settings:0 msgid "Apply" -msgstr "" +msgstr "Appliquer" #. module: stock #: field:product.template,loc_row:0 msgid "Row" -msgstr "" +msgstr "Rangée" #. module: stock #: field:product.template,property_stock_production:0 @@ -1239,6 +1278,7 @@ msgstr "Emplacement de production" #, python-format msgid "Please define journal on the product category: \"%s\" (id: %d)." msgstr "" +"Veuillez définir un journal sur la catégorie d'article: \"%s\" (id. : %d)." #. module: stock #: field:report.stock.lines.date,date:0 @@ -1319,7 +1359,7 @@ msgstr "" #. module: stock #: report:stock.picking.list:0 msgid "Internal Shipment :" -msgstr "" +msgstr "Transfert interne :" #. module: stock #: view:stock.inventory.line:0 @@ -1335,7 +1375,7 @@ msgstr "Opération manuelle" #: view:report.stock.move:0 #: field:report.stock.move,picking_id:0 msgid "Shipment" -msgstr "" +msgstr "Expédition" #. module: stock #: view:stock.location:0 @@ -1357,7 +1397,7 @@ msgstr "" #: code:addons/stock/product.py:113 #, python-format msgid "Please specify company in Location." -msgstr "" +msgstr "Merci d'indiquer la société dans l'emplacement." #. module: stock #: view:stock.move:0 @@ -1370,6 +1410,8 @@ msgid "" "Allows you to create and manage your packaging dimensions and types you want " "to be maintained in your system." msgstr "" +"Vous permet de créer et de gérer les dimensions et types d'emballage que " +"vous voulez utiliser dans votre système." #. module: stock #: selection:report.stock.inventory,month:0 @@ -1394,7 +1436,7 @@ msgstr "Inventaire physique" #: code:addons/stock/wizard/stock_move.py:214 #, python-format msgid "Processing Error!" -msgstr "" +msgstr "Erreur de traitement !" #. module: stock #: help:stock.location,chained_company_id:0 @@ -1427,7 +1469,7 @@ msgstr "Emplacements partenaire" #. module: stock #: selection:stock.picking.in,state:0 msgid "Received" -msgstr "" +msgstr "Reçu" #. module: stock #: view:report.stock.inventory:0 @@ -1440,7 +1482,7 @@ msgstr "Quantité totale" #: field:stock.picking.in,min_date:0 #: field:stock.picking.out,min_date:0 msgid "Scheduled Time" -msgstr "" +msgstr "Heure prévue" #. module: stock #: model:ir.actions.act_window,name:stock.move_consume @@ -1451,7 +1493,7 @@ msgstr "Mouvement de consommation" #. module: stock #: report:stock.picking.list:0 msgid "Delivery Order :" -msgstr "" +msgstr "Bon de livraison :" #. module: stock #: help:stock.location,chained_delay:0 @@ -1517,6 +1559,7 @@ msgstr "En attente d'un autre mouvement" msgid "" "This quantity is expressed in the Default Unit of Measure of the product." msgstr "" +"Cette quantité est exprimée dans l'unité de mesure par défaut de l'article." #. module: stock #: help:stock.move,price_unit:0 @@ -1561,6 +1604,7 @@ msgstr "Vous ne pouvez supprimer que les mouvements en brouillon" #, python-format msgid "You cannot move product %s to a location of type view %s." msgstr "" +"Impossible de déplacer l'article %s vers l'emplacement de type \"Vue\" %s." #. module: stock #: view:stock.inventory:0 @@ -1651,7 +1695,7 @@ msgstr "Diviser" #. module: stock #: model:ir.actions.report.xml,name:stock.report_picking_list_out msgid "Delivery Slip" -msgstr "" +msgstr "Bordereau de livraison" #. module: stock #: model:ir.actions.act_window,name:stock.open_board_warehouse @@ -1684,6 +1728,11 @@ msgid "" "the generic Stock Output Account set on the product. This has no effect for " "internal locations." msgstr "" +"Utilisé pour la valorisation du stock en temps réel. Lorsqu'on le définit " +"sur un emplacement virtuel, ce compte est utilisé pour valoriser les " +"produits qui sont déplacés de cet emplacement à un emplacement interne, à la " +"place du compte de sortie de stock générique défini sur l'article. Ceci est " +"sans effet sur les emplacements internes." #. module: stock #: field:stock.inventory,date:0 @@ -1753,6 +1802,19 @@ msgid "" "Thank you in advance for your cooperation.\n" "Best Regards," msgstr "" +"Madame, Monsieur,\n" +"\n" +"D'après nos relevés, il semble que nous sommes encore en attente à ce jour " +"de paiements de votre part, dont les détails sont indiqués ci-dessous.\n" +"Si ces sommes ont déjà été réglées, vous pouvez ignorer ce rappel. Dans le " +"cas contraire, nous vous remercions de bien vouloir nous faire parvenir " +"votre règlement.\n" +"Si vous avez d'autres questions concernant votre compte, vous pouvez nous " +"contacter directement.\n" +"\n" +"En vous remerciant par avance.\n" +"\n" +"Cordialement," #. module: stock #: help:stock.incoterms,active:0 @@ -1784,6 +1846,8 @@ msgstr "Emplacement parent" #, python-format msgid "Please define stock output account for this product: \"%s\" (id: %d)." msgstr "" +"Veuillez définir un compte de sortie de stock pour cet article : \"%s\" (id. " +": %d)." #. module: stock #: help:stock.location,company_id:0 @@ -1800,7 +1864,7 @@ msgstr "Temps de chainage" #. module: stock #: field:stock.config.settings,group_uom:0 msgid "Manage different units of measure for products" -msgstr "" +msgstr "Gère différentes unités de mesure pour les articles" #. module: stock #: model:ir.model,name:stock.model_stock_invoice_onshipping @@ -1811,7 +1875,7 @@ msgstr "Facturation du stock au moment de l'expédition" #: code:addons/stock/stock.py:2475 #, python-format msgid "Please provide a positive quantity to scrap." -msgstr "" +msgstr "Merci de saisir une quantité positive à mettre au rebut" #. module: stock #: model:stock.location,name:stock.stock_location_shop1 @@ -1822,7 +1886,7 @@ msgstr "" #: view:product.product:0 #: view:product.template:0 msgid "Storage Location" -msgstr "" +msgstr "Emplacement de stockage" #. module: stock #: help:stock.partial.move.line,currency:0 @@ -1835,7 +1899,7 @@ msgstr "Devise dans laquelle est exprimée le coût unitaire" #: selection:stock.picking.in,move_type:0 #: selection:stock.picking.out,move_type:0 msgid "Partial" -msgstr "" +msgstr "Partiel" #. module: stock #: selection:report.stock.inventory,month:0 @@ -1846,7 +1910,7 @@ msgstr "Septembre" #. module: stock #: view:product.product:0 msgid "days" -msgstr "" +msgstr "jours" #. module: stock #: model:ir.model,name:stock.model_report_stock_inventory @@ -1863,7 +1927,7 @@ msgstr "Mois planifié" #: help:stock.picking.in,origin:0 #: help:stock.picking.out,origin:0 msgid "Reference of the document" -msgstr "" +msgstr "Référence du document" #. module: stock #: view:stock.picking:0 @@ -1874,7 +1938,7 @@ msgstr "Est un reliquat" #. module: stock #: report:stock.picking.list:0 msgid "Incoming Shipment :" -msgstr "" +msgstr "Livraison entrante :" #. module: stock #: field:stock.location,valuation_out_account_id:0 @@ -1927,7 +1991,7 @@ msgstr "Annuler la disponibilité" #: code:addons/stock/wizard/stock_location_product.py:49 #, python-format msgid "Current Inventory" -msgstr "" +msgstr "Inventaire actuel" #. module: stock #: help:product.template,property_stock_production:0 @@ -1990,7 +2054,7 @@ msgstr "Qté livrée" #. module: stock #: view:stock.partial.picking:0 msgid "Transfer Products" -msgstr "" +msgstr "Transférer des articles" #. module: stock #: help:product.template,property_stock_inventory:0 @@ -2007,6 +2071,11 @@ msgid "" "specific valuation account set on the destination location. When not set on " "the product, the one from the product category is used." msgstr "" +"Lorsque la valorisation du stock est faite en temps réel, les écritures de " +"contrepartie de toutes les livraisons seront passées sur ce compte, à moins " +"qu'un compte de valorisation particulier soit défini sur l'emplacement " +"destination. Lorsqu'il n'est pas précisé sur le produit, celui de la " +"catégorie de produit est utilisé." #. module: stock #: view:report.stock.move:0 @@ -2053,7 +2122,7 @@ msgstr "Date" #: field:stock.picking.in,message_is_follower:0 #: field:stock.picking.out,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "Est abonné" #. module: stock #: view:report.stock.inventory:0 @@ -2113,7 +2182,7 @@ msgstr "Numéro de lots" #: model:ir.actions.act_window,name:stock.action_deliver_move #: view:product.product:0 msgid "Deliveries" -msgstr "" +msgstr "Livraisons" #. module: stock #: model:ir.actions.act_window,help:stock.action_reception_picking_move @@ -2240,7 +2309,7 @@ msgstr "" #. module: stock #: constraint:stock.move:0 msgid "You try to assign a lot which is not from the same product." -msgstr "" +msgstr "Vous tentez d'assigner un lot qui n'appartient pas au même article." #. module: stock #: field:report.stock.move,day_diff1:0 @@ -2293,6 +2362,8 @@ msgid "" "Forces to specify a Serial Number for all moves containing this product and " "generated by a Manufacturing Order" msgstr "" +"Force à indiquer un numéro de série pour tous les mouvements de stock " +"contenant cet article et générés par un ordre de fabrication" #. module: stock #: model:ir.model,name:stock.model_stock_fill_inventory @@ -2341,7 +2412,7 @@ msgstr "Emplacements clients" #: code:addons/stock/stock.py:2858 #, python-format msgid "User Error!" -msgstr "" +msgstr "Erreur utilisateur !" #. module: stock #: view:stock.partial.picking:0 @@ -2351,7 +2422,7 @@ msgstr "" #. module: stock #: view:stock.picking:0 msgid "Create Invoice/Refund" -msgstr "" +msgstr "Créer facture/avoir" #. module: stock #: help:stock.picking,message_ids:0 @@ -2386,7 +2457,7 @@ msgstr "Emplacement fournisseur" #. module: stock #: view:stock.location.product:0 msgid "View Products Inventory" -msgstr "" +msgstr "Voir les inventaires" #. module: stock #: view:stock.move:0 @@ -2397,7 +2468,7 @@ msgstr "Création" #: code:addons/stock/stock.py:1776 #, python-format msgid "Operation forbidden !" -msgstr "" +msgstr "Opération interdite !" #. module: stock #: view:report.stock.inventory:0 @@ -2426,7 +2497,7 @@ msgstr "" #. module: stock #: view:stock.config.settings:0 msgid "Accounting" -msgstr "" +msgstr "Comptabilité" #. module: stock #: model:ir.ui.menu,name:stock.menu_warehouse_config @@ -2506,19 +2577,19 @@ msgstr "Unité de mesure" #. module: stock #: field:stock.config.settings,group_stock_multiple_locations:0 msgid "Manage multiple locations and warehouses" -msgstr "" +msgstr "Gérer des emplacements et entrepôts multiples" #. module: stock #: field:stock.config.settings,group_stock_production_lot:0 msgid "Track serial number on products" -msgstr "" +msgstr "Tracer les numéros de série sur les articles" #. module: stock #: field:stock.picking,message_unread:0 #: field:stock.picking.in,message_unread:0 #: field:stock.picking.out,message_unread:0 msgid "Unread Messages" -msgstr "" +msgstr "Messages non lus" #. module: stock #: help:stock.production.lot,stock_available:0 @@ -2526,6 +2597,8 @@ msgid "" "Current quantity of products with this Serial Number available in company " "warehouses" msgstr "" +"Quantité actuellement disponible portant ce numéro de série dans les " +"entrepôts de la société." #. module: stock #: view:stock.inventory:0 @@ -2584,7 +2657,7 @@ msgstr "Qté à venir" #. module: stock #: model:res.groups,name:stock.group_production_lot msgid "Manage Serial Numbers" -msgstr "" +msgstr "Gestion des numéros de série" #. module: stock #: field:stock.move,note:0 @@ -2597,7 +2670,7 @@ msgstr "Notes" #. module: stock #: selection:stock.picking,state:0 msgid "Transferred" -msgstr "" +msgstr "Transféré" #. module: stock #: report:lot.stock.overview:0 @@ -2618,12 +2691,12 @@ msgstr "Type de Livraison" #. module: stock #: view:stock.move:0 msgid "Process Partially" -msgstr "" +msgstr "Traiter partiellement" #. module: stock #: view:stock.move:0 msgid "Stock moves that are Confirmed, Available or Waiting" -msgstr "" +msgstr "Mouvements de stock confirmés, disponible ou en attente" #. module: stock #: model:ir.actions.act_window,name:stock.act_product_location_open @@ -2644,6 +2717,8 @@ msgid "" "Cannot create Journal Entry, Output Account of this product and Valuation " "account on category of this product are same." msgstr "" +"Impossible de créer l'écriture, le compte de sortie de cet article et le " +"compte de valorisation de la catégorie de cet article sont les mêmes." #. module: stock #: selection:stock.location,chained_location_type:0 @@ -2766,7 +2841,7 @@ msgstr "Créer" #. module: stock #: field:stock.change.product.qty,new_quantity:0 msgid "New Quantity on Hand" -msgstr "" +msgstr "Nouvelle quantité disponible" #. module: stock #: field:stock.move,priority:0 @@ -2816,7 +2891,7 @@ msgstr "Annuler l'inventaire" #. module: stock #: field:stock.config.settings,group_product_variant:0 msgid "Support multiple variants per products " -msgstr "" +msgstr "Gérer des variantes multiples d'articles " #. module: stock #: code:addons/stock/stock.py:2246 @@ -2825,6 +2900,8 @@ msgid "" "Cannot create Journal Entry, Input Account of this product and Valuation " "account on category of this product are same." msgstr "" +"Impossible de créer l'écriture : le compte d'entrée en stock de cet article " +"et le compte de valorisation de la catégorie de cet article sont les mêmes." #. module: stock #: model:ir.ui.menu,name:stock.menu_stock_unit_measure_stock @@ -2840,7 +2917,7 @@ msgstr "Emplacement fixe" #. module: stock #: field:report.stock.inventory,scrap_location:0 msgid "scrap" -msgstr "" +msgstr "rebut" #. module: stock #: code:addons/stock/stock.py:1891 @@ -2853,12 +2930,12 @@ msgstr "" #. module: stock #: report:stock.inventory.move:0 msgid "Manual Quantity" -msgstr "" +msgstr "Quantité manuelle" #. module: stock #: view:product.product:0 msgid "On hand:" -msgstr "" +msgstr "Disponible :" #. module: stock #: model:ir.model,name:stock.model_stock_report_prodlots @@ -2893,7 +2970,7 @@ msgstr "" #: code:addons/stock/wizard/stock_invoice_onshipping.py:112 #, python-format msgid "Please create Invoices." -msgstr "" +msgstr "Merci de créer les factures." #. module: stock #: help:stock.config.settings,module_product_expiry:0 @@ -2906,12 +2983,19 @@ msgid "" " - alert date.\n" "This installs the module product_expiry." msgstr "" +"Conserve différentes dates sur les articles et sur les numéros de série.\n" +"Les dates suivantes sont suivies :\n" +" - date limite de consommation\n" +" - date limite d'utilisation optimale\n" +" - date de retrait\n" +" - date d'alerte.\n" +"Ceci installe le module product_expiry." #. module: stock #: code:addons/stock/wizard/stock_partial_picking.py:174 #, python-format msgid "Please provide proper Quantity." -msgstr "" +msgstr "Merci de fournir des quantités valides." #. module: stock #: model:ir.actions.report.xml,name:stock.report_product_history @@ -2934,7 +3018,7 @@ msgstr "Journal de stock" #: code:addons/stock/wizard/stock_return_picking.py:171 #, python-format msgid "%s-%s-return" -msgstr "" +msgstr "%s-%s-retour" #. module: stock #: code:addons/stock/wizard/stock_change_product_qty.py:82 @@ -2951,18 +3035,20 @@ msgstr "Forcer la disponibilité" #. module: stock #: field:product.template,loc_rack:0 msgid "Rack" -msgstr "" +msgstr "Rayon" #. module: stock #: model:ir.actions.act_window,name:stock.move_scrap #: view:stock.move.scrap:0 msgid "Scrap Move" -msgstr "" +msgstr "Mise au rebut" #. module: stock #: help:stock.move,prodlot_id:0 msgid "Serial number is used to put a serial number on the production" msgstr "" +"Les numéros de série permettent d'attacher un numéro de série aux articles " +"produits." #. module: stock #: code:addons/stock/wizard/stock_partial_picking.py:100 @@ -2982,7 +3068,7 @@ msgstr "Approvisionnement" #: model:ir.ui.menu,name:stock.menu_action_pdct_out #, python-format msgid "Deliver Products" -msgstr "Livrer les produits" +msgstr "Livrer les articles" #. module: stock #: view:stock.location.product:0 @@ -3009,11 +3095,12 @@ msgstr "Date de fin prévue" #, python-format msgid "You cannot move product %s from a location of type view %s." msgstr "" +"Impossible de déplacer le produit %s depuis l'emplacement de type \"Vue\" %s." #. module: stock #: model:stock.location,name:stock.stock_location_company msgid "Your Company" -msgstr "" +msgstr "Votre société" #. module: stock #: help:stock.tracking,active:0 @@ -3061,6 +3148,18 @@ msgid "" " \n" " " msgstr "" +"\n" +" Cliquez pour ajouter un emplacement.\n" +"
\n" +" Cela représente la structure des entrepôts et des " +"emplacements\n" +" de votre société. Vous pouvez cliquer sur un emplacement " +"pour obtenir la liste\n" +" des articles et le stock contenu dans cet emplacement " +"particulier et dans ses\n" +" enfants.\n" +"
\n" +" " #. module: stock #: field:stock.location,stock_real:0 @@ -3091,6 +3190,8 @@ msgid "" "Total quantity after split exceeds the quantity to split for this product: " "\"%s\" (id: %d)." msgstr "" +"La quantité totale après la répartition dépasse la quantité à répartir pour " +"cet article : \"%s\" (id. : %d)." #. module: stock #: view:stock.partial.move.line:0 @@ -3113,6 +3214,8 @@ msgid "" "When you select a serial number on product moves, you can get the upstream " "or downstream traceability of that product." msgstr "" +"Lorsque vous indiquez un numéro de série sur les mouvements de stock, cela " +"vous donne accès à la traçabilité en amont ou en aval pour cet article." #. module: stock #: code:addons/stock/wizard/stock_partial_picking.py:95 @@ -3190,6 +3293,16 @@ msgid "" " \n" " " msgstr "" +"\n" +" Cliquez pour enregistrer une réception pour cet article. \n" +"
\n" +" Ici vous trouverez l'historique de toutes les réceptions en " +"rapport avec\n" +" cet article, ainsi que les réceptions futures que vous " +"attendez\n" +" de vos fournisseurs.\n" +"
\n" +" " #. module: stock #: help:stock.fill.inventory,recursive:0 @@ -3205,6 +3318,8 @@ msgstr "" msgid "" "Allows to configure inventory valuations on products and product categories." msgstr "" +"Permet de paramétrer la valorisation de stock sur les articles et les " +"catégories d'articles." #. module: stock #: help:stock.config.settings,module_stock_location:0 @@ -3216,6 +3331,13 @@ msgid "" "needs, etc.\n" " This installs the module stock_location." msgstr "" +"Fournit les flux de stock poussés et tirés. Cette fonctionnalité sert " +"typiquement à :\n" +" gérer les chaînes de fabrication, gérer des emplacements par " +"par défaut pour les articles,\n" +" définir des chemins dans vos entrepôts selon les besoins " +"métier, etc.\n" +" Cela installe le module stock_location." #. module: stock #: view:stock.inventory:0 @@ -3242,6 +3364,20 @@ msgid "" " \n" " " msgstr "" +"\n" +" Cliquez pour enregistrer la livraison d'un article.\n" +"
\n" +"\n" +" Vous trouverez dans cette liste tous les produits à livrer " +"à\n" +" vos clients. Vous pouvez traiter les livraisons directement " +"depuis\n" +" cette liste grâce aux boutons à droite de chaque ligne. Vous " +"pouvez\n" +" filtrer les livraisons par client, par article or par\n" +" commande (en utilisant le champ \"Origine\").\n" +"
\n" +" " #. module: stock #: view:stock.move:0 @@ -3256,7 +3392,7 @@ msgstr "Nom de révision" #. module: stock #: model:res.groups,name:stock.group_tracking_lot msgid "Manage Logistic Serial Numbers" -msgstr "" +msgstr "Gérer les numéros de série logistiques" #. module: stock #: view:stock.inventory:0 @@ -3277,12 +3413,22 @@ msgid "" " \n" " " msgstr "" +"\n" +" Cliquez pour ajouter un numéro de suivi.\n" +"
\n" +" Voici la liste de tous vos colis. En choisissant un colis, " +"vous pouvez\n" +" obtenir la traçabilité ascendante ou descendante des " +"articles\n" +" contenus dans le colis\n" +"
\n" +" " #. module: stock #: code:addons/stock/stock.py:2496 #, python-format msgid "%s %s %s has been moved to scrap." -msgstr "" +msgstr "%s %s %s a été mis au rebut." #. module: stock #: model:ir.actions.act_window,name:stock.action_picking_tree_out @@ -3337,14 +3483,14 @@ msgstr "" #. module: stock #: view:stock.picking.in:0 msgid "Confirm & Receive" -msgstr "" +msgstr "Confirmer et recevoir" #. module: stock #: field:stock.picking,origin:0 #: field:stock.picking.in,origin:0 #: field:stock.picking.out,origin:0 msgid "Source Document" -msgstr "" +msgstr "Document d'origine" #. module: stock #: selection:stock.move,priority:0 @@ -3354,7 +3500,7 @@ msgstr "Non urgent" #. module: stock #: view:stock.move:0 msgid "Scheduled" -msgstr "" +msgstr "Planifié" #. module: stock #: model:ir.actions.act_window,name:stock.action_warehouse_form @@ -3370,7 +3516,7 @@ msgstr "Responsable" #. module: stock #: view:stock.move:0 msgid "Process Entirely" -msgstr "" +msgstr "Traiter totalement" #. module: stock #: help:product.template,property_stock_procurement:0 @@ -3505,6 +3651,7 @@ msgstr "Couloir (X)" #: field:stock.config.settings,group_stock_packaging:0 msgid "Allow to define several packaging methods on products" msgstr "" +"Permet de définir plusieurs méthodes de conditionnement sur les articles" #. module: stock #: model:stock.location,name:stock.stock_location_7 @@ -3625,7 +3772,7 @@ msgstr "Écritures comptables" #. module: stock #: model:res.groups,name:stock.group_stock_manager msgid "Manager" -msgstr "" +msgstr "Responsable" #. module: stock #: model:stock.location,name:stock.stock_location_intermediatelocation0 @@ -3656,6 +3803,17 @@ msgid "" " \n" " " msgstr "" +"\n" +" Cliquez pour créer un bon de réception.\n" +"
\n" +" Les bons de réceptions permettent d'enregistrer les " +"commandes\n" +" que vous recevez de la part de vos fournisseurs. Un bon de " +"réception\n" +" contient la liste d'articles à recevoir, d'après la commande " +"d'achat originale.\n" +"
\n" +" " #. module: stock #: view:stock.move:0 @@ -3672,7 +3830,7 @@ msgstr "Tout en une fois" #. module: stock #: model:ir.actions.act_window,name:stock.act_product_stock_move_open msgid "Inventory Move" -msgstr "" +msgstr "Mouvement d'inventaire" #. module: stock #: code:addons/stock/product.py:475 @@ -3705,7 +3863,7 @@ msgstr "" #: model:ir.actions.act_window,name:stock.action_stock_config_settings #: view:stock.config.settings:0 msgid "Configure Warehouse" -msgstr "" +msgstr "Configurer l'entrepôt" #. module: stock #: view:stock.picking:0 @@ -3733,7 +3891,7 @@ msgstr "Dates des inventaires" #: model:ir.actions.act_window,name:stock.action_receive_move #: view:product.product:0 msgid "Receptions" -msgstr "" +msgstr "Réceptions" #. module: stock #: view:report.stock.move:0 @@ -3801,7 +3959,7 @@ msgstr "Inventaire par lot" #: field:stock.production.lot.revision,lot_id:0 #: field:stock.report.prodlots,prodlot_id:0 msgid "Serial Number" -msgstr "" +msgstr "Numéro de série" #. module: stock #: model:ir.model,name:stock.model_stock_partial_picking @@ -3844,7 +4002,7 @@ msgstr "" #: field:stock.picking.in,message_ids:0 #: field:stock.picking.out,message_ids:0 msgid "Messages" -msgstr "" +msgstr "Messages" #. module: stock #: model:stock.location,name:stock.stock_location_8 @@ -4036,7 +4194,7 @@ msgstr "" #: field:stock.picking.in,message_follower_ids:0 #: field:stock.picking.out,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "Abonnés" #. module: stock #: code:addons/stock/stock.py:2585 @@ -4068,7 +4226,7 @@ msgstr "Reliquat de" #: help:stock.partial.move.line,cost:0 #: help:stock.partial.picking.line,cost:0 msgid "Unit Cost for this product line" -msgstr "Coût unitaire pour cette ligne de produit" +msgstr "Coût unitaire pour cet article" #. module: stock #: model:ir.model,name:stock.model_product_category @@ -4082,7 +4240,7 @@ msgstr "Catégorie d'articles" #. module: stock #: view:stock.move:0 msgid "Serial Number" -msgstr "" +msgstr "Numéro de série" #. module: stock #: view:stock.invoice.onshipping:0 @@ -4132,6 +4290,10 @@ msgid "" " to be invoiced when you send or deliver goods.\n" " This installs the module stock_invoice_directly." msgstr "" +"Cela permet de lancer automatiquement l'assistant de facturation si la " +"livraison est\n" +" à facturer lorsque vous recevez ou livrez des marchandises.\n" +" Cela installe le module stock_invoice_directly." #. module: stock #: field:stock.location,chained_journal_id:0 @@ -4251,6 +4413,8 @@ msgstr "" #, python-format msgid "Please define stock input account for this product: \"%s\" (id: %d)." msgstr "" +"Veuillez définir le compte d'entrée en stock de cet article : \"%s\" (id. : " +"%d)." #. module: stock #: model:ir.actions.act_window,name:stock.action_reception_picking_move @@ -4280,7 +4444,7 @@ msgstr "" #: view:stock.return.picking:0 #: view:stock.split.into:0 msgid "or" -msgstr "" +msgstr "ou" #. module: stock #: selection:stock.picking,invoice_state:0 @@ -4323,7 +4487,7 @@ msgstr "_Appliquer" #: field:stock.picking.in,max_date:0 #: field:stock.picking.out,max_date:0 msgid "Max. Expected Date" -msgstr "Date maximale attendue" +msgstr "Date prévue maxi" #. module: stock #: field:stock.picking,auto_picking:0 @@ -4335,7 +4499,7 @@ msgstr "Manutention auto" #. module: stock #: report:stock.picking.list:0 msgid "Customer Address :" -msgstr "" +msgstr "Adresse client :" #. module: stock #: field:stock.location,chained_auto_packing:0 @@ -4392,7 +4556,7 @@ msgstr "Voulez vous fusionnez ces inventaires" #. module: stock #: view:stock.picking.out:0 msgid "Date of Delivery" -msgstr "" +msgstr "Date de livraison" #. module: stock #: field:stock.location,posy:0 @@ -4406,6 +4570,8 @@ msgid "" "Please define inventory valuation account on the product category: \"%s\" " "(id: %d)" msgstr "" +"Veuillez définir le compte de valorisation de stock de cette catégorie " +"d'articles : \"%s\" (id. : %d)" #. module: stock #: model:ir.model,name:stock.model_stock_production_lot_revision @@ -4417,6 +4583,7 @@ msgstr "" #, python-format msgid "Specify valuation Account for Product Category: %s." msgstr "" +"Indiquez le compte de valorisation de cette catégorie d'articles : %s." #. module: stock #: help:stock.config.settings,module_claim_from_delivery:0 @@ -4429,7 +4596,7 @@ msgstr "" #: code:addons/stock/wizard/stock_return_picking.py:205 #, python-format msgid "Please specify at least one non-zero quantity." -msgstr "" +msgstr "Merci d'indiquer au moins une quantité non nulle." #. module: stock #: field:stock.fill.inventory,set_stock_zero:0 @@ -4439,7 +4606,7 @@ msgstr "Mettre à zéro" #. module: stock #: model:res.groups,name:stock.group_stock_user msgid "User" -msgstr "" +msgstr "Utilisateur" #. module: stock #: field:stock.config.settings,module_stock_location:0 @@ -4494,6 +4661,9 @@ msgid "" "a serial number on product moves, you can get the upstream or downstream " "traceability of that product." msgstr "" +"Permet de gérer des articles en utilisant des numéros de série. En " +"choisissant le numéro de série sur les mouvements de stock, vous pourrez " +"obtenir la traçabilité ascendante et descendante de l'article." #. module: stock #: code:addons/stock/wizard/stock_fill_inventory.py:124 @@ -4501,6 +4671,8 @@ msgstr "" msgid "" "No product in this location. Please select a location in the product form." msgstr "" +"Aucun article dans cet emplacement. Veuillez choisir un emplacement dans le " +"formulaire produit." #. module: stock #: model:ir.actions.act_window,name:stock.act_product_stock_move_futur_open @@ -4528,7 +4700,7 @@ msgstr "Erreur" #. module: stock #: report:stock.inventory.move:0 msgid "Production Lot" -msgstr "Lot de Production" +msgstr "Lot de production" #. module: stock #: model:ir.ui.menu,name:stock.menu_traceability @@ -4632,7 +4804,7 @@ msgstr "" #. module: stock #: view:product.product:0 msgid "Delays" -msgstr "" +msgstr "Délais" #. module: stock #: report:stock.picking.list:0 @@ -4739,7 +4911,7 @@ msgstr "Type d'Emplacement Lié" #: help:stock.picking.in,min_date:0 #: help:stock.picking.out,min_date:0 msgid "Scheduled time for the shipment to be processed" -msgstr "" +msgstr "Heure prévue pour la livraison à traiter" #. module: stock #: selection:report.stock.inventory,location_type:0 diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 7198c89e286..8e4611dc5d0 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] @@ -2953,15 +2947,25 @@ class stock_picking_in(osv.osv): #override in order to redirect the check of acces rules on the stock.picking object return self.pool.get('stock.picking').check_access_rule(cr, uid, ids, operation, context=context) - def _workflow_trigger(self, cr, uid, ids, trigger, context=None): - #override in order to trigger the workflow of stock.picking at the end of create, write and unlink operation - #instead of it's own workflow (which is not existing) - return self.pool.get('stock.picking')._workflow_trigger(cr, uid, ids, trigger, context=context) + def create_workflow(self, cr, uid, ids, context=None): + # overridden in order to trigger the workflow of stock.picking at the end of create, + # write and unlink operation instead of its own workflow (which is not existing) + return self.pool.get('stock.picking').create_workflow(cr, uid, ids, context=context) - def _workflow_signal(self, cr, uid, ids, signal, context=None): - #override in order to fire the workflow signal on given stock.picking workflow instance - #instead of it's own workflow (which is not existing) - return self.pool.get('stock.picking')._workflow_signal(cr, uid, ids, signal, context=context) + def delete_workflow(self, cr, uid, ids, context=None): + # overridden in order to trigger the workflow of stock.picking at the end of create, + # write and unlink operation instead of its own workflow (which is not existing) + return self.pool.get('stock.picking').delete_workflow(cr, uid, ids, context=context) + + def step_workflow(self, cr, uid, ids, context=None): + # overridden in order to trigger the workflow of stock.picking at the end of create, + # write and unlink operation instead of its own workflow (which is not existing) + return self.pool.get('stock.picking').step_workflow(cr, uid, ids, context=context) + + def signal_workflow(self, cr, uid, ids, signal, context=None): + # overridden in order to fire the workflow signal on given stock.picking workflow instance + # instead of its own workflow (which is not existing) + return self.pool.get('stock.picking').signal_workflow(cr, uid, ids, signal, context=context) _columns = { 'backorder_id': fields.many2one('stock.picking.in', 'Back Order of', states={'done':[('readonly', True)], 'cancel':[('readonly',True)]}, help="If this shipment was split, then this field links to the shipment which contains the already processed part.", select=True), @@ -2998,15 +3002,25 @@ class stock_picking_out(osv.osv): #override in order to redirect the check of acces rules on the stock.picking object return self.pool.get('stock.picking').check_access_rule(cr, uid, ids, operation, context=context) - def _workflow_trigger(self, cr, uid, ids, trigger, context=None): - #override in order to trigger the workflow of stock.picking at the end of create, write and unlink operation - #instead of it's own workflow (which is not existing) - return self.pool.get('stock.picking')._workflow_trigger(cr, uid, ids, trigger, context=context) + def create_workflow(self, cr, uid, ids, context=None): + # overridden in order to trigger the workflow of stock.picking at the end of create, + # write and unlink operation instead of its own workflow (which is not existing) + return self.pool.get('stock.picking').create_workflow(cr, uid, ids, context=context) - def _workflow_signal(self, cr, uid, ids, signal, context=None): - #override in order to fire the workflow signal on given stock.picking workflow instance - #instead of it's own workflow (which is not existing) - return self.pool.get('stock.picking')._workflow_signal(cr, uid, ids, signal, context=context) + def delete_workflow(self, cr, uid, ids, context=None): + # overridden in order to trigger the workflow of stock.picking at the end of create, + # write and unlink operation instead of its own workflow (which is not existing) + return self.pool.get('stock.picking').delete_workflow(cr, uid, ids, context=context) + + def step_workflow(self, cr, uid, ids, context=None): + # overridden in order to trigger the workflow of stock.picking at the end of create, + # write and unlink operation instead of its own workflow (which is not existing) + return self.pool.get('stock.picking').step_workflow(cr, uid, ids, context=context) + + def signal_workflow(self, cr, uid, ids, signal, context=None): + # overridden in order to fire the workflow signal on given stock.picking workflow instance + # instead of its own workflow (which is not existing) + return self.pool.get('stock.picking').signal_workflow(cr, uid, ids, signal, context=context) _columns = { 'backorder_id': fields.many2one('stock.picking.out', 'Back Order of', states={'done':[('readonly', True)], 'cancel':[('readonly',True)]}, help="If this shipment was split, then this field links to the shipment which contains the already processed part.", select=True), 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 = { 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: diff --git a/addons/web_linkedin/web_linkedin.py b/addons/web_linkedin/web_linkedin.py index 277b4497ffc..62883840f2d 100644 --- a/addons/web_linkedin/web_linkedin.py +++ b/addons/web_linkedin/web_linkedin.py @@ -21,6 +21,7 @@ import base64 import urllib2 +from urlparse import urlparse, urlunparse import openerp from openerp.osv import fields, osv @@ -30,11 +31,12 @@ class Binary(openerp.addons.web.http.Controller): @openerp.addons.web.http.jsonrequest def url2binary(self, req, url): - if not url.startswith("http"): - raise Exception("Not allowed to load a file using this protocol") - if url.count("?") > 0 or url.count("&") > 0 or url.count("=") > 0: - raise Exception("Not allowed to use GET parameters") + """Used exclusively to load images from LinkedIn profiles, must not be used for anything else.""" req.session.assert_valid(force=True) + _scheme, _netloc, path, params, query, fragment = urlparse(url) + # media.linkedin.com is the master domain for LinkedIn media (replicated to CDNs), + # so forcing it should always work and prevents abusing this method to load arbitrary URLs + url = urlunparse(('http', 'media.linkedin.com', path, params, query, fragment)) bfile = urllib2.urlopen(url) return base64.b64encode(bfile.read())