Odoo18-Base/addons/snailmail_account/models/account_move_send.py
2025-01-06 10:57:38 +07:00

69 lines
2.9 KiB
Python

from odoo import api, models, _
class AccountMoveSend(models.AbstractModel):
_inherit = 'account.move.send'
# -------------------------------------------------------------------------
# ALERTS
# -------------------------------------------------------------------------
def _get_alerts(self, moves, moves_data):
# EXTENDS 'account'
alerts = super()._get_alerts(moves, moves_data)
if snailmail_moves_without_valid_address := moves.filtered(
lambda m: 'snailmail' in moves_data[m]['sending_methods'] and not self.env['snailmail.letter']._is_valid_address(m.partner_id)
):
alerts['snailmail_account_partner_invalid_address'] = {
'level': 'danger' if len(snailmail_moves_without_valid_address) == 1 else 'warning',
'message': _(
"The partners on the following invoices have no valid address, "
"so those invoices will not be sent: %s",
", ".join(snailmail_moves_without_valid_address.mapped('name'))
),
'action_text': _("View Invoice(s)"),
'action': snailmail_moves_without_valid_address._get_records_action(name=_("Check Invoice(s)")),
}
return alerts
# -------------------------------------------------------------------------
# HELPERS
# -------------------------------------------------------------------------
@api.model
def _prepare_snailmail_letter_values(self, move):
return {
'partner_id': move.partner_id.id,
'model': 'account.move',
'res_id': move.id,
'company_id': move.company_id.id,
'report_template': self.env['ir.actions.report']._get_report('account.account_invoices').id
}
# -------------------------------------------------------------------------
# SENDING METHODS
# -------------------------------------------------------------------------
def _is_applicable_to_move(self, method, move):
# EXTENDS 'account'
if method == 'snailmail':
return self.env['snailmail.letter']._is_valid_address(move.partner_id)
else:
return super()._is_applicable_to_move(method, move)
def _hook_if_success(self, moves_data):
# EXTENDS 'account'
super()._hook_if_success(moves_data)
to_send = {
move: move_data
for move, move_data in moves_data.items()
if 'snailmail' in move_data['sending_methods'] and self._is_applicable_to_move('snailmail', move)
}
if to_send:
self.env['snailmail.letter'].create([
{
'user_id': move_data.get('author_user_id') or self.env.user.id,
**self._prepare_snailmail_letter_values(move),
}
for move, move_data in to_send.items()
])\
._snailmail_print(immediate=False)