Avalara Avatax Connector

account_avatax
REPOSITORY
REPOSITORYOCA/account-fiscal-rule
GIT
GIThttps://github.com/OCA/account-fiscal-rule.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/account-fiscal-rule/tree/13.0/account_avatax
VERSION
VERSION 3.4.4
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Fabrice Henrion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Fabrice Henrion
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Daniel Reis, Bhavesh Odedra, oca-travis, OCA-git-bot, Atchuthan, Sodexis, Steven Campbell
WEBSITE
WEBSITEhttps://github.com/OCA/account-fiscal-rule
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - sale_stock
    - sale
    - sales_team
    - payment
    - utm
    - stock_account
    - stock
    - barcodes
    - base_geolocalize
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Avalara
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
exemption_code_tree_view exemption.code.tree.view exemption.code tree New
invoice_form_view_editable_field invoice.form.view.editable account.move field Inherits view_move_form_inherit_1
view_avalara_salestax_address_validate Address Validatation avalara.salestax.address.validate form New
view_avalara_salestax_form avalara.salestax.form avalara.salestax form New
view_avalara_salestax_ping Test Connection avalara.salestax.ping form New
view_avalara_salestax_tree avalara.salestax.tree avalara.salestax tree New
view_fiscal_position_form_avatax account.fiscal.position form add Avatax account.fiscal.position field Inherits account.view_account_position_form
view_move_form_inherit_1 account.move.form.inherit account.move button Inherits account.view_move_form
view_partner_details_form_inherit1 res.partner.details.form.inherit1 res.partner xpath Inherits base.view_partner_form
view_product_category_form_avatax_inherit product.category.form.avatax.inherit product.category xpath Inherits product.product_category_form_view
view_product_normal_form_avatax_inherit product.normal.form.avatax product.template xpath Inherits product.product_template_form_view
view_product_tax_code_form product.tax.code.form product.tax.code form New
view_product_tax_code_tree product.tax.code.tree product.tax.code tree New
view_tax_form_avatax account.tax.form.avatax account.tax field Inherits account.view_tax_form
Models touched (13)

New fields (1)
  • is_avatax Boolean
    string='Use Avatax API'
Public methods (0)

No public methods.

New fields (9)
  • avatax_amount Float
    copy=False string='AvaTax'
  • exemption_code Char
    compute=_compute_onchange_exemption help='It show the customer exemption number' readonly=False store=True args: 'Exemption Number'
  • exemption_code_id Many2one → exemption.code
    compute=_compute_onchange_exemption help='It show the customer exemption code' readonly=False store=True args: 'exemption.code', 'Exemption Code'
  • exemption_locked Boolean
    help="Exemption code won't be automatically changed, for instance, when changing the Customer."
  • invoice_doc_no Char
    help='Reference of the invoice' readonly=True states={'draft': [('readonly', False)]} args: 'Source/Ref Invoice No'
  • location_code Char
    readonly=True states={'draft': [('readonly', False)]} args: 'Location Code'
  • tax_address_id Many2one → res.partner
    compute='_compute_tax_address_id' args: 'res.partner', 'Tax Shipping Address'
  • tax_on_shipping_address Boolean
    default=True args: 'Tax based on shipping address'
  • warehouse_id Many2one → stock.warehouse
    args: 'stock.warehouse', 'Warehouse'
Public methods (8)
  • avatax_commit_taxes(self)
  • avatax_compute_taxes(self, commit=False)
    Called from Invoice's Action menu. Forces computation of the Invoice taxes
  • button_draft(self)
    Sets invoice to Draft, either from the Posted or Cancelled states
  • get_origin_tax_date(self)
  • is_avatax_calculated(self)
    Only apply Avatax for these types of documents. Can be extended to support other types.
  • onchange_reset_avatax_amount(self)
    @api.onchange('tax_address_id', 'fiscal_position_id')
    When changing quantities or prices, reset the Avatax computed amount. The Odoo computed tax amount will then be shown, as a reference. The Avatax amount will be recomputed upon document validation.
  • onchange_warehouse_id(self)
    @api.onchange('warehouse_id')
  • post(self)

New fields (1)
  • avatax_amt_line Float
    copy=False string='AvaTax Line'
Public methods (1)
  • onchange_reset_tax_amt(self)
    @api.onchange('price_unit', 'discount', 'quantity')
    When changing quantities or prices, reset the Avatax computed amount. The Odoo computed tax amount will then be shown, as a reference. The Avatax amount will be recomputed upon document validation.

New fields (1)
  • is_avatax Boolean
    args: 'Is Avatax'
Public methods (2)
  • compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True)
    Adopted as the central point to inject custom tax computations. Avatax logic is triggered if the "avatax_invoice" is set in the context. To find the Avatax amount, we search an Invoice line with the same quantity, price and product.
  • get_avalara_tax(self, tax_rate, doc_type)
    @api.model

New fields (20)
  • account_number Char
    help='Account Number provided by AvaTax' required=True args: 'Account Number'
  • active Boolean
    default=True help='Uncheck the active field to hide the record' args: 'Active'
  • auto_generate_customer_code Boolean
    default=True help="This will generate customer code for the customer used in the transaction, if it doesn't have one already. Each code is unique per customer. When this is disabled, you will have to manually go to each customer and manually generate their customer code. This is required for Avatax and is only generated one time." args: 'Automatically generate missing customer code'
  • company_code Char
    help='The company code as defined in the Admin Console of AvaTax' required=True args: 'Company Code'
  • company_id Many2one → res.company
    default=<expr> help='Company which has subscribed to the AvaTax service' required=True args: 'res.company', 'Company'
  • country_ids Many2many → res.country
    default=_get_avatax_supported_countries help='Countries where address validation will be used' args: 'res.country', 'avalara_salestax_country_rel', 'avalara_salestax_id', 'country_id', 'Countries'
  • default_shipping_code_id Many2one → product.tax.code
    help='The default shipping code which will be passed to Avalara' args: 'product.tax.code', 'Default Shipping Code'
  • disable_address_validation Boolean
    help='Check to disable address validation' args: 'Disable Address Validation'
  • disable_tax_calculation Boolean
    default=True help='No tax calculation requests will be sent to the AvaTax web service.' args: 'Disable AvaTax Calculation'
  • disable_tax_reporting Boolean
    help='No transactions will be recorded in the Avatax service.' args: 'Disable Document Recording/Commiting'
  • enable_immediate_calculation Boolean
    help='Tax is computed immediately, as document lines are being added. Warning: will cause heavy traffic on the Avatax service.' args: 'Immediate AvaTax Calculation'
  • force_address_validation Boolean
    help='Only compute taxes if addresses were validated by the Avatax service' args: 'Require Validated Addresses'
  • license_key Char
    help='License Key provided by AvaTax' required=True args: 'License Key'
  • logging Boolean
    help='Enables detailed AvaTax transaction logging within application' args: 'Log API Request Details'
  • logging_response Boolean
    help='Enables detailed AvaTax transaction logging within application' args: 'Log API Response Details'
  • request_timeout Integer
    default=300 help='Defines AvaTax request time out length, AvaTax best practices prescribes default setting of 300 seconds' args: 'Request Timeout'
  • result_in_uppercase Boolean
    help='Check is address validation results desired to be in upper case' args: 'Return validation results in upper case'
  • service_url Selection
    default='https://rest.avatax.com/api/v2' help='The url to connect with' string='Service URL' args: [('https://sandbox-rest.avatax.com/api/v2', 'REST API Test'), ('https://rest.avatax.com/api/v2', 'REST API Production')]
  • upc_enable Boolean
    help='Allows ean13 to be reported in place of Item Reference as upc identifier.' args: 'Enable UPC Taxability'
  • validation_on_save Boolean
    help='Automatically validates addresses when they are created or modified when Customer profile is saved.' args: 'Automatic Address Validation'
Public methods (6)
  • commit_transaction(self, doc_code, doc_type)
  • create_transaction(self, doc_date, doc_code, doc_type, partner, ship_from_address, shipping_address, lines, user=None, exemption_number=None, exemption_code_name=None, commit=False, invoice_date=None, reference_code=None, location_code=None, is_override=None, currency_id=None, ignore_error=None)
  • get_avatax_rest_service(self)
  • ping(self)
  • unvoid_transaction(self, doc_code, doc_type)
  • void_transaction(self, doc_code, doc_type)

New fields (16)
  • city Char
    args: 'City'
  • country Char
    args: 'Country'
  • date_validation Date
  • original_city Char
    readonly=True args: 'Original City'
  • original_country Char
    readonly=True args: 'Original Country'
  • original_state Char
    readonly=True args: 'Original State'
  • original_street Char
    readonly=True args: 'Original Street'
  • original_street2 Char
    readonly=True args: 'Original Street2'
  • original_zip Char
    readonly=True args: 'Original Zip'
  • partner_latitude Float
    args: 'Latitude'
  • partner_longitude Float
    args: 'Longitude'
  • state Char
    args: 'State'
  • street Char
    args: 'Street'
  • street2 Char
    args: 'Street2'
  • validation_method Char
  • zip Char
    args: 'Zip'
Public methods (2)
  • accept_valid_address(self)
    Updates the existing address with the valid address returned by the service.
  • default_get(self, fields)
    @api.model
    Returns the default values for the fields.

New fields (1)
  • name Char
    args: 'Name'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • ping(self)
    @api.model
    Call the AvaTax's Ping Service to test the connection.

New fields (2)
  • code Char
    args: 'Code'
  • name Char
    required=True args: 'Name'
Public methods (1)
  • name_get(self)
    @api.depends('name', 'code')

New fields (2)
  • applicable_tax_code_id Many2one → product.tax.code
    compute=_compute_applicable_tax_code args: 'product.tax.code', 'Applicable AvaTax Code'
  • tax_code_id Many2one → product.tax.code
    args: 'product.tax.code', 'AvaTax Code'
Public methods (0)

No public methods.

New fields (3)
  • description Char
    args: 'Description'
  • name Char
    required=True args: 'Code'
  • type Selection
    help='Type of tax code as defined in AvaTax' required=True args: [('product', 'Product'), ('freight', 'Freight'), ('service', 'Service'), ('digital', 'Digital'), ('other', 'Other')], 'Type'
Public methods (0)

No public methods.

New fields (2)
  • applicable_tax_code_id Many2one → product.tax.code
    compute=_compute_applicable_tax_code args: 'product.tax.code', 'Applicable AvaTax Code'
  • tax_code_id Many2one → product.tax.code
    help='AvaTax Product Tax Code' args: 'product.tax.code', 'Product AvaTax Code'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • get_avatax_config_company(self)
    Returns the AvaTax configuration for the Company

New fields (10)
  • customer_code Char
    copy=False args: 'Customer Code'
  • date_validation Date
    copy=False help='The date the address was last validated by AvaTax and accepted' readonly=True args: 'Last Validation Date'
  • exemption_code_id Many2one → exemption.code
    deprecated=True args: 'exemption.code', 'Exemption Code (Deprecated)'
  • exemption_number Char
    deprecated=True args: 'Exemption Number (Deprecated)'
  • property_exemption_code_id Many2one → exemption.code
    company_dependent=True help='The type of exemption granted' args: 'exemption.code', 'Exemption Code'
  • property_exemption_number Char
    company_dependent=True help='The State identification number relevant fot the exemption' args: 'Exemption Number'
  • property_tax_exempt Boolean
    company_dependent=True help='This company or address can claim for tax exemption' args: 'Is Tax Exempt'
  • tax_exempt Boolean
    deprecated=True args: 'Is Tax Exempt (Deprecated))'
  • validated_on_save Boolean
    help='Indicates if the address is already validated on save before calling the wizard' args: 'Validated On Save'
  • validation_method Selection
    copy=False help='It gets populated when the address is validated by the method' readonly=True args: [('avatax', 'AVALARA'), ('usps', 'USPS'), ('other', 'Other')], 'Address Validation Method'
Public methods (10)
  • button_avatax_validate_address(self)
    Method is used to verify of state and country
  • check_exemption_number(self)
    @api.depends('property_tax_exempt', 'property_exemption_code_id', 'property_exemption_number')
    When tax exempt check then atleast exemption number or exemption code should be filled
  • create(self, vals)
    @api.model
  • generate_cust_code(self)
    Auto populate customer code
  • get_country_from_code(self, code)
    Returns the country from the code.
  • get_state_from_code(self, state_code, country_code)
    Returns the state from the code.
  • get_valid_address_vals(self, validation_on_save=False)
  • multi_address_validation(self, validation_on_save=False)
  • onchange_tax_exemption(self)
    @api.onchange('tax_exempt')
  • write(self, vals)