diff options
| author | Kevin Baptiste <kba@odoo.com> | 2020-03-17 13:00:21 +0000 |
|---|---|---|
| committer | Yannick Tivisse <yti@odoo.com> | 2020-04-16 09:36:04 +0000 |
| commit | b83e78370005b9089d75859fcd0b13c50e64eadd (patch) | |
| tree | 07aa032bab13e95267b3b75369b186ae2cecc9fc | |
| parent | 0b0690a3934cedcab0d5e34373e8d40c2ab25660 (diff) | |
[IMP] snailmail: confirm sending first letter
Show a confirmation dialog when a user is sending the very first letter.
=========
Purpose
=========
It happens from time to time that a letter gets sent by accident to a
final customer. This situation is always a bit problematic and is
usually only uncovered when it is too late. Having an additional
warning when sending the very first letter should help avoid that kind
of issue.
================
Specifications
================
Display the following warning when the user tries to send a snailmail
letter for the first time (from an invoice or from a follow-up report):
'You are about to send this invoice/follow-up report by post. Are you
sure you want to continue?' Confirm/Cancel
closes odoo/odoo#47861
Taskid: 2215091
Related: odoo/enterprise#9326
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
| -rw-r--r-- | addons/snailmail/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/snailmail/wizard/__init__.py | 1 | ||||
| -rw-r--r-- | addons/snailmail/wizard/snailmail_confirm.py | 50 | ||||
| -rw-r--r-- | addons/snailmail/wizard/snailmail_confirm_views.xml | 16 | ||||
| -rw-r--r-- | addons/snailmail_account/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/snailmail_account/security/ir.model.access.csv | 2 | ||||
| -rw-r--r-- | addons/snailmail_account/wizard/__init__.py | 1 | ||||
| -rw-r--r-- | addons/snailmail_account/wizard/account_invoice_send.py | 18 | ||||
| -rw-r--r-- | addons/snailmail_account/wizard/snailmail_confirm_invoice_send.py | 20 |
9 files changed, 107 insertions, 3 deletions
diff --git a/addons/snailmail/__manifest__.py b/addons/snailmail/__manifest__.py index 5f2e98a6e78..00d597708fd 100644 --- a/addons/snailmail/__manifest__.py +++ b/addons/snailmail/__manifest__.py @@ -13,6 +13,7 @@ Allows users to send documents by post 'views/report_assets.xml', 'views/snailmail_views.xml', 'views/assets.xml', + 'wizard/snailmail_confirm_views.xml', 'wizard/snailmail_letter_cancel_views.xml', 'wizard/snailmail_letter_format_error_views.xml', 'wizard/snailmail_letter_missing_required_fields_views.xml', diff --git a/addons/snailmail/wizard/__init__.py b/addons/snailmail/wizard/__init__.py index 86a507b287b..de2f4be2c8c 100644 --- a/addons/snailmail/wizard/__init__.py +++ b/addons/snailmail/wizard/__init__.py @@ -1,3 +1,4 @@ +from . import snailmail_confirm from . import snailmail_letter_cancel from . import snailmail_letter_format_error from . import snailmail_letter_missing_required_fields diff --git a/addons/snailmail/wizard/snailmail_confirm.py b/addons/snailmail/wizard/snailmail_confirm.py new file mode 100644 index 00000000000..42fe4e0c832 --- /dev/null +++ b/addons/snailmail/wizard/snailmail_confirm.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models, _ + + +class SnailmailConfirm(models.AbstractModel): + _name = 'snailmail.confirm' + _description = 'Snailmail Confirm' + + model_name = fields.Char() + + @api.model + def show_warning(self): + return not self.env['ir.config_parameter'].sudo().get_param('%s.warning_shown' % self._name, False) + + def action_open(self): + view = self.env.ref('snailmail.snailmail_confirm_view') + return { + 'name': _('Snailmail'), + 'type': 'ir.actions.act_window', + 'view_mode': 'form', + 'res_model': self._name, + 'views': [(view.id, 'form')], + 'view_id': view.id, + 'target': 'new', + 'res_id': self.id, + 'context': self.env.context + } + + def action_confirm(self): + self.env['ir.config_parameter'].sudo().set_param('%s.warning_shown' % self._name, True) + self._confirm() + return self._continue() + + def action_cancel(self): + self.env['ir.config_parameter'].sudo().set_param('%s.warning_shown' % self._name, True) + return self._continue() + + """ + Called whether the user confirms or cancels posting the letter, e.g. to continue the action + """ + def _continue(self): + pass + + """ + Called only when the user confirms sending the letter + """ + def _confirm(self): + pass diff --git a/addons/snailmail/wizard/snailmail_confirm_views.xml b/addons/snailmail/wizard/snailmail_confirm_views.xml new file mode 100644 index 00000000000..4df4d9de72f --- /dev/null +++ b/addons/snailmail/wizard/snailmail_confirm_views.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="snailmail_confirm_view" model="ir.ui.view"> + <field name="name">snailmail.confirm.view</field> + <field name="model">snailmail.confirm</field> + <field name="arch" type="xml"> + <form string="Snailmail Confirmation"> + <p>You are about to send this <field name="model_name" readonly="1" class="oe_inline" /> by post. Are you sure you want to continue?</p> + <footer> + <button string="Confirm" name="action_confirm" type="object" class="btn-primary" /> + <button string="Cancel" name="action_cancel" type="object" class="btn-secondary" /> + </footer> + </form> + </field> + </record> +</odoo> diff --git a/addons/snailmail_account/__manifest__.py b/addons/snailmail_account/__manifest__.py index bf71da11897..758f2f15cf3 100644 --- a/addons/snailmail_account/__manifest__.py +++ b/addons/snailmail_account/__manifest__.py @@ -12,6 +12,7 @@ Allows users to send invoices by post 'views/res_config_settings_views.xml', 'views/assets.xml', 'wizard/account_invoice_send_views.xml', + 'security/ir.model.access.csv', ], 'auto_install': True, } diff --git a/addons/snailmail_account/security/ir.model.access.csv b/addons/snailmail_account/security/ir.model.access.csv new file mode 100644 index 00000000000..02ff3cfefa3 --- /dev/null +++ b/addons/snailmail_account/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_snailmail_confirm_invoice,access_snailmail_confirm_invoice,model_snailmail_confirm_invoice,account.group_account_invoice,1,1,1,0 diff --git a/addons/snailmail_account/wizard/__init__.py b/addons/snailmail_account/wizard/__init__.py index 1a67eb15ca1..c720dbcf19c 100644 --- a/addons/snailmail_account/wizard/__init__.py +++ b/addons/snailmail_account/wizard/__init__.py @@ -1,3 +1,4 @@ # -*- coding: utf-8 -*- from . import account_invoice_send +from . import snailmail_confirm_invoice_send diff --git a/addons/snailmail_account/wizard/account_invoice_send.py b/addons/snailmail_account/wizard/account_invoice_send.py index 28f1a28bdf2..c4c74f9b9df 100644 --- a/addons/snailmail_account/wizard/account_invoice_send.py +++ b/addons/snailmail_account/wizard/account_invoice_send.py @@ -57,9 +57,21 @@ class AccountInvoiceSend(models.TransientModel): def send_and_print_action(self): if self.snailmail_is_letter: - if self.invalid_addresses and self.composition_mode == "mass_mail": - self.notify_invalid_addresses() - self.snailmail_print_action() + if self.env['snailmail.confirm.invoice'].show_warning(): + wizard = self.env['snailmail.confirm.invoice'].create({'model_name': _('Invoice'), 'invoice_send_id': self.id}) + return wizard.action_open() + self._print_action() + return self.send_and_print() + + def _print_action(self): + if not self.snailmail_is_letter: + return + + if self.invalid_addresses and self.composition_mode == "mass_mail": + self.notify_invalid_addresses() + self.snailmail_print_action() + + def send_and_print(self): res = super(AccountInvoiceSend, self).send_and_print_action() return res diff --git a/addons/snailmail_account/wizard/snailmail_confirm_invoice_send.py b/addons/snailmail_account/wizard/snailmail_confirm_invoice_send.py new file mode 100644 index 00000000000..a3c3da40e8c --- /dev/null +++ b/addons/snailmail_account/wizard/snailmail_confirm_invoice_send.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class SnailmailConfirmInvoiceSend(models.TransientModel): + _name = 'snailmail.confirm.invoice' + _inherit = ['snailmail.confirm'] + _description = 'Snailmail Confirm Invoice' + + invoice_send_id = fields.Many2one('account.invoice.send') + + def _confirm(self): + self.ensure_one() + self.invoice_send_id._print_action() + + def _continue(self): + self.ensure_one() + return self.invoice_send_id.send_and_print() |
