# -*- coding: utf-8 -*- ############################################################################# # # Cybrosys Technologies Pvt. Ltd. # # Copyright (C) 2022-TODAY Cybrosys Technologies() # Author: Cybrosys Techno Solutions() # # 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 . # ############################################################################# import time from datetime import timedelta, datetime from odoo import models, api, _ from odoo.exceptions import UserError class DayBookPdfReport(models.AbstractModel): _name = 'report.base_accounting_kit.day_book_report_template' _description = 'Day Book Report' def _get_account_move_entry(self, accounts, form_data, pass_date): cr = self.env.cr move_line = self.env['account.move.line'] tables, where_clause, where_params = move_line._query_get() wheres = [""] if where_clause.strip(): wheres.append(where_clause.strip()) if form_data['target_move'] == 'posted': target_move = "AND m.state = 'posted'" else: target_move = '' sql = (''' SELECT l.id AS lid, acc.name as accname, 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.debit),0) - COALESCE(SUM(l.credit), 0) AS balance, m.name AS move_name, c.symbol AS currency_code, p.name AS partner_name FROM account_move_line l 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 acc ON (l.account_id = acc.id) WHERE l.account_id IN %s AND l.journal_id IN %s ''' + target_move + ''' AND l.date = %s GROUP BY l.id, l.account_id, l.date, j.code, l.currency_id, l.amount_currency, l.ref, l.name, m.name, c.symbol, p.name , acc.name ORDER BY l.date DESC ''') params = ( tuple(accounts.ids), tuple(form_data['journal_ids']), pass_date) cr.execute(sql, params) data = cr.dictfetchall() res = {} debit = credit = balance = 0.00 for line in data: debit += line['debit'] credit += line['credit'] balance += line['balance'] res['debit'] = debit res['credit'] = credit res['balance'] = balance res['lines'] = data return res @api.model def _get_report_values(self, docids, data=None): if not data.get('form') or not self.env.context.get('active_model'): raise UserError( _("Form content is missing, this report cannot be printed.")) model = self.env.context.get('active_model') docs = self.env[model].browse( self.env.context.get('active_ids', [])) form_data = data['form'] codes = [] if data['form'].get('journal_ids', False): codes = [journal.code for journal in self.env['account.journal'].search( [('id', 'in', data['form']['journal_ids'])])] active_acc = data['form']['account_ids'] accounts = self.env['account.account'].search( [('id', 'in', active_acc)]) if data['form']['account_ids'] else \ self.env['account.account'].search([]) date_start = datetime.strptime(form_data['date_from'], '%Y-%m-%d').date() date_end = datetime.strptime(form_data['date_to'], '%Y-%m-%d').date() days = date_end - date_start dates = [] record = [] for i in range(days.days + 1): dates.append(date_start + timedelta(days=i)) for head in dates: pass_date = str(head) accounts_res = self.with_context( data['form'].get('used_context', {}))._get_account_move_entry( accounts, form_data, pass_date) if accounts_res['lines']: record.append({ 'date': head, 'debit': accounts_res['debit'], 'credit': accounts_res['credit'], 'balance': accounts_res['balance'], 'child_lines': accounts_res['lines'] }) return { 'doc_ids': docids, 'doc_model': model, 'data': data['form'], 'docs': docs, 'time': time, 'Accounts': record, 'print_journal': codes, }