|  |  | @ -331,7 +331,6 @@ class GeneralView(models.TransientModel): | 
			
		
	
		
			
				
					|  |  |  |         return res | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     def _get_accounts(self, accounts, init_balance, display_account, data): | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         cr = self.env.cr | 
			
		
	
		
			
				
					|  |  |  |         MoveLine = self.env['account.move.line'] | 
			
		
	
		
			
				
					|  |  |  |         move_lines = {x: [] for x in accounts.ids} | 
			
		
	
	
		
			
				
					|  |  | @ -367,29 +366,39 @@ class GeneralView(models.TransientModel): | 
			
		
	
		
			
				
					|  |  |  |                     tuple(data.get('analytics').ids) + tuple([0])) | 
			
		
	
		
			
				
					|  |  |  |             if data['account_tags']: | 
			
		
	
		
			
				
					|  |  |  |                 WHERE += ' AND tag IN %s' % str(data.get('account_tags')) | 
			
		
	
		
			
				
					|  |  |  |             sql = ('''SELECT l.account_id AS account_id, a.code AS code,  | 
			
		
	
		
			
				
					|  |  |  |                     a.id AS id, a.name AS name,  | 
			
		
	
		
			
				
					|  |  |  |                     ROUND(COALESCE(SUM(l.debit),0),2) AS debit, | 
			
		
	
		
			
				
					|  |  |  |                     ROUND(COALESCE(SUM(l.credit),0),2) AS credit, | 
			
		
	
		
			
				
					|  |  |  |                     ROUND(COALESCE(SUM(l.balance),0),2) AS balance, | 
			
		
	
		
			
				
					|  |  |  |                     anl.keys, act.name as tag | 
			
		
	
		
			
				
					|  |  |  |                     FROM account_move_line l | 
			
		
	
		
			
				
					|  |  |  |                     LEFT JOIN account_move m ON (l.move_id = m.id) | 
			
		
	
		
			
				
					|  |  |  |                     LEFT JOIN res_currency c ON (l.currency_id = c.id) | 
			
		
	
		
			
				
					|  |  |  |                     LEFT JOIN res_partner p ON (l.partner_id = p.id) | 
			
		
	
		
			
				
					|  |  |  |                     JOIN account_journal j ON (l.journal_id = j.id) | 
			
		
	
		
			
				
					|  |  |  |                     JOIN account_account a ON (l.account_id = a.id) | 
			
		
	
		
			
				
					|  |  |  |                     LEFT JOIN account_account_account_tag acct ON  | 
			
		
	
		
			
				
					|  |  |  |                     (acct.account_account_id = l.account_id) | 
			
		
	
		
			
				
					|  |  |  |                     LEFT JOIN account_account_tag act ON  | 
			
		
	
		
			
				
					|  |  |  |                     (act.id = acct.account_account_tag_id) | 
			
		
	
		
			
				
					|  |  |  |                     LEFT JOIN LATERAL ( | 
			
		
	
		
			
				
					|  |  |  |                     SELECT jsonb_object_keys(l.analytic_distribution)::INT  | 
			
		
	
		
			
				
					|  |  |  |                     AS keys) anl ON true | 
			
		
	
		
			
				
					|  |  |  |                     LEFT JOIN account_analytic_account an  | 
			
		
	
		
			
				
					|  |  |  |                     ON (anl.keys = an.id)''' | 
			
		
	
		
			
				
					|  |  |  |                    + WHERE + new_filter + ''' GROUP BY l.account_id,  | 
			
		
	
		
			
				
					|  |  |  |                    a.code,a.id,a.name,anl.keys, act.name''') | 
			
		
	
		
			
				
					|  |  |  |             sql = ('''SELECT | 
			
		
	
		
			
				
					|  |  |  |             l.account_id AS account_id, | 
			
		
	
		
			
				
					|  |  |  |             a.code AS code, | 
			
		
	
		
			
				
					|  |  |  |             a.id AS id, | 
			
		
	
		
			
				
					|  |  |  |             a.name AS name, | 
			
		
	
		
			
				
					|  |  |  |             ROUND(COALESCE(SUM(l.debit),0),2) AS debit, | 
			
		
	
		
			
				
					|  |  |  |             ROUND(COALESCE(SUM(l.credit),0),2) AS credit, | 
			
		
	
		
			
				
					|  |  |  |             ROUND(COALESCE(SUM(l.balance),0),2) AS balance, | 
			
		
	
		
			
				
					|  |  |  |             anl.keys, | 
			
		
	
		
			
				
					|  |  |  |             act.name AS tag | 
			
		
	
		
			
				
					|  |  |  |             FROM | 
			
		
	
		
			
				
					|  |  |  |                 account_move_line l | 
			
		
	
		
			
				
					|  |  |  |             LEFT JOIN | 
			
		
	
		
			
				
					|  |  |  |                 account_move m ON (l.move_id = m.id) | 
			
		
	
		
			
				
					|  |  |  |             LEFT JOIN | 
			
		
	
		
			
				
					|  |  |  |                 res_currency c ON (l.currency_id = c.id) | 
			
		
	
		
			
				
					|  |  |  |             LEFT JOIN | 
			
		
	
		
			
				
					|  |  |  |                 res_partner p ON (l.partner_id = p.id) | 
			
		
	
		
			
				
					|  |  |  |             JOIN | 
			
		
	
		
			
				
					|  |  |  |                 account_journal j ON (l.journal_id = j.id) | 
			
		
	
		
			
				
					|  |  |  |             JOIN | 
			
		
	
		
			
				
					|  |  |  |                 account_account a ON (l.account_id = a.id) | 
			
		
	
		
			
				
					|  |  |  |             LEFT JOIN | 
			
		
	
		
			
				
					|  |  |  |                 account_account_account_tag acct ON (acct.account_account_id = l.account_id) | 
			
		
	
		
			
				
					|  |  |  |             LEFT JOIN | 
			
		
	
		
			
				
					|  |  |  |                 account_account_tag act ON (act.id = acct.account_account_tag_id) | 
			
		
	
		
			
				
					|  |  |  |             LEFT JOIN LATERAL ( | 
			
		
	
		
			
				
					|  |  |  |                 SELECT jsonb_array_elements_text(l.analytic_distribution->'ids')::INT AS keys | 
			
		
	
		
			
				
					|  |  |  |             ) anl ON true | 
			
		
	
		
			
				
					|  |  |  |             LEFT JOIN | 
			
		
	
		
			
				
					|  |  |  |                 account_analytic_account an ON (anl.keys = an.id) '''+ WHERE + new_filter + ''' | 
			
		
	
		
			
				
					|  |  |  |             GROUP BY | 
			
		
	
		
			
				
					|  |  |  |                 l.account_id, a.code, a.id, a.name, anl.keys, act.name''') | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             if data.get('accounts'): | 
			
		
	
		
			
				
					|  |  |  |                 params = tuple(init_where_params) | 
			
		
	
	
		
			
				
					|  |  | @ -424,9 +433,10 @@ class GeneralView(models.TransientModel): | 
			
		
	
		
			
				
					|  |  |  |                 tuple(data.get('accounts').ids) + tuple([0])) | 
			
		
	
		
			
				
					|  |  |  |         else: | 
			
		
	
		
			
				
					|  |  |  |             WHERE = "WHERE l.account_id IN %s" | 
			
		
	
		
			
				
					|  |  |  |         if data.get('analytics'): | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         if self.analytic_ids: | 
			
		
	
		
			
				
					|  |  |  |             WHERE += ' AND an.id IN %s' % str( | 
			
		
	
		
			
				
					|  |  |  |                 tuple(data.get('analytics').ids) + tuple([0])) | 
			
		
	
		
			
				
					|  |  |  |                 tuple(self.analytic_ids.ids) + tuple([0])) | 
			
		
	
		
			
				
					|  |  |  |         if data.get('account_tags'): | 
			
		
	
		
			
				
					|  |  |  |             WHERE += ' AND act.id IN %s' % str( | 
			
		
	
		
			
				
					|  |  |  |                 tuple(data.get('account_tags').ids) + tuple([0])) | 
			
		
	
	
		
			
				
					|  |  | @ -434,7 +444,7 @@ class GeneralView(models.TransientModel): | 
			
		
	
		
			
				
					|  |  |  |         # Get move lines base on sql query and Calculate the total balance | 
			
		
	
		
			
				
					|  |  |  |         # of move lines | 
			
		
	
		
			
				
					|  |  |  |         sql = ('''SELECT l.account_id AS account_id, a.code AS code,  | 
			
		
	
		
			
				
					|  |  |  |                     a.id AS id, a.name AS name,  | 
			
		
	
		
			
				
					|  |  |  |                     a.id AS id, a.name AS name,  l.id as line_id, | 
			
		
	
		
			
				
					|  |  |  |                     ROUND(COALESCE(SUM(l.debit),0),2) AS debit, | 
			
		
	
		
			
				
					|  |  |  |                     ROUND(COALESCE(SUM(l.credit),0),2) AS credit, | 
			
		
	
		
			
				
					|  |  |  |                     ROUND(COALESCE(SUM(l.balance),0),2) AS balance, | 
			
		
	
	
		
			
				
					|  |  | @ -455,14 +465,21 @@ class GeneralView(models.TransientModel): | 
			
		
	
		
			
				
					|  |  |  |                     LEFT JOIN account_analytic_account an  | 
			
		
	
		
			
				
					|  |  |  |                     ON (anl.keys = an.id)''' | 
			
		
	
		
			
				
					|  |  |  |                + WHERE + new_final_filter + ''' GROUP BY l.account_id,  | 
			
		
	
		
			
				
					|  |  |  |                    a.code,a.id,a.name,anl.keys, act.name''') | 
			
		
	
		
			
				
					|  |  |  |                    a.code,a.id,a.name,anl.keys, act.name, l.id''') | 
			
		
	
		
			
				
					|  |  |  |         if data.get('accounts'): | 
			
		
	
		
			
				
					|  |  |  |             params = tuple(where_params) | 
			
		
	
		
			
				
					|  |  |  |         else: | 
			
		
	
		
			
				
					|  |  |  |             params = (tuple(accounts.ids),) + tuple(where_params) | 
			
		
	
		
			
				
					|  |  |  |         cr.execute(sql, params) | 
			
		
	
		
			
				
					|  |  |  |         account_res = cr.dictfetchall() | 
			
		
	
		
			
				
					|  |  |  |         return account_res | 
			
		
	
		
			
				
					|  |  |  |         unique_line_ids = set() | 
			
		
	
		
			
				
					|  |  |  |         filtered_records = [] | 
			
		
	
		
			
				
					|  |  |  |         for record in account_res: | 
			
		
	
		
			
				
					|  |  |  |             line_id = record['line_id'] | 
			
		
	
		
			
				
					|  |  |  |             if line_id not in unique_line_ids: | 
			
		
	
		
			
				
					|  |  |  |                 unique_line_ids.add(line_id) | 
			
		
	
		
			
				
					|  |  |  |                 filtered_records.append(record) | 
			
		
	
		
			
				
					|  |  |  |         return filtered_records | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     @api.model | 
			
		
	
		
			
				
					|  |  |  |     def _get_currency(self): | 
			
		
	
	
		
			
				
					|  |  | @ -552,7 +569,8 @@ class GeneralView(models.TransientModel): | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         # Get move lines base on sql query and Calculate the total balance of | 
			
		
	
		
			
				
					|  |  |  |         # move lines | 
			
		
	
		
			
				
					|  |  |  |         sql = ('''SELECT l.id AS lid,m.id AS move_id, l.account_id AS account_id, | 
			
		
	
		
			
				
					|  |  |  |         # print(new_final_filter) | 
			
		
	
		
			
				
					|  |  |  |         sql = ('''SELECT DISTINCT ON (l.id) l.id AS lid,m.id AS move_id, l.account_id AS account_id, | 
			
		
	
		
			
				
					|  |  |  |                 l.date AS ldate, j.code AS lcode, l.currency_id, l.amount_currency, | 
			
		
	
		
			
				
					|  |  |  |                 l.ref AS lref, l.name AS lname, COALESCE(l.debit,0) AS debit,  | 
			
		
	
		
			
				
					|  |  |  |                 COALESCE(l.credit,0) AS credit, COALESCE(SUM(l.balance),0) AS balance, | 
			
		
	
	
		
			
				
					|  |  | @ -571,7 +589,9 @@ class GeneralView(models.TransientModel): | 
			
		
	
		
			
				
					|  |  |  |                + WHERE + new_final_filter + ''' GROUP BY l.id, m.id,   | 
			
		
	
		
			
				
					|  |  |  |                l.account_id, l.date, j.code, l.currency_id, l.amount_currency, | 
			
		
	
		
			
				
					|  |  |  |                l.ref, l.name, m.name, c.symbol, c.position, p.name, anl.keys''') | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         params = tuple(where_params) | 
			
		
	
		
			
				
					|  |  |  |         # print('new_final_filter', sql, params) | 
			
		
	
		
			
				
					|  |  |  |         cr.execute(sql, params) | 
			
		
	
		
			
				
					|  |  |  |         account_ress = cr.dictfetchall() | 
			
		
	
		
			
				
					|  |  |  |         i = 0 | 
			
		
	
	
		
			
				
					|  |  | 
 |