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,
							 | 
						|
								            }
							 | 
						|
								
							 |