From 8573b4647bfa6869c4205e86abb771a09fb6dd53 Mon Sep 17 00:00:00 2001 From: "Antoine Prieels (ANP)" Date: Mon, 19 Nov 2018 10:47:14 +0000 Subject: [PATCH] [IMP] snailmail_account: Deal with invalid addresses - Raise UserError when sending an invoice with an invalid address - Notify when sending letters in batch mode with invalid addresses --- addons/snailmail_account/__manifest__.py | 1 + .../snailmail_account_notification_manager.js | 35 +++++++++++++++++++ addons/snailmail_account/views/assets.xml | 8 +++++ .../wizard/account_invoice_send.py | 26 ++++++++++++-- .../wizard/account_invoice_send_views.xml | 14 +++----- 5 files changed, 72 insertions(+), 12 deletions(-) create mode 100644 addons/snailmail_account/static/src/js/snailmail_account_notification_manager.js create mode 100644 addons/snailmail_account/views/assets.xml diff --git a/addons/snailmail_account/__manifest__.py b/addons/snailmail_account/__manifest__.py index 685cdbbb427..67049f8dada 100644 --- a/addons/snailmail_account/__manifest__.py +++ b/addons/snailmail_account/__manifest__.py @@ -11,6 +11,7 @@ Allows users to send invoices by post 'data': [ 'views/res_config_settings_views.xml', 'views/snailmail_views.xml', + 'views/assets.xml', 'wizard/account_invoice_send_views.xml', ], 'auto_install': True, diff --git a/addons/snailmail_account/static/src/js/snailmail_account_notification_manager.js b/addons/snailmail_account/static/src/js/snailmail_account_notification_manager.js new file mode 100644 index 00000000000..8c42b17c6be --- /dev/null +++ b/addons/snailmail_account/static/src/js/snailmail_account_notification_manager.js @@ -0,0 +1,35 @@ +odoo.define('snailmail_account.NotificationManager', function (require) { +"use strict"; + +var AbstractService = require('web.AbstractService'); +var core = require("web.core"); + +var SnailmailNotificationManager = AbstractService.extend({ + dependencies: ['bus_service'], + + /** + * @override + */ + start: function () { + this._super.apply(this, arguments); + this.call('bus_service', 'onNotification', this, this._onNotification); + }, + + _onNotification: function (notifs) { + var self = this; + _.each(notifs, function (notif) { + var model = notif[0][1]; + var type = notif[1].type; + if (model === 'res.partner' && type === 'snailmail_invalid_address') { + self.do_warn(notif[1].title, notif[1].message); + } + }); + } + +}); + +core.serviceRegistry.add('snailmail_notification_service', SnailmailNotificationManager); + +return SnailmailNotificationManager; + +}); diff --git a/addons/snailmail_account/views/assets.xml b/addons/snailmail_account/views/assets.xml new file mode 100644 index 00000000000..529d22849b1 --- /dev/null +++ b/addons/snailmail_account/views/assets.xml @@ -0,0 +1,8 @@ + + + + diff --git a/addons/snailmail_account/wizard/account_invoice_send.py b/addons/snailmail_account/wizard/account_invoice_send.py index ff6581dae7e..87c87a390a2 100644 --- a/addons/snailmail_account/wizard/account_invoice_send.py +++ b/addons/snailmail_account/wizard/account_invoice_send.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import api, fields, models +from odoo import api, fields, models, _ +from odoo.exceptions import UserError class AccountInvoiceSend(models.TransientModel): @@ -17,8 +18,15 @@ class AccountInvoiceSend(models.TransientModel): @api.depends('snailmail_cost', 'letter_ids') def _compute_invalid_addresses(self): - for wizard in self: - wizard.invalid_addresses = len(wizard.letter_ids) - wizard.snailmail_cost + for wizard in self: + count_invalid_addresses = 0 + required_fields = ['street', 'city', 'zip', 'country_id'] + for letter in wizard.letter_ids: + for field in required_fields: + if not letter.partner_id[field]: + count_invalid_addresses += 1 + break + wizard.invalid_addresses = count_invalid_addresses @api.multi @api.onchange('invoice_ids') @@ -77,6 +85,18 @@ class AccountInvoiceSend(models.TransientModel): @api.multi def send_and_print_action(self): + if self.snailmail_is_letter and self.invalid_addresses: + if self.composition_mode == "mass_mail": + self.env['bus.bus'].sendone( + (self._cr.dbname, 'res.partner', self.env.user.partner_id.id), + {'type': 'snailmail_invalid_address', 'title': _("Invalid Addresses"), + 'message': _("%s of the selected invoice(s) had an invalid address and were not sent") % self.invalid_addresses} + ) + else: + raise UserError(_( + '''Cannot send by post to an incomplete address. + Please update the customer's address or uncheck \'Send by Post\'.''' + )) res = super(AccountInvoiceSend, self).send_and_print_action() if self.snailmail_is_letter: self.snailmail_print_action() diff --git a/addons/snailmail_account/wizard/account_invoice_send_views.xml b/addons/snailmail_account/wizard/account_invoice_send_views.xml index b33a83d2f9c..f771712c36a 100644 --- a/addons/snailmail_account/wizard/account_invoice_send_views.xml +++ b/addons/snailmail_account/wizard/account_invoice_send_views.xml @@ -28,27 +28,23 @@
to: - +
- - Incomplete address for - + + Incomplete customer address
- - Only of the selected invoices have a valid address. + + invoice(s) do not have a complete customer address - - None of the selected invoices have a valid address -