diff --git a/odex25_benefit/odex_benefit/__manifest__.py b/odex25_benefit/odex_benefit/__manifest__.py
index 69012d6b4..8b1c243d9 100644
--- a/odex25_benefit/odex_benefit/__manifest__.py
+++ b/odex25_benefit/odex_benefit/__manifest__.py
@@ -67,6 +67,7 @@
'wizards/family_bank_report_wizard.xml',
'views/visit_survey.xml',
'views/res_partner_view.xml',
+ 'views/account_move_view.xml',
'views/actions_and_menus.xml',
'reports/family_bank_report.xml',
],
diff --git a/odex25_benefit/odex_benefit/i18n/ar_001.po b/odex25_benefit/odex_benefit/i18n/ar_001.po
index 41936a7bc..a21d05bfd 100644
--- a/odex25_benefit/odex_benefit/i18n/ar_001.po
+++ b/odex25_benefit/odex_benefit/i18n/ar_001.po
@@ -18436,4 +18436,11 @@ msgstr "موافقة مدير الفرع للاستثناء"
#, python-format
msgid ""
"She has a physical or intellectual disability but is over %s years of age."
-msgstr "لديها إعاقة جسدية أو عقلية ولكنها تجاوزت %s سنة من العمر."
\ No newline at end of file
+msgstr "لديها إعاقة جسدية أو عقلية ولكنها تجاوزت %s سنة من العمر."
+
+#. module: odex_benefit
+#: code:addons/odex_benefit/models/payment_order.py:0
+#: model_terms:ir.ui.view,arch_db:odex_benefit.payment_orders_form
+#, python-format
+msgid "Moves"
+msgstr "القيد المحاسبي"
\ No newline at end of file
diff --git a/odex25_benefit/odex_benefit/models/account_move_line.py b/odex25_benefit/odex_benefit/models/account_move_line.py
index e741ede00..1362ca3a1 100644
--- a/odex25_benefit/odex_benefit/models/account_move_line.py
+++ b/odex25_benefit/odex_benefit/models/account_move_line.py
@@ -1,4 +1,4 @@
-from odoo import models,fields
+from odoo import models,fields,_
class AccountMoveLine(models.Model):
@@ -11,4 +11,52 @@ class AccountMove(models.Model):
_inherit = 'account.move'
family_confirm_id = fields.Many2one(comodel_name='confirm.benefit.expense', string='Benefit Family')
benefit_family_ids = fields.Many2many(comodel_name='grant.benefit',relation='account_move_grant_family_rel',
- column1='move_id',column2='family_id', string='Benefit Family')
\ No newline at end of file
+ column1='move_id',column2='family_id', string='Benefit Family')
+ required_attachment_line_count = fields.Integer(string="Required Attachments",compute='_compute_required_attachment_line_count',store=False,)
+
+ def _compute_required_attachment_line_count(self):
+ for move in self:
+ payment_order = self.env['payment.orders'].search([
+ ('move_id', '=', move.id),
+ ('type', '=', 'services')
+ ], limit=1)
+
+ if not payment_order or not payment_order.service_requests_ids:
+ move.required_attachment_line_count = 0
+ continue
+ all_lines = payment_order.service_requests_ids.mapped('attachment_lines')
+ move.required_attachment_line_count = len(all_lines)
+
+ def action_view_service_attachments(self):
+
+ payment_order = self.env['payment.orders'].search([
+ ('move_id', '=', self.id),
+ ('type', '=', 'services')
+ ], limit=1)
+
+ if not payment_order:
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'display_notification',
+ 'params': {
+ 'title': _('Error'),
+ 'message': _('Cannot find the originating payment order.'),
+ 'type': 'warning',
+ }
+ }
+ attachment_ids = payment_order.service_requests_ids.mapped('attachment_lines').ids
+
+ ctx = self.env.context.copy()
+ ctx.update({
+ 'create': False, 'edit': False, 'delete': False,
+ })
+
+ return {
+ 'name': _('Service Required Attachments'),
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'service.attachments.settings',
+ 'view_mode': 'tree,form',
+ 'domain': [('id', 'in', attachment_ids)],
+ 'context': ctx,
+ 'target': 'current',
+ }
\ No newline at end of file
diff --git a/odex25_benefit/odex_benefit/models/payment_order.py b/odex25_benefit/odex_benefit/models/payment_order.py
index 389c4cd88..39fd3fb12 100644
--- a/odex25_benefit/odex_benefit/models/payment_order.py
+++ b/odex25_benefit/odex_benefit/models/payment_order.py
@@ -53,6 +53,31 @@ class PaymentOrders(models.Model):
currency_id = fields.Many2one('res.currency', string='Currency',
related='company_id.currency_id')
can_user_act = fields.Boolean(compute='_compute_can_user_act', store=False)
+ attachment_line_count = fields.Integer(string="Required Attachments",compute='_compute_attachment_lines',store=False)
+
+ def _compute_attachment_lines(self):
+ for record in self:
+ if not record.service_requests_ids:
+ record.attachment_line_count = 0
+ continue
+ all_lines = record.service_requests_ids.mapped('attachment_lines')
+ record.attachment_line_count = len(all_lines)
+
+ def action_view_all_required_attachments(self):
+ self.ensure_one()
+ ctx = self.env.context.copy()
+ ctx.update({
+ 'create': False, 'edit': False, 'delete': False,
+ })
+ return {
+ 'name': _('Service Required Attachments'),
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'service.attachments.settings',
+ 'view_mode': 'tree,form',
+ 'domain': [('id', 'in', self.service_requests_ids.mapped('attachment_lines').ids)],
+ 'context': ctx,
+ 'target': 'current',
+ }
@api.depends('state')
@api.depends_context('uid')
diff --git a/odex25_benefit/odex_benefit/views/account_move_view.xml b/odex25_benefit/odex_benefit/views/account_move_view.xml
new file mode 100644
index 000000000..acb133504
--- /dev/null
+++ b/odex25_benefit/odex_benefit/views/account_move_view.xml
@@ -0,0 +1,20 @@
+
+
+
+ account.move.inherit.form
+ account.move
+
+
+
+
+
+
+
+
diff --git a/odex25_benefit/odex_benefit/views/benefit_config_view.xml b/odex25_benefit/odex_benefit/views/benefit_config_view.xml
index 1e9069a9d..3553bf92c 100644
--- a/odex25_benefit/odex_benefit/views/benefit_config_view.xml
+++ b/odex25_benefit/odex_benefit/views/benefit_config_view.xml
@@ -1572,5 +1572,41 @@
+
+ service.attachments.settings.tree
+ service.attachments.settings
+
+
+
+
+
+
+
+
+
+
+ service.attachments.settings.form
+ service.attachments.settings
+
+
+
+
diff --git a/odex25_benefit/odex_benefit/views/payment_order.xml b/odex25_benefit/odex_benefit/views/payment_order.xml
index 1af9fa5d7..da98a7f48 100644
--- a/odex25_benefit/odex_benefit/views/payment_order.xml
+++ b/odex25_benefit/odex_benefit/views/payment_order.xml
@@ -60,6 +60,13 @@
type="object" attrs="{'invisible': [('move_count','=',0)]}">
+