[IMP] snailmail: Add form and tree views for snailmail.letter

Add new form and tree views for snailmail.letter available in Accounting > Configuration > Management > Snailmail Letters
Add a many2one field to snailmail.letter to link to a mail.activity in case of an error with snailmail

Task #1892473
This commit is contained in:
Antoine Prieels (ANP)
2018-11-22 15:38:42 +00:00
committed by Rémi Rahir
parent 182b4d86f4
commit 2dfa7cd597
5 changed files with 87 additions and 24 deletions
+22 -5
View File
@@ -18,7 +18,7 @@ msgstr ""
#. module: snailmail
#: code:addons/snailmail/models/snailmail_letter.py:249
#, python-format
msgid "An error occured when sending the document by post.<br>Error: %s"
msgid "An error occured when sending the document by post.<br>Error: %s <br>Go to 'Configuration > Management > Snailmail Letters' to see all letters awaiting dispatch to Snailmail."
msgstr ""
#. module: snailmail
@@ -28,7 +28,9 @@ msgid "An unknown error happened. Please contact the support."
msgstr ""
#. module: snailmail
#: code:addons/snailmail/models/snailmail_letter.py:343
#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__attachment_id
#, python-format
msgid "Attachment"
msgstr ""
@@ -103,6 +105,12 @@ msgstr ""
msgid "Display Name"
msgstr ""
#. module: snailmail
#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_form
#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_list
msgid "Document"
msgstr ""
#. module: snailmail
#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__res_id
msgid "Document ID"
@@ -149,8 +157,6 @@ msgid "Last Updated on"
msgstr ""
#. module: snailmail
#: model:ir.actions.act_window,name:snailmail.action_mail_letters
#: model:ir.ui.menu,name:snailmail.menu_snailmail_letters
#: model_terms:ir.ui.view,arch_db:snailmail.snailmail_letter_list
msgid "Letters"
msgstr ""
@@ -217,11 +223,22 @@ msgstr ""
msgid "Sent"
msgstr ""
#. module: snailmail
#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__user_id
msgid "Sent by"
msgstr ""
#. module: snailmail
#: model:ir.model,name:snailmail.model_snailmail_letter
msgid "Snailmail Letter"
msgstr ""
#. module: snailmail
#: model:ir.actions.act_window,name:snailmail.action_mail_letters
#: model:ir.ui.menu,name:snailmail.menu_snailmail_letters
msgid "Snailmail Letters"
msgstr ""
#. module: snailmail
#: model:ir.actions.server,name:snailmail.snailmail_print_ir_actions_server
#: model:ir.cron,cron_name:snailmail.snailmail_print
@@ -253,8 +270,8 @@ msgid "The document was correctly sent by post.<br>The tracking id is %ssend_id"
msgstr ""
#. module: snailmail
#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__user_id
msgid "User sending the letter"
#: model:ir.model.fields,field_description:snailmail.field_snailmail_letter__title
msgid "Title"
msgstr ""
#. module: snailmail
+29 -5
View File
@@ -18,7 +18,7 @@ class SnailmailLetter(models.Model):
_name = 'snailmail.letter'
_description = 'Snailmail Letter'
user_id = fields.Many2one('res.users', 'User sending the letter')
user_id = fields.Many2one('res.users', 'Sent by')
model = fields.Char('Model', required=True)
res_id = fields.Integer('Document ID', required=True)
partner_id = fields.Many2one('res.partner', string='Recipient', required=True)
@@ -27,6 +27,9 @@ class SnailmailLetter(models.Model):
report_template = fields.Many2one('ir.actions.report', 'Optional report to print and attach')
attachment_id = fields.Many2one('ir.attachment', string='Attachment', ondelete='cascade')
attachment_datas = fields.Binary('Document', related='attachment_id.datas')
attachment_fname = fields.Char('Attachment Filename', related='attachment_id.datas_fname')
activity_id = fields.Many2one('mail.activity', string='Activity')
color = fields.Boolean(string='Color', default=lambda self: self.env.user.company_id.snailmail_color)
duplex = fields.Boolean(string='Both side', default=lambda self: self.env.user.company_id.snailmail_duplex)
state = fields.Selection([
@@ -40,7 +43,23 @@ class SnailmailLetter(models.Model):
"If the letter is correctly sent, the status goes in 'Sent',\n"
"If not, it will got in state 'Error' and the error message will be displayed in the field 'Error Message'.")
info_msg = fields.Char('Information')
display_name = fields.Char('Display Name', compute="_compute_display_name")
reference = fields.Char(string='Related Record', compute='_compute_reference', readonly=True, store=False)
@api.depends('reference', 'partner_id')
def _compute_display_name(self):
for letter in self:
if letter.attachment_id:
letter.display_name = "%s - %s" % (letter.attachment_id.name, letter.partner_id.name)
else:
letter.display_name = letter.partner_id.name
@api.depends('model', 'res_id')
def _compute_reference(self):
for res in self:
res.reference = "%s,%s" % (res.model, res.res_id)
@api.multi
def _fetch_attachment(self):
"""
@@ -245,7 +264,7 @@ class SnailmailLetter(models.Model):
else:
# look for existing activities related to snailmail to update or create a new one.
# TODO: in following versions, Add a link to a specifc activity on the letter
note = _('An error occured when sending the document by post.<br>Error: %s' % \
note = _('An error occured when sending the document by post.<br>Error: %s <br>Go to \'Configuration > Management > Snailmail Letters\' to see all letters awaiting dispatch to Snailmail.' % \
self._get_error_message(doc['error'] if response['request_code'] == 200 else response['reason']))
domain = [
@@ -254,8 +273,7 @@ class SnailmailLetter(models.Model):
('res_model_id', '=', self.env['ir.model']._get(letter.model).id),
('activity_type_id', '=', self.env.ref('mail.mail_activity_data_warning').id),
]
MailActivity = self.env['mail.activity']
activity = MailActivity.search(domain, limit=1)
activity = letter.activity_id
activity_data = {
'activity_type_id': self.env.ref('mail.mail_activity_data_warning').id,
@@ -271,7 +289,8 @@ class SnailmailLetter(models.Model):
'res_id': letter.res_id,
'res_model_id': self.env['ir.model']._get(letter.model).id,
})
MailActivity.create(activity_data)
activity = self.env['mail.activity'].create(activity_data)
letter.write({'activity_id': activity.id})
letter.write({'info_msg': note, 'state': 'error'})
@@ -285,6 +304,11 @@ class SnailmailLetter(models.Model):
def cancel(self):
self.write({'state': 'canceled'})
@api.multi
def unlink(self):
self.mapped('activity_id').unlink()
super(SnailmailLetter, self).unlink()
@api.multi
def _snailmail_estimate(self):
"""
+19 -14
View File
@@ -5,11 +5,10 @@
<field name="model">snailmail.letter</field>
<field name="arch" type="xml">
<tree decoration-danger="state=='error'" decoration-muted="state=='sent'" string="Letters">
<field name="attachment_id"/>
<field name="model"/>
<field name="res_id"/>
<field name="company_id"/>
<field name="state"/>
<field name="attachment_id" string="Document"/>
<field name="partner_id"/>
<field name="user_id"/>
<field name="state" invisible="1"/>
<field name="info_msg" widget="html"/>
</tree>
</field>
@@ -26,16 +25,22 @@
<field name="state" widget="statusbar" statusbar_visible="pending,sent,cancel"/>
</header>
<sheet>
<div class="oe_title">
<h1><field name="display_name" readonly="1"/></h1>
</div>
<group>
<field name="attachment_id"/>
<field name="partner_id"/>
<field name="user_id"/>
<field name="model"/>
<field name="res_id"/>
<field name="color"/>
<field name="duplex"/>
<field name="reference" widget="reference" readonly="1"/>
<field name="attachment_datas" filename="attachment_fname" readonly="1" />
<field name="attachment_fname" invisible="1"/>
<field name="partner_id" readonly="1"/>
<field name="user_id" readonly="1"/>
<field name="info_msg" widget="html" readonly="1"/>
<field name="company_id"/>
</group>
<group groups="base.group_no_one">
<field name="model" readonly="1"/>
<field name="res_id" readonly="1"/>
<field name="color" readonly="1"/>
<field name="duplex" readonly="1"/>
</group>
</sheet>
</form>
@@ -43,7 +48,7 @@
</record>
<record model="ir.actions.act_window" id="action_mail_letters">
<field name="name">Letters</field>
<field name="name">Snailmail Letters</field>
<field name="res_model">snailmail.letter</field>
<field name="view_type">form</field>
<field name="view_mode">form,tree</field>
+1
View File
@@ -10,6 +10,7 @@ Allows users to send invoices by post
'depends': ['account', 'snailmail'],
'data': [
'views/res_config_settings_views.xml',
'views/snailmail_views.xml',
'wizard/account_invoice_send_views.xml',
],
'auto_install': True,
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record model="ir.actions.act_window" id="action_mail_invoice_letters">
<field name="name">Snailmail Letters</field>
<field name="res_model">snailmail.letter</field>
<field name="view_type">form</field>
<field name="view_mode">form,tree</field>
<field name="domain">[('state', '!=', 'draft'), ('model','=','account.invoice')]</field>
<field name="view_id" ref="snailmail.snailmail_letter_list" />
</record>
<menuitem id="menu_snailmail_invoice_letters" parent="account.account_management_menu" action="action_mail_invoice_letters"
sequence="10"/>
</odoo>