From a794f7effa17c1c781bbeb774fc34e5d22d545ef Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Wed, 9 Sep 2015 15:21:14 +0200 Subject: [PATCH] [IMP] sale_timesheet: stat button for timesheet activities --- .../sale_timesheet/models/sale_timesheet.py | 36 +++++++++++++++++++ .../views/sale_timesheet_view.xml | 22 ++++++++++-- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/addons/sale_timesheet/models/sale_timesheet.py b/addons/sale_timesheet/models/sale_timesheet.py index 57f7818fbf7..68562bdbd2e 100644 --- a/addons/sale_timesheet/models/sale_timesheet.py +++ b/addons/sale_timesheet/models/sale_timesheet.py @@ -76,6 +76,20 @@ class AccountAnalyticLine(models.Model): class SaleOrder(models.Model): _inherit = 'sale.order' + timesheet_ids = fields.One2many('account.analytic.line', compute='_compute_timesheet_ids', string='Timesheet activities associated to this sale') + timesheet_count = fields.Float(string='Timesheet activities', compute='_compute_timesheet_ids') + + @api.multi + @api.depends('project_id.line_ids') + def _compute_timesheet_ids(self): + for order in self: + if not order.project_id: + order.timesheet_ids = [] + order.timesheet_count = 0.0 + else: + order.timesheet_ids = self.env['account.analytic.line'].search([('is_timesheet', '=', True), ('account_id', '=', self.project_id.id)]).ids + order.timesheet_count = sum([line.unit_amount for line in order.timesheet_ids]) + @api.one @api.constrains('order_line') def _check_multi_timesheet(self): @@ -97,6 +111,28 @@ class SaleOrder(models.Model): break return result + @api.multi + def action_view_timesheet(self): + self.ensure_one() + imd = self.env['ir.model.data'] + action = imd.xmlid_to_object('hr_timesheet.act_hr_timesheet_line_evry1_all_form') + list_view_id = imd.xmlid_to_res_id('hr_timesheet.hr_timesheet_line_tree') + form_view_id = imd.xmlid_to_res_id('hr_timesheet.hr_timesheet_line_form') + + result = { + 'name': action.name, + 'help': action.help, + 'type': action.type, + 'views': [[list_view_id, 'tree'], [form_view_id, 'form']], + 'target': action.target, + 'context': action.context, + 'res_model': action.res_model, + } + if self.timesheet_count > 0: + result['domain'] = "[('id','in',%s)]" % self.timesheet_ids.ids + else: + result = {'type': 'ir.actions.act_window_close'} + return result class SaleOrderLine(models.Model): _inherit = "sale.order.line" diff --git a/addons/sale_timesheet/views/sale_timesheet_view.xml b/addons/sale_timesheet/views/sale_timesheet_view.xml index b63511a9926..6aab1f27236 100644 --- a/addons/sale_timesheet/views/sale_timesheet_view.xml +++ b/addons/sale_timesheet/views/sale_timesheet_view.xml @@ -26,8 +26,24 @@ - - + + sale.order.form.sale.timesheet + sale.order + + + + + + + + + + -