From aec988c6cc9da583046b7026b52f80b8d950d24c Mon Sep 17 00:00:00 2001 From: Angga Date: Thu, 19 Sep 2024 22:48:17 +0700 Subject: [PATCH] accounting bank and cash --- models/__init__.py | 3 +- models/ledger_bank_and_cash.py | 3 + models/snk_bank_and_cash.py | 18 ++++ security/ir.model.access.csv | 3 +- views/ledger_bank_and_cash.xml | 24 +++-- wizards/wz_ledger_bank_and_cash.py | 134 ++++++++++++++++++---------- wizards/wz_ledger_bank_and_cash.xml | 2 +- 7 files changed, 125 insertions(+), 62 deletions(-) create mode 100644 models/snk_bank_and_cash.py diff --git a/models/__init__.py b/models/__init__.py index 5789382..2e6e060 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1 +1,2 @@ -from . import ledger_bank_and_cash \ No newline at end of file +from . import ledger_bank_and_cash +from . import snk_bank_and_cash \ No newline at end of file diff --git a/models/ledger_bank_and_cash.py b/models/ledger_bank_and_cash.py index b15cb66..5e5d71b 100644 --- a/models/ledger_bank_and_cash.py +++ b/models/ledger_bank_and_cash.py @@ -5,6 +5,7 @@ class LedgerBankAndCash(models.Model): _name = 'ledger.bank.and.cash' _description = 'Bank and Cash Report' _order = 'account_id, date asc' + _auto = False date = fields.Date() account_id = fields.Many2one('account.account') @@ -19,5 +20,7 @@ class LedgerBankAndCash(models.Model): account_code = fields.Char('Account Code', related='account_id.code') account_name = fields.Char('Account Name', related='account_id.name') balance = fields.Monetary('Balance',) + + \ No newline at end of file diff --git a/models/snk_bank_and_cash.py b/models/snk_bank_and_cash.py new file mode 100644 index 0000000..b8abd3b --- /dev/null +++ b/models/snk_bank_and_cash.py @@ -0,0 +1,18 @@ +from odoo import models, fields, api, _ + + +class SnkBankAndCashReport(models.Model): + _name = 'snk.bank.and.cash.report' + _description = 'Bank and Cash Report' + _order = 'id asc' + _auto = False + + + date = fields.Date() + account_id = fields.Many2one('account.account') + description = fields.Char() + partner_id = fields.Many2one('res.partner') + currency_id = fields.Many2one('res.currency') + debit = fields.Monetary('Debit') + credit = fields.Monetary('Credit') + balance = fields.Monetary('Balance',) \ No newline at end of file diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 2bf42d6..7989ce7 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -1,3 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_lsbl_ledger_bank_and_cash,lsbl_ledger_bank_and_cash,model_ledger_bank_and_cash,base.group_user,1,1,1,1 -access_wz_ledger_bank_and_cash,wz_ledger_bank_and_cash,model_wz_ledger_bank_and_cash,base.group_user,1,1,1,1 \ No newline at end of file +access_wz_ledger_bank_and_cash,wz_ledger_bank_and_cash,model_wz_ledger_bank_and_cash,base.group_user,1,1,1,1 +snk_bank_and_cash_report_access,snk_bank_and_cash_report_access,model_snk_bank_and_cash_report,account.group_account_invoice,1,1,1,1 \ No newline at end of file diff --git a/views/ledger_bank_and_cash.xml b/views/ledger_bank_and_cash.xml index 6045e58..117e52c 100644 --- a/views/ledger_bank_and_cash.xml +++ b/views/ledger_bank_and_cash.xml @@ -1,30 +1,26 @@ - - accounting.report.ledger.bank.and.cash.view.tree - ledger.bank.and.cash + + snk.accounting.report.ledger.bank.and.cash.view.tree + snk.bank.and.cash.report - - - - - + + - - - - + + + - + Cash and Bank Book - ledger.bank.and.cash + snk.bank.and.cash.report tree

diff --git a/wizards/wz_ledger_bank_and_cash.py b/wizards/wz_ledger_bank_and_cash.py index 8f6a3ff..63bf86a 100644 --- a/wizards/wz_ledger_bank_and_cash.py +++ b/wizards/wz_ledger_bank_and_cash.py @@ -1,4 +1,4 @@ -from odoo import models, fields, api, _ +from odoo import models, fields, api, _, tools from datetime import date, datetime, timedelta from dateutil.relativedelta import relativedelta from odoo.exceptions import ValidationError @@ -22,51 +22,95 @@ class WzLedgerBankAndCash(models.TransientModel): raise ValidationError(_("Invalid Date ! End date should be greater than the start date")) def generate(self): - beginning_balance = 0 - balance = 0 - total_balance = 0 - start = self.date_from - end = self.date_to - move_line = self.env['account.move.line'].search([('date', '>=', start), ('date', '<=', end),('account_id', 'in', self.account_ids.ids), ('move_id.state', '=', 'posted')]) - bank_cash = self.env['ledger.bank.and.cash'] - move_line2 = self.env['account.move.line'].search([('date', '<=', start), ('account_id', 'in', self.account_ids.ids), ('move_id.state', '=', 'posted')]) + tools.drop_view_if_exists(self.env.cr, 'snk_bank_and_cash_report') + company = self.env['res.company'].browse(1) + currency_id = company.currency_id.id + self.env.cr.execute(""" - delete from ledger_bank_and_cash - """) - if move_line: - no = 1 - mv_line_sorted = sorted(move_line, key=lambda x: x["date"]) - for account in self.account_ids: - for rec in mv_line_sorted: - if rec.account_id.id == account.id: - beginning_balance = sum(move_line2.filtered(lambda x : x.account_id.id == rec.account_id.id).mapped('balance')) - if no == 1: - balance = beginning_balance + (rec.debit - rec.credit) - total_balance = balance - else: - total_balance += rec.balance - bank_cash.create({ - 'date': rec.date, - 'account_id': rec.account_id.id, - 'move_id': rec.move_id.id, - 'partner_id': rec.partner_id.id, - 'currency_id': rec.currency_id.id, - 'beginning_balance': beginning_balance, - 'balance': total_balance, - 'debit': rec.debit, - 'credit': rec.credit, - }) - no += 1 - no = 1 - if bank_cash: - bank_cash.sorted(key=lambda r: (r.date, r.account_id)) + CREATE OR REPLACE VIEW snk_bank_and_cash_report AS ( + + select + ROW_NUMBER () OVER () as id, + 'Begining Balance' as description, + null as partner_id, + null as account_id, + {currency_id} as currency_id, + max(acm.date) as date, + sum(acm.debit) as debit, + sum(acm.credit) as credit, + sum(acm.debit - acm.credit) as balance + from account_move_line acm left join account_journal aj on acm.journal_id = aj.id + where date < '{start_date}' and aj.type in ('bank', 'cash') + + union all + select + ROW_NUMBER () OVER () + 1 as id, + acm.name as description, + null as partner_id, + acm.account_id, + {currency_id} as currency_id, + acm.date, + acm.debit, + acm.credit,acm.balance + from account_move_line acm left join account_journal aj on acm.journal_id = aj.id + where date between '{start_date}' and '{end_date}' and aj.type in ('bank', 'cash') + )""".format(start_date=self.date_from,end_date=self.date_to, currency_id=currency_id)) + return { - 'name': _("Cash and Bank Book Period %s s/d %s" %(self.date_from.strftime("%d-%m-%Y"), self.date_to.strftime("%d-%m-%Y"))), - 'view_mode': 'list', - 'view_id': self.env.ref('snk_accounting_report.accounting_report_ledger_bank_and_cash_view_tree').id, - 'res_model': 'ledger.bank.and.cash', + 'name': _('Sillo Report Bank and Cash'), 'type': 'ir.actions.act_window', - 'context': { - 'group_by': ['account_id'], - } + 'view_mode': 'tree', + 'res_model': 'snk.bank.and.cash.report', + 'views': [(False, 'tree')], + 'target': False } + + + # beginning_balance = 0 + # balance = 0 + # total_balance = 0 + # start = self.date_from + # end = self.date_to + # move_line = self.env['account.move.line'].search([('date', '>=', start), ('date', '<=', end),('account_id', 'in', self.account_ids.ids), ('move_id.state', '=', 'posted')]) + # bank_cash = self.env['ledger.bank.and.cash'] + # move_line2 = self.env['account.move.line'].search([('date', '<=', start), ('account_id', 'in', self.account_ids.ids), ('move_id.state', '=', 'posted')]) + # self.env.cr.execute(""" + # delete from ledger_bank_and_cash + # """) + # if move_line: + # no = 1 + # mv_line_sorted = sorted(move_line, key=lambda x: x["date"]) + # for account in self.account_ids: + # for rec in mv_line_sorted: + # if rec.account_id.id == account.id: + # beginning_balance = sum(move_line2.filtered(lambda x : x.account_id.id == rec.account_id.id).mapped('balance')) + # if no == 1: + # balance = beginning_balance + (rec.debit - rec.credit) + # total_balance = balance + # else: + # total_balance += rec.balance + # bank_cash.create({ + # 'date': rec.date, + # 'account_id': rec.account_id.id, + # 'move_id': rec.move_id.id, + # 'partner_id': rec.partner_id.id, + # 'currency_id': rec.currency_id.id, + # 'beginning_balance': beginning_balance, + # 'balance': total_balance, + # 'debit': rec.debit, + # 'credit': rec.credit, + # }) + # no += 1 + # no = 1 + # if bank_cash: + # bank_cash.sorted(key=lambda r: (r.date, r.account_id)) + # return { + # 'name': _("Cash and Bank Book Period %s s/d %s" %(self.date_from.strftime("%d-%m-%Y"), self.date_to.strftime("%d-%m-%Y"))), + # 'view_mode': 'list', + # 'view_id': self.env.ref('snk_accounting_report.accounting_report_ledger_bank_and_cash_view_tree').id, + # 'res_model': 'ledger.bank.and.cash', + # 'type': 'ir.actions.act_window', + # 'context': { + # 'group_by': ['account_id'], + # } + # } diff --git a/wizards/wz_ledger_bank_and_cash.xml b/wizards/wz_ledger_bank_and_cash.xml index 12ff9db..cd5e93b 100644 --- a/wizards/wz_ledger_bank_and_cash.xml +++ b/wizards/wz_ledger_bank_and_cash.xml @@ -11,7 +11,7 @@ - +