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.
		
		
		
		
		
			
		
			
				
					
					
						
							114 lines
						
					
					
						
							4.9 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							114 lines
						
					
					
						
							4.9 KiB
						
					
					
				| # -*- coding: utf-8 -*- | |
| ################################################################################ | |
| # | |
| #    Cybrosys Technologies Pvt. Ltd. | |
| # | |
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |
| #    Author: Subina P (odoo@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 models | |
| 
 | |
| 
 | |
| class Cashflow(models.Model): | |
|     """ Class for getting report data """ | |
|     _name = "cashflow" | |
|     _description = 'Report advanced cash flows' | |
| 
 | |
|     def get_report_values(self, data=None): | |
|         """ | |
|           Fetches and returns the report values for the cashflow report. | |
|           :param data: Dictionary containing parameters for fetching the report data. | |
|           :return: Dictionary containing fetched data, journal results, and account results. | |
|               """ | |
|         account_res = [] | |
|         journal_res = [] | |
|         # Query to fetch all data without date filtration | |
|         query = """ | |
|                 SELECT DISTINCT aa.name, aa.code,  | |
|                 SUM(aml.debit) AS total_debit,  | |
|                 SUM(aml.credit) AS total_credit  | |
|             FROM ( | |
|                 SELECT am.*  | |
|                 FROM account_move AS am | |
|                 LEFT JOIN account_move_line aml ON aml.move_id = am.id | |
|                 LEFT JOIN account_account aa ON aa.id = aml.account_id | |
|                 WHERE am.state = 'posted' | |
|             ) am | |
|             LEFT JOIN account_move_line aml ON aml.move_id = am.id | |
|             LEFT JOIN account_account aa ON aa.id = aml.account_id | |
|             GROUP BY aa.name, aa.code | |
|         """ | |
|         cr = self._cr | |
|         cr.execute(query) | |
|         fetched_data = cr.dictfetchall() | |
|         for account in self.env['account.account'].search([]): | |
|             child_lines = self._get_lines(account, data) | |
|             if child_lines: | |
|                 account_res.append(child_lines) | |
|         return { | |
|             'fetched_data': fetched_data, | |
|             'journal_res': journal_res, | |
|             'account_res': account_res, | |
|         } | |
| 
 | |
|     def _get_lines(self, account, data): | |
|         """ fetch values for lines""" | |
|         user_lang = self.env.user.lang | |
|         # Query to fetch values without date filtration | |
|         query = """SELECT aml.id, aml.move_id, aml.account_id, aj.name ->'%s' as name, am.name as move_name,  | |
|                           SUM(aml.debit) AS total_debit,  | |
|                           SUM(aml.credit) AS total_credit  | |
|                    FROM ( | |
|                        SELECT am.*  | |
|                        FROM account_move as am | |
|                        LEFT JOIN account_move_line aml ON aml.move_id = am.id | |
|                        LEFT JOIN account_account aa ON aa.id = aml.account_id | |
|                        WHERE am.state = 'posted' | |
|                    ) am | |
|                    LEFT JOIN account_move_line aml ON aml.move_id = am.id | |
|                    LEFT JOIN account_account aa ON aa.id = aml.account_id | |
|                    LEFT JOIN account_journal aj ON aj.id = am.journal_id | |
|                    WHERE aa.id = %d  | |
|                    GROUP BY aml.id, am.name, aml.account_id, aj.name""" % (user_lang, account.id) | |
| 
 | |
|         cr = self._cr | |
|         cr.execute(query) | |
|         fetched_data = cr.dictfetchall() | |
|         # Another query to fetch journal lines without date filtration | |
|         sql = """SELECT aa.name ->'%s' as account_name, aj.id, aj.name ->'%s' as name,  | |
|                           SUM(aml.debit) AS total_debit,  | |
|                           SUM(aml.credit) AS total_credit  | |
|                    FROM ( | |
|                        SELECT am.*  | |
|                        FROM account_move as am | |
|                        LEFT JOIN account_move_line aml ON aml.move_id = am.id | |
|                        LEFT JOIN account_account aa ON aa.id = aml.account_id | |
|                        WHERE am.state = 'posted' | |
|                    ) am | |
|                    LEFT JOIN account_move_line aml ON aml.move_id = am.id | |
|                    LEFT JOIN account_account aa ON aa.id = aml.account_id | |
|                    LEFT JOIN account_journal aj ON aj.id = am.journal_id | |
|                    WHERE aa.id = %d | |
|                    GROUP BY aa.name, aj.name, aj.id""" % (account.name, user_lang, account.id) | |
|         cr.execute(sql) | |
|         fetch_data = cr.dictfetchall() | |
|         if fetched_data: | |
|             return { | |
|                 'account': account.name, | |
|                 'code': account.code, | |
|                 'move_lines': fetched_data, | |
|                 'journal_lines': fetch_data, | |
|             }
 | |
| 
 |