From d00a381ece3d17e9e6af947aadff4647adb50133 Mon Sep 17 00:00:00 2001 From: Bonis Modi Date: Thu, 7 Jan 2021 08:57:22 +0000 Subject: [PATCH] [FIX] hr_expense: create expense report without creating record Currently, When we create expense report from expense it will directly create a expense report record so discard button on top is misleading. So in this commit, when creating the expense report from the expense it will not create an record but set the default value in editable form view with auto computed name based on expense. Also create report action coming to the two places 1) in top action menu 2) on tree header So in this commit, removed 'create report' menu from top action bar. Added the depends on can_reset and can_approve to compute the value for displaying the button when record is not saved from the 'create Expense report' button and default in submit state. also fix the attachment_number field because expense.id is NewId_X while passing in default_get of expense_line_ids so count was 0 without saving the expense sheet. closes odoo/odoo#65104 Taskid: 2359834 Related: odoo/upgrade#1875 Signed-off-by: Yannick Tivisse (yti) --- addons/hr_expense/models/hr_expense.py | 47 +++++++++++++------- addons/hr_expense/views/hr_expense_views.xml | 19 ++------ 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py index e2562fedc6a..6b747a54759 100644 --- a/addons/hr_expense/models/hr_expense.py +++ b/addons/hr_expense/models/hr_expense.py @@ -2,9 +2,10 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. import re -from odoo import api, fields, models, _ +from odoo import api, fields, Command, models, _ from odoo.exceptions import UserError, ValidationError from odoo.tools import email_split, float_is_zero, float_repr +from odoo.tools.misc import clean_context, format_date from odoo.addons.account.models.account_move import PAYMENT_STATE_SELECTION @@ -197,7 +198,7 @@ class HrExpense(models.Model): attachment_data = self.env['ir.attachment'].read_group([('res_model', '=', 'hr.expense'), ('res_id', 'in', self.ids)], ['res_id'], ['res_id']) attachment = dict((data['res_id'], data['res_id_count']) for data in attachment_data) for expense in self: - expense.attachment_number = attachment.get(expense.id, 0) + expense.attachment_number = attachment.get(expense._origin.id, 0) @api.depends('employee_id') def _compute_is_editable(self): @@ -385,7 +386,7 @@ Or send your receipts at 1 + @api.depends('employee_id') def _compute_can_reset(self): is_expense_user = self.user_has_groups('hr_expense.group_hr_expense_team_approver') for sheet in self: sheet.can_reset = is_expense_user if is_expense_user else sheet.employee_id.user_id == self.env.user @api.depends_context('uid') + @api.depends('employee_id') def _compute_can_approve(self): is_approver = self.user_has_groups('hr_expense.group_hr_expense_team_approver, hr_expense.group_hr_expense_user') is_manager = self.user_has_groups('hr_expense.group_hr_expense_manager') @@ -962,7 +974,12 @@ class HrExpenseSheet(models.Model): @api.model def create(self, vals): - sheet = super(HrExpenseSheet, self.with_context(mail_create_nosubscribe=True, mail_auto_subscribe_no_notify=True)).create(vals) + context = clean_context(self.env.context) + context.update({ + 'mail_create_nosubscribe': True, + 'mail_auto_subscribe_no_notify': True + }) + sheet = super(HrExpenseSheet, self.with_context(context)).create(vals) sheet.activity_update() return sheet @@ -1014,7 +1031,7 @@ class HrExpenseSheet(models.Model): expense_line_ids = self.mapped('expense_line_ids')\ .filtered(lambda r: not float_is_zero(r.total_amount, precision_rounding=(r.currency_id or self.env.company.currency_id).rounding)) - res = expense_line_ids.action_move_create() + res = expense_line_ids.with_context(clean_context(self.env.context)).action_move_create() for sheet in self.filtered(lambda s: not s.accounting_date): sheet.accounting_date = sheet.account_move_id.date to_post = self.filtered(lambda sheet: sheet.payment_mode == 'own_account' and sheet.expense_line_ids) diff --git a/addons/hr_expense/views/hr_expense_views.xml b/addons/hr_expense/views/hr_expense_views.xml index 988588f160f..0246f7b3757 100644 --- a/addons/hr_expense/views/hr_expense_views.xml +++ b/addons/hr_expense/views/hr_expense_views.xml @@ -689,7 +689,7 @@ groups="account.group_account_invoice"/>