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 833ed59e15b..7bccef6fb9c 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" +" 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 @@ -1029,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 @@ -1046,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 @@ -1060,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 @@ -1070,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 @@ -1102,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 @@ -1144,19 +1165,19 @@ 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 @@ -1168,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 @@ -1194,32 +1217,32 @@ 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 @@ -1233,6 +1256,7 @@ msgstr "Követés" 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 @@ -1242,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 @@ -1262,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 @@ -1274,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 @@ -1284,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 @@ -1292,24 +1322,25 @@ 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 @@ -1326,7 +1357,7 @@ 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 @@ -1339,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 @@ -1385,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 @@ -1397,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 @@ -1441,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 @@ -1452,19 +1487,21 @@ 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 @@ -1480,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 @@ -1496,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 @@ -1509,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 @@ -1527,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 @@ -1543,7 +1589,7 @@ 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 @@ -1557,12 +1603,12 @@ msgstr "Feladat" #: 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 @@ -1571,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 @@ -1582,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 @@ -1595,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 @@ -1619,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 @@ -1635,22 +1685,24 @@ 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 @@ -1670,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 @@ -1708,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 03ff875da8d..fe742e0d6c7 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -774,7 +774,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 c77ce6ab35d..7da04fe9fde 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 #---------------------------------------------------------- @@ -774,10 +773,8 @@ class mrp_production(osv.osv): new_parent_ids.append(final_product.id) 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.message_post(cr, uid, production_id, body=_("%s Produced") % self._description, context=context) + self.signal_button_produce_done(cr, uid, [production_id]) return True def _costs_generate(self, cr, uid, production): @@ -845,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 @@ -865,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): @@ -978,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): @@ -996,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/purchase/purchase.py b/addons/purchase/purchase.py index 0f929fbfe55..95335652f9b 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): @@ -572,26 +568,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): @@ -649,11 +643,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 @@ -664,7 +658,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): @@ -716,7 +710,6 @@ class purchase_order(osv.osv): """ #TOFIX: merged order line should be unlink - wf_service = netsvc.LocalService("workflow") def make_key(br, fields): list_key = [] for field in fields: @@ -803,8 +796,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 @@ -1171,8 +1164,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) @@ -1194,8 +1186,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) class account_invoice(osv.Model): 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/sale/sale.py b/addons/sale/sale.py index 96db67a7218..8700705f33f 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) class account_invoice(osv.Model): 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 097feb2c130..6b7f0db80ea 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: @@ -104,7 +103,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/stock.py b/addons/stock/stock.py index 86a462e74b6..1462b1835fc 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())