Indian - TDS and TCS

l10n_in_withholding
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/l10n_in_withholding
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, qdp-odoo, Gorash, Habib (ayh), Victor Piryns (pivi), Antoine Dupuis (andu), Dylan Kiss (dyki), Vivek Pathak, Harsh Modi, Jay Savaliya, Hesham, higo-odoo, Nishant Jain, hatr-odoo, bhra-odoo, ijja-odoo, Nishant Jain (NIAI), pssh-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:54
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_in
    - account_tax_python
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_vat
    - account_debit_note
    - iap
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
        Support for Indian TDS (Tax Deducted at Source).
    

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
account_account_tds_tcs_view_form_inherit account.account.tds.tcs.view.form.inherit account.account xpath Inherits account.view_account_form
account_account_tds_tcs_view_tree_inherit account.account.tds.tcs.view.list.inherit account.account xpath Inherits account.view_account_list
account_move_view_form_inherit_l10n_in_withholding account.move.form.inherit.l10n_in_withholding account.move xpath Inherits account.view_move_form
l10n_in_section_alert_view_form l10n_in.section.alert.view.form l10n_in.section.alert form New
l10n_in_section_alert_view_tree l10n_in.section.alert.view.list l10n_in.section.alert list New
res_config_settings_view_form_inherit_l10n_in_withholding res.config.settings.form.inherit.l10n_in_withholding res.config.settings block Inherits account.res_config_settings_view_form
tds_entry_view_form l10n_in.withhold.wizard.view.form l10n_in.withhold.wizard form New
view_account_payment_form_inherit_l10n_in_withholding account.payment.form.inherit.l10n_in_withholding account.payment xpath Inherits account.view_account_payment_form
view_move_line_tree_l10n_in account.move.line.tree.l10n.in account.move.line xpath Inherits l10n_in.view_move_line_tree_hsn_l10n_in
view_tax_form_inherited_l10n_in_withholding account.tax.form.inherited.l10n_in_withholding account.tax xpath Inherits account.view_tax_form
Models touched (11)

New fields (1)
  • l10n_in_tds_tcs_section_id Many2one → l10n_in.section.alert
    string='TCS/TDS Section' args: 'l10n_in.section.alert'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (7)
  • l10n_in_display_higher_tcs_button Boolean
    compute='_compute_l10n_in_display_higher_tcs_button' string='Display higher TCS button'
  • l10n_in_is_withholding Boolean
    copy=False help='Technical field to identify Indian withholding entry' string='Is Indian TDS Entry'
  • l10n_in_tcs_tds_warning Char
    compute='_compute_l10n_in_tcs_tds_warning' args: 'TDC/TCS Warning'
  • l10n_in_total_withholding_amount Monetary
    compute='_compute_l10n_in_total_withholding_amount' help='Total withholding amount for the move' string='Total Indian TDS Amount'
  • l10n_in_withhold_move_ids One2many → account.move
    string='Indian TDS Entries' args: 'account.move', 'l10n_in_withholding_ref_move_id'
  • l10n_in_withholding_line_ids One2many → account.move.line
    compute='_compute_l10n_in_withholding_line_ids' string='Indian TDS Lines' args: 'account.move.line', 'move_id'
  • l10n_in_withholding_ref_move_id Many2one → account.move
    comodel_name='account.move' copy=False help='Reference move for withholding entry' index='btree_not_null' readonly=True string='Indian TDS Ref Move'
Public methods (2)
  • action_l10n_in_apply_higher_tax(self)
  • action_l10n_in_withholding_entries(self)

New fields (1)
  • l10n_in_withhold_tax_amount Monetary
    compute='_compute_withhold_tax_amount' string='TDS Tax Amount'
Public methods (0)

No public methods.

New fields (2)
  • l10n_in_total_withholding_amount Monetary
    related='move_id.l10n_in_total_withholding_amount'
  • l10n_in_withhold_move_ids One2many
    related='move_id.l10n_in_withhold_move_ids'
Public methods (1)
  • action_l10n_in_withholding_entries(self)

New fields (2)
  • l10n_in_section_id Many2one → l10n_in.section.alert
    string='Section' args: 'l10n_in.section.alert'
  • l10n_in_tds_tax_type Selection
    string='TDS Tax Type' args: [('sale', 'Sale'), ('purchase', 'Purchase')]
Public methods (0)

No public methods.

New fields (9)
  • aggregate_limit Float
    args: 'Aggregate limit'
  • aggregate_period Selection
    default='fiscal_yearly' string='Aggregate Period' args: [('monthly', 'Monthly'), ('fiscal_yearly', 'Financial Yearly')]
  • consider_amount Selection
    default='untaxed_amount' required=True string='Consider' args: [('untaxed_amount', 'Untaxed Amount'), ('total_amount', 'Total Amount')]
  • is_aggregate_limit Boolean
    args: 'Aggregate'
  • is_per_transaction_limit Boolean
    args: 'Per Transaction'
  • l10n_in_section_tax_ids One2many → account.tax
    string='Taxes' args: 'account.tax', 'l10n_in_section_id'
  • name Char
    args: 'Section Name'
  • per_transaction_limit Float
    args: 'Per Transaction limit'
  • tax_source_type Selection
    string='Tax Source Type' args: [('tds', 'TDS'), ('tcs', 'TCS')]
Public methods (0)

No public methods.

New fields (11)
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' string='Company'
  • currency_id Many2one
    related='company_id.currency_id' string='Currency'
  • date Date
    default=fields.Date.context_today string='Date'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal' precompute=True readonly=False required=True store=True string='Journal'
  • l10n_in_tds_tax_type Char
    compute='_compute_l10n_in_tds_tax_type' string='Indian Tax Type'
  • l10n_in_withholding_warning Json
    compute='_compute_l10n_in_withholding_warning' string='Withholding warning'
  • reference Char
    string='Reference'
  • related_move_id Many2one → account.move
    comodel_name='account.move' readonly=True string='Invoice/Bill'
  • related_payment_id Many2one → account.payment
    comodel_name='account.payment' readonly=True string='Payment'
  • type_name Char
    compute='_compute_type_name' string='Type'
  • withhold_line_ids One2many → l10n_in.withhold.wizard.line
    comodel_name='l10n_in.withhold.wizard.line' inverse_name='withhold_id' readonly=False store=True string='TDS Lines'
Public methods (2)
  • action_create_and_post_withhold(self)
  • default_get(self, fields_list)
    @api.model

New fields (6)
  • amount Monetary
    compute='_compute_amount' store=True string='TDS Amount'
  • base Monetary
    string='Base'
  • currency_id Many2one
    related='withhold_id.currency_id'
  • l10n_in_tds_tax_type Char
    related='withhold_id.l10n_in_tds_tax_type'
  • tax_id Many2one → account.tax
    comodel_name='account.tax' required=True string='TDS Tax'
  • withhold_id Many2one → l10n_in.withhold.wizard
    comodel_name='l10n_in.withhold.wizard' required=True
Public methods (0)

No public methods.

New fields (2)
  • l10n_in_withholding_account_id Many2one → account.account
    check_company=True comodel_name='account.account' string='TDS Account'
  • l10n_in_withholding_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' string='TDS Journal'
Public methods (0)

No public methods.

New fields (2)
  • l10n_in_withholding_account_id Many2one
    readonly=False related='company_id.l10n_in_withholding_account_id'
  • l10n_in_withholding_journal_id Many2one
    readonly=False related='company_id.l10n_in_withholding_journal_id'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/l10n_in_withholding
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, odoo, Dylan Kiss (dyki), Vivek Pathak, Harsh Modi, Nishant Jain, hatr-odoo, Nishant Jain (NIAI), pssh-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_in
    - account_tax_python
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
        Support for Indian TDS (Tax Deducted at Source).
    

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
account_move_view_form_inherit_l10n_in_withholding account.move.form.inherit.l10n_in_withholding account.move xpath Inherits account.view_move_form
res_config_settings_view_form_inherit_l10n_in_withholding res.config.settings.form.inherit.l10n_in_withholding res.config.settings block Inherits account.res_config_settings_view_form
tds_entry_view_form l10n_in.withhold.wizard.view.form l10n_in.withhold.wizard form New
view_account_payment_form_inherit_l10n_in_withholding account.payment.form.inherit.l10n_in_withholding account.payment xpath Inherits account.view_account_payment_form
view_tax_form_inherited_l10n_in_withholding account.tax.form.inherited.l10n_in_withholding account.tax xpath Inherits account.view_tax_form
Models touched (9)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • l10n_in_is_withholding Boolean
    copy=False help='Technical field to identify Indian withholding entry' string='Is Indian TDS Entry'
  • l10n_in_total_withholding_amount Monetary
    compute='_compute_l10n_in_total_withholding_amount' help='Total withholding amount for the move' string='Total Indian TDS Amount'
  • l10n_in_withhold_move_ids One2many → account.move
    string='Indian TDS Entries' args: 'account.move', 'l10n_in_withholding_ref_move_id'
  • l10n_in_withholding_line_ids One2many → account.move.line
    compute='_compute_l10n_in_withholding_line_ids' string='Indian TDS Lines' args: 'account.move.line', 'move_id'
  • l10n_in_withholding_ref_move_id Many2one → account.move
    comodel_name='account.move' copy=False help='Reference move for withholding entry' readonly=True string='Indian TDS Ref Move'
Public methods (1)
  • action_l10n_in_withholding_entries(self)

New fields (1)
  • l10n_in_withhold_tax_amount Monetary
    compute='_compute_withhold_tax_amount' string='TDS Tax Amount'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_l10n_in_withholding_entries(self)

New fields (1)
  • l10n_in_tds_tax_type Selection
    string='TDS Tax Type' args: [('sale', 'Sale'), ('purchase', 'Purchase')]
Public methods (0)

No public methods.

New fields (11)
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' string='Company'
  • currency_id Many2one
    related='company_id.currency_id' string='Currency'
  • date Date
    default=fields.Date.context_today string='Date'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' compute='_compute_journal' precompute=True readonly=False required=True store=True string='Journal'
  • l10n_in_tds_tax_type Char
    compute='_compute_l10n_in_tds_tax_type' string='Indian Tax Type'
  • reference Char
    string='Reference'
  • related_move_id Many2one → account.move
    comodel_name='account.move' readonly=True string='Invoice/Bill'
  • related_payment_id Many2one → account.payment
    comodel_name='account.payment' readonly=True string='Payment'
  • type_name Char
    compute='_compute_type_name' string='Type'
  • warning_message Char
    compute='_compute_warning_message'
  • withhold_line_ids One2many → l10n_in.withhold.wizard.line
    comodel_name='l10n_in.withhold.wizard.line' inverse_name='withhold_id' readonly=False store=True string='TDS Lines'
Public methods (2)
  • action_create_and_post_withhold(self)
  • default_get(self, fields_list)
    @api.model

New fields (6)
  • amount Monetary
    compute='_compute_amount' store=True string='TDS Amount'
  • base Monetary
    string='Base'
  • currency_id Many2one
    related='withhold_id.currency_id'
  • l10n_in_tds_tax_type Char
    related='withhold_id.l10n_in_tds_tax_type'
  • tax_id Many2one → account.tax
    comodel_name='account.tax' required=True string='TDS Tax'
  • withhold_id Many2one → l10n_in.withhold.wizard
    comodel_name='l10n_in.withhold.wizard' required=True
Public methods (0)

No public methods.

New fields (2)
  • l10n_in_withholding_account_id Many2one → account.account
    check_company=True comodel_name='account.account' string='TDS Account'
  • l10n_in_withholding_journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' string='TDS Journal'
Public methods (0)

No public methods.

New fields (2)
  • l10n_in_withholding_account_id Many2one
    readonly=False related='company_id.l10n_in_withholding_account_id'
  • l10n_in_withholding_journal_id Many2one
    readonly=False related='company_id.l10n_in_withholding_journal_id'
Public methods (0)

No public methods.