Files

66 lines
2.9 KiB
Python

from odoo import api, fields, models
from dateutil.relativedelta import relativedelta
class AccountJournal(models.Model):
_inherit = "account.journal"
l10n_in_fetch_vendor_edi_feature_enabled = fields.Boolean(related='company_id.l10n_in_fetch_vendor_edi_feature')
# enet_batch_payment related fields
bank_template_id = fields.Many2one('enet.bank.template', string='Bank Template')
has_enet_payment_method = fields.Boolean(compute='_compute_has_enet_payment_method')
l10n_in_enet_vendor_batch_payment_feature_enabled = fields.Boolean(related='company_id.l10n_in_enet_vendor_batch_payment_feature')
@api.depends('outbound_payment_method_line_ids.payment_method_id.code')
def _compute_has_enet_payment_method(self):
for journal in self:
if journal.company_id.l10n_in_enet_vendor_batch_payment_feature:
journal.has_enet_payment_method = any(
payment_method.payment_method_id.code in ['enet_rtgs', 'enet_neft', 'enet_fund_transfer', 'enet_demand_draft']
for payment_method in journal.outbound_payment_method_line_ids
)
else:
journal.has_enet_payment_method = False
def l10n_in_action_fetch_irn_data_for_account_journal(self):
"""Fetch Vendor Bills:
- If previous month's return has failed `missing_fetch_einvoice` check → fetch for previous month.
- Also current month's return exists → fetch for current month.
"""
def _find_return(date_from, date_to, extra_domain=None):
domain = [
('date_from', '=', date_from),
('date_to', '=', date_to),
('company_id', '=', self.company_id.id),
('type_id', '=', gstr2b_return_type.id),
]
if extra_domain:
domain += extra_domain
return self.env['account.return'].search(domain, limit=1)
if not self.company_id.account_opening_date:
return self.env['account.return'].action_open_tax_return_view()
gstr2b_return_type = self.env.ref('l10n_in_reports.in_gstr2b_return_type', raise_if_not_found=False)
if not gstr2b_return_type:
return
today = fields.Date.today()
# Previous month return
prev_return = _find_return(
today + relativedelta(months=-1, day=1),
today + relativedelta(months=-1, day=31),
extra_domain=[('is_completed', '=', False)]
)
if prev_return:
prev_return.refresh_checks()
if prev_return.check_ids.filtered(lambda c: c.code == 'missing_fetch_einvoice' and c.result == 'failure'):
prev_return.action_l10n_in_get_irn_data()
curr_return = _find_return(today + relativedelta(day=1), today + relativedelta(day=31))
if curr_return:
return curr_return.action_l10n_in_get_irn_data()