├── requirements.txt ├── .gitignore ├── cpi_table ├── __init__.py ├── models │ ├── __init__.py │ └── consumer_price_index.py ├── static │ └── description │ │ ├── icon.png │ │ ├── banner.png │ │ ├── icon_file_text.png │ │ ├── icon_file_text_50.png │ │ ├── icon_file_text_50_neg.png │ │ ├── inkscape_export_settings_20-04.png │ │ ├── inkscape_export_settings_22-04.png │ │ ├── index.html │ │ └── notes.txt ├── security │ └── ir.model.access.csv ├── views │ └── consumer_price_index.xml ├── __manifest__.py └── i18n │ └── sv.po ├── contract_loan ├── __init__.py ├── models │ ├── __init__.py │ ├── contract_contract.py │ └── contract_line.py ├── views │ ├── contract_contract_view.xml │ └── contract_template_view.xml ├── __manifest__.py └── i18n │ └── sv.po ├── pricelist_cpi ├── __init__.py ├── models │ ├── __init__.py │ └── product_pricelist.py ├── static │ └── description │ │ ├── icon.png │ │ ├── banner.png │ │ ├── icon_file_text.png │ │ ├── icon_file_text_50.png │ │ ├── icon_file_text_50_neg.png │ │ ├── inkscape_export_settings_20-04.png │ │ ├── inkscape_export_settings_22-04.png │ │ └── notes.txt ├── i18n │ └── sv.po ├── __manifest__.py └── views │ └── product_pricelist.xml ├── sale_contract ├── __init__.py ├── models │ ├── __init__.py │ ├── product_template.py │ ├── contract.py │ └── sale.py ├── static │ └── description │ │ ├── icon.png │ │ ├── banner.png │ │ ├── inkscape_export_settings_20-04.png │ │ ├── inkscape_export_settings_22-04.png │ │ └── notes.txt ├── views │ ├── contract_view.xml │ ├── sale_view.xml │ └── product_view.xml └── __manifest__.py ├── account_agreement ├── __init__.py ├── models │ ├── __init__.py │ └── account_move.py ├── static │ └── description │ │ ├── icon.png │ │ ├── banner.png │ │ ├── inkscape_export_settings_20-04.png │ │ ├── inkscape_export_settings_22-04.png │ │ └── notes.txt ├── views │ └── account_move.xml ├── i18n │ └── sv.po └── __manifest__.py ├── agreement_calculate ├── __init__.py ├── models │ └── __init__.py ├── static │ └── description │ │ ├── icon.png │ │ ├── banner.png │ │ ├── icon_file_text.png │ │ ├── icon_file_text_50.png │ │ ├── icon_file_text_50_neg.png │ │ ├── inkscape_export_settings_20-04.png │ │ ├── inkscape_export_settings_22-04.png │ │ └── notes.txt ├── views │ └── agreement.xml ├── __manifest__.py └── i18n │ └── sv.po ├── agreement_property ├── __init__.py ├── models │ ├── __init__.py │ └── agreement.py ├── static │ └── description │ │ ├── icon.png │ │ ├── banner.png │ │ ├── icon_file_text.png │ │ ├── icon_file_text_50.png │ │ ├── icon_file_text_50_neg.png │ │ ├── inkscape_export_settings_20-04.png │ │ ├── inkscape_export_settings_22-04.png │ │ └── notes.txt ├── views │ └── agreement.xml ├── i18n │ └── sv.po └── __manifest__.py ├── contract_aaw ├── controller │ ├── __init__.py │ └── main.py ├── __init__.py ├── models │ ├── __init__.py │ ├── contract_template_line.py │ ├── contract_template.py │ ├── project_task.py │ └── sale.py ├── views │ ├── contract_template_view.xml │ ├── project_task_view.xml │ ├── contract_contract_view.xml │ ├── hr_timesheet_views.xml │ ├── project_project_view.xml │ └── project_portal_project_task_templates.xml ├── __manifest__.py └── i18n │ └── sv.po ├── contract_edit_active_lines ├── __init__.py ├── models │ ├── __init__.py │ └── contract_line.py ├── static │ └── description │ │ ├── icon.png │ │ ├── banner.png │ │ ├── inkscape_export_settings_20-04.png │ │ ├── inkscape_export_settings_22-04.png │ │ └── notes.txt ├── i18n │ └── sv.po └── __manifest__.py ├── contract_invoicingplan ├── __init__.py ├── models │ ├── __init__.py │ ├── contract_recurrency_mixin.py │ ├── account_move.py │ └── account_journal_dashboard.py ├── security │ └── ir.model.access.csv ├── static │ └── description │ │ └── index.html ├── views │ ├── account_move.xml │ └── account_journal_dashboard.xml ├── data │ └── ir_cron.xml └── __manifest__.py ├── contract_monthly_value ├── __init__.py ├── models │ ├── __init__.py │ └── contract.py ├── static │ └── description │ │ ├── icon.png │ │ ├── banner.png │ │ ├── inkscape_export_settings_20-04.png │ │ ├── inkscape_export_settings_22-04.png │ │ ├── index.html │ │ └── notes.txt ├── views │ └── monthly_value.xml ├── i18n │ └── sv.po └── __manifest__.py ├── contract_recurring_event ├── __init__.py ├── models │ ├── __init__.py │ └── calendar.py ├── views │ └── calendar_view.xml └── __manifest__.py ├── product_contract_deprecated ├── __init__.py ├── models │ ├── __init__.py │ ├── product.py │ └── contract.py ├── static │ └── description │ │ ├── icon.png │ │ ├── banner.png │ │ ├── inkscape_export_settings.png │ │ ├── inkscape_export_settings_20-04.png │ │ ├── inkscape_export_settings_22-04.png │ │ └── notes.txt ├── views │ ├── contract.xml │ ├── sale_order.xml │ └── product_view.xml ├── __manifest__.py └── i18n │ └── sv.po ├── agreement_base_booking ├── models │ └── __init__.py ├── __init__.py ├── wizard │ ├── __init__.py │ ├── agreement_contract_wizard.py │ ├── agreement_open_space_view.xml │ └── agreement_open_space.py ├── static │ └── description │ │ ├── icon.png │ │ ├── banner.png │ │ ├── icon_file_text.png │ │ ├── icon_file_text_50.png │ │ ├── icon_file_text_50_neg.png │ │ ├── inkscape_export_settings_20-04.png │ │ ├── inkscape_export_settings_22-04.png │ │ └── notes.txt ├── security │ └── ir.model.access.csv ├── views │ └── agreement.xml └── __manifest__.py ├── agreement_contract ├── __init__.py ├── wizard │ ├── __init__.py │ └── agreement_contract_wizard_views.xml ├── models │ └── __init__.py ├── static │ └── description │ │ ├── icon.png │ │ ├── banner.png │ │ ├── icon_file_text.png │ │ ├── icon_file_text_50.png │ │ ├── icon_file_text_50_neg.png │ │ ├── inkscape_export_settings_20-04.png │ │ ├── inkscape_export_settings_22-04.png │ │ └── notes.txt ├── security │ └── ir.model.access.csv ├── views │ └── contract.xml └── __manifest__.py ├── contract_variable_quantity_analytics_account ├── __init__.py ├── models │ ├── __init__.py │ ├── account_move_line.py │ └── contract_line.py ├── static │ └── description │ │ ├── icon.png │ │ ├── banner.png │ │ └── notes.txt ├── data │ └── contract_line_qty_formula.xml ├── views │ └── account_move_view.xml ├── i18n │ └── sv.po └── __manifest__.py ├── requirements.repo └── contract_variable_qty_hour_bank ├── __init__.py ├── models ├── __init__.py ├── sale_order.py └── product.py ├── static └── description │ ├── icon.png │ ├── banner.png │ ├── inkscape_export_settings.png │ ├── inkscape_export_settings_20-04.png │ ├── inkscape_export_settings_22-04.png │ └── notes.txt ├── tests └── __init__.py ├── readme ├── DESCRIPTION.rst ├── CONTRIBUTORS.rst └── USAGE.rst ├── views ├── contract_view.xml └── product_view.xml ├── data └── contract_line_qty_formula_data.xml └── __manifest__.py /requirements.txt: -------------------------------------------------------------------------------- 1 | ## 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *~ 3 | *.swp 4 | -------------------------------------------------------------------------------- /cpi_table/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /contract_loan/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /pricelist_cpi/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /sale_contract/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /account_agreement/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /agreement_calculate/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /agreement_property/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /contract_aaw/controller/__init__.py: -------------------------------------------------------------------------------- 1 | from . import main 2 | -------------------------------------------------------------------------------- /contract_edit_active_lines/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models -------------------------------------------------------------------------------- /contract_invoicingplan/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /contract_monthly_value/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /contract_recurring_event/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /account_agreement/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import account_move 2 | -------------------------------------------------------------------------------- /agreement_calculate/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import agreement 2 | -------------------------------------------------------------------------------- /agreement_property/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import agreement 2 | -------------------------------------------------------------------------------- /contract_monthly_value/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import contract 2 | -------------------------------------------------------------------------------- /cpi_table/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import consumer_price_index 2 | -------------------------------------------------------------------------------- /product_contract_deprecated/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /agreement_base_booking/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import agreement 2 | -------------------------------------------------------------------------------- /contract_edit_active_lines/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import contract_line -------------------------------------------------------------------------------- /agreement_contract/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizard -------------------------------------------------------------------------------- /contract_aaw/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import controller 3 | -------------------------------------------------------------------------------- /contract_variable_quantity_analytics_account/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models -------------------------------------------------------------------------------- /agreement_contract/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import agreement_contract_wizard 2 | -------------------------------------------------------------------------------- /agreement_base_booking/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizard 3 | -------------------------------------------------------------------------------- /agreement_contract/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import agreement 2 | from . import contract 3 | -------------------------------------------------------------------------------- /contract_recurring_event/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import calendar 2 | from . import contract 3 | -------------------------------------------------------------------------------- /contract_loan/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import contract_line 2 | from . import contract_contract 3 | -------------------------------------------------------------------------------- /pricelist_cpi/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import product_pricelist 2 | from . import contract 3 | 4 | -------------------------------------------------------------------------------- /requirements.repo: -------------------------------------------------------------------------------- 1 | git@github.com:vertelab/odoo-oca-contract.git /usr/share/odooext-OCA-contract 2 | -------------------------------------------------------------------------------- /sale_contract/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import contract 2 | from . import sale 3 | from . import product_template 4 | 5 | -------------------------------------------------------------------------------- /product_contract_deprecated/models/__init__.py: -------------------------------------------------------------------------------- 1 | # from . import product 2 | # from . import sale 3 | # from . import contract 4 | -------------------------------------------------------------------------------- /agreement_base_booking/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import agreement_contract_wizard 2 | from . import agreement_open_space 3 | 4 | -------------------------------------------------------------------------------- /contract_variable_quantity_analytics_account/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import account_move_line 2 | from . import contract_line 3 | -------------------------------------------------------------------------------- /cpi_table/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/cpi_table/static/description/icon.png -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/__init__.py: -------------------------------------------------------------------------------- 1 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 2 | from . import models 3 | -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/models/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | from . import contract 3 | from . import sale_order 4 | from . import product 5 | -------------------------------------------------------------------------------- /cpi_table/static/description/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/cpi_table/static/description/banner.png -------------------------------------------------------------------------------- /pricelist_cpi/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/pricelist_cpi/static/description/icon.png -------------------------------------------------------------------------------- /sale_contract/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/sale_contract/static/description/icon.png -------------------------------------------------------------------------------- /account_agreement/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/account_agreement/static/description/icon.png -------------------------------------------------------------------------------- /pricelist_cpi/static/description/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/pricelist_cpi/static/description/banner.png -------------------------------------------------------------------------------- /sale_contract/static/description/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/sale_contract/static/description/banner.png -------------------------------------------------------------------------------- /account_agreement/static/description/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/account_agreement/static/description/banner.png -------------------------------------------------------------------------------- /agreement_calculate/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_calculate/static/description/icon.png -------------------------------------------------------------------------------- /agreement_contract/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_contract/static/description/icon.png -------------------------------------------------------------------------------- /agreement_property/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_property/static/description/icon.png -------------------------------------------------------------------------------- /cpi_table/static/description/icon_file_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/cpi_table/static/description/icon_file_text.png -------------------------------------------------------------------------------- /agreement_base_booking/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_base_booking/static/description/icon.png -------------------------------------------------------------------------------- /agreement_calculate/static/description/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_calculate/static/description/banner.png -------------------------------------------------------------------------------- /agreement_contract/static/description/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_contract/static/description/banner.png -------------------------------------------------------------------------------- /agreement_property/static/description/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_property/static/description/banner.png -------------------------------------------------------------------------------- /contract_monthly_value/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_monthly_value/static/description/icon.png -------------------------------------------------------------------------------- /cpi_table/static/description/icon_file_text_50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/cpi_table/static/description/icon_file_text_50.png -------------------------------------------------------------------------------- /agreement_base_booking/static/description/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_base_booking/static/description/banner.png -------------------------------------------------------------------------------- /contract_monthly_value/static/description/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_monthly_value/static/description/banner.png -------------------------------------------------------------------------------- /pricelist_cpi/static/description/icon_file_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/pricelist_cpi/static/description/icon_file_text.png -------------------------------------------------------------------------------- /contract_edit_active_lines/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_edit_active_lines/static/description/icon.png -------------------------------------------------------------------------------- /cpi_table/static/description/icon_file_text_50_neg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/cpi_table/static/description/icon_file_text_50_neg.png -------------------------------------------------------------------------------- /pricelist_cpi/static/description/icon_file_text_50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/pricelist_cpi/static/description/icon_file_text_50.png -------------------------------------------------------------------------------- /product_contract_deprecated/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/product_contract_deprecated/static/description/icon.png -------------------------------------------------------------------------------- /agreement_calculate/static/description/icon_file_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_calculate/static/description/icon_file_text.png -------------------------------------------------------------------------------- /agreement_contract/static/description/icon_file_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_contract/static/description/icon_file_text.png -------------------------------------------------------------------------------- /agreement_property/static/description/icon_file_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_property/static/description/icon_file_text.png -------------------------------------------------------------------------------- /contract_edit_active_lines/static/description/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_edit_active_lines/static/description/banner.png -------------------------------------------------------------------------------- /product_contract_deprecated/static/description/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/product_contract_deprecated/static/description/banner.png -------------------------------------------------------------------------------- /agreement_base_booking/static/description/icon_file_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_base_booking/static/description/icon_file_text.png -------------------------------------------------------------------------------- /agreement_calculate/static/description/icon_file_text_50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_calculate/static/description/icon_file_text_50.png -------------------------------------------------------------------------------- /agreement_contract/static/description/icon_file_text_50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_contract/static/description/icon_file_text_50.png -------------------------------------------------------------------------------- /agreement_property/static/description/icon_file_text_50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_property/static/description/icon_file_text_50.png -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_variable_qty_hour_bank/static/description/icon.png -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/tests/__init__.py: -------------------------------------------------------------------------------- 1 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 2 | 3 | from . import test_contract_variable_qty_timesheet 4 | -------------------------------------------------------------------------------- /pricelist_cpi/static/description/icon_file_text_50_neg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/pricelist_cpi/static/description/icon_file_text_50_neg.png -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/static/description/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_variable_qty_hour_bank/static/description/banner.png -------------------------------------------------------------------------------- /agreement_base_booking/static/description/icon_file_text_50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_base_booking/static/description/icon_file_text_50.png -------------------------------------------------------------------------------- /agreement_calculate/static/description/icon_file_text_50_neg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_calculate/static/description/icon_file_text_50_neg.png -------------------------------------------------------------------------------- /agreement_contract/static/description/icon_file_text_50_neg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_contract/static/description/icon_file_text_50_neg.png -------------------------------------------------------------------------------- /agreement_property/static/description/icon_file_text_50_neg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_property/static/description/icon_file_text_50_neg.png -------------------------------------------------------------------------------- /cpi_table/static/description/inkscape_export_settings_20-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/cpi_table/static/description/inkscape_export_settings_20-04.png -------------------------------------------------------------------------------- /cpi_table/static/description/inkscape_export_settings_22-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/cpi_table/static/description/inkscape_export_settings_22-04.png -------------------------------------------------------------------------------- /agreement_base_booking/static/description/icon_file_text_50_neg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_base_booking/static/description/icon_file_text_50_neg.png -------------------------------------------------------------------------------- /pricelist_cpi/static/description/inkscape_export_settings_20-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/pricelist_cpi/static/description/inkscape_export_settings_20-04.png -------------------------------------------------------------------------------- /pricelist_cpi/static/description/inkscape_export_settings_22-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/pricelist_cpi/static/description/inkscape_export_settings_22-04.png -------------------------------------------------------------------------------- /sale_contract/static/description/inkscape_export_settings_20-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/sale_contract/static/description/inkscape_export_settings_20-04.png -------------------------------------------------------------------------------- /sale_contract/static/description/inkscape_export_settings_22-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/sale_contract/static/description/inkscape_export_settings_22-04.png -------------------------------------------------------------------------------- /account_agreement/static/description/inkscape_export_settings_20-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/account_agreement/static/description/inkscape_export_settings_20-04.png -------------------------------------------------------------------------------- /account_agreement/static/description/inkscape_export_settings_22-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/account_agreement/static/description/inkscape_export_settings_22-04.png -------------------------------------------------------------------------------- /agreement_contract/static/description/inkscape_export_settings_20-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_contract/static/description/inkscape_export_settings_20-04.png -------------------------------------------------------------------------------- /agreement_contract/static/description/inkscape_export_settings_22-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_contract/static/description/inkscape_export_settings_22-04.png -------------------------------------------------------------------------------- /agreement_property/static/description/inkscape_export_settings_20-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_property/static/description/inkscape_export_settings_20-04.png -------------------------------------------------------------------------------- /agreement_property/static/description/inkscape_export_settings_22-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_property/static/description/inkscape_export_settings_22-04.png -------------------------------------------------------------------------------- /contract_variable_quantity_analytics_account/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_variable_quantity_analytics_account/static/description/icon.png -------------------------------------------------------------------------------- /agreement_calculate/static/description/inkscape_export_settings_20-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_calculate/static/description/inkscape_export_settings_20-04.png -------------------------------------------------------------------------------- /agreement_calculate/static/description/inkscape_export_settings_22-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_calculate/static/description/inkscape_export_settings_22-04.png -------------------------------------------------------------------------------- /contract_variable_quantity_analytics_account/static/description/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_variable_quantity_analytics_account/static/description/banner.png -------------------------------------------------------------------------------- /product_contract_deprecated/static/description/inkscape_export_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/product_contract_deprecated/static/description/inkscape_export_settings.png -------------------------------------------------------------------------------- /agreement_base_booking/static/description/inkscape_export_settings_20-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_base_booking/static/description/inkscape_export_settings_20-04.png -------------------------------------------------------------------------------- /agreement_base_booking/static/description/inkscape_export_settings_22-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/agreement_base_booking/static/description/inkscape_export_settings_22-04.png -------------------------------------------------------------------------------- /contract_monthly_value/static/description/inkscape_export_settings_20-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_monthly_value/static/description/inkscape_export_settings_20-04.png -------------------------------------------------------------------------------- /contract_monthly_value/static/description/inkscape_export_settings_22-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_monthly_value/static/description/inkscape_export_settings_22-04.png -------------------------------------------------------------------------------- /contract_edit_active_lines/static/description/inkscape_export_settings_20-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_edit_active_lines/static/description/inkscape_export_settings_20-04.png -------------------------------------------------------------------------------- /contract_edit_active_lines/static/description/inkscape_export_settings_22-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_edit_active_lines/static/description/inkscape_export_settings_22-04.png -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/static/description/inkscape_export_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_variable_qty_hour_bank/static/description/inkscape_export_settings.png -------------------------------------------------------------------------------- /product_contract_deprecated/static/description/inkscape_export_settings_20-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/product_contract_deprecated/static/description/inkscape_export_settings_20-04.png -------------------------------------------------------------------------------- /product_contract_deprecated/static/description/inkscape_export_settings_22-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/product_contract_deprecated/static/description/inkscape_export_settings_22-04.png -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/static/description/inkscape_export_settings_20-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_variable_qty_hour_bank/static/description/inkscape_export_settings_20-04.png -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/static/description/inkscape_export_settings_22-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vertelab/odoo-contract/18.0/contract_variable_qty_hour_bank/static/description/inkscape_export_settings_22-04.png -------------------------------------------------------------------------------- /cpi_table/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_consumer_price_index,consumer.price.index,model_consumer_price_index,base.group_user,1,1,1,1 3 | 4 | -------------------------------------------------------------------------------- /contract_invoicingplan/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import contract 2 | from . import contract_invoice_sub 3 | #from . import contract_recurrency_mixin 4 | from . import account_journal_dashboard 5 | from . import account_move 6 | 7 | -------------------------------------------------------------------------------- /cpi_table/static/description/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CPI Table 4 | 5 |

CPI Table

6 |

Module for Consumer Price Index tables in Odoo.

7 | 8 | 9 | -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/readme/DESCRIPTION.rst: -------------------------------------------------------------------------------- 1 | This module extends the functionality of contract_variable_quantity adding 2 | several variable quantity formulas to allow to invoice lines from Timesheet 3 | (Analytic Lines). 4 | -------------------------------------------------------------------------------- /contract_invoicingplan/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink 2 | access_contract_invoice_stub_id,access_contract_invoice_stub,model_contract_invoice_stub,base.group_user,1,1,1,1 -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/models/sale_order.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields, api, _ 2 | import logging 3 | 4 | _logger = logging.getLogger(__name__) 5 | 6 | class SaleOrderModifyContract(models.Model): 7 | _inherit = "sale.order" 8 | -------------------------------------------------------------------------------- /agreement_contract/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_agreement_contract_wizard,agreement.contract.wizard,model_agreement_contract_wizard,base.group_user,1,1,1,1 3 | 4 | -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/readme/CONTRIBUTORS.rst: -------------------------------------------------------------------------------- 1 | * `Tecnativa `_: 2 | 3 | * Carlos Dauden 4 | * Pedro M. Baeza 5 | 6 | * `Guadaltech `_: 7 | 8 | * Fernando La Chica 9 | -------------------------------------------------------------------------------- /contract_aaw/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import project_project 2 | from . import project_task 3 | from . import contract_template_line 4 | from . import contract_line 5 | from . import contract_contract 6 | from . import contract_template 7 | from . import sale 8 | 9 | -------------------------------------------------------------------------------- /agreement_base_booking/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | agreement_base_booking.access_agreement_open_space,access_agreement_open_space,agreement_base_booking.model_agreement_open_space,base.group_user,1,1,1,0 3 | 4 | 5 | -------------------------------------------------------------------------------- /contract_invoicingplan/static/description/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Temporary page 6 | 7 | 8 |

Welcome to the temporary page

9 |

This is a simple page that is used temporarily.

10 | 11 | 12 | -------------------------------------------------------------------------------- /contract_invoicingplan/models/contract_recurrency_mixin.py: -------------------------------------------------------------------------------- 1 | 2 | from dateutil.relativedelta import relativedelta 3 | 4 | from odoo import api, fields, models 5 | 6 | 7 | class ContractRecurrencyMixin(models.AbstractModel): 8 | _inherit = "contract.recurrency.mixin" 9 | 10 | recurring_next_date = fields.Date(string="Next Date") 11 | -------------------------------------------------------------------------------- /contract_monthly_value/static/description/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Scaffold Module 7 | 8 | 9 |

Scaffold Module Title

10 | 11 | -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/readme/USAGE.rst: -------------------------------------------------------------------------------- 1 | To use this module, you need to: 2 | 3 | #. Go to Invoicing > Sales > Contracts and select or create a new contract. 4 | #. Check *Generate recurring invoices automatically*. 5 | #. Add a new recurring invoicing line. 6 | #. Select "Variable quantity" in column "Qty. type". 7 | #. Select "Project Timesheets", "Tasks Timesheets" or "Analytic Same Product" 8 | depending on your need. 9 | -------------------------------------------------------------------------------- /contract_variable_quantity_analytics_account/data/contract_line_qty_formula.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Product Quantity by Analytic Account of posted In_Invoices 6 | result = line._contract_variable_quantity_analytics_account_method() 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /contract_variable_quantity_analytics_account/models/account_move_line.py: -------------------------------------------------------------------------------- 1 | from odoo import api, fields, models, _ 2 | from odoo.exceptions import UserError 3 | 4 | import logging 5 | 6 | _logger = logging.getLogger(__name__) 7 | 8 | 9 | class AccountMoveLine(models.Model): 10 | _inherit = "account.move.line" 11 | 12 | contract_line_id = fields.Many2one( 13 | comodel_name="contract.line", 14 | help="Indicated which contract line that has taken the quantity from this account.move.line and added it to a new invoice", 15 | ) 16 | -------------------------------------------------------------------------------- /account_agreement/views/account_move.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | account.move.form 5 | account.move 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /agreement_contract/views/contract.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | contract_contract_form_view 6 | contract.contract 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /product_contract_deprecated/views/contract.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Contract Calendar 5 | contract.contract 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /contract_aaw/models/contract_template_line.py: -------------------------------------------------------------------------------- 1 | # Copyright 2016 Tecnativa - Pedro M. Baeza 2 | # Copyright 2018 Tecnativa - Carlos Dauden 3 | # Copyright 2018 ACSONE SA/NV 4 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 5 | 6 | from odoo import fields, models 7 | 8 | 9 | class ContractTemplateLine(models.Model): 10 | _inherit = "contract.template.line" 11 | 12 | qty_type = fields.Selection(selection_add=[ 13 | ('aaw', 'AAW'), ('fixed/percentage', 'Fixed/Percentage') 14 | ], ondelete={'aaw': 'cascade', 'fixed/percentage': 'cascade'}, fixed='percentage') 15 | 16 | -------------------------------------------------------------------------------- /contract_loan/views/contract_contract_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | contract.contract.form 5 | contract.contract 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /agreement_base_booking/wizard/agreement_contract_wizard.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import datetime 3 | 4 | from odoo import models, fields, api, _ 5 | from odoo.exceptions import UserError 6 | 7 | _logger = logging.getLogger(__name__) 8 | 9 | class AgreementContractWizard(models.TransientModel): 10 | _inherit = "agreement.contract.wizard" 11 | 12 | def _generate_contract(self, agreement, price_list): 13 | res = super()._generate_contract(agreement,price_list) 14 | if self.agreement_id.booking_resource_id: 15 | self.agreement_id.make_resource_unavailable() 16 | return res 17 | 18 | -------------------------------------------------------------------------------- /contract_edit_active_lines/models/contract_line.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields 2 | 3 | class CustomContractLine(models.Model): 4 | _inherit = "contract.line" 5 | 6 | def _compute_allowed(self): 7 | 8 | super()._compute_allowed() 9 | 10 | for rec in self: 11 | rec.update( 12 | { 13 | "is_cancel_allowed": True, 14 | } 15 | ) 16 | if rec.state == "canceled": 17 | rec.update( 18 | { 19 | "is_cancel_allowed": False, 20 | } 21 | ) -------------------------------------------------------------------------------- /contract_aaw/models/contract_template.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields, api, _ 2 | 3 | 4 | class ContractTemplate(models.Model): 5 | _inherit = 'contract.template' 6 | 7 | is_aaw = fields.Boolean(string="Is AAW") 8 | 9 | contract_payment_type = fields.Selection([ 10 | ('percentage', 'Percentage'), 11 | ('fixed', 'Fixed')], string="Contract Type", default='percentage') 12 | 13 | down_payment = fields.Float(string="Down Payment (%)") 14 | final_payment = fields.Float(string="Final Payment (%)") 15 | total_amount = fields.Float(string="Total Amount") 16 | fixed_amount = fields.Float(string="Fixed Amount") 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /contract_monthly_value/views/monthly_value.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | contract.contract list view (in contract_delivery_zone) 6 | contract.contract 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /contract_variable_quantity_analytics_account/views/account_move_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | account.move.form.analytic_account 6 | account.move 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /contract_invoicingplan/models/account_move.py: -------------------------------------------------------------------------------- 1 | import json 2 | from datetime import datetime, timedelta 3 | 4 | from babel.dates import format_datetime, format_date 5 | from odoo import models, api, _, fields 6 | from odoo.osv import expression 7 | from odoo.release import version 8 | from odoo.tools import DEFAULT_SERVER_DATE_FORMAT as DF 9 | from odoo.tools.misc import formatLang, format_date as odoo_format_date, get_lang 10 | import random 11 | 12 | import ast 13 | 14 | 15 | class AccountMove(models.Model): 16 | _inherit = "account.move" 17 | 18 | contract_stub_id = fields.Many2one('contract.invoice.stub', string="Contract Stub", copy=False) 19 | 20 | contract_id = fields.Many2one('contract.contract', string="Contract", copy=False) 21 | 22 | -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/views/contract_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Contract Calendar 5 | contract.contract 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /contract_edit_active_lines/i18n/sv.po: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * contract_edit_active_lines 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Odoo Server 18.0-20250702\n" 8 | "Report-Msgid-Bugs-To: \n" 9 | "POT-Creation-Date: 2025-07-03 11:23+0000\n" 10 | "PO-Revision-Date: 2025-07-03 13:24+0200\n" 11 | "Last-Translator: \n" 12 | "Language-Team: \n" 13 | "Language: sv_SE\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 18 | "X-Generator: Poedit 3.4.2\n" 19 | 20 | #. module: contract_edit_active_lines 21 | #: model:ir.model,name:contract_edit_active_lines.model_contract_line 22 | msgid "Contract Line" 23 | msgstr "Kontraktsrad" 24 | -------------------------------------------------------------------------------- /contract_aaw/views/contract_template_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | contract.template.form 5 | contract.template 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /contract_loan/views/contract_template_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | contract.template.form 5 | contract.template 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /contract_invoicingplan/views/account_move.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | account.move.form.view 5 | account.move 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /contract_loan/models/contract_contract.py: -------------------------------------------------------------------------------- 1 | from odoo import _, api, fields, models, Command 2 | from odoo.exceptions import ValidationError, UserError 3 | 4 | 5 | class Contract(models.Model): 6 | _inherit = "contract.contract" 7 | 8 | def _prepare_recurring_invoices_values(self, date_ref=False): 9 | invoices_values = super()._prepare_recurring_invoices_values(date_ref) 10 | 11 | for invoice_vals in invoices_values: 12 | # Apply the task-based grouping 13 | new_invoice_vals = [] 14 | for line in invoice_vals['invoice_line_ids']: 15 | if isinstance(line[2], list): 16 | for invoice_line in line[2]: 17 | new_invoice_vals.append((0, 0, invoice_line)) 18 | else: 19 | new_invoice_vals.append(line) 20 | invoice_vals['invoice_line_ids'] = new_invoice_vals 21 | 22 | return invoices_values 23 | -------------------------------------------------------------------------------- /contract_aaw/views/project_task_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | project.task.form.view 5 | project.task 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /contract_aaw/views/contract_contract_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | contract.contract.form 5 | contract.contract 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/data/contract_line_qty_formula_data.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | Hour Bank 11 | 12 | amount = contract._get_time_amount(line,context,user,period_first_date,period_last_date) 13 | time_exceding = (amount or 0.0) - line.product_id.hour_bank 14 | if time_exceding > 0.0: 15 | result = time_exceding 16 | else: 17 | result = 0 18 | time_report_lines_domain = contract._get_time_amount_domain(line) 19 | 20 | 21 | 22 | 23 | Hour Bank 24 | 0.0 25 | 1.0 26 | service 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /agreement_base_booking/wizard/agreement_open_space_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | agreement.open.space 5 | agreement.open.space 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 |
14 | Repeat on 15 |
16 |
17 |
18 | 19 |
20 |
21 |
24 |
25 |
26 |
27 |
28 |
-------------------------------------------------------------------------------- /contract_aaw/views/hr_timesheet_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | [('project_id', '=', active_id), ('task_id.is_aaw', '=', False)] 5 | 6 | 7 | 8 | AAW Timesheets 9 | account.analytic.line 10 | project-aaw-timesheets 11 | list,kanban,pivot,graph,form 12 | 13 | [('project_id', '=', active_id), ('task_id.is_aaw', '=', True)] 14 | {"default_project_id": active_id, "is_timesheet": 1, } 15 | 16 | 17 |

18 | Record a new activity 19 |

20 |

21 | Track your working hours by projects every day and invoice this time to your customers. 22 |

23 |
24 |
25 |
26 |
-------------------------------------------------------------------------------- /product_contract_deprecated/views/sale_order.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | sale.order.form 5 | sale.order 6 | 7 | 8 | 9 | (invoice_status != 'to invoice') or is_contract 10 | 11 | 12 | (invoice_status != 'no') or (state != 'sale') or is_contract 13 | 14 | 15 |
16 | 19 |
20 | 21 | 22 | 23 |
24 |
25 |
26 | -------------------------------------------------------------------------------- /contract_invoicingplan/views/account_journal_dashboard.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | account.journal.dashboard.kanban 4 | account.journal 5 | 6 | 7 | 8 |
9 | 14 |
15 | 16 | 23 | 24 |
25 |
26 |
27 |
-------------------------------------------------------------------------------- /contract_aaw/controller/main.py: -------------------------------------------------------------------------------- 1 | from odoo import http, fields 2 | from odoo.http import request 3 | from odoo.exceptions import AccessError, MissingError, UserError 4 | from odoo.addons.project.controllers.portal import ProjectCustomerPortal 5 | import logging 6 | 7 | _logger = logging.getLogger(__name__) 8 | 9 | 10 | class ProjectCustomerPortalExtended(ProjectCustomerPortal): 11 | 12 | 13 | @http.route('/my/tasks/sign/', type='http', auth='public', methods=['POST'], csrf=True) 14 | def sign_task(self, task_id, access_token=None, **kw): 15 | try: 16 | task_sudo = self._document_check_access('project.task', task_id, access_token) 17 | except (AccessError, MissingError): 18 | return request.redirect('/my') 19 | 20 | try: 21 | if task_sudo.is_aaw and request.httprequest.method == 'POST': 22 | task_sudo.is_signed = True 23 | task_sudo.message_post( 24 | body=f"You have agreed to this AAW Task.", 25 | message_type='comment', 26 | subtype_xmlid='mail.mt_comment', 27 | author_id=request.env.user.partner_id.id 28 | ) 29 | # Redirect back to task with success message 30 | return request.redirect(f'/my/tasks/{task_id}?message=signed_success') 31 | except Exception as e: 32 | _logger.error(f"Error signing task: {str(e)}") 33 | return request.redirect(f'/my/task/{task_id}?message=error') 34 | 35 | -------------------------------------------------------------------------------- /sale_contract/models/product_template.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ############################################################################## 3 | # 4 | # Copyright (C) 2015- Vertel AB (). 5 | # 6 | # This program is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU Affero General Public License as 8 | # published by the Free Software Foundation, either version 3 of the 9 | # License, or (at your option) any later version. 10 | # 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU Affero General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU Affero General Public License 17 | # along with this program. If not, see . 18 | # 19 | ############################################################################## 20 | 21 | 22 | from odoo import api, models, fields, _ 23 | from dateutil.relativedelta import relativedelta 24 | import logging 25 | 26 | _logger = logging.getLogger(__name__) 27 | 28 | 29 | class ProductTemplate(models.Model): 30 | _inherit = 'product.template' 31 | 32 | # is_contract = fields.Boolean(string='Is Contract') 33 | contract_id = fields.Many2one(comodel_name='contract.template', string='Contract Template', ) 34 | 35 | 36 | 37 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: 38 | -------------------------------------------------------------------------------- /contract_monthly_value/models/contract.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields, api 2 | 3 | 4 | class ContractContract(models.Model): 5 | _inherit = "contract.contract" 6 | 7 | @api.depends('contract_line_ids','contract_line_ids.price_subtotal','recurring_rule_type','recurring_interval' ) 8 | def _monthly_value(self): 9 | for contract in self: 10 | monthlySum=sum(contract.contract_line_ids.mapped('price_subtotal')) 11 | 12 | if contract.recurring_rule_type=='daily': 13 | contract.monthly_value = monthlySum/contract.recurring_interval*30 14 | elif contract.recurring_rule_type=='weekly': 15 | contract.monthly_value = monthlySum/contract.recurring_interval*4 16 | elif contract.recurring_rule_type=='monthly' or contract.recurring_rule_type=='monthlylastday': 17 | contract.monthly_value = monthlySum/contract.recurring_interval 18 | elif contract.recurring_rule_type=='quarterly': 19 | contract.monthly_value = monthlySum/3*contract.recurring_interval 20 | elif contract.recurring_rule_type=='semesterly': 21 | contract.monthly_value = monthlySum/6*contract.recurring_interval 22 | elif contract.recurring_rule_type=='yearly': 23 | contract.monthly_value = monthlySum/12*contract.recurring_interval 24 | else: 25 | contract.monthly_value = 0.0 26 | 27 | monthly_value=fields.Float(string='Mothly Value', compute='_monthly_value',store=True) 28 | -------------------------------------------------------------------------------- /contract_aaw/views/project_project_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | project.project.form.is_aaw 4 | project.project 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | project.project.form.is_aaw 16 | project.project 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /contract_invoicingplan/data/ir_cron.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Invoice Subs: Create Move for Invoice Subs 5 | 6 | code 7 | model._cron_action_create_move() 8 | 9 | 1 10 | days 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /cpi_table/models/consumer_price_index.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import datetime 3 | import datetime 4 | from odoo import models, fields, api, _ 5 | 6 | 7 | _logger = logging.getLogger(__name__) 8 | 9 | 10 | class ConsumerPriceIndex(models.Model): 11 | _name = "consumer.price.index" 12 | _description = "Consumer Price Index" 13 | _order = "year" 14 | _rec_name = "year" 15 | # TODO: Initialize with KPI values from table (somewhere) when installing module 16 | # TODO: Decide if KPI values from october is enough, or we need to implement KPI for other months as well 17 | # TODO: Do we need some other index than KPI, in that case: 18 | # Make several tables containing information about 'KPI' / 'MY NEW INDEX' / and so on. 19 | # Then give users posibilities to create tables, name them, and use them when calc. costs. 20 | # TODO: Stop users from creating duplicate values for year (or at least unique for months?) 21 | 22 | @api.model 23 | def _default_year(self): 24 | return datetime.now().year 25 | year = fields.Integer( 26 | string="Year", 27 | default='_default_year', 28 | ) 29 | 30 | index = fields.Float( 31 | string="Consumer Price Index", 32 | ) 33 | 34 | is_negative = fields.Boolean( 35 | string="True if index is negative", 36 | compute='_is_negative', 37 | ) 38 | 39 | @api.depends("index") 40 | def _is_negative(self): 41 | for record in self: 42 | record.is_negative = record.index < 0 if record.index is not False else True 43 | 44 | -------------------------------------------------------------------------------- /contract_variable_qty_hour_bank/models/product.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ############################################################################## 3 | # 4 | # Copyright (C) 2015- Vertel AB (). 5 | # 6 | # This program is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU Affero General Public License as 8 | # published by the Free Software Foundation, either version 3 of the 9 | # License, or (at your option) any later version. 10 | # 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU Affero General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU Affero General Public License 17 | # along with this program. If not, see . 18 | # 19 | ############################################################################## 20 | 21 | 22 | from odoo import api, models, fields, _ 23 | import logging 24 | _logger = logging.getLogger(__name__) 25 | 26 | 27 | class product_template(models.Model): 28 | _inherit = 'product.template' 29 | 30 | is_hour_bank = fields.Boolean(string='Is Hour Bank') 31 | 32 | 33 | 34 | class product_product(models.Model): 35 | _inherit = 'product.product' 36 | 37 | hour_bank = fields.Float(string='Hour Bank',help="Number of hours for each invoicing period usually month or quater") 38 | 39 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: 40 | -------------------------------------------------------------------------------- /account_agreement/models/account_move.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import datetime 3 | 4 | from odoo import models, fields, api, _ 5 | 6 | 7 | _logger = logging.getLogger(__name__) 8 | 9 | 10 | class AccountMoveAgreement(models.Model): 11 | _description = "Account Move link to Agreement" 12 | _inherit = "account.move" 13 | 14 | @api.depends("invoice_line_ids") 15 | def _calculate_related_agreement(self): 16 | agreement_id = None 17 | 18 | try: 19 | for invoice_line_id in self.invoice_line_ids: 20 | agreement = self.env["agreement"].search([('contract_id', '=', invoice_line_id.contract_line_id.contract_id.id)]) 21 | agreement_id = agreement.id 22 | break 23 | except: 24 | pass 25 | 26 | if agreement_id is None: 27 | try: 28 | for invoice_line_id in self.invoice_line_ids: 29 | agreement = self.env["agreement"].search([('property_id', '=', invoice_line_id.contract_line_id.contract_id.related_property_id.id)]) 30 | agreement_id = agreement.id 31 | break 32 | except: 33 | pass 34 | 35 | self.agreement_agreement_id = agreement_id 36 | 37 | # Would much rather have the name agreement_id 38 | # The OCA module agreement_account uses this variable in account.move 39 | # Therefore, the name of this field became agreement_agreement_id 40 | agreement_agreement_id = fields.Many2one( 41 | "agreement", 42 | string="Related agreement", 43 | compute=_calculate_related_agreement, 44 | default=None, 45 | store=True, 46 | ) 47 | 48 | 49 | -------------------------------------------------------------------------------- /cpi_table/views/consumer_price_index.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Consumer Price Index act window 5 | consumer.price.index 6 | list,form 7 | current 8 | 9 | 10 | 11 | Create new Consumer Price Index 12 | consumer.price.index 13 | 14 |
15 | 16 | 17 | 18 | 19 |
20 |
21 |
22 | 23 | 24 | Consumer Price Indexes 25 | consumer.price.index 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 42 |
43 | 44 | 45 | -------------------------------------------------------------------------------- /contract_monthly_value/static/description/notes.txt: -------------------------------------------------------------------------------- 1 | odoo-contract / contract_monthly_value 2 | 2023-09-20 3 | 4 | 5 | Be aware of these! 6 | [project]/[module]/static/description/banner.png 7 | [project]/[module]/static/description/icon.png 8 | 9 | 10 | Icon: "file-signature" 11 | Icons may be found at: https://fontawesome.com/v5/cheatsheet 12 | 13 | 14 | Odoo banner: 560 x 280 15 | Odoo icon: 140 x 140 16 | 17 | HEX 18 | #930a57 19 | #8105a7 20 | 21 | 22 | Source: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool 23 | 24 | Edit image: 25 | Ubuntu = Pinta, https://www.pinta-project.com/howto/installing-pinta 26 | Windows = Paint.net , https://www.getpaint.net/ 27 | 28 | Guide: 29 | 1. Use Inkscape to create a colored background. (Import) 30 | 2. Odoo icon: 140 x 140, 560 x 280. 31 | 3. Pick icon at fontawesome and paste in a text field. 32 | 4. Save in ordinary / plain svg format. 33 | 5. In Inkscape, choose Generate PNG image and "Export as...". 34 | 6. Write a filename... 35 | 7. Be careful when selecting the filename! It's easy to select the wrong path! 36 | 8. ...of choice and choose "Export". 37 | 38 | 39 | Do it right the first time! 40 | grep -sR "'name':" */*__.py 41 | grep -sR "'version':" */*__.py 42 | grep -sR "'category':" */*__.py 43 | grep -sR "'summary':" */*__.py 44 | grep -sR "'description':" */*__.py 45 | grep -sR "'description':" */*/*__.py -n | grep "40" 46 | grep -sR "'depends':" */*__.py 47 | grep -sR "'repository':" */*__.py 48 | grep -sR "'website':" */*__.py 49 | ls | wc -l 50 | grep -sR "'website':" */*__.py | tr "'" " " 51 | 52 | Find the latest project to copy / paste: 53 | grep -r "2023-09-*" odoo-*/*/static/description/notes.txt 54 | grep -r "2023-*" */static/description/notes.txt 55 | 56 | 57 | -------------------------------------------------------------------------------- /account_agreement/i18n/sv.po: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * account_agreement 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Odoo Server 14.0-20211214\n" 8 | "Report-Msgid-Bugs-To: \n" 9 | "POT-Creation-Date: 2022-01-25 06:44+0000\n" 10 | "PO-Revision-Date: 2022-01-25 07:45+0100\n" 11 | "Last-Translator: \n" 12 | "Language-Team: \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Plural-Forms: \n" 17 | "Language: sv_SE\n" 18 | "X-Generator: Poedit 3.0\n" 19 | 20 | #. module: account_agreement 21 | #: model:ir.model,name:account_agreement.model_account_move 22 | msgid "Account Move link to Agreement" 23 | msgstr "Koppla faktura till avtal" 24 | 25 | #. module: account_agreement 26 | #: model:ir.model.fields,field_description:account_agreement.field_account_move__display_name 27 | msgid "Display Name" 28 | msgstr "Visningsnamn" 29 | 30 | #. module: account_agreement 31 | #: model:ir.model.fields,field_description:account_agreement.field_account_move__id 32 | msgid "ID" 33 | msgstr "ID" 34 | 35 | #. module: account_agreement 36 | #: model:ir.model.fields,field_description:account_agreement.field_account_move____last_update 37 | msgid "Last Modified on" 38 | msgstr "Senast redigerad" 39 | 40 | #. module: account_agreement 41 | #: model:ir.model.fields,field_description:account_agreement.field_account_bank_statement_line__agreement_agreement_id 42 | #: model:ir.model.fields,field_description:account_agreement.field_account_move__agreement_agreement_id 43 | #: model:ir.model.fields,field_description:account_agreement.field_account_payment__agreement_agreement_id 44 | msgid "Related agreement" 45 | msgstr "Relaterat avtal" 46 | -------------------------------------------------------------------------------- /cpi_table/static/description/notes.txt: -------------------------------------------------------------------------------- 1 | odoo-contract / cpi_table 2 | 2024-08-28 3 | 4 | 5 | Be aware of these! 6 | [project]/[module]/static/description/banner.png 7 | [project]/[module]/static/description/icon.png 8 | 9 | 10 | Icon: "money" 11 | https://fontawesome.com/v4/icon/file-text-o 12 | icon_file_text.png 13 | icon_file_text_50.png 14 | icon_file_text_50_neg.png 15 | 16 | 17 | Odoo banner: 560 x 280 18 | Odoo icon: 140 x 140 19 | 20 | HEX 21 | #930a57 22 | #8105a7 23 | 24 | 25 | Source: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool 26 | 27 | Edit image: 28 | Ubuntu = Pinta, https://www.pinta-project.com/howto/installing-pinta 29 | Windows = Paint.net , https://www.getpaint.net/ 30 | 31 | Guide: 32 | 1. Use Inkscape to create a colored background. (Import) 33 | 2. Odoo icon: 140 x 140, 560 x 280. 34 | 3. Pick icon at fontawesome and paste in a text field. 35 | 4. Save in ordinary / plain svg format. 36 | 5. In Inkscape, choose Generate PNG image and "Export as...". 37 | 6. Write a filename... 38 | 7. Be careful when selecting the filename! It's easy to select the wrong path! 39 | 8. ...of choice and choose "Export". 40 | 41 | 42 | Check module: 43 | grep -sR "'name':" */*__.py 44 | grep -sR "'version':" */*__.py 45 | grep -sR "'category':" */*__.py 46 | grep -sR "'summary':" */*__.py 47 | grep -sR "'description':" */*__.py 48 | grep -sR "'description':" */*/*__.py -n | grep "40" 49 | grep -sR "'depends':" */*__.py 50 | grep -sR "'repository':" */*__.py 51 | grep -sR "'website':" */*__.py 52 | ls | wc -l 53 | grep -sR "'website':" */*__.py | tr "'" " " 54 | 55 | Find the latest project to copy / paste: 56 | grep -r "2023-06-*" odoo-*/*/static/description/notes.txt 57 | grep -r "2023-*" */static/description/notes.txt 58 | 59 | 60 | -------------------------------------------------------------------------------- /pricelist_cpi/static/description/notes.txt: -------------------------------------------------------------------------------- 1 | odoo-contract / pricelist_cip 2 | 2024-08-28 3 | 4 | 5 | Be aware of these! 6 | [project]/[module]/static/description/banner.png 7 | [project]/[module]/static/description/icon.png 8 | 9 | 10 | Icon: "money" 11 | https://fontawesome.com/v4/icon/file-text-o 12 | icon_file_text.png 13 | icon_file_text_50.png 14 | icon_file_text_50_neg.png 15 | 16 | 17 | Odoo banner: 560 x 280 18 | Odoo icon: 140 x 140 19 | 20 | HEX 21 | #930a57 22 | #8105a7 23 | 24 | 25 | Source: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool 26 | 27 | Edit image: 28 | Ubuntu = Pinta, https://www.pinta-project.com/howto/installing-pinta 29 | Windows = Paint.net , https://www.getpaint.net/ 30 | 31 | Guide: 32 | 1. Use Inkscape to create a colored background. (Import) 33 | 2. Odoo icon: 140 x 140, 560 x 280. 34 | 3. Pick icon at fontawesome and paste in a text field. 35 | 4. Save in ordinary / plain svg format. 36 | 5. In Inkscape, choose Generate PNG image and "Export as...". 37 | 6. Write a filename... 38 | 7. Be careful when selecting the filename! It's easy to select the wrong path! 39 | 8. ...of choice and choose "Export". 40 | 41 | 42 | Check module: 43 | grep -sR "'name':" */*__.py 44 | grep -sR "'version':" */*__.py 45 | grep -sR "'category':" */*__.py 46 | grep -sR "'summary':" */*__.py 47 | grep -sR "'description':" */*__.py 48 | grep -sR "'description':" */*/*__.py -n | grep "40" 49 | grep -sR "'depends':" */*__.py 50 | grep -sR "'repository':" */*__.py 51 | grep -sR "'website':" */*__.py 52 | ls | wc -l 53 | grep -sR "'website':" */*__.py | tr "'" " " 54 | 55 | Find the latest project to copy / paste: 56 | grep -r "2023-06-*" odoo-*/*/static/description/notes.txt 57 | grep -r "2023-*" */static/description/notes.txt 58 | 59 | 60 | -------------------------------------------------------------------------------- /agreement_calculate/static/description/notes.txt: -------------------------------------------------------------------------------- 1 | odoo-contract / agreement_calculate 2 | 2024-08-28 3 | 4 | 5 | Be aware of these! 6 | [project]/[module]/static/description/banner.png 7 | [project]/[module]/static/description/icon.png 8 | 9 | 10 | Icon: "money" 11 | https://fontawesome.com/v4/icon/file-text-o 12 | icon_file_text.png 13 | icon_file_text_50.png 14 | icon_file_text_50_neg.png 15 | 16 | 17 | Odoo banner: 560 x 280 18 | Odoo icon: 140 x 140 19 | 20 | HEX 21 | #930a57 22 | #8105a7 23 | 24 | 25 | Source: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool 26 | 27 | Edit image: 28 | Ubuntu = Pinta, https://www.pinta-project.com/howto/installing-pinta 29 | Windows = Paint.net , https://www.getpaint.net/ 30 | 31 | Guide: 32 | 1. Use Inkscape to create a colored background. (Import) 33 | 2. Odoo icon: 140 x 140, 560 x 280. 34 | 3. Pick icon at fontawesome and paste in a text field. 35 | 4. Save in ordinary / plain svg format. 36 | 5. In Inkscape, choose Generate PNG image and "Export as...". 37 | 6. Write a filename... 38 | 7. Be careful when selecting the filename! It's easy to select the wrong path! 39 | 8. ...of choice and choose "Export". 40 | 41 | 42 | Check module: 43 | grep -sR "'name':" */*__.py 44 | grep -sR "'version':" */*__.py 45 | grep -sR "'category':" */*__.py 46 | grep -sR "'summary':" */*__.py 47 | grep -sR "'description':" */*__.py 48 | grep -sR "'description':" */*/*__.py -n | grep "40" 49 | grep -sR "'depends':" */*__.py 50 | grep -sR "'repository':" */*__.py 51 | grep -sR "'website':" */*__.py 52 | ls | wc -l 53 | grep -sR "'website':" */*__.py | tr "'" " " 54 | 55 | Find the latest project to copy / paste: 56 | grep -r "2023-06-*" odoo-*/*/static/description/notes.txt 57 | grep -r "2023-*" */static/description/notes.txt 58 | 59 | 60 | -------------------------------------------------------------------------------- /agreement_contract/static/description/notes.txt: -------------------------------------------------------------------------------- 1 | odoo-contract / agreement_contract 2 | 2024-08-28 3 | 4 | 5 | Be aware of these! 6 | [project]/[module]/static/description/banner.png 7 | [project]/[module]/static/description/icon.png 8 | 9 | 10 | Icon: "money" 11 | https://fontawesome.com/v4/icon/file-text-o 12 | icon_file_text.png 13 | icon_file_text_50.png 14 | icon_file_text_50_neg.png 15 | 16 | 17 | Odoo banner: 560 x 280 18 | Odoo icon: 140 x 140 19 | 20 | HEX 21 | #930a57 22 | #8105a7 23 | 24 | 25 | Source: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool 26 | 27 | Edit image: 28 | Ubuntu = Pinta, https://www.pinta-project.com/howto/installing-pinta 29 | Windows = Paint.net , https://www.getpaint.net/ 30 | 31 | Guide: 32 | 1. Use Inkscape to create a colored background. (Import) 33 | 2. Odoo icon: 140 x 140, 560 x 280. 34 | 3. Pick icon at fontawesome and paste in a text field. 35 | 4. Save in ordinary / plain svg format. 36 | 5. In Inkscape, choose Generate PNG image and "Export as...". 37 | 6. Write a filename... 38 | 7. Be careful when selecting the filename! It's easy to select the wrong path! 39 | 8. ...of choice and choose "Export". 40 | 41 | 42 | Check module: 43 | grep -sR "'name':" */*__.py 44 | grep -sR "'version':" */*__.py 45 | grep -sR "'category':" */*__.py 46 | grep -sR "'summary':" */*__.py 47 | grep -sR "'description':" */*__.py 48 | grep -sR "'description':" */*/*__.py -n | grep "40" 49 | grep -sR "'depends':" */*__.py 50 | grep -sR "'repository':" */*__.py 51 | grep -sR "'website':" */*__.py 52 | ls | wc -l 53 | grep -sR "'website':" */*__.py | tr "'" " " 54 | 55 | Find the latest project to copy / paste: 56 | grep -r "2023-06-*" odoo-*/*/static/description/notes.txt 57 | grep -r "2023-*" */static/description/notes.txt 58 | 59 | 60 | -------------------------------------------------------------------------------- /agreement_property/static/description/notes.txt: -------------------------------------------------------------------------------- 1 | odoo-contract / agreement_property 2 | 2024-08-28 3 | 4 | 5 | Be aware of these! 6 | [project]/[module]/static/description/banner.png 7 | [project]/[module]/static/description/icon.png 8 | 9 | 10 | Icon: "money" 11 | https://fontawesome.com/v4/icon/file-text-o 12 | icon_file_text.png 13 | icon_file_text_50.png 14 | icon_file_text_50_neg.png 15 | 16 | 17 | Odoo banner: 560 x 280 18 | Odoo icon: 140 x 140 19 | 20 | HEX 21 | #930a57 22 | #8105a7 23 | 24 | 25 | Source: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool 26 | 27 | Edit image: 28 | Ubuntu = Pinta, https://www.pinta-project.com/howto/installing-pinta 29 | Windows = Paint.net , https://www.getpaint.net/ 30 | 31 | Guide: 32 | 1. Use Inkscape to create a colored background. (Import) 33 | 2. Odoo icon: 140 x 140, 560 x 280. 34 | 3. Pick icon at fontawesome and paste in a text field. 35 | 4. Save in ordinary / plain svg format. 36 | 5. In Inkscape, choose Generate PNG image and "Export as...". 37 | 6. Write a filename... 38 | 7. Be careful when selecting the filename! It's easy to select the wrong path! 39 | 8. ...of choice and choose "Export". 40 | 41 | 42 | Check module: 43 | grep -sR "'name':" */*__.py 44 | grep -sR "'version':" */*__.py 45 | grep -sR "'category':" */*__.py 46 | grep -sR "'summary':" */*__.py 47 | grep -sR "'description':" */*__.py 48 | grep -sR "'description':" */*/*__.py -n | grep "40" 49 | grep -sR "'depends':" */*__.py 50 | grep -sR "'repository':" */*__.py 51 | grep -sR "'website':" */*__.py 52 | ls | wc -l 53 | grep -sR "'website':" */*__.py | tr "'" " " 54 | 55 | Find the latest project to copy / paste: 56 | grep -r "2023-06-*" odoo-*/*/static/description/notes.txt 57 | grep -r "2023-*" */static/description/notes.txt 58 | 59 | 60 | -------------------------------------------------------------------------------- /product_contract_deprecated/models/product.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ############################################################################## 3 | # 4 | # Copyright (C) 2015- Vertel AB (). 5 | # 6 | # This program is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU Affero General Public License as 8 | # published by the Free Software Foundation, either version 3 of the 9 | # License, or (at your option) any later version. 10 | # 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU Affero General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU Affero General Public License 17 | # along with this program. If not, see . 18 | # 19 | ############################################################################## 20 | 21 | 22 | from odoo import api, models, fields, _ 23 | from dateutil.relativedelta import relativedelta 24 | import logging 25 | 26 | _logger = logging.getLogger(__name__) 27 | 28 | 29 | class ProductTemplate(models.Model): 30 | _inherit = 'product.template' 31 | 32 | is_contract = fields.Boolean(string='Is Contract') 33 | contract_id = fields.Many2one(comodel_name='contract.template', string='Contract Template', ) 34 | 35 | 36 | class SaleOrderLine(models.Model): 37 | _inherit = 'sale.order.line' 38 | 39 | contract_id = fields.Many2one( 40 | comodel_name='contract.contract', string='Contract', domain=[('type', '=', 'contract')] 41 | ) 42 | 43 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: 44 | -------------------------------------------------------------------------------- /agreement_base_booking/static/description/notes.txt: -------------------------------------------------------------------------------- 1 | odoo-contract / agreement_property 2 | 2024-08-28 3 | 4 | 5 | Be aware of these! 6 | [project]/[module]/static/description/banner.png 7 | [project]/[module]/static/description/icon.png 8 | 9 | 10 | Icon: "money" 11 | https://fontawesome.com/v4/icon/file-text-o 12 | icon_file_text.png 13 | icon_file_text_50.png 14 | icon_file_text_50_neg.png 15 | 16 | 17 | Odoo banner: 560 x 280 18 | Odoo icon: 140 x 140 19 | 20 | HEX 21 | #930a57 22 | #8105a7 23 | 24 | 25 | Source: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool 26 | 27 | Edit image: 28 | Ubuntu = Pinta, https://www.pinta-project.com/howto/installing-pinta 29 | Windows = Paint.net , https://www.getpaint.net/ 30 | 31 | Guide: 32 | 1. Use Inkscape to create a colored background. (Import) 33 | 2. Odoo icon: 140 x 140, 560 x 280. 34 | 3. Pick icon at fontawesome and paste in a text field. 35 | 4. Save in ordinary / plain svg format. 36 | 5. In Inkscape, choose Generate PNG image and "Export as...". 37 | 6. Write a filename... 38 | 7. Be careful when selecting the filename! It's easy to select the wrong path! 39 | 8. ...of choice and choose "Export". 40 | 41 | 42 | Check module: 43 | grep -sR "'name':" */*__.py 44 | grep -sR "'version':" */*__.py 45 | grep -sR "'category':" */*__.py 46 | grep -sR "'summary':" */*__.py 47 | grep -sR "'description':" */*__.py 48 | grep -sR "'description':" */*/*__.py -n | grep "40" 49 | grep -sR "'depends':" */*__.py 50 | grep -sR "'repository':" */*__.py 51 | grep -sR "'website':" */*__.py 52 | ls | wc -l 53 | grep -sR "'website':" */*__.py | tr "'" " " 54 | 55 | Find the latest project to copy / paste: 56 | grep -r "2023-06-*" odoo-*/*/static/description/notes.txt 57 | grep -r "2023-*" */static/description/notes.txt 58 | 59 | 60 | -------------------------------------------------------------------------------- /sale_contract/views/sale_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | sale.order.form 5 | sale.order 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | (invoice_status != 'to invoice') or is_contract 20 | 21 | 22 | (invoice_status != 'no') or (state != 'sale') or is_contract 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /agreement_property/views/agreement.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Agreement Form 5 | agreement 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | Agreement Property Pivot View 18 | agreement 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | property.property.form 31 | property.property 32 | 33 | 34 | 35 | 12 | 13 | 14 | 15 | 16 | 17 | calendar.event.calendar.month.mode 18 | calendar.event 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /product_contract_deprecated/models/contract.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import logging 3 | 4 | from dateutil.relativedelta import relativedelta 5 | 6 | from odoo import models, fields, api, _ 7 | 8 | _logger = logging.getLogger(__name__) 9 | 10 | 11 | class Contract(models.Model): 12 | _inherit = "contract.contract" 13 | 14 | #@api.depends("sale_order_line_id", "sale_order_line_id.task_id", "sale_order_line_id.project_id") 15 | #def compute_project_id(self): 16 | # _logger.warning("compute_project_id" * 100) 17 | # for rec in self: 18 | # _logger.warning(f"{rec=} {rec.sale_order_line_id.task_id=} {rec.sale_order_line_id.project_id=}") 19 | # if rec.sale_order_line_id.task_id: 20 | # rec.project_id = rec.sale_order_line_id.task_id.project_id 21 | # else: 22 | # rec.project_id = rec.sale_order_line_id.project_id 23 | 24 | sale_id = fields.Many2one(comodel_name='sale.order') 25 | sale_order_line_id = fields.Many2one(comodel_name='sale.order.line') 26 | #project_id = fields.Many2one(comodel_name="project.project", compute='compute_project_id', store=True) 27 | 28 | def get_first_invoice_date(self): 29 | """Return the date of the first invoice""" 30 | today = fields.Date.from_string(fields.Date.today()) 31 | time = fields.Date.from_string(self.recurring_next_date) 32 | if self.recurring_rule_type == 'daily': 33 | deltaT = relativedelta(days=self.recurring_interval) 34 | elif self.recurring_rule_type == 'weekly': 35 | deltaT = relativedelta(weeks=self.recurring_interval) 36 | elif self.recurring_rule_type == 'monthly': 37 | deltaT = relativedelta(months=self.recurring_interval) 38 | elif self.recurring_rule_type == 'yearly': 39 | deltaT = relativedelta(years=self.recurring_interval) 40 | while time < today: 41 | time += deltaT 42 | 43 | # First invoice is generated by the product, so skip to the second invoice here 44 | time += deltaT 45 | 46 | return fields.Date.to_string(time) 47 | -------------------------------------------------------------------------------- /agreement_calculate/views/agreement.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Agreement Form 5 | agreement 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | Agreement List 21 | agreement 22 | 23 | 24 | 25 | expiry_date 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | pivot 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /contract_aaw/__manifest__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ############################################################################## 3 | # 4 | # Odoo SA, Open Source Management Solution, third party addon 5 | # Copyright (C) 2024- Vertel AB (). 6 | # 7 | # This program is free software: you can redistribute it and/or modify 8 | # it under the terms of the GNU Affero General Public License as 9 | # published by the Free Software Foundation, either version 3 of the 10 | # License, or (at your option) any later version. 11 | # 12 | # This program is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU Affero General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU Affero General Public License 18 | # along with this program. If not, see . 19 | # 20 | ############################################################################## 21 | 22 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 23 | 24 | { 25 | 'name': 'Contract: Invoice Alter and Additional Work Tasks', 26 | 'version': '1.0', 27 | 'summary': 'Invoice Alter and Additional Work , AAW', 28 | 'description': """ 29 | Invoice AAW Tasks. 30 | """, 31 | 'category': 'Sales', 32 | 'author': 'Vertel AB', 33 | 'website': 'https://vertel.se/apps/odoo-contract/contract_aaw', 34 | 'images': ['static/description/banner.png'], # 560x280 px. 35 | 'license': 'AGPL-3', 36 | 'maintainer': 'Vertel AB', 37 | "application": False, 38 | "auto-install": False, 39 | "installable": True, 40 | 'depends': [ 41 | 'project', 'account', 'contract_variable_quantity', 'contract_invoicingplan', 'hr_timesheet', 42 | 'hr', 'sale_timesheet', 'project_task_stock', 'sale', 'sign_project_task' 43 | ], 44 | "data": [ 45 | 'views/contract_contract_view.xml', 46 | 'views/contract_template_view.xml', 47 | 'views/project_portal_project_task_templates.xml', 48 | 'views/project_task_view.xml', 49 | 'views/project_project_view.xml', 50 | 'views/hr_timesheet_views.xml', 51 | ], 52 | } 53 | -------------------------------------------------------------------------------- /sale_contract/__manifest__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ############################################################################## 3 | # 4 | # Odoo SA, Open Source Management Solution, third party addon 5 | # Copyright (C) 2022- Vertel AB (). 6 | # 7 | # This program is free software: you can redistribute it and/or modify 8 | # it under the terms of the GNU Affero General Public License as 9 | # published by the Free Software Foundation, either version 3 of the 10 | # License, or (at your option) any later version. 11 | # 12 | # This program is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU Affero General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU Affero General Public License 18 | # along with this program. If not, see . 19 | # 20 | ############################################################################## 21 | 22 | { 23 | 'name': 'Contract: Sale Contract', 24 | 'version': '1.1', 25 | # Version ledger: 14.0 = Odoo version. 1 = Major. Non regressionable code. 2 = Minor. New features that are regressionable. 3 = Bug fixes 26 | 'summary': 'Manage your contract.', 27 | # Categories can be used to filter modules in modules listing 28 | # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml 29 | # for the full list 30 | 'category': 'Sales', 31 | 'description': """ 32 | Manage your contract. 33 | """, 34 | #'sequence': '1', 35 | 'author': 'Vertel AB', 36 | 'website': 'https://vertel.se/apps/odoo-contract/sale_contract', 37 | 'images': ['static/description/banner.png'], # 560x280 px. 38 | 'license': 'AGPL-3', 39 | 'contributor': '', 40 | 'maintainer': 'Vertel AB', 41 | 'repository': 'https://github.com/vertelab/odoo-contract', 42 | # Any module necessary for this one to work correctly 43 | 'depends': ['contract', 'sale', 'sale_project', 'product'], 44 | 'data': [ 45 | "views/sale_view.xml", 46 | "views/contract_view.xml", 47 | "views/product_view.xml", 48 | ], 49 | 'installable': True, 50 | } 51 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: 52 | -------------------------------------------------------------------------------- /agreement_contract/wizard/agreement_contract_wizard_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | link.to.contract.view 5 | agreement.contract.wizard 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 |
31 |
32 |
33 |
34 | 35 | 36 | open.link.to.contract.wizard 37 | agreement.contract.wizard 38 | form 39 | new 40 | 41 | 42 | 43 |
44 | -------------------------------------------------------------------------------- /contract_recurring_event/__manifest__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ############################################################################## 3 | # 4 | # Odoo SA, Open Source Management Solution, third party addon 5 | # Copyright (C) 2022- Vertel AB (). 6 | # 7 | # This program is free software: you can redistribute it and/or modify 8 | # it under the terms of the GNU Affero General Public License as 9 | # published by the Free Software Foundation, either version 3 of the 10 | # License, or (at your option) any later version. 11 | # 12 | # This program is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU Affero General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU Affero General Public License 18 | # along with this program. If not, see . 19 | # 20 | ############################################################################## 21 | 22 | { 23 | 'name': 'Contract: Contract Recurring Event', 24 | 'version': '1.1', 25 | # Version ledger: 14.0 = Odoo version. 1 = Major. Non regressionable code. 2 = Minor. New features that are regressionable. 3 = Bug fixes 26 | 'summary': 'Manage your Contract Recurring Event', 27 | # Categories can be used to filter modules in modules listing 28 | # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml 29 | # for the full list 30 | 'category': 'Calendar', 31 | 'description': """ 32 | Manage your Contract Recurring Event. 33 | """, 34 | #'sequence': '1', 35 | 'author': 'Vertel AB', 36 | 'website': 'https://vertel.se/apps/odoo-contract/contract_recurring_event', 37 | 'images': ['static/description/banner.png'], # 560x280 px. 38 | 'license': 'AGPL-3', 39 | 'contributor': '', 40 | 'maintainer': 'Vertel AB', 41 | 'repository': 'https://github.com/vertelab/odoo-contract', 42 | # Any module necessary for this one to work correctly 43 | 'depends': ['contract', 'sale', 'calendar', 'contract_termination'], 44 | 'data': [ 45 | "views/contract_view.xml", 46 | "views/calendar_view.xml", 47 | ], 48 | 'installable': True, 49 | } 50 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: 51 | -------------------------------------------------------------------------------- /contract_edit_active_lines/__manifest__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ############################################################################## 3 | # 4 | # Odoo SA, Open Source Management Solution, third party addon 5 | # Copyright (C) 2022- Vertel AB (). 6 | # 7 | # This program is free software: you can redistribute it and/or modify 8 | # it under the terms of the GNU Affero General Public License as 9 | # published by the Free Software Foundation, either version 3 of the 10 | # License, or (at your option) any later version. 11 | # 12 | # This program is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU Affero General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU Affero General Public License 18 | # along with this program. If not, see . 19 | # 20 | ############################################################################## 21 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). 22 | 23 | { 24 | 'name': 'Contract: Allow Lines Edit', 25 | 'version': '1.0', 26 | # Version ledger: 14.0 = Odoo version. 1 = Major. Non regressionable code. 2 = Minor. New features that are regressionable. 3 = Bug fixes 27 | 'summary': 'This module will let us show the cancel button on active contract.lines and removes the user error that prevents us from cancelling an active line.', 28 | # Categories can be used to filter modules in modules listing 29 | # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml 30 | # for the full list 31 | 'category': 'Sales', 32 | #'sequence': '1', 33 | 'author': 'Vertel AB', 34 | 'website': 'https://vertel.se/apps/odoo-contract/contract_edit_active_lines', 35 | 'images': ['static/description/banner.png'], # 560x280 px. 36 | 'license': 'AGPL-3', 37 | 'contributor': '', 38 | 'maintainer': 'Vertel AB', 39 | 'repository': 'https://github.com/vertelab/odoo-contract', 40 | # Any module necessary for this one to work correctly 41 | "application": False, 42 | "auto-install": False, 43 | "installable": True, 44 | 'depends': ['contract',], 45 | "data": [], 46 | } 47 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: 48 | -------------------------------------------------------------------------------- /agreement_base_booking/views/agreement.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Agreement Form 5 | agreement 6 | 7 | 8 | 9 | 10 | 11 | 12 |