From fb301db2b385cdc5322ae253332aea026ae2ffee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20V=C3=A9zina?= Date: Thu, 16 Nov 2023 09:01:22 -0500 Subject: [PATCH] for migration --- README.md | 2 +- bemade_documents_portal/__init__.py | 2 + bemade_documents_portal/__manifest__.py | 32 + .../controllers/__init__.py | 1 + bemade_documents_portal/controllers/portal.py | 65 ++ bemade_documents_portal/models/__init__.py | 1 + bemade_documents_portal/models/documents.py | 17 + .../views/document_portal_templates.xml | 112 ++ .../__manifest__.py | 4 +- bemade_fsm/__manifest__.py | 37 +- bemade_fsm/data/fsm_data.xml | 48 + bemade_fsm/i18n/fr.po | 971 ++++++++++++++++++ bemade_fsm/models/__init__.py | 4 + bemade_fsm/models/equipment.py | 77 +- bemade_fsm/models/equipment_tag.py | 13 + bemade_fsm/models/equipment_type.py | 9 + bemade_fsm/models/fsm_visit.py | 70 ++ bemade_fsm/models/product_template.py | 11 +- bemade_fsm/models/res_partner.py | 87 +- bemade_fsm/models/sale_order.py | 158 ++- bemade_fsm/models/sale_order_line.py | 267 +++++ bemade_fsm/models/task.py | 213 +++- bemade_fsm/models/task_template.py | 69 +- .../worksheet_custom_report_templates.xml | 371 +++++++ .../reports/worksheet_custom_reports.xml | 13 + bemade_fsm/reports/worksheet_templates.xml | 146 +++ bemade_fsm/security/ir.model.access.csv | 7 +- bemade_fsm/static/src/scss/bemade_fsm.scss | 14 + .../static/tests/tours/equipment_tour.js | 16 +- .../static/tests/tours/sale_order_tour.js | 40 + .../static/tests/tours/task_equipment_tour.js | 2 +- bemade_fsm/tests/__init__.py | 2 +- bemade_fsm/tests/test_bemade_fsm_common.py | 193 +++- bemade_fsm/tests/test_equipment.py | 58 +- bemade_fsm/tests/test_fsm_contact_setting.py | 115 ++- bemade_fsm/tests/test_fsm_visit.py | 124 +++ bemade_fsm/tests/test_sale_order.py | 360 +++++-- bemade_fsm/tests/test_task_template.py | 151 ++- bemade_fsm/views/equipment.xml | 38 +- bemade_fsm/views/product_views.xml | 6 +- bemade_fsm/views/sale_order_views.xml | 36 +- bemade_fsm/views/task_template_views.xml | 3 + bemade_fsm/views/task_views.xml | 81 +- bemade_geo_routing/__init__.py | 1 + bemade_geo_routing/__manifest__.py | 35 + bemade_geo_routing/models/__init__.py | 1 + .../models/bemade_geo_router.py | 95 ++ bemade_geo_routing/tests/__init__.py | 1 + bemade_geo_routing/tests/test_geo_router.py | 53 + .../__init__.py | 1 + .../__manifest__.py | 31 + .../models/__init__.py | 1 + .../models/mail_thread.py | 17 + .../models/mail_alias.py | 2 + .../models/res_config_settings.py | 7 +- .../models/res_users.py | 23 +- .../views/res_config_settings_views.xml | 55 +- .../views/res_users_views.xml | 15 +- bemade_margin_vendor_pricelist/__init__.py | 1 + .../__manifest__.py | 31 + .../i18n/bemade_margin_vendor_pricelist.pot | 58 ++ bemade_margin_vendor_pricelist/i18n/fr.po | 58 ++ .../models/__init__.py | 1 + .../models/sale_order.py | 153 +++ .../views/sale_order.xml | 51 + bemade_module_linker/__init__.py | 12 + bemade_module_linker/__manifest__.py | 24 + bemade_module_linker/models/__init__.py | 1 + .../models/res_config_settings.py | 8 + .../models/res_modules_link.py | 28 + .../views/res_config_settings_views.xml | 33 + .../__manifest__.py | 3 +- .../models/account_move.py | 2 +- .../models/res_partner.py | 3 + .../tests/test_billing_contacts.py | 22 +- .../views/account_move_views.xml | 22 + .../views/res_partner_views.xml | 4 +- bemade_packing_wizard/__init__.py | 4 + bemade_packing_wizard/__manifest__.py | 25 + bemade_packing_wizard/models/__init__.py | 5 + .../models/delivery_carrier.py | 13 + .../models/stock_quant_package.py | 84 ++ .../views/delivery_carrier_views.xml | 13 + .../views/stock_package_views.xml | 23 + bemade_packing_wizard/wizard/__init__.py | 3 + .../wizard/choose_delivery_package.py | 71 ++ .../wizard/choose_delivery_package_views.xml | 22 + bemade_partner_email_domain/__init__.py | 2 + bemade_partner_email_domain/__manifest__.py | 38 + .../controllers/__init__.py | 1 + .../controllers/main.py | 40 + .../data/mail_template_data.xml | 107 ++ .../data/template_data.xml | 17 + bemade_partner_email_domain/i18n/fr_CA.po | 41 + .../models/__init__.py | 1 + .../models/res_partner.py | 74 ++ .../views/res_partner_views.xml | 21 + bemade_planning_travel/__init__.py | 1 + bemade_planning_travel/__manifest__.py | 40 + bemade_planning_travel/models/__init__.py | 1 + .../models/planning_slot.py | 42 + bemade_quotation_alternative/__init__.py | 4 + bemade_quotation_alternative/__manifest__.py | 37 + .../controllers/__init__.py | 3 + .../controllers/controllers.py | 21 + bemade_quotation_alternative/demo/demo.xml | 30 + .../models/__init__.py | 3 + bemade_quotation_alternative/models/models.py | 18 + .../models/sale_order.py | 17 + .../security/ir.model.access.csv | 2 + .../views/sale_order_views.xml | 58 ++ .../views/templates.xml | 24 + .../wizard/__init__.py | 3 + .../wizard/sale_order_alternative.py | 59 ++ .../wizard/sale_order_alternative_views.xml | 45 + bemade_sale_order_line_number/__manifest__.py | 21 + .../views/sale_order_views.xml | 27 + bemade_stock_quant_valuation/__init__.py | 1 + bemade_stock_quant_valuation/__manifest__.py | 33 + .../models/__init__.py | 1 + .../models/stock_quant.py | 20 + .../views/stock_account_views.xml | 19 + bemade_time_off_follower/models/hr_leave.py | 1 + .../models/mail_thread.py | 34 +- .../__init__.py | 1 + .../__manifest__.py | 22 + .../models/__init__.py | 1 + .../models/sale_order.py | 28 + .../models/ir_ui_menu.py | 12 +- .../models/res_users.py | 3 +- .../models/res_users_menu_order.py | 5 +- temporary_change_image_size/__manifest__.py | 20 + .../views/product_template_views.xml | 13 + theme_durpro/LICENSE | 27 + theme_durpro/__init__.py | 3 + theme_durpro/__manifest__.py | 34 + theme_durpro/data/ir_asset.xml | 43 + theme_durpro/i18n/de.po | 206 ++++ theme_durpro/i18n/es.po | 207 ++++ theme_durpro/i18n/fr.po | 206 ++++ theme_durpro/i18n/it.po | 207 ++++ theme_durpro/i18n/nl.po | 206 ++++ theme_durpro/i18n/theme_graphene.pot | 202 ++++ theme_durpro/i18n/zh_CN.po | 206 ++++ theme_durpro/models/__init__.py | 3 + theme_durpro/models/theme_durpro.py | 14 + .../static/description/durpro_poster.png | Bin 0 -> 32744 bytes .../static/description/durpro_screenshot.jpg | Bin 0 -> 84111 bytes theme_durpro/static/description/index.html | 2 + .../static/description/theme_durpro.svg | 236 +++++ .../static/src/img/patterns/bg_pattern_01.jpg | Bin 0 -> 49367 bytes .../static/src/img/patterns/bg_pattern_02.jpg | Bin 0 -> 38553 bytes .../static/src/img/patterns/bg_pattern_03.jpg | Bin 0 -> 35626 bytes .../static/src/img/patterns/bg_pattern_04.jpg | Bin 0 -> 79959 bytes .../static/src/img/patterns/bg_pattern_05.jpg | Bin 0 -> 45897 bytes .../static/src/img/patterns/bg_pattern_06.jpg | Bin 0 -> 52671 bytes .../static/src/img/pictures/bg_image_01.jpg | Bin 0 -> 82852 bytes .../static/src/img/pictures/bg_image_02.jpg | Bin 0 -> 81771 bytes .../static/src/img/pictures/bg_image_03.jpg | Bin 0 -> 84532 bytes .../static/src/img/pictures/bg_image_04.jpg | Bin 0 -> 69313 bytes .../static/src/img/pictures/bg_image_05.jpg | Bin 0 -> 132385 bytes .../static/src/img/pictures/bg_image_06.jpg | Bin 0 -> 64071 bytes .../static/src/img/pictures/bg_image_07.jpg | Bin 0 -> 80264 bytes .../static/src/img/pictures/bg_image_08.jpg | Bin 0 -> 203311 bytes .../static/src/img/pictures/bg_image_09.jpg | Bin 0 -> 100158 bytes .../static/src/img/pictures/bg_image_10.jpg | Bin 0 -> 73488 bytes .../static/src/img/pictures/content_01.jpg | Bin 0 -> 3726046 bytes .../static/src/img/pictures/content_02.jpg | Bin 0 -> 94594 bytes .../static/src/img/pictures/content_03.jpg | Bin 0 -> 77542 bytes .../static/src/img/pictures/content_04.jpg | Bin 0 -> 99379 bytes .../static/src/img/pictures/content_05.jpg | Bin 0 -> 69993 bytes .../static/src/img/pictures/content_06.jpg | Bin 0 -> 85457 bytes .../static/src/img/pictures/content_07.jpg | Bin 0 -> 69259 bytes .../static/src/img/pictures/content_08.jpg | Bin 0 -> 93051 bytes .../static/src/img/pictures/content_09.jpg | Bin 0 -> 64562 bytes .../static/src/img/pictures/content_10.jpg | Bin 0 -> 200134 bytes .../static/src/img/pictures/content_11.jpg | Bin 0 -> 92251 bytes .../static/src/img/pictures/content_12.jpg | Bin 0 -> 130164 bytes .../static/src/img/pictures/content_13.jpg | Bin 0 -> 111532 bytes .../static/src/img/pictures/content_14.jpg | Bin 0 -> 119900 bytes .../static/src/img/pictures/content_15.jpg | Bin 0 -> 30465 bytes .../static/src/img/pictures/content_16.jpg | Bin 0 -> 28064 bytes .../static/src/img/pictures/content_17.jpg | Bin 0 -> 30993 bytes .../static/src/img/pictures/content_18.jpg | Bin 0 -> 43790 bytes .../static/src/img/pictures/content_19.jpg | Bin 0 -> 27276 bytes .../static/src/img/pictures/content_20.jpg | Bin 0 -> 23539 bytes .../static/src/img/pictures/content_21.jpg | Bin 0 -> 26760 bytes .../static/src/img/pictures/content_22.jpg | Bin 0 -> 84090 bytes .../static/src/img/pictures/content_23.jpg | Bin 0 -> 298113 bytes .../static/src/img/pictures/s_numbers.jpg | Bin 0 -> 1689792 bytes .../static/src/img/pictures/s_popup.jpg | Bin 0 -> 73698 bytes .../static/src/img/pictures/uiface_01.jpg | Bin 0 -> 4150 bytes .../static/src/img/pictures/uiface_02.jpg | Bin 0 -> 6969 bytes .../static/src/img/pictures/uiface_03.jpg | Bin 0 -> 9117 bytes .../static/src/img/pictures/uiface_04.jpg | Bin 0 -> 11952 bytes .../static/src/img/pictures/uiface_05.jpg | Bin 0 -> 26256 bytes .../static/src/img/pictures/uiface_06.jpg | Bin 0 -> 5422 bytes .../static/src/img/pictures/uiface_07.jpg | Bin 0 -> 5474 bytes theme_durpro/static/src/js/tour.js | 49 + .../s_showcase_slider/000_variables.scss | 21 + .../static/src/scss/bootstrap_overridden.scss | 3 + .../static/src/scss/custom_styles.scss | 5 + .../static/src/scss/primary_variables.scss | 151 +++ .../static/src/scss/secondary_variables.scss | 9 + theme_durpro/views/customizations.xml | 295 ++++++ theme_durpro/views/images_library.xml | 333 ++++++ 206 files changed, 8229 insertions(+), 613 deletions(-) create mode 100644 bemade_documents_portal/__init__.py create mode 100644 bemade_documents_portal/__manifest__.py create mode 100644 bemade_documents_portal/controllers/__init__.py create mode 100644 bemade_documents_portal/controllers/portal.py create mode 100644 bemade_documents_portal/models/__init__.py create mode 100644 bemade_documents_portal/models/documents.py create mode 100644 bemade_documents_portal/views/document_portal_templates.xml create mode 100644 bemade_fsm/data/fsm_data.xml create mode 100644 bemade_fsm/i18n/fr.po create mode 100644 bemade_fsm/models/equipment_tag.py create mode 100644 bemade_fsm/models/equipment_type.py create mode 100644 bemade_fsm/models/fsm_visit.py create mode 100644 bemade_fsm/models/sale_order_line.py create mode 100644 bemade_fsm/reports/worksheet_custom_report_templates.xml create mode 100644 bemade_fsm/reports/worksheet_custom_reports.xml create mode 100644 bemade_fsm/reports/worksheet_templates.xml create mode 100644 bemade_fsm/static/src/scss/bemade_fsm.scss create mode 100644 bemade_fsm/static/tests/tours/sale_order_tour.js create mode 100644 bemade_fsm/tests/test_fsm_visit.py create mode 100644 bemade_geo_routing/__init__.py create mode 100644 bemade_geo_routing/__manifest__.py create mode 100644 bemade_geo_routing/models/__init__.py create mode 100644 bemade_geo_routing/models/bemade_geo_router.py create mode 100644 bemade_geo_routing/tests/__init__.py create mode 100644 bemade_geo_routing/tests/test_geo_router.py create mode 100644 bemade_helpdesk_one_ticket_per_email/__init__.py create mode 100644 bemade_helpdesk_one_ticket_per_email/__manifest__.py create mode 100644 bemade_helpdesk_one_ticket_per_email/models/__init__.py create mode 100644 bemade_helpdesk_one_ticket_per_email/models/mail_thread.py create mode 100644 bemade_margin_vendor_pricelist/__init__.py create mode 100644 bemade_margin_vendor_pricelist/__manifest__.py create mode 100644 bemade_margin_vendor_pricelist/i18n/bemade_margin_vendor_pricelist.pot create mode 100644 bemade_margin_vendor_pricelist/i18n/fr.po create mode 100644 bemade_margin_vendor_pricelist/models/__init__.py create mode 100644 bemade_margin_vendor_pricelist/models/sale_order.py create mode 100644 bemade_margin_vendor_pricelist/views/sale_order.xml create mode 100644 bemade_module_linker/__init__.py create mode 100644 bemade_module_linker/__manifest__.py create mode 100644 bemade_module_linker/models/__init__.py create mode 100644 bemade_module_linker/models/res_config_settings.py create mode 100644 bemade_module_linker/models/res_modules_link.py create mode 100644 bemade_module_linker/views/res_config_settings_views.xml create mode 100644 bemade_multiple_billing_contacts/views/account_move_views.xml create mode 100644 bemade_packing_wizard/__init__.py create mode 100644 bemade_packing_wizard/__manifest__.py create mode 100644 bemade_packing_wizard/models/__init__.py create mode 100644 bemade_packing_wizard/models/delivery_carrier.py create mode 100644 bemade_packing_wizard/models/stock_quant_package.py create mode 100644 bemade_packing_wizard/views/delivery_carrier_views.xml create mode 100644 bemade_packing_wizard/views/stock_package_views.xml create mode 100644 bemade_packing_wizard/wizard/__init__.py create mode 100644 bemade_packing_wizard/wizard/choose_delivery_package.py create mode 100644 bemade_packing_wizard/wizard/choose_delivery_package_views.xml create mode 100644 bemade_partner_email_domain/__init__.py create mode 100644 bemade_partner_email_domain/__manifest__.py create mode 100644 bemade_partner_email_domain/controllers/__init__.py create mode 100644 bemade_partner_email_domain/controllers/main.py create mode 100644 bemade_partner_email_domain/data/mail_template_data.xml create mode 100644 bemade_partner_email_domain/data/template_data.xml create mode 100644 bemade_partner_email_domain/i18n/fr_CA.po create mode 100644 bemade_partner_email_domain/models/__init__.py create mode 100644 bemade_partner_email_domain/models/res_partner.py create mode 100644 bemade_partner_email_domain/views/res_partner_views.xml create mode 100644 bemade_planning_travel/__init__.py create mode 100644 bemade_planning_travel/__manifest__.py create mode 100644 bemade_planning_travel/models/__init__.py create mode 100644 bemade_planning_travel/models/planning_slot.py create mode 100644 bemade_quotation_alternative/__init__.py create mode 100644 bemade_quotation_alternative/__manifest__.py create mode 100644 bemade_quotation_alternative/controllers/__init__.py create mode 100644 bemade_quotation_alternative/controllers/controllers.py create mode 100644 bemade_quotation_alternative/demo/demo.xml create mode 100644 bemade_quotation_alternative/models/__init__.py create mode 100644 bemade_quotation_alternative/models/models.py create mode 100644 bemade_quotation_alternative/models/sale_order.py create mode 100644 bemade_quotation_alternative/security/ir.model.access.csv create mode 100644 bemade_quotation_alternative/views/sale_order_views.xml create mode 100644 bemade_quotation_alternative/views/templates.xml create mode 100644 bemade_quotation_alternative/wizard/__init__.py create mode 100644 bemade_quotation_alternative/wizard/sale_order_alternative.py create mode 100644 bemade_quotation_alternative/wizard/sale_order_alternative_views.xml create mode 100644 bemade_sale_order_line_number/__manifest__.py create mode 100644 bemade_sale_order_line_number/views/sale_order_views.xml create mode 100644 bemade_stock_quant_valuation/__init__.py create mode 100644 bemade_stock_quant_valuation/__manifest__.py create mode 100644 bemade_stock_quant_valuation/models/__init__.py create mode 100644 bemade_stock_quant_valuation/models/stock_quant.py create mode 100644 bemade_stock_quant_valuation/views/stock_account_views.xml create mode 100644 bemade_update_validity_date_when_send_so/__init__.py create mode 100644 bemade_update_validity_date_when_send_so/__manifest__.py create mode 100644 bemade_update_validity_date_when_send_so/models/__init__.py create mode 100644 bemade_update_validity_date_when_send_so/models/sale_order.py create mode 100644 temporary_change_image_size/__manifest__.py create mode 100644 temporary_change_image_size/views/product_template_views.xml create mode 100644 theme_durpro/LICENSE create mode 100644 theme_durpro/__init__.py create mode 100644 theme_durpro/__manifest__.py create mode 100644 theme_durpro/data/ir_asset.xml create mode 100644 theme_durpro/i18n/de.po create mode 100644 theme_durpro/i18n/es.po create mode 100644 theme_durpro/i18n/fr.po create mode 100644 theme_durpro/i18n/it.po create mode 100644 theme_durpro/i18n/nl.po create mode 100644 theme_durpro/i18n/theme_graphene.pot create mode 100644 theme_durpro/i18n/zh_CN.po create mode 100644 theme_durpro/models/__init__.py create mode 100644 theme_durpro/models/theme_durpro.py create mode 100644 theme_durpro/static/description/durpro_poster.png create mode 100644 theme_durpro/static/description/durpro_screenshot.jpg create mode 100644 theme_durpro/static/description/index.html create mode 100644 theme_durpro/static/description/theme_durpro.svg create mode 100755 theme_durpro/static/src/img/patterns/bg_pattern_01.jpg create mode 100755 theme_durpro/static/src/img/patterns/bg_pattern_02.jpg create mode 100755 theme_durpro/static/src/img/patterns/bg_pattern_03.jpg create mode 100755 theme_durpro/static/src/img/patterns/bg_pattern_04.jpg create mode 100755 theme_durpro/static/src/img/patterns/bg_pattern_05.jpg create mode 100755 theme_durpro/static/src/img/patterns/bg_pattern_06.jpg create mode 100755 theme_durpro/static/src/img/pictures/bg_image_01.jpg create mode 100755 theme_durpro/static/src/img/pictures/bg_image_02.jpg create mode 100755 theme_durpro/static/src/img/pictures/bg_image_03.jpg create mode 100755 theme_durpro/static/src/img/pictures/bg_image_04.jpg create mode 100755 theme_durpro/static/src/img/pictures/bg_image_05.jpg create mode 100755 theme_durpro/static/src/img/pictures/bg_image_06.jpg create mode 100755 theme_durpro/static/src/img/pictures/bg_image_07.jpg create mode 100755 theme_durpro/static/src/img/pictures/bg_image_08.jpg create mode 100755 theme_durpro/static/src/img/pictures/bg_image_09.jpg create mode 100755 theme_durpro/static/src/img/pictures/bg_image_10.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_01.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_02.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_03.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_04.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_05.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_06.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_07.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_08.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_09.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_10.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_11.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_12.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_13.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_14.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_15.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_16.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_17.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_18.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_19.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_20.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_21.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_22.jpg create mode 100644 theme_durpro/static/src/img/pictures/content_23.jpg create mode 100644 theme_durpro/static/src/img/pictures/s_numbers.jpg create mode 100644 theme_durpro/static/src/img/pictures/s_popup.jpg create mode 100644 theme_durpro/static/src/img/pictures/uiface_01.jpg create mode 100644 theme_durpro/static/src/img/pictures/uiface_02.jpg create mode 100644 theme_durpro/static/src/img/pictures/uiface_03.jpg create mode 100644 theme_durpro/static/src/img/pictures/uiface_04.jpg create mode 100644 theme_durpro/static/src/img/pictures/uiface_05.jpg create mode 100644 theme_durpro/static/src/img/pictures/uiface_06.jpg create mode 100644 theme_durpro/static/src/img/pictures/uiface_07.jpg create mode 100644 theme_durpro/static/src/js/tour.js create mode 100644 theme_durpro/static/src/old_snippets/s_showcase_slider/000_variables.scss create mode 100644 theme_durpro/static/src/scss/bootstrap_overridden.scss create mode 100644 theme_durpro/static/src/scss/custom_styles.scss create mode 100644 theme_durpro/static/src/scss/primary_variables.scss create mode 100644 theme_durpro/static/src/scss/secondary_variables.scss create mode 100644 theme_durpro/views/customizations.xml create mode 100644 theme_durpro/views/images_library.xml diff --git a/README.md b/README.md index fea6c87..10389a3 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# bemade-addons Branch 16.0 +# bemade-addons Odoo Addons made by Bemade diff --git a/bemade_documents_portal/__init__.py b/bemade_documents_portal/__init__.py new file mode 100644 index 0000000..91c5580 --- /dev/null +++ b/bemade_documents_portal/__init__.py @@ -0,0 +1,2 @@ +from . import controllers +from . import models diff --git a/bemade_documents_portal/__manifest__.py b/bemade_documents_portal/__manifest__.py new file mode 100644 index 0000000..b5e503b --- /dev/null +++ b/bemade_documents_portal/__manifest__.py @@ -0,0 +1,32 @@ +# +# Bemade Inc. +# +# Copyright (C) September 2023 Bemade Inc. (). +# Author: Marc Durepos (Contact : marc@bemade.org) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the Software +# or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +{ + 'name': 'Documents Portal Base', + 'version': '15.0.1.0.0', + 'summary': 'Adds documents to the front-end portal.', + 'category': 'Document Management', + 'author': 'Bemade Inc.', + 'website': 'https://www.bemade.org', + 'license': 'OPL-1', + 'depends': ['documents', 'portal', 'mail_enterprise', 'im_livechat'], + 'data': ['views/document_portal_templates.xml'], + 'demo': [], + 'installable': True, + 'auto_install': False, +} diff --git a/bemade_documents_portal/controllers/__init__.py b/bemade_documents_portal/controllers/__init__.py new file mode 100644 index 0000000..8c3feb6 --- /dev/null +++ b/bemade_documents_portal/controllers/__init__.py @@ -0,0 +1 @@ +from . import portal diff --git a/bemade_documents_portal/controllers/portal.py b/bemade_documents_portal/controllers/portal.py new file mode 100644 index 0000000..b33fe63 --- /dev/null +++ b/bemade_documents_portal/controllers/portal.py @@ -0,0 +1,65 @@ +from odoo.addons.portal.controllers.portal import CustomerPortal +from odoo.http import request, route +from odoo.exceptions import AccessError, MissingError +from odoo import _ + + +class DocumentCustomerPortal(CustomerPortal): + + def _prepare_home_portal_values(self, counters): + rtn = super()._prepare_home_portal_values(counters) + domain = self._prepare_documents_domain() + rtn['documents_count'] = request.env['documents.document'].search_count(domain) + return rtn + + @route('/my/documents', type='http', auth='user', website=True) + def portal_my_documents(self, **kwargs): + values = self._prepare_portal_layout_values() + Documents = request.env['documents.document'] + domain = self._prepare_documents_domain() + documents_count = Documents.search_count(domain) + documents = Documents.search(domain) + values.update({ + 'documents_count': documents_count, + 'documents': documents.sudo(), + 'default_url': '/my/documents', + 'page_name': 'my_documents', + }) + return request.render("bemade_documents_portal.portal_my_documents", values) + + def _prepare_documents_domain(self): + partner = request.env.user.partner_id + user = request.env.user + """Helper method intended to be overridden for future modules.""" + return ['|', + ('partner_id', '=', partner.id), + ('owner_id', '=', user.id), + ] + + def _render_record_template(self, values): + """ Override this method to apply a different template for a single document + record on the portal. """ + return request.render("bemade_documents_portal.document_portal_template", values) + + @route('/my/documents/', type='http', auth='user', website=True) + def portal_document_page(self, document_id, download=False, **kwargs): + document = request.env['documents.document'].browse(document_id) + if not document: + raise MissingError(_('This document does not exist.')) + if download: + return self._download_attachment(document) + values={ + 'document': document, + 'page_name': 'my_documents', + 'action': document._get_portal_return_action(), + } + return self._render_record_template(values) + + def _download_attachment(self, document): + attachment = document.attachment_id + headers = [ + ('content-type', attachment.mimetype), + ('content-length', attachment.file_size), + ('content-disposition', f'attachment; filename="{document.name}"') + ] + return request.make_response(attachment.raw, headers) diff --git a/bemade_documents_portal/models/__init__.py b/bemade_documents_portal/models/__init__.py new file mode 100644 index 0000000..203b44a --- /dev/null +++ b/bemade_documents_portal/models/__init__.py @@ -0,0 +1 @@ +from . import documents diff --git a/bemade_documents_portal/models/documents.py b/bemade_documents_portal/models/documents.py new file mode 100644 index 0000000..adcef6a --- /dev/null +++ b/bemade_documents_portal/models/documents.py @@ -0,0 +1,17 @@ +from odoo import models, fields + + +class Document(models.Model): + _name = 'documents.document' + _inherit = ['documents.document', 'portal.mixin'] + + def _compute_access_url(self): + super()._compute_access_url() + for document in self: + document.access_url = f'/my/documents/{document.id}' + + def _get_portal_return_action(self): + """ Return the action used to display documents when returning from customer + portal.""" + self.ensure_one() + return self.env.ref('documents.document_action') \ No newline at end of file diff --git a/bemade_documents_portal/views/document_portal_templates.xml b/bemade_documents_portal/views/document_portal_templates.xml new file mode 100644 index 0000000..64fc142 --- /dev/null +++ b/bemade_documents_portal/views/document_portal_templates.xml @@ -0,0 +1,112 @@ + + + + + +