diff --git a/addons/project/models/project.py b/addons/project/models/project.py index c2518015e44..d3fc1d10d7d 100644 --- a/addons/project/models/project.py +++ b/addons/project/models/project.py @@ -2118,6 +2118,7 @@ class Task(models.Model): 'res_model': 'project.task', 'type': 'ir.actions.act_window', 'context': {**self._context, 'default_depend_on_ids': [Command.link(self.id)]}, + 'domain': [('depend_on_ids', '=', self.id)], } if self.dependent_tasks_count == 1: action['view_mode'] = 'form' @@ -2125,7 +2126,6 @@ class Task(models.Model): else: action['name'] = _('Dependent Tasks') action['view_mode'] = 'tree,form,kanban,calendar,pivot,graph,activity' - action['domain'] = [('depend_on_ids', '=', self.id)] return action def action_recurring_tasks(self): diff --git a/addons/sale_timesheet/models/project.py b/addons/sale_timesheet/models/project.py index 8fcf6b2676a..4ac5bd42ba8 100644 --- a/addons/sale_timesheet/models/project.py +++ b/addons/sale_timesheet/models/project.py @@ -306,7 +306,7 @@ class Project(models.Model): def _get_sale_order_lines(self): sale_orders = self.sale_order_id | self.tasks.sale_order_id - return self.env['sale.order.line'].search([('order_id', 'in', sale_orders.ids), ('is_service', '=', True)], order='id asc') + return self.env['sale.order.line'].search([('order_id', 'in', sale_orders.ids), ('is_service', '=', True), ('is_downpayment', '=', False)], order='id asc') def _get_sold_items(self): sols = self._get_sale_order_lines() @@ -324,15 +324,16 @@ class Project(models.Model): name = [x[1] for x in sol.name_get()] if number_sale_orders > 1 else sol.name qty_delivered = sol.product_uom._compute_quantity(sol.qty_delivered, self.env.company.timesheet_encode_uom_id, raise_if_failure=False) product_uom_qty = sol.product_uom._compute_quantity(sol.product_uom_qty, self.env.company.timesheet_encode_uom_id, raise_if_failure=False) - sold_items['data'].append({ - 'name': name, - 'value': '%s / %s %s' % (formatLang(self.env, qty_delivered, 1), formatLang(self.env, product_uom_qty, 1), sol.product_uom.name if sol.product_uom == product_uom_unit else self.env.company.timesheet_encode_uom_id.name), - 'color': 'red' if qty_delivered > product_uom_qty else 'black' - }) - #We only want to consider hours and days for this calculation - if sol.product_uom.category_id == self.env.company.timesheet_encode_uom_id.category_id: - sold_items['total_sold'] += product_uom_qty - sold_items['effective_sold'] += sol.product_uom._compute_quantity(qty_delivered, self.env.company.timesheet_encode_uom_id, raise_if_failure=False) + if qty_delivered > 0 or product_uom_qty > 0: + sold_items['data'].append({ + 'name': name, + 'value': '%s / %s %s' % (formatLang(self.env, qty_delivered, 1), formatLang(self.env, product_uom_qty, 1), sol.product_uom.name if sol.product_uom == product_uom_unit else self.env.company.timesheet_encode_uom_id.name), + 'color': 'red' if qty_delivered > product_uom_qty else 'black' + }) + #We only want to consider hours and days for this calculation, and eventually units if the service policy is not based on milestones + if sol.product_uom.category_id == self.env.company.timesheet_encode_uom_id.category_id or (sol.product_uom == product_uom_unit and sol.product_id.service_policy != 'delivered_manual'): + sold_items['total_sold'] += product_uom_qty + sold_items['effective_sold'] += sol.product_uom._compute_quantity(qty_delivered, self.env.company.timesheet_encode_uom_id, raise_if_failure=False) remaining = sold_items['total_sold'] - sold_items['effective_sold'] sold_items['remaining'] = { 'value': remaining,