From 3751379f1e9a4c215fb6eb898b4ccc67659b9ace Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 10 May 2022 21:51:50 +0700 Subject: initial commit 2 --- addons/snailmail/wizard/__init__.py | 4 ++ addons/snailmail/wizard/snailmail_confirm.py | 50 +++++++++++++++++++++ .../snailmail/wizard/snailmail_confirm_views.xml | 16 +++++++ addons/snailmail/wizard/snailmail_letter_cancel.py | 26 +++++++++++ .../wizard/snailmail_letter_cancel_views.xml | 27 +++++++++++ .../wizard/snailmail_letter_format_error.py | 28 ++++++++++++ .../wizard/snailmail_letter_format_error_views.xml | 30 +++++++++++++ .../snailmail_letter_missing_required_fields.py | 52 ++++++++++++++++++++++ ...ilmail_letter_missing_required_fields_views.xml | 39 ++++++++++++++++ 9 files changed, 272 insertions(+) create mode 100644 addons/snailmail/wizard/__init__.py create mode 100644 addons/snailmail/wizard/snailmail_confirm.py create mode 100644 addons/snailmail/wizard/snailmail_confirm_views.xml create mode 100644 addons/snailmail/wizard/snailmail_letter_cancel.py create mode 100644 addons/snailmail/wizard/snailmail_letter_cancel_views.xml create mode 100644 addons/snailmail/wizard/snailmail_letter_format_error.py create mode 100644 addons/snailmail/wizard/snailmail_letter_format_error_views.xml create mode 100644 addons/snailmail/wizard/snailmail_letter_missing_required_fields.py create mode 100644 addons/snailmail/wizard/snailmail_letter_missing_required_fields_views.xml (limited to 'addons/snailmail/wizard') diff --git a/addons/snailmail/wizard/__init__.py b/addons/snailmail/wizard/__init__.py new file mode 100644 index 00000000..de2f4be2 --- /dev/null +++ b/addons/snailmail/wizard/__init__.py @@ -0,0 +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 00000000..42fe4e0c --- /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 00000000..4df4d9de --- /dev/null +++ b/addons/snailmail/wizard/snailmail_confirm_views.xml @@ -0,0 +1,16 @@ + + + + snailmail.confirm.view + snailmail.confirm + +
+

You are about to send this by post. Are you sure you want to continue?

+
+
+
+
+
+
diff --git a/addons/snailmail/wizard/snailmail_letter_cancel.py b/addons/snailmail/wizard/snailmail_letter_cancel.py new file mode 100644 index 00000000..59d55325 --- /dev/null +++ b/addons/snailmail/wizard/snailmail_letter_cancel.py @@ -0,0 +1,26 @@ + +from odoo import _, api, fields, models + +class SnailmailLetterCancel(models.TransientModel): + _name = 'snailmail.letter.cancel' + _description = 'Dismiss notification for resend by model' + + model = fields.Char(string='Model') + help_message = fields.Char(string='Help message', compute='_compute_help_message') + + @api.depends('model') + def _compute_help_message(self): + for wizard in self: + wizard.help_message = _("Are you sure you want to discard %s snailmail delivery failures? You won't be able to re-send these letters later!") % (wizard._context.get('unread_counter')) + + def cancel_resend_action(self): + author_id = self.env.user.id + for wizard in self: + letters = self.env['snailmail.letter'].search([ + ('state', 'not in', ['sent', 'canceled', 'pending']), + ('user_id', '=', author_id), + ('model', '=', wizard.model) + ]) + for letter in letters: + letter.cancel() + return {'type': 'ir.actions.act_window_close'} diff --git a/addons/snailmail/wizard/snailmail_letter_cancel_views.xml b/addons/snailmail/wizard/snailmail_letter_cancel_views.xml new file mode 100644 index 00000000..1729c105 --- /dev/null +++ b/addons/snailmail/wizard/snailmail_letter_cancel_views.xml @@ -0,0 +1,27 @@ + + + + snailmail.letter.cancel.form + snailmail.letter.cancel + + +
+ + +

If you want to re-send them, click Cancel now, then click on the notification and review them one by one by clicking on the red paper-plane next to each message.

+
+
+ +
+
+ + + Discard snailmail delivery failures + snailmail.letter.cancel + ir.actions.act_window + form + new + +
diff --git a/addons/snailmail/wizard/snailmail_letter_format_error.py b/addons/snailmail/wizard/snailmail_letter_format_error.py new file mode 100644 index 00000000..38168101 --- /dev/null +++ b/addons/snailmail/wizard/snailmail_letter_format_error.py @@ -0,0 +1,28 @@ + +from odoo import api, fields, models + +class SnailmailLetterFormatError(models.TransientModel): + _name = 'snailmail.letter.format.error' + _description = 'Format Error Sending a Snailmail Letter' + + message_id = fields.Many2one( + 'mail.message', + default=lambda self: self.env.context.get('message_id', None), + ) + snailmail_cover = fields.Boolean( + string='Add a Cover Page', + default=lambda self: self.env.company.snailmail_cover, + ) + + def update_resend_action(self): + self.env.company.write({'snailmail_cover': self.snailmail_cover}) + letters_to_resend = self.env['snailmail.letter'].search([ + ('error_code', '=', 'FORMAT_ERROR'), + ]) + for letter in letters_to_resend: + letter.attachment_id.unlink() + letter.write({'cover': self.snailmail_cover}) + letter.snailmail_print() + + def cancel_letter_action(self): + self.message_id.cancel_letter() diff --git a/addons/snailmail/wizard/snailmail_letter_format_error_views.xml b/addons/snailmail/wizard/snailmail_letter_format_error_views.xml new file mode 100644 index 00000000..8277cf95 --- /dev/null +++ b/addons/snailmail/wizard/snailmail_letter_format_error_views.xml @@ -0,0 +1,30 @@ + + + + snailmail.letter.format.error.form + snailmail.letter.format.error + + +
+

Our service cannot read your letter due to its format.
+ Please modify the format of the template or update your settings + to automatically add a blank cover page to all letters.

+ +
+
+ + + Format Error + snailmail.letter.format.error + ir.actions.act_window + form + new + +
diff --git a/addons/snailmail/wizard/snailmail_letter_missing_required_fields.py b/addons/snailmail/wizard/snailmail_letter_missing_required_fields.py new file mode 100644 index 00000000..4216f3f8 --- /dev/null +++ b/addons/snailmail/wizard/snailmail_letter_missing_required_fields.py @@ -0,0 +1,52 @@ + +from odoo import _, api, fields, models + +class SnailmailLetterMissingRequiredFields(models.TransientModel): + _name = 'snailmail.letter.missing.required.fields' + _description = 'Update address of partner' + + partner_id = fields.Many2one('res.partner') + letter_id = fields.Many2one('snailmail.letter') + + street = fields.Char('Street') + street2 = fields.Char('Street2') + zip = fields.Char('Zip') + city = fields.Char('City') + state_id = fields.Many2one("res.country.state", string='State') + country_id = fields.Many2one('res.country', string='Country') + + @api.model + def default_get(self, fields): + defaults = super(SnailmailLetterMissingRequiredFields, self).default_get(fields) + if defaults.get('letter_id'): + letter = self.env['snailmail.letter'].browse(defaults.get('letter_id')) + defaults.update({ + 'partner_id': letter.partner_id.id, + 'street': letter.street, + 'street2': letter.street2, + 'zip': letter.zip, + 'city': letter.city, + 'state_id': letter.state_id.id, + 'country_id': letter.country_id.id, + }) + return defaults + + def update_address_cancel(self): + self.letter_id.cancel() + + def update_address_save(self): + address_data = { + 'street': self.street, + 'street2': self.street2, + 'zip': self.zip, + 'city': self.city, + 'state_id': self.state_id.id, + 'country_id': self.country_id.id, + } + self.partner_id.write(address_data) + letters_to_resend = self.env['snailmail.letter'].search([ + ('partner_id', '=', self.partner_id.id), + ('error_code', '=', 'MISSING_REQUIRED_FIELDS'), + ]) + letters_to_resend.write(address_data) + letters_to_resend.snailmail_print() diff --git a/addons/snailmail/wizard/snailmail_letter_missing_required_fields_views.xml b/addons/snailmail/wizard/snailmail_letter_missing_required_fields_views.xml new file mode 100644 index 00000000..dccd802e --- /dev/null +++ b/addons/snailmail/wizard/snailmail_letter_missing_required_fields_views.xml @@ -0,0 +1,39 @@ + + + + snailmail.letter.missing.required.fields.form + snailmail.letter.missing.required.fields + +
+ + +

The customer address is not complete. Update the address here and re-send the letter.

+ + +
+
+ +
+
+ + + Failed letter + snailmail.letter.missing.required.fields + ir.actions.act_window + form + new + +
-- cgit v1.2.3