├── 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 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/contract_monthly_value/i18n/sv.po:
--------------------------------------------------------------------------------
1 | # Translation of Odoo Server.
2 | # This file contains the translation of the following modules:
3 | # * contract_monthly_value
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:30+0000\n"
10 | "PO-Revision-Date: 2025-07-03 13:31+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_monthly_value
21 | #: model:ir.model,name:contract_monthly_value.model_contract_contract
22 | msgid "Contract"
23 | msgstr "Kontrakt"
24 |
25 | #. module: contract_monthly_value
26 | #: model:ir.model.fields,field_description:contract_monthly_value.field_contract_contract__monthly_value
27 | msgid "Mothly Value"
28 | msgstr "Månadsvärde"
29 |
--------------------------------------------------------------------------------
/pricelist_cpi/models/product_pricelist.py:
--------------------------------------------------------------------------------
1 | import logging
2 | import datetime
3 | from odoo import models, fields, api, _
4 |
5 | _logger = logging.getLogger(__name__)
6 |
7 | class PricelistConsumerPriceIndexItem(models.Model):
8 | _inherit = "product.pricelist.item"
9 | _description = "Consumer Price Indexi Item"
10 |
11 | #TODO: If we want to pick what table we want to associate, do that.
12 |
13 | compute_price = fields.Selection(
14 | selection_add=[('by_index', 'By Index')],
15 | ondelete={'by_index': 'set default'},
16 | help="Use the discount rules and activate the discount settings" \
17 | " in order to show discount to customer.",
18 | index=True,
19 | default='fixed',
20 | required=True)
21 |
22 | def _get_year_index(self, year):
23 | try:
24 | return self.env["consumer.price.index"].search([('year', '=', year)]).index
25 | except BaseException as e:
26 | _logger.warning(e)
27 | return 0
28 |
29 |
--------------------------------------------------------------------------------
/sale_contract/static/description/notes.txt:
--------------------------------------------------------------------------------
1 | odoo-contract / sale_contract
2 | 2022-11-03
3 |
4 | Be aware of these!
5 | [project]/[module]/static/description/banner.png
6 | [project]/[module]/static/description/icon.png
7 |
8 |
9 | Icons may be found at: https://fontawesome.com/v5/cheatsheet
10 |
11 | Icon: "file-signature"
12 | Odoo banner: 560 x 280
13 | Odoo icon: 140 x 140
14 |
15 | HEX
16 | #930a57
17 |
18 | #8105a7
19 |
20 |
21 | Source: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool
22 |
23 | Edit image:
24 | Ubuntu = Pinta, https://www.pinta-project.com/howto/installing-pinta
25 | Windows = Paint.net , https://www.getpaint.net/
26 |
27 | Guide:
28 | 1. Use Inkscape to create a colored background. (Import)
29 | 2. Odoo icon: 140 x 140, 560 x 280.
30 | 3. Pick icon at fontawesome and paste in a text field.
31 | 4. Save in ordinary / plain svg format.
32 | 5. In Inkscape, choose Generate PNG image and "Export as...".
33 | 6. Write a filename...
34 | 7. Be careful when selecting the filename! It's easy to select the wrong path!
35 | 8. ...of choice and choose "Export".
36 |
--------------------------------------------------------------------------------
/contract_recurring_event/models/calendar.py:
--------------------------------------------------------------------------------
1 | from odoo import models, fields, api, _
2 |
3 |
4 | class Calendar(models.Model):
5 | _inherit = "calendar.event"
6 |
7 | @api.depends("contract_id")
8 | def _compute_contract_count(self):
9 | for rec in self:
10 | if rec.contract_id:
11 | rec.contract_count = len(rec.contract_id)
12 | else:
13 | rec.contract_count = 0
14 |
15 | contract_id = fields.Many2one("contract.contract", string="Contract")
16 | contract_count = fields.Integer(string="Contract Count", compute=_compute_contract_count)
17 |
18 | def action_view_contract(self):
19 | self.ensure_one()
20 | ctx = dict(self.env.context)
21 |
22 | action = {
23 | "type": "ir.actions.act_window",
24 | "name": "Contract",
25 | "res_model": "contract.contract",
26 | "view_mode": "form",
27 | "domain": [("id", "in", self.contract_id.id)],
28 | "res_id": self.contract_id.id,
29 | "context": ctx,
30 | }
31 | return action
--------------------------------------------------------------------------------
/account_agreement/static/description/notes.txt:
--------------------------------------------------------------------------------
1 | odoo-contract / account_agreement
2 | 2022-11-01
3 |
4 | Be aware of these!
5 | [project]/[module]/static/description/banner.png
6 | [project]/[module]/static/description/icon.png
7 |
8 |
9 | Icons may be found at: https://fontawesome.com/v5/cheatsheet
10 |
11 | Icon: "file-signature"
12 | Odoo banner: 560 x 280
13 | Odoo icon: 140 x 140
14 |
15 | HEX
16 | #930a57
17 |
18 | #8105a7
19 |
20 |
21 | Source: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool
22 |
23 | Edit image:
24 | Ubuntu = Pinta, https://www.pinta-project.com/howto/installing-pinta
25 | Windows = Paint.net , https://www.getpaint.net/
26 |
27 | Guide:
28 | 1. Use Inkscape to create a colored background. (Import)
29 | 2. Odoo icon: 140 x 140, 560 x 280.
30 | 3. Pick icon at fontawesome and paste in a text field.
31 | 4. Save in ordinary / plain svg format.
32 | 5. In Inkscape, choose Generate PNG image and "Export as...".
33 | 6. Write a filename...
34 | 7. Be careful when selecting the filename! It's easy to select the wrong path!
35 | 8. ...of choice and choose "Export".
36 |
--------------------------------------------------------------------------------
/contract_edit_active_lines/static/description/notes.txt:
--------------------------------------------------------------------------------
1 | odoo-contract / contract_cleaner
2 | 2023-01-24
3 |
4 | Be aware of these!
5 | [project]/[module]/static/description/banner.png
6 | [project]/[module]/static/description/icon.png
7 |
8 |
9 | Icons may be found at: https://fontawesome.com/v5/cheatsheet
10 |
11 | Icon: "file-signature"
12 | Odoo banner: 560 x 280
13 | Odoo icon: 140 x 140
14 |
15 | HEX
16 | #930a57
17 |
18 | #8105a7
19 |
20 |
21 | Source: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool
22 |
23 | Edit image:
24 | Ubuntu = Pinta, https://www.pinta-project.com/howto/installing-pinta
25 | Windows = Paint.net , https://www.getpaint.net/
26 |
27 | Guide:
28 | 1. Use Inkscape to create a colored background. (Import)
29 | 2. Odoo icon: 140 x 140, 560 x 280.
30 | 3. Pick icon at fontawesome and paste in a text field.
31 | 4. Save in ordinary / plain svg format.
32 | 5. In Inkscape, choose Generate PNG image and "Export as...".
33 | 6. Write a filename...
34 | 7. Be careful when selecting the filename! It's easy to select the wrong path!
35 | 8. ...of choice and choose "Export".
36 |
--------------------------------------------------------------------------------
/product_contract_deprecated/static/description/notes.txt:
--------------------------------------------------------------------------------
1 | odoo-contract / product_contract
2 | 2022-11-03
3 |
4 | Be aware of these!
5 | [project]/[module]/static/description/banner.png
6 | [project]/[module]/static/description/icon.png
7 |
8 |
9 | Icons may be found at: https://fontawesome.com/v5/cheatsheet
10 |
11 | Icon: "file-signature"
12 | Odoo banner: 560 x 280
13 | Odoo icon: 140 x 140
14 |
15 | HEX
16 | #930a57
17 |
18 | #8105a7
19 |
20 |
21 | Source: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool
22 |
23 | Edit image:
24 | Ubuntu = Pinta, https://www.pinta-project.com/howto/installing-pinta
25 | Windows = Paint.net , https://www.getpaint.net/
26 |
27 | Guide:
28 | 1. Use Inkscape to create a colored background. (Import)
29 | 2. Odoo icon: 140 x 140, 560 x 280.
30 | 3. Pick icon at fontawesome and paste in a text field.
31 | 4. Save in ordinary / plain svg format.
32 | 5. In Inkscape, choose Generate PNG image and "Export as...".
33 | 6. Write a filename...
34 | 7. Be careful when selecting the filename! It's easy to select the wrong path!
35 | 8. ...of choice and choose "Export".
36 |
--------------------------------------------------------------------------------
/contract_variable_quantity_analytics_account/models/contract_line.py:
--------------------------------------------------------------------------------
1 | from odoo import api, fields, models, _
2 | from odoo.exceptions import UserError
3 |
4 | import datetime
5 | from datetime import date, datetime
6 |
7 | import logging
8 |
9 | _logger = logging.getLogger(__name__)
10 |
11 | class ContractLine(models.Model):
12 | _inherit = "contract.line"
13 |
14 | def _contract_variable_quantity_analytics_account_method(self):
15 | product_quantity = 0
16 | if self.id:
17 | amls = self.env['account.move.line'].search([
18 | ('move_id.move_type', '=', 'in_invoice'),
19 | ('move_id.state','=','posted'),
20 | ('product_id.id','=',self.product_id.id),
21 | ('analytic_account_id.id','=',self.analytic_account_id.id),
22 | ('contract_line_id','=', None)])
23 | for aml in amls:
24 | if aml.move_id.invoice_date <= self.next_period_date_end:
25 | product_quantity += aml.quantity
26 | aml.contract_line_id = self.id
27 | return (product_quantity)
28 |
--------------------------------------------------------------------------------
/contract_variable_quantity_analytics_account/static/description/notes.txt:
--------------------------------------------------------------------------------
1 | odoo-contract / contract_attendee
2 | 2023-02-21
3 |
4 | Be aware of these!
5 | [project]/[module]/static/description/banner.png
6 | [project]/[module]/static/description/icon.png
7 |
8 |
9 | Icon: "file-signature"
10 | Icons may be found at: https://fontawesome.com/v5/cheatsheet
11 |
12 | Odoo banner: 560 x 280
13 | Odoo icon: 140 x 140
14 |
15 | HEX
16 | #930a57
17 |
18 | #8105a7
19 |
20 |
21 | Source: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool
22 |
23 | Edit image:
24 | Ubuntu = Pinta, https://www.pinta-project.com/howto/installing-pinta
25 | Windows = Paint.net , https://www.getpaint.net/
26 |
27 | Guide:
28 | 1. Use Inkscape to create a colored background. (Import)
29 | 2. Odoo icon: 140 x 140, 560 x 280.
30 | 3. Pick icon at fontawesome and paste in a text field.
31 | 4. Save in ordinary / plain svg format.
32 | 5. In Inkscape, choose Generate PNG image and "Export as...".
33 | 6. Write a filename...
34 | 7. Be careful when selecting the filename! It's easy to select the wrong path!
35 | 8. ...of choice and choose "Export".
36 |
--------------------------------------------------------------------------------
/contract_variable_qty_hour_bank/static/description/notes.txt:
--------------------------------------------------------------------------------
1 | odoo-contract / contract_variable_qty_hour_bank
2 | 2022-11-03
3 |
4 | Be aware of these!
5 | [project]/[module]/static/description/banner.png
6 | [project]/[module]/static/description/icon.png
7 |
8 |
9 | Icons may be found at: https://fontawesome.com/v5/cheatsheet
10 |
11 | Icon: "file-signature"
12 | Odoo banner: 560 x 280
13 | Odoo icon: 140 x 140
14 |
15 | HEX
16 | #930a57
17 |
18 | #8105a7
19 |
20 |
21 | Source: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool
22 |
23 | Edit image:
24 | Ubuntu = Pinta, https://www.pinta-project.com/howto/installing-pinta
25 | Windows = Paint.net , https://www.getpaint.net/
26 |
27 | Guide:
28 | 1. Use Inkscape to create a colored background. (Import)
29 | 2. Odoo icon: 140 x 140, 560 x 280.
30 | 3. Pick icon at fontawesome and paste in a text field.
31 | 4. Save in ordinary / plain svg format.
32 | 5. In Inkscape, choose Generate PNG image and "Export as...".
33 | 6. Write a filename...
34 | 7. Be careful when selecting the filename! It's easy to select the wrong path!
35 | 8. ...of choice and choose "Export".
36 |
--------------------------------------------------------------------------------
/sale_contract/views/contract_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | contract.contract.form
5 | contract.contract
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
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 |
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 |
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 |
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 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/contract_loan/__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: Loan',
26 | 'version': '1.0',
27 | 'summary': 'Contract Loan',
28 | 'description': """
29 | Contract Loan.
30 | """,
31 | 'category': 'Sales',
32 | 'author': 'Vertel AB',
33 | 'website': 'https://vertel.se/apps/odoo-contract/contract_loan',
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 | 'account',
42 | 'contract_invoicingplan',
43 | 'account_loan',
44 | ],
45 | "data": [
46 | 'views/contract_contract_view.xml',
47 | #'views/contract_template_view.xml',
48 | ],
49 | }
50 |
--------------------------------------------------------------------------------
/agreement_property/i18n/sv.po:
--------------------------------------------------------------------------------
1 | # Translation of Odoo Server.
2 | # This file contains the translation of the following modules:
3 | # * agreement_property
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:46+0000\n"
10 | "PO-Revision-Date: 2022-01-25 07:47+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\n"
18 | "X-Generator: Poedit 3.0\n"
19 |
20 | #. module: agreement_property
21 | #: model:ir.model,name:agreement_property.model_agreement
22 | msgid "Agreement Property"
23 | msgstr "Relaterad fastighet"
24 |
25 | #. module: agreement_property
26 | #: model_terms:ir.ui.view,arch_db:agreement_property.agreement_property_pivot_view
27 | msgid "Agreements"
28 | msgstr "Avtal"
29 |
30 | #. module: agreement_property
31 | #: model:ir.model.fields,field_description:agreement_property.field_agreement__display_name
32 | msgid "Display Name"
33 | msgstr "Visningsnamn"
34 |
35 | #. module: agreement_property
36 | #: model:ir.model.fields,field_description:agreement_property.field_agreement__employees
37 | msgid "Employees"
38 | msgstr "Anställda"
39 |
40 | #. module: agreement_property
41 | #: model:ir.model.fields,field_description:agreement_property.field_agreement__id
42 | msgid "ID"
43 | msgstr "ID"
44 |
45 | #. module: agreement_property
46 | #: model:ir.model.fields,field_description:agreement_property.field_agreement____last_update
47 | msgid "Last Modified on"
48 | msgstr "Senast ändrad den"
49 |
50 | #. module: agreement_property
51 | #: model:ir.model.fields,field_description:agreement_property.field_agreement__municipality_id
52 | msgid "Municipality"
53 | msgstr "Kommun"
54 |
55 | #. module: agreement_property
56 | #: model:ir.model.fields,field_description:agreement_property.field_agreement__property_id
57 | msgid "Property"
58 | msgstr "Fastighet"
59 |
--------------------------------------------------------------------------------
/contract_variable_quantity_analytics_account/i18n/sv.po:
--------------------------------------------------------------------------------
1 | # Translation of Odoo Server.
2 | # This file contains the translation of the following modules:
3 | # * contract_variable_quantity_analytics_account
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:44+0000\n"
10 | "PO-Revision-Date: 2025-07-03 13:48+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_variable_quantity_analytics_account
21 | #: model:ir.model,name:contract_variable_quantity_analytics_account.model_contract_line
22 | #: model:ir.model.fields,field_description:contract_variable_quantity_analytics_account.field_account_move_line__contract_line_id
23 | msgid "Contract Line"
24 | msgstr "Verifikatsrad"
25 |
26 | #. module: contract_variable_quantity_analytics_account
27 | #: model:ir.model.fields,help:contract_variable_quantity_analytics_account.field_account_move_line__contract_line_id
28 | msgid ""
29 | "Indicated which contract line that has taken the quantity from this "
30 | "account.move.line and added it to a new invoice"
31 | msgstr ""
32 | "Angav vilken kontraktsrad som har tagit kvantiteten från denna "
33 | "account.move.line och lagt till den på en ny faktura"
34 |
35 | #. module: contract_variable_quantity_analytics_account
36 | #: model:ir.model,name:contract_variable_quantity_analytics_account.model_account_move_line
37 | msgid "Journal Item"
38 | msgstr "Journalpost"
39 |
40 | #. module: contract_variable_quantity_analytics_account
41 | #: model:contract.line.qty.formula,name:contract_variable_quantity_analytics_account.contract_line_qty_formula_analytic_account
42 | msgid "Product Quantity by Analytic Account of posted In_Invoices"
43 | msgstr "Produktkvantitet per analytiskt konto för bokförda infakturor"
44 |
--------------------------------------------------------------------------------
/contract_invoicingplan/__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 recurring values in a plan',
26 | 'version': '1.0',
27 | 'summary': 'Contract invoicing plan',
28 | 'description': """
29 | Create plan using stubbs for invoicing.
30 | """,
31 | 'category': 'Sales',
32 | 'author': 'Vertel AB',
33 | 'website': 'https://vertel.se/apps/odoo-contract/contract_invoicingplan',
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': ['contract', 'account'],
41 | "data": [
42 | 'security/ir.model.access.csv',
43 | 'views/contract_view.xml',
44 | 'views/account_move.xml',
45 | 'views/contract_invoice_sub_view.xml',
46 | 'views/account_journal_dashboard.xml',
47 | 'data/ir_cron.xml',
48 | ],
49 | }
50 |
--------------------------------------------------------------------------------
/contract_recurring_event/views/calendar_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | calendar.event.form
5 | calendar.event
6 |
7 |
8 |
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 |
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 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | Agreement Property Pivot View
24 | agreement
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | booking.resource.form
37 | booking.resource
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/contract_loan/models/contract_line.py:
--------------------------------------------------------------------------------
1 | from odoo import _, api, fields, models, Command
2 | from odoo.exceptions import ValidationError, UserError
3 |
4 |
5 | class ContractLine(models.Model):
6 | _inherit = "contract.line"
7 |
8 | loan_id = fields.Many2one('account.loan')
9 |
10 | def _prepare_invoice_line(self):
11 | invoice_line_vals = super()._prepare_invoice_line()
12 |
13 | if not self.loan_id:
14 | return invoice_line_vals
15 |
16 | current_loan_line = self.env['account.loan.line'].search([
17 | ('loan_id', '=', self.loan_id.id),
18 | ('date', '>=', self.contract_id.active_stub_start_date),
19 | ('date', '<=', self.contract_id.active_stub_end_date)
20 | ])
21 |
22 | if not current_loan_line:
23 | return invoice_line_vals
24 |
25 | # Get invoice line values from the loan line (returns a list)
26 | # If super() already returned a list, use it; otherwise fetch fresh
27 | if isinstance(invoice_line_vals, list):
28 | loan_line_vals_list = invoice_line_vals
29 | base_sequence = 10 # Default since we don't have original
30 | else:
31 | loan_line_vals_list = current_loan_line._invoice_line_vals()
32 | base_sequence = invoice_line_vals.get('sequence', 10)
33 |
34 | # Calculate total amount (principal + interest)
35 | total_amount = sum(
36 | line_vals.get('price_unit', 0.0) * line_vals.get('quantity', 1.0)
37 | for line_vals in loan_line_vals_list
38 | )
39 |
40 | # Build invoice lines: section with total + loan lines
41 | lines = self._get_loan_description_lines(base_sequence, total_amount)
42 |
43 | # Add all loan lines (principal and interest)
44 | for idx, loan_line_vals in enumerate(loan_line_vals_list):
45 | # Keep them tightly grouped with base_sequence + small increments
46 | loan_line_vals['sequence'] = base_sequence + 0.001 + (idx * 0.001)
47 | lines.append(loan_line_vals)
48 | return lines
49 |
50 | def _get_loan_description_lines(self, base_sequence, total_amount):
51 | lines = [{
52 | 'display_type': 'line_section',
53 | 'name': _('Loan Details for: %s - Total: %.2f kr') % (
54 | self.loan_id.name, total_amount
55 | ),
56 | 'sequence': base_sequence,
57 | }]
58 | return lines
59 |
--------------------------------------------------------------------------------
/pricelist_cpi/i18n/sv.po:
--------------------------------------------------------------------------------
1 | # Translation of Odoo Server.
2 | # This file contains the translation of the following modules:
3 | # * pricelist_cpi
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:50+0000\n"
10 | "PO-Revision-Date: 2022-01-25 07:51+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\n"
18 | "X-Generator: Poedit 3.0\n"
19 |
20 | #. module: pricelist_cpi
21 | #: model:ir.model.fields.selection,name:pricelist_cpi.selection__product_pricelist_item__compute_price__by_index
22 | msgid "By Index"
23 | msgstr "Indexrelaterad ökning"
24 |
25 | #. module: pricelist_cpi
26 | #: model:ir.model.fields,field_description:pricelist_cpi.field_product_pricelist_item__compute_price
27 | msgid "Compute Price"
28 | msgstr "Beräkna pris"
29 |
30 | #. module: pricelist_cpi
31 | #: model:ir.model,name:pricelist_cpi.model_product_pricelist_item
32 | msgid "Consumer Price Indexi Item"
33 | msgstr "Konsumentprisindex"
34 |
35 | #. module: pricelist_cpi
36 | #: model:ir.model.fields,field_description:pricelist_cpi.field_product_pricelist_item__display_name
37 | msgid "Display Name"
38 | msgstr "Visningsnamn"
39 |
40 | #. module: pricelist_cpi
41 | #: model:ir.model.fields.selection,name:pricelist_cpi.selection__product_pricelist_item__compute_price__fixed
42 | msgid "Fixed Price"
43 | msgstr "Fastpris"
44 |
45 | #. module: pricelist_cpi
46 | #: model:ir.model.fields.selection,name:pricelist_cpi.selection__product_pricelist_item__compute_price__formula
47 | msgid "Formula"
48 | msgstr "Formel"
49 |
50 | #. module: pricelist_cpi
51 | #: model:ir.model.fields,field_description:pricelist_cpi.field_product_pricelist_item__id
52 | msgid "ID"
53 | msgstr "ID"
54 |
55 | #. module: pricelist_cpi
56 | #: model:ir.model.fields,field_description:pricelist_cpi.field_product_pricelist_item____last_update
57 | msgid "Last Modified on"
58 | msgstr "Senast redigerad"
59 |
60 | #. module: pricelist_cpi
61 | #: model:ir.model.fields.selection,name:pricelist_cpi.selection__product_pricelist_item__compute_price__percentage
62 | msgid "Percentage (discount)"
63 | msgstr "Procent (rabatt)"
64 |
65 | #. module: pricelist_cpi
66 | #: model:ir.model.fields,field_description:pricelist_cpi.field_product_pricelist_item__year
67 | msgid "Year"
68 | msgstr "År"
69 |
--------------------------------------------------------------------------------
/agreement_base_booking/__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 | # Copyright 2021 Tecnativa - Jairo Llopis
22 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
23 |
24 | {
25 | 'name': 'Contract: Base Booking',
26 | 'version': '1.0',
27 | # Version ledger: 14.0 = Odoo version. 1 = Major. Non regressionable code. 2 = Minor. New features that are regressionable. 3 = Bug fixes
28 | 'summary': 'Connect a booking type and resource to a agreement',
29 | # Categories can be used to filter modules in modules listing
30 | # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml
31 | # for the full list
32 | 'category': 'Booking',
33 | 'description': """
34 | Connect a booking type and resource to a agreement.
35 | """,
36 | #'sequence': '1',
37 | 'author': 'Vertel AB',
38 | 'website': 'https://vertel.se/apps/odoo-contract/agreement_property',
39 | 'license': 'AGPL-3',
40 | 'contributor': '',
41 | 'maintainer': 'Vertel AB',
42 | 'repository': 'https://github.com/vertelab/odoo-contract',
43 | "application": False,
44 | "auto-install": True,
45 | "installable": True,
46 | 'depends': ['base_booking','agreement_legal', 'agreement_contract'],
47 | "data": [
48 | "views/agreement.xml",
49 | "wizard/agreement_open_space_view.xml",
50 | "security/ir.model.access.csv"
51 | ],
52 | }
53 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
54 |
--------------------------------------------------------------------------------
/agreement_calculate/__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 | # Copyright 2021 Tecnativa - Jairo Llopis
22 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
23 |
24 | {
25 | 'name': 'Contract: Agreement Calculate',
26 | 'version': '1.0',
27 | # Version ledger: 14.0 = Odoo version. 1 = Major. Non regressionable code. 2 = Minor. New features that are regressionable. 3 = Bug fixes
28 | 'summary': 'Agreement - Calculate',
29 | # Categories can be used to filter modules in modules listing
30 | # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml
31 | # for the full list
32 | 'category': 'Sales',
33 | 'description': """
34 | TODO: Caculate variables from contract and property.
35 | """,
36 | #'sequence': '1',
37 | 'author': 'Vertel AB',
38 | 'website': 'https://vertel.se/apps/odoo-contract/agreement_calculate',
39 | 'images': ['static/description/banner.png'], # 560x280 px.
40 | 'license': 'AGPL-3',
41 | 'contributor': '',
42 | 'maintainer': 'Vertel AB',
43 | 'repository': 'https://github.com/vertelab/odoo-contract',
44 | # Any module necessary for this one to work correctly
45 | "application": False,
46 | "auto-install": True,
47 | "installable": True,
48 | 'depends': ['agreement_contract','agreement_property','contract','uom',],
49 | "data": [
50 | "views/agreement.xml",
51 | ],
52 | }
53 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
54 |
--------------------------------------------------------------------------------
/cpi_table/__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 | # Copyright 2021 Tecnativa - Jairo Llopis
22 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
23 |
24 | {
25 | 'name': 'Contract: CPI Table, Consumer Price Index',
26 | 'version': '1.0',
27 | # Version ledger: 14.0 = Odoo version. 1 = Major. Non regressionable code. 2 = Minor. New features that are regressionable. 3 = Bug fixes
28 | 'summary': 'Consumer Price Index - Table.',
29 | # Categories can be used to filter modules in modules listing
30 | # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml
31 | # for the full list
32 | 'category': 'Sales',
33 | 'description': """
34 | Consumer Price Index - Table.
35 | """,
36 | #'sequence': '1',
37 | 'author': 'Vertel AB',
38 | 'website': 'https://vertel.se/apps/odoo-contract/cpi_table',
39 | 'images': ['static/description/banner.png'], # 560x280 px.
40 | 'license': 'AGPL-3',
41 | 'contributor': '',
42 | 'maintainer': 'Vertel AB',
43 | 'repository': 'https://github.com/vertelab/odoo-contract',
44 | # Any module necessary for this one to work correctly
45 | "application": False,
46 | "auto-install": True,
47 | "installable": True,
48 | 'depends': ['base','agreement_legal',],
49 | "data": [
50 | "security/ir.model.access.csv",
51 | "views/consumer_price_index.xml",
52 | ],
53 | }
54 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
55 |
--------------------------------------------------------------------------------
/agreement_property/__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 | # Copyright 2021 Tecnativa - Jairo Llopis
22 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
23 |
24 | {
25 | 'name': 'Contract: Agreement Property',
26 | 'version': '1.0',
27 | # Version ledger: 14.0 = Odoo version. 1 = Major. Non regressionable code. 2 = Minor. New features that are regressionable. 3 = Bug fixes
28 | 'summary': 'Inherit variables from property into agreement.',
29 | # Categories can be used to filter modules in modules listing
30 | # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml
31 | # for the full list
32 | 'category': 'Sales',
33 | 'description': """
34 | Inherit variables from property into agreement.
35 | """,
36 | #'sequence': '1',
37 | 'author': 'Vertel AB',
38 | 'website': 'https://vertel.se/apps/odoo-contract/agreement_property',
39 | 'images': ['static/description/banner.png'], # 560x280 px.
40 | 'license': 'AGPL-3',
41 | 'contributor': '',
42 | 'maintainer': 'Vertel AB',
43 | 'repository': 'https://github.com/vertelab/odoo-contract',
44 | # Any module necessary for this one to work correctly
45 | "application": False,
46 | "auto-install": True,
47 | "installable": True,
48 | 'depends': ['property_mgmt','property_building','agreement_legal',],
49 | "data": [
50 | "views/agreement.xml",
51 | ],
52 | }
53 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
54 |
--------------------------------------------------------------------------------
/contract_variable_qty_hour_bank/__manifest__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | ##############################################################################
3 | #
4 | # Odoo SA, Open Source Management Solution, third party addon
5 | # Copyright (C) 2023- 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 | #BORROWED MODULE FROM OCA
23 |
24 | {
25 | 'name': 'Contract: Variable Qty Hour Bank',
26 | 'version': '1.1',
27 | # Version ledger: 14.0 = Odoo version. 1 = Major. Non regressionable code. 2 = Minor. New features that are regressionable. 3 = Bug fixes
28 | 'summary': 'Invoice hours exceeding an hour bank.',
29 | # Categories can be used to filter modules in modules listing
30 | # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml
31 | # for the full list
32 | 'category': 'Sales',
33 | 'description': """
34 | Adds timesheet to contract.
35 | """,
36 | #'sequence': '1',
37 | 'author': 'Vertel AB',
38 | 'website': 'https://vertel.se/apps/odoo-contract/contract_variable_qty_hour_bank',
39 | 'images': ['static/description/banner.png'], # 560x280 px.
40 | 'license': 'AGPL-3',
41 | 'contributor': '',
42 | 'maintainer': 'Vertel AB',
43 | 'repository': 'https://github.com/vertelab/odoo-contract',
44 | # Any module necessary for this one to work correctly
45 | "installable": True,
46 | 'depends': ['contract_variable_quantity', 'hr_timesheet','product','product_contract'],
47 | "data": [
48 | "data/contract_line_qty_formula_data.xml",
49 | "views/product_view.xml",
50 | "views/contract_view.xml",
51 | ],
52 | }
53 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
54 |
--------------------------------------------------------------------------------
/contract_monthly_value/__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 | # Copyright 2021 Tecnativa - Jairo Llopis
22 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
23 |
24 | {
25 | 'name': 'Contract: Monthly Value',
26 | 'version': '1.0',
27 | # Version ledger: 14.0 = Odoo version. 1 = Major. Non regressionable code. 2 = Minor. New features that are regressionable. 3 = Bug fixes
28 | 'summary': 'Will generate monthly value of each contract.',
29 | # Categories can be used to filter modules in modules listing
30 | # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml
31 | # for the full list
32 | 'category': 'Sales',
33 | 'description': """
34 | Adds the value of all items in a contract and divide to get the monthly fee for every contract.
35 | """,
36 | #'sequence': '1',
37 | 'author': 'Vertel AB',
38 | 'website': 'https://vertel.se/apps/odoo-contract/contract_monthly_value',
39 | 'images': ['static/description/banner.png'], # 560x280 px.
40 | 'license': 'AGPL-3',
41 | 'contributor': '',
42 | 'maintainer': 'Vertel AB',
43 | 'repository': 'https://github.com/vertelab/odoo-contract',
44 | # Any module necessary for this one to work correctly
45 | "application": False,
46 | "auto-install": True,
47 | "installable": True,
48 | 'depends': ['contract',],
49 | "data": [
50 | # "security/ir.model.access.csv",
51 | "views/monthly_value.xml",
52 | ],
53 | }
54 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
55 |
--------------------------------------------------------------------------------
/account_agreement/__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 | # Copyright 2021 Tecnativa - Jairo Llopis
22 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
23 |
24 | {
25 | 'name': 'Contract: Account Agreement',
26 | 'version': '1.0',
27 | # Version ledger: 14.0 = Odoo version. 1 = Major. Non regressionable code. 2 = Minor. New features that are regressionable. 3 = Bug fixes
28 | 'summary': 'Account - Extension to be used together with Agreement.',
29 | # Categories can be used to filter modules in modules listing
30 | # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml
31 | # for the full list
32 | 'category': 'Sales',
33 | 'description': """
34 | TODO: Inherit variables from contract into agreement.
35 | """,
36 | #'sequence': '1',
37 | 'author': 'Vertel AB',
38 | 'website': 'https://vertel.se/apps/odoo-contract/account_agreement',
39 | 'images': ['static/description/banner.png'], # 560x280 px.
40 | 'license': 'AGPL-3',
41 | 'contributor': '',
42 | 'maintainer': 'Vertel AB',
43 | 'repository': 'https://github.com/vertelab/odoo-contract',
44 | # Any module necessary for this one to work correctly
45 | "application": False,
46 | "auto-install": True,
47 | "installable": True,
48 | 'depends': ["agreement_legal","account", "contract",
49 | # "account_period",
50 | # "l10n_se_ocr_old",
51 | # "sale",
52 | ],
53 | "data": [
54 | "views/account_move.xml",
55 | ],
56 | }
57 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
58 |
--------------------------------------------------------------------------------
/contract_variable_qty_hour_bank/views/product_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | product.product.hour_bank.view.form
5 | product.template
6 |
7 |
8 |
14 |
15 |
16 |
17 | product.product.hour_bank.view.form
18 | product.product
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | product.product.hour_bank.view.tree
28 | product.product
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | product.product.hour_bank.easyform
39 | product.product
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/product_contract_deprecated/__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: Product Contract [DEPRECATED]',
25 | 'version': '18.0.1.0.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': 'Adds contract functionality to a product.',
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 | 'description': """
33 | Adds contract functionality to a product.
34 | """,
35 | #'sequence': '1',
36 | 'author': 'Vertel AB',
37 | 'website': 'https://vertel.se/apps/odoo-contract/product_contract',
38 | 'images': ['static/description/banner.png'], # 560x280 px.
39 | 'license': 'AGPL-3',
40 | 'contributor': '',
41 | 'maintainer': 'Vertel AB',
42 | 'repository': 'https://github.com/vertelab/odoo-contract',
43 | # Any module necessary for this one to work correctly
44 | "application": False,
45 | "auto-install": False,
46 | "installable": True,
47 | "depends": [
48 | # "contract",
49 | # "product",
50 | # "sale",
51 | # "sale_project",
52 | ],
53 | "data": [
54 | # "views/product_view.xml",
55 | # "views/contract.xml",
56 | # "views/sale_order.xml",
57 | ],
58 | }
59 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
60 |
--------------------------------------------------------------------------------
/contract_aaw/views/project_portal_project_task_templates.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | You have signed this task
9 |
10 |
11 |
12 |
13 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | (
29 |
30 | )
31 | has requested your signature on a document.
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/pricelist_cpi/__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 | # Copyright 2021 Tecnativa - Jairo Llopis
22 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
23 |
24 | {
25 | 'name': 'Contract: Pricelist CPI, Consumer Price Index',
26 | 'version': '1.0',
27 | # Version ledger: 14.0 = Odoo version. 1 = Major. Non regressionable code. 2 = Minor. New features that are regressionable. 3 = Bug fixes
28 | 'summary': 'Consumer Price Index. TODO: Inherit variables from contract into agreement.',
29 | # Categories can be used to filter modules in modules listing
30 | # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml
31 | # for the full list
32 | 'category': 'Sales',
33 | 'description': """
34 | Consumer Price Index.
35 | TODO: Inherit variables from contract into agreement.
36 | """,
37 | #'sequence': '1',
38 | 'author': 'Vertel AB',
39 | 'website': 'https://vertel.se/apps/odoo-contract/pricelist_cpi',
40 | 'images': ['static/description/banner.png'], # 560x280 px.
41 | 'license': 'AGPL-3',
42 | 'contributor': '',
43 | 'maintainer': 'Vertel AB',
44 | 'repository': 'https://github.com/vertelab/odoo-contract',
45 | # Any module necessary for this one to work correctly
46 | "application": False,
47 | "auto-install": True,
48 | "installable": True,
49 | 'depends': ['base','cpi_table','product', 'contract_invoicingplan'],
50 | "data": [
51 | #"security/ir.model.access.csv",
52 | "views/product_pricelist.xml",
53 | ],
54 | }
55 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
56 |
--------------------------------------------------------------------------------
/sale_contract/models/contract.py:
--------------------------------------------------------------------------------
1 | from datetime import timedelta, datetime
2 | from dateutil.relativedelta import relativedelta
3 | import pytz
4 | from odoo import models, fields, api, _
5 | from odoo.addons.calendar.models.calendar_recurrence import (
6 | weekday_to_field,
7 | RRULE_TYPE_SELECTION,
8 | END_TYPE_SELECTION,
9 | MONTH_BY_SELECTION,
10 | WEEKDAY_SELECTION,
11 | BYDAY_SELECTION
12 | )
13 |
14 |
15 | class Contract(models.Model):
16 | _inherit = "contract.contract"
17 |
18 | sale_id = fields.Many2one(comodel_name='sale.order')
19 | sale_order_line_id = fields.Many2one(comodel_name='sale.order.line')
20 |
21 |
22 | @api.depends("sale_id")
23 | def _compute_sales_count(self):
24 | for rec in self:
25 | if rec.sale_id:
26 | rec.sale_count = len(rec.sale_id)
27 | else:
28 | rec.sale_count = 0
29 |
30 |
31 | sale_count = fields.Integer(string="Sale Count", compute=_compute_sales_count)
32 |
33 |
34 | def action_view_sales(self):
35 | self.ensure_one()
36 | ctx = dict(self.env.context)
37 |
38 | action = {
39 | "type": "ir.actions.act_window",
40 | "name": "Contract Sale",
41 | "res_model": "sale.order",
42 | "view_mode": "form",
43 | "domain": [("id", "=", self.sale_id.id)],
44 | 'res_id': self.sale_id.id,
45 | "context": ctx,
46 | }
47 | return action
48 |
49 |
50 | # def get_first_invoice_date(self):
51 | # """Return the date of the first invoice"""
52 | # today = fields.Date.from_string(fields.Date.today())
53 | # time = fields.Date.from_string(self.recurring_next_date)
54 | # if self.recurring_rule_type == 'daily':
55 | # deltaT = relativedelta(days=self.recurring_interval)
56 | # elif self.recurring_rule_type == 'weekly':
57 | # deltaT = relativedelta(weeks=self.recurring_interval)
58 | # elif self.recurring_rule_type == 'monthly':
59 | # deltaT = relativedelta(months=self.recurring_interval)
60 | # elif self.recurring_rule_type == 'yearly':
61 | # deltaT = relativedelta(years=self.recurring_interval)
62 | # while time < today:
63 | # time += deltaT
64 | #
65 | # # First invoice is generated by the product, so skip to the second invoice here
66 | # time += deltaT
67 | #
68 | # return fields.Date.to_string(time)
69 |
70 |
71 | class ContractTemplateLine(models.Model):
72 | _inherit = "contract.template.line"
73 |
74 | sale_order_line_id = fields.Many2one(comodel_name='sale.order.line')
--------------------------------------------------------------------------------
/agreement_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 | # Copyright 2021 Tecnativa - Jairo Llopis
22 | # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
23 |
24 | {
25 | 'name': 'Contract: Agreement Contract',
26 | 'version': '1.0',
27 | # Version ledger: 14.0 = Odoo version. 1 = Major. Non regressionable code. 2 = Minor. New features that are regressionable. 3 = Bug fixes
28 | 'summary': 'Agreement - Contract integration.',
29 | # Categories can be used to filter modules in modules listing
30 | # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml
31 | # for the full list
32 | 'category': 'Sales',
33 | 'description': """
34 | Inherit variables from contract into agreement.
35 | """,
36 | #'sequence': '1',
37 | 'author': 'Vertel AB',
38 | 'website': 'https://vertel.se/apps/odoo-contract/agreement_contract',
39 | 'images': ['static/description/banner.png'], # 560x280 px.
40 | 'license': 'AGPL-3',
41 | 'contributor': '',
42 | 'maintainer': 'Vertel AB',
43 | 'repository': 'https://github.com/vertelab/odoo-contract',
44 | # Any module necessary for this one to work correctly
45 | "application": False,
46 | "auto-install": True,
47 | "installable": True,
48 | 'depends': ['account','agreement_legal','contract','account_agreement','pricelist_cpi',],
49 | "data": [
50 | "security/ir.model.access.csv",
51 | "wizard/agreement_contract_wizard_views.xml",
52 | "views/agreement.xml",
53 | "views/contract.xml",
54 | ],
55 | }
56 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
57 |
58 |
--------------------------------------------------------------------------------
/cpi_table/i18n/sv.po:
--------------------------------------------------------------------------------
1 | # Translation of Odoo Server.
2 | # This file contains the translation of the following modules:
3 | # * cpi_table
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:48+0000\n"
10 | "PO-Revision-Date: 2022-01-25 07:49+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: nplurals=2; plural=(n != 1);\n"
17 | "Language: sv_SE\n"
18 | "X-Generator: Poedit 3.0\n"
19 |
20 | #. module: cpi_table
21 | #: model:ir.model,name:cpi_table.model_consumer_price_index
22 | #: model:ir.model.fields,field_description:cpi_table.field_consumer_price_index__index
23 | #: model:ir.ui.menu,name:cpi_table.dashboard_agreement_cpi
24 | msgid "Consumer Price Index"
25 | msgstr "Konsumentprisindex"
26 |
27 | #. module: cpi_table
28 | #: model:ir.actions.act_window,name:cpi_table.consumer_price_index_tree
29 | msgid "Consumer Price Index act window"
30 | msgstr "Konsumentprisindex"
31 |
32 | #. module: cpi_table
33 | #: model:ir.model.fields,field_description:cpi_table.field_consumer_price_index__create_uid
34 | msgid "Created by"
35 | msgstr "Skapad av"
36 |
37 | #. module: cpi_table
38 | #: model:ir.model.fields,field_description:cpi_table.field_consumer_price_index__create_date
39 | msgid "Created on"
40 | msgstr "Skapad den"
41 |
42 | #. module: cpi_table
43 | #: model:ir.model.fields,field_description:cpi_table.field_consumer_price_index__display_name
44 | msgid "Display Name"
45 | msgstr "Visningsnamn"
46 |
47 | #. module: cpi_table
48 | #: model:ir.model.fields,field_description:cpi_table.field_consumer_price_index__id
49 | msgid "ID"
50 | msgstr "ID"
51 |
52 | #. module: cpi_table
53 | #: model:ir.model.fields,field_description:cpi_table.field_consumer_price_index____last_update
54 | msgid "Last Modified on"
55 | msgstr "Senast redigerad"
56 |
57 | #. module: cpi_table
58 | #: model:ir.model.fields,field_description:cpi_table.field_consumer_price_index__write_uid
59 | msgid "Last Updated by"
60 | msgstr "Senast uppdaterad av"
61 |
62 | #. module: cpi_table
63 | #: model:ir.model.fields,field_description:cpi_table.field_consumer_price_index__write_date
64 | msgid "Last Updated on"
65 | msgstr "Senast uppdaterad"
66 |
67 | #. module: cpi_table
68 | #: model:ir.model.fields,field_description:cpi_table.field_consumer_price_index__is_negative
69 | msgid "True if index is negative"
70 | msgstr "Sant om indexet är negativt"
71 |
72 | #. module: cpi_table
73 | #: model:ir.model.fields,field_description:cpi_table.field_consumer_price_index__year
74 | msgid "Year"
75 | msgstr "År"
76 |
--------------------------------------------------------------------------------
/agreement_property/models/agreement.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | from odoo import models, fields, api, _
4 |
5 |
6 | _logger = logging.getLogger(__name__)
7 |
8 |
9 | class Property(models.Model):
10 | _description = "Agreement Property"
11 | _inherit = 'property.property'
12 |
13 | #agreement_ids = fields.One2many('agreement', inverse='property_id')
14 |
15 | def action_agreement(self):
16 | type_id = self.env.ref('agreement_legal.agreement_type_contract').id
17 | return {
18 | 'name': _("Agreements"),
19 | 'type': 'ir.actions.act_window',
20 | 'res_model':'agreement',
21 | 'view_mode': 'kanban,list,form',
22 | 'domain': [('property_id', '=', self.id)],
23 | 'context': {
24 | 'default_property_id': self.id,
25 | 'default_name':self.name,
26 | 'default_agreement_type_id':type_id,
27 | }
28 | }
29 |
30 |
31 | class AgreementProperty(models.Model):
32 | _description = "Agreement Property"
33 | _inherit = 'agreement'
34 |
35 | def _get_employees(self):
36 | if not self.property_id:
37 | return None
38 |
39 |
40 | property_id = fields.Many2one(
41 | 'property.property',
42 | string="Property",
43 | required=False,
44 | default=None,
45 | )
46 |
47 | @api.depends("property_id", "property_id.municipality_id")
48 | def _municipality(self):
49 | for record in self:
50 | if not record.property_id:
51 | continue
52 | _logger.warning(record.property_id.municipality_id)
53 | _logger.warning(record.property_id.municipality_id.id)
54 | record.municipality_id = record.property_id.municipality_id.id
55 |
56 | municipality_id = fields.Many2one(
57 | comodel_name='res.country.municipality',
58 | string='Municipality',
59 | compute=_municipality,
60 | store=True,
61 | )
62 |
63 |
64 |
65 | @api.depends("property_id", "property_id.employees")
66 | def _employees(self):
67 | if not self.property_id:
68 | return
69 | self.employees = self.property_id.employees
70 |
71 | employees = fields.Integer(
72 | string="Employees",
73 | required=False,
74 | compute=_employees,
75 | store=True,
76 | )
77 |
78 | #TODO: Check if we can use the save & create function (@api.model?) to force updates to sections
79 | # title when saved?
80 | # Possibly in this class, possibly in the class AgreementSectionProperty
81 | # Is it possible to trigger this on update?
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/agreement_calculate/i18n/sv.po:
--------------------------------------------------------------------------------
1 | # Translation of Odoo Server.
2 | # This file contains the translation of the following modules:
3 | # * agreement_calculate
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 15:05+0000\n"
10 | "PO-Revision-Date: 2022-01-25 16:06+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\n"
18 | "X-Generator: Poedit 3.0\n"
19 |
20 | #. module: agreement_calculate
21 | #: model:ir.model,name:agreement_calculate.model_agreement
22 | msgid "Agreement Property"
23 | msgstr "Relaterad fastighet"
24 |
25 | #. module: agreement_calculate
26 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__display_name
27 | msgid "Display Name"
28 | msgstr "Visningsnamn"
29 |
30 | #. module: agreement_calculate
31 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__expiry_date
32 | msgid "Expiry date"
33 | msgstr "Sista uppsägningsdatum"
34 |
35 | #. module: agreement_calculate
36 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__id
37 | msgid "ID"
38 | msgstr "ID"
39 |
40 | #. module: agreement_calculate
41 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement____last_update
42 | msgid "Last Modified on"
43 | msgstr "Senast ändrad den"
44 |
45 | #. module: agreement_calculate
46 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__square_meter_per_employee
47 | msgid "Square meter/Employee"
48 | msgstr "Kvadratmeter/Anställd"
49 |
50 | #. module: agreement_calculate
51 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__square_meter_per_workplace
52 | msgid "Square meter/Workplace"
53 | msgstr "Kvadratmeter/Arbetsplats"
54 |
55 | #. module: agreement_calculate
56 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__yearly_cost
57 | msgid "Yearly cost"
58 | msgstr "Årlig kostnad"
59 |
60 | #. module: agreement_calculate
61 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__yearly_cost_per_employee
62 | msgid "Yearly cost/Employee"
63 | msgstr "Årlig kostnad/Anställd"
64 |
65 | #. module: agreement_calculate
66 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__yearly_cost_per_square_meter
67 | msgid "Yearly cost/Square meter"
68 | msgstr "Årlig kostnad/Kvadratmeter"
69 |
70 | #. module: agreement_calculate
71 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__yearly_cost_per_workplace
72 | msgid "Yearly cost/Workplace"
73 | msgstr "Årlig kostnad/Arbetsplats"
74 |
--------------------------------------------------------------------------------
/product_contract_deprecated/i18n/sv.po:
--------------------------------------------------------------------------------
1 | # Translation of Odoo Server.
2 | # This file contains the translation of the following modules:
3 | # * agreement_calculate
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 15:05+0000\n"
10 | "PO-Revision-Date: 2022-01-25 16:06+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\n"
18 | "X-Generator: Poedit 3.0\n"
19 |
20 | #. module: agreement_calculate
21 | #: model:ir.model,name:agreement_calculate.model_agreement
22 | msgid "Agreement Property"
23 | msgstr "Relaterad fastighet"
24 |
25 | #. module: agreement_calculate
26 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__display_name
27 | msgid "Display Name"
28 | msgstr "Visningsnamn"
29 |
30 | #. module: agreement_calculate
31 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__expiry_date
32 | msgid "Expiry date"
33 | msgstr "Sista uppsägningsdatum"
34 |
35 | #. module: agreement_calculate
36 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__id
37 | msgid "ID"
38 | msgstr "ID"
39 |
40 | #. module: agreement_calculate
41 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement____last_update
42 | msgid "Last Modified on"
43 | msgstr "Senast ändrad den"
44 |
45 | #. module: agreement_calculate
46 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__square_meter_per_employee
47 | msgid "Square meter/Employee"
48 | msgstr "Kvadratmeter/Anställd"
49 |
50 | #. module: agreement_calculate
51 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__square_meter_per_workplace
52 | msgid "Square meter/Workplace"
53 | msgstr "Kvadratmeter/Arbetsplats"
54 |
55 | #. module: agreement_calculate
56 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__yearly_cost
57 | msgid "Yearly cost"
58 | msgstr "Årlig kostnad"
59 |
60 | #. module: agreement_calculate
61 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__yearly_cost_per_employee
62 | msgid "Yearly cost/Employee"
63 | msgstr "Årlig kostnad/Anställd"
64 |
65 | #. module: agreement_calculate
66 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__yearly_cost_per_square_meter
67 | msgid "Yearly cost/Square meter"
68 | msgstr "Årlig kostnad/Kvadratmeter"
69 |
70 | #. module: agreement_calculate
71 | #: model:ir.model.fields,field_description:agreement_calculate.field_agreement__yearly_cost_per_workplace
72 | msgid "Yearly cost/Workplace"
73 | msgstr "Årlig kostnad/Arbetsplats"
74 |
--------------------------------------------------------------------------------
/contract_aaw/models/project_task.py:
--------------------------------------------------------------------------------
1 | import logging
2 | from odoo import models, fields, api, _
3 |
4 | _logger = logging.getLogger(__name__)
5 |
6 | class ProjectTask(models.Model):
7 | _inherit = "project.task"
8 |
9 | ## Need to be set by task
10 | is_aaw = fields.Boolean(string="Is AAW")
11 |
12 | is_signed = fields.Boolean(string="AAW Signed", readonly=True)
13 |
14 | def action_request_signature(self):
15 | self.ensure_one()
16 | _logger.info(f"Sender: {self.env.user.name}")
17 | _logger.info(f"Sender: {self.env.user.email}")
18 | _logger.info(f"Sender: {self.env.user.partner_id.name}")
19 | _logger.info(f"Sender: {self.env.user.partner_id.email}")
20 |
21 | render_result = self.env["ir.qweb"]._render(
22 | "contract_aaw.aaw_sign_template_mail",
23 | {
24 | "record": self.partner_id,
25 | "link": self.access_url,
26 | "sender": self.env.user or self.env.user.partner_id
27 | },
28 | engine="ir.qweb",
29 | minimal_qcontext=True,
30 | )
31 |
32 | self.message_post(
33 | author_id=self.partner_id.id,
34 | partner_ids=self.partner_id.ids,
35 | subject=self.env._("New document to sign"),
36 | body=render_result,
37 | message_type="notification",
38 | mail_auto_delete=False,
39 | email_layout_xmlid="mail.mail_notification_light"
40 | )
41 |
42 |
43 | def _compute_remaining_hours_so(self):
44 | # TODO This is not yet perfectly working as timesheet.so_line stick to its old value although changed
45 | # in the task From View.
46 | timesheets = self.timesheet_ids.filtered(
47 | lambda t: not t.task_id.is_aaw
48 | and t.task_id.sale_line_id in (t.so_line, t._origin.so_line)
49 | and t.so_line.remaining_hours_available
50 | )
51 |
52 | mapped_remaining_hours = {
53 | task._origin.id: task.sale_line_id and task.sale_line_id.remaining_hours or 0.0 for task in self
54 | }
55 | uom_hour = self.env.ref('uom.product_uom_hour')
56 | for timesheet in timesheets:
57 | delta = 0
58 | if timesheet._origin.so_line == timesheet.task_id.sale_line_id:
59 | delta += timesheet._origin.unit_amount
60 | if timesheet.so_line == timesheet.task_id.sale_line_id:
61 | delta -= timesheet.unit_amount
62 | if delta:
63 | mapped_remaining_hours[
64 | timesheet.task_id._origin.id] += timesheet.product_uom_id._compute_quantity(delta, uom_hour)
65 |
66 | for task in self:
67 | task.remaining_hours_so = mapped_remaining_hours[task._origin.id]
68 |
--------------------------------------------------------------------------------
/pricelist_cpi/views/product_pricelist.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | product.pricelist.item.form
5 | product.pricelist.item
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
21 | per
23 |
24 |
25 |
26 |
27 |
28 |
66 |
--------------------------------------------------------------------------------
/agreement_base_booking/wizard/agreement_open_space.py:
--------------------------------------------------------------------------------
1 | from odoo import models, fields, api, _
2 | from datetime import datetime, timedelta
3 |
4 | class AgreementOpenSpace(models.TransientModel):
5 | _name = 'agreement.open.space'
6 | _description = 'Agreement Open Space'
7 |
8 | @api.model
9 | def _default_start(self):
10 | now = fields.Datetime.now()
11 | return now + (datetime.min - now) % timedelta(minutes=30)
12 |
13 | @api.model
14 | def _default_stop(self):
15 | now = fields.Datetime.now()
16 | start = now + (datetime.min - now) % timedelta(minutes=30)
17 | return start + timedelta(days=30)
18 |
19 | agreement_id = fields.Many2one('agreement', string="Agreement")
20 |
21 |
22 | @api.model
23 | def _default_start(self):
24 | # Din befintliga _default_start() logik här, eller:
25 | return fields.Date.context_today(self)
26 |
27 | @api.model
28 | def _default_stop(self):
29 | return fields.Date.context_today(self) + timedelta(days=30)
30 |
31 | start_date = fields.Date(string="Start Date", default='_default_start', required=True)
32 | end_date = fields.Date(string="End Date", default='_default_stop', required=True)
33 |
34 |
35 | mon = fields.Boolean(readonly=False)
36 | tue = fields.Boolean(readonly=False)
37 | wed = fields.Boolean(readonly=False)
38 | thu = fields.Boolean(readonly=False)
39 | fri = fields.Boolean(readonly=False)
40 | sat = fields.Boolean(readonly=False)
41 | sun = fields.Boolean(readonly=False)
42 |
43 | def action_open_resource(self):
44 | resource_id = self.agreement_id.second_hand_booking_resource_id
45 | if not resource_id:
46 | return
47 |
48 | attendance_vals = []
49 |
50 | # Map boolean fields to dayofweek values
51 | day_mapping = [
52 | (self.mon, '0', 'Monday'),
53 | (self.tue, '1', 'Tuesday'),
54 | (self.wed, '2', 'Wednesday'),
55 | (self.thu, '3', 'Thursday'),
56 | (self.fri, '4', 'Friday'),
57 | (self.sat, '5', 'Saturday'),
58 | (self.sun, '6', 'Sunday'),
59 | ]
60 |
61 | # Create attendance records only for selected days
62 | for is_selected, dayofweek, day_name in day_mapping:
63 | if is_selected:
64 | attendance_vals.append((0, 0, {
65 | 'name': f'{day_name} [{self.start_date} - {self.end_date}]',
66 | 'dayofweek': dayofweek,
67 | 'day_period': 'morning',
68 | 'hour_from': 0.0, # 00:00
69 | 'hour_to': 24.0, # 24:00
70 | 'date_from': self.start_date,
71 | 'date_to': self.end_date
72 | }))
73 |
74 | # Update the resource calendar with new attendance records
75 | if attendance_vals:
76 | resource_id.resource_calendar_id.attendance_ids = attendance_vals
77 |
78 | return {'type': 'ir.actions.act_window_close'}
79 |
80 |
--------------------------------------------------------------------------------
/sale_contract/models/sale.py:
--------------------------------------------------------------------------------
1 | from odoo import models, fields, api, _
2 |
3 |
4 | class Sale(models.Model):
5 | _inherit = "sale.order"
6 |
7 | contract_ids = fields.Many2many("contract.contract", string="Contract", copy=False)
8 |
9 | @api.depends("contract_ids")
10 | def _compute_contract_count(self):
11 | for rec in self:
12 | if rec.contract_ids:
13 | rec.contract_count = len(rec.contract_ids)
14 | rec.is_contract = True
15 | else:
16 | rec.contract_count = 0
17 | rec.is_contract = False
18 |
19 | is_contract = fields.Boolean(string="Has Contract")
20 | contract_count = fields.Integer(string="Contract Count", compute=_compute_contract_count)
21 |
22 | # def _action_confirm(self):
23 | # """ On SO confirmation, some lines should generate a contract. """
24 | # result = super(Sale, self)._action_confirm()
25 | # self.action_create_contract()
26 | # return result
27 |
28 | # def action_create_contract(self):
29 | # contract_id = self.env["contract.contract"].create(self._prepare_contract_vals())
30 | # self.contract_ids = [(4, contract_id.id)]
31 | # return contract_id
32 |
33 | def _prepare_contract_vals(self):
34 | values = {
35 | "name": f"{self.name} - {self.partner_id.name}",
36 | "partner_id": self.partner_id.id,
37 | "invoice_partner_id": self.partner_id.id,
38 | "sale_id": self.id,
39 | "user_id": self.user_id.id,
40 | "contract_line_fixed_ids": [(0, 0, self._prepare_contract_line_vals(line)) for line in self.order_line]
41 | }
42 | return values
43 |
44 | def _prepare_contract_line_vals(self, line):
45 | return {
46 | "product_id": line.product_id.id,
47 | "name": line.product_id.name,
48 | "quantity": line.product_uom_qty,
49 | "price_unit": line.price_unit,
50 | "sale_order_line_id": line.id,
51 | }
52 |
53 |
54 | # def action_view_contract(self):
55 | # self.ensure_one()
56 | # tree_view = self.env.ref("contract.contract_contract_tree_view", raise_if_not_found=False)
57 | # form_view = self.env.ref("contract.contract_contract_customer_form_view", raise_if_not_found=False)
58 | # ctx = dict(self.env.context)
59 | #
60 | # action = {
61 | # "type": "ir.actions.act_window",
62 | # "name": "Sale Contracts",
63 | # "res_model": "contract.contract",
64 | # "view_mode": "form",
65 | # "domain": [("id", "in", self.contract_ids.ids)],
66 | # "context": ctx,
67 | # }
68 | # if tree_view and form_view:
69 | # action["views"] = [(tree_view.id, "list"), (form_view.id, "form")]
70 | # return action
71 |
72 |
73 | class SaleOrderLine(models.Model):
74 | _inherit = 'sale.order.line'
75 |
76 | contract_id = fields.Many2one(
77 | comodel_name='contract.contract', string='Contract', domain=[('type', '=', 'contract')]
78 | )
79 |
--------------------------------------------------------------------------------
/contract_aaw/i18n/sv.po:
--------------------------------------------------------------------------------
1 | # Translation of Odoo Server.
2 | # This file contains the translation of the following modules:
3 | # * contract_aaw
4 | #
5 | msgid ""
6 | msgstr ""
7 | "Project-Id-Version: Odoo Server 18.0-20250512\n"
8 | "Report-Msgid-Bugs-To: \n"
9 | "POT-Creation-Date: 2025-05-14 14:59+0000\n"
10 | "PO-Revision-Date: 2025-07-03 14:07+0200\n"
11 | "Last-Translator: \n"
12 | "Language-Team: \n"
13 | "Language: sv\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_aaw
21 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_abstract_contract_line__qty_type__aaw
22 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_line__qty_type__aaw
23 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_template_line__qty_type__aaw
24 | msgid "AAW"
25 | msgstr ""
26 |
27 | #. module: contract_aaw
28 | #. odoo-python
29 | #: code:addons/contract_aaw/models/contract_line.py:0
30 | msgid "AAW module can't handle other types of intervals yet."
31 | msgstr "AAW-modulen kan ännu inte hantera andra typer av intervall."
32 |
33 | #. module: contract_aaw
34 | #: model:ir.model,name:contract_aaw.model_contract_abstract_contract_line
35 | msgid "Abstract Recurring Contract Line"
36 | msgstr "Abstrakt återkommande kontraktslinje"
37 |
38 | #. module: contract_aaw
39 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_abstract_contract_line__qty_type__bar
40 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_line__qty_type__bar
41 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_template_line__qty_type__bar
42 | msgid "Bar"
43 | msgstr "Nivå"
44 |
45 | #. module: contract_aaw
46 | #: model:ir.model,name:contract_aaw.model_contract_contract
47 | msgid "Contract"
48 | msgstr "Kontrakt"
49 |
50 | #. module: contract_aaw
51 | #: model:ir.model,name:contract_aaw.model_contract_line
52 | msgid "Contract Line"
53 | msgstr "Kontraktsrad"
54 |
55 | #. module: contract_aaw
56 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_abstract_contract_line__qty_type__foo
57 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_line__qty_type__foo
58 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_template_line__qty_type__foo
59 | msgid "Foo"
60 | msgstr ""
61 |
62 | #. module: contract_aaw
63 | #: model:ir.model.fields,field_description:contract_aaw.field_project_task__is_aaw
64 | msgid "Is AAW"
65 | msgstr "Är AAW"
66 |
67 | #. module: contract_aaw
68 | #: model:ir.model.fields,field_description:contract_aaw.field_contract_abstract_contract_line__qty_type
69 | #: model:ir.model.fields,field_description:contract_aaw.field_contract_line__qty_type
70 | #: model:ir.model.fields,field_description:contract_aaw.field_contract_template_line__qty_type
71 | msgid "Quantity Type"
72 | msgstr "Kvantitetstyp"
73 |
74 | #. module: contract_aaw
75 | #: model:ir.model,name:contract_aaw.model_project_task
76 | msgid "Task"
77 | msgstr "Aktivitet"
78 |
--------------------------------------------------------------------------------
/contract_loan/i18n/sv.po:
--------------------------------------------------------------------------------
1 | # Translation of Odoo Server.
2 | # This file contains the translation of the following modules:
3 | # * contract_aaw
4 | #
5 | msgid ""
6 | msgstr ""
7 | "Project-Id-Version: Odoo Server 18.0-20250512\n"
8 | "Report-Msgid-Bugs-To: \n"
9 | "POT-Creation-Date: 2025-05-14 14:59+0000\n"
10 | "PO-Revision-Date: 2025-07-03 14:07+0200\n"
11 | "Last-Translator: \n"
12 | "Language-Team: \n"
13 | "Language: sv\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_aaw
21 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_abstract_contract_line__qty_type__aaw
22 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_line__qty_type__aaw
23 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_template_line__qty_type__aaw
24 | msgid "AAW"
25 | msgstr ""
26 |
27 | #. module: contract_aaw
28 | #. odoo-python
29 | #: code:addons/contract_aaw/models/contract_line.py:0
30 | msgid "AAW module can't handle other types of intervals yet."
31 | msgstr "AAW-modulen kan ännu inte hantera andra typer av intervall."
32 |
33 | #. module: contract_aaw
34 | #: model:ir.model,name:contract_aaw.model_contract_abstract_contract_line
35 | msgid "Abstract Recurring Contract Line"
36 | msgstr "Abstrakt återkommande kontraktslinje"
37 |
38 | #. module: contract_aaw
39 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_abstract_contract_line__qty_type__bar
40 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_line__qty_type__bar
41 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_template_line__qty_type__bar
42 | msgid "Bar"
43 | msgstr "Nivå"
44 |
45 | #. module: contract_aaw
46 | #: model:ir.model,name:contract_aaw.model_contract_contract
47 | msgid "Contract"
48 | msgstr "Kontrakt"
49 |
50 | #. module: contract_aaw
51 | #: model:ir.model,name:contract_aaw.model_contract_line
52 | msgid "Contract Line"
53 | msgstr "Kontraktsrad"
54 |
55 | #. module: contract_aaw
56 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_abstract_contract_line__qty_type__foo
57 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_line__qty_type__foo
58 | #: model:ir.model.fields.selection,name:contract_aaw.selection__contract_template_line__qty_type__foo
59 | msgid "Foo"
60 | msgstr ""
61 |
62 | #. module: contract_aaw
63 | #: model:ir.model.fields,field_description:contract_aaw.field_project_task__is_aaw
64 | msgid "Is AAW"
65 | msgstr "Är AAW"
66 |
67 | #. module: contract_aaw
68 | #: model:ir.model.fields,field_description:contract_aaw.field_contract_abstract_contract_line__qty_type
69 | #: model:ir.model.fields,field_description:contract_aaw.field_contract_line__qty_type
70 | #: model:ir.model.fields,field_description:contract_aaw.field_contract_template_line__qty_type
71 | msgid "Quantity Type"
72 | msgstr "Kvantitetstyp"
73 |
74 | #. module: contract_aaw
75 | #: model:ir.model,name:contract_aaw.model_project_task
76 | msgid "Task"
77 | msgstr "Aktivitet"
78 |
--------------------------------------------------------------------------------
/contract_variable_quantity_analytics_account/__manifest__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | ##############################################################################
3 | #
4 | # Odoo SA, Open Source Management Solution, third party addon
5 | # Copyright (C) 2023- 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: Variable quantity alytics Account Formula',
24 | 'version': '1.0',
25 | # Version ledger: 14.0 = Odoo version. 1 = Major. Non regressionable code. 2 = Minor. New features that are regressionable. 3 = Bug fixes
26 | 'summary': 'Adds a special Formula (quantity) which uses Analytics Account',
27 | 'category': 'Sales',
28 | 'description': """
29 | This module adds a new Formula (quantity) for variable quantity in contract.
30 | This formula is intended to be used when one wants to use a contract,
31 | to onward bill a invoice.
32 |
33 | This Formula will look in all posted in-invoices for any line that refers to:
34 | the same produkt as in contract line,
35 | the same analytics account as in the contract line,
36 | that has not been invoiced by this formula before,
37 | and that is from before the contract lines end date.
38 |
39 | To know if a invoice line has been invoiced already,
40 | a link between invoice lines and contracts as been created.
41 | This field will be set when the formula fetches the quantity from a invoice line.
42 | This is to ensure a invoice line's quantity is only fetched once,
43 | and thus not billed onwards more then once.
44 | """,
45 | #'sequence': '1',
46 | 'author': 'Vertel AB',
47 | 'website': 'https://vertel.se/apps/odoo-contract/contract_cariable_quantity_analytics_account',
48 | 'images': ['static/description/banner.png'], # 560x280 px.
49 | 'license': 'AGPL-3',
50 | 'contributor': '',
51 | 'maintainer': 'Vertel AB',
52 | 'repository': 'https://github.com/vertelab/odoo-contract',
53 | # Any module necessary for this one to work correctly
54 |
55 | "application": False,
56 | "installable": True,
57 | 'depends': ['contract_variable_quantity','account' ],
58 | "auto_install": True,
59 | "data": [
60 | "views/account_move_view.xml",
61 | "data/contract_line_qty_formula.xml",
62 | ],
63 | }
64 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
65 |
--------------------------------------------------------------------------------
/product_contract_deprecated/views/product_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | product.product.contract.view.form
5 | product.template
6 |
7 |
8 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | product.contract.template.inherit.sale.project.form
26 | product.template
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | product.contract.template.inherit.sale.projectform
37 | product.template
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/sale_contract/views/product_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | product.product.contract.view.form
5 | product.template
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | product.contract.template.inherit.sale.project.form
26 | product.template
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | product.contract.template.inherit.sale.projectform
37 | product.template
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/contract_aaw/models/sale.py:
--------------------------------------------------------------------------------
1 | from collections import defaultdict
2 | from odoo import models, fields, api
3 | from odoo.osv import expression
4 |
5 |
6 | class SaleOrder(models.Model):
7 | _inherit = 'sale.order'
8 |
9 | def _prepare_contract_line_vals(self, line):
10 | vals = super()._prepare_contract_line_vals(line)
11 | if line.project_id.account_id:
12 | vals['analytic_distribution'] = {str(line.project_id.account_id.id): 100.00}
13 | return vals
14 |
15 | def _prepare_contract_vals(self):
16 | vals = super()._prepare_contract_vals()
17 | contract_id = self.order_line.mapped('product_id')[-1].mapped('contract_id')
18 | vals.update({
19 | "sale_id": self.id,
20 | "user_id": self.user_id.id,
21 | "total_amount": self.amount_total,
22 | "contract_payment_type": contract_id.contract_payment_type,
23 | "final_payment": contract_id.final_payment,
24 | "down_payment": contract_id.down_payment,
25 | "contract_line_ids": [(0, 0, {
26 | "product_id": contract_line.product_id.id,
27 | "name": contract_line.product_id.name,
28 | "qty_type": contract_line.qty_type,
29 | "quantity": contract_line.quantity,
30 | "price_unit": contract_line.price_unit,
31 | "uom_id": contract_line.uom_id.id,
32 | }) for contract_line in contract_id.contract_line_ids]
33 | })
34 | return vals
35 |
36 |
37 | class SaleOrderLine(models.Model):
38 | _inherit = 'sale.order.line'
39 |
40 |
41 | def _get_delivered_quantity_by_analytic(self, additional_domain):
42 | """ Compute and write the delivered quantity of current SO lines, based on their related
43 | analytic lines.
44 | :param additional_domain: domain to restrict AAL to include in computation (required since timesheet is an AAL with a project ...)
45 | """
46 | result = defaultdict(float)
47 |
48 | # avoid recomputation if no SO lines concerned
49 | if not self:
50 | return result
51 |
52 | # group analytic lines by product uom and so line
53 | domain = expression.AND([[('so_line', 'in', self.ids), ('task_id.is_aaw', '=', False)], additional_domain])
54 | data = self.env['account.analytic.line']._read_group(
55 | domain,
56 | ['product_uom_id', 'so_line'],
57 | ['unit_amount:sum', 'move_line_id:count_distinct', '__count'],
58 | )
59 |
60 | # convert uom and sum all unit_amount of analytic lines to get the delivered qty of SO lines
61 | for uom, so_line, unit_amount_sum, move_line_id_count_distinct, count in data:
62 | if not uom:
63 | continue
64 | # avoid counting unit_amount twice when dealing with multiple analytic lines on the same move line
65 | if move_line_id_count_distinct == 1 and count > 1:
66 | qty = unit_amount_sum / count
67 | else:
68 | qty = unit_amount_sum
69 | if so_line.product_uom.category_id == uom.category_id:
70 | qty = uom._compute_quantity(qty, so_line.product_uom, rounding_method='HALF-UP')
71 | result[so_line.id] += qty
72 |
73 | return result
--------------------------------------------------------------------------------
/contract_invoicingplan/models/account_journal_dashboard.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 AccountJournal(models.Model):
16 | _inherit = "account.journal"
17 |
18 | def _get_open_uninvoiced_stubs_query(self):
19 | return ('''
20 | SELECT
21 | contract.uninvoiced_stubs
22 | FROM contract_contract contract
23 | WHERE contract.journal_id = %(journal_id)s
24 | AND contract.uninvoiced_stubs = True;
25 | ''', {'journal_id': self.id})
26 |
27 | def _get_open_zero_invoice_stubs_count_query(self):
28 | return ('''
29 | SELECT
30 | contract.contract_invoice_sub_count
31 | FROM contract_contract contract
32 | WHERE contract.journal_id = %(journal_id)s
33 | AND contract.contract_invoice_sub_count = 0;
34 | ''', {'journal_id': self.id})
35 |
36 | def get_journal_dashboard_datas(self):
37 | datas = super().get_journal_dashboard_datas()
38 |
39 | number_uninvoiced_stubs = number_zero_invoice_stubs = 0
40 | sum_uninvoiced_stubs = sum_zero_invoice_stubs = 0.0
41 |
42 | if self.type in ['sale', 'purchase']:
43 | (query, query_args) = self._get_open_uninvoiced_stubs_query()
44 | self.env.cr.execute(query, query_args)
45 | query_results_to_uninvoiced_stubs = self.env.cr.dictfetchall()
46 | number_uninvoiced_stubs = len(query_results_to_uninvoiced_stubs)
47 |
48 | (query, query_args) = self._get_open_zero_invoice_stubs_count_query()
49 | self.env.cr.execute(query, query_args)
50 | query_results_to_zero_invoice_stubs = self.env.cr.dictfetchall()
51 | number_zero_invoice_stubs = len(query_results_to_zero_invoice_stubs)
52 |
53 | datas.update({
54 | 'number_uninvoiced_stubs': number_uninvoiced_stubs,
55 | 'sum_uninvoiced_stubs': sum_uninvoiced_stubs,
56 | 'number_zero_invoice_stubs': number_zero_invoice_stubs,
57 | 'sum_zero_invoice_stubs': sum_zero_invoice_stubs
58 | })
59 |
60 | return datas
61 |
62 | def open_uninvoiced_subs_contract_action(self):
63 | tree_view_id = self.env.ref('contract.contract_contract_tree_view').id
64 |
65 | return {
66 | 'type': 'ir.actions.act_window',
67 | 'name': _('Contracts'),
68 | 'view_mode': 'list,form',
69 | 'res_model': 'contract.contract',
70 | 'target': 'self',
71 | 'views': [[tree_view_id, 'list'], [False, 'form']],
72 | 'domain': [('uninvoiced_stubs', '=', True)]
73 | }
74 |
75 | def open_invoiced_subs_contract_action(self):
76 | tree_view_id = self.env.ref('contract.contract_contract_tree_view').id
77 |
78 | return {
79 | 'type': 'ir.actions.act_window',
80 | 'name': _('Contracts'),
81 | 'view_mode': 'list,form',
82 | 'res_model': 'contract.contract',
83 | 'target': 'self',
84 | 'views': [[tree_view_id, 'list'], [False, 'form']],
85 | 'domain': [('contract_invoice_sub_count', '=', 0)]
86 | }
87 |
88 |
--------------------------------------------------------------------------------