TIP: You can type at any time to perform a new search.
Avalara Avatax Certified Connector
account_avatax_oca · OCA/account-fiscal-rule
- Repository
- OCA/account-fiscal-rule · module folder · Try on Runboat
- Module version
- 1.1.1
- Category
- Accounting
- Folder size
- 5.23 MB
- License
- AGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://github.com/OCA/account-fiscal-rule
- Last tracking update
- 2026-08-07 08:43:06
- Authors
- Odoo Community Association (OCA), Sodexis, Open Source Integrators, Fabrice Henrion
- Maintainers
- Odoo Community Association (OCA), Sodexis, Open Source Integrators, Fabrice Henrion
- Committers
- Daniel Reis, Don Kendall, kobros-tech, Weblate, OCA-git-bot, oca-ci
- Odoo dependencies
- Python dependencies
- Avalara
- System dependencies
- None
- Required by
- account_avatax_exemption, account_avatax_oca_log, account_avatax_sale_oca
- Description
**AVALARA CERTIFICATION PENDING!** Odoo provides integration with AvaTax, a tax solution software by Avalara which includes sales tax calculation for all US states and territories and all Canadian provinces and territories (including GST, PST, and HST). This module is capable of automatically detecting origin (Output Warehouse) and destination (Client Address), then calculating and reporting taxes to the user's Avalara account as well as a recording the correct sales taxes for the validated addresses within Odoo ERP. This module is compatible both with the Odoo Enterprise and Odoo Community editions. An Avatax account is needed. Account information to access the Avatax dashboard can be obtained through the Avalara website here: <https://www.avalara.com/products/calculations.html> Once configured, the module operates in the background and performs calculations and reporting seamlessly to the AvaTax server. This guide includes instructions for the following elements: - Activating your organization's AvaTax account and downloading the product - Entering the AvaTax credentials into your Odoo database and configuring it to use AvaTax services and features within Odoo Note: Test the module before deploying in live environment. All changes to the AvaTax settings must be performed by a user with administrative access rights. **IMPORTANT - resolving name conflict with Odoo EE** Avatax support was added to Odoo EE 14 and 15. Unfortunately the module names used are the same as the OCA ones, and because of this name collision the OCA modules were forced to change name. The main module was renamed from `account_avatax` (now used by Odoo EE) to `account_avatax_oca`. To apply this change in your odoo database and continue using the OCA Avalara certified connector: > 1. Ensure you have the latest version from the OCA, and you see `account_avatax_oca` > in your Apps list. > > 2. Install the new `account_avatax_oca` module > > 3. Unistall the `account_avatax` module > > 4. Confirm that your configurations were kept safe, in particular: > Avatax API, "Avatax" default Fiscal Position, and "Avatax" default > Tax record.
Code Analysis ⓘ
Views touched (14)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
exemption_code_tree_view |
exemption.code.tree.view | exemption.code | list | New |
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_getcompany |
avalara.salestax.getcompany | form | New | |
view_avalara_salestax_ping |
Test Connection | avalara.salestax.ping | form | New |
view_avalara_salestax_tree |
avalara.salestax.tree | avalara.salestax | list | New |
view_fiscal_position_form_avatax |
account.fiscal.position form add Avatax | account.fiscal.position | form | Inherits account.view_account_position_form |
view_move_form_inherit_1 |
account.move.form.inherit | account.move | form | Inherits account.view_move_form |
view_partner_details_form_inherit1 |
res.partner.details.form.inherit1 | res.partner | form | Inherits base.view_partner_form |
view_product_category_form_avatax_inherit |
product.category.form.avatax.inherit | product.category | form | Inherits product.product_category_form_view |
view_product_normal_form_avatax_inherit |
product.normal.form.avatax | product.template | form | 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 | list | New |
view_tax_form_avatax |
account.tax.form.avatax | account.tax | form | Inherits account.view_tax_form |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (14)
New fields (1)
-
is_avataxBooleanstring='Use Avatax API'
No public methods.
New fields (15)
-
avatax_amountFloatcopy=Falsestring='AvaTax' -
avatax_request_logTextcopy=Falsereadonly=True args: 'Avatax API Request Log' -
avatax_response_logTextcopy=Falsereadonly=True args: 'Avatax API Response Log' -
calculate_tax_on_saveBoolean -
exemption_codeCharcompute=_compute_onchange_exemptionhelp='It show the customer exemption number'readonly=Falsestore=True args: 'Exemption Number' -
exemption_code_idMany2one → exemption.codecompute=_compute_onchange_exemptionhelp='It show the customer exemption code'readonly=Falsestore=True args: 'exemption.code', 'Exemption Code' -
exemption_lockedBooleanhelp="Exemption code won't be automatically changed, for instance, when changing the Customer." -
hide_exemptionBooleancompute=_compute_hide_exemptiondefault=<expr>help='Uncheck the this field to show exemption fields on SO/Invoice form view. Also, it will show Tax based on shipping address button' args: 'Hide Exemption & Tax Based on shipping address' -
invoice_doc_noCharhelp='Reference of the invoice'readonly=True args: 'Source/Ref Invoice No' -
is_avataxBooleanrelated='fiscal_position_id.is_avatax' -
location_codeChar -
so_partner_idMany2one → res.partnercomodel_name='res.partner'string='SO Partner' -
tax_address_idMany2one → res.partnercompute='_compute_tax_address_id' args: 'res.partner', 'Tax Shipping Address' -
tax_on_shipping_addressBooleandefault=True args: 'Tax based on shipping address' -
warehouse_idMany2one → stock.warehouseargs: 'stock.warehouse', 'Warehouse'
-
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 -
create(self, vals_list)@api.model_create_multi -
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_avatax_calculation(self)@api.onchange('invoice_line_ids', 'warehouse_id', 'tax_address_id', 'tax_on_shipping_address', 'partner_id') -
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') -
write(self, vals)
New fields (1)
-
avatax_amt_lineFloatcopy=Falsestring='AvaTax Line'
-
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_avataxBoolean
-
compute_all(self, price_unit, currency=None, quantity=1.0, product=None, partner=None, is_refund=False, handle_price_include=True, include_caba_tags=False, fixed_multiplicator=1)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 (21)
-
account_numberCharhelp='Account Number provided by AvaTax'name='Account ID'required=True -
activeBooleandefault=Truehelp='Uncheck the active field to hide the record' -
auto_generate_customer_codeBooleandefault=Truehelp="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_codeChardefault='DEFAULT'help='The company code as defined in the Admin Console of AvaTax'required=True -
company_idMany2one → res.companydefault=<expr>help='Company which has subscribed to the AvaTax service'required=True args: 'res.company', 'Company' -
company_partner_idMany2onerelated='company_id.partner_id'string='Company Address' -
country_idsMany2many → res.countrydefault=_get_avatax_supported_countrieshelp='Countries where address validation will be used' args: 'res.country', 'avalara_salestax_country_rel', 'avalara_salestax_id', 'country_id', 'Countries' -
disable_address_validationBooleanhelp='Disables the ability to perform address validation' -
disable_tax_calculationBooleanhelp='No tax calculation requests will be sent to the AvaTax web service.' args: 'Disable AvaTax Calculation' -
disable_tax_reportingBooleanhelp='No transactions will be recorded (commited) to the Avatax service.' args: 'Disable Document Recording/Commiting' -
force_address_validationBooleanhelp='Only compute taxes if addresses were validated by the Avatax service' args: 'Require Validated Addresses' -
hide_exemptionBooleandefault=Falsehelp='Uncheck the this field to show exemption fields on SO/Invoice form view. Also, it will show Tax based on shipping address button' args: 'Hide Exemption & Tax Based on shipping address' -
invoice_calculate_taxBooleanhelp="Automatically triggers API to calculate tax If changes made onInvoice's warehouse_id, tax_on_shipping_address, Invoice line's price_unit, discount, quantity" args: 'Auto Calculate Tax on Invoice Save' -
license_keyCharhelp='License Key provided by AvaTax'required=True -
loggingBooleanhelp='Enables detailed AvaTax transaction logging within application' args: 'Log API Requests' -
request_timeoutIntegerdefault=300help='Defines AvaTax request time out length, AvaTax best practices prescribes default setting of 300 seconds' -
result_in_uppercaseBooleanhelp='The address validation results are returned in in upper case' args: 'Return validation results in upper case' -
service_urlSelectiondefault='https://rest.avatax.com/api/v2'help='The url to connect with'string='Service URL' args: [('https://rest.avatax.com/api/v2', 'Production (REST API)'), ('https://sandbox-rest.avatax.com/api/v2', 'Sandbox (REST API)')] -
upc_enableBooleanhelp='Allows ean13 to be reported in place of Item Reference as upc identifier.' args: 'Enable UPC Taxability' -
use_so_partner_idBooleanhelp="Use Sales Order's Customer field to determine Taxable Status on the Customer Invoice. If no Sales Order exists, Customer field on the invoice form view will be used instead"string='Use Sale Customer Code on Invoice' -
validation_on_saveBooleanhelp='Automatically validates addresses when they are created or modified' args: 'Automatic Address Validation'
-
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, log_to_record=False) -
get_avatax_rest_service(self) -
ping(self) -
unvoid_transaction(self, doc_code, doc_type) -
void_transaction(self, doc_code, doc_type)
New fields (16)
-
cityChar -
countryChar -
date_validationDate -
original_cityCharreadonly=True -
original_countryCharreadonly=True -
original_stateCharreadonly=True -
original_streetCharreadonly=True -
original_street2Charreadonly=True -
original_zipCharreadonly=True -
partner_latitudeFloatargs: 'Latitude' -
partner_longitudeFloatargs: 'Longitude' -
stateChar -
streetChar -
street2Char -
validation_methodChar -
zipChar
-
accept_valid_address(self)Updates the existing address with the valid address returned by the service. -
default_get(self, fields)@api.modelReturns the default values for the fields.
New fields (1)
-
company_codeSelectionselection=_get_company_codesstring='Select a Company'
-
action_set_code(self)
New fields (1)
-
nameChar
-
default_get(self, fields)@api.model -
ping(self)@api.modelCall the AvaTax's Ping Service to test the connection.
New fields (2)
-
codeChar -
nameCharrequired=True
No public methods.
New fields (2)
-
applicable_tax_code_idMany2one → product.tax.codecompute=_compute_applicable_tax_code args: 'product.tax.code', 'Applicable AvaTax Code' -
tax_code_idMany2one → product.tax.codeargs: 'product.tax.code', 'AvaTax Code'
No public methods.
New fields (3)
-
descriptionChar -
nameCharrequired=True args: 'Code' -
typeSelectionhelp='Type of tax code as defined in AvaTax'required=True args: [('product', 'Product'), ('freight', 'Freight'), ('service', 'Service'), ('digital', 'Digital'), ('other', 'Other')]
No public methods.
New fields (2)
-
applicable_tax_code_idMany2one → product.tax.codecompute=_compute_applicable_tax_code args: 'product.tax.code', 'Applicable AvaTax Code' -
tax_code_idMany2one → product.tax.codehelp='AvaTax Product Tax Code' args: 'product.tax.code', 'Product AvaTax Code'
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 (11)
-
customer_codeCharcopy=False -
date_validationDatecopy=Falsehelp='The date the address was last validated by AvaTax and accepted'readonly=True args: 'Last Validation Date' -
exemption_code_idMany2one → exemption.codeargs: 'exemption.code', 'Exemption Code (Deprecated)' -
exemption_numberCharargs: 'Exemption Number (Deprecated)' -
property_exemption_code_idMany2one → exemption.codecompany_dependent=Truehelp='The type of exemption granted' args: 'exemption.code', 'Exemption Code' -
property_exemption_country_wideBooleanhelp='When enabled, the delivery address State is irrelevant when looking up the exemption status, meaning that the exemption is considered applicable for all states' args: 'Exemption Applies Country Wide' -
property_exemption_numberCharcompany_dependent=Truehelp='The State identification number relevant fot the exemption' args: 'Exemption Number' -
property_tax_exemptBooleancompany_dependent=Truehelp='This company or address can claim for tax exemption' args: 'Is Tax Exempt' -
tax_exemptBooleanargs: 'Is Tax Exempt (Deprecated))' -
validated_on_saveBooleanhelp='Indicates if the address is already validated on save before calling the wizard' -
validation_methodSelectioncopy=Falsehelp='It gets populated when the address is validated by the method'readonly=True args: [('avatax', 'Avalara'), ('other', 'Other')], 'Address Validation Method'
-
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 at least exemption number or exemption code should be filled -
create(self, vals_list)@api.model_create_multi -
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)
Loading…
Loading…
Loading…
Loading…
- Status
- Open migration PR — not merged yet for this version
- CI status
- checks failing
- Open since
- 88 days ago
- Last activity
- 59 days ago
- Repository
- OCA/account-fiscal-rule
- Pull request
- [19.0][MIG] account_avatax_oca: Migration to 19.0 (#591)