From 7e13d3b4b1ca6331019b762818bc6d1d00465134 Mon Sep 17 00:00:00 2001 From: eman Date: Sun, 10 Nov 2024 01:37:34 +0200 Subject: [PATCH] Payment Orders --- .../odex_benefit/models/account_move_line.py | 1 + .../models/family_validation_setting.py | 2 + .../odex_benefit/models/payment_order.py | 67 ++++++++++++++++++- .../odex_benefit/models/service_request.py | 7 ++ .../views/family_validation_setting.xml | 2 + .../odex_benefit/views/payment_order.xml | 7 +- .../odex_benefit/views/service_request.xml | 1 + 7 files changed, 83 insertions(+), 4 deletions(-) diff --git a/odex25_ensan/odex_benefit/models/account_move_line.py b/odex25_ensan/odex_benefit/models/account_move_line.py index 19152c232..71ebe54a5 100644 --- a/odex25_ensan/odex_benefit/models/account_move_line.py +++ b/odex25_ensan/odex_benefit/models/account_move_line.py @@ -10,6 +10,7 @@ class AccountMoveLine(models.Model): class AccountMove(models.Model): _inherit = 'account.move' family_confirm_id = fields.Many2one(comodel_name='confirm.benefit.expense', string='Benefit Family') + payment_order_id = fields.Many2one(comodel_name='payment.orders', string='Payment Orders') 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 diff --git a/odex25_ensan/odex_benefit/models/family_validation_setting.py b/odex25_ensan/odex_benefit/models/family_validation_setting.py index b486c22dd..a8d5a8f99 100644 --- a/odex25_ensan/odex_benefit/models/family_validation_setting.py +++ b/odex25_ensan/odex_benefit/models/family_validation_setting.py @@ -30,6 +30,8 @@ class FamilyValidationSetting(models.Model): column1='family_id', column2='categ_id', string='Benefit Categories') meal_partner_id = fields.Many2one('res.partner', string='Meal Partner') + journal_id = fields.Many2one('account.journal', string='Journal') + account_id = fields.Many2one('account.account',string='Expenses Account') @api.constrains('meal_expense_account_id', 'clothing_expense_account_id', 'cash_expense_account_id') def _constraint_amount_should_be_positive_if_account_selected(self): diff --git a/odex25_ensan/odex_benefit/models/payment_order.py b/odex25_ensan/odex_benefit/models/payment_order.py index 085e4d03e..c079d0762 100644 --- a/odex25_ensan/odex_benefit/models/payment_order.py +++ b/odex25_ensan/odex_benefit/models/payment_order.py @@ -1,4 +1,5 @@ from odoo import fields, models, api, _ +from stdnum.au.acn import to_abn class PaymentOrders(models.Model): @@ -11,8 +12,9 @@ class PaymentOrders(models.Model): accountant_id = fields.Many2one('res.users',string='Accountant') payment_order_description = fields.Char(string='Payment Order Description') service_requests_ids = fields.One2many('service.request', 'payment_order_id', string ='Service Requests') + total_moves = fields.Integer(string="Total Move Lines", compute='_get_total_moves') state = fields.Selection(string='Status', selection=[('draft', 'Draft'),('accountant_approve', 'accountant Approve'),('department_manager_approve', 'Department Manager Approve') - ,('accounting_approve', 'Accounting Approve'),('general_manager_approve', 'General Manager Approve'),('refused', 'Refused')]) + ,('accounting_approve', 'Accounting Approve'),('general_manager_approve', 'General Manager Approve'),('refused', 'Refused')],default = 'draft') @api.model def create(self, vals): @@ -28,6 +30,11 @@ class PaymentOrders(models.Model): args += [('accountant_id', '=', self.env.user.id)] return super(PaymentOrders, self).search(args, offset, limit, order, count) + def _get_total_moves(self): + for rec in self: + rec.total_moves = self.env['account.move'].search_count([ + ('payment_order_id', '=', rec.id), ('move_type', '!=', 'in_invoice')]) + def action_accountant_approve(self): for rec in self: rec.state = 'accountant_approve' @@ -43,7 +50,61 @@ class PaymentOrders(models.Model): def action_general_manager_approve(self): for rec in self: rec.state = 'general_manager_approve' - + x = self.env['account.move'].create( + { + 'ref': f'{rec.payment_order_description}/{rec.ref_num}', + 'journal_id': self.env["family.validation.setting"].search([], limit=1).journal_id.id, + 'payment_order_id': rec.id, + 'line_ids' : rec.get_lines() + } + ) def action_refuse(self): for rec in self: - rec.state = 'refused' \ No newline at end of file + rec.state = 'refused' + + def action_open_related_move_records(self): + """ Opens a tree view with related records filtered by a dynamic domain """ + moves = self.env['account.move'].search([ + ('payment_order_id', '=', self.id), ('move_type', '!=', 'in_invoice') + ]).ids + return { + 'name': _('Moves'), + 'type': 'ir.actions.act_window', + 'res_model': 'account.move', + 'view_mode': 'tree,form', + 'domain': [('id', 'in', moves)], + } + def get_lines(self): + lines = [] + total_credit = 0 + for request in self.service_requests_ids: + lines.append( + { + 'account_id' : request.account_id.id, + 'partner_id' : request.family_id.partner_id.id, + # 'branch_id' : request.branch_custom_id.id, + 'analytic_account_id': request.branch_custom_id.branch.analytic_account_id.id, + 'debit' : request.aid_amount, + 'name': f'{"Family code"}{request.family_id.code}-{request.description}-{request.payment_order_id.name}-{request.payment_order_id.ref_num}', + } + ) + total_credit += request.aid_amount + lines.append({ + 'account_id': self.env["family.validation.setting"].search([], limit=1).account_id.id, + 'name': f'{self.name}-{self.ref_num}', + 'credit' : total_credit, + }) + return [(0, 0, line) for line in lines] + # def create_entry(self, journal_id, lines): + # """Create an account move entry""" + # move_vals = { + # 'journal_id': journal_id, + # 'date': self.date, + # 'ref': self.name, + # 'family_confirm_id': self.id, + # 'benefit_family_ids': [(6, 0, self.family_ids.ids)], + # 'line_ids': lines, + # } + # move_id = self.env['account.move'].create(move_vals) + # move_id.action_post() + # return True \ No newline at end of file diff --git a/odex25_ensan/odex_benefit/models/service_request.py b/odex25_ensan/odex_benefit/models/service_request.py index 422e92b65..7a78d14de 100644 --- a/odex25_ensan/odex_benefit/models/service_request.py +++ b/odex25_ensan/odex_benefit/models/service_request.py @@ -79,6 +79,7 @@ class ServiceRequest(models.Model): has_money_field_is_appearance = fields.Boolean(string='Has money Field is appearance?',compute='_get_money_field_is_appearance') payment_order_id = fields.Many2one('payment.orders',string='Payment Order') is_payment_order_done = fields.Boolean(string='Is Payment Order Done?') + aid_amount = fields.Float(string='Aid Amount',compute='_get_aid_amount') state = fields.Selection([ ('draft', 'Draft'), ('researcher', 'Researcher'), @@ -226,6 +227,12 @@ class ServiceRequest(models.Model): else: rec.has_money_field_is_appearance = False + def _get_aid_amount(self): + for rec in self: + if rec.service_type == 'rent': + rec.aid_amount = rec.paid_rent_amount + else: + rec.aid_amount = rec.requested_service_amount def action_for_researcher(self): for rec in self: rec.state = 'researcher' diff --git a/odex25_ensan/odex_benefit/views/family_validation_setting.xml b/odex25_ensan/odex_benefit/views/family_validation_setting.xml index c9acba6d6..074b5d1b8 100644 --- a/odex25_ensan/odex_benefit/views/family_validation_setting.xml +++ b/odex25_ensan/odex_benefit/views/family_validation_setting.xml @@ -38,6 +38,8 @@ + + diff --git a/odex25_ensan/odex_benefit/views/payment_order.xml b/odex25_ensan/odex_benefit/views/payment_order.xml index ab449d064..ad56ddc11 100644 --- a/odex25_ensan/odex_benefit/views/payment_order.xml +++ b/odex25_ensan/odex_benefit/views/payment_order.xml @@ -20,6 +20,11 @@ +
+ +

@@ -45,7 +50,7 @@ - + diff --git a/odex25_ensan/odex_benefit/views/service_request.xml b/odex25_ensan/odex_benefit/views/service_request.xml index 3d8a4c724..288f1cda2 100644 --- a/odex25_ensan/odex_benefit/views/service_request.xml +++ b/odex25_ensan/odex_benefit/views/service_request.xml @@ -63,6 +63,7 @@ +