This commit is contained in:
Mazen Abdo 2025-10-29 15:33:54 +03:00
parent 42843ca389
commit fc9221ea4b
2 changed files with 113 additions and 113 deletions

View File

@ -5,58 +5,58 @@ from odoo.exceptions import AccessError
class AccountPayment(models.Model): class AccountPayment(models.Model):
_inherit = 'account.payment' _inherit = 'account.payment'
def _is_authorized_to_notify(self): # def _is_authorized_to_notify(self):
#
user = self.env.user # user = self.env.user
#
authorized_groups = [ # authorized_groups = [
'account.group_account_manager', # 'account.group_account_manager',
'account.group_account_invoice', # 'account.group_account_invoice',
# 'purchase.group_purchase_manager', # # 'purchase.group_purchase_manager',
] # ]
#
for group_xml_id in authorized_groups: # for group_xml_id in authorized_groups:
if user.has_group(group_xml_id): # if user.has_group(group_xml_id):
return True # return True
#
return False # return False
#
def action_notify_payment(self, payment): # def action_notify_payment(self, payment):
# Check authorization before sending notification # # Check authorization before sending notification
if not self._is_authorized_to_notify(): # if not self._is_authorized_to_notify():
return # return
#
# Prepare notification content # # Prepare notification content
subject = _('Payment Notification') + ' - {}'.format(payment.partner_id.name) # subject = _('Payment Notification') + ' - {}'.format(payment.partner_id.name)
message = '{} '.format(payment.partner_id.name) + _('is successfully paid.') + '\n' + _( # message = '{} '.format(payment.partner_id.name) + _('is successfully paid.') + '\n' + _(
'Payment Amount: ') + '{}'.format(payment.amount) + '\n' + _('Ref: ') + '{}'.format(payment.ref) + '\n' + _( # 'Payment Amount: ') + '{}'.format(payment.amount) + '\n' + _('Ref: ') + '{}'.format(payment.ref) + '\n' + _(
'On Date: ') + '{}'.format(payment.date) # 'On Date: ') + '{}'.format(payment.date)
#
# Get recipients from the notification group, excluding purchase managers # # Get recipients from the notification group, excluding purchase managers
recipient_group = self.env.ref('purchase_requisition_custom.group_receive_payment_notification') # recipient_group = self.env.ref('purchase_requisition_custom.group_receive_payment_notification')
excluded_group = self.env.ref('purchase.group_purchase_manager') # excluded_group = self.env.ref('purchase.group_purchase_manager')
#
# Filter out users who belong to the excluded group # # Filter out users who belong to the excluded group
partner_ids = recipient_group.users.filtered( # partner_ids = recipient_group.users.filtered(
lambda u: u not in excluded_group.users # lambda u: u not in excluded_group.users
).mapped('partner_id').ids # ).mapped('partner_id').ids
#
# Send notification only to filtered recipients # # Send notification only to filtered recipients
if partner_ids: # if partner_ids:
author_id = self.env.user.partner_id.id or None # author_id = self.env.user.partner_id.id or None
self.env.user.partner_id.message_post( # self.env.user.partner_id.message_post(
type="notification", # type="notification",
subject=subject, # subject=subject,
body=message, # body=message,
author_id=author_id, # author_id=author_id,
partner_ids=partner_ids, # partner_ids=partner_ids,
subtype_xmlid="mail.mt_comment" # subtype_xmlid="mail.mt_comment"
) # )
#
@api.model # @api.model
def create(self, vals): # def create(self, vals):
res = super(AccountPayment, self).create(vals) # res = super(AccountPayment, self).create(vals)
# print("Hi payment!", res.amount) # # print("Hi payment!", res.amount)
self.action_notify_payment(res) # self.action_notify_payment(res)
#
return res # return res

View File

@ -7,61 +7,61 @@ class AccountPayment(models.Model):
_inherit = 'account.payment' _inherit = 'account.payment'
def _is_authorized_to_notify(self): # def _is_authorized_to_notify(self):
""" # """
Check if the current user is authorized to send payment notifications. # Check if the current user is authorized to send payment notifications.
Returns True if user belongs to authorized groups. # Returns True if user belongs to authorized groups.
""" # """
user = self.env.user # user = self.env.user
#
# Define authorized groups (users who can send payment notifications) # # Define authorized groups (users who can send payment notifications)
authorized_groups = [ # authorized_groups = [
'account.group_account_manager', # Account Manager # 'account.group_account_manager', # Account Manager
'account.group_account_invoice', # Billing/Invoicing # 'account.group_account_invoice', # Billing/Invoicing
# 'purchase.group_purchase_manager', # Purchase Manager - Excluded # # 'purchase.group_purchase_manager', # Purchase Manager - Excluded
] # ]
#
# Check if user belongs to any authorized group # # Check if user belongs to any authorized group
for group_xml_id in authorized_groups: # for group_xml_id in authorized_groups:
if user.has_group(group_xml_id): # if user.has_group(group_xml_id):
return True # return True
#
return False # return False
#
def action_notify_payment(self, payment): # def action_notify_payment(self, payment):
# Check authorization before sending notification # # Check authorization before sending notification
if not self._is_authorized_to_notify(): # if not self._is_authorized_to_notify():
return # return
#
# Prepare notification content # # Prepare notification content
subject = _('Payment Notification') + ' - {}'.format(payment.partner_id.name) # subject = _('Payment Notification') + ' - {}'.format(payment.partner_id.name)
message = '{} '.format(payment.partner_id.name) + _('is successfully paid.') + '\n' + _('Payment Amount: ') + '{}'.format(payment.amount) + '\n' + _('Ref: ') + '{}'.format(payment.ref) + '\n' + _('On Date: ') + '{}'.format(payment.date) # message = '{} '.format(payment.partner_id.name) + _('is successfully paid.') + '\n' + _('Payment Amount: ') + '{}'.format(payment.amount) + '\n' + _('Ref: ') + '{}'.format(payment.ref) + '\n' + _('On Date: ') + '{}'.format(payment.date)
#
# Get recipients from the notification group, excluding purchase managers # # Get recipients from the notification group, excluding purchase managers
recipient_group = self.env.ref('purchase_requisition_custom.group_receive_payment_notification') # recipient_group = self.env.ref('purchase_requisition_custom.group_receive_payment_notification')
excluded_group = self.env.ref('purchase.group_purchase_manager') # excluded_group = self.env.ref('purchase.group_purchase_manager')
#
# Filter out users who belong to the excluded group # # Filter out users who belong to the excluded group
partner_ids = recipient_group.users.filtered( # partner_ids = recipient_group.users.filtered(
lambda u: u not in excluded_group.users # lambda u: u not in excluded_group.users
).mapped('partner_id').ids # ).mapped('partner_id').ids
#
# Send notification only to filtered recipients # # Send notification only to filtered recipients
if partner_ids: # if partner_ids:
author_id = self.env.user.partner_id.id or None # author_id = self.env.user.partner_id.id or None
self.env.user.partner_id.message_post( # self.env.user.partner_id.message_post(
type="notification", # type="notification",
subject=subject, # subject=subject,
body=message, # body=message,
author_id=author_id, # author_id=author_id,
partner_ids=partner_ids, # partner_ids=partner_ids,
subtype_xmlid="mail.mt_comment" # subtype_xmlid="mail.mt_comment"
) # )
#
@api.model # @api.model
def create(self, vals): # def create(self, vals):
res = super(AccountPayment, self).create(vals) # res = super(AccountPayment, self).create(vals)
# print("Hi payment!", res.amount) # # print("Hi payment!", res.amount)
self.action_notify_payment(res) # self.action_notify_payment(res)
#
return res # return res