73 lines
3.4 KiB
Python
73 lines
3.4 KiB
Python
|
from odoo import models, fields, api, _
|
||
|
from datetime import date, datetime, timedelta
|
||
|
from dateutil.relativedelta import relativedelta
|
||
|
from odoo.exceptions import ValidationError
|
||
|
|
||
|
class WzLedgerBankAndCash(models.TransientModel):
|
||
|
_name = 'wz.ledger.bank.and.cash'
|
||
|
_description = 'Wizard Bank and Cash Report'
|
||
|
|
||
|
def default_user_type(self):
|
||
|
return self.env['account.account.type'].sudo().search([('name', '=', 'Bank and Cash')], limit=1)
|
||
|
|
||
|
date_from = fields.Date("From Date")
|
||
|
date_to = fields.Date("To Date")
|
||
|
account_ids = fields.Many2many('account.account', string='Account')
|
||
|
user_type_id = fields.Many2one('account.account.type', string='User Type', default=lambda self:self.default_user_type())
|
||
|
|
||
|
@api.constrains("date_from", "date_to")
|
||
|
def _check_filtered(self):
|
||
|
for rec in self:
|
||
|
if rec.date_from > rec.date_to:
|
||
|
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')])
|
||
|
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('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'],
|
||
|
}
|
||
|
}
|