diff --git a/addons/om_account_followup/wizard/followup_print.py b/addons/om_account_followup/wizard/followup_print.py
new file mode 100644
index 0000000..bdc4af9
--- /dev/null
+++ b/addons/om_account_followup/wizard/followup_print.py
@@ -0,0 +1,224 @@
+import datetime
+import time
+from odoo import api, fields, models, _
+from markupsafe import Markup
+
+
+class FollowupPrint(models.TransientModel):
+ _name = 'followup.print'
+ _description = 'Print Follow-up & Send Mail to Customers'
+
+ def _get_followup(self):
+ if self.env.context.get('active_model',
+ 'ir.ui.menu') == 'followup.followup':
+ return self.env.context.get('active_id', False)
+ company_id = self.env.user.company_id.id
+ followp_id = self.env['followup.followup'].search(
+ [('company_id', '=', company_id)], limit=1)
+ return followp_id or False
+
+ date = fields.Date('Follow-up Sending Date', required=True,
+ help="This field allow you to select a forecast date "
+ "to plan your follow-ups",
+ default=lambda *a: time.strftime('%Y-%m-%d'))
+ followup_id = fields.Many2one('followup.followup', 'Follow-Up',
+ required=True, readonly=True,
+ default=_get_followup)
+ partner_ids = fields.Many2many('followup.stat.by.partner',
+ 'partner_stat_rel', 'osv_memory_id',
+ 'partner_id', 'Partners', required=True)
+ company_id = fields.Many2one('res.company', readonly=True,
+ related='followup_id.company_id')
+ email_conf = fields.Boolean('Send Email Confirmation')
+ email_subject = fields.Char('Email Subject', size=64,
+ default=_('Invoices Reminder'))
+ partner_lang = fields.Boolean(
+ 'Send Email in Partner Language', default=True,
+ help='Do not change message text, if you want to send email in '
+ 'partner language, or configure from company')
+ email_body = fields.Text('Email Body', default='')
+ summary = fields.Text('Summary', readonly=True)
+ test_print = fields.Boolean(
+ 'Test Print', help='Check if you want to print follow-ups without '
+ 'changing follow-up level.')
+
+ def process_partners(self, partner_ids, data):
+ partner_obj = self.env['res.partner']
+ partner_ids_to_print = []
+ nbmanuals = 0
+ manuals = {}
+ nbmails = 0
+ nbunknownmails = 0
+ nbprints = 0
+ resulttext = " "
+ for partner in self.env['followup.stat.by.partner'].browse(
+ partner_ids):
+ if partner.max_followup_id.manual_action:
+ partner_obj.do_partner_manual_action([partner.partner_id.id])
+ nbmanuals = nbmanuals + 1
+ key = partner.partner_id.payment_responsible_id.name or _(
+ "Anybody")
+ if key not in manuals.keys():
+ manuals[key] = 1
+ else:
+ manuals[key] = manuals[key] + 1
+ if partner.max_followup_id.send_email:
+ nbunknownmails += partner.partner_id.do_partner_mail()
+ nbmails += 1
+ if partner.max_followup_id.send_letter:
+ partner_ids_to_print.append(partner.id)
+ nbprints += 1
+ followup_without_lit = \
+ partner.partner_id.latest_followup_level_id_without_lit
+ message = "%s %s %s" % (_("Follow-up letter of "),
+ followup_without_lit.name,
+ _(" will be sent"))
+ partner.partner_id.message_post(body=message)
+ if nbunknownmails == 0:
+ resulttext += str(nbmails) + _(" email(s) sent")
+ else:
+ resulttext += str(nbmails) + _(
+ " email(s) should have been sent, but ") + str(
+ nbunknownmails) + _(
+ " had unknown email address(es)") + "\n
"
+ resulttext += "
" + str(nbprints) + _(
+ " letter(s) in report") + " \n
" + str(nbmanuals) + _(
+ " manual action(s) assigned:")
+ needprinting = False
+ if nbprints > 0:
+ needprinting = True
+ resulttext += "
" + for item in manuals: + resulttext = resulttext + "