diff --git a/account_avatax_exemption_base/README.rst b/account_avatax_exemption_base/README.rst new file mode 100644 index 000000000..b92b92a01 --- /dev/null +++ b/account_avatax_exemption_base/README.rst @@ -0,0 +1,80 @@ +====================== +Avatax Exemptions Base +====================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:6c20a3d4ab3129313aa0b3a0fc5d6864f1eb817dd61ee1074e1a5abdac395923 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--fiscal--rule-lightgray.png?logo=github + :target: https://github.com/OCA/account-fiscal-rule/tree/14.0/account_avatax_exemption_base + :alt: OCA/account-fiscal-rule +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/account-fiscal-rule-14-0/account-fiscal-rule-14-0-account_avatax_exemption_base + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/account-fiscal-rule&target_branch=14.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module is a component of the Avatax Exemption Integration with odoo app and it is used as an anchor module for account_avatax_exemption to add support for odoo enterprise module such as sign and document extension. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Sodexis + +Contributors +~~~~~~~~~~~~ + +* Sodexis + + * Atchuthan Ubendran + * Stephan Keller + * SodexisTeam + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/account-fiscal-rule `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_avatax_exemption_base/__init__.py b/account_avatax_exemption_base/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/account_avatax_exemption_base/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/account_avatax_exemption_base/__manifest__.py b/account_avatax_exemption_base/__manifest__.py new file mode 100644 index 000000000..5264f4006 --- /dev/null +++ b/account_avatax_exemption_base/__manifest__.py @@ -0,0 +1,23 @@ +{ + "name": "Avatax Exemptions Base", + "version": "16.0.1.0.0", + "category": "Sales", + "summary": """ + This application allows you to add exemptions base to Avatax + """, + "website": "https://github.com/OCA/account-fiscal-rule", + "author": "Sodexis, Odoo Community Association (OCA)", + "license": "LGPL-3", + "depends": [ + "mail", + "account", + ], + "data": [ + "security/ir.model.access.csv", + "data/ir_sequence_data.xml", + "views/res_country_state_view.xml", + "views/avalara_exemption_view.xml", + ], + "installable": True, + "application": False, +} diff --git a/account_avatax_exemption_base/data/ir_sequence_data.xml b/account_avatax_exemption_base/data/ir_sequence_data.xml new file mode 100644 index 000000000..b706daf35 --- /dev/null +++ b/account_avatax_exemption_base/data/ir_sequence_data.xml @@ -0,0 +1,9 @@ + + + Exemption Line Sequence + exemption.line.sequence + CERT + 5 + + + diff --git a/account_avatax_exemption_base/i18n/account_avatax_exemption_base.pot b/account_avatax_exemption_base/i18n/account_avatax_exemption_base.pot new file mode 100644 index 000000000..b3e099709 --- /dev/null +++ b/account_avatax_exemption_base/i18n/account_avatax_exemption_base.pot @@ -0,0 +1,523 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_avatax_exemption_base +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__activity_ids +msgid "Activities" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__activity_state +msgid "Activity State" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__business_type +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_type__business_type +msgid "Activity Type" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__add_exemption_number +msgid "Add Exemption Number" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.ui.menu,name:account_avatax_exemption_base.menu_exemption +msgid "AvaTax Exemption" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner__exemption_ids +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_users__exemption_ids +msgid "Avalara Exemptions" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_business_type__avatax_id +msgid "Avatax" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__avatax_id +msgid "Avatax Certificate ID" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_country_state__avatax_code +msgid "Avatax Code" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner__avatax_id +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_users__avatax_id +msgid "Avatax Customer ID" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model,name:account_avatax_exemption_base.model_res_partner_exemption +msgid "Avatax Exemption" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model,name:account_avatax_exemption_base.model_res_partner_exemption_line +msgid "Avatax Exemption Line" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model,name:account_avatax_exemption_base.model_res_partner_exemption_type +msgid "Avatax Exemption Type" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model,name:account_avatax_exemption_base.model_res_partner_group_state +msgid "Avatax Group of States" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_country_state__avatax_name +msgid "Avatax Name" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_country_state__avatax_nexus +msgid "Avatax Nexus" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__avatax_status +msgid "Avatax Status" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields.selection,name:account_avatax_exemption_base.selection__res_partner_exemption__state__cancel +msgid "Cancelled" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model,name:account_avatax_exemption_base.model_res_partner +msgid "Contact" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_group_state__country_id +msgid "Country" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model,name:account_avatax_exemption_base.model_res_country_state +msgid "Country state" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__create_uid +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_business_type__create_uid +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__create_uid +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_type__create_uid +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_group_state__create_uid +msgid "Created by" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__create_date +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_business_type__create_date +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__create_date +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_type__create_date +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_group_state__create_date +msgid "Created on" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_country_state__display_name +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner__display_name +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__display_name +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_business_type__display_name +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__display_name +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_type__display_name +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_group_state__display_name +msgid "Display Name" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields.selection,name:account_avatax_exemption_base.selection__res_partner_exemption__state__done +msgid "Done" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields.selection,name:account_avatax_exemption_base.selection__res_partner_exemption__state__draft +msgid "Draft" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields.selection,name:account_avatax_exemption_base.selection__res_partner_exemption__exemption_number_type__drivers_license_number +msgid "Drivers License Number" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__effective_date +msgid "Effective Date" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.actions.act_window,name:account_avatax_exemption_base.exemption_act_window +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__exemption_id +#: model:ir.ui.menu,name:account_avatax_exemption_base.menu_avatax_exemption +#: model_terms:ir.ui.view,arch_db:account_avatax_exemption_base.exemption_form_view +#: model_terms:ir.ui.view,arch_db:account_avatax_exemption_base.exemption_tree_view +msgid "Exemption" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.actions.act_window,name:account_avatax_exemption_base.exemption_reason_type_act_window +#: model:ir.model,name:account_avatax_exemption_base.model_res_partner_exemption_business_type +#: model:ir.ui.menu,name:account_avatax_exemption_base.menu_exemption_reason_type +#: model_terms:ir.ui.view,arch_db:account_avatax_exemption_base.exemption_reason_type_tree_view +msgid "Exemption Activity Type" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__exemption_line_ids +msgid "Exemption Line" +msgstr "" + +#. module: account_avatax_exemption_base +#: model_terms:ir.ui.view,arch_db:account_avatax_exemption_base.exemption_form_view +msgid "Exemption Lines" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__exemption_number +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__exemption_number +msgid "Exemption Number" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__exemption_number_type +msgid "Exemption Number Type" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields.selection,name:account_avatax_exemption_base.selection__res_partner_exemption__exemption_number_type__exemption_number/taxpayer_id +msgid "Exemption Number/Taxpayer ID" +msgstr "" + +#. module: account_avatax_exemption_base +#: model_terms:ir.ui.view,arch_db:account_avatax_exemption_base.exemption_reason_type_form_view +msgid "Exemption Reason Type" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.actions.act_window,name:account_avatax_exemption_base.exemption_type_act_window +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__exemption_type +#: model:ir.ui.menu,name:account_avatax_exemption_base.menu_exemption_type +#: model_terms:ir.ui.view,arch_db:account_avatax_exemption_base.exemption_type_form_view +#: model_terms:ir.ui.view,arch_db:account_avatax_exemption_base.exemption_type_tree_view +msgid "Exemption Type" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__exemption_validity_duration +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_type__exemption_validity_duration +msgid "Exemption Validity Duration" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__expiry_date +msgid "Expiry Date" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields.selection,name:account_avatax_exemption_base.selection__res_partner_exemption__exemption_number_type__fein +msgid "FEIN" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_channel_ids +msgid "Followers (Channels)" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields.selection,name:account_avatax_exemption_base.selection__res_partner_exemption__exemption_number_type__foreign_diplomat_number +msgid "Foreign Diplomat Number" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.actions.act_window,name:account_avatax_exemption_base.group_of_states_act_window +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__group_of_state +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_type__group_of_state +#: model:ir.ui.menu,name:account_avatax_exemption_base.menu_group_of_states +#: model_terms:ir.ui.view,arch_db:account_avatax_exemption_base.group_of_states_form_view +#: model_terms:ir.ui.view,arch_db:account_avatax_exemption_base.group_of_states_tree_view +msgid "Group of States" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_country_state__id +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner__id +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__id +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_business_type__id +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__id +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_type__id +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_group_state__id +msgid "ID" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption__message_needaction +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption__message_unread +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption__message_has_error +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields.selection,name:account_avatax_exemption_base.selection__res_partner_exemption__state__progress +msgid "In Progress" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_country_state____last_update +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner____last_update +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption____last_update +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_business_type____last_update +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line____last_update +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_type____last_update +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_group_state____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__write_uid +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_business_type__write_uid +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__write_uid +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_type__write_uid +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_group_state__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__write_date +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_business_type__write_date +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__write_date +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_type__write_date +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_group_state__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__linked_to_customer +msgid "Linked To Customer" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_ids +msgid "Messages" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__name +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_business_type__name +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__name +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_type__name +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_group_state__name +msgid "Name" +msgstr "" + +#. module: account_avatax_exemption_base +#: code:addons/account_avatax_exemption_base/models/exemption.py:0 +#: code:addons/account_avatax_exemption_base/models/exemption.py:0 +#: code:addons/account_avatax_exemption_base/models/exemption.py:0 +#: code:addons/account_avatax_exemption_base/models/exemption.py:0 +#, python-format +msgid "New" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption__message_unread_counter +msgid "Number of unread messages" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__partner_id +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__partner_id +msgid "Partner" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_has_sms_error +msgid "SMS Delivery error" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__state +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_line__state_id +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_group_state__state_ids +msgid "State" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__state_ids +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption_type__state_ids +msgid "States" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_unread +msgid "Unread Messages" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__message_unread_counter +msgid "Unread Messages Counter" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption__exemption_validity_duration +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption_type__exemption_validity_duration +msgid "Validity duration in days" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,field_description:account_avatax_exemption_base.field_res_partner_exemption__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: account_avatax_exemption_base +#: model:ir.model.fields,help:account_avatax_exemption_base.field_res_partner_exemption__website_message_ids +msgid "Website communication history" +msgstr "" diff --git a/account_avatax_exemption_base/models/__init__.py b/account_avatax_exemption_base/models/__init__.py new file mode 100644 index 000000000..81c73c4fe --- /dev/null +++ b/account_avatax_exemption_base/models/__init__.py @@ -0,0 +1,3 @@ +from . import partner +from . import exemption +from . import res_country_state diff --git a/account_avatax_exemption_base/models/exemption.py b/account_avatax_exemption_base/models/exemption.py new file mode 100644 index 000000000..dba50efa4 --- /dev/null +++ b/account_avatax_exemption_base/models/exemption.py @@ -0,0 +1,198 @@ +from datetime import timedelta + +from odoo import _, api, fields, models + + +class ResPartnerGroupState(models.Model): + _name = "res.partner.group.state" + _description = "Avatax Group of States" + + name = fields.Char() + country_id = fields.Many2one("res.country") + state_ids = fields.Many2many( + "res.country.state", + ) + + +class ResPartnerExemptionLine(models.Model): + _name = "res.partner.exemption.line" + _description = "Avatax Exemption Line" + + name = fields.Char(index=True, default=lambda self: _("New")) + exemption_id = fields.Many2one("res.partner.exemption", required=True) + partner_id = fields.Many2one(related="exemption_id.partner_id", store=True) + state_id = fields.Many2one("res.country.state") + avatax_id = fields.Char("Avatax Certificate ID", copy=False, readonly=True) + avatax_status = fields.Boolean(default=True) + linked_to_customer = fields.Boolean(readonly=True) + add_exemption_number = fields.Boolean() + exemption_number = fields.Char() + + @api.model + def create(self, vals): + if vals.get("name", _("New")) == _("New"): + vals["name"] = self.env["ir.sequence"].next_by_code( + "exemption.line.sequence" + ) or _("New") + return super().create(vals) + + +class ResPartnerExemptionBusinessType(models.Model): + _name = "res.partner.exemption.business.type" + _description = "Exemption Activity Type" + + name = fields.Char(required=True) + avatax_id = fields.Char(required=True, readonly=True) + + +class ResPartnerExemptionType(models.Model): + _name = "res.partner.exemption.type" + _description = "Avatax Exemption Type" + + name = fields.Char() + business_type = fields.Many2one( + "res.partner.exemption.business.type", + string="Activity Type", + ) + group_of_state = fields.Many2one( + "res.partner.group.state", string="Group of States" + ) + state_ids = fields.Many2many("res.country.state", string="States") + exemption_validity_duration = fields.Integer( + help="Validity duration in days", default=30 + ) + + @api.onchange("group_of_state") + def onchange_group_of_state(self): + if self.group_of_state.state_ids and not self.state_ids: + self.state_ids = [(6, 0, self.group_of_state.state_ids.ids)] + + +class ResPartnerExemption(models.Model): + _name = "res.partner.exemption" + _description = "Avatax Exemption" + _inherit = [ + "res.partner.exemption.type", + "mail.thread", + "mail.activity.mixin", + ] + + partner_id = fields.Many2one( + "res.partner", + required=True, + index=True, + readonly=True, + states={"draft": [("readonly", False)]}, + ) + exemption_type = fields.Many2one( + "res.partner.exemption.type", + readonly=True, + states={"draft": [("readonly", False)]}, + ) + # Fields already defined in Avatax Exemption Type, adding only readonly attrs + business_type = fields.Many2one( + string="Activity Type", readonly=True, states={"draft": [("readonly", False)]} + ) + group_of_state = fields.Many2one( + readonly=True, states={"draft": [("readonly", False)]} + ) + state_ids = fields.Many2many(readonly=True, states={"draft": [("readonly", False)]}) + + exemption_number = fields.Char( + readonly=True, states={"draft": [("readonly", False)]} + ) + exemption_number_type = fields.Selection( + [ + ("exemption_number/taxpayer_id", "Exemption Number/Taxpayer ID"), + ("foreign_diplomat_number", "Foreign Diplomat Number"), + ("drivers_license_number", "Drivers License Number"), + ("fein", "FEIN"), + ], + default="exemption_number/taxpayer_id", + readonly=True, + states={"draft": [("readonly", False)]}, + ) + effective_date = fields.Date( + default=lambda self: fields.Date.today(), + readonly=True, + states={"draft": [("readonly", False)]}, + ) + expiry_date = fields.Date() + exemption_line_ids = fields.One2many( + "res.partner.exemption.line", + "exemption_id", + readonly=True, + states={"draft": [("readonly", False)]}, + ) + state = fields.Selection( + [ + ("draft", "Draft"), + ("progress", "In Progress"), + ("done", "Done"), + ("cancel", "Cancelled"), + ], + default="draft", + ) + + def _get_document_folder(self): + return self.env.company.documents_exemption_folder + + def _check_create_documents(self): + return ( + self.env.company.documents_exemption_settings + and super()._check_create_documents() + ) + + def name_get(self): + res = [] + for record in self: + if record.exemption_number: + name = "{} - {}".format( + record.exemption_number, + record.partner_id.display_name, + ) + else: + name = record.partner_id.display_name + if record.exemption_type: + name = "{} - {}".format(record.exemption_type.name, name) + res.append((record.id, name)) + return res + + @api.onchange("exemption_type", "group_of_state") + def onchange_exemption_type(self): + self.business_type = self.exemption_type.business_type.id + if self.exemption_type.group_of_state and not self.group_of_state: + self.group_of_state = self.exemption_type.group_of_state.id + if self.exemption_type or self.group_of_state: + state_ids = [] + if self.exemption_type.group_of_state.state_ids: + state_ids += self.exemption_type.group_of_state.state_ids.ids + if self.exemption_type.state_ids: + state_ids += self.exemption_type.state_ids.ids + if self.group_of_state.state_ids: + state_ids += self.group_of_state.state_ids.ids + self.state_ids = [(6, 0, list(set(state_ids)))] + + @api.onchange("exemption_type", "effective_date") + def onchange_effective_date(self): + if self.exemption_type.exemption_validity_duration and self.effective_date: + self.expiry_date = self.effective_date + timedelta( + days=self.exemption_type.exemption_validity_duration + ) + + @api.onchange("state_ids") + def onchange_state_ids(self): + if not any(self.exemption_line_ids.mapped("avatax_id")) and not any( + self.exemption_line_ids.mapped("add_exemption_number") + ): + self.exemption_line_ids = [(6, 0, [])] + for state_id in self.state_ids.ids: + if state_id not in self.exemption_line_ids.mapped("state_id").ids: + self.exemption_line_ids += self.exemption_line_ids.new( + { + "partner_id": self.partner_id.id, + "exemption_id": self.id, + "state_id": state_id, + "avatax_status": True, + } + ) diff --git a/account_avatax_exemption_base/models/partner.py b/account_avatax_exemption_base/models/partner.py new file mode 100644 index 000000000..43a1b26db --- /dev/null +++ b/account_avatax_exemption_base/models/partner.py @@ -0,0 +1,10 @@ +from odoo import fields, models + + +class ResPartner(models.Model): + _inherit = "res.partner" + + avatax_id = fields.Char("Avatax Customer ID", copy=False, readonly=True) + exemption_ids = fields.One2many( + "res.partner.exemption", "partner_id", string="Avalara Exemptions" + ) diff --git a/account_avatax_exemption_base/models/res_country_state.py b/account_avatax_exemption_base/models/res_country_state.py new file mode 100644 index 000000000..a8d4df162 --- /dev/null +++ b/account_avatax_exemption_base/models/res_country_state.py @@ -0,0 +1,9 @@ +from odoo import fields, models + + +class CountryState(models.Model): + _inherit = "res.country.state" + + avatax_code = fields.Char(copy=False) + avatax_name = fields.Char(copy=False) + avatax_nexus = fields.Boolean(copy=False) diff --git a/account_avatax_exemption_base/readme/CONTRIBUTORS.rst b/account_avatax_exemption_base/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..bd20edaf6 --- /dev/null +++ b/account_avatax_exemption_base/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* Sodexis + + * Atchuthan Ubendran + * Stephan Keller + * SodexisTeam diff --git a/account_avatax_exemption_base/readme/DESCRIPTION.rst b/account_avatax_exemption_base/readme/DESCRIPTION.rst new file mode 100644 index 000000000..92147a2b4 --- /dev/null +++ b/account_avatax_exemption_base/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module is a component of the Avatax Exemption Integration with odoo app and it is used as an anchor module for account_avatax_exemption to add support for odoo enterprise module such as sign and document extension. diff --git a/account_avatax_exemption_base/readme/USAGE.rst b/account_avatax_exemption_base/readme/USAGE.rst new file mode 100644 index 000000000..e69de29bb diff --git a/account_avatax_exemption_base/security/ir.model.access.csv b/account_avatax_exemption_base/security/ir.model.access.csv new file mode 100644 index 000000000..e97b897ec --- /dev/null +++ b/account_avatax_exemption_base/security/ir.model.access.csv @@ -0,0 +1,11 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_group_of_states,res.partner.group.states,model_res_partner_group_state,base.group_user,1,1,1,1 +access_res_partner_exemption,access_res_partner_exemption,model_res_partner_exemption,base.group_user,1,1,1,1 +access_res_partner_exemption_line,access_res_partner_exemption_line,model_res_partner_exemption_line,base.group_user,1,1,1,1 +access_res_partner_exemption_type,access_res_partner_exemption_type,model_res_partner_exemption_type,base.group_user,1,1,1,1 +access_res_partner_exemption_business_type,access_res_partner_exemption_business_type,model_res_partner_exemption_business_type,base.group_user,1,1,1,1 +access_portal_group_of_states,access_portal_group_of_states,model_res_partner_group_state,,1,0,0,0 +access_portal_res_partner_exemption,access_portal_res_partner_exemption,model_res_partner_exemption,,1,1,1,0 +access_portal_res_partner_exemption_line,access_portal_res_partner_exemption_line,model_res_partner_exemption_line,,1,0,0,0 +access_portal_res_partner_exemption_type,access_portal_res_partner_exemption_type,model_res_partner_exemption_type,,1,0,0,0 +access_portal_res_partner_exemption_business_type,access_portal_res_partner_exemption_business_type,model_res_partner_exemption_business_type,,1,0,0,0 diff --git a/account_avatax_exemption_base/static/description/icon.png b/account_avatax_exemption_base/static/description/icon.png new file mode 100644 index 000000000..048650389 Binary files /dev/null and b/account_avatax_exemption_base/static/description/icon.png differ diff --git a/account_avatax_exemption_base/static/description/index.html b/account_avatax_exemption_base/static/description/index.html new file mode 100644 index 000000000..2c8982b9c --- /dev/null +++ b/account_avatax_exemption_base/static/description/index.html @@ -0,0 +1,426 @@ + + + + + + +Avatax Exemptions Base + + + +
+

Avatax Exemptions Base

+ + +

Beta License: LGPL-3 OCA/account-fiscal-rule Translate me on Weblate Try me on Runboat

+

This module is a component of the Avatax Exemption Integration with odoo app and it is used as an anchor module for account_avatax_exemption to add support for odoo enterprise module such as sign and document extension.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Sodexis
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/account-fiscal-rule project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/account_avatax_exemption_base/static/description/menu_icon.png b/account_avatax_exemption_base/static/description/menu_icon.png new file mode 100644 index 000000000..bba613f30 Binary files /dev/null and b/account_avatax_exemption_base/static/description/menu_icon.png differ diff --git a/account_avatax_exemption_base/views/avalara_exemption_view.xml b/account_avatax_exemption_base/views/avalara_exemption_view.xml new file mode 100644 index 000000000..389d681f2 --- /dev/null +++ b/account_avatax_exemption_base/views/avalara_exemption_view.xml @@ -0,0 +1,264 @@ + + + + group.of.states.form.view + res.partner.group.state + form + +
+ + + + + +
+
+
+ + group.of.states.tree.view + res.partner.group.state + tree + + + + + + + + + + Group of States + res.partner.group.state + tree + tree,form + + + + + res.partner.exemption.type.form.view + res.partner.exemption.type + form + +
+ + + + + + + +
+
+
+ + res.partner.exemption.type.tree.view + res.partner.exemption.type + tree + + + + + + + + + Exemption Type + res.partner.exemption.type + tree + tree,form + + + + + res.partner.exemption.business.type.form.view + res.partner.exemption.business.type + form + +
+ + + + +
+
+
+ + res.partner.exemption.business.type.tree.view + res.partner.exemption.business.type + tree + + + + + + + + + Exemption Activity Type + res.partner.exemption.business.type + tree + tree,form + + + + + res.partner.exemption.form.view + res.partner.exemption + form + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+
+ + res.partner.exemption.tree.view + res.partner.exemption + tree + + + + + + + + + + + + + Exemption + res.partner.exemption + tree + tree,form + + + + + + +
diff --git a/account_avatax_exemption_base/views/res_country_state_view.xml b/account_avatax_exemption_base/views/res_country_state_view.xml new file mode 100644 index 000000000..cbb2f1451 --- /dev/null +++ b/account_avatax_exemption_base/views/res_country_state_view.xml @@ -0,0 +1,14 @@ + + + res.country.state.inherit + res.country.state + + + + + + + + + + diff --git a/setup/account_avatax_exemption_base/odoo/addons/account_avatax_exemption_base b/setup/account_avatax_exemption_base/odoo/addons/account_avatax_exemption_base new file mode 120000 index 000000000..a5d7ed4be --- /dev/null +++ b/setup/account_avatax_exemption_base/odoo/addons/account_avatax_exemption_base @@ -0,0 +1 @@ +../../../../account_avatax_exemption_base \ No newline at end of file diff --git a/setup/account_avatax_exemption_base/setup.py b/setup/account_avatax_exemption_base/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/account_avatax_exemption_base/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)