diff --git a/models/hr_expense_sheet.py b/models/hr_expense_sheet.py
index 1b0ae73..7647803 100644
--- a/models/hr_expense_sheet.py
+++ b/models/hr_expense_sheet.py
@@ -163,3 +163,8 @@ class HrExpenseSheet(models.Model):
raise UserError(_("You cannot refuse this report because it has Posted Realizations. Revert them first."))
realizations.write({'state': 'draft'})
return super().action_refuse_expense_sheets()
+
+ def action_recompute_state(self):
+ """ Public wrapper to allow triggering recompute from a button. """
+ self._compute_state()
+ self._compute_payment_state()
diff --git a/views/hr_expense_views.xml b/views/hr_expense_views.xml
index bc6691d..cee25a8 100644
--- a/views/hr_expense_views.xml
+++ b/views/hr_expense_views.xml
@@ -148,7 +148,7 @@
draft,submit,approve,post,wait_post,done
-