From 7d7fe62ca8147a8d6ebd323034a64d7cc076a0c8 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Fri, 25 Jan 2013 16:49:41 +0100 Subject: [PATCH 01/60] [IMP] procurement: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130125154941-8jbzke0diaqhf5j3 --- addons/procurement/schedulers.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py index 3cb34d6bdff..76b31cc6da3 100644 --- a/addons/procurement/schedulers.py +++ b/addons/procurement/schedulers.py @@ -62,8 +62,7 @@ class procurement_order(osv.osv): procurement_obj = self.pool.get('procurement.order') if not ids: ids = procurement_obj.search(cr, uid, [('state', '=', 'exception')], order="date_planned") - for id in ids: - wf_service.trg_validate(uid, 'procurement.order', id, 'button_restart', cr) + self.signal_button_restart(cr, uid, ids) if use_new_cursor: cr.commit() company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id @@ -78,7 +77,7 @@ class procurement_order(osv.osv): ids = procurement_obj.search(cr, uid, [('state', '=', 'confirmed'), ('procure_method', '=', 'make_to_order')], offset=offset, limit=500, order='priority, date_planned', context=context) for proc in procurement_obj.browse(cr, uid, ids, context=context): if maxdate >= proc.date_planned: - wf_service.trg_validate(uid, 'procurement.order', proc.id, 'button_check', cr) + self.signal_button_check(cr, uid, [proc.id]) else: offset += 1 report_later += 1 @@ -100,7 +99,7 @@ class procurement_order(osv.osv): ids = procurement_obj.search(cr, uid, [('state', '=', 'confirmed'), ('procure_method', '=', 'make_to_stock')], offset=offset) for proc in procurement_obj.browse(cr, uid, ids): if maxdate >= proc.date_planned: - wf_service.trg_validate(uid, 'procurement.order', proc.id, 'button_check', cr) + self.signal_button_check(cr, uid, [proc.id]) report_ids.append(proc.id) else: report_later += 1 @@ -178,8 +177,8 @@ class procurement_order(osv.osv): proc_id = proc_obj.create(cr, uid, self._prepare_automatic_op_procurement(cr, uid, product, warehouse, location_id, context=context), context=context) - wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr) - wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_check', cr) + self.signal_button_confirm(cr, uid, [proc_id]) + self.signal_button_check(cr, uid, [proc_id]) return True def _get_orderpoint_date_planned(self, cr, uid, orderpoint, start_date, context=None): @@ -254,7 +253,7 @@ class procurement_order(osv.osv): to_generate = qty for proc_data in procure_datas: if to_generate >= proc_data['product_qty']: - wf_service.trg_validate(uid, 'procurement.order', proc_data['id'], 'button_confirm', cr) + self.signal_button_confirm(cr, uid, [proc_data['id']]) procurement_obj.write(cr, uid, [proc_data['id']], {'origin': op.name}, context=context) to_generate -= proc_data['product_qty'] if not to_generate: @@ -265,10 +264,8 @@ class procurement_order(osv.osv): proc_id = procurement_obj.create(cr, uid, self._prepare_orderpoint_procurement(cr, uid, op, qty, context=context), context=context) - wf_service.trg_validate(uid, 'procurement.order', proc_id, - 'button_confirm', cr) - wf_service.trg_validate(uid, 'procurement.order', proc_id, - 'button_check', cr) + self.signal_button_confirm(cr, uid, [proc_id]) + self.signal_button_check(cr, uid, [proc_id]) orderpoint_obj.write(cr, uid, [op.id], {'procurement_id': proc_id}, context=context) offset += len(ids) @@ -279,6 +276,4 @@ class procurement_order(osv.osv): cr.close() return {} -procurement_order() - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From a2679597a0f3f3eaf6277e030ca2a9b44763f873 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Fri, 25 Jan 2013 17:53:55 +0100 Subject: [PATCH 02/60] [IMP] purchase: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130125165355-78o1utblskn0sa5e --- addons/purchase/purchase.py | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 799601acb64..bf3686d5a34 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -22,6 +22,7 @@ import time from datetime import datetime from dateutil.relativedelta import relativedelta +from operator import attrgetter from openerp.osv import fields, osv from openerp import netsvc @@ -260,9 +261,7 @@ class purchase_order(osv.osv): raise osv.except_osv(_('Invalid Action!'), _('In order to delete a purchase order, you must cancel it first.')) # automatically sending subflow.delete upon deletion - wf_service = netsvc.LocalService("workflow") - for id in unlink_ids: - wf_service.trg_validate(uid, 'purchase.order', id, 'purchase_cancel', cr) + self.signal_purchase_cancel(cr, uid, unlink_ids) return super(purchase_order, self).unlink(cr, uid, unlink_ids, context=context) @@ -439,8 +438,7 @@ class purchase_order(osv.osv): This function prints the request for quotation and mark it as sent, so that we can see more easily the next step of the workflow ''' assert len(ids) == 1, 'This option should only be used for a single id at a time' - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'purchase.order', ids[0], 'send_rfq', cr) + self.signal_send_rfq(cr, uid, ids) datas = { 'model': 'purchase.order', 'ids': ids, @@ -571,26 +569,24 @@ class purchase_order(osv.osv): return False def action_cancel(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") for purchase in self.browse(cr, uid, ids, context=context): for pick in purchase.picking_ids: if pick.state not in ('draft','cancel'): raise osv.except_osv( _('Unable to cancel this purchase order.'), _('First cancel all receptions related to this purchase order.')) - for pick in purchase.picking_ids: - wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_cancel', cr) + self.pool.get('stock.picking') \ + .signal_button_cancel(cr, uid, map(attrgetter('id'), purchase.picking_ids)) for inv in purchase.invoice_ids: if inv and inv.state not in ('cancel','draft'): raise osv.except_osv( _('Unable to cancel this purchase order.'), _('You must first cancel all receptions related to this purchase order.')) - if inv: - wf_service.trg_validate(uid, 'account.invoice', inv.id, 'invoice_cancel', cr) + self.pool.get('account.invoice') \ + .signal_invoice_cancel(cr, uid, map(attrgetter('id'), purchase.invoice_ids)) self.write(cr,uid,ids,{'state':'cancel'}) - for (id, name) in self.name_get(cr, uid, ids): - wf_service.trg_validate(uid, 'purchase.order', id, 'purchase_cancel', cr) + self.signal_purchase_cancel(cr, uid, ids) return True def _prepare_order_picking(self, cr, uid, order, context=None): @@ -648,11 +644,11 @@ class purchase_order(osv.osv): will be added. A new picking will be created if omitted. :return: list of IDs of pickings used/created for the given order lines (usually just one) """ + stock_picking = self.pool.get('stock.picking') if not picking_id: - picking_id = self.pool.get('stock.picking').create(cr, uid, self._prepare_order_picking(cr, uid, order, context=context)) + picking_id = stock_picking.create(cr, uid, self._prepare_order_picking(cr, uid, order, context=context)) todo_moves = [] stock_move = self.pool.get('stock.move') - wf_service = netsvc.LocalService("workflow") for order_line in order_lines: if not order_line.product_id: continue @@ -663,7 +659,7 @@ class purchase_order(osv.osv): todo_moves.append(move) stock_move.action_confirm(cr, uid, todo_moves) stock_move.force_assign(cr, uid, todo_moves) - wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) + stock_picking.signal_button_confirm(cr, uid, [picking_id]) return [picking_id] def action_picking_create(self, cr, uid, ids, context=None): @@ -714,7 +710,6 @@ class purchase_order(osv.osv): """ #TOFIX: merged order line should be unlink - wf_service = netsvc.LocalService("workflow") def make_key(br, fields): list_key = [] for field in fields: @@ -782,6 +777,7 @@ class purchase_order(osv.osv): allorders = [] orders_info = {} + wf_service = netsvc.LocalService("workflow") for order_key, (order_data, old_ids) in new_orders.iteritems(): # skip merges with only one order if len(old_ids) < 2: @@ -802,7 +798,7 @@ class purchase_order(osv.osv): # make triggers pointing to the old orders point to the new order for old_id in old_ids: wf_service.trg_redirect(uid, 'purchase.order', old_id, neworder_id, cr) - wf_service.trg_validate(uid, 'purchase.order', old_id, 'purchase_cancel', cr) + self.signal_purchase_cancel(cr, uid, [old_id]) # TODO Is it necessary to interleave the calls? return orders_info @@ -1169,8 +1165,7 @@ class mail_mail(osv.Model): def _postprocess_sent_message(self, cr, uid, mail, context=None): if mail.model == 'purchase.order': - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'purchase.order', mail.res_id, 'send_rfq', cr) + self.pool.get('purchase.order').signal_send_rfq(cr, uid, [mail.res_id]) return super(mail_mail, self)._postprocess_sent_message(cr, uid, mail=mail, context=context) @@ -1192,8 +1187,7 @@ class mail_compose_message(osv.Model): context = context or {} if context.get('default_model') == 'purchase.order' and context.get('default_res_id'): context = dict(context, mail_post_autofollow=True) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'purchase.order', context['default_res_id'], 'send_rfq', cr) + self.pool.get('purchase.order').signal_send_rfq(cr, uid, [context['default_res_id']]) return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 11632909ae3e6952d4f26469077819ad57134985 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Fri, 25 Jan 2013 22:17:51 +0100 Subject: [PATCH 03/60] [FIX] lunch: passing self in a super call. bzr revid: vmt@openerp.com-20130125211751-725w3trha283ypa2 --- addons/lunch/lunch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/lunch/lunch.py b/addons/lunch/lunch.py index 0f9033fce38..022eb5208eb 100644 --- a/addons/lunch/lunch.py +++ b/addons/lunch/lunch.py @@ -159,7 +159,7 @@ class lunch_order(osv.Model): def specific_function(cr, uid, ids, context=None): return self.add_preference(cr, uid, ids, pref_id, context=context) return specific_function - return super(lunch_order,self).__getattr__(self,attr) + return super(lunch_order, self).__getattr__(attr) def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False): """ From 494b2481e2ce798364eb1548b1e57d9e1e9c2d39 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 10:17:16 +0100 Subject: [PATCH 04/60] [IMP] purchase: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128091716-ni5zb1qp4sib58rm --- addons/purchase/test/process/rfq2order2done.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/purchase/test/process/rfq2order2done.yml b/addons/purchase/test/process/rfq2order2done.yml index 4bf55d61973..be68a8ca01e 100644 --- a/addons/purchase/test/process/rfq2order2done.yml +++ b/addons/purchase/test/process/rfq2order2done.yml @@ -62,8 +62,7 @@ import netsvc invoice_ids = [x.id for x in self.browse(cr, uid, ref("purchase_order_1")).invoice_ids] wf_service = netsvc.LocalService("workflow") - for invoice in invoice_ids: - wf_service.trg_validate(uid, 'account.invoice', invoice, 'invoice_open', cr) + self.pool.get('account.invoice').signal_invoice_open(cr, uid, invoice_ids) - I check that purchase order is invoiced. - From 86680d853b12bd4564ab7d0792eae7534bdbbd9f Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 10:29:30 +0100 Subject: [PATCH 05/60] [IMP] account_payment: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128092930-6lhgyprwirpt6y3z --- addons/account_payment/account_payment.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/account_payment/account_payment.py b/addons/account_payment/account_payment.py index d67db60e590..c57c83aa765 100644 --- a/addons/account_payment/account_payment.py +++ b/addons/account_payment/account_payment.py @@ -135,9 +135,8 @@ class payment_order(osv.osv): return True def set_done(self, cr, uid, ids, *args): - wf_service = netsvc.LocalService("workflow") self.write(cr, uid, ids, {'date_done': time.strftime('%Y-%m-%d')}) - wf_service.trg_validate(uid, 'payment.order', ids[0], 'done', cr) + self.signal_done(cr, uid, [ids[0]]) return True def copy(self, cr, uid, id, default=None, context=None): From f6fd7368a283439f3d7ca8110acd49066dcac18b Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 11:00:38 +0100 Subject: [PATCH 06/60] [IMP] procurement: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128100038-6dyftmdm8tfn6j5k --- addons/procurement/procurement.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index 50efe0f500e..21c260b99cd 100644 --- a/addons/procurement/procurement.py +++ b/addons/procurement/procurement.py @@ -19,10 +19,12 @@ # ############################################################################## +from operator import attrgetter +import time + from openerp.osv import fields, osv from openerp.tools.translate import _ from openerp import netsvc -import time import openerp.addons.decimal_precision as dp # Procurement @@ -42,7 +44,6 @@ class mrp_property_group(osv.osv): 'name': fields.char('Property Group', size=64, required=True), 'description': fields.text('Description'), } -mrp_property_group() class mrp_property(osv.osv): """ @@ -59,7 +60,6 @@ class mrp_property(osv.osv): _defaults = { 'composition': lambda *a: 'min', } -mrp_property() class StockMove(osv.osv): _inherit = 'stock.move' @@ -72,7 +72,6 @@ class StockMove(osv.osv): default['procurements'] = [] return super(StockMove, self).copy(cr, uid, id, default, context=context) -StockMove() class procurement_order(osv.osv): """ @@ -456,15 +455,13 @@ class procurement_order(osv.osv): class StockPicking(osv.osv): _inherit = 'stock.picking' - def test_finished(self, cursor, user, ids): + def test_finished(self, cr, uid, ids): wf_service = netsvc.LocalService("workflow") - res = super(StockPicking, self).test_finished(cursor, user, ids) - for picking in self.browse(cursor, user, ids): + res = super(StockPicking, self).test_finished(cr, uid, ids) + for picking in self.browse(cr, uid, ids): for move in picking.move_lines: if move.state == 'done' and move.procurements: - for procurement in move.procurements: - wf_service.trg_validate(user, 'procurement.order', - procurement.id, 'button_check', cursor) + self.pool.get('procurement.order').signal_button_check(cr, uid, map(attrgetter('id'), move.procurements)) return res class stock_warehouse_orderpoint(osv.osv): From 99664df35a52019dab329b993801ee1642b0704b Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 12:39:54 +0100 Subject: [PATCH 07/60] [IMP] stock_location: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128113954-i60z7w4mygprra40 --- addons/stock_location/procurement_pull.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/addons/stock_location/procurement_pull.py b/addons/stock_location/procurement_pull.py index eb5235d35ba..9f5dfb77375 100644 --- a/addons/stock_location/procurement_pull.py +++ b/addons/stock_location/procurement_pull.py @@ -49,7 +49,6 @@ class procurement_order(osv.osv): proc_obj = self.pool.get('procurement.order') move_obj = self.pool.get('stock.move') picking_obj=self.pool.get('stock.picking') - wf_service = netsvc.LocalService("workflow") for proc in proc_obj.browse(cr, uid, ids, context=context): line = None for line in proc.product_id.flow_pull_ids: @@ -109,9 +108,8 @@ class procurement_order(osv.osv): 'procure_method': line.procure_method, 'move_id': move_id, }) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) - wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr) + self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id]) + self.signal_button_confirm(cr, uid, [proc_id]) if proc.move_id: move_obj.write(cr, uid, [proc.move_id.id], {'location_id':proc.location_id.id}) @@ -119,9 +117,8 @@ class procurement_order(osv.osv): self.write(cr, uid, [proc.id], {'state':'running', 'message': msg}) self.message_post(cr, uid, [proc.id], body=msg, context=context) # trigger direct processing (the new procurement shares the same planned date as the original one, which is already being processed) - wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_check', cr) + self.signal_button_check(cr, uid, [proc_id]) # TODO is it necessary to interleave the calls? return False -procurement_order() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 781e6737acc114b7a76d711aa7e31ba78dd401b3 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 13:01:47 +0100 Subject: [PATCH 08/60] [IMP] account_followup: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128120147-oj7pvl2015x4764v --- addons/account_followup/tests/test_account_followup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/account_followup/tests/test_account_followup.py b/addons/account_followup/tests/test_account_followup.py index 14f458de98d..8ddf3f82288 100644 --- a/addons/account_followup/tests/test_account_followup.py +++ b/addons/account_followup/tests/test_account_followup.py @@ -44,8 +44,7 @@ class TestAccountFollowup(TransactionCase): 'quantity': 5, 'price_unit':200 })]}) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.invoice', self.invoice_id, 'invoice_open', cr) + self.registry('account.invoice').signal_invoice_open(cr, uid, [self.invoice_id]) self.voucher = self.registry("account.voucher") From 8d50446d278643bf645107744a6ba12108c9eea1 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 15:16:23 +0100 Subject: [PATCH 09/60] [IMP] hr_holidays: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128141623-4rxcgqx7t33yydbp --- addons/hr_holidays/hr_holidays.py | 21 +++++++++------------ addons/hr_holidays/test/test_hr_holiday.yml | 3 +-- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index c7d7867911d..234897809e1 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -24,7 +24,7 @@ import datetime import time from itertools import groupby -from operator import itemgetter +from operator import attrgetter, itemgetter import math from openerp import netsvc @@ -370,11 +370,11 @@ class hr_holidays(osv.osv): 'employee_id': emp.id } leave_ids.append(self.create(cr, uid, vals, context=None)) - wf_service = netsvc.LocalService("workflow") for leave_id in leave_ids: - wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'confirm', cr) - wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'validate', cr) - wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'second_validate', cr) + # TODO is it necessary to interleave the calls? + self.signal_confirm(cr, uid, [leave_id]) + self.signal_validate(cr, uid, [leave_id]) + self.signal_second_validate(cr, uid, [leave_id]) return True def holidays_confirm(self, cr, uid, ids, context=None): @@ -404,9 +404,7 @@ class hr_holidays(osv.osv): meeting_obj.unlink(cr, uid, [record.meeting_id.id]) # If a category that created several holidays, cancel all related - wf_service = netsvc.LocalService("workflow") - for request in record.linked_request_ids or []: - wf_service.trg_validate(uid, 'hr.holidays', request.id, 'refuse', cr) + self.signal_refuse(cr, uid, map(attrgetter('id'), record.linked_request_ids or [])) self._remove_resource_leave(cr, uid, ids, context=context) return True @@ -478,10 +476,9 @@ class hr_employee(osv.osv): leave_id = holiday_obj.create(cr, uid, {'name': _('Leave Request for %s') % employee.name, 'employee_id': employee.id, 'holiday_status_id': status_id, 'type': 'remove', 'holiday_type': 'employee', 'number_of_days_temp': abs(diff)}, context=context) else: return False - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'confirm', cr) - wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'validate', cr) - wf_service.trg_validate(uid, 'hr.holidays', leave_id, 'second_validate', cr) + holidays_obj.signal_confirm(cr, uid, [leave_id]) + holidays_obj.signal_validate(cr, uid, [leave_id]) + holidays_obj.signal_second_validate(cr, uid, [leave_id]) return True def _get_remaining_days(self, cr, uid, ids, name, args, context=None): diff --git a/addons/hr_holidays/test/test_hr_holiday.yml b/addons/hr_holidays/test/test_hr_holiday.yml index f0e85d552cb..e78c2fd08bc 100644 --- a/addons/hr_holidays/test/test_hr_holiday.yml +++ b/addons/hr_holidays/test/test_hr_holiday.yml @@ -19,9 +19,8 @@ - !python {model: hr.holidays}: | import netsvc - wf_service = netsvc.LocalService("workflow") self.set_to_draft(cr, uid, [ref('hr_holidays_employee1_cl')]) - wf_service.trg_validate(uid, 'hr.holidays', ref('hr_holidays_employee1_cl'), 'confirm', cr) + self.signal_confirm(cr, uid, [ref('hr_holidays_employee1_cl')]) - I validate the holiday request by clicking on "To Approve" button. - From ca919bec2c979a70e615f5023b6241b36b2c0ba1 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 15:51:43 +0100 Subject: [PATCH 10/60] [IMP] account_voucher: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128145143-w68s6z1kuulqk6ig --- addons/account_voucher/account_voucher.py | 8 ++------ addons/account_voucher/test/case1_usd_usd.yml | 8 ++------ addons/account_voucher/test/case2_suppl_usd_eur.yml | 8 ++------ .../account_voucher/test/case2_usd_eur_debtor_in_eur.yml | 6 ++---- .../account_voucher/test/case2_usd_eur_debtor_in_usd.yml | 8 ++------ addons/account_voucher/test/case3_eur_eur.yml | 8 ++------ addons/account_voucher/test/case4_cad_chf.yml | 3 +-- addons/account_voucher/test/sales_payment.yml | 3 +-- addons/account_voucher/test/sales_receipt.yml | 3 +-- 9 files changed, 15 insertions(+), 40 deletions(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index de9cebdd09b..2046d787ef3 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -820,10 +820,7 @@ class account_voucher(osv.osv): return vals def button_proforma_voucher(self, cr, uid, ids, context=None): - context = context or {} - wf_service = netsvc.LocalService("workflow") - for vid in ids: - wf_service.trg_validate(uid, 'account.voucher', vid, 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, ids) return {'type': 'ir.actions.act_window_close'} def proforma_voucher(self, cr, uid, ids, context=None): @@ -1506,7 +1503,6 @@ class account_bank_statement(osv.osv): def create_move_from_st_line(self, cr, uid, st_line_id, company_currency_id, next_number, context=None): voucher_obj = self.pool.get('account.voucher') - wf_service = netsvc.LocalService("workflow") move_line_obj = self.pool.get('account.move.line') bank_st_line_obj = self.pool.get('account.bank.statement.line') st_line = bank_st_line_obj.browse(cr, uid, st_line_id, context=context) @@ -1514,7 +1510,7 @@ class account_bank_statement(osv.osv): voucher_obj.write(cr, uid, [st_line.voucher_id.id], {'number': next_number}, context=context) if st_line.voucher_id.state == 'cancel': voucher_obj.action_cancel_draft(cr, uid, [st_line.voucher_id.id], context=context) - wf_service.trg_validate(uid, 'account.voucher', st_line.voucher_id.id, 'proforma_voucher', cr) + voucher_obj.signal_proforma_voucher(cr, uid, [st_line.voucher_id.id]) v = voucher_obj.browse(cr, uid, st_line.voucher_id.id, context=context) bank_st_line_obj.write(cr, uid, [st_line_id], { diff --git a/addons/account_voucher/test/case1_usd_usd.yml b/addons/account_voucher/test/case1_usd_usd.yml index 0f4c2058fc7..fd1945691ba 100644 --- a/addons/account_voucher/test/case1_usd_usd.yml +++ b/addons/account_voucher/test/case1_usd_usd.yml @@ -182,10 +182,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 1 USD/USD'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my first voucher is valid - @@ -279,10 +277,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 1'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my second voucher is valid - diff --git a/addons/account_voucher/test/case2_suppl_usd_eur.yml b/addons/account_voucher/test/case2_suppl_usd_eur.yml index b32228032d3..91fb99f6360 100644 --- a/addons/account_voucher/test/case2_suppl_usd_eur.yml +++ b/addons/account_voucher/test/case2_suppl_usd_eur.yml @@ -161,10 +161,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my voucher is valid - @@ -266,10 +264,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that my voucher state is posted - diff --git a/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml b/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml index 275e4c58835..2afdc8ad31b 100644 --- a/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml +++ b/addons/account_voucher/test/case2_usd_eur_debtor_in_eur.yml @@ -181,8 +181,7 @@ !python {model: account.voucher}: | import netsvc voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my voucher is valid - @@ -256,8 +255,7 @@ !python {model: account.voucher}: | import netsvc voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR EUR'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that my voucher state is posted - diff --git a/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml b/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml index 667882e3a32..b049fc7692e 100644 --- a/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml +++ b/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml @@ -179,10 +179,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 2 USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my voucher is valid - @@ -269,10 +267,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 2 SUPPL USD/EUR DR USD'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that my voucher state is posted - diff --git a/addons/account_voucher/test/case3_eur_eur.yml b/addons/account_voucher/test/case3_eur_eur.yml index f2f9461c31e..d0b18a5231b 100644 --- a/addons/account_voucher/test/case3_eur_eur.yml +++ b/addons/account_voucher/test/case3_eur_eur.yml @@ -141,10 +141,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 3'),('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my first voucher is valid - @@ -231,10 +229,8 @@ I confirm the voucher - !python {model: account.voucher}: | - import netsvc voucher = self.search(cr, uid, [('name', '=', 'Second payment: Case 3'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my second voucher is valid - diff --git a/addons/account_voucher/test/case4_cad_chf.yml b/addons/account_voucher/test/case4_cad_chf.yml index bc33e387a85..e8fe4c8cf9b 100644 --- a/addons/account_voucher/test/case4_cad_chf.yml +++ b/addons/account_voucher/test/case4_cad_chf.yml @@ -143,8 +143,7 @@ !python {model: account.voucher}: | import netsvc voucher = self.search(cr, uid, [('name', '=', 'First payment: Case 4'), ('partner_id', '=', ref('base.res_partner_19'))]) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, voucher) - I check that the move of my voucher is valid - diff --git a/addons/account_voucher/test/sales_payment.yml b/addons/account_voucher/test/sales_payment.yml index b71e42add0b..e7ed61c2cb2 100644 --- a/addons/account_voucher/test/sales_payment.yml +++ b/addons/account_voucher/test/sales_payment.yml @@ -61,8 +61,7 @@ id = self.create(cr, uid, vals) voucher_id = self.browse(cr, uid, id) assert (voucher_id.state=='draft'), "Voucher is not in draft state" - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher_id.id, 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, [voucher_id.id]) - Finally i will Confirm the state of the invoice is paid diff --git a/addons/account_voucher/test/sales_receipt.yml b/addons/account_voucher/test/sales_receipt.yml index cf4bc5c46d3..af10777d98a 100644 --- a/addons/account_voucher/test/sales_receipt.yml +++ b/addons/account_voucher/test/sales_receipt.yml @@ -65,8 +65,7 @@ id = self.create(cr, uid, vals) voucher_id = self.browse(cr, uid, id) assert (voucher_id.state=='draft'), "Voucher is not in draft state" - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.voucher', voucher_id.id, 'proforma_voucher', cr) + self.signal_proforma_voucher(cr, uid, [voucher_id.id]) - I check that move lines are reconciled meaning voucher is paid - From 752649aa77a350b60e9cad39436f7c90b2b34652 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 16:29:16 +0100 Subject: [PATCH 11/60] [IMP] l10n_in_hr_payroll: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128152916-kt23l68420hkg49y --- addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py index 76fc1247de6..da98bbe681a 100644 --- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py @@ -198,8 +198,9 @@ class hr_payslip_run(osv.osv): advice_id = advice_pool.create(cr, uid, advice_data, context=context) slip_ids = [] for slip_id in run.slip_ids: - wf_service.trg_validate(uid, 'hr.payslip', slip_id.id, 'hr_verify_sheet', cr) - wf_service.trg_validate(uid, 'hr.payslip', slip_id.id, 'process_sheet', cr) + # TODO is it necessary to interleave the calls ? + payslip_pool.signal_hr_verify_sheet(cr, uid, [slip_id.id]) + payslip_pool.signal_process_sheet(cr, uid, [slip_id.id]) slip_ids.append(slip_id.id) for slip in payslip_pool.browse(cr, uid, slip_ids, context=context): From 48a371d2b2b31544ed39b567b90c87a2da4ba9d1 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 16:29:29 +0100 Subject: [PATCH 12/60] [IMP] stock: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128152929-6rpoaccy5huw8kdq --- addons/stock/stock.py | 22 ++++++++------------- addons/stock/wizard/stock_return_picking.py | 3 +-- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 7198c89e286..2d351d9302e 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -759,10 +759,9 @@ class stock_picking(osv.osv): """ Changes state of picking to available if all moves are confirmed. @return: True """ - wf_service = netsvc.LocalService("workflow") for pick in self.browse(cr, uid, ids): if pick.state == 'draft': - wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_confirm', cr) + self.signal_button_confirm(cr, uid, [pick.id]) move_ids = [x.id for x in pick.move_lines if x.state == 'confirmed'] if not move_ids: raise osv.except_osv(_('Warning!'),_('Not enough stock, unable to reserve the products.')) @@ -784,12 +783,10 @@ class stock_picking(osv.osv): """ Confirms picking directly from draft state. @return: True """ - wf_service = netsvc.LocalService("workflow") for pick in self.browse(cr, uid, ids): if not pick.move_lines: raise osv.except_osv(_('Error!'),_('You cannot process picking without stock moves.')) - wf_service.trg_validate(uid, 'stock.picking', pick.id, - 'button_confirm', cr) + self.signal_button_confirm(cr, uid, [pick.id]) return True def draft_validate(self, cr, uid, ids, context=None): @@ -1345,18 +1342,18 @@ class stock_picking(osv.osv): # At first we confirm the new picking (if necessary) if new_picking: - wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr) + self.signal_button_confirm(cr, uid, [new_picking]) # Then we finish the good picking self.write(cr, uid, [pick.id], {'backorder_id': new_picking}) self.action_move(cr, uid, [new_picking], context=context) - wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_done', cr) + self.signal_button_done(cr, uid, [new_picking]) wf_service.trg_write(uid, 'stock.picking', pick.id, cr) delivered_pack_id = new_picking back_order_name = self.browse(cr, uid, delivered_pack_id, context=context).name self.message_post(cr, uid, ids, body=_("Back order %s has been created.") % (back_order_name), context=context) else: self.action_move(cr, uid, [pick.id], context=context) - wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_done', cr) + self.signal_button_done(cr, uid, [pick.id]) delivered_pack_id = pick.id delivered_pack = self.browse(cr, uid, delivered_pack_id, context=context) @@ -2037,7 +2034,6 @@ class stock_move(osv.osv): res_obj = self.pool.get('res.company') location_obj = self.pool.get('stock.location') move_obj = self.pool.get('stock.move') - wf_service = netsvc.LocalService("workflow") new_moves = [] if context is None: context = {} @@ -2073,7 +2069,7 @@ class stock_move(osv.osv): }) new_moves.append(self.browse(cr, uid, [new_id])[0]) if pickid: - wf_service.trg_validate(uid, 'stock.picking', pickid, 'button_confirm', cr) + self.signal_button_confirm(cr, uid, [pickid]) if new_moves: new_moves += self.create_chained_picking(cr, uid, new_moves, context) return new_moves @@ -2195,6 +2191,7 @@ class stock_move(osv.osv): return True if context is None: context = {} + wf_service = netsvc.LocalService("workflow") pickings = set() for move in self.browse(cr, uid, ids, context=context): if move.state in ('confirmed', 'waiting', 'assigned', 'draft'): @@ -2203,7 +2200,6 @@ class stock_move(osv.osv): if move.move_dest_id and move.move_dest_id.state == 'waiting': self.write(cr, uid, [move.move_dest_id.id], {'state': 'assigned'}) if context.get('call_unlink',False) and move.move_dest_id.picking_id: - wf_service = netsvc.LocalService("workflow") wf_service.trg_write(uid, 'stock.picking', move.move_dest_id.picking_id.id, cr) self.write(cr, uid, ids, {'state': 'cancel', 'move_dest_id': False}) if not context.get('call_unlink',False): @@ -2211,7 +2207,6 @@ class stock_move(osv.osv): if all(move.state == 'cancel' for move in pick.move_lines): self.pool.get('stock.picking').write(cr, uid, [pick.id], {'state': 'cancel'}) - wf_service = netsvc.LocalService("workflow") for id in ids: wf_service.trg_trigger(uid, 'stock.move', id, cr) return True @@ -2633,7 +2628,6 @@ class stock_move(osv.osv): product_obj = self.pool.get('product.product') currency_obj = self.pool.get('res.currency') uom_obj = self.pool.get('product.uom') - wf_service = netsvc.LocalService("workflow") if context is None: context = {} @@ -2734,7 +2728,7 @@ class stock_move(osv.osv): res = cr.fetchall() if len(res) == len(move.picking_id.move_lines): picking_obj.action_move(cr, uid, [move.picking_id.id]) - wf_service.trg_validate(uid, 'stock.picking', move.picking_id.id, 'button_done', cr) + picking_obj.signal_button_done(cr, uid, [move.picking_id.id]) return [move.id for move in complete] diff --git a/addons/stock/wizard/stock_return_picking.py b/addons/stock/wizard/stock_return_picking.py index 7c6f0655e7a..bc149f86176 100644 --- a/addons/stock/wizard/stock_return_picking.py +++ b/addons/stock/wizard/stock_return_picking.py @@ -151,7 +151,6 @@ class stock_return_picking(osv.osv_memory): data_obj = self.pool.get('stock.return.picking.memory') act_obj = self.pool.get('ir.actions.act_window') model_obj = self.pool.get('ir.model.data') - wf_service = netsvc.LocalService("workflow") pick = pick_obj.browse(cr, uid, record_id, context=context) data = self.read(cr, uid, ids[0], context=context) date_cur = time.strftime('%Y-%m-%d %H:%M:%S') @@ -206,7 +205,7 @@ class stock_return_picking(osv.osv_memory): if set_invoice_state_to_none: pick_obj.write(cr, uid, [pick.id], {'invoice_state':'none'}, context=context) - wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr) + pick_obj.signal_button_confirm(cr, uid, [new_picking]) pick_obj.force_assign(cr, uid, [new_picking], context) # Update view id in context, lp:702939 model_list = { From 45ba35783f556c851e1a6791ea79f309ff43d98c Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 28 Jan 2013 17:34:03 +0100 Subject: [PATCH 13/60] [IMP] mrp_operations: use the new signal_xxx methods instead of trg_validate. bzr revid: vmt@openerp.com-20130128163403-dmbb0a1y0ejbt66t --- addons/mrp_operations/mrp_operations.py | 46 +++++++++---------- .../test/workcenter_operations.yml | 32 ++++--------- 2 files changed, 30 insertions(+), 48 deletions(-) diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py index 1ce60946f6c..a60b348559c 100644 --- a/addons/mrp_operations/mrp_operations.py +++ b/addons/mrp_operations/mrp_operations.py @@ -118,16 +118,15 @@ class mrp_production_workcenter_line(osv.osv): @param action: Action to perform. @return: Nothing """ - wf_service = netsvc.LocalService("workflow") prod_obj_pool = self.pool.get('mrp.production') oper_obj = self.browse(cr, uid, ids)[0] prod_obj = oper_obj.production_id if action == 'start': if prod_obj.state =='confirmed': prod_obj_pool.force_production(cr, uid, [prod_obj.id]) - wf_service.trg_validate(uid, 'mrp.production', prod_obj.id, 'button_produce', cr) + prod_obj_pool.signal_button_produce(cr, uid, [prod_obj.id]) elif prod_obj.state =='ready': - wf_service.trg_validate(uid, 'mrp.production', prod_obj.id, 'button_produce', cr) + prod_obj_pool.signal_button_produce(cr, uid, [prod_obj.id]) elif prod_obj.state =='in_production': return else: @@ -143,7 +142,7 @@ class mrp_production_workcenter_line(osv.osv): for production in prod_obj_pool.browse(cr, uid, [prod_obj.id], context= None): if production.move_lines or production.move_created_ids: prod_obj_pool.action_produce(cr,uid, production.id, production.product_qty, 'consume_produce', context = None) - wf_service.trg_validate(uid, 'mrp.production', oper_obj.production_id.id, 'button_produce_done', cr) + prod_obj_pool.signal_button_produce_done(cr, uid, [oper_obj.production_id.id]) return def write(self, cr, uid, ids, vals, context=None, update=True): @@ -228,23 +227,21 @@ class mrp_production(osv.osv): @return: Super method """ obj = self.browse(cr, uid, ids)[0] - wf_service = netsvc.LocalService("workflow") + workcenter_pool = self.pool.get('mrp.production.workcenter.line') for workcenter_line in obj.workcenter_lines: if workcenter_line.state == 'draft': - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_start_working', cr) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_done', cr) + workcenter_pool.signal_button_start_working(cr, uid, [workcenter_line.id]) + workcenter_pool.signal_button_done(cr, uid, [workcenter_line.id]) return super(mrp_production,self).action_production_end(cr, uid, ids) def action_in_production(self, cr, uid, ids): """ Changes state to In Production and writes starting date. @return: True """ - obj = self.browse(cr, uid, ids)[0] workcenter_pool = self.pool.get('mrp.production.workcenter.line') - wf_service = netsvc.LocalService("workflow") for prod in self.browse(cr, uid, ids): if prod.workcenter_lines: - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', prod.workcenter_lines[0].id, 'button_start_working', cr) + workcenter_pool.signal_button_start_working(cr, uid, [prod.workcenter_lines[0].id]) return super(mrp_production,self).action_in_production(cr, uid, ids) def action_cancel(self, cr, uid, ids, context=None): @@ -252,9 +249,8 @@ class mrp_production(osv.osv): @return: Super method """ obj = self.browse(cr, uid, ids,context=context)[0] - wf_service = netsvc.LocalService("workflow") for workcenter_line in obj.workcenter_lines: - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_cancel', cr) + workcenter_pool.signal_button_cancel(cr, uid, [workcenter_line.id]) return super(mrp_production,self).action_cancel(cr,uid,ids,context=context) def _compute_planned_workcenter(self, cr, uid, ids, context=None, mini=False): @@ -503,35 +499,35 @@ class mrp_operations_operation(osv.osv): return super(mrp_operations_operation, self).write(cr, uid, ids, vals, context=context) def create(self, cr, uid, vals, context=None): + workcenter_pool = self.pool.get('mrp.production.workcenter.line') wf_service = netsvc.LocalService('workflow') code_ids=self.pool.get('mrp_operations.operation.code').search(cr,uid,[('id','=',vals['code_id'])]) code=self.pool.get('mrp_operations.operation.code').browse(cr, uid, code_ids, context=context)[0] - wc_op_id=self.pool.get('mrp.production.workcenter.line').search(cr,uid,[('workcenter_id','=',vals['workcenter_id']),('production_id','=',vals['production_id'])]) + wc_op_id=workcenter_pool.search(cr,uid,[('workcenter_id','=',vals['workcenter_id']),('production_id','=',vals['production_id'])]) if code.start_stop in ('start','done','pause','cancel','resume'): if not wc_op_id: production_obj=self.pool.get('mrp.production').browse(cr, uid, vals['production_id'], context=context) - wc_op_id.append(self.pool.get('mrp.production.workcenter.line').create(cr,uid,{'production_id':vals['production_id'],'name':production_obj.product_id.name,'workcenter_id':vals['workcenter_id']})) + wc_op_id.append(workcenter_pool.create(cr,uid,{'production_id':vals['production_id'],'name':production_obj.product_id.name,'workcenter_id':vals['workcenter_id']})) if code.start_stop=='start': - self.pool.get('mrp.production.workcenter.line').action_start_working(cr,uid,wc_op_id) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_start_working', cr) - + workcenter_pool.action_start_working(cr,uid,wc_op_id) + workcenter_pool.signal_button_start_working(cr, uid, [wc_op_id[0]]) if code.start_stop=='done': - self.pool.get('mrp.production.workcenter.line').action_done(cr,uid,wc_op_id) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_done', cr) + workcenter_pool.action_done(cr,uid,wc_op_id) + workcenter_pool.signal_button_done(cr, uid, [wc_op_id[0]]) self.pool.get('mrp.production').write(cr,uid,vals['production_id'],{'date_finished':datetime.now().strftime('%Y-%m-%d %H:%M:%S')}) if code.start_stop=='pause': - self.pool.get('mrp.production.workcenter.line').action_pause(cr,uid,wc_op_id) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_pause', cr) + workcenter_pool.action_pause(cr,uid,wc_op_id) + workcenter_pool.signal_button_pause(cr, uid, [wc_op_id[0]]) if code.start_stop=='resume': - self.pool.get('mrp.production.workcenter.line').action_resume(cr,uid,wc_op_id) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_resume', cr) + workcenter_pool.action_resume(cr,uid,wc_op_id) + workcenter_pool.signal_button_resume(cr, uid, [wc_op_id[0]]) if code.start_stop=='cancel': - self.pool.get('mrp.production.workcenter.line').action_cancel(cr,uid,wc_op_id) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_cancel', cr) + workcenter_pool.action_cancel(cr,uid,wc_op_id) + workcenter_pool.signal_button_cancel(cr, uid, [wc_op_id[0]]) if not self.check_operation(cr, uid, vals): return diff --git a/addons/mrp_operations/test/workcenter_operations.yml b/addons/mrp_operations/test/workcenter_operations.yml index c1449657967..4754bb463ff 100644 --- a/addons/mrp_operations/test/workcenter_operations.yml +++ b/addons/mrp_operations/test/workcenter_operations.yml @@ -39,62 +39,48 @@ Production start on first work center, so I start work operation on first work center. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_start_working', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [order.workcenter_lines[0].id]) - Now I pause first work operation due to technical fault of work center. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_pause', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_pause(cr, uid, [order.workcenter_lines[0].id]) - I resume first work operation. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_resume', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_resume(cr, uid, [order.workcenter_lines[0].id]) - I cancel first work operation. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_cancel', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_cancel(cr, uid, [order.workcenter_lines[0].id]) - I reset first work operation and start after resolving techninal fault of work center. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_draft', cr) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_start_working', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_draft(cr, uid, [order.workcenter_lines[0].id]) + self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [order.workcenter_lines[0].id]) - I close first work operation as this work center completed its process. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', order.workcenter_lines[0].id, 'button_done', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_done(cr, uid, [order.workcenter_lines[0].id]) - Now I close other operations one by one which are in start state. - !python {model: mrp.production}: | - import netsvc order = self.browse(cr, uid, ref("mrp.mrp_production_1"), context=context) - wf_service = netsvc.LocalService("workflow") for work_line in order.workcenter_lines[1:]: - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', work_line.id, 'button_start_working', cr) - wf_service.trg_validate(uid, 'mrp.production.workcenter.line', work_line.id, 'button_done', cr) + self.pool.get('mrp.production.workcenter.line').signal_button_start_working(cr, uid, [work_line.id]) + self.pool.get('mrp.production.workcenter.line').signal_button_done(cr, uid, [work_line.id]) - I check that the production order is now done. From 830acb128d8451bebb48c7ab14367d7488a12d57 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Tue, 29 Jan 2013 13:28:08 +0100 Subject: [PATCH 14/60] [IMP] purchase: use the new ORM methods create_workflow, delete_workflow, redirect_workflow. bzr revid: vmt@openerp.com-20130129122808-etp3ytphzn2cxnr1 --- addons/purchase/purchase.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index bf3686d5a34..a45da4a2d61 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -487,8 +487,8 @@ class purchase_order(osv.osv): wf_service = netsvc.LocalService("workflow") for p_id in ids: # Deleting the existing instance of workflow for PO - wf_service.trg_delete(uid, 'purchase.order', p_id, cr) - wf_service.trg_create(uid, 'purchase.order', p_id, cr) + self.delete_workflow(cr, uid, [p_id]) # TODO is it necessary to interleave the calls? + self.create_workflow(cr, uid, [p_id]) return True def action_invoice_create(self, cr, uid, ids, context=None): @@ -797,7 +797,7 @@ class purchase_order(osv.osv): # make triggers pointing to the old orders point to the new order for old_id in old_ids: - wf_service.trg_redirect(uid, 'purchase.order', old_id, neworder_id, cr) + self.redirect_workflow(cr, uid, [(old_id, neworder_id)]) self.signal_purchase_cancel(cr, uid, [old_id]) # TODO Is it necessary to interleave the calls? return orders_info From 02a2c8574d101354899ca139221327a36e54a4a1 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Wed, 30 Jan 2013 15:29:03 +0530 Subject: [PATCH 15/60] [IMP] hr_holidays:use the new ORM methods create_workflow, delete_workflow, redirect_workflow. bzr revid: cha@tinyerp.com-20130130095903-6exhtm6uruk0ek30 --- addons/hr_holidays/hr_holidays.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 234897809e1..ce30951f7a9 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -304,10 +304,9 @@ class hr_holidays(osv.osv): 'manager_id': False, 'manager_id2': False, }) - wf_service = netsvc.LocalService("workflow") for id in ids: - wf_service.trg_delete(uid, 'hr.holidays', id, cr) - wf_service.trg_create(uid, 'hr.holidays', id, cr) + self.delete_workflow(cr, uid, [id]) + self.create_workflow(cr, uid, [id]) to_unlink = [] for record in self.browse(cr, uid, ids, context=context): for record2 in record.linked_request_ids: From 19368fb65c24bf21852e50eeae5fb0767f1c1fce Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 10:16:08 +0530 Subject: [PATCH 16/60] [IMP] sale: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131044608-h5dj2xfqyo8ewm6k --- addons/sale/sale.py | 19 ++++++------------- addons/sale/wizard/sale_line_invoice.py | 3 +-- addons/sale/wizard/sale_make_invoice.py | 6 ++---- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 66653c61849..93556a3e7d5 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -418,8 +418,7 @@ class sale_order(osv.osv): This function prints the sales order and mark it as sent, so that we can see more easily the next step of the workflow ''' assert len(ids) == 1, 'This option should only be used for a single id at a time' - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'sale.order', ids[0], 'quotation_sent', cr) + self.signal_quotation_sent(cr, uid, [ids[0]]) datas = { 'model': 'sale.order', 'ids': ids, @@ -432,12 +431,10 @@ class sale_order(osv.osv): view of one of the newly created invoices """ mod_obj = self.pool.get('ir.model.data') - wf_service = netsvc.LocalService("workflow") - + # create invoices through the sales orders' workflow inv_ids0 = set(inv.id for sale in self.browse(cr, uid, ids, context) for inv in sale.invoice_ids) - for id in ids: - wf_service.trg_validate(uid, 'sale.order', id, 'manual_invoice', cr) + self.signal_manual_invoice(cr, uid, ids) inv_ids1 = set(inv.id for sale in self.browse(cr, uid, ids, context) for inv in sale.invoice_ids) # determine newly created invoices new_inv_ids = list(inv_ids1 - inv_ids0) @@ -555,7 +552,6 @@ class sale_order(osv.osv): return True def action_cancel(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") if context is None: context = {} sale_order_line_obj = self.pool.get('sale.order.line') @@ -566,8 +562,7 @@ class sale_order(osv.osv): _('Cannot cancel this sales order!'), _('First cancel all invoices attached to this sales order.')) for r in self.read(cr, uid, ids, ['invoice_ids']): - for inv in r['invoice_ids']: - wf_service.trg_validate(uid, 'account.invoice', inv, 'invoice_cancel', cr) + self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, r['invoice_ids']) sale_order_line_obj.write(cr, uid, [l.id for l in sale.order_line], {'state': 'cancel'}) self.write(cr, uid, ids, {'state': 'cancel'}) @@ -575,8 +570,7 @@ class sale_order(osv.osv): def action_button_confirm(self, cr, uid, ids, context=None): assert len(ids) == 1, 'This option should only be used for a single id at a time.' - wf_service = netsvc.LocalService('workflow') - wf_service.trg_validate(uid, 'sale.order', ids[0], 'order_confirm', cr) + self.signal_order_confirm(cr, uid, ids) # redisplay the record as a sales order view_ref = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'sale', 'view_order_form') @@ -992,8 +986,7 @@ class mail_compose_message(osv.Model): context = context or {} if context.get('default_model') == 'sale.order' and context.get('default_res_id') and context.get('mark_so_as_sent'): context = dict(context, mail_post_autofollow=True) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'sale.order', context['default_res_id'], 'quotation_sent', cr) + self.pool.get('sale.order').signal_quotation_sent(cr, uid, context['default_res_id']) return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale/wizard/sale_line_invoice.py b/addons/sale/wizard/sale_line_invoice.py index 4aa58088129..4b18c9a4b39 100644 --- a/addons/sale/wizard/sale_line_invoice.py +++ b/addons/sale/wizard/sale_line_invoice.py @@ -80,7 +80,6 @@ class sale_order_line_make_invoice(osv.osv_memory): sales_order_line_obj = self.pool.get('sale.order.line') sales_order_obj = self.pool.get('sale.order') - wf_service = netsvc.LocalService('workflow') for line in sales_order_line_obj.browse(cr, uid, context.get('active_ids', []), context=context): if (not line.invoiced) and (line.state not in ('draft', 'cancel')): if not line.order_id.id in invoices: @@ -103,7 +102,7 @@ class sale_order_line_make_invoice(osv.osv_memory): flag = False break if flag: - wf_service.trg_validate(uid, 'sale.order', line.order_id.id, 'manual_invoice', cr) + sales_order_obj.signal_manual_invoice(cr, uid, line.order_id.id) sales_order_obj.write(cr, uid, [line.order_id.id], {'state': 'progress'}) if not invoices: diff --git a/addons/sale/wizard/sale_make_invoice.py b/addons/sale/wizard/sale_make_invoice.py index d60adbb7b25..608ae0493df 100644 --- a/addons/sale/wizard/sale_make_invoice.py +++ b/addons/sale/wizard/sale_make_invoice.py @@ -52,10 +52,8 @@ class sale_make_invoice(osv.osv_memory): context = {} data = self.read(cr, uid, ids)[0] order_obj.action_invoice_create(cr, uid, context.get(('active_ids'), []), data['grouped'], date_inv = data['invoice_date']) - wf_service = netsvc.LocalService("workflow") - for id in context.get(('active_ids'), []): - wf_service.trg_validate(uid, 'sale.order', id, 'manual_invoice', cr) - + order_obj.signal_manual_invoice(cr, uid, context.get(('active_ids'), [])) + for o in order_obj.browse(cr, uid, context.get(('active_ids'), []), context=context): for i in o.invoice_ids: newinv.append(i.id) From 4fa593ade57fd184f70829d7b70c46ed80ae41be Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 10:42:29 +0530 Subject: [PATCH 17/60] [IMP] sale: for yml use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131051229-r530h3eawm5bm62s --- addons/sale/test/cancel_order.yml | 5 +---- addons/sale/test/manual_order_policy.yml | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/addons/sale/test/cancel_order.yml b/addons/sale/test/cancel_order.yml index cde3a5b34f2..d9d76f19935 100644 --- a/addons/sale/test/cancel_order.yml +++ b/addons/sale/test/cancel_order.yml @@ -51,11 +51,8 @@ I cancel all the invoices. - !python {model: sale.order}: | - import netsvc invoice_ids = self.browse(cr, uid, ref("sale_order_8")).invoice_ids - wf_service = netsvc.LocalService("workflow") - for invoice in invoice_ids: - wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_cancel', cr) + self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, invoice_ids) - I check order status in "Invoice Exception" and related invoice is in cancel state. - diff --git a/addons/sale/test/manual_order_policy.yml b/addons/sale/test/manual_order_policy.yml index 5fe29950176..905f04b01f5 100644 --- a/addons/sale/test/manual_order_policy.yml +++ b/addons/sale/test/manual_order_policy.yml @@ -41,11 +41,8 @@ I open the Invoice. - !python {model: sale.order}: | - import netsvc - wf_service = netsvc.LocalService("workflow") so = self.browse(cr, uid, ref("sale_order_2")) - for invoice in so.invoice_ids: - wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_open', cr) + self.pool.get('account.invoice').signal_invoice_open(cr, uid, so.invoice_ids) - I pay the invoice. - From 2ac6d7876f813ece0e13d632b125119f96e035b7 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 11:13:37 +0530 Subject: [PATCH 18/60] [IMP] sale_stock: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131054337-iph87376e9bhoqpy --- addons/sale_stock/sale_stock.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index 1b5ddefbe74..6f891a047a1 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -194,7 +194,6 @@ class sale_order(osv.osv): return res def action_cancel(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") if context is None: context = {} sale_order_line_obj = self.pool.get('sale.order.line') @@ -209,11 +208,9 @@ class sale_order(osv.osv): for mov in pick.move_lines: proc_ids = proc_obj.search(cr, uid, [('move_id', '=', mov.id)]) if proc_ids: - for proc in proc_ids: - wf_service.trg_validate(uid, 'procurement.order', proc, 'button_check', cr) + self.pool.get('procurement.order').signal_button_check(cr, uid, proc_ids) for r in self.read(cr, uid, ids, ['picking_ids']): - for pick in r['picking_ids']: - wf_service.trg_validate(uid, 'stock.picking', pick, 'button_cancel', cr) + self.pool.get('stock.picking').signal_button_cancel(cr, uid, r['picking_ids']) return super(sale_order, self).action_cancel(cr, uid, ids, context=context) def action_wait(self, cr, uid, ids, context=None): @@ -396,11 +393,9 @@ class sale_order(osv.osv): line.write({'procurement_id': proc_id}) self.ship_recreate(cr, uid, order, line, move_id, proc_id) - wf_service = netsvc.LocalService("workflow") if picking_id: - wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) - for proc_id in proc_ids: - wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr) + self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id]) + self.pool.get('procurement.order').signal_button_confirm(cr, uid, proc_ids) val = {} if order.state == 'shipping_except': From 3dfaff6bc3cbe4ad4f479ec6dfb549389126a9cd Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 11:45:33 +0530 Subject: [PATCH 19/60] [IMP] sale_stock: for yml use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131061533-ivbzasitl9a2mi04 --- addons/sale_stock/sale_stock.py | 1 - addons/sale_stock/test/cancel_order_sale_stock.yml | 8 ++------ addons/sale_stock/test/picking_order_policy.yml | 4 +--- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index 6f891a047a1..f63282b7a16 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -23,7 +23,6 @@ from datetime import datetime, timedelta from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, float_compare from dateutil.relativedelta import relativedelta from openerp.osv import fields, osv -from openerp import netsvc from openerp.tools.translate import _ class sale_shop(osv.osv): diff --git a/addons/sale_stock/test/cancel_order_sale_stock.yml b/addons/sale_stock/test/cancel_order_sale_stock.yml index 6805a90ca80..9081cac9fa3 100644 --- a/addons/sale_stock/test/cancel_order_sale_stock.yml +++ b/addons/sale_stock/test/cancel_order_sale_stock.yml @@ -17,11 +17,9 @@ Now I cancel latest shipment. - !python {model: stock.picking}: | - import netsvc delivery_orders = self.search(cr, uid, [('sale_id','=',ref("sale.sale_order_8"))]) last_delivery_order_id = delivery_orders[0] - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'stock.picking', last_delivery_order_id, 'button_cancel', cr) + self.pool.get('stock.picking').signal_button_cancel(cr, uid, [last_delivery_order_id]) - I run the scheduler. - @@ -50,11 +48,9 @@ To cancel the sale order from Invoice Exception, I have to cancel the invoice of sale order. - !python {model: sale.order}: | - import netsvc invoice_ids = self.browse(cr, uid, ref("sale.sale_order_8")).invoice_ids - wf_service = netsvc.LocalService("workflow") first_invoice_id = invoice_ids[0] - wf_service.trg_validate(uid, 'account.invoice', first_invoice_id.id, 'invoice_cancel', cr) + self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, [first_invoice_id.id]) - I check order status in "Invoice Exception" and related invoice is in cancel state. - diff --git a/addons/sale_stock/test/picking_order_policy.yml b/addons/sale_stock/test/picking_order_policy.yml index 800c131e288..a28326598ac 100644 --- a/addons/sale_stock/test/picking_order_policy.yml +++ b/addons/sale_stock/test/picking_order_policy.yml @@ -132,11 +132,9 @@ I open the Invoice. - !python {model: sale.order}: | - import netsvc - wf_service = netsvc.LocalService("workflow") so = self.browse(cr, uid, ref("sale.sale_order_6")) for invoice in so.invoice_ids: - wf_service.trg_validate(uid, 'account.invoice', invoice.id, 'invoice_open', cr) + self.pool.get('account.invoice').signal_invoice_open(cr, uid, [invoice.id]) - I pay the invoice - From ba02e50efacdc621130aff19e02c6d0e69c07a7d Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 12:03:33 +0530 Subject: [PATCH 20/60] [IMP] hr_payroll: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131063333-jhcpvbingaqxroiq --- addons/hr_payroll/hr_payroll.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py index b711ed1a9c4..06af3054b68 100644 --- a/addons/hr_payroll/hr_payroll.py +++ b/addons/hr_payroll/hr_payroll.py @@ -26,7 +26,6 @@ from datetime import datetime from datetime import timedelta from dateutil import relativedelta -from openerp import netsvc from openerp.osv import fields, osv from openerp import tools from openerp.tools.translate import _ @@ -331,13 +330,12 @@ class hr_payslip(osv.osv): def refund_sheet(self, cr, uid, ids, context=None): mod_obj = self.pool.get('ir.model.data') - wf_service = netsvc.LocalService("workflow") for payslip in self.browse(cr, uid, ids, context=context): id_copy = self.copy(cr, uid, payslip.id, {'credit_note': True, 'name': _('Refund: ')+payslip.name}, context=context) self.compute_sheet(cr, uid, [id_copy], context=context) - wf_service.trg_validate(uid, 'hr.payslip', id_copy, 'hr_verify_sheet', cr) - wf_service.trg_validate(uid, 'hr.payslip', id_copy, 'process_sheet', cr) - + self.signal_hr_verify_sheet(cr, uid, [id_copy]) + self.signal_process_sheet(cr, uid, [id_copy]) + form_id = mod_obj.get_object_reference(cr, uid, 'hr_payroll', 'view_hr_payslip_form') form_res = form_id and form_id[1] or False tree_id = mod_obj.get_object_reference(cr, uid, 'hr_payroll', 'view_hr_payslip_tree') From da43da8f3b54be5c4e5392f567d51057d2b250c9 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 14:54:40 +0530 Subject: [PATCH 21/60] [IMP] hr_timesheet_sheet: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131092440-gxhz5y5rxkfuy9k3 --- addons/hr_timesheet_sheet/hr_timesheet_sheet.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py index c473670b014..d9b76dcfb89 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py @@ -93,8 +93,7 @@ class hr_timesheet_sheet(osv.osv): self.check_employee_attendance_state(cr, uid, sheet.id, context=context) di = sheet.user_id.company_id.timesheet_max_difference if (abs(sheet.total_difference) < di) or not di: - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'hr_timesheet_sheet.sheet', sheet.id, 'confirm', cr) + self.signal_confirm(cr, uid, [sheet.id]) else: raise osv.except_osv(_('Warning!'), _('Please verify that the total difference of the sheet is lower than %.2f.') %(di,)) return True @@ -192,9 +191,8 @@ class hr_timesheet_sheet(osv.osv): def action_set_to_draft(self, cr, uid, ids, *args): self.write(cr, uid, ids, {'state': 'draft'}) - wf_service = netsvc.LocalService('workflow') for id in ids: - wf_service.trg_create(uid, self._name, id, cr) + self.create_workflow(cr, uid, [id]) return True def name_get(self, cr, uid, ids, context=None): From 4b7ad7da5633f31b1b06237a8e1a4f5985f12555 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 14:59:50 +0530 Subject: [PATCH 22/60] [IMP] removed unused import bzr revid: cha@tinyerp.com-20130131092950-mm2xjuv2j2t0gk7v --- addons/hr_timesheet_sheet/hr_timesheet_sheet.py | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py index d9b76dcfb89..5948c02bc5e 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py @@ -25,7 +25,6 @@ from dateutil.relativedelta import relativedelta from openerp.osv import fields, osv from openerp.tools.translate import _ -from openerp import netsvc class hr_timesheet_sheet(osv.osv): _name = "hr_timesheet_sheet.sheet" From d43fa7273659c2600c74d6b8b6ac4a6c62c9f2f2 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 15:09:01 +0530 Subject: [PATCH 23/60] [FIX] l10n_in_hr_payroll: removed unused imports. bzr revid: cha@tinyerp.com-20130131093901-423rr2g3h5ke0vpb --- addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py index da98bbe681a..6a7638d919a 100644 --- a/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py +++ b/addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py @@ -26,7 +26,6 @@ from calendar import isleap from openerp.tools.translate import _ from openerp.osv import fields, osv -from openerp import netsvc import openerp.addons.decimal_precision as dp DATETIME_FORMAT = "%Y-%m-%d" @@ -179,7 +178,6 @@ class hr_payslip_run(osv.osv): return res def create_advice(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") payslip_pool = self.pool.get('hr.payslip') payslip_line_pool = self.pool.get('hr.payslip.line') advice_pool = self.pool.get('hr.payroll.advice') From 4ce0098aa72d05fbfa332c61b694228eb5bf95fd Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 15:17:28 +0530 Subject: [PATCH 24/60] [FIX] purchase: removed unused imports. bzr revid: cha@tinyerp.com-20130131094728-944bmu3sa1dmbhzy --- addons/purchase/purchase.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index a45da4a2d61..e76bf4a0358 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -25,7 +25,6 @@ from dateutil.relativedelta import relativedelta from operator import attrgetter from openerp.osv import fields, osv -from openerp import netsvc from openerp import pooler from openerp.tools.translate import _ import openerp.addons.decimal_precision as dp @@ -484,7 +483,6 @@ class purchase_order(osv.osv): if not len(ids): return False self.write(cr, uid, ids, {'state':'draft','shipped':0}) - wf_service = netsvc.LocalService("workflow") for p_id in ids: # Deleting the existing instance of workflow for PO self.delete_workflow(cr, uid, [p_id]) # TODO is it necessary to interleave the calls? @@ -777,7 +775,6 @@ class purchase_order(osv.osv): allorders = [] orders_info = {} - wf_service = netsvc.LocalService("workflow") for order_key, (order_data, old_ids) in new_orders.iteritems(): # skip merges with only one order if len(old_ids) < 2: From de90c600cdc9771494b17504ddc63024f5d18f6c Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 15:25:41 +0530 Subject: [PATCH 25/60] [FIX] purchase: removed unused imports from yml. bzr revid: cha@tinyerp.com-20130131095541-2p4hocnztgrkvp98 --- addons/purchase/test/process/rfq2order2done.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/purchase/test/process/rfq2order2done.yml b/addons/purchase/test/process/rfq2order2done.yml index be68a8ca01e..ff9158b3c09 100644 --- a/addons/purchase/test/process/rfq2order2done.yml +++ b/addons/purchase/test/process/rfq2order2done.yml @@ -59,9 +59,7 @@ I Validate Invoice of Purchase Order. - !python {model: purchase.order}: | - import netsvc invoice_ids = [x.id for x in self.browse(cr, uid, ref("purchase_order_1")).invoice_ids] - wf_service = netsvc.LocalService("workflow") self.pool.get('account.invoice').signal_invoice_open(cr, uid, invoice_ids) - I check that purchase order is invoiced. From 8045a7556d4fcef4a9640828e84fb799370d9a18 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 16:00:15 +0530 Subject: [PATCH 26/60] [IMP] purchase_requisition: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131103015-ooa3nr4j6qllpfgk --- addons/purchase_requisition/purchase_requisition.py | 4 +--- addons/purchase_requisition/test/purchase_requisition.yml | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index f773bbd8505..79b8cce4bd5 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -22,7 +22,6 @@ from datetime import datetime from dateutil.relativedelta import relativedelta import time -from openerp import netsvc from openerp.osv import fields,osv from openerp.tools.translate import _ @@ -211,8 +210,7 @@ class purchase_order(osv.osv): proc_ids = proc_obj.search(cr, uid, [('purchase_id', '=', order.id)]) if proc_ids and po.state=='confirmed': proc_obj.write(cr, uid, proc_ids, {'purchase_id': po.id}) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'purchase.order', order.id, 'purchase_cancel', cr) + self.signal_purchase_cancel(cr, uid, [order.id]) po.requisition_id.tender_done(context=context) return res diff --git a/addons/purchase_requisition/test/purchase_requisition.yml b/addons/purchase_requisition/test/purchase_requisition.yml index 38e66788dcf..f23737d21b8 100644 --- a/addons/purchase_requisition/test/purchase_requisition.yml +++ b/addons/purchase_requisition/test/purchase_requisition.yml @@ -69,10 +69,8 @@ I confirmed RFQ which has best price. - !python {model: purchase.order}: | - import netsvc - wf_service = netsvc.LocalService("workflow") purchase = self.browse(cr, uid, ref('rfq2'), context=context) - wf_service.trg_validate(uid, 'purchase.order', purchase.id, 'purchase_confirm', cr) + self.signal_purchase_confirm(cr, uid, [purchase.id]) - I check status of requisition after confirmed best RFQ. From fc374647a9c0dad7411992d799132c0475fbaf38 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 16:49:52 +0530 Subject: [PATCH 27/60] [IMP] procurement: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130131111952-tnq7iiwj9u5opyge --- addons/procurement/procurement.py | 1 - addons/procurement/schedulers.py | 3 --- addons/procurement/wizard/make_procurement_product.py | 6 ++---- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index 21c260b99cd..30d870647e2 100644 --- a/addons/procurement/procurement.py +++ b/addons/procurement/procurement.py @@ -456,7 +456,6 @@ class procurement_order(osv.osv): class StockPicking(osv.osv): _inherit = 'stock.picking' def test_finished(self, cr, uid, ids): - wf_service = netsvc.LocalService("workflow") res = super(StockPicking, self).test_finished(cr, uid, ids) for picking in self.browse(cr, uid, ids): for move in picking.move_lines: diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py index 76b31cc6da3..c09d9a22a16 100644 --- a/addons/procurement/schedulers.py +++ b/addons/procurement/schedulers.py @@ -57,7 +57,6 @@ class procurement_order(osv.osv): try: if use_new_cursor: cr = pooler.get_db(use_new_cursor).cursor() - wf_service = netsvc.LocalService("workflow") procurement_obj = self.pool.get('procurement.order') if not ids: @@ -154,7 +153,6 @@ class procurement_order(osv.osv): product_obj = self.pool.get('product.product') proc_obj = self.pool.get('procurement.order') warehouse_obj = self.pool.get('stock.warehouse') - wf_service = netsvc.LocalService("workflow") warehouse_ids = warehouse_obj.search(cr, uid, [], context=context) products_ids = product_obj.search(cr, uid, [('purchase_ok', '=', True)], order='id', context=context) @@ -224,7 +222,6 @@ class procurement_order(osv.osv): orderpoint_obj = self.pool.get('stock.warehouse.orderpoint') procurement_obj = self.pool.get('procurement.order') - wf_service = netsvc.LocalService("workflow") offset = 0 ids = [1] if automatic: diff --git a/addons/procurement/wizard/make_procurement_product.py b/addons/procurement/wizard/make_procurement_product.py index 34a146289f6..fa159780af2 100644 --- a/addons/procurement/wizard/make_procurement_product.py +++ b/addons/procurement/wizard/make_procurement_product.py @@ -19,7 +19,6 @@ # ############################################################################## -from openerp import netsvc from openerp.osv import fields, osv @@ -64,7 +63,6 @@ class make_procurement(osv.osv_memory): user = self.pool.get('res.users').browse(cr, uid, uid, context=context).login wh_obj = self.pool.get('stock.warehouse') procurement_obj = self.pool.get('procurement.order') - wf_service = netsvc.LocalService("workflow") data_obj = self.pool.get('ir.model.data') for proc in self.browse(cr, uid, ids, context=context): @@ -78,8 +76,8 @@ class make_procurement(osv.osv_memory): 'location_id': wh.lot_stock_id.id, 'procure_method':'make_to_order', }) - - wf_service.trg_validate(uid, 'procurement.order', procure_id, 'button_confirm', cr) + + self.pool.get('procurement.order').signal_button_confirm(cr, uid, [procure_id]) id2 = data_obj._get_id(cr, uid, 'procurement', 'procurement_tree_view') From d4328ba8d57010a669efc1724264fba534f88b46 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 17:29:54 +0530 Subject: [PATCH 28/60] [IMP] account_voucher: : use the new ORM methods create_workflow, delete_workflow, redirect_workflow. bzr revid: cha@tinyerp.com-20130131115954-54u8z5ibntrs4sco --- addons/account_voucher/account_voucher.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 2046d787ef3..2e808e26b75 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -22,7 +22,6 @@ import time from lxml import etree -from openerp import netsvc from openerp.osv import fields, osv import openerp.addons.decimal_precision as dp from openerp.tools.translate import _ @@ -828,9 +827,7 @@ class account_voucher(osv.osv): return True def action_cancel_draft(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") - for voucher_id in ids: - wf_service.trg_create(uid, 'account.voucher', voucher_id, cr) + self.create_workflow(cr, uid, ids) self.write(cr, uid, ids, {'state':'draft'}) return True From eebaf0767ed79a70cc999ff32cae325bc81aa839 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 31 Jan 2013 17:30:47 +0530 Subject: [PATCH 29/60] [IMP] mrp_operation: use the new ORM methods create_workflow, delete_workflow, redirect_workflow. bzr revid: tta@openerp.com-20130131120047-9ehhi00keo0p6gjq --- addons/mrp_operations/mrp_operations.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py index a60b348559c..cce27d3a6c2 100644 --- a/addons/mrp_operations/mrp_operations.py +++ b/addons/mrp_operations/mrp_operations.py @@ -500,7 +500,6 @@ class mrp_operations_operation(osv.osv): def create(self, cr, uid, vals, context=None): workcenter_pool = self.pool.get('mrp.production.workcenter.line') - wf_service = netsvc.LocalService('workflow') code_ids=self.pool.get('mrp_operations.operation.code').search(cr,uid,[('id','=',vals['code_id'])]) code=self.pool.get('mrp_operations.operation.code').browse(cr, uid, code_ids, context=context)[0] wc_op_id=workcenter_pool.search(cr,uid,[('workcenter_id','=',vals['workcenter_id']),('production_id','=',vals['production_id'])]) @@ -545,10 +544,9 @@ class mrp_operations_operation(osv.osv): return super(mrp_operations_operation, self).create(cr, uid, vals, context=context) def initialize_workflow_instance(self, cr, uid, context=None): - wf_service = netsvc.LocalService("workflow") - line_ids = self.pool.get('mrp.production.workcenter.line').search(cr, uid, [], context=context) - for line_id in line_ids: - wf_service.trg_create(uid, 'mrp.production.workcenter.line', line_id, cr) + mrp_production_workcenter_line = self.pool.get('mrp.production.workcenter.line') + line_ids = mrp_production_workcenter_line.search(cr, uid, [], context=context) + mrp_production_workcenter_line.create_workflow(cr, uid, line_ids) return True _columns={ From 401b039e809598fc9e242f9dda1a34545430219d Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 31 Jan 2013 17:49:15 +0530 Subject: [PATCH 30/60] [IMP] mrp: use the new signal_xxx method instead of trg_validate. bzr revid: tta@openerp.com-20130131121915-gahj7t5ob6s2y0q8 --- addons/mrp/mrp.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index 44fbaafbcfe..b8081f461d6 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -27,7 +27,6 @@ from openerp.osv import fields, osv from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP from openerp.tools import float_compare from openerp.tools.translate import _ -from openerp import netsvc from openerp import tools #---------------------------------------------------------- @@ -775,8 +774,7 @@ class mrp_production(osv.osv): for new_parent_id in new_parent_ids: stock_mov_obj.write(cr, uid, [raw_product.id], {'move_history_ids': [(4,new_parent_id)]}) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'mrp.production', production_id, 'button_produce_done', cr) + self.signal_button_produce_done(cr, uid, [production_id]) return True def _costs_generate(self, cr, uid, production): @@ -844,7 +842,6 @@ class mrp_production(osv.osv): return True def _make_production_line_procurement(self, cr, uid, production_line, shipment_move_id, context=None): - wf_service = netsvc.LocalService("workflow") procurement_order = self.pool.get('procurement.order') production = production_line.production_id location_id = production.location_src_id.id @@ -864,7 +861,7 @@ class mrp_production(osv.osv): 'move_id': shipment_move_id, 'company_id': production.company_id.id, }) - wf_service.trg_validate(uid, procurement_order._name, procurement_id, 'button_confirm', cr) + self.signal_button_confirm(cr, uid, [procurement_id]) return procurement_id def _make_production_internal_shipment_line(self, cr, uid, production_line, shipment_id, parent_move_id, destination_location_id=False, context=None): @@ -977,7 +974,6 @@ class mrp_production(osv.osv): @return: Newly generated Shipment Id. """ shipment_id = False - wf_service = netsvc.LocalService("workflow") uncompute_ids = filter(lambda x:x, [not x.product_lines and x.id or False for x in self.browse(cr, uid, ids, context=context)]) self.action_compute(cr, uid, uncompute_ids, context=context) for production in self.browse(cr, uid, ids, context=context): @@ -995,7 +991,7 @@ class mrp_production(osv.osv): destination_location_id=source_location_id, context=context) self._make_production_line_procurement(cr, uid, line, shipment_move_id, context=context) - wf_service.trg_validate(uid, 'stock.picking', shipment_id, 'button_confirm', cr) + self.registry('stock.picking').signal_button_confirm(cr, uid, [shipment_id]) production.write({'state':'confirmed'}, context=context) return shipment_id From 9a1d53ba2dbd3f5c7e42696f3aef8e4963754013 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Thu, 31 Jan 2013 18:01:22 +0530 Subject: [PATCH 31/60] [IMP] account_payment: : use the new ORM methods create_workflow, delete_workflow, redirect_workflow. bzr revid: cha@tinyerp.com-20130131123122-td7ebesygpa605y0 --- addons/account_payment/account_payment.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/addons/account_payment/account_payment.py b/addons/account_payment/account_payment.py index c57c83aa765..bf0377111a8 100644 --- a/addons/account_payment/account_payment.py +++ b/addons/account_payment/account_payment.py @@ -23,7 +23,6 @@ import logging import time from openerp.osv import fields, osv -from openerp import netsvc _logger = logging.getLogger(__name__) @@ -120,9 +119,7 @@ class payment_order(osv.osv): def set_to_draft(self, cr, uid, ids, *args): self.write(cr, uid, ids, {'state': 'draft'}) - wf_service = netsvc.LocalService("workflow") - for id in ids: - wf_service.trg_create(uid, 'payment.order', id, cr) + self.create_workflow(cr, uid, ids) return True def action_open(self, cr, uid, ids, *args): From c35416245f1932361e65fb7cfbe75a0aee3c1372 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 31 Jan 2013 18:18:41 +0530 Subject: [PATCH 32/60] [IMP] mrp_repain: use the new signal_xxx method instead of trg_validate. bzr revid: tta@openerp.com-20130131124841-ej81d0ethz8859r0 --- addons/mrp_repair/mrp_repair.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py index 8c43158a876..7bb12b0402a 100644 --- a/addons/mrp_repair/mrp_repair.py +++ b/addons/mrp_repair/mrp_repair.py @@ -20,7 +20,6 @@ ############################################################################## from openerp.osv import fields,osv -from openerp import netsvc from datetime import datetime from dateutil.relativedelta import relativedelta from openerp.tools.translate import _ @@ -314,9 +313,7 @@ class mrp_repair(osv.osv): for repair in self.browse(cr, uid, ids): mrp_line_obj.write(cr, uid, [l.id for l in repair.operations], {'state': 'draft'}) self.write(cr, uid, ids, {'state':'draft'}) - wf_service = netsvc.LocalService("workflow") - for id in ids: - wf_service.trg_create(uid, 'mrp.repair', id, cr) + self.create_workflow(cr, uid, ids) return True def action_confirm(self, cr, uid, ids, *args): @@ -505,7 +502,6 @@ class mrp_repair(osv.osv): """ res = {} move_obj = self.pool.get('stock.move') - wf_service = netsvc.LocalService("workflow") repair_line_obj = self.pool.get('mrp.repair.line') seq_obj = self.pool.get('ir.sequence') pick_obj = self.pool.get('stock.picking') @@ -548,7 +544,7 @@ class mrp_repair(osv.osv): 'tracking_id': False, 'state': 'assigned', }) - wf_service.trg_validate(uid, 'stock.picking', picking, 'button_confirm', cr) + self.registry.signal_button_confirm(cr, uid, [picking]) self.write(cr, uid, [repair.id], {'state': 'done', 'picking_id': picking}) res[repair.id] = picking else: From f63497e12ff9c933706dec07ba13d6432bd7199a Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 31 Jan 2013 18:36:50 +0530 Subject: [PATCH 33/60] [IMP] hr_expense: cleanup the code for workflow declaration. bzr revid: tta@openerp.com-20130131130650-szwdnjyqiohdimio --- addons/hr_expense/hr_expense.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py index f32479c2ae2..0b6ec48974b 100644 --- a/addons/hr_expense/hr_expense.py +++ b/addons/hr_expense/hr_expense.py @@ -21,7 +21,6 @@ import time -from openerp import netsvc from openerp.osv import fields, osv from openerp.tools.translate import _ @@ -152,7 +151,6 @@ class hr_expense_expense(osv.osv): account_journal = self.pool.get('account.journal') voucher_obj = self.pool.get('account.voucher') currency_obj = self.pool.get('res.currency') - wkf_service = netsvc.LocalService("workflow") if context is None: context = {} for exp in self.browse(cr, uid, ids, context=context): From d80d06514474fc33a262b4e9a736b67e72cae029 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 31 Jan 2013 18:41:07 +0530 Subject: [PATCH 34/60] [IMP] hr_payroll_account: use the new signal_xxx method instead of trg_validate. bzr revid: tta@openerp.com-20130131131107-4h42x3g19blw6jzw --- addons/hr_payroll_account/test/hr_payroll_account.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/addons/hr_payroll_account/test/hr_payroll_account.yml b/addons/hr_payroll_account/test/hr_payroll_account.yml index 5abf7d5dffa..ad0197c7905 100644 --- a/addons/hr_payroll_account/test/hr_payroll_account.yml +++ b/addons/hr_payroll_account/test/hr_payroll_account.yml @@ -104,10 +104,8 @@ I want to check cancel button. So I first cancel the sheet then make it set to draft. - !python {model: hr.payslip}: | - import netsvc - wf_service = netsvc.LocalService("workflow") self.cancel_sheet(cr, uid, [ref("hr_payslip_0")], None) - wf_service.trg_validate(uid, 'hr.payslip', ref("hr_payslip_0"), 'draft', cr) + self.signal_draft(cr, uid, [ref("hr_payslip_0")]) - Then I click on the "Confirm" button. - From 0b7fe8278e8050faa6fbd568db2c704fc619254e Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 10:23:11 +0530 Subject: [PATCH 35/60] [IMP] mrp: use the new signal_xxx methods instead of trg_validate. bzr revid: tta@openerp.com-20130201045311-1njirm57d9cd5mff --- addons/mrp/stock.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/addons/mrp/stock.py b/addons/mrp/stock.py index ae7edf54750..1ff121c78bd 100644 --- a/addons/mrp/stock.py +++ b/addons/mrp/stock.py @@ -21,7 +21,6 @@ from openerp.osv import fields from openerp.osv import osv -from openerp import netsvc class StockMove(osv.osv): @@ -45,7 +44,6 @@ class StockMove(osv.osv): move_obj = self.pool.get('stock.move') procurement_obj = self.pool.get('procurement.order') product_obj = self.pool.get('product.product') - wf_service = netsvc.LocalService("workflow") processed_ids = [move.id] if move.product_id.supply_method == 'produce' and move.product_id.procure_method == 'make_to_order': bis = bom_obj.search(cr, uid, [ @@ -90,16 +88,17 @@ class StockMove(osv.osv): 'procure_method': prodobj.procure_method, 'move_id': mid, }) - wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr) + procurement_obj.signal_button_confirm(cr, uid, [proc_id]) + move_obj.write(cr, uid, [move.id], { 'location_dest_id': move.location_id.id, # dummy move for the kit 'auto_validate': True, 'picking_id': False, 'state': 'confirmed' }) - for m in procurement_obj.search(cr, uid, [('move_id','=',move.id)], context): - wf_service.trg_validate(uid, 'procurement.order', m, 'button_confirm', cr) - wf_service.trg_validate(uid, 'procurement.order', m, 'button_wait_done', cr) + procurement_ids = procurement_obj.search(cr, uid, [('move_id','=',move.id)], context) + procurement_obj.signal_button_confirm(cr, uid, procurement_ids) + procurement_obj.signal_button_wait_done(cr, uid, procurement_ids) return processed_ids def action_consume(self, cr, uid, ids, product_qty, location_id=False, context=None): @@ -110,7 +109,6 @@ class StockMove(osv.osv): """ res = [] production_obj = self.pool.get('mrp.production') - wf_service = netsvc.LocalService("workflow") for move in self.browse(cr, uid, ids): move.action_confirm(context) new_moves = super(StockMove, self).action_consume(cr, uid, [move.id], product_qty, location_id, context=context) @@ -118,7 +116,7 @@ class StockMove(osv.osv): for prod in production_obj.browse(cr, uid, production_ids, context=context): if prod.state == 'confirmed': production_obj.force_production(cr, uid, [prod.id]) - wf_service.trg_validate(uid, 'mrp.production', prod.id, 'button_produce', cr) + production_obj.signal_button_produce(cr, uid, production_ids) for new_move in new_moves: if new_move == move.id: #This move is already there in move lines of production order @@ -135,14 +133,13 @@ class StockMove(osv.osv): """ res = [] production_obj = self.pool.get('mrp.production') - wf_service = netsvc.LocalService("workflow") for move in self.browse(cr, uid, ids, context=context): new_moves = super(StockMove, self).action_scrap(cr, uid, [move.id], product_qty, location_id, context=context) #If we are not scrapping our whole move, tracking and lot references must not be removed #self.write(cr, uid, [move.id], {'prodlot_id': False, 'tracking_id': False}) production_ids = production_obj.search(cr, uid, [('move_lines', 'in', [move.id])]) for prod_id in production_ids: - wf_service.trg_validate(uid, 'mrp.production', prod_id, 'button_produce', cr) + production_obj.signal_button_produce(cr, uid, [prod_id]) for new_move in new_moves: production_obj.write(cr, uid, production_ids, {'move_lines': [(4, new_move)]}) res.append(new_move) From 263e0cf4824324d9842cca0688350bee7c726643 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 10:35:51 +0530 Subject: [PATCH 36/60] [IMP] hr_timesheet_invoice: code cleanup unused import. bzr revid: tta@openerp.com-20130201050551-1v45eut2toek9g7x --- addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml | 2 -- .../test/test_hr_timesheet_invoice_no_prod_tax.yml | 2 -- 2 files changed, 4 deletions(-) diff --git a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml index de19ea8fb3a..0896cf7d517 100644 --- a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml +++ b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml @@ -115,6 +115,4 @@ I click on "Create Invoice" button to create Invoice and validate the invoice. - !python {model: hr.timesheet.invoice.create.final}: | - import netsvc - wkf_service = netsvc.LocalService("workflow") res = self.do_create(cr, uid, [ref("hr_timesheet_invoice_create_final_0")], {"active_ids": [ref("account.analytic_agrolait")]}) diff --git a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml index 68e827e79f1..d00963073f0 100644 --- a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml +++ b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice_no_prod_tax.yml @@ -114,6 +114,4 @@ I click on "Create Invoice" button to create Invoice and validate the invoice. - !python {model: hr.timesheet.invoice.create.final}: | - import netsvc - wkf_service = netsvc.LocalService("workflow") res = self.do_create(cr, uid, [ref("hr_timesheet_invoice_create_final_0")], {"active_ids": [ref("account.analytic_agrolait")]}) From ddf3057db54a72991bd06b4d577da3c5ab4a2ab8 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 10:42:33 +0530 Subject: [PATCH 37/60] [IMP] mrp: use the new signal_xxx methods instead of trg_validate. bzr revid: tta@openerp.com-20130201051233-tcegov6upxq1jsqo --- addons/mrp/procurement.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/addons/mrp/procurement.py b/addons/mrp/procurement.py index 8162c3178dc..1f94f0034ad 100644 --- a/addons/mrp/procurement.py +++ b/addons/mrp/procurement.py @@ -24,7 +24,6 @@ from dateutil.relativedelta import relativedelta from openerp.osv import fields from openerp.osv import osv from openerp.tools.translate import _ -from openerp import netsvc class procurement_order(osv.osv): _inherit = 'procurement.order' @@ -87,7 +86,6 @@ class procurement_order(osv.osv): company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id production_obj = self.pool.get('mrp.production') move_obj = self.pool.get('stock.move') - wf_service = netsvc.LocalService("workflow") procurement_obj = self.pool.get('procurement.order') for procurement in procurement_obj.browse(cr, uid, ids, context=context): res_id = procurement.move_id.id @@ -112,7 +110,7 @@ class procurement_order(osv.osv): self.write(cr, uid, [procurement.id], {'state': 'running', 'production_id': produce_id}) bom_result = production_obj.action_compute(cr, uid, [produce_id], properties=[x.id for x in procurement.property_ids]) - wf_service.trg_validate(uid, 'mrp.production', produce_id, 'button_confirm', cr) + production_obj.signal_button_confirm(cr, uid, [produce_id]) if res_id: move_obj.write(cr, uid, [res_id], {'location_id': procurement.location_id.id}) From 191a095164482f7fe91a897a9ba812dd9c153f46 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 10:50:27 +0530 Subject: [PATCH 38/60] [IMP] membership: use the new signal_xxx methods instead of trg_validate. bzr revid: tta@openerp.com-20130201052027-2c0quhoqligc6ag2 --- addons/membership/test/test_membership.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/membership/test/test_membership.yml b/addons/membership/test/test_membership.yml index 357fcbcfc3e..8e8e7887b44 100644 --- a/addons/membership/test/test_membership.yml +++ b/addons/membership/test/test_membership.yml @@ -42,8 +42,8 @@ membership_lines = membership_line_pool.browse(cr, uid, membership_line_ids) assert membership_lines, _('Membership is not registrated.') membership_line = membership_lines[0] - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.invoice', membership_line.account_invoice_id.id, 'invoice_open', cr) + invoice_pool.signal_invoice_open(cr, uid, [membership_line.account_invoice_id.id]) + - | I'm checking "Current membership state" of "Seagate". It is an "Invoiced Member" or not. - From 89d400f824ba89dc45bc6a982b7b74a64a5f29ed Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 11:11:20 +0530 Subject: [PATCH 39/60] [IMP] mrp_repair: use the new signal_xxx methods instead of trg_validate. bzr revid: tta@openerp.com-20130201054120-lzah0vb83w3ff53z --- addons/mrp_repair/wizard/make_invoice.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/addons/mrp_repair/wizard/make_invoice.py b/addons/mrp_repair/wizard/make_invoice.py index a6e93aca064..9442746d68e 100644 --- a/addons/mrp_repair/wizard/make_invoice.py +++ b/addons/mrp_repair/wizard/make_invoice.py @@ -19,7 +19,6 @@ # ############################################################################## -from openerp import netsvc from openerp.osv import fields, osv class make_invoice(osv.osv_memory): @@ -50,9 +49,7 @@ class make_invoice(osv.osv_memory): # We have to trigger the workflow of the given repairs, otherwise they remain 'to be invoiced'. # Note that the signal 'action_invoice_create' will trigger another call to the method 'action_invoice_create', # but that second call will not do anything, since the repairs are already invoiced. - wf_service = netsvc.LocalService("workflow") - for repair_id in context['active_ids']: - wf_service.trg_validate(uid, 'mrp.repair', repair_id, 'action_invoice_create', cr) + order_obj.signal_action_invoice_create(cr, uid, context['active_ids']) form_res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form') form_id = form_res and form_res[1] or False From 048907a80f9f24986fdba0a0d462adb9dd1e94b1 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 11:38:37 +0530 Subject: [PATCH 40/60] [IMP] sale_mrp: use the new signal_xxx methods instead of trg_validate. bzr revid: tta@openerp.com-20130201060837-6uiv82cobhwjhimg --- addons/sale_mrp/test/sale_mrp.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/addons/sale_mrp/test/sale_mrp.yml b/addons/sale_mrp/test/sale_mrp.yml index 6fd64301af2..c2eff008943 100644 --- a/addons/sale_mrp/test/sale_mrp.yml +++ b/addons/sale_mrp/test/sale_mrp.yml @@ -103,11 +103,8 @@ !python {model: procurement.order}: | sale_order_obj = self.pool.get('sale.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) - import netsvc - wf_service = netsvc.LocalService("workflow") proc_ids = self.search(cr, uid, [('origin','=',so.name)]) - for proc in proc_ids: - wf_service.trg_validate(uid, 'procurement.order',proc,'button_check', cr) + self.signal_button_check(cr, uid, proc_ids) - I verify that a procurement state is "running" - From 3589c008ad440ea18d8f382c590228977af7c70e Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 11:54:21 +0530 Subject: [PATCH 41/60] [IMP] POS: use the new signal_xxx methods instead of trg_validate. bzr revid: cha@tinyerp.com-20130201062421-luknla6wp3yqxhqm --- addons/point_of_sale/point_of_sale.py | 20 ++++++++----------- addons/point_of_sale/wizard/pos_confirm.py | 4 +--- addons/point_of_sale/wizard/pos_payment.py | 4 +--- addons/point_of_sale/wizard/pos_return.py | 10 +++------- .../wizard/pos_session_opening.py | 4 +--- 5 files changed, 14 insertions(+), 28 deletions(-) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 970eb1fbed7..9b9e5b951b4 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -27,7 +27,7 @@ import pdb import time import openerp -from openerp import netsvc, tools +from openerp import tools from openerp.osv import fields, osv from openerp.tools.translate import _ @@ -442,8 +442,7 @@ class pos_session(osv.osv): } def _confirm_orders(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") - + for session in self.browse(cr, uid, ids, context=context): order_ids = [order.id for order in session.order_ids if order.state == 'paid'] @@ -457,7 +456,7 @@ class pos_session(osv.osv): _('Error!'), _("You cannot confirm all orders of this session, because they have not the 'paid' status")) else: - wf_service.trg_validate(uid, 'pos.order', order.id, 'done', cr) + self.pool.get('pos.order').signal_done(cr, uid, [order.id]) return True @@ -519,8 +518,7 @@ class pos_order(osv.osv): 'journal': cash_journal.id, }, context=context) order_ids.append(order_id) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'pos.order', order_id, 'paid', cr) + self.signal_paid(cr, uid, [order_id]) return order_ids def unlink(self, cr, uid, ids, context=None): @@ -695,9 +693,8 @@ class pos_order(osv.osv): }, context=context) if line.qty < 0: location_id, output_id = output_id, location_id - - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) + + self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id]) picking_obj.force_assign(cr, uid, [picking_id], context) return True @@ -707,7 +704,7 @@ class pos_order(osv.osv): """ stock_picking_obj = self.pool.get('stock.picking') for order in self.browse(cr, uid, ids, context=context): - wf_service.trg_validate(uid, 'stock.picking', order.picking_id.id, 'button_cancel', cr) + self.pool.get('stock.picking').signal_button_cancel(cr, uid, [order.picking_id.id]) if stock_picking_obj.browse(cr, uid, order.picking_id.id, context=context).state <> 'cancel': raise osv.except_osv(_('Error!'), _('Unable to cancel the picking.')) self.write(cr, uid, ids, {'state': 'cancel'}, context=context) @@ -803,7 +800,6 @@ class pos_order(osv.osv): return self.write(cr, uid, ids, {'state':'invoiced'}, context=context) def action_invoice(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") inv_ref = self.pool.get('account.invoice') inv_line_ref = self.pool.get('account.invoice.line') product_obj = self.pool.get('product.product') @@ -857,7 +853,7 @@ class pos_order(osv.osv): and [(6, 0, inv_line['invoice_line_tax_id'])] or [] inv_line_ref.create(cr, uid, inv_line, context=context) inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context) - wf_service.trg_validate(uid, 'pos.order', order.id, 'invoice', cr) + self.signal_invoice(cr, uid, [order.id]) if not inv_ids: return {} diff --git a/addons/point_of_sale/wizard/pos_confirm.py b/addons/point_of_sale/wizard/pos_confirm.py index 4dec36685f0..ebc432a846f 100644 --- a/addons/point_of_sale/wizard/pos_confirm.py +++ b/addons/point_of_sale/wizard/pos_confirm.py @@ -19,7 +19,6 @@ # ############################################################################## -from openerp import netsvc from openerp.osv import osv @@ -28,7 +27,6 @@ class pos_confirm(osv.osv_memory): _description = 'Post POS Journal Entries' def action_confirm(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") order_obj = self.pool.get('pos.order') ids = order_obj.search(cr, uid, [('state','=','paid')], context=context) for order in order_obj.browse(cr, uid, ids, context=context): @@ -38,7 +36,7 @@ class pos_confirm(osv.osv_memory): todo = False break if todo: - wf_service.trg_validate(uid, 'pos.order', order.id, 'done', cr) + self.pool.get('pos.order').signal_done(cr, uid, [order.id]) # Check if there is orders to reconcile their invoices ids = order_obj.search(cr, uid, [('state','=','invoiced'),('invoice_id.state','=','open')], context=context) diff --git a/addons/point_of_sale/wizard/pos_payment.py b/addons/point_of_sale/wizard/pos_payment.py index 0a1684ca9ca..5f90f267f7e 100644 --- a/addons/point_of_sale/wizard/pos_payment.py +++ b/addons/point_of_sale/wizard/pos_payment.py @@ -23,7 +23,6 @@ import time import pos_box_entries -from openerp import netsvc from openerp.osv import osv, fields from openerp.tools.translate import _ @@ -67,8 +66,7 @@ class pos_make_payment(osv.osv_memory): order_obj.add_payment(cr, uid, active_id, data, context=context) if order_obj.test_paid(cr, uid, [active_id]): - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'pos.order', active_id, 'paid', cr) + self.pool.get('pos.order').signal_paid(cr, uid, [active_id]) return {'type' : 'ir.actions.act_window_close' } ##self.print_report(cr, uid, ids, context=context) diff --git a/addons/point_of_sale/wizard/pos_return.py b/addons/point_of_sale/wizard/pos_return.py index d6dfdd1e183..f711a2e56ee 100644 --- a/addons/point_of_sale/wizard/pos_return.py +++ b/addons/point_of_sale/wizard/pos_return.py @@ -19,7 +19,6 @@ # ############################################################################## -from openerp import netsvc from openerp.osv import osv,fields from openerp.tools.translate import _ import time @@ -104,7 +103,6 @@ class pos_return(osv.osv_memory): property_obj= self.pool.get("ir.property") uom_obj =self. pool.get('product.uom') statementl_obj = self.pool.get('account.bank.statement.line') - wf_service = netsvc.LocalService("workflow") #Todo :Need to clean the code if active_id: data = self.browse(cr, uid, ids, context=context)[0] @@ -157,7 +155,7 @@ class pos_return(osv.osv_memory): 'amount': -amount, }) order_obj.write(cr,uid, [active_id,new_order], {'state': 'done'}) - wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr) + self.pool.get('stock.picking').signal_button_confirm(cr, uid, [new_picking]) picking_obj.force_assign(cr, uid, [new_picking], context) act = { 'domain': "[('id', 'in', ["+str(new_order)+"])]", @@ -200,7 +198,6 @@ class add_product(osv.osv_memory): date_cur=time.strftime('%Y-%m-%d') uom_obj = self.pool.get('product.uom') prod_obj=self.pool.get('product.product') - wf_service = netsvc.LocalService("workflow") order_obj.add_product(cr, uid, active_id, data['product_id'], data['quantity'], context=context) for order_id in order_obj.browse(cr, uid, [active_id], context=context): @@ -232,7 +229,7 @@ class add_product(osv.osv_memory): 'date':date_cur }) - wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr) + self.pool.get('stock.picking').signal_button_confirm(cr, uid, [new_picking]) picking_obj.force_assign(cr, uid, [new_picking], context) order_obj.write(cr,uid,active_id,{'picking_id':new_picking}) @@ -265,7 +262,6 @@ class add_product(osv.osv_memory): if return_id: data = return_boj.read(cr,uid,return_id,[])[0] - wf_service = netsvc.LocalService("workflow") self_data = self.browse(cr, uid, ids, context=context)[0] order_obj.add_product(cr, uid, active_ids[0], self_data.product_id.id, self_data.quantity, context=context) @@ -306,7 +302,7 @@ class add_product(osv.osv_memory): 'name':'%s (return)' % order_id.name, 'date':date_cur, }) - wf_service.trg_validate(uid, 'stock.picking',new_picking,'button_confirm', cr) + self.poolget('stock.picking').signal_button_confirm(cr, uid, [new_picking]) picking_obj.force_assign(cr, uid, [new_picking], context) obj=order_obj.browse(cr,uid, active_ids[0]) context.update({'return':'return'}) diff --git a/addons/point_of_sale/wizard/pos_session_opening.py b/addons/point_of_sale/wizard/pos_session_opening.py index 1aa4cb702c4..e0135de0cdb 100644 --- a/addons/point_of_sale/wizard/pos_session_opening.py +++ b/addons/point_of_sale/wizard/pos_session_opening.py @@ -1,6 +1,5 @@ #!/usr/bin/env python -from openerp import netsvc from openerp.osv import osv, fields from openerp.tools.translate import _ @@ -37,9 +36,8 @@ class pos_session_opening(osv.osv_memory): } def open_existing_session_cb_close(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") wizard = self.browse(cr, uid, ids[0], context=context) - wf_service.trg_validate(uid, 'pos.session', wizard.pos_session_id.id, 'cashbox_control', cr) + self.pool.get('pos.session').signal_cashbox_control(cr, uid, [wizard.pos_session_id.id]) return self.open_session_cb(cr, uid, ids, context) def open_session_cb(self, cr, uid, ids, context=None): From b5a9ccbe11af41f0b11e4b07ea6e10eecce72d69 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 12:17:40 +0530 Subject: [PATCH 42/60] [IMP] account: use the new signal_xxx methods instead of trg_validate and also update code with create_workflow and delete_workflow feature. bzr revid: tta@openerp.com-20130201064740-wxigbf179uf6dnnt --- addons/account/account_invoice.py | 10 +++------- addons/account/wizard/account_state_open.py | 3 +-- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 250a0446534..d7b2052305b 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -23,7 +23,6 @@ import time from lxml import etree import openerp.addons.decimal_precision as dp -from openerp import netsvc from openerp import pooler from openerp.osv import fields, osv, orm from openerp.tools.translate import _ @@ -80,11 +79,10 @@ class account_invoice(osv.osv): def _reconciled(self, cr, uid, ids, name, args, context=None): res = {} - wf_service = netsvc.LocalService("workflow") for inv in self.browse(cr, uid, ids, context=context): res[inv.id] = self.test_paid(cr, uid, [inv.id]) if not res[inv.id] and inv.state == 'paid': - wf_service.trg_validate(uid, 'account.invoice', inv.id, 'open_test', cr) + self.signal_open_test(cr, uid, [inv.id]) return res def _get_reference_type(self, cr, uid, context=None): @@ -638,10 +636,8 @@ class account_invoice(osv.osv): # go from canceled state to draft state def action_cancel_draft(self, cr, uid, ids, *args): self.write(cr, uid, ids, {'state':'draft'}) - wf_service = netsvc.LocalService("workflow") - for inv_id in ids: - wf_service.trg_delete(uid, 'account.invoice', inv_id, cr) - wf_service.trg_create(uid, 'account.invoice', inv_id, cr) + self.delete_workflow(cr, uid, ids) + self.create_workflow(cr, uid, ids) return True # Workflow stuff diff --git a/addons/account/wizard/account_state_open.py b/addons/account/wizard/account_state_open.py index b2cbdc4961b..5d0ae6b66bd 100644 --- a/addons/account/wizard/account_state_open.py +++ b/addons/account/wizard/account_state_open.py @@ -35,8 +35,7 @@ class account_state_open(osv.osv_memory): data_inv = obj_invoice.browse(cr, uid, context['active_ids'][0], context=context) if data_inv.reconciled: raise osv.except_osv(_('Warning!'), _('Invoice is already reconciled.')) - wf_service = netsvc.LocalService("workflow") - wf_service.trg_validate(uid, 'account.invoice', context['active_ids'][0], 'open_test', cr) + obj_invoice.signal_open_test(cr, uid, context['active_ids'][0]) return {'type': 'ir.actions.act_window_close'} account_state_open() From 27bd0dbfef0802bc621e5b80a82fcbbeea4a7ebe Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 12:29:48 +0530 Subject: [PATCH 43/60] [FIX] sale: did some changes bzr revid: cha@tinyerp.com-20130201065948-oae060lc7f25z1b3 --- addons/sale/sale.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 93556a3e7d5..c8ccfed1cba 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -418,7 +418,7 @@ class sale_order(osv.osv): This function prints the sales order and mark it as sent, so that we can see more easily the next step of the workflow ''' assert len(ids) == 1, 'This option should only be used for a single id at a time' - self.signal_quotation_sent(cr, uid, [ids[0]]) + self.signal_quotation_sent(cr, uid, ids) datas = { 'model': 'sale.order', 'ids': ids, @@ -986,7 +986,7 @@ class mail_compose_message(osv.Model): context = context or {} if context.get('default_model') == 'sale.order' and context.get('default_res_id') and context.get('mark_so_as_sent'): context = dict(context, mail_post_autofollow=True) - self.pool.get('sale.order').signal_quotation_sent(cr, uid, context['default_res_id']) + self.pool.get('sale.order').signal_quotation_sent(cr, uid, [context['default_res_id']]) return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 0b2a72f0a8e2ef74f53683fddeb7eddfaf60b9d4 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 12:36:28 +0530 Subject: [PATCH 44/60] [FIX] sale: did some changes bzr revid: cha@tinyerp.com-20130201070628-utvt502wrg5ynv44 --- addons/sale/wizard/sale_line_invoice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/sale/wizard/sale_line_invoice.py b/addons/sale/wizard/sale_line_invoice.py index 4b18c9a4b39..fe8432fc7db 100644 --- a/addons/sale/wizard/sale_line_invoice.py +++ b/addons/sale/wizard/sale_line_invoice.py @@ -102,7 +102,7 @@ class sale_order_line_make_invoice(osv.osv_memory): flag = False break if flag: - sales_order_obj.signal_manual_invoice(cr, uid, line.order_id.id) + sales_order_obj.signal_manual_invoice(cr, uid, [line.order_id.id]) sales_order_obj.write(cr, uid, [line.order_id.id], {'state': 'progress'}) if not invoices: From 75ffe3c712a8aabb6f8c1d00ed6642ba45439c4b Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 12:48:33 +0530 Subject: [PATCH 45/60] [IMP] account: use the new signal_xxx methods instead of trg_validate and also update code with create_workflow and delete_workflow feature. bzr revid: tta@openerp.com-20130201071833-x48y4zloat1diqa5 --- addons/account/wizard/account_invoice_refund.py | 5 +---- addons/account/wizard/account_invoice_state.py | 16 +++++++--------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py index 54d6c38a353..68937004dbc 100644 --- a/addons/account/wizard/account_invoice_refund.py +++ b/addons/account/wizard/account_invoice_refund.py @@ -23,7 +23,6 @@ import time from openerp.osv import fields, osv from openerp.tools.translate import _ -from openerp import netsvc class account_invoice_refund(osv.osv_memory): @@ -90,7 +89,6 @@ class account_invoice_refund(osv.osv_memory): account_m_line_obj = self.pool.get('account.move.line') mod_obj = self.pool.get('ir.model.data') act_obj = self.pool.get('ir.actions.act_window') - wf_service = netsvc.LocalService('workflow') inv_tax_obj = self.pool.get('account.invoice.tax') inv_line_obj = self.pool.get('account.invoice.line') res_users_obj = self.pool.get('res.users') @@ -161,8 +159,7 @@ class account_invoice_refund(osv.osv_memory): to_reconcile_ids[line.account_id.id] = [line.id] if type(line.reconcile_id) != osv.orm.browse_null: reconcile_obj.unlink(cr, uid, line.reconcile_id.id) - wf_service.trg_validate(uid, 'account.invoice', \ - refund.id, 'invoice_open', cr) + inv_obj.signal_invoice_open(cr, uid, [refund.id]) refund = inv_obj.browse(cr, uid, refund_id[0], context=context) for tmpline in refund.move_id.line_id: if tmpline.account_id.id == inv.account_id.id: diff --git a/addons/account/wizard/account_invoice_state.py b/addons/account/wizard/account_invoice_state.py index f79b4c046e3..9fab19ff42c 100644 --- a/addons/account/wizard/account_invoice_state.py +++ b/addons/account/wizard/account_invoice_state.py @@ -21,7 +21,6 @@ from openerp.osv import osv from openerp.tools.translate import _ -from openerp import netsvc from openerp import pooler class account_invoice_confirm(osv.osv_memory): @@ -33,16 +32,16 @@ class account_invoice_confirm(osv.osv_memory): _description = "Confirm the selected invoices" def invoice_confirm(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService('workflow') if context is None: context = {} pool_obj = pooler.get_pool(cr.dbname) - data_inv = pool_obj.get('account.invoice').read(cr, uid, context['active_ids'], ['state'], context=context) - + account_invoice_obj = pool_obj.get('account.invoice') + data_inv = account_invoice_obj.read(cr, uid, context['active_ids'], ['state'], context=context) for record in data_inv: if record['state'] not in ('draft','proforma','proforma2'): raise osv.except_osv(_('Warning!'), _("Selected invoice(s) cannot be confirmed as they are not in 'Draft' or 'Pro-Forma' state.")) - wf_service.trg_validate(uid, 'account.invoice', record['id'], 'invoice_open', cr) + account_invoice_obj.signal_invoice_open(cr, uid, [ record['id'] ]) + return {'type': 'ir.actions.act_window_close'} account_invoice_confirm() @@ -59,14 +58,13 @@ class account_invoice_cancel(osv.osv_memory): def invoice_cancel(self, cr, uid, ids, context=None): if context is None: context = {} - wf_service = netsvc.LocalService('workflow') pool_obj = pooler.get_pool(cr.dbname) - data_inv = pool_obj.get('account.invoice').read(cr, uid, context['active_ids'], ['state'], context=context) - + account_invoice_obj = pool_obj.get('account.invoice') + data_inv = account_invoice_obj.read(cr, uid, context['active_ids'], ['state'], context=context) for record in data_inv: if record['state'] in ('cancel','paid'): raise osv.except_osv(_('Warning!'), _("Selected invoice(s) cannot be cancelled as they are already in 'Cancelled' or 'Done' state.")) - wf_service.trg_validate(uid, 'account.invoice', record['id'], 'invoice_cancel', cr) + account_invoice_obj.signal_invoice_cancel(cr , uid, [record['id']]) return {'type': 'ir.actions.act_window_close'} account_invoice_cancel() From f3c4e973cd74c3be9f47cd254cef69dbbb652c80 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 14:14:04 +0530 Subject: [PATCH 46/60] [FIX] hr_holidays: did some changes. bzr revid: cha@tinyerp.com-20130201084404-uanxza6nx80l8pn9 --- addons/hr_holidays/hr_holidays.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index ce30951f7a9..c81c4062a73 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -27,7 +27,6 @@ from itertools import groupby from operator import attrgetter, itemgetter import math -from openerp import netsvc from openerp import tools from openerp.osv import fields, osv from openerp.tools.translate import _ @@ -304,9 +303,8 @@ class hr_holidays(osv.osv): 'manager_id': False, 'manager_id2': False, }) - for id in ids: - self.delete_workflow(cr, uid, [id]) - self.create_workflow(cr, uid, [id]) + self.delete_workflow(cr, uid, ids) + self.create_workflow(cr, uid, ids) to_unlink = [] for record in self.browse(cr, uid, ids, context=context): for record2 in record.linked_request_ids: From 19685c35a592408b223b8a6b1a7503c6ecb2cd26 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 14:36:21 +0530 Subject: [PATCH 47/60] [FIX] code corrected. bzr revid: tta@openerp.com-20130201090621-sym8rxhgofk6wg9p --- addons/mrp/mrp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index b8081f461d6..9f2d651d3d0 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -991,7 +991,7 @@ class mrp_production(osv.osv): destination_location_id=source_location_id, context=context) self._make_production_line_procurement(cr, uid, line, shipment_move_id, context=context) - self.registry('stock.picking').signal_button_confirm(cr, uid, [shipment_id]) + self.pool.get('stock.picking').signal_button_confirm(cr, uid, [shipment_id]) production.write({'state':'confirmed'}, context=context) return shipment_id From 95a8d5759e6b033978af444813d1436828e640ea Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 14:53:07 +0530 Subject: [PATCH 48/60] [FIX] hr_timesheet_sheet: did some changes. bzr revid: cha@tinyerp.com-20130201092307-yajxn97wnhz3xofj --- addons/hr_timesheet_sheet/hr_timesheet_sheet.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py index 5948c02bc5e..d4e71cedbf5 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py @@ -190,8 +190,7 @@ class hr_timesheet_sheet(osv.osv): def action_set_to_draft(self, cr, uid, ids, *args): self.write(cr, uid, ids, {'state': 'draft'}) - for id in ids: - self.create_workflow(cr, uid, [id]) + self.create_workflow(cr, uid, ids) return True def name_get(self, cr, uid, ids, context=None): From aded1b1840f3f98e68fcea07cdbc9cf99b4c57e1 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Fri, 1 Feb 2013 15:20:35 +0530 Subject: [PATCH 49/60] [FIX] code corrected for mrp.repair. bzr revid: tta@openerp.com-20130201095035-2hbkwbc9npxf74kr --- addons/mrp_repair/mrp_repair.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py index 7bb12b0402a..6c3f0ce21e1 100644 --- a/addons/mrp_repair/mrp_repair.py +++ b/addons/mrp_repair/mrp_repair.py @@ -544,7 +544,7 @@ class mrp_repair(osv.osv): 'tracking_id': False, 'state': 'assigned', }) - self.registry.signal_button_confirm(cr, uid, [picking]) + pick_obj.signal_button_confirm(cr, uid, [picking]) self.write(cr, uid, [repair.id], {'state': 'done', 'picking_id': picking}) res[repair.id] = picking else: From c2ffb389a3d6125461e63f0c85193931a9bdb76f Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 17:36:10 +0530 Subject: [PATCH 50/60] [FIX] sale: Made some changes bzr revid: cha@tinyerp.com-20130201120610-eotziutfkhsgd77o --- addons/sale/test/manual_order_policy.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/sale/test/manual_order_policy.yml b/addons/sale/test/manual_order_policy.yml index 905f04b01f5..d138e917a4d 100644 --- a/addons/sale/test/manual_order_policy.yml +++ b/addons/sale/test/manual_order_policy.yml @@ -42,7 +42,9 @@ - !python {model: sale.order}: | so = self.browse(cr, uid, ref("sale_order_2")) - self.pool.get('account.invoice').signal_invoice_open(cr, uid, so.invoice_ids) + account_invoice_obj = self.pool.get('account.invoice') + for invoice in so.invoice_ids: + account_invoice_obj.signal_invoice_open(cr, uid, [invoice.id]) - I pay the invoice. - From a500b5d24942ee1bc4b1746793fef54f3d800dab Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 18:49:55 +0530 Subject: [PATCH 51/60] [FIX] sale: Made some changes bzr revid: cha@tinyerp.com-20130201131955-nmcaji8bkblipxo3 --- addons/sale/test/cancel_order.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/sale/test/cancel_order.yml b/addons/sale/test/cancel_order.yml index d9d76f19935..982452bc50e 100644 --- a/addons/sale/test/cancel_order.yml +++ b/addons/sale/test/cancel_order.yml @@ -52,7 +52,9 @@ - !python {model: sale.order}: | invoice_ids = self.browse(cr, uid, ref("sale_order_8")).invoice_ids - self.pool.get('account.invoice').signal_invoice_cancel(cr, uid, invoice_ids) + account_invoice_obj = self.pool.get('account.invoice') + for invoice in invoice_ids: + account_invoice_obj.signal_invoice_cancel(cr, uid, [invoice.id]) - I check order status in "Invoice Exception" and related invoice is in cancel state. - From df29fec0906661bf4cd58f8e2d631b088c8c6193 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Fri, 1 Feb 2013 19:04:40 +0530 Subject: [PATCH 52/60] [FIX] sale_stock: Made some changes bzr revid: cha@tinyerp.com-20130201133440-fgo2lj4q22i4dpfb --- addons/sale_stock/sale_stock.py | 3 ++- addons/sale_stock/test/picking_order_policy.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index f63282b7a16..b121bf425b6 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -208,8 +208,9 @@ class sale_order(osv.osv): proc_ids = proc_obj.search(cr, uid, [('move_id', '=', mov.id)]) if proc_ids: self.pool.get('procurement.order').signal_button_check(cr, uid, proc_ids) + stock_obj = self.pool.get('stock.picking') for r in self.read(cr, uid, ids, ['picking_ids']): - self.pool.get('stock.picking').signal_button_cancel(cr, uid, r['picking_ids']) + stock_obj.signal_button_cancel(cr, uid, r['picking_ids']) return super(sale_order, self).action_cancel(cr, uid, ids, context=context) def action_wait(self, cr, uid, ids, context=None): diff --git a/addons/sale_stock/test/picking_order_policy.yml b/addons/sale_stock/test/picking_order_policy.yml index a28326598ac..406aaf0bf8a 100644 --- a/addons/sale_stock/test/picking_order_policy.yml +++ b/addons/sale_stock/test/picking_order_policy.yml @@ -133,8 +133,9 @@ - !python {model: sale.order}: | so = self.browse(cr, uid, ref("sale.sale_order_6")) + account_invoice_obj = self.pool.get('account.invoice') for invoice in so.invoice_ids: - self.pool.get('account.invoice').signal_invoice_open(cr, uid, [invoice.id]) + account_invoice_obj.signal_invoice_open(cr, uid, [invoice.id]) - I pay the invoice - From 85f6cb82390714e86b7b82e81afc0fee798eb7b6 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Mon, 4 Feb 2013 12:11:42 +0530 Subject: [PATCH 53/60] [IMP] POS: made some changes in code bzr revid: cha@tinyerp.com-20130204064142-xivaomscssibwsb8 --- addons/point_of_sale/point_of_sale.py | 4 ++-- addons/point_of_sale/wizard/pos_confirm.py | 2 +- addons/point_of_sale/wizard/pos_payment.py | 2 +- addons/point_of_sale/wizard/pos_return.py | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 9b9e5b951b4..7687ee3aa4e 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -694,7 +694,7 @@ class pos_order(osv.osv): if line.qty < 0: location_id, output_id = output_id, location_id - self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id]) + picking_obj.signal_button_confirm(cr, uid, [picking_id]) picking_obj.force_assign(cr, uid, [picking_id], context) return True @@ -704,7 +704,7 @@ class pos_order(osv.osv): """ stock_picking_obj = self.pool.get('stock.picking') for order in self.browse(cr, uid, ids, context=context): - self.pool.get('stock.picking').signal_button_cancel(cr, uid, [order.picking_id.id]) + stock_picking_obj.signal_button_cancel(cr, uid, [order.picking_id.id]) if stock_picking_obj.browse(cr, uid, order.picking_id.id, context=context).state <> 'cancel': raise osv.except_osv(_('Error!'), _('Unable to cancel the picking.')) self.write(cr, uid, ids, {'state': 'cancel'}, context=context) diff --git a/addons/point_of_sale/wizard/pos_confirm.py b/addons/point_of_sale/wizard/pos_confirm.py index ebc432a846f..f37bdd9f8b8 100644 --- a/addons/point_of_sale/wizard/pos_confirm.py +++ b/addons/point_of_sale/wizard/pos_confirm.py @@ -36,7 +36,7 @@ class pos_confirm(osv.osv_memory): todo = False break if todo: - self.pool.get('pos.order').signal_done(cr, uid, [order.id]) + order_obj.signal_done(cr, uid, [order.id]) # Check if there is orders to reconcile their invoices ids = order_obj.search(cr, uid, [('state','=','invoiced'),('invoice_id.state','=','open')], context=context) diff --git a/addons/point_of_sale/wizard/pos_payment.py b/addons/point_of_sale/wizard/pos_payment.py index 5f90f267f7e..47814761b20 100644 --- a/addons/point_of_sale/wizard/pos_payment.py +++ b/addons/point_of_sale/wizard/pos_payment.py @@ -66,7 +66,7 @@ class pos_make_payment(osv.osv_memory): order_obj.add_payment(cr, uid, active_id, data, context=context) if order_obj.test_paid(cr, uid, [active_id]): - self.pool.get('pos.order').signal_paid(cr, uid, [active_id]) + order_obj.signal_paid(cr, uid, [active_id]) return {'type' : 'ir.actions.act_window_close' } ##self.print_report(cr, uid, ids, context=context) diff --git a/addons/point_of_sale/wizard/pos_return.py b/addons/point_of_sale/wizard/pos_return.py index f711a2e56ee..b4e0e7b2041 100644 --- a/addons/point_of_sale/wizard/pos_return.py +++ b/addons/point_of_sale/wizard/pos_return.py @@ -155,7 +155,7 @@ class pos_return(osv.osv_memory): 'amount': -amount, }) order_obj.write(cr,uid, [active_id,new_order], {'state': 'done'}) - self.pool.get('stock.picking').signal_button_confirm(cr, uid, [new_picking]) + picking_obj.signal_button_confirm(cr, uid, [new_picking]) picking_obj.force_assign(cr, uid, [new_picking], context) act = { 'domain': "[('id', 'in', ["+str(new_order)+"])]", @@ -229,7 +229,7 @@ class add_product(osv.osv_memory): 'date':date_cur }) - self.pool.get('stock.picking').signal_button_confirm(cr, uid, [new_picking]) + picking_obj.signal_button_confirm(cr, uid, [new_picking]) picking_obj.force_assign(cr, uid, [new_picking], context) order_obj.write(cr,uid,active_id,{'picking_id':new_picking}) @@ -302,7 +302,7 @@ class add_product(osv.osv_memory): 'name':'%s (return)' % order_id.name, 'date':date_cur, }) - self.poolget('stock.picking').signal_button_confirm(cr, uid, [new_picking]) + picking_obj.signal_button_confirm(cr, uid, [new_picking]) picking_obj.force_assign(cr, uid, [new_picking], context) obj=order_obj.browse(cr,uid, active_ids[0]) context.update({'return':'return'}) From f33d11f0a46a15ed2b8c3e82f523b1dd2d641366 Mon Sep 17 00:00:00 2001 From: "Ajay Chauhan (OpenERP)" Date: Mon, 4 Feb 2013 12:45:26 +0530 Subject: [PATCH 54/60] [IMP] sale_stock: made some changes in code bzr revid: cha@tinyerp.com-20130204071526-6ey9lfunu4mbnjhn --- addons/sale_stock/sale_stock.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index b121bf425b6..95404ec0a93 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -207,7 +207,7 @@ class sale_order(osv.osv): for mov in pick.move_lines: proc_ids = proc_obj.search(cr, uid, [('move_id', '=', mov.id)]) if proc_ids: - self.pool.get('procurement.order').signal_button_check(cr, uid, proc_ids) + proc_obj.signal_button_check(cr, uid, proc_ids) stock_obj = self.pool.get('stock.picking') for r in self.read(cr, uid, ids, ['picking_ids']): stock_obj.signal_button_cancel(cr, uid, r['picking_ids']) @@ -394,8 +394,8 @@ class sale_order(osv.osv): self.ship_recreate(cr, uid, order, line, move_id, proc_id) if picking_id: - self.pool.get('stock.picking').signal_button_confirm(cr, uid, [picking_id]) - self.pool.get('procurement.order').signal_button_confirm(cr, uid, proc_ids) + picking_obj.signal_button_confirm(cr, uid, [picking_id]) + procurement_obj.signal_button_confirm(cr, uid, proc_ids) val = {} if order.state == 'shipping_except': From 4f8081e1fd0f62d32a1bb8d217230c043aa54a2e Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Wed, 13 Feb 2013 04:36:44 +0000 Subject: [PATCH 55/60] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20130213043644-y36h7n26zs7lwifx --- addons/base_import/i18n/hr.po | 211 ++- addons/mail/i18n/hu.po | 219 +-- addons/product/i18n/lo.po | 2479 +++++++++++++++++++++++++++++++++ 3 files changed, 2797 insertions(+), 112 deletions(-) create mode 100644 addons/product/i18n/lo.po diff --git a/addons/base_import/i18n/hr.po b/addons/base_import/i18n/hr.po index 7a119f19aaf..bc644bdfad5 100644 --- a/addons/base_import/i18n/hr.po +++ b/addons/base_import/i18n/hr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-14 22:33+0000\n" -"Last-Translator: Goran Kliska \n" +"PO-Revision-Date: 2013-02-12 22:11+0000\n" +"Last-Translator: Davor Bojkić \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-22 06:07+0000\n" -"X-Generator: Launchpad (build 16378)\n" +"X-Launchpad-Export-Date: 2013-02-13 04:36+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: base_import #. openerp-web @@ -29,7 +29,7 @@ msgstr "Dohvati sve moguće vrijednosti" #: code:addons/base_import/static/src/xml/import.xml:71 #, python-format msgid "Need to import data from an other application?" -msgstr "" +msgstr "Potreban je uvoz podataka iz druge aplikacije?" #. module: base_import #. openerp-web @@ -47,6 +47,15 @@ msgid "" "give \n" " you an example for Products and their Categories." msgstr "" +"Kada koristite vanjske ID-eve, možete uvesti csv datoteke \n" +" sa kolonom \"External ID\" " +"definirate vanjski ID svakog zapisa \n" +" koji uvozite. Tada ćete biti " +"u mogućnosti napraviti referencu \n" +" na taj zapis sa kolonama tipa " +"\"polje/External ID\". Sljedeća dvije \n" +" csv datoteke daju primjer za " +"proizvode i njihove kategorije." #. module: base_import #. openerp-web @@ -56,13 +65,16 @@ msgid "" "How to export/import different tables from an SQL \n" " application to OpenERP?" msgstr "" +"Kako izvesti/uvesti različite tablice iz SQL \n" +" " +"programa u OpenERP" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:310 #, python-format msgid "Relation Fields" -msgstr "" +msgstr "Relacijska polja" #. module: base_import #. openerp-web @@ -72,6 +84,9 @@ msgid "" "Country/Database ID: the unique OpenERP ID for a \n" " record, defined by the ID postgresql column" msgstr "" +"Država/ID baze: jedinstveni OpenERP ID za \n" +" " +" zapis, definran kolonom postgres kolonom ID" #. module: base_import #. openerp-web @@ -87,6 +102,16 @@ msgid "" "\n" " have a unique Database ID)" msgstr "" +"Korištenje \n" +" Država/ID " +"BAze : ovo bi trebali rijetko koristiti\n" +" za " +"označavanje. Ovo je većinom korišteno od strane programera\n" +" jer je " +"glavna prednost ovoga to što nikad nema konflikata \n" +" (možete " +"imati više zapisa istog naziva, ali uvjek sa jedinstvenim IDentifikatorom u " +"Bazi)" #. module: base_import #. openerp-web @@ -96,6 +121,9 @@ msgid "" "For the country \n" " Belgium, you can use one of these 3 ways to import:" msgstr "" +"Za državu \n" +" " +" Belgiju, možete koristiti jedan od ova 3 načina uza uvoz:" #. module: base_import #. openerp-web @@ -121,13 +149,20 @@ msgid "" "companies) TO \n" " '/tmp/company.csv' with CSV HEADER;" msgstr "" +"kopirajte \n" +" (select " +"'company_'||id as \"External ID\",company_name\n" +" as " +"\"Name\",'True' as \"Is a Company\" from companies) TO\n" +" " +"'/tmp/company.csv' with CSV HEADER;" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:206 #, python-format msgid "CSV file for Manufacturer, Retailer" -msgstr "" +msgstr "CSV datoteka za Proizvođače, Veletrgovce" #. module: base_import #. openerp-web @@ -139,6 +174,11 @@ msgid "" "\n" " data from a third party application." msgstr "" +"Koristi \n" +" Država/Vanjski ID. " +"koristite vanjski ID kad uvozite \n" +" podatke iz drugih " +"aplikacija." #. module: base_import #. openerp-web @@ -152,7 +192,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:80 #, python-format msgid "XXX/External ID" -msgstr "" +msgstr "XXX/Vanjski ID" #. module: base_import #. openerp-web @@ -181,6 +221,14 @@ msgid "" "\n" " See the following question." msgstr "" +"Primjetite da vaša csv datoteka \n" +" ima tabulator za " +"odvajanje, a OpenERP neće \n" +" primjetiti ta odvajanja. " +"Morate promjineiti format \n" +" zapisa u vašem tabličnom " +"kalkulatoru. \n" +" Vidi sljedeće pitanje." #. module: base_import #. openerp-web @@ -199,7 +247,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:239 #, python-format msgid "Can I import several times the same record?" -msgstr "" +msgstr "Mogu li isti zapis uvesti nekoliko puta?" #. module: base_import #. openerp-web @@ -213,7 +261,7 @@ msgstr "Potvrdi" #: code:addons/base_import/static/src/xml/import.xml:55 #, python-format msgid "Map your data to OpenERP" -msgstr "" +msgstr "Mapirajte vaše podatke na OpenERP" #. module: base_import #. openerp-web @@ -224,6 +272,10 @@ msgid "" " the easiest way when your data come from CSV files \n" " that have been created manually." msgstr "" +"Korištenje Države: ovo je \n" +" najlakši način kada vaši " +"podaci dolaze iz csv datoteka\n" +" koje su sastavljene ručno." #. module: base_import #. openerp-web @@ -233,6 +285,8 @@ msgid "" "What's the difference between Database ID and \n" " External ID?" msgstr "" +"Koja je razlika izmeži ID Baze i \n" +" vanjski ID?" #. module: base_import #. openerp-web @@ -244,25 +298,30 @@ msgid "" "\n" " you 3 different fields to import:" msgstr "" +"Na primjer, \n" +" referenciranje države " +"kontakta, OpenERP predlaže \n" +" 3 različita polja za " +"uvoz :" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:175 #, python-format msgid "What can I do if I have multiple matches for a field?" -msgstr "" +msgstr "Što da radim ako imam više istih zapisa za polje?" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:302 #, python-format msgid "External ID,Name,Is a Company" -msgstr "" +msgstr "Vanjski ID , Naziv, Je Tvrtka" #. module: base_import #: field:base_import.tests.models.preview,somevalue:0 msgid "Some Value" -msgstr "" +msgstr "Neka vrijednost" #. module: base_import #. openerp-web @@ -272,6 +331,9 @@ msgid "" "The following CSV file shows how to import \n" " suppliers and their respective contacts" msgstr "" +"Sljedeća csv datoteka pokazuje kako uvesti \n" +" " +" dobavljače i njihove pripadne kontakte" #. module: base_import #. openerp-web @@ -281,6 +343,9 @@ msgid "" "How can I change the CSV file format options when \n" " saving in my spreadsheet application?" msgstr "" +"Kako da promijenim opcije csv formata \n" +" " +"kada spremam datoteku u tabličnom kalkulatoru?" #. module: base_import #. openerp-web @@ -301,6 +366,21 @@ msgid "" "orignial \n" " database)." msgstr "" +"kako možete vidjeti iz ove datoteke, Fabien i Laurence \n" +" " +" rade za organizaciju Biggies (company_1), a \n" +" " +" Eric radi za Organi. Pozezivanje osoba i " +"organizacija se radi \n" +" " +" korištenjem Vanjskog ID-a organizacije. Morali smo " +"staviti prefix \n" +" " +" naziva tablice na Vanjski ID da izbjegnemo konflikt " +"istog ID-a osobe \n" +" " +" i organizacije (osoba_1 i organizacija_1 koji dijele " +"isti ID u originalnoj bazi)." #. module: base_import #. openerp-web @@ -315,13 +395,20 @@ msgid "" "\n" " '/tmp/person.csv' with CSV" msgstr "" +"kopirajte \n" +" (select'person_'||id as \"External ID\",person_name " +"as\n" +" \"Name\",'False' as \"Is a " +"Company\",'company_'||company_id\n" +" as \"Related Company/External ID\" from persons) TO\n" +" '/tmp/person.csv' with CSV" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:148 #, python-format msgid "Country: Belgium" -msgstr "" +msgstr "Država : Belgija" #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_char_stillreadonly @@ -342,7 +429,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:233 #, python-format msgid "Suppliers and their respective contacts" -msgstr "" +msgstr "Dobavljači i njihovi pripadni kontakti" #. module: base_import #. openerp-web @@ -375,6 +462,11 @@ msgid "" "\n" " PSQL:" msgstr "" +"Za stvaranje csv datoteke za osobe povezane sa \n" +" " +" organizacijama, koristimo ljedeću SQL naredbu u \n" +" " +" PSQL:" #. module: base_import #. openerp-web @@ -386,6 +478,13 @@ msgid "" " (in 'Save As' dialog box > click 'Tools' dropdown \n" " list > Encoding tab)." msgstr "" +"Microsoft Excell će vam omogućiti \n" +" da promjenite kodnu stranu " +"jedino kod snimanja \n" +" (U 'Save as' dijalogu > " +"kliknite na 'Tools' padajući izbornik > \n" +" odaberite 'Encoding' " +"karticu)" #. module: base_import #: field:base_import.tests.models.preview,othervalue:0 @@ -402,6 +501,13 @@ msgid "" " later, it's thus good practice to specify it\n" " whenever possible" msgstr "" +"će također biti korišteno za ažuriranje originalnog \n" +" " +"uvoza, ako kasnije trebate ponovo uvesti \n" +" " +"izmjenjene podatke, zato se smatra dobrom praksom \n" +" " +"koristiti kad god je moguće" #. module: base_import #. openerp-web @@ -411,6 +517,9 @@ msgid "" "file to import. If you need a sample importable file, you\n" " can use the export tool to generate one." msgstr "" +"datoteka za uvoz. Ako trebate uzorak datoteke koja se može uvesti,\n" +" možete koristiti " +"alat za izvoz da napravite jednu." #. module: base_import #. openerp-web @@ -419,7 +528,7 @@ msgstr "" msgid "" "Country/Database \n" " ID: 21" -msgstr "" +msgstr "Država/Baza" #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_char @@ -429,14 +538,14 @@ msgstr "" #. module: base_import #: help:base_import.import,file:0 msgid "File to check and/or import, raw binary (not base64)" -msgstr "" +msgstr "Datoteke za provjeru i/ili uvoz, raw binary ( ne base64)" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:230 #, python-format msgid "Purchase orders with their respective purchase order lines" -msgstr "" +msgstr "Narudžbe i njihove pripadne stavke" #. module: base_import #. openerp-web @@ -448,6 +557,14 @@ msgid "" " field corresponding to the column. This makes imports\n" " simpler especially when the file has many columns." msgstr "" +"Ako datoteka sadrži\n" +" nazive kolona, OpenERP može " +"pokušati \n" +" automatski odrediti polja koja " +"odgovaraju kolonama. \n" +" Ovo čini uvoz jednostavnijim " +"pogotovo ako datoteka ima \n" +" mnogo kolona." #. module: base_import #. openerp-web @@ -464,6 +581,8 @@ msgid "" ". The issue is\n" " usually an incorrect file encoding." msgstr "" +". Problem je \n" +" obično netočna kodna strana." #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_m2o_required @@ -519,7 +638,7 @@ msgstr "ID baze podataka" #: code:addons/base_import/static/src/xml/import.xml:313 #, python-format msgid "It will produce the following CSV file:" -msgstr "" +msgstr "Će napraviti sljedeću csv datoteku:" #. module: base_import #. openerp-web @@ -548,7 +667,7 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:360 #, python-format msgid "Import preview failed due to:" -msgstr "" +msgstr "Predpregled uvoza nije uspio zbog:" #. module: base_import #. openerp-web @@ -643,7 +762,7 @@ msgstr "Uvezi CSV datoteku" #: code:addons/base_import/static/src/js/import.js:74 #, python-format msgid "Quoting:" -msgstr "" +msgstr "Navođenje:" #. module: base_import #: model:ir.model,name:base_import.model_base_import_tests_models_m2o_required_related @@ -670,7 +789,7 @@ msgstr "Uvoz" #: code:addons/base_import/static/src/js/import.js:407 #, python-format msgid "Here are the possible values:" -msgstr "" +msgstr "Evo mogućih vrijednosti:" #. module: base_import #. openerp-web @@ -687,13 +806,15 @@ msgid "" "A single column was found in the file, this often means the file separator " "is incorrect" msgstr "" +"U datoteci je nađena samo jedna kolona, to često znači da je format " +"razdjelnika neispravan." #. module: base_import #. openerp-web #: code:addons/base_import/static/src/xml/import.xml:293 #, python-format msgid "dump of such a PostgreSQL database" -msgstr "" +msgstr "dump takve PostgereSQL baze" #. module: base_import #. openerp-web @@ -710,6 +831,9 @@ msgid "" "The following CSV file shows how to import purchase \n" " orders with their respective purchase order lines:" msgstr "" +"Sljedeća csv datoteka pokazuje kako uvesti \n" +" naloge za nabavu sa " +"njihovm pripadnim stavkama :" #. module: base_import #. openerp-web @@ -719,6 +843,9 @@ msgid "" "What can I do when the Import preview table isn't \n" " displayed correctly?" msgstr "" +"Što mogu uraditi kada se tablice Predpregleda za uvoz\n" +" " +" ne prikazuju ispravno?" #. module: base_import #: field:base_import.tests.models.char,value:0 @@ -770,7 +897,7 @@ msgstr "" #: code:addons/base_import/static/src/js/import.js:396 #, python-format msgid "(%d more)" -msgstr "" +msgstr "(%d više)" #. module: base_import #. openerp-web @@ -829,7 +956,7 @@ msgstr "" #: code:addons/base_import/static/src/js/import.js:373 #, python-format msgid "Everything seems valid." -msgstr "" +msgstr "Sve se čini u redu." #. module: base_import #. openerp-web @@ -914,6 +1041,15 @@ msgid "" " will set the EMPTY value in the field, instead of \n" " assigning the default value." msgstr "" +"Ako ne postavite sva polja u vašoj csv datoteci, \n" +" OpenERP će " +"dodijeliti zadane vrijednosti za svako \n" +" nedefinirano " +"polje, ali ako postavite polja sa praznim virjenostima u csv-u \n" +" OpenERP će " +"postaviti vrijednost tih polja na \"PRAZNO\", umjesto da im \n" +" dodijeli zadane " +"vrijednosti" #. module: base_import #. openerp-web @@ -930,6 +1066,9 @@ msgid "" "What happens if I do not provide a value for a \n" " specific field?" msgstr "" +"Što se dešava ako ne dajem vrijednost za \n" +" " +"pojedino polje?" #. module: base_import #. openerp-web @@ -957,6 +1096,11 @@ msgid "" "spreadsheet \n" " application." msgstr "" +"Ovo vam \n" +" omogućuje da " +"koristite alat za Uvoz/Izvoz OpenERP-a \n" +" za izmjenu serija " +"zapisa u vašem omiljenom tabličnom kalkulatoru" #. module: base_import #. openerp-web @@ -993,14 +1137,14 @@ msgstr "" #: code:addons/base_import/static/src/xml/import.xml:169 #, python-format msgid "CSV file for categories" -msgstr "" +msgstr "CSV datoteka za kategorije" #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:309 #, python-format msgid "Normal Fields" -msgstr "" +msgstr "Normalna polja" #. module: base_import #. openerp-web @@ -1012,6 +1156,11 @@ msgid "" " identifier from the original application and\n" " map it to the" msgstr "" +"kako bi ponovo napravili relacije između\n" +" " +"različitih zapisa, trebali bi koristiti jedinstveni\n" +" " +"identifikator iz originalnog zapisa i njega mapirati na" #. module: base_import #. openerp-web @@ -1054,7 +1203,7 @@ msgstr "Naziv" #: code:addons/base_import/static/src/xml/import.xml:80 #, python-format msgid "to the original unique identifier." -msgstr "" +msgstr "originalni jedinstveni identifikator" #. module: base_import #. openerp-web @@ -1131,14 +1280,14 @@ msgstr "Vanjski ID" #: code:addons/base_import/static/src/xml/import.xml:39 #, python-format msgid "File Format Options…" -msgstr "" +msgstr "Opcije Formata datoteka..." #. module: base_import #. openerp-web #: code:addons/base_import/static/src/js/import.js:392 #, python-format msgid "between rows %d and %d" -msgstr "" +msgstr "između reda %d i %d" #. module: base_import #. openerp-web @@ -1163,4 +1312,4 @@ msgstr "" #. module: base_import #: field:base_import.import,file:0 msgid "File" -msgstr "" +msgstr "Datoteka" diff --git a/addons/mail/i18n/hu.po b/addons/mail/i18n/hu.po index 65385c23ef0..3d3117c1b51 100644 --- a/addons/mail/i18n/hu.po +++ b/addons/mail/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:04+0000\n" -"PO-Revision-Date: 2012-12-21 10:09+0000\n" -"Last-Translator: Herczeg Péter \n" +"PO-Revision-Date: 2013-02-12 17:52+0000\n" +"Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-22 06:04+0000\n" -"X-Generator: Launchpad (build 16378)\n" +"X-Launchpad-Export-Date: 2013-02-13 04:36+0000\n" +"X-Generator: Launchpad (build 16491)\n" #. module: mail #: view:mail.followers:0 msgid "Followers Form" -msgstr "" +msgstr "Követők űrlapjai" #. module: mail #: model:ir.model,name:mail.model_publisher_warranty_contract @@ -45,7 +45,7 @@ msgstr "Üzenet címzettjei" #. module: mail #: help:mail.message.subtype,default:0 msgid "Activated by default when subscribing." -msgstr "" +msgstr "Alapértelmezetten aktiválva lesz a feliratkozásnál." #. module: mail #: view:mail.message:0 @@ -70,6 +70,8 @@ msgid "" "The name of the email alias, e.g. 'jobs' if you want to catch emails for " "" msgstr "" +"Az e-mail álnáv neve, pl. 'állások' ha az " +"helyről akarjuk az e-maileket megkapni" #. module: mail #: model:ir.actions.act_window,name:mail.action_email_compose_message_wizard @@ -82,7 +84,7 @@ msgstr "Email írás" #: code:addons/mail/static/src/xml/mail.xml:132 #, python-format msgid "Add them into recipients and followers" -msgstr "" +msgstr "A címzettekhez és a követőkhőz adja hozzá" #. module: mail #: view:mail.group:0 @@ -111,6 +113,8 @@ msgid "" "Email address of the sender. This field is set when no matching partner is " "found for incoming emails." msgstr "" +"A küldő e-mail címei. Ez a mező lesz beállítva, ha nem talált egyező " +"partnert a bejövő levelekhez." #. module: mail #: model:ir.model,name:mail.model_mail_compose_message @@ -122,12 +126,12 @@ msgstr "Email varázsló" #: code:addons/mail/static/src/xml/mail_followers.xml:23 #, python-format msgid "Add others" -msgstr "" +msgstr "Hozzáadás" #. module: mail #: field:mail.message.subtype,parent_id:0 msgid "Parent" -msgstr "" +msgstr "Szülő" #. module: mail #: field:mail.group,message_unread:0 @@ -149,6 +153,9 @@ msgid "" "Members of those groups will automatically added as followers. Note that " "they will be able to manage their subscription manually if necessary." msgstr "" +"Ezeknek a csoportoknak a tagjai automatikusan hozzá lesznek adva a " +"követőkhöz. Megjegyezve, hogy ha szükséges szerkeszteni tudják a " +"feliratkozásukat." #. module: mail #. openerp-web @@ -161,7 +168,7 @@ msgstr "Valóban törölni kívánja ezt az üzenetet?" #: view:mail.message:0 #: field:mail.notification,read:0 msgid "Read" -msgstr "" +msgstr "Olvas" #. module: mail #: view:mail.group:0 @@ -173,7 +180,7 @@ msgstr "Csoportok keresése" #: code:addons/mail/static/src/js/mail_followers.js:156 #, python-format msgid "followers" -msgstr "Követők" +msgstr "követők" #. module: mail #: code:addons/mail/mail_message.py:726 @@ -188,18 +195,21 @@ msgid "" "image, with aspect ratio preserved. Use this field in form views or some " "kanban views." msgstr "" +"Közepes méretű fotó a csoportról. Automatikusa át lesz méretezve 128x128px " +"képpé, az arányok megtartásával. Használja ezt a mezőt az osztályozott " +"nézetban és egyes kanban nézetekben." #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:194 #, python-format msgid "Uploading error" -msgstr "" +msgstr "Feltöltési hiba" #. module: mail #: model:mail.group,name:mail.group_support msgid "Support" -msgstr "" +msgstr "Támogatás" #. module: mail #: code:addons/mail/mail_message.py:727 @@ -210,6 +220,10 @@ msgid "" "\n" "(Document type: %s, Operation: %s)" msgstr "" +"Az igényelt műveletet nem lehetett végrehajtani biztonsági korlátok miatt. " +"Kérem vegye fel a kapcsolatot a rendszer adminisztrátorral.\n" +"\n" +"(Dokumentum típus: %s, Művelet: %s)" #. module: mail #: view:mail.mail:0 @@ -227,24 +241,24 @@ msgstr "Szál" #: code:addons/mail/static/src/xml/mail.xml:37 #, python-format msgid "Open the full mail composer" -msgstr "" +msgstr "Nyissa meg a taljes levél szerkesztőt" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:37 #, python-format msgid "ò" -msgstr "" +msgstr "ò" #. module: mail #: field:base.config.settings,alias_domain:0 msgid "Alias Domain" -msgstr "" +msgstr "Domain álnév" #. module: mail #: field:mail.group,group_ids:0 msgid "Auto Subscription" -msgstr "" +msgstr "Auto feliratkozás" #. module: mail #: field:mail.mail,references:0 @@ -256,12 +270,12 @@ msgstr "Hivatkozások" #: code:addons/mail/static/src/xml/mail.xml:188 #, python-format msgid "No messages." -msgstr "" +msgstr "Nincs üzenet." #. module: mail #: model:ir.model,name:mail.model_mail_group msgid "Discussion group" -msgstr "" +msgstr "Tárgyalási csoport" #. module: mail #. openerp-web @@ -276,7 +290,7 @@ msgstr "feltöltés" #: code:addons/mail/static/src/xml/mail_followers.xml:52 #, python-format msgid "more." -msgstr "" +msgstr "több." #. module: mail #: help:mail.compose.message,type:0 @@ -285,6 +299,8 @@ msgid "" "Message type: email for email message, notification for system message, " "comment for other messages such as user replies" msgstr "" +"Üzenet típus: email az email üzenetre, figyelmeztetés egy rendszer üzenetre, " +"hozzászólás egy másik üzenetre mint felhasználói válaszok" #. module: mail #: help:mail.message.subtype,relation_field:0 @@ -293,6 +309,8 @@ msgid "" "automatic subscription on a related document. The field is used to compute " "getattr(related_document.relation_field)." msgstr "" +"A mező az ide vonatkozó modell hivatkozására használt az altípus modellhez, " +"ha automatikus feliratkozást használ az ide vonatkozó dokumentumhoz." #. module: mail #: selection:mail.mail,state:0 @@ -308,25 +326,25 @@ msgstr "Válaszcím" #: code:addons/mail/wizard/invite.py:36 #, python-format msgid "
You have been invited to follow %s.
" -msgstr "" +msgstr "
Önt meghívták, hogy kövesse: %s
" #. module: mail #: help:mail.group,message_unread:0 #: help:mail.thread,message_unread:0 #: help:res.partner,message_unread:0 msgid "If checked new messages require your attention." -msgstr "" +msgstr "Ha be van jelölve, akkor figyelje az új üzeneteket." #. module: mail #: field:mail.group,image_medium:0 msgid "Medium-sized photo" -msgstr "" +msgstr "Közepes méretű fotó" #. module: mail #: model:ir.actions.client,name:mail.action_mail_to_me_feeds #: model:ir.ui.menu,name:mail.mail_tomefeeds msgid "To: me" -msgstr "" +msgstr "Címzett: én" #. module: mail #: field:mail.message.subtype,name:0 @@ -344,28 +362,28 @@ msgstr "Automatikus törlés" #: view:mail.group:0 #, python-format msgid "Unfollow" -msgstr "Követés leállításA" +msgstr "Követés leállítása" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:261 #, python-format msgid "show one more message" -msgstr "" +msgstr "mutass még egy üzenetet" #. module: mail #: code:addons/mail/mail_mail.py:71 #: code:addons/mail/res_users.py:79 #, python-format msgid "Invalid Action!" -msgstr "" +msgstr "Érvénytelen lépés!" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:25 #, python-format msgid "User img" -msgstr "" +msgstr "Felhasználói kép" #. module: mail #: model:ir.actions.act_window,name:mail.action_view_mail_mail @@ -378,7 +396,7 @@ msgstr "E-mailek" #. module: mail #: field:mail.followers,partner_id:0 msgid "Related Partner" -msgstr "" +msgstr "Kapcsolódó partner" #. module: mail #: help:mail.group,message_summary:0 @@ -388,6 +406,8 @@ msgid "" "Holds the Chatter summary (number of messages, ...). This summary is " "directly in html format in order to be inserted in kanban views." msgstr "" +"A chettelés összegzést megállítja (üzenetek száma,...). Ez az összegzés " +"direkt HTML formátumú ahhoz hogy beilleszthető legyen a kanban nézetekbe." #. module: mail #: help:mail.alias,alias_model_id:0 @@ -396,11 +416,14 @@ msgid "" "incoming email that does not reply to an existing record will cause the " "creation of a new record of this model (e.g. a Project Task)" msgstr "" +"A modell (OpenERP Documentum féle) amivel ez az álnév összhangban van. " +"Bármely beérkező email ami nem válaszol a meglévő rekordra az egy, a " +"modellhez tartozó új rekord létrehozást okozza (pl. a Projekt feladat)" #. module: mail #: field:mail.message.subtype,relation_field:0 msgid "Relation field" -msgstr "" +msgstr "Reléciós/összefüggés mező" #. module: mail #: selection:mail.compose.message,type:0 @@ -463,7 +486,7 @@ msgstr "Küldés" #: code:addons/mail/static/src/js/mail_followers.js:152 #, python-format msgid "No followers" -msgstr "" +msgstr "Nincs követő" #. module: mail #: view:mail.mail:0 @@ -481,7 +504,7 @@ msgstr "Sikertelen" #: field:res.partner,message_follower_ids:0 #, python-format msgid "Followers" -msgstr "" +msgstr "Követők" #. module: mail #: model:ir.actions.client,name:mail.action_mail_archives_feeds @@ -495,7 +518,7 @@ msgstr "Archívum" #: code:addons/mail/static/src/xml/mail.xml:94 #, python-format msgid "Delete this attachment" -msgstr "" +msgstr "Törli ezt a mellékletet" #. module: mail #. openerp-web @@ -510,41 +533,41 @@ msgstr "Válasz" #: code:addons/mail/static/src/js/mail_followers.js:154 #, python-format msgid "One follower" -msgstr "" +msgstr "Egy követő" #. module: mail #: field:mail.compose.message,type:0 #: field:mail.message,type:0 msgid "Type" -msgstr "" +msgstr "Típus" #. module: mail #: selection:mail.compose.message,type:0 #: view:mail.mail:0 #: selection:mail.message,type:0 msgid "Email" -msgstr "" +msgstr "E-mail" #. module: mail #: field:ir.ui.menu,mail_group_id:0 msgid "Mail Group" -msgstr "" +msgstr "Levelezési csoport" #. module: mail #: selection:res.partner,notification_email_send:0 msgid "Comments and Emails" -msgstr "" +msgstr "Megjegyzések és e-mailok" #. module: mail #: field:mail.alias,alias_defaults:0 msgid "Default Values" -msgstr "" +msgstr "Alapértelmezett értékek" #. module: mail #: code:addons/mail/res_users.py:100 #, python-format msgid "%s has joined the %s network." -msgstr "" +msgstr "%s csatlakozott a %s hálózathoz." #. module: mail #: help:mail.group,image_small:0 @@ -553,6 +576,9 @@ msgid "" "image, with aspect ratio preserved. Use this field anywhere a small image is " "required." msgstr "" +"Kis mérető fotó a csoportról. Automatikusan át lesz méretezve 64x64px képpé, " +"az arány megtartása mellett. Használja ezt a mezőt bárhol ahol kisméretű " +"képet szeretne." #. module: mail #: view:mail.compose.message:0 @@ -565,41 +591,41 @@ msgstr "Címzettek" #: code:addons/mail/static/src/xml/mail.xml:127 #, python-format msgid "<<<" -msgstr "" +msgstr "<<<" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:43 #, python-format msgid "Write to the followers of this document..." -msgstr "" +msgstr "Bejegyzés írás a dokumentum követőinek..." #. module: mail #: field:mail.group,group_public_id:0 msgid "Authorized Group" -msgstr "" +msgstr "Jogosult csoport" #. module: mail #: view:mail.group:0 msgid "Join Group" -msgstr "" +msgstr "Csatlakozás a csoporthoz" #. module: mail #: help:mail.mail,email_from:0 msgid "Message sender, taken from user preferences." -msgstr "" +msgstr "Üzenet küldő, a felhasználói meghatározásokból vett." #. module: mail #: code:addons/mail/wizard/invite.py:39 #, python-format msgid "
You have been invited to follow a new document.
" -msgstr "" +msgstr "
Önt meghívták, hogy kövessen egy új dokumentumot.
" #. module: mail #: field:mail.compose.message,parent_id:0 #: field:mail.message,parent_id:0 msgid "Parent Message" -msgstr "" +msgstr "Szülő üzenet" #. module: mail #: field:mail.compose.message,res_id:0 @@ -607,7 +633,7 @@ msgstr "" #: field:mail.message,res_id:0 #: field:mail.wizard.invite,res_id:0 msgid "Related Document ID" -msgstr "" +msgstr "Kapcsolódó dokument azonosító ID" #. module: mail #: model:ir.actions.client,help:mail.action_mail_to_me_feeds @@ -619,23 +645,29 @@ msgid "" "

\n" " " msgstr "" +"

\n" +"Nincs privát üzenet.\n" +"

\n" +"Ez a lista az önnek küldött üzeneteket tartalmazza.\n" +"

\n" +" " #. module: mail #: model:mail.group,name:mail.group_rd msgid "R&D" -msgstr "" +msgstr "R&D" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:61 #, python-format msgid "/web/binary/upload_attachment" -msgstr "" +msgstr "/web/binary/upload_attachment" #. module: mail #: model:ir.model,name:mail.model_mail_thread msgid "Email Thread" -msgstr "" +msgstr "E-mail összafűzés" #. module: mail #: view:mail.mail:0 @@ -647,19 +679,19 @@ msgstr "Speciális" #: code:addons/mail/static/src/xml/mail.xml:226 #, python-format msgid "Move to Inbox" -msgstr "" +msgstr "Bejövő üzenetekbe mozgatás" #. module: mail #: code:addons/mail/wizard/mail_compose_message.py:165 #, python-format msgid "Re:" -msgstr "" +msgstr "Vissza:" #. module: mail #: field:mail.compose.message,to_read:0 #: field:mail.message,to_read:0 msgid "To read" -msgstr "" +msgstr "Elolvas" #. module: mail #: code:addons/mail/res_users.py:79 @@ -668,19 +700,21 @@ msgid "" "You may not create a user. To create new users, you should use the " "\"Settings > Users\" menu." msgstr "" +"Talán nem hozott létre felhasználót. Egy felhasználó létrehozásához, " +"használja a \"Beállítások > Felhasználók\" menüt." #. module: mail #: help:mail.followers,res_model:0 #: help:mail.wizard.invite,res_model:0 msgid "Model of the followed resource" -msgstr "" +msgstr "A követett forrás modellje" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:286 #, python-format msgid "like" -msgstr "" +msgstr "hasonló" #. module: mail #: view:mail.compose.message:0 @@ -694,12 +728,12 @@ msgstr "Mégsem" #: code:addons/mail/static/src/xml/mail.xml:44 #, python-format msgid "Share with my followers..." -msgstr "" +msgstr "Üzenet a követőimnek..." #. module: mail #: field:mail.notification,partner_id:0 msgid "Contact" -msgstr "" +msgstr "Kapcsolat" #. module: mail #: view:mail.group:0 @@ -707,21 +741,23 @@ msgid "" "Only the invited followers can read the\n" " discussions on this group." msgstr "" +"Csak a meghívott követők olvashatják ennek a\n" +" csoportnak a beszélgetését." #. module: mail #: model:ir.model,name:mail.model_ir_ui_menu msgid "ir.ui.menu" -msgstr "" +msgstr "ir.ui.menu" #. module: mail #: view:mail.message:0 msgid "Has attachments" -msgstr "" +msgstr "Vannak mellékletei" #. module: mail #: view:mail.mail:0 msgid "on" -msgstr "" +msgstr "ezen:" #. module: mail #: code:addons/mail/mail_message.py:916 @@ -730,6 +766,8 @@ msgid "" "The following partners chosen as recipients for the email have no email " "address linked :" msgstr "" +"A következő partnerek lettek kiválasztva mint címzettek, azokhoz az e-" +"mailekhez amelyekhez nem lett kapcsolva e-mail cím :" #. module: mail #: help:mail.alias,alias_defaults:0 @@ -737,11 +775,13 @@ msgid "" "A Python dictionary that will be evaluated to provide default values when " "creating new records for this alias." msgstr "" +"Egy Python szótár aminak a kiértékelésével alapértékeket biztosít, ha ehhez " +"az álnévhez új rekordokat hoz létre." #. module: mail #: model:ir.model,name:mail.model_mail_message_subtype msgid "Message subtypes" -msgstr "" +msgstr "Üzenet altípusok" #. module: mail #: help:mail.compose.message,notified_partner_ids:0 @@ -749,13 +789,15 @@ msgstr "" msgid "" "Partners that have a notification pushing this message in their mailboxes" msgstr "" +"Partnerek akiknek van egy értesítésük ennek az üzenetnek a levelező " +"ládájukba való mozgatására" #. module: mail #: selection:mail.compose.message,type:0 #: view:mail.mail:0 #: selection:mail.message,type:0 msgid "Comment" -msgstr "" +msgstr "Megjegyzés" #. module: mail #: model:ir.actions.client,help:mail.action_mail_inbox_feeds @@ -771,18 +813,28 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Szép munka! Az ön postafiókja üres.\n" +"

\n" +" A \"Beérkezett üzenetek\" az önnek küldött privát " +"üzeneteket vagy email-eket,\n" +" továbbá az ön által követett dokumentumokhoz vagy " +"emberekhez kapcsolódó\n" +" információkat tartalmaz.\n" +"

\n" +" " #. module: mail #: field:mail.mail,notification:0 msgid "Is Notification" -msgstr "" +msgstr "Ez egy üzenet" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:170 #, python-format msgid "Compose a new message" -msgstr "" +msgstr "Új üzenet küldés" #. module: mail #: view:mail.mail:0 @@ -795,6 +847,7 @@ msgstr "Küldés most" msgid "" "Unable to send email, please configure the sender's email address or alias." msgstr "" +"Nem tud e-mailt küldeni, kérem állítsa be a küldő e-mail címét vagy álnevet" #. module: mail #: help:res.users,alias_id:0 @@ -802,11 +855,13 @@ msgid "" "Email address internally associated with this user. Incoming emails will " "appear in the user's notifications." msgstr "" +"E-mail cím belsőleg összekapcsolva ezzel a felhasználóval. Bejövő e-mail-ok " +"megjelennek a felhasználó értesítéseinél." #. module: mail #: field:mail.group,image:0 msgid "Photo" -msgstr "" +msgstr "Fénykép" #. module: mail #. openerp-web @@ -815,13 +870,13 @@ msgstr "" #: view:mail.wizard.invite:0 #, python-format msgid "or" -msgstr "" +msgstr "vagy" #. module: mail #: help:mail.compose.message,vote_user_ids:0 #: help:mail.message,vote_user_ids:0 msgid "Users that voted for this message" -msgstr "" +msgstr "Felhasználók akik szavaztak erre az üzenetre" #. module: mail #: help:mail.group,alias_id:0 @@ -829,6 +884,8 @@ msgid "" "The email address associated with this group. New emails received will " "automatically create new topics." msgstr "" +"Az ezzel a csoporttal társított e-mail cím. Új beérkezett e-mailek " +"automatikusan új témákat hoznak létre." #. module: mail #: view:mail.mail:0 @@ -844,7 +901,7 @@ msgstr "E-mail keresésée" #: field:mail.compose.message,child_ids:0 #: field:mail.message,child_ids:0 msgid "Child Messages" -msgstr "" +msgstr "Alcsoportba rakott üzenetek" #. module: mail #: field:mail.alias,alias_user_id:0 @@ -927,12 +984,12 @@ msgstr "" #. module: mail #: view:mail.wizard.invite:0 msgid "Add Followers" -msgstr "" +msgstr "Követők hozzáadása" #. module: mail #: view:mail.compose.message:0 msgid "Followers of selected items and" -msgstr "" +msgstr "A kijelölt elemek követői és" #. module: mail #: field:mail.alias,alias_force_thread_id:0 @@ -942,7 +999,7 @@ msgstr "" #. module: mail #: model:ir.ui.menu,name:mail.mail_group_root msgid "My Groups" -msgstr "" +msgstr "Saját csoportok" #. module: mail #: model:ir.actions.client,help:mail.action_mail_archives_feeds @@ -1063,7 +1120,7 @@ msgstr "Dátum" #: code:addons/mail/static/src/xml/mail.xml:34 #, python-format msgid "Post" -msgstr "" +msgstr "Elküld" #. module: mail #: view:mail.mail:0 @@ -1075,14 +1132,14 @@ msgstr "Kiterjesztett szűrők…" #: code:addons/mail/static/src/xml/mail.xml:107 #, python-format msgid "To:" -msgstr "" +msgstr "Címzett:" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail.xml:175 #, python-format msgid "Write to my followers" -msgstr "" +msgstr "Bejegyzés írás a követőimnek" #. module: mail #: model:ir.model,name:mail.model_res_groups @@ -1169,7 +1226,7 @@ msgstr "" #: code:addons/mail/static/src/xml/mail_followers.xml:13 #, python-format msgid "Following" -msgstr "" +msgstr "Követés" #. module: mail #: sql_constraint:mail.alias:0 @@ -1257,14 +1314,14 @@ msgstr "" #. module: mail #: model:mail.message.subtype,name:mail.mt_comment msgid "Discussions" -msgstr "" +msgstr "Hozzászólások" #. module: mail #. openerp-web #: code:addons/mail/static/src/xml/mail_followers.xml:11 #, python-format msgid "Follow" -msgstr "" +msgstr "Követ" #. module: mail #: field:mail.group,name:0 @@ -1413,7 +1470,7 @@ msgstr "" #: model:ir.actions.act_window,name:mail.action_view_groups #: model:ir.ui.menu,name:mail.mail_allgroups msgid "Join a group" -msgstr "" +msgstr "Csoporthoz csatlakozás" #. module: mail #: model:ir.actions.client,help:mail.action_mail_group_feeds @@ -1492,7 +1549,7 @@ msgstr "" #: model:ir.actions.client,name:mail.action_mail_star_feeds #: model:ir.ui.menu,name:mail.mail_starfeeds msgid "To-do" -msgstr "" +msgstr "Feladat" #. module: mail #: view:mail.alias:0 @@ -1598,7 +1655,7 @@ msgstr "" #. module: mail #: selection:mail.group,public:0 msgid "Private" -msgstr "" +msgstr "Privát" #. module: mail #: model:ir.actions.client,help:mail.action_mail_star_feeds diff --git a/addons/product/i18n/lo.po b/addons/product/i18n/lo.po new file mode 100644 index 00000000000..0f63a200e88 --- /dev/null +++ b/addons/product/i18n/lo.po @@ -0,0 +1,2479 @@ +# Lao translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:06+0000\n" +"PO-Revision-Date: 2013-02-12 05:53+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Lao \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-02-13 04:36+0000\n" +"X-Generator: Launchpad (build 16491)\n" + +#. module: product +#: field:product.packaging,rows:0 +msgid "Number of Layers" +msgstr "ຈໍານວນຊັ້ນ" + +#. module: product +#: help:product.pricelist.item,base:0 +msgid "Base price for computation." +msgstr "ລາຄາພື້ນຖານໃນການຄິດໄລ່" + +#. module: product +#: help:product.product,seller_qty:0 +msgid "This is minimum quantity to purchase from Main Supplier." +msgstr "ນີ້ແມ່ນປະລິມານໜ້ອຍສຸດທີ່ຊື້ຈາກຜູ້ຈໍາໜ່າຍ" + +#. module: product +#: model:product.template,name:product.product_product_34_product_template +msgid "Webcam" +msgstr "ກ້ອງຖ່າຍຮູບ" + +#. module: product +#: field:product.product,incoming_qty:0 +msgid "Incoming" +msgstr "ກໍາລັງມາຮອດ" + +#. module: product +#: view:product.product:0 +msgid "Product Name" +msgstr "ຊື່ຜະລິດຕະພັນ" + +#. module: product +#: view:product.template:0 +msgid "Second Unit of Measure" +msgstr "ຫົວໜ່ວຍສໍາຮອງ" + +#. module: product +#: help:res.partner,property_product_pricelist:0 +msgid "" +"This pricelist will be used, instead of the default one, for sales to the " +"current partner" +msgstr "" +"ລາຍການລາຄານີ້ຈະຖຶກນໍາໃຊ້, ແທນທີ່ຈະຕັ້ງຄ່າເທົ່າກັບໜື່ງ " +"ເພື່ອຂາຍໃຫ້ແກ່ລູກຄ້າໃນປະຈຸບັນ" + +#. module: product +#: field:product.product,seller_qty:0 +msgid "Supplier Quantity" +msgstr "ຈໍານວນຜູ້ສະໜອງ" + +#. module: product +#: selection:product.template,mes_type:0 +msgid "Fixed" +msgstr "ກໍານົດ" + +#. module: product +#: model:product.template,name:product.product_product_10_product_template +msgid "Mouse, Optical" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Base Prices" +msgstr "" + +#. module: product +#: field:product.pricelist.item,name:0 +msgid "Rule Name" +msgstr "" + +#. module: product +#: help:product.template,list_price:0 +msgid "" +"Base price to compute the customer price. Sometimes called the catalog price." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_3_product_template +msgid "PC Assemble SC234" +msgstr "" + +#. module: product +#: help:product.product,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: product +#: code:addons/product/pricelist.py:179 +#: code:addons/product/product.py:208 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: product +#: field:product.product,image_small:0 +msgid "Small-sized image" +msgstr "" + +#. module: product +#: code:addons/product/product.py:176 +#, python-format +msgid "" +"Conversion from Product UoM %s to Default UoM %s is not possible as they " +"both belong to different Category!." +msgstr "" + +#. module: product +#: selection:product.template,cost_method:0 +msgid "Average Price" +msgstr "" + +#. module: product +#: help:product.pricelist.item,name:0 +msgid "Explicit rule name for this pricelist line." +msgstr "" + +#. module: product +#: field:product.template,uos_coeff:0 +msgid "Unit of Measure -> UOS Coeff" +msgstr "" + +#. module: product +#: field:product.price_list,price_list:0 +msgid "PriceList" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_4_product_template +msgid "PC Assemble SC349" +msgstr "" + +#. module: product +#: help:product.product,seller_delay:0 +msgid "" +"This is the average delay in days between the purchase order confirmation " +"and the reception of goods for this product and for the default supplier. It " +"is used by the scheduler to order requests based on reordering delays." +msgstr "" + +#. module: product +#: model:product.pricelist.version,name:product.ver0 +msgid "Default Public Pricelist Version" +msgstr "" + +#. module: product +#: selection:product.template,cost_method:0 +msgid "Standard Price" +msgstr "" + +#. module: product +#: model:product.pricelist.type,name:product.pricelist_type_sale +#: field:res.partner,property_product_pricelist:0 +msgid "Sale Pricelist" +msgstr "" + +#. module: product +#: view:product.template:0 +#: field:product.template,type:0 +msgid "Product Type" +msgstr "" + +#. module: product +#: code:addons/product/product.py:412 +#, python-format +msgid "Products: " +msgstr "" + +#. module: product +#: constraint:decimal.precision:0 +msgid "" +"Error! You cannot define the decimal precision of 'Account' as greater than " +"the rounding factor of the company's main currency" +msgstr "" + +#. module: product +#: field:product.category,parent_id:0 +msgid "Parent Category" +msgstr "ໜວດຫຼັກ" + +#. module: product +#: model:product.template,description:product.product_product_33_product_template +msgid "Headset for laptop PC with USB connector." +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_all +msgid "All products" +msgstr "ຜະລິດຕະພັນທັງໝັດ" + +#. module: product +#: model:process.node,note:product.process_node_supplier0 +msgid "Supplier name, price, product code, ..." +msgstr "ຊື່ຜູ້ສະໜອງ, ລາຄາ, ລະຫັດຜະລິດຕະພັນ" + +#. module: product +#: constraint:res.currency:0 +msgid "" +"Error! You cannot define a rounding factor for the company's main currency " +"that is smaller than the decimal precision of 'Account'." +msgstr "" + +#. module: product +#: help:product.product,outgoing_qty:0 +msgid "" +"Quantity of products that are planned to leave.\n" +"In a context with a single Stock Location, this includes goods leaving this " +"Location, or any of its children.\n" +"In a context with a single Warehouse, this includes goods leaving the Stock " +"Location of this Warehouse, or any of its children.\n" +"In a context with a single Shop, this includes goods leaving the Stock " +"Location of the Warehouse of this Shop, or any of its children.\n" +"Otherwise, this includes goods leaving any Stock Location with 'internal' " +"type." +msgstr "" + +#. module: product +#: model:product.template,description_sale:product.product_product_42_product_template +msgid "" +"Office Editing Software with word processing, spreadsheets, presentations, " +"graphics, and databases..." +msgstr "" + +#. module: product +#: field:product.product,seller_id:0 +msgid "Main Supplier" +msgstr "ຜູ້ສະໜອງຫຼັກ" + +#. module: product +#: model:ir.actions.act_window,name:product.product_ul_form_action +#: model:ir.model,name:product.model_product_packaging +#: model:ir.ui.menu,name:product.menu_product_ul_form_action +#: view:product.packaging:0 +#: view:product.product:0 +#: view:product.ul:0 +msgid "Packaging" +msgstr "ການຫຸ້ມຫໍ່" + +#. module: product +#: help:product.product,active:0 +msgid "" +"If unchecked, it will allow you to hide the product without removing it." +msgstr "" + +#. module: product +#: view:product.product:0 +#: field:product.template,categ_id:0 +#: field:product.uom,category_id:0 +msgid "Category" +msgstr "ໝວດ" + +#. module: product +#: model:product.template,name:product.product_product_25_product_template +msgid "Laptop E5023" +msgstr "" + +#. module: product +#: help:product.packaging,ul_qty:0 +msgid "The number of packages by layer" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_30_product_template +msgid "Pen drive, SP-4" +msgstr "" + +#. module: product +#: field:product.packaging,qty:0 +msgid "Quantity by Package" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_29_product_template +msgid "Pen drive, SP-2" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +#: field:product.template,state:0 +msgid "Status" +msgstr "" + +#. module: product +#: help:product.template,categ_id:0 +msgid "Select category for the current product" +msgstr "" + +#. module: product +#: field:product.product,outgoing_qty:0 +msgid "Outgoing" +msgstr "" + +#. module: product +#: model:product.price.type,name:product.list_price +#: field:product.product,lst_price:0 +msgid "Public Price" +msgstr "" + +#. module: product +#: field:product.price_list,qty5:0 +msgid "Quantity-5" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_ul_form_action +msgid "" +"

\n" +" Click to add a new packaging type.\n" +"

\n" +" The packaging type define the dimensions as well as the " +"number\n" +" of products per package. This will ensure salesperson sell " +"the\n" +" right number of products according to the package selected.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: field:product.template,product_manager:0 +msgid "Product Manager" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_7_product_template +msgid "17” LCD Monitor" +msgstr "" + +#. module: product +#: field:product.supplierinfo,product_name:0 +msgid "Supplier Product Name" +msgstr "" + +#. module: product +#: view:product.pricelist:0 +msgid "Products Price Search" +msgstr "" + +#. module: product +#: view:product.template:0 +#: field:product.template,description_sale:0 +msgid "Sale Description" +msgstr "" + +#. module: product +#: help:product.packaging,length:0 +msgid "The length of the package" +msgstr "" + +#. module: product +#: field:product.product,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: product +#: help:product.template,weight_net:0 +msgid "The net weight in Kg." +msgstr "" + +#. module: product +#: field:pricelist.partnerinfo,min_quantity:0 +#: field:product.supplierinfo,qty:0 +msgid "Quantity" +msgstr "" + +#. module: product +#: view:product.price_list:0 +msgid "Calculate Product Price per Unit Based on Pricelist Version." +msgstr "" + +#. module: product +#: help:product.pricelist.item,product_id:0 +msgid "" +"Specify a product if this rule only applies to one product. Keep empty " +"otherwise." +msgstr "" + +#. module: product +#: model:product.uom.categ,name:product.product_uom_categ_kgm +msgid "Weight" +msgstr "" + +#. module: product +#: help:product.product,virtual_available:0 +msgid "" +"Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming)\n" +"In a context with a single Stock Location, this includes goods stored in " +"this location, or any of its children.\n" +"In a context with a single Warehouse, this includes goods stored in the " +"Stock Location of this Warehouse, or any of its children.\n" +"In a context with a single Shop, this includes goods stored in the Stock " +"Location of the Warehouse of this Shop, or any of its children.\n" +"Otherwise, this includes goods stored in any Stock Location with 'internal' " +"type." +msgstr "" + +#. module: product +#: field:product.packaging,height:0 +msgid "Height" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Procurements" +msgstr "" + +#. module: product +#: model:res.groups,name:product.group_mrp_properties +msgid "Manage Properties of Product" +msgstr "" + +#. module: product +#: help:product.uom,factor:0 +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category:\n" +"1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_pricelist_partnerinfo +msgid "pricelist.partnerinfo" +msgstr "" + +#. module: product +#: field:product.price_list,qty2:0 +msgid "Quantity-2" +msgstr "" + +#. module: product +#: field:product.price_list,qty3:0 +msgid "Quantity-3" +msgstr "" + +#. module: product +#: field:product.price_list,qty1:0 +msgid "Quantity-1" +msgstr "" + +#. module: product +#: field:product.price_list,qty4:0 +msgid "Quantity-4" +msgstr "" + +#. module: product +#: view:res.partner:0 +msgid "Sales & Purchases" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_44_product_template +msgid "GrapWorks Software" +msgstr "" + +#. module: product +#: model:product.uom.categ,name:product.uom_categ_wtime +msgid "Working Time" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_42_product_template +msgid "Office Suite" +msgstr "" + +#. module: product +#: field:product.template,mes_type:0 +msgid "Measure Type" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_32_product_template +msgid "Headset standard" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_day +msgid "Day(s)" +msgstr "ມື້" + +#. module: product +#: help:product.product,incoming_qty:0 +msgid "" +"Quantity of products that are planned to arrive.\n" +"In a context with a single Stock Location, this includes goods arriving to " +"this Location, or any of its children.\n" +"In a context with a single Warehouse, this includes goods arriving to the " +"Stock Location of this Warehouse, or any of its children.\n" +"In a context with a single Shop, this includes goods arriving to the Stock " +"Location of the Warehouse of this Shop, or any of its children.\n" +"Otherwise, this includes goods arriving to any Stock Location with " +"'internal' type." +msgstr "" + +#. module: product +#: constraint:product.template:0 +msgid "" +"Error: The default Unit of Measure and the purchase Unit of Measure must be " +"in the same category." +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_uom_categ +msgid "Product uom categ" +msgstr "" + +#. module: product +#: model:product.ul,name:product.product_ul_box +msgid "Box 20x20x40" +msgstr "" + +#. module: product +#: field:product.template,warranty:0 +msgid "Warranty" +msgstr "ຮັບປະກັນ" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Price Computation" +msgstr "" + +#. module: product +#: constraint:product.product:0 +msgid "" +"You provided an invalid \"EAN13 Barcode\" reference. You may use the " +"\"Internal Reference\" field instead." +msgstr "" + +#. module: product +#: model:res.groups,name:product.group_purchase_pricelist +msgid "Purchase Pricelists" +msgstr "ລາຍການລາຄາຊື້" + +#. module: product +#: model:product.template,name:product.product_product_5_product_template +msgid "PC Assemble + Custom (PC on Demand)" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_27_product_template +msgid "Custom Laptop based on customer's requirement." +msgstr "" + +#. module: product +#: help:product.packaging,width:0 +msgid "The width of the package" +msgstr "" + +#. module: product +#: code:addons/product/product.py:361 +#, python-format +msgid "Unit of Measure categories Mismatch!" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_36_product_template +msgid "Blank DVD-RW" +msgstr "" + +#. module: product +#: selection:product.category,type:0 +msgid "View" +msgstr "ເບຶ່ງ" + +#. module: product +#: model:ir.actions.act_window,name:product.product_template_action_tree +msgid "Product Templates" +msgstr "" + +#. module: product +#: field:product.category,parent_left:0 +msgid "Left Parent" +msgstr "" + +#. module: product +#: help:product.pricelist.item,price_max_margin:0 +msgid "Specify the maximum amount of margin over the base price." +msgstr "" + +#. module: product +#: constraint:product.pricelist.item:0 +msgid "" +"Error! You cannot assign the Main Pricelist as Other Pricelist in PriceList " +"Item!" +msgstr "" + +#. module: product +#: view:product.price_list:0 +msgid "or" +msgstr "ຫຼື" + +#. module: product +#: constraint:product.packaging:0 +msgid "Error: Invalid ean code" +msgstr "" + +#. module: product +#: field:product.pricelist.item,min_quantity:0 +msgid "Min. Quantity" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_12_product_template +msgid "Mouse, Wireless" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_22_product_template +msgid "Processor Core i5 2.70 Ghz" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_price_type +msgid "Price Type" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Max. Margin" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Base Price" +msgstr "" + +#. module: product +#: help:product.supplierinfo,name:0 +msgid "Supplier of this product" +msgstr "" + +#. module: product +#: help:product.pricelist.version,active:0 +msgid "" +"When a version is duplicated it is set to non active, so that the dates do " +"not overlaps with original version. You should change the dates and " +"reactivate the pricelist" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_18_product_template +msgid "HDD SH-2" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_17_product_template +msgid "HDD SH-1" +msgstr "" + +#. module: product +#: field:product.supplierinfo,name:0 +#: field:product.template,seller_ids:0 +msgid "Supplier" +msgstr "ຜູ້ສະໜອງ" + +#. module: product +#: help:product.template,cost_method:0 +msgid "" +"Standard Price: The cost price is manually updated at the end of a specific " +"period (usually every year). \n" +"Average Price: The cost price is recomputed at each incoming shipment." +msgstr "" + +#. module: product +#: field:product.product,qty_available:0 +msgid "Quantity On Hand" +msgstr "" + +#. module: product +#: field:product.price.type,name:0 +msgid "Price Name" +msgstr "" + +#. module: product +#: help:product.product,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: product +#: field:product.product,ean13:0 +msgid "EAN13 Barcode" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.action_product_price_list +#: model:ir.model,name:product.model_product_price_list +#: view:product.price_list:0 +#: report:product.pricelist:0 +#: field:product.pricelist.version,pricelist_id:0 +msgid "Price List" +msgstr "ລາຍການລາຄາ" + +#. module: product +#: field:product.product,virtual_available:0 +msgid "Forecasted Quantity" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Purchase" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_33_product_template +msgid "Headset USB" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Suppliers" +msgstr "" + +#. module: product +#: model:res.groups,name:product.group_sale_pricelist +msgid "Sales Pricelists" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "New Price =" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_7 +msgid "Accessories" +msgstr "" + +#. module: product +#: model:process.transition,name:product.process_transition_supplierofproduct0 +msgid "Supplier of the product" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_28_product_template +msgid "External Hard disk" +msgstr "" + +#. module: product +#: help:product.template,standard_price:0 +msgid "" +"Cost price of the product used for standard stock valuation in accounting " +"and used as a base price on purchase orders." +msgstr "" + +#. module: product +#: field:product.category,child_id:0 +msgid "Child Categories" +msgstr "" + +#. module: product +#: field:product.pricelist.version,date_end:0 +msgid "End Date" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_litre +msgid "Liter(s)" +msgstr "" + +#. module: product +#: view:product.price_list:0 +msgid "Print" +msgstr "" + +#. module: product +#: view:product.product:0 +#: field:product.ul,type:0 +#: field:product.uom,uom_type:0 +msgid "Type" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_pricelist_action2 +#: model:ir.actions.act_window,name:product.product_pricelist_action_for_purchase +#: model:ir.ui.menu,name:product.menu_product_pricelist_action2 +#: model:ir.ui.menu,name:product.menu_product_pricelist_main +msgid "Pricelists" +msgstr "" + +#. module: product +#: field:product.product,partner_ref:0 +msgid "Customer ref" +msgstr "" + +#. module: product +#: field:product.pricelist.type,key:0 +msgid "Key" +msgstr "" + +#. module: product +#: model:ir.actions.report.xml,name:product.report_product_pricelist +#: model:ir.model,name:product.model_product_pricelist +#: field:product.product,pricelist_id:0 +#: view:product.supplierinfo:0 +msgid "Pricelist" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_hour +msgid "Hour(s)" +msgstr "" + +#. module: product +#: selection:product.template,state:0 +msgid "In Development" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_res_partner +msgid "Partner" +msgstr "" + +#. module: product +#: model:process.transition,note:product.process_transition_supplierofproduct0 +msgid "" +"1 or several supplier(s) can be linked to a product. All information stands " +"in the product form." +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_round:0 +msgid "Price Rounding" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_1_product_template +msgid "On Site Monitoring" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "days" +msgstr "" + +#. module: product +#: model:process.node,name:product.process_node_supplier0 +#: view:product.supplierinfo:0 +msgid "Supplier Information" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_res_currency +#: field:product.price.type,currency_id:0 +#: report:product.pricelist:0 +#: field:product.pricelist,currency_id:0 +msgid "Currency" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_46_product_template +msgid "Datacard" +msgstr "" + +#. module: product +#: help:product.template,uos_coeff:0 +msgid "" +"Coefficient to convert default Unit of Measure to Unit of Sale\n" +" uos = uom * coeff" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_category_action_form +#: model:ir.ui.menu,name:product.menu_product_category_action_form +#: view:product.category:0 +msgid "Product Categories" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Procurement & Locations" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_20_product_template +msgid "Motherboard I9P57" +msgstr "" + +#. module: product +#: field:product.packaging,weight:0 +msgid "Total Package Weight" +msgstr "" + +#. module: product +#: help:product.packaging,code:0 +msgid "The code of the transport unit." +msgstr "" + +#. module: product +#: view:product.price.type:0 +msgid "Products Price Type" +msgstr "" + +#. module: product +#: field:product.product,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: product +#: field:product.product,price_extra:0 +msgid "Variant Price Extra" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "" + +#. module: product +#: help:product.uom,factor_inv:0 +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category:\n" +"1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: product +#: view:product.template:0 +#: field:product.template,description_purchase:0 +msgid "Purchase Description" +msgstr "" + +#. module: product +#: constraint:product.pricelist.version:0 +msgid "You cannot have 2 pricelist versions that overlap!" +msgstr "" + +#. module: product +#: help:product.pricelist.item,min_quantity:0 +msgid "" +"Specify the minimum quantity that needs to be bought/sold for the rule to " +"apply." +msgstr "" + +#. module: product +#: help:product.pricelist.version,date_start:0 +msgid "First valid date for the version." +msgstr "" + +#. module: product +#: help:product.supplierinfo,delay:0 +msgid "" +"Lead time in days between the confirmation of the purchase order and the " +"reception of the products in your warehouse. Used by the scheduler for " +"automatic computation of the purchase order planning." +msgstr "" + +#. module: product +#: model:product.template,description_sale:product.product_product_3_product_template +msgid "" +"17\" LCD Monitor\n" +"Processor AMD 8-Core\n" +"512MB RAM\n" +"HDD SH-1" +msgstr "" + +#. module: product +#: selection:product.template,type:0 +msgid "Stockable Product" +msgstr "" + +#. module: product +#: field:product.packaging,code:0 +msgid "Code" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_27_product_template +msgid "Laptop Customized" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_ul +msgid "Shipping Unit" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_35_product_template +msgid "Blank CD" +msgstr "" + +#. module: product +#: field:pricelist.partnerinfo,suppinfo_id:0 +msgid "Partner Information" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_normal_action_sell +msgid "" +"

\n" +" Click to define a new product.\n" +"

\n" +" You must define a product for everything you sell, whether " +"it's\n" +" a physical product, a consumable or a service you offer to\n" +" customers.\n" +"

\n" +" The product form contains information to simplify the sale\n" +" process: price, notes in the quotation, accounting data,\n" +" procurement methods, etc.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: view:product.price_list:0 +msgid "Cancel" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_37_product_template +msgid "All in one hi-speed printer with fax and scanner." +msgstr "" + +#. module: product +#: help:product.supplierinfo,min_qty:0 +msgid "" +"The minimal quantity to purchase to this supplier, expressed in the supplier " +"Product Unit of Measure if not empty, in the default unit of measure of the " +"product otherwise." +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Information" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Products Listprices Items" +msgstr "" + +#. module: product +#: view:product.packaging:0 +msgid "Other Info" +msgstr "" + +#. module: product +#: field:product.pricelist.version,items_id:0 +msgid "Price List Items" +msgstr "" + +#. module: product +#: field:pricelist.partnerinfo,price:0 +msgid "Unit Price" +msgstr "" + +#. module: product +#: field:product.category,parent_right:0 +msgid "Right Parent" +msgstr "" + +#. module: product +#: field:product.product,price:0 +msgid "Price" +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_surcharge:0 +msgid "Price Surcharge" +msgstr "" + +#. module: product +#: field:product.product,code:0 +#: field:product.product,default_code:0 +msgid "Internal Reference" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_8_product_template +msgid "USB Keyboard, QWERTY" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_9 +msgid "Softwares" +msgstr "" + +#. module: product +#: field:product.product,packaging:0 +msgid "Logistical Units" +msgstr "" + +#. module: product +#: field:product.category,complete_name:0 +#: field:product.category,name:0 +#: field:product.pricelist.type,name:0 +#: field:product.pricelist.version,name:0 +#: field:product.product,name_template:0 +#: field:product.template,name:0 +#: field:product.ul,name:0 +#: field:product.uom.categ,name:0 +msgid "Name" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_4 +msgid "Computers" +msgstr "" + +#. module: product +#: help:product.product,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_kgm +msgid "kg" +msgstr "" + +#. module: product +#: selection:product.template,state:0 +msgid "Obsolete" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_km +msgid "km" +msgstr "" + +#. module: product +#: field:product.template,standard_price:0 +msgid "Cost" +msgstr "" + +#. module: product +#: help:product.category,sequence:0 +msgid "" +"Gives the sequence order when displaying a list of product categories." +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_dozen +msgid "Dozen(s)" +msgstr "" + +#. module: product +#: field:product.uom,factor:0 +#: field:product.uom,factor_inv:0 +msgid "Ratio" +msgstr "" + +#. module: product +#: field:product.packaging,width:0 +msgid "Width" +msgstr "" + +#. module: product +#: help:product.price.type,field:0 +msgid "Associated field in the product form." +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +#: field:product.template,uom_id:0 +#: field:product.uom,name:0 +msgid "Unit of Measure" +msgstr "" + +#. module: product +#: report:product.pricelist:0 +msgid "Printing Date" +msgstr "" + +#. module: product +#: field:product.template,uos_id:0 +msgid "Unit of Sale" +msgstr "" + +#. module: product +#: field:product.product,message_unread:0 +msgid "Unread Messages" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_uom_categ_form_action +#: model:ir.ui.menu,name:product.menu_product_uom_categ_form_action +msgid "Unit of Measure Categories" +msgstr "" + +#. module: product +#: help:product.product,seller_id:0 +msgid "Main Supplier who has highest priority in Supplier List." +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_5 +#: view:product.product:0 +msgid "Services" +msgstr "" + +#. module: product +#: help:product.product,ean13:0 +msgid "International Article Number used for product identification." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_category_action +msgid "" +"

\n" +" Here is a list of all your products classified by category. " +"You\n" +" can click a category to get the list of all products linked " +"to\n" +" this category or to a child of this category.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: code:addons/product/product.py:361 +#, python-format +msgid "" +"New Unit of Measure '%s' must belong to same Unit of Measure category '%s' " +"as of old Unit of Measure '%s'. If you need to change the unit of measure, " +"you may deactivate this product from the 'Procurements' tab and create a new " +"one." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_normal_action +#: model:ir.actions.act_window,name:product.product_normal_action_puchased +#: model:ir.actions.act_window,name:product.product_normal_action_sell +#: model:ir.actions.act_window,name:product.product_normal_action_tree +#: model:ir.ui.menu,name:product.menu_products +#: model:ir.ui.menu,name:product.prod_config_main +#: view:product.product:0 +msgid "Products" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_32_product_template +msgid "" +"Hands free headset for laptop PC with in-line microphone and headphone plug." +msgstr "" + +#. module: product +#: help:product.packaging,rows:0 +msgid "The number of layers on a pallet or box" +msgstr "" + +#. module: product +#: help:product.pricelist.item,price_min_margin:0 +msgid "Specify the minimum amount of margin over the base price." +msgstr "" + +#. module: product +#: field:product.template,weight_net:0 +msgid "Net Weight" +msgstr "" + +#. module: product +#: view:product.packaging:0 +#: view:product.product:0 +msgid "Pallet Dimension" +msgstr "" + +#. module: product +#: help:product.product,image:0 +msgid "" +"This field holds the image used as image for the product, limited to " +"1024x1024px." +msgstr "" + +#. module: product +#: help:product.pricelist.item,categ_id:0 +msgid "" +"Specify a product category if this rule only applies to products belonging " +"to this category or its children categories. Keep empty otherwise." +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Inventory" +msgstr "" + +#. module: product +#: field:product.product,seller_info_id:0 +msgid "Supplier Info" +msgstr "" + +#. module: product +#: code:addons/product/product.py:729 +#, python-format +msgid "%s (copy)" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_2_product_template +msgid "On Site Assistance" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_39_product_template +msgid "Toner Cartridge" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_uom_form_action +#: model:ir.ui.menu,name:product.menu_product_uom_form_action +#: model:ir.ui.menu,name:product.next_id_16 +#: view:product.uom:0 +msgid "Units of Measure" +msgstr "" + +#. module: product +#: field:product.supplierinfo,min_qty:0 +msgid "Minimal Quantity" +msgstr "" + +#. module: product +#: help:product.supplierinfo,product_code:0 +msgid "" +"This supplier's product code will be used when printing a request for " +"quotation. Keep empty to use the internal one." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_43_product_template +msgid "Zed+ Antivirus" +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_version_id:0 +msgid "Price List Version" +msgstr "" + +#. module: product +#: help:product.pricelist.item,sequence:0 +msgid "" +"Gives the order in which the pricelist items will be checked. The evaluation " +"gives highest priority to lowest sequence and stops as soon as a matching " +"item is found." +msgstr "" + +#. module: product +#: view:product.product:0 +#: selection:product.template,type:0 +msgid "Consumable" +msgstr "" + +#. module: product +#: help:product.price.type,currency_id:0 +msgid "The currency the field is expressed in." +msgstr "" + +#. module: product +#: help:product.template,weight:0 +msgid "The gross weight in Kg." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_37_product_template +msgid "Printer, All-in-one" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Procurement" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_23_product_template +msgid "Processor AMD 8-Core" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Weights" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Description for Quotations" +msgstr "" + +#. module: product +#: help:pricelist.partnerinfo,price:0 +msgid "" +"This price will be considered as a price for the supplier Unit of Measure if " +"any or the default Unit of Measure of the product otherwise" +msgstr "" + +#. module: product +#: field:product.template,uom_po_id:0 +msgid "Purchase Unit of Measure" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Group by..." +msgstr "" + +#. module: product +#: field:product.product,image_medium:0 +msgid "Medium-sized image" +msgstr "" + +#. module: product +#: selection:product.ul,type:0 +#: model:product.uom.categ,name:product.product_uom_categ_unit +msgid "Unit" +msgstr "" + +#. module: product +#: field:product.pricelist.version,date_start:0 +msgid "Start Date" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_38_product_template +msgid "Ink Cartridge" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_cm +msgid "cm" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_pricelist_action +msgid "" +"

\n" +" Click to add a pricelist version.\n" +"

\n" +" There can be more than one version of a pricelist, each of\n" +" these must be valid during a certain period of time. Some\n" +" examples of versions: Main Prices, 2010, 2011, Summer " +"Sales,\n" +" etc.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: help:product.template,uom_po_id:0 +msgid "" +"Default Unit of Measure used for purchase orders. It must be in the same " +"category than the default unit of measure." +msgstr "" + +#. module: product +#: view:product.pricelist:0 +msgid "Products Price" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_26_product_template +msgid "" +"17\" Monitor\n" +"6GB RAM\n" +"Hi-Speed 234Q Processor\n" +"QWERTY keyboard" +msgstr "" + +#. module: product +#: field:product.uom,rounding:0 +msgid "Rounding Precision" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Consumable products" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_21_product_template +msgid "Motherboard A20Z7" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_1_product_template +#: model:product.template,description_sale:product.product_product_1_product_template +msgid "This type of service include basic monitoring of products." +msgstr "" + +#. module: product +#: help:product.pricelist.version,date_end:0 +msgid "Last valid date for the version." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_19_product_template +msgid "HDD on Demand" +msgstr "" + +#. module: product +#: field:product.price.type,active:0 +#: field:product.pricelist,active:0 +#: field:product.pricelist.version,active:0 +#: field:product.product,active:0 +#: field:product.uom,active:0 +msgid "Active" +msgstr "" + +#. module: product +#: field:product.product,price_margin:0 +msgid "Variant Price Margin" +msgstr "" + +#. module: product +#: field:product.pricelist,name:0 +msgid "Pricelist Name" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_1 +msgid "Saleable" +msgstr "" + +#. module: product +#: sql_constraint:product.uom:0 +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_24_product_template +msgid "Graphics Card" +msgstr "" + +#. module: product +#: help:product.packaging,ean:0 +msgid "The EAN code of the package unit." +msgstr "" + +#. module: product +#: help:product.supplierinfo,product_uom:0 +msgid "This comes from the product form." +msgstr "" + +#. module: product +#: field:product.packaging,weight_ul:0 +msgid "Empty Package Weight" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_41_product_template +msgid "Windows Home Server 2011" +msgstr "" + +#. module: product +#: field:product.price.type,field:0 +msgid "Product Field" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_5_product_template +msgid "Custom computer assembled on order based on customer's requirement." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_price_type_action +#: model:ir.ui.menu,name:product.menu_product_price_type +msgid "Price Types" +msgstr "" + +#. module: product +#: help:product.template,uom_id:0 +msgid "Default Unit of Measure used for all stock operation." +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Sales" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_uom_categ_form_action +msgid "" +"

\n" +" Click to add a new unit of measure category.\n" +"

\n" +" Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of " +"measure:\n" +" Hours, Days.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: help:pricelist.partnerinfo,min_quantity:0 +msgid "" +"The minimal quantity to trigger this rule, expressed in the supplier Unit of " +"Measure if any or in the default Unit of Measure of the product otherrwise." +msgstr "" + +#. module: product +#: selection:product.uom,uom_type:0 +msgid "Smaller than the reference Unit of Measure" +msgstr "" + +#. module: product +#: model:product.pricelist,name:product.list0 +msgid "Public Pricelist" +msgstr "" + +#. module: product +#: field:product.supplierinfo,product_code:0 +msgid "Supplier Product Code" +msgstr "" + +#. module: product +#: help:product.pricelist,active:0 +msgid "" +"If unchecked, it will allow you to hide the pricelist without removing it." +msgstr "" + +#. module: product +#: selection:product.ul,type:0 +msgid "Pallet" +msgstr "" + +#. module: product +#: field:product.packaging,ul_qty:0 +msgid "Package by layer" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_product +#: model:process.node,name:product.process_node_product0 +#: model:process.process,name:product.process_process_productprocess0 +#: field:product.packaging,product_id:0 +#: field:product.pricelist.item,product_id:0 +#: view:product.product:0 +#: field:product.supplierinfo,product_id:0 +#: model:res.request.link,name:product.req_link_product +msgid "Product" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Price:" +msgstr "" + +#. module: product +#: field:product.template,weight:0 +msgid "Gross Weight" +msgstr "" + +#. module: product +#: help:product.packaging,qty:0 +msgid "The total number of products you can put by pallet or box." +msgstr "" + +#. module: product +#: field:product.product,variants:0 +msgid "Variants" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_category_action +#: model:ir.ui.menu,name:product.menu_products_category +msgid "Products by Category" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_16_product_template +msgid "Computer Case" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_9_product_template +msgid "USB Keyboard, AZERTY" +msgstr "" + +#. module: product +#: help:product.supplierinfo,sequence:0 +msgid "Assigns the priority to the list of product supplier." +msgstr "" + +#. module: product +#: constraint:product.pricelist.item:0 +msgid "Error! The minimum margin should be lower than the maximum margin." +msgstr "" + +#. module: product +#: model:res.groups,name:product.group_uos +msgid "Manage Secondary Unit of Measure" +msgstr "" + +#. module: product +#: help:product.uom,rounding:0 +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Rounding Method" +msgstr "" + +#. module: product +#: model:ir.actions.report.xml,name:product.report_product_label +msgid "Products Labels" +msgstr "" + +#. module: product +#: model:product.ul,name:product.product_ul_big_box +msgid "Box 30x40x60" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_47_product_template +msgid "Switch, 24 ports" +msgstr "" + +#. module: product +#: selection:product.uom,uom_type:0 +msgid "Bigger than the reference Unit of Measure" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_consultant_product_template +#: selection:product.template,type:0 +msgid "Service" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Internal Description" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_48_product_template +msgid "USB Adapter" +msgstr "" + +#. module: product +#: help:product.template,uos_id:0 +msgid "" +"Sepcify a unit of measure here if invoicing is made in another unit of " +"measure than inventory. Keep empty to use the default unit of measure." +msgstr "" + +#. module: product +#: code:addons/product/product.py:208 +#, python-format +msgid "Cannot change the category of existing Unit of Measure '%s'." +msgstr "" + +#. module: product +#: help:product.packaging,height:0 +msgid "The height of the package" +msgstr "" + +#. module: product +#: view:product.pricelist:0 +msgid "Products Price List" +msgstr "" + +#. module: product +#: field:product.pricelist,company_id:0 +#: field:product.pricelist.item,company_id:0 +#: field:product.pricelist.version,company_id:0 +#: view:product.product:0 +#: field:product.supplierinfo,company_id:0 +#: field:product.template,company_id:0 +msgid "Company" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_26_product_template +msgid "Laptop S3450" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Default Unit of Measure" +msgstr "" + +#. module: product +#: code:addons/product/pricelist.py:377 +#, python-format +msgid "Partner section of the product form" +msgstr "" + +#. module: product +#: help:product.price.type,name:0 +msgid "Name of this kind of price." +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_3 +msgid "Other Products" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_9_product_template +msgid "This product is configured with example of push/pull flows" +msgstr "" + +#. module: product +#: field:product.product,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_unit +msgid "Unit(s)" +msgstr "" + +#. module: product +#: code:addons/product/product.py:176 +#, python-format +msgid "Error!" +msgstr "" + +#. module: product +#: field:product.packaging,length:0 +msgid "Length" +msgstr "" + +#. module: product +#: model:product.uom.categ,name:product.uom_categ_length +msgid "Length / Distance" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_8 +msgid "Components" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_pricelist_type +#: field:product.pricelist,type:0 +msgid "Pricelist Type" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_6 +msgid "External Devices" +msgstr "" + +#. module: product +#: field:product.product,color:0 +msgid "Color Index" +msgstr "" + +#. module: product +#: help:product.template,sale_ok:0 +msgid "Specify if the product can be selected in a sales order line." +msgstr "" + +#. module: product +#: view:product.product:0 +#: field:product.template,sale_ok:0 +msgid "Can be Sold" +msgstr "" + +#. module: product +#: field:product.template,produce_delay:0 +msgid "Manufacturing Lead Time" +msgstr "" + +#. module: product +#: field:product.supplierinfo,pricelist_ids:0 +msgid "Supplier Pricelist" +msgstr "" + +#. module: product +#: field:product.pricelist.item,base:0 +msgid "Based on" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_10 +msgid "Raw Materials" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_13_product_template +msgid "RAM SR5" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_14_product_template +msgid "RAM SR2" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_normal_action_puchased +msgid "" +"

\n" +" Click to define a new product.\n" +"

\n" +" You must define a product for everything you purchase, " +"whether\n" +" it's a physical product, a consumable or services you buy " +"to\n" +" subcontractants.\n" +"

\n" +" The product form contains detailed information to improve " +"the\n" +" purchase process: prices, procurement logistics, accounting " +"data,\n" +" available suppliers, etc.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: model:product.template,description_sale:product.product_product_44_product_template +msgid "Full featured image editing software." +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_pricelist_version +#: view:product.pricelist:0 +#: view:product.pricelist.version:0 +msgid "Pricelist Version" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "* ( 1 + " +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_31_product_template +msgid "Multimedia Speakers" +msgstr "" + +#. module: product +#: field:product.product,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Sale Conditions" +msgstr "" + +#. module: product +#: view:product.packaging:0 +#: view:product.product:0 +msgid "Palletization" +msgstr "" + +#. module: product +#: report:product.pricelist:0 +msgid "Price List Name" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Description for Suppliers" +msgstr "" + +#. module: product +#: field:product.supplierinfo,delay:0 +msgid "Delivery Lead Time" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "months" +msgstr "" + +#. module: product +#: help:product.uom,active:0 +msgid "" +"By unchecking the active field you can disable a unit of measure without " +"deleting it." +msgstr "" + +#. module: product +#: field:product.product,seller_delay:0 +msgid "Supplier Lead Time" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_decimal_precision +msgid "decimal.precision" +msgstr "" + +#. module: product +#: selection:product.ul,type:0 +msgid "Box" +msgstr "" + +#. module: product +#: help:product.pricelist.item,price_surcharge:0 +msgid "" +"Specify the fixed amount to add or substract(if negative) to the amount " +"calculated with the discount." +msgstr "" + +#. module: product +#: help:product.product,qty_available:0 +msgid "" +"Current quantity of products.\n" +"In a context with a single Stock Location, this includes goods stored at " +"this Location, or any of its children.\n" +"In a context with a single Warehouse, this includes goods stored in the " +"Stock Location of this Warehouse, or any of its children.\n" +"In a context with a single Shop, this includes goods stored in the Stock " +"Location of the Warehouse of this Shop, or any of its children.\n" +"Otherwise, this includes goods stored in any Stock Location with 'internal' " +"type." +msgstr "" + +#. module: product +#: help:product.template,type:0 +msgid "" +"Consumable: Will not imply stock management for this product. \n" +"Stockable product: Will imply stock management for this product." +msgstr "" + +#. module: product +#: help:product.pricelist.type,key:0 +msgid "" +"Used in the code to select specific prices based on the context. Keep " +"unchanged." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_normal_action +msgid "" +"

\n" +" Click to define a new product.\n" +"

\n" +" You must define a product for everything you buy or sell,\n" +" whether it's a physical product, a consumable or service.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Context..." +msgstr "" + +#. module: product +#: field:product.packaging,ul:0 +msgid "Type of Package" +msgstr "" + +#. module: product +#: help:product.category,type:0 +msgid "" +"A category of the view type is a virtual category that can be used as the " +"parent of another category to create a hierarchical structure." +msgstr "" + +#. module: product +#: selection:product.ul,type:0 +msgid "Pack" +msgstr "" + +#. module: product +#: help:product.pricelist.item,product_tmpl_id:0 +msgid "" +"Specify a template if this rule only applies to one product template. Keep " +"empty otherwise." +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_2_product_template +msgid "" +"This type of service include assistance for security questions, system " +"configuration requirements, implementation or special needs." +msgstr "" + +#. module: product +#: field:product.product,image:0 +msgid "Image" +msgstr "" + +#. module: product +#: view:product.uom.categ:0 +msgid "Units of Measure categories" +msgstr "" + +#. module: product +#: model:product.template,description_sale:product.product_product_4_product_template +msgid "" +"19\" LCD Monitor\n" +"Processor Core i5 2.70 Ghz\n" +"2GB RAM\n" +"HDD SH-1" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Descriptions" +msgstr "" + +#. module: product +#: model:res.groups,name:product.group_stock_packaging +msgid "Manage Product Packaging" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_2 +msgid "Internal" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_45_product_template +msgid "Router R430" +msgstr "" + +#. module: product +#: help:product.packaging,sequence:0 +msgid "Gives the sequence order when displaying a list of packaging." +msgstr "" + +#. module: product +#: selection:product.category,type:0 +#: selection:product.template,state:0 +msgid "Normal" +msgstr "" + +#. module: product +#: code:addons/product/pricelist.py:179 +#, python-format +msgid "" +"At least one pricelist has no active version !\n" +"Please create or activate one." +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_max_margin:0 +msgid "Max. Price Margin" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Min. Margin" +msgstr "" + +#. module: product +#: help:product.supplierinfo,product_name:0 +msgid "" +"This supplier's product name will be used when printing a request for " +"quotation. Keep empty to use the internal one." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_pricelist_action_for_purchase +msgid "" +"

\n" +" Click to create a pricelist.\n" +"

\n" +" A price list contains rules to be evaluated in order to " +"compute\n" +" the purchase price. The default price list has only one " +"rule; use\n" +" the cost price defined on the product form, so that you do " +"not have to\n" +" worry about supplier pricelists if you have very simple " +"needs.\n" +"

\n" +" But you can also import complex price lists form your " +"supplier\n" +" that may depends on the quantities ordered or the current\n" +" promotions.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: selection:product.template,mes_type:0 +msgid "Variable" +msgstr "" + +#. module: product +#: field:product.template,rental:0 +msgid "Can be Rent" +msgstr "" + +#. module: product +#: model:product.price.type,name:product.standard_price +msgid "Cost Price" +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_min_margin:0 +msgid "Min. Price Margin" +msgstr "" + +#. module: product +#: model:res.groups,name:product.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "" + +#. module: product +#: help:product.packaging,weight:0 +msgid "The weight of a full package, pallet or box." +msgstr "" + +#. module: product +#: view:product.uom:0 +msgid "e.g: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_25_product_template +msgid "" +"17\" Monitor\n" +"4GB RAM\n" +"Standard-1294P Processor\n" +"QWERTY keyboard" +msgstr "" + +#. module: product +#: field:product.category,sequence:0 +#: field:product.packaging,sequence:0 +#: field:product.pricelist.item,sequence:0 +#: field:product.supplierinfo,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: product +#: help:product.template,produce_delay:0 +msgid "" +"Average delay in days to produce this product. In the case of multi-level " +"BOM, the manufacturing lead times of the components will be added." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_assembly_product_template +msgid "Assembly Service Cost" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_pricelist_item +msgid "Pricelist item" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_uom_form_action +msgid "" +"

\n" +" Click to add a new unit of measure.\n" +"

\n" +" You must define a conversion rate between several Units of\n" +" Measure within the same category.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_11_product_template +msgid "Mouse, Laser" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Delays" +msgstr "" + +#. module: product +#: field:product.category,type:0 +msgid "Category Type" +msgstr "" + +#. module: product +#: model:process.node,note:product.process_node_product0 +msgid "Creation of the product" +msgstr "" + +#. module: product +#: field:pricelist.partnerinfo,name:0 +#: field:product.packaging,name:0 +#: report:product.pricelist:0 +#: view:product.product:0 +#: field:product.template,description:0 +msgid "Description" +msgstr "" + +#. module: product +#: field:product.packaging,ean:0 +msgid "EAN" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid " ) + " +msgstr "" + +#. module: product +#: field:product.template,volume:0 +#: model:product.uom.categ,name:product.product_uom_categ_vol +msgid "Volume" +msgstr "" + +#. module: product +#: help:product.product,image_small:0 +msgid "" +"Small-sized image of the product. It is automatically resized as a 64x64px " +"image, with aspect ratio preserved. Use this field anywhere a small image is " +"required." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_40_product_template +msgid "Windows 7 Professional" +msgstr "" + +#. module: product +#: selection:product.uom,uom_type:0 +msgid "Reference Unit of Measure for this category" +msgstr "" + +#. module: product +#: field:product.supplierinfo,product_uom:0 +msgid "Supplier Unit of Measure" +msgstr "" + +#. module: product +#: view:product.product:0 +#: model:res.groups,name:product.group_product_variant +msgid "Product Variant" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_6_product_template +msgid "15” LCD Monitor" +msgstr "" + +#. module: product +#: code:addons/product/pricelist.py:376 +#: field:product.pricelist.item,base_pricelist_id:0 +#, python-format +msgid "Other Pricelist" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_pricelist_action2 +msgid "" +"

\n" +" Click to create a pricelist.\n" +"

\n" +" A price list contains rules to be evaluated in order to " +"compute\n" +" the sales price of the products.\n" +"

\n" +" Price lists may have several versions (2010, 2011, Promotion " +"of\n" +" February 2010, etc.) and each version may have several " +"rules.\n" +" (e.g. the customer price of a product category will be based " +"on\n" +" the supplier price multiplied by 1.80).\n" +"

\n" +" " +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_template +#: field:product.pricelist.item,product_tmpl_id:0 +#: field:product.product,product_tmpl_id:0 +#: view:product.template:0 +msgid "Product Template" +msgstr "" + +#. module: product +#: field:product.template,cost_method:0 +#: model:res.groups,name:product.group_costing_method +msgid "Costing Method" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_category +#: field:product.pricelist.item,categ_id:0 +msgid "Product Category" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_19_product_template +msgid "On demand hard-disk having capacity based on requirement." +msgstr "" + +#. module: product +#: selection:product.template,state:0 +msgid "End of Lifecycle" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_15_product_template +msgid "RAM SR3" +msgstr "" + +#. module: product +#: help:product.product,packaging:0 +msgid "" +"Gives the different ways to package the same product. This has no impact on " +"the picking order and is mainly used if you use the EDI module." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_pricelist_action +#: model:ir.ui.menu,name:product.menu_product_pricelist_action +#: field:product.pricelist,version_id:0 +msgid "Pricelist Versions" +msgstr "" + +#. module: product +#: help:product.pricelist.item,price_round:0 +msgid "" +"Sets the price so that it is a multiple of this value.\n" +"Rounding is applied after the discount and before the surcharge.\n" +"To have prices that end in 9.99, set rounding 10, surcharge -0.01" +msgstr "" + +#. module: product +#: field:product.template,list_price:0 +msgid "Sale Price" +msgstr "" + +#. module: product +#: help:product.uom,category_id:0 +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" + +#. module: product +#: constraint:product.category:0 +msgid "Error ! You cannot create recursive categories." +msgstr "" + +#. module: product +#: help:product.product,image_medium:0 +msgid "" +"Medium-sized image of the product. It is automatically resized as a " +"128x128px image, with aspect ratio preserved, only when the image exceeds " +"one of those sizes. Use this field in form views or some kanban views." +msgstr "" + +#. module: product +#: view:product.uom:0 +msgid "e.g: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: product +#: help:product.supplierinfo,qty:0 +msgid "This is a quantity which is converted into Default Unit of Measure." +msgstr "" + +#. module: product +#: help:product.template,volume:0 +msgid "The volume in m3." +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_discount:0 +msgid "Price Discount" +msgstr "" From 11051d4a08de2db72d76a9d715c6cd9c4229c9b6 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 13 Feb 2013 09:20:35 +0100 Subject: [PATCH 56/60] [FIX] web: rewrite reference to removed module openerp.service.web_services bzr revid: rco@openerp.com-20130213082035-9ajx7jlzim1qunv4 --- addons/web/controllers/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index e1a3c476a32..e23246d7288 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -683,7 +683,7 @@ class WebClient(openerpweb.Controller): @openerpweb.jsonrequest def version_info(self, req): - return openerp.service.web_services.RPC_VERSION_1 + return openerp.service.common.exp_version() class Proxy(openerpweb.Controller): _cp_path = '/web/proxy' From 55625f52db111c75563a72a04dd3d5e992fadaf9 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 13 Feb 2013 11:18:03 +0100 Subject: [PATCH 57/60] [FIX] fix import statements in yml files bzr revid: rco@openerp.com-20130213101803-4y1ponocx6oai2mz --- addons/account_voucher/test/case1_usd_usd.yml | 2 -- addons/account_voucher/test/case2_suppl_usd_eur.yml | 2 -- .../account_voucher/test/case2_usd_eur_debtor_in_usd.yml | 2 -- addons/account_voucher/test/case3_eur_eur.yml | 2 -- addons/hr_holidays/test/test_hr_holiday.yml | 1 - addons/hr_payroll_account/test/hr_payroll_account.yml | 4 ++-- addons/membership/test/test_membership.yml | 1 - addons/purchase_requisition/test/purchase_requisition.yml | 3 ++- addons/sale_mrp/test/sale_mrp.yml | 2 +- addons/sale_stock/test/picking_order_policy.yml | 7 ++++--- 10 files changed, 9 insertions(+), 17 deletions(-) diff --git a/addons/account_voucher/test/case1_usd_usd.yml b/addons/account_voucher/test/case1_usd_usd.yml index fd1945691ba..44269104370 100644 --- a/addons/account_voucher/test/case1_usd_usd.yml +++ b/addons/account_voucher/test/case1_usd_usd.yml @@ -159,7 +159,6 @@ I fill amounts 180 for the invoice of 200$ and 70 for the invoice of 100$> - !python {model: account.voucher}: | - import netsvc, time vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_1_case1')) data = [] @@ -254,7 +253,6 @@ I fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$ - !python {model: account.voucher}: | - import netsvc, time vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_2_case1')) data = [] diff --git a/addons/account_voucher/test/case2_suppl_usd_eur.yml b/addons/account_voucher/test/case2_suppl_usd_eur.yml index 91fb99f6360..c13bfcbd5d4 100644 --- a/addons/account_voucher/test/case2_suppl_usd_eur.yml +++ b/addons/account_voucher/test/case2_suppl_usd_eur.yml @@ -131,7 +131,6 @@ I fill amounts 180 for the invoice of 200$ and 70 for the invoice of 100$ - !python {model: account.voucher}: | - import netsvc, time vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_1_case2_suppl')) data = [] @@ -234,7 +233,6 @@ I fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$> - !python {model: account.voucher}: | - import netsvc, time vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_2_case2_suppl')) data = [] diff --git a/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml b/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml index b049fc7692e..52c416e06cc 100644 --- a/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml +++ b/addons/account_voucher/test/case2_usd_eur_debtor_in_usd.yml @@ -163,7 +163,6 @@ I fill amounts 130 for the invoice of 200$ and 70 for the invoice of 100$> - !python {model: account.voucher}: | - import netsvc, time vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_1_case2b')) data = [] @@ -244,7 +243,6 @@ and I fully reconcil the 2 previous invoices - !python {model: account.voucher}: | - import netsvc, time vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_2_case2b')) data = [] diff --git a/addons/account_voucher/test/case3_eur_eur.yml b/addons/account_voucher/test/case3_eur_eur.yml index d0b18a5231b..99153ceeca4 100644 --- a/addons/account_voucher/test/case3_eur_eur.yml +++ b/addons/account_voucher/test/case3_eur_eur.yml @@ -118,7 +118,6 @@ I fill amounts 100 for the invoice of 150€ and 20 for the invoice of 80€ - !python {model: account.voucher}: | - import netsvc, time vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_1_case3')) data = [] @@ -206,7 +205,6 @@ I fill amounts 50 for the invoice of 150€ and 70 for the invoice of 80€ - !python {model: account.voucher}: | - import netsvc, time vals = {} voucher_id = self.browse(cr, uid, ref('account_voucher_2_case3')) data = [] diff --git a/addons/hr_holidays/test/test_hr_holiday.yml b/addons/hr_holidays/test/test_hr_holiday.yml index e78c2fd08bc..2bb60300cff 100644 --- a/addons/hr_holidays/test/test_hr_holiday.yml +++ b/addons/hr_holidays/test/test_hr_holiday.yml @@ -18,7 +18,6 @@ I again set to draft and then confirm. - !python {model: hr.holidays}: | - import netsvc self.set_to_draft(cr, uid, [ref('hr_holidays_employee1_cl')]) self.signal_confirm(cr, uid, [ref('hr_holidays_employee1_cl')]) - diff --git a/addons/hr_payroll_account/test/hr_payroll_account.yml b/addons/hr_payroll_account/test/hr_payroll_account.yml index ad0197c7905..c8b6bf42fdd 100644 --- a/addons/hr_payroll_account/test/hr_payroll_account.yml +++ b/addons/hr_payroll_account/test/hr_payroll_account.yml @@ -89,7 +89,7 @@ I verify the payslip is in draft state. - !python {model: hr.payslip}: | - from tools.translate import _ + from openerp.tools.translate import _ payslip_brw=self.browse(cr, uid, ref("hr_payslip_0")) assert(payslip_brw.state == 'draft'), _('State not changed!') - @@ -120,7 +120,7 @@ I verify that the payslip is in done state. - !python {model: hr.payslip}: | - from tools.translate import _ + from openerp.tools.translate import _ payslip_brw=self.browse(cr, uid, ref("hr_payslip_0")) assert(payslip_brw.state == 'done'), _('State not changed!') diff --git a/addons/membership/test/test_membership.yml b/addons/membership/test/test_membership.yml index 8e8e7887b44..6fb392670e9 100644 --- a/addons/membership/test/test_membership.yml +++ b/addons/membership/test/test_membership.yml @@ -31,7 +31,6 @@ I'm Opening that Invoice which is created for "Seagate". - !python {model: res.partner}: | - import netsvc from tools.translate import _ invoice_pool = self.pool.get('account.invoice') partner_pool = self.pool.get('res.partner') diff --git a/addons/purchase_requisition/test/purchase_requisition.yml b/addons/purchase_requisition/test/purchase_requisition.yml index f23737d21b8..8fd36e07d71 100644 --- a/addons/purchase_requisition/test/purchase_requisition.yml +++ b/addons/purchase_requisition/test/purchase_requisition.yml @@ -82,7 +82,8 @@ I print a Requisition report - !python {model: purchase.requisition}: | - import netsvc, tools, os + import os + from openerp import netsvc, tools (data, format) = netsvc.LocalService('report.purchase.requisition').create(cr, uid, [ref('purchase_requisition.requisition1')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'purchase_requisition-purchase_requisition_report.'+format), 'wb+').write(data) diff --git a/addons/sale_mrp/test/sale_mrp.yml b/addons/sale_mrp/test/sale_mrp.yml index c2eff008943..9b70e052854 100644 --- a/addons/sale_mrp/test/sale_mrp.yml +++ b/addons/sale_mrp/test/sale_mrp.yml @@ -92,7 +92,7 @@ I verify that a procurement has been generated for sale order - !python {model: procurement.order}: | - from tools.translate import _ + from openerp.tools.translate import _ sale_order_obj = self.pool.get('sale.order') so = sale_order_obj.browse(cr, uid, ref("sale_order_so0")) proc_ids = self.search(cr, uid, [('origin','=',so.name)]) diff --git a/addons/sale_stock/test/picking_order_policy.yml b/addons/sale_stock/test/picking_order_policy.yml index 406aaf0bf8a..f761dfb65db 100644 --- a/addons/sale_stock/test/picking_order_policy.yml +++ b/addons/sale_stock/test/picking_order_policy.yml @@ -22,7 +22,7 @@ !python {model: sale.order}: | from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta - from tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT + from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT order = self.browse(cr, uid, ref("sale.sale_order_6")) for order_line in order.order_line: procurement = order_line.procurement_id @@ -44,7 +44,7 @@ !python {model: sale.order}: | from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta - from tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT + from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT sale_order = self.browse(cr, uid, ref("sale.sale_order_6")) assert sale_order.picking_ids, "Delivery order is not created." for picking in sale_order.picking_ids: @@ -161,7 +161,8 @@ I print a sale order report. - !python {model: sale.order}: | - import netsvc, tools, os + import os + from openerp import netsvc, tools (data, format) = netsvc.LocalService('report.sale.order').create(cr, uid, [ref('sale.sale_order_6')], {}, {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'sale-sale_order.'+format), 'wb+').write(data) From 9e05f4d291845c642da3ba018c0b16e42ac744e8 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 13 Feb 2013 11:32:39 +0100 Subject: [PATCH 58/60] [FIX] membership: fix import statements in yml file bzr revid: rco@openerp.com-20130213103239-5tq1ib4xcbykgjzk --- addons/membership/test/test_membership.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/membership/test/test_membership.yml b/addons/membership/test/test_membership.yml index 6fb392670e9..40d1785c29a 100644 --- a/addons/membership/test/test_membership.yml +++ b/addons/membership/test/test_membership.yml @@ -31,7 +31,7 @@ I'm Opening that Invoice which is created for "Seagate". - !python {model: res.partner}: | - from tools.translate import _ + from openerp.tools.translate import _ invoice_pool = self.pool.get('account.invoice') partner_pool = self.pool.get('res.partner') membership_line_pool = self.pool.get('membership.membership_line') @@ -105,7 +105,7 @@ I'm doing to make credit note of invoice which is paid by "Seagate" to cancel membership. - !python {model: account.invoice}: | - from tools.translate import _ + from openerp.tools.translate import _ invoice_pool = self.pool.get('account.invoice') partner_pool = self.pool.get('res.partner') membership_line_pool = self.pool.get('membership.membership_line') From 729107b73ce6c1a8c98598b6ac7e068061b2d69e Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 13 Feb 2013 12:05:06 +0100 Subject: [PATCH 59/60] [IMP] openerp.osv.orm: add optional context in method that handles workflow signal bzr revid: rco@openerp.com-20130213110506-kzhgtczvauy6nkhc --- openerp/osv/orm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 2168c443696..a3c588b2cfc 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -5276,7 +5276,7 @@ class BaseModel(object): if name.startswith('signal_'): signal_name = name[len('signal_'):] assert signal_name - def handle_workflow_signal(cr, uid, ids): + def handle_workflow_signal(cr, uid, ids, context=None): workflow_service = netsvc.LocalService("workflow") res = {} for id in ids: From cf99d6af905649ff300886228de7b814f438e9fc Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Wed, 13 Feb 2013 14:47:07 +0100 Subject: [PATCH 60/60] [DOC] Updated changelog. bzr revid: vmt@openerp.com-20130213134707-moo136efomhfm8dy --- doc/changelog.rst | 2 ++ doc/routing.rst | 2 ++ 2 files changed, 4 insertions(+) diff --git a/doc/changelog.rst b/doc/changelog.rst index 464237543d5..d340b281225 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -6,6 +6,8 @@ Changelog `trunk` ------- +- Added :ref:`orm-workflows` to the ORM. +- Added :ref:`routing-decorators` to the RPC and WSGI stack. - Removed support for `__terp__.py` descriptor files. - Removed support for `` root element in XML files. - Removed support for the non-openerp namespace (e.g. importing `tools` instead diff --git a/doc/routing.rst b/doc/routing.rst index 6a4af3374a9..76ef859c48b 100644 --- a/doc/routing.rst +++ b/doc/routing.rst @@ -19,6 +19,8 @@ Starting with OpenERP 7.1, exposing a new arbitrary WSGI handler is done with the :py:func:`openerp.http.handler` decorator while adding an RPC endpoint is done with the :py:func:`openerp.http.rpc` decorator. +.. _routing-decorators: + Routing decorators ------------------