From 5047a630455b3ef9f58f834396085f0881cae7bd Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 8 Jul 2010 14:53:59 +0200 Subject: [PATCH 01/47] [FIX/REF] project_long_term: better way to obtain default uom unit bzr revid: odo@openerp.com-20100708125359-ov7z0d8bjgtm4gxs --- addons/project_long_term/project_long_term.py | 14 ++++++++------ .../wizard/project_compute_phases.py | 3 +-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py index a6fbcb22ab7..6cba9bc55d0 100644 --- a/addons/project_long_term/project_long_term.py +++ b/addons/project_long_term/project_long_term.py @@ -86,6 +86,11 @@ class project_phase(osv.osv): return False return True + def _get_default_uom_id(self, cr, uid): + model_data_obj = self.pool.get('ir.model.data') + model_data_id = model_data_obj._get_id(cr, uid, 'product', 'uom_hour') + return model_data_obj.read(cr, uid, [model_data_id], ['res_id'])[0]['res_id'] + _columns = { 'name': fields.char("Name", size=64, required=True), 'date_start': fields.datetime('Start Date', help="Starting Date of the phase"), @@ -137,7 +142,6 @@ class project_phase(osv.osv): """ uom_obj = self.pool.get('product.uom') resource_obj = self.pool.get('resource.resource') - model_data_obj = self.pool.get('ir.model.data') cal_obj = self.pool.get('resource.calendar') calendar_id = phase.project_id.resource_calendar_id and phase.project_id.resource_calendar_id.id or False resource_id = resource_obj.search(cr, uid, [('user_id', '=', phase.responsible_id.id)]) @@ -147,7 +151,7 @@ class project_phase(osv.osv): cal_id = res.get('calendar_id', False) and res.get('calendar_id')[0] or False if cal_id: calendar_id = cal_id - default_uom_id = model_data_obj._get_id(cr, uid, 'product', 'uom_hour') + default_uom_id = self._get_default_uom_id(cr, uid) avg_hours = uom_obj._compute_qty(cr, uid, phase.product_uom.id, phase.duration, default_uom_id) work_times = cal_obj.interval_min_get(cr, uid, calendar_id, date_end, avg_hours or 0.0, resource_id and resource_id[0] or False) dt_start = work_times[0][0].strftime('%Y-%m-%d %H:%M:%S') @@ -160,7 +164,6 @@ class project_phase(osv.osv): Check And Compute date_end of phase if change in date_end > older time. """ uom_obj = self.pool.get('product.uom') - model_data_obj = self.pool.get('ir.model.data') resource_obj = self.pool.get('resource.resource') cal_obj = self.pool.get('resource.calendar') calendar_id = phase.project_id.resource_calendar_id and phase.project_id.resource_calendar_id.id or False @@ -171,7 +174,7 @@ class project_phase(osv.osv): cal_id = res.get('calendar_id', False) and res.get('calendar_id')[0] or False if cal_id: calendar_id = cal_id - default_uom_id = model_data_obj._get_id(cr, uid, 'product', 'uom_hour') + default_uom_id = self._get_default_uom_id(cr, uid) avg_hours = uom_obj._compute_qty(cr, uid, phase.product_uom.id, phase.duration, default_uom_id) work_times = cal_obj.interval_get(cr, uid, calendar_id, date_start, avg_hours or 0.0, resource_id and resource_id[0] or False) dt_end = work_times[-1][1].strftime('%Y-%m-%d %H:%M:%S') @@ -181,7 +184,6 @@ class project_phase(osv.osv): resource_calendar_obj = self.pool.get('resource.calendar') resource_obj = self.pool.get('resource.resource') uom_obj = self.pool.get('product.uom') - model_data_obj = self.pool.get('ir.model.data') if context is None: context = {} if context.get('scheduler',False): @@ -195,7 +197,7 @@ class project_phase(osv.osv): cal_id = resource_obj.browse(cr, uid, resource_id[0], context=context).calendar_id.id if cal_id: calendar_id = cal_id - default_uom_id = model_data_obj._get_id(cr, uid, 'product', 'uom_hour') + default_uom_id = self._get_default_uom_id(cr, uid) avg_hours = uom_obj._compute_qty(cr, uid, phase.product_uom.id, phase.duration, default_uom_id) # Change the date_start and date_end diff --git a/addons/project_long_term/wizard/project_compute_phases.py b/addons/project_long_term/wizard/project_compute_phases.py index 3ee15bc6c5a..f4c5fbae443 100644 --- a/addons/project_long_term/wizard/project_compute_phases.py +++ b/addons/project_long_term/wizard/project_compute_phases.py @@ -60,7 +60,6 @@ class project_compute_phases(osv.osv_memory): phase_obj = self.pool.get('project.phase') resource_obj = self.pool.get('resource.resource') uom_obj = self.pool.get('product.uom') - model_data_obj = self.pool.get('ir.model.data') phase_resource_obj = False if context is None: @@ -82,7 +81,7 @@ class project_compute_phases(osv.osv_memory): 'vacation': tuple(leaves), 'efficiency': time_efficiency }) - default_uom_id = model_data_obj._get_id(cr, uid, 'product', 'uom_hour') + default_uom_id = phase_obj._get_default_uom_id(cr, uid) avg_hours = uom_obj._compute_qty(cr, uid, phase.product_uom.id, phase.duration, default_uom_id) duration = str(avg_hours) + 'H' # Create a new project for each phase From 4ce21feabed3e7cbf3ac77fb1514d669bffe36aa Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 8 Jul 2010 15:08:33 +0200 Subject: [PATCH 02/47] [BREAK] WARNING: base_calendar: had to disable the scheduler until the recursion problem is fixed, to release the CPU!!! bzr revid: odo@openerp.com-20100708130833-hhunfcgm6n2dmq9w --- addons/base_calendar/base_calendar.py | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index f9f6567747f..7896dfae1ae 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -793,6 +793,7 @@ class calendar_alarm(osv.osv): @param use_new_cursor: False or the dbname @param context: A standard dictionary for contextual values """ + return True # XXX FIXME REMOVE THIS AFTER FIXING get_recurrent_dates!! if not context: context = {} current_datetime = datetime.now() From fa56e44dcb40c24582045ca2d2f91ccab02eb241 Mon Sep 17 00:00:00 2001 From: Mantavya Gajjar Date: Thu, 8 Jul 2010 18:47:55 +0530 Subject: [PATCH 03/47] [IMP]: improve onchange_tye for the journal bzr revid: mga@tinyerp.com-20100708131755-vovhfnyt2i8u7y9o --- addons/account/account.py | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/addons/account/account.py b/addons/account/account.py index 3947cf9d813..4b86938854e 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -638,6 +638,7 @@ class account_journal(osv.osv): 'user_id': lambda self,cr,uid,context: uid, 'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id, } + def write(self, cr, uid, ids, vals, context=None): obj=[] if 'company_id' in vals: @@ -720,13 +721,33 @@ class account_journal(osv.osv): return self.name_get(cr, user, ids, context=context) def onchange_type(self, cr, uid, ids, type): - res={} - for line in self.browse(cr, uid, ids): - if type == 'situation': - res= {'value':{'centralisation': True}} - else: - res= {'value':{'centralisation': False}} - return res + data_pool = self.pool.get('ir.model.data') + type_map = { + 'sale':'account_sp_journal_view', + 'sale_refund':'account_sp_refund_journal_view', + 'purchase':'account_sp_journal_view', + 'purchase_refund':'account_sp_refund_journal_view', + 'expense':'account_sp_journal_view', + 'cash':'account_journal_bank_view', + 'bank':'account_journal_bank_view', + 'general':'account_journal_view', + 'situation':'account_journal_view' + } + + res = {} + + view_id = type_map.get(type, 'general') + data_id = data_pool.search(cr, uid, [('model','=','account.journal.view'), ('name','=',view_id)]) + data = data_pool.browse(cr, uid, data_id[0]) + + res.update({ + 'centralisation':type == 'situation', + 'view_id':data.res_id, + }) + + return { + 'value':res + } account_journal() From 52509510855b663552e2453cf8f60d8678a29ef6 Mon Sep 17 00:00:00 2001 From: "Vir (Open ERP)" Date: Thu, 8 Jul 2010 18:51:16 +0530 Subject: [PATCH 04/47] [ADD] event : access rules for Even/Manager bzr revid: vir@tinyerp.com-20100708132116-nv1j2xtogcug0p4p --- addons/event/security/ir.model.access.csv | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/addons/event/security/ir.model.access.csv b/addons/event/security/ir.model.access.csv index c30a8b6aa3d..a59748aa534 100644 --- a/addons/event/security/ir.model.access.csv +++ b/addons/event/security/ir.model.access.csv @@ -1,6 +1,11 @@ "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" "access_event_type","event.type","model_event_type","event.group_event_subscriber",1,0,0,0 "access_event_type_manager","event.type manager","model_event_type","event.group_event_manager",1,1,1,1 -"access_event_event","event.event","model_event_event","event.group_event_subscriber",1,1,1,1 -"access_event_registration","event.registration","model_event_registration","event.group_event_subscriber",1,1,1,1 +"access_event_event","event.event","model_event_event","event.group_event_subscriber",1,1,1,0 +"access_event_registration","event.registration","model_event_registration","event.group_event_subscriber",1,1,1,0 "access_report_event_registration","report.event.registration","model_report_event_registration","event.group_event_subscriber",1,0,0,0 +"access_event_event_manager","event.event manager","model_event_event","event.group_event_manager",1,1,1,1 +"access_event_registration_manager","event.registration manager","model_event_registration","event.group_event_manager",1,1,1,1 +"access_crm_case_section_manager","crm.case.section manager","crm.model_crm_case_section","event.group_event_manager",1,1,1,1 +"access_product_product","product.product.product manager","product.model_product_product","event.group_event_manager",1,1,1,1 +"access_report_event_registration","report.event.registration","model_report_event_registration","event.group_event_manager",1,1,1,1 From 8628eadf47fd11cad61754a2b08e6954c4107aa5 Mon Sep 17 00:00:00 2001 From: Mantavya Gajjar Date: Thu, 8 Jul 2010 18:58:15 +0530 Subject: [PATCH 05/47] [IMP]: improvement in on_change type for multicurrency journals bzr revid: mga@tinyerp.com-20100708132815-d21kma0rxzdfoq1m --- addons/account/account.py | 9 ++++++++- addons/account/account_view.xml | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/addons/account/account.py b/addons/account/account.py index 4b86938854e..7f01f60253d 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -720,8 +720,10 @@ class account_journal(osv.osv): ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit, context=context) return self.name_get(cr, user, ids, context=context) - def onchange_type(self, cr, uid, ids, type): + def onchange_type(self, cr, uid, ids, type, currency): data_pool = self.pool.get('ir.model.data') + user_pool = self.pool.get('res.users') + type_map = { 'sale':'account_sp_journal_view', 'sale_refund':'account_sp_refund_journal_view', @@ -737,6 +739,11 @@ class account_journal(osv.osv): res = {} view_id = type_map.get(type, 'general') + + user = user_pool.browse(cr, uid, uid) + if type in ('cash', 'bank') and currency and user.company_id.currency_id.id != currency: + view_id = 'account_journal_bank_view_multi' + data_id = data_pool.search(cr, uid, [('model','=','account.journal.view'), ('name','=',view_id)]) data = data_pool.browse(cr, uid, data_id[0]) diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index 6ef38dde583..be77a4d30d5 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -332,7 +332,7 @@ - + From f07518d0d397f96e5bd15d2c35b62121db568f9c Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Thu, 8 Jul 2010 19:02:41 +0530 Subject: [PATCH 06/47] [FIX] account: fix problem in account chart configuration wizard bzr revid: hmo@tinyerp.com-20100708133241-4t2jsm5ibj135mt4 --- addons/account/account.py | 4 ++-- addons/account/installer.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/account/account.py b/addons/account/account.py index 7f01f60253d..322d77eced9 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -2560,8 +2560,8 @@ class wizard_multi_charts_accounts(osv.osv_memory): obj_journal.create(cr,uid,vals_journal) # Bank Journals - view_id_cash = self.pool.get('account.journal.view').search(cr, uid, [('name','=','Cash Journal View')])[0] - view_id_cur = self.pool.get('account.journal.view').search(cr, uid, [('name','=','Multi-Currency Cash Journal View')])[0] + view_id_cash = self.pool.get('account.journal.view').search(cr, uid, [('name','=','Bank/Cash Journal View')])[0] #TOFIX: why put fix name + view_id_cur = self.pool.get('account.journal.view').search(cr, uid, [('name','=','Bank/Cash Journal (Multi-Currency) View')])[0] #TOFIX: why put fix name ref_acc_bank = obj_multi.chart_template_id.bank_account_view_id current_num = 1 diff --git a/addons/account/installer.py b/addons/account/installer.py index 45ea43040a4..aec82032e9a 100644 --- a/addons/account/installer.py +++ b/addons/account/installer.py @@ -207,8 +207,8 @@ class account_installer(osv.osv_memory): new_account = obj_acc.create(cr, uid, vals) acc_template_ref[account_template.id] = new_account if account_template.name == 'Bank Current Account': - view_id_cash = self.pool.get('account.journal.view').search(cr,uid,[('name','=','Cash Journal View')])[0] - view_id_cur = self.pool.get('account.journal.view').search(cr,uid,[('name','=','Multi-Currency Cash Journal View')])[0] + view_id_cash = self.pool.get('account.journal.view').search(cr,uid,[('name','=','Bank/Cash Journal View')])[0] #why fixed name here? + view_id_cur = self.pool.get('account.journal.view').search(cr,uid,[('name','=','Bank/Cash Journal (Multi-Currency) View')])[0] #Why Fixed name here? ref_acc_bank = obj_multi.bank_account_view_id cash_result = mod_obj._get_id(cr, uid, 'account', 'conf_account_type_cash') @@ -328,8 +328,8 @@ class account_installer(osv.osv_memory): obj_journal.create(cr,uid,vals_journal) # Bank Journals - view_id_cash = self.pool.get('account.journal.view').search(cr, uid, [('name','=','Cash Journal View')])[0] - view_id_cur = self.pool.get('account.journal.view').search(cr, uid, [('name','=','Multi-Currency Cash Journal View')])[0] + view_id_cash = self.pool.get('account.journal.view').search(cr, uid, [('name','=','Bank/Cash Journal View')])[0] #TOFIX: Why put fixed name ? + view_id_cur = self.pool.get('account.journal.view').search(cr, uid, [('name','=','Bank/Cash Journal (Multi-Currency) View')])[0] #TOFIX: why put fixed name? ref_acc_bank = obj_multi.bank_account_view_id From dceac87f08ffc9707f0b3adcef59c3ded3a6c464 Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Thu, 8 Jul 2010 19:03:42 +0530 Subject: [PATCH 07/47] [IMP] project_mrp: Add the user_id and project_id in product and add the task_id in procurement bzr revid: sbh@tinyerp.com-20100708133342-105x6v60zwc26c98 --- addons/project_mrp/__openerp__.py | 1 + addons/project_mrp/mrp.py | 14 +++++++---- addons/project_mrp/project_mrp.py | 8 +++++++ addons/project_mrp/project_mrp_view.xml | 31 +++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 addons/project_mrp/project_mrp_view.xml diff --git a/addons/project_mrp/__openerp__.py b/addons/project_mrp/__openerp__.py index a51a95c5d16..2ac983e67e4 100644 --- a/addons/project_mrp/__openerp__.py +++ b/addons/project_mrp/__openerp__.py @@ -51,6 +51,7 @@ automatically created via sale orders. 'init_xml': [], 'update_xml': ['project_mrp_workflow.xml', #'process/project_mrp_process.xml', + 'project_mrp_view.xml' ], 'demo_xml': [], 'test': ['test/project_task_procurement.yml'], diff --git a/addons/project_mrp/mrp.py b/addons/project_mrp/mrp.py index dc5d52e241d..b8eff3c8fa8 100644 --- a/addons/project_mrp/mrp.py +++ b/addons/project_mrp/mrp.py @@ -26,12 +26,16 @@ import tools class procurement_order(osv.osv): _name = "procurement.order" _inherit = "procurement.order" + _columns = { + 'task_id': fields.many2one('project.task', 'Task') + } def action_produce_assign_service(self, cr, uid, ids, context=None): if context is None: context = {} for procurement in self.browse(cr, uid, ids): sline = self.pool.get('sale.order.line') + product_obj=self.pool.get('product.product') content = '' sale_order = self.pool.get('sale.order') so_ref = procurement.name.split(':')[0] @@ -69,6 +73,7 @@ class procurement_order(osv.osv): self.write(cr, uid, [procurement.id], {'state': 'running'}) name_task = ('','') + planned_hours=0.0 if procurement.product_id.type == 'service': proc_name = procurement.name if procurement.origin == proc_name: @@ -77,12 +82,12 @@ class procurement_order(osv.osv): name_task = (procurement.origin, proc_name or '') else: name_task = (procurement.product_id.name or procurement.origin, procurement.name or '') - + planned_hours= procurement.product_id.sale_delay +procurement.product_id. produce_delay task_id = self.pool.get('project.task').create(cr, uid, { 'name': '%s:%s' % name_task, 'date_deadline': procurement.date_planned, - 'planned_hours': procurement.product_qty, - 'remaining_hours': procurement.product_qty, + 'planned_hours':planned_hours, + 'remaining_hours': planned_hours, 'user_id': procurement.product_id.product_manager.id, 'notes': "b"+(l and l.order_id.note or ''), 'procurement_id': procurement.id, @@ -93,7 +98,8 @@ class procurement_order(osv.osv): 'company_id': procurement.company_id.id, 'project_id': project_id, },context=context) - + self.write(cr, uid, [procurement.id],{'task_id':task_id}) + product_obj.write(cr,uid,[procurement.product_id.id],{'user_id':uid,'project_id':project_id}) return task_id procurement_order() diff --git a/addons/project_mrp/project_mrp.py b/addons/project_mrp/project_mrp.py index 09820d44c71..d946e2c2fd6 100644 --- a/addons/project_mrp/project_mrp.py +++ b/addons/project_mrp/project_mrp.py @@ -48,5 +48,13 @@ class project_task(osv.osv): return True project_task() +class product_product(osv.osv): + _inherit = "product.product" + _columns = { + 'user_id': fields.many2one('res.users', 'Responsible', ondelete='set null',help='Project Manager'), + 'project_id': fields.many2one('project.project', 'Project', ondelete='set null',) + } +product_product() + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project_mrp/project_mrp_view.xml b/addons/project_mrp/project_mrp_view.xml new file mode 100644 index 00000000000..5d0c1d71381 --- /dev/null +++ b/addons/project_mrp/project_mrp_view.xml @@ -0,0 +1,31 @@ + + + + + procurement.procurement.form.view.inherit + procurement.order + form + + + + + + + + + + product.form.view.inherit + product.product + form + + + + + + + + + + + + \ No newline at end of file From 8064b86d8db8e932b46335d92acb74c084c09593 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 8 Jul 2010 16:03:52 +0200 Subject: [PATCH 08/47] [IMP] crm_lead: reopen cases upon receipt of new email in states pending, done, cancel bzr revid: odo@openerp.com-20100708140352-tbb36pq8cqq0tqqm --- addons/crm/crm_lead.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 6708f3e8f0e..01c597fcb97 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -31,6 +31,13 @@ import collections import binascii import tools + +CRM_LEAD_PENDING_STATES = ( + crm.AVAILABLE_STATES[2][0], # Cancelled + crm.AVAILABLE_STATES[3][0], # Done + crm.AVAILABLE_STATES[4][0], # Pending +) + class crm_lead(osv.osv, crm_case): """ CRM Lead Case """ _name = "crm.lead" @@ -95,6 +102,10 @@ class crm_lead(osv.osv, crm_case): return res _columns = { + # Overridden from res.partner.address: + 'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null', + select=True, help="Optional linked partner, usually after conversion of the lead"), + # From crm.case 'name': fields.char('Name', size=64), 'active': fields.boolean('Active', required=False), @@ -334,8 +345,8 @@ and users"), # previous state, so we have to loop: for case in self.browse(cr, uid, ids, context=context): values = dict(vals) - if case.state == crm.AVAILABLE_STATES[4][0]: #pending - values.update(state=crm.AVAILABLE_STATES[1][0]) #open + if case.state in CRM_LEAD_PENDING_STATES: + values.update(state=crm.AVAILABLE_STATES[1][0]) #re-open res = self.write(cr, uid, [case.id], values, context=context) return res From 977d51f5698dd19a4bc97fd30c33a7218322bc29 Mon Sep 17 00:00:00 2001 From: "sbh (Open ERP)" Date: Thu, 8 Jul 2010 19:51:02 +0530 Subject: [PATCH 09/47] [IMP] purchase_requisition: if state is done the readonly some field and button bzr revid: sbh@tinyerp.com-20100708142102-ctl0bozqkby8nh6b --- addons/purchase_requisition/purchase_requisition.py | 2 +- addons/purchase_requisition/purchase_requisition_view.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index 3bdc461917b..db05650354b 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -39,7 +39,7 @@ class purchase_requisition(osv.osv): 'exclusive': fields.selection([('exclusive','Purchase Tender (exclusive)'),('multiple','Multiple Requisitions')],'Requisition Type', required=True, help="Purchase Tender (exclusive):On the confirmation of a purchase order, it cancels the remaining purchase order.Multiple Requisitions:It allows to have multiple purchase orders.On confirmation of a purchase order it does not cancel the remaining orders"""), 'description': fields.text('Description'), 'company_id': fields.many2one('res.company', 'Company', required=True), - 'purchase_ids' : fields.one2many('purchase.order','requisition_id','Purchase Orders'), + 'purchase_ids' : fields.one2many('purchase.order','requisition_id','Purchase Orders',states={'done': [('readonly', True)]}), 'line_ids' : fields.one2many('purchase.requisition.line','requisition_id','Products to Purchase',states={'done': [('readonly', True)]}), 'state': fields.selection([('draft','Draft'),('in_progress','In Progress'),('cancel','Cancelled'),('done','Done')], 'State', required=True) } diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml index 93f4f111da0..76aa70aaf42 100644 --- a/addons/purchase_requisition/purchase_requisition_view.xml +++ b/addons/purchase_requisition/purchase_requisition_view.xml @@ -41,7 +41,6 @@ - @@ -83,7 +82,8 @@