You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							170 lines
						
					
					
						
							7.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							170 lines
						
					
					
						
							7.1 KiB
						
					
					
				| # -*- coding: utf-8 -*- | |
| ############################################################################# | |
| # | |
| #    Cybrosys Technologies Pvt. Ltd. | |
| # | |
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |
| #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | |
| # | |
| #    You can modify it under the terms of the GNU LESSER | |
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |
| # | |
| #    This program is distributed in the hope that it will be useful, | |
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |
| # | |
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |
| #    (LGPL v3) along with this program. | |
| #    If not, see <http://www.gnu.org/licenses/>. | |
| # | |
| ############################################################################# | |
| from odoo import api, fields, models | |
| from odoo.http import request | |
| 
 | |
| 
 | |
| class AccountBankStatementLine(models.Model): | |
|     """Update the 'rowdata' field for the specified record.""" | |
|     _name = 'account.bank.statement.line' | |
|     _inherit = ['account.bank.statement.line', 'mail.thread', | |
|                 'mail.activity.mixin', 'analytic.mixin'] | |
| 
 | |
|     lines_widget = fields.Char(string="Lines Widget") | |
|     account_id = fields.Many2one('account.account', string='Account') | |
|     tax_ids = fields.Many2many('account.tax') | |
|     form_name = fields.Char() | |
|     form_balance = fields.Monetary(currency_field='currency_id') | |
|     rowdata = fields.Json(string="RowData") | |
|     matchRowdata = fields.Json(string="MatchRowData") | |
|     record_id = fields.Integer() | |
|     company_currency_id = fields.Many2one( | |
|         related='company_id.currency_id', readonly=True, | |
|     ) | |
|     bank_state = fields.Selection(selection=[('invalid', 'Invalid'), | |
|                                              ('valid', 'Valid'), | |
|                                              ('reconciled', 'Reconciled')], | |
|                                   compute='_compute_state', store=True) | |
|     reconcile_models_widget = fields.Char() | |
|     lines_widget_json = fields.Json(store=True) | |
| 
 | |
|     @api.model | |
|     def update_rowdata(self, record_id): | |
|         """Update the 'rowdata' field for the specified record.""" | |
|         request.session['record_id'] = record_id | |
| 
 | |
|     @api.model | |
|     def update_match_row_data(self, resId): | |
|         """Update the match row data for a specific record identified by the given resId.""" | |
|         request.session['resId'] = resId | |
|         move_record = self.env['account.move.line'].browse(resId) | |
|         move_record_values = { | |
|             'id': move_record.id, | |
|             'account_id': move_record.account_id.id, | |
|             'account_name': move_record.account_id.name, | |
|             'account_code': move_record.account_id.code, | |
|             'partner_id': move_record.partner_id, | |
|             'partner_name': move_record.partner_id.name, | |
|             'date': move_record.date, | |
|             'move_id': move_record.move_id, | |
|             'move_name': move_record.move_id.name, | |
|             'name': move_record.name, | |
|             'amount_residual_currency': move_record.amount_residual_currency, | |
|             'amount_residual': move_record.amount_residual, | |
|             'currency_id': move_record.currency_id.id, | |
|             'currency_symbol': move_record.currency_id.symbol | |
|         } | |
|         return move_record_values | |
| 
 | |
|     def button_validation(self, async_action=False): | |
|         """Ensure the current recordset holds a single record and mark it as reconciled.""" | |
|         self.ensure_one() | |
|         self.is_reconciled = True | |
|         return { | |
|             'type': 'ir.actions.client', | |
|             'tag': 'reload', | |
|         } | |
| 
 | |
|     def button_reset(self): | |
|         """Reset the current bank statement line if it is in a 'reconciled' state.""" | |
|         self.ensure_one() | |
|         if self.bank_state == 'reconciled': | |
|             self.action_undo_reconciliation() | |
|             return { | |
|                 'type': 'ir.actions.client', | |
|                 'tag': 'reload', | |
|             } | |
| 
 | |
|     def button_to_check(self, async_action=True): | |
|         """Ensure the current recordset holds a single record, validate the bank | |
|         state, and mark the move as 'to check'.""" | |
|         self.ensure_one() | |
|         if self.bank_state == 'valid': | |
|             self.button_validation(async_action=async_action) | |
|             self.move_id.to_check = True | |
|             return { | |
|                 'type': 'ir.actions.client', | |
|                 'tag': 'reload', | |
|             } | |
| 
 | |
|     def button_set_as_checked(self): | |
|         """Mark the associated move as 'not to check' by setting 'to_check' to False.""" | |
|         self.ensure_one() | |
|         self.move_id.to_check = False | |
|         return { | |
|             'type': 'ir.actions.client', | |
|             'tag': 'reload', | |
|         } | |
| 
 | |
|     @api.model | |
|     def get_statement_line(self, record_id): | |
|         """Retrieve and format bank statement line details based on the provided record ID.""" | |
|         statement_line_records = self.env[ | |
|             'account.bank.statement.line'].search_read([('id', '=', record_id)]) | |
|         result_list = [] | |
|         for record in statement_line_records: | |
|             move_id = record.get('move_id', False) | |
|             partner_id = record.get('partner_id', False) | |
|             date = record.get('date', False) | |
|             amount = record.get('amount', False) | |
|             currency_id = record.get('currency_id', False) | |
|             payment_ref = record.get("payment_ref", False) | |
|             bank_state = record.get("bank_state", False) | |
|             id = record.get("id", False) | |
|             if move_id: | |
|                 move_record = self.env['account.move.line'].search( | |
|                     [('move_id', '=', move_id[0])], limit=1) | |
|                 currency_symbol = self.env['res.currency'].browse( | |
|                     currency_id[0]) | |
|                 account_id = move_record.account_id | |
|                 date_str = date.strftime('%Y-%m-%d') if date else None | |
|                 result_list.append({ | |
|                     'id': id, | |
|                     'move_id': move_id, | |
|                     'partner_id': partner_id, | |
|                     'account_id': account_id.id, | |
|                     'account_name': account_id.name, | |
|                     'account_code': account_id.code, | |
|                     'date': date_str, | |
|                     'amount': amount, | |
|                     'currency_symbol': currency_symbol.symbol, | |
|                     'payment_ref': payment_ref, | |
|                     'bank_state': bank_state, | |
|                 }) | |
|                 # Update the account_id for the current record | |
|                 self.env['account.bank.statement.line'].browse( | |
|                     record['id']).write({'account_id': account_id.id}) | |
|         return result_list | |
| 
 | |
|     @api.depends('account_id') | |
|     def _compute_state(self): | |
|         """Compute the state of bank transactions based on the account's | |
|          reconciliation status and journal settings.""" | |
|         for record in self: | |
|             if record.is_reconciled: | |
|                 record.bank_state = 'reconciled' | |
|             else: | |
|                 suspense_account = record.journal_id.suspense_account_id | |
|                 if suspense_account in record.account_id: | |
|                     record.bank_state = 'invalid' | |
|                 else: | |
|                     record.bank_state = 'valid'
 | |
| 
 |