From dae32637bca4e444ce821c5e2ecb21b934cd3605 Mon Sep 17 00:00:00 2001 From: Mathieu Benoit Date: Mon, 13 Apr 2020 00:06:13 -0400 Subject: [PATCH] [IMP] Copy ERPLibre from https://github.com/mathbentech/InstallScript - Fix many script and support feature to fork project with organization --- .github/FUNDING.yml | 12 + .gitignore | 10 + .gitmodules | 255 +++++++++ HOWTO.md | 4 + README.md | 58 ++ addons/MathBenTech_development | 1 + ...business-spending-management-quebec-canada | 1 + addons/MathBenTech_scrummer | 1 + addons/Numigi_odoo-base-addons | 1 + addons/Numigi_odoo-entertainment-addons | 1 + addons/Numigi_odoo-git-addons | 1 + addons/Numigi_odoo-hr-addons | 1 + addons/Numigi_odoo-partner-addons | 1 + addons/Numigi_odoo-product-addons | 1 + addons/Numigi_odoo-project-addons | 1 + addons/Numigi_odoo-purchase-addons | 1 + addons/Numigi_odoo-stock-addons | 1 + addons/Numigi_odoo-survey-addons | 1 + addons/Numigi_odoo-timesheet-addons | 1 + addons/Numigi_odoo-web-addons | 1 + addons/OCA_account-analytic | 1 + addons/OCA_account-budgeting | 1 + addons/OCA_account-closing | 1 + addons/OCA_account-consolidation | 1 + addons/OCA_account-financial-reporting | 1 + addons/OCA_account-financial-tools | 1 + addons/OCA_account-fiscal-rule | 1 + addons/OCA_account-invoice-reporting | 1 + addons/OCA_account-invoicing | 1 + addons/OCA_account-payment | 1 + addons/OCA_account-reconcile | 1 + addons/OCA_apps-store | 1 + addons/OCA_bank-payment | 1 + addons/OCA_bank-statement-import | 1 + addons/OCA_brand | 1 + addons/OCA_business-requirement | 1 + addons/OCA_commission | 1 + addons/OCA_community-data-files | 1 + addons/OCA_connector-telephony | 1 + addons/OCA_contract | 1 + addons/OCA_credit-control | 1 + addons/OCA_currency | 1 + addons/OCA_data-protection | 1 + addons/OCA_donation | 1 + addons/OCA_e-commerce | 1 + addons/OCA_edi | 1 + addons/OCA_event | 1 + addons/OCA_helpdesk | 1 + addons/OCA_hr | 1 + addons/OCA_knowledge | 1 + addons/OCA_l10n-canada | 1 + addons/OCA_maintenance | 1 + addons/OCA_management-system | 1 + addons/OCA_manufacture | 1 + addons/OCA_margin-analysis | 1 + addons/OCA_mis-builder | 1 + addons/OCA_multi-company | 1 + addons/OCA_partner-contact | 1 + addons/OCA_pos | 1 + addons/OCA_product-attribute | 1 + addons/OCA_product-pack | 1 + addons/OCA_product-variant | 1 + addons/OCA_project | 1 + addons/OCA_project-reporting | 1 + addons/OCA_purchase-workflow | 1 + addons/OCA_queue | 1 + addons/OCA_reporting-engine | 1 + addons/OCA_sale-workflow | 1 + addons/OCA_server-auth | 1 + addons/OCA_server-brand | 1 + addons/OCA_server-env | 1 + addons/OCA_server-tools | 1 + addons/OCA_server-ux | 1 + addons/OCA_social | 1 + addons/OCA_stock-logistics-warehouse | 1 + addons/OCA_timesheet | 1 + addons/OCA_web | 1 + addons/OCA_website | 1 + addons/OCA_wms | 1 + addons/Smile-SA_odoo_addons | 1 + addons/addons/.gitkeep | 0 addons/addons/erplibre_base/__init__.py | 1 + addons/addons/erplibre_base/__manifest__.py | 40 ++ .../erplibre_base/static/description/icon.png | Bin 0 -> 89269 bytes .../static/description/index.html | 485 +++++++++++++++++ .../erplibre_base_enterprise/__init__.py | 1 + .../erplibre_base_enterprise/__manifest__.py | 84 +++ .../static/description/icon.png | Bin 0 -> 89269 bytes .../static/description/index.html | 485 +++++++++++++++++ .../erplibre_base_entreprise_mrp/__init__.py | 1 + .../__manifest__.py | 118 +++++ .../static/description/icon.png | Bin 0 -> 89269 bytes .../static/description/index.html | 485 +++++++++++++++++ .../addons/erplibre_base_hackaton/__init__.py | 1 + .../erplibre_base_hackaton/__manifest__.py | 73 +++ .../static/description/icon.png | Bin 0 -> 89269 bytes .../static/description/index.html | 485 +++++++++++++++++ .../__init__.py | 2 + .../__manifest__.py | 51 ++ .../i18n/fr_CA.po | 257 +++++++++ ...terprise_services_for_utility_business.pot | 224 ++++++++ addons/muk-it_muk_base | 1 + addons/muk-it_muk_dms | 1 + addons/muk-it_muk_docs | 1 + addons/muk-it_muk_misc | 1 + addons/muk-it_muk_quality | 1 + addons/muk-it_muk_web | 1 + addons/muk-it_muk_website | 1 + addons/odooaktiv_QuotationRevision | 1 + addons/openeducat_openeducat_erp | 1 + env_var.sh | 30 ++ odoo | 1 + requirements.txt | 5 + run.md | 5 + run.sh | 2 + script/__init__.py | 0 script/addons_repo_origin.py | 113 ++++ script/fork_github_repo/README.md | 4 + script/fork_github_repo/__init__.py | 273 ++++++++++ script/fork_project.py | 122 +++++ script/fork_project_ERPLibre.py | 108 ++++ script/git_change_remote.py | 136 +++++ script/git_change_remote_https_to_git.py | 70 +++ script/git_tool.py | 495 ++++++++++++++++++ script/list_repo_diff.py | 110 ++++ script/odoo_install_OSX_dependancy.sh | 52 ++ script/odoo_install_daemon.sh | 88 ++++ script/odoo_install_debian_dependancy.sh | 83 +++ script/odoo_install_dev.sh | 22 + script/odoo_install_locally.sh | 168 ++++++ script/odoo_install_production.sh | 56 ++ script/odoo_install_production_nginx.sh | 99 ++++ source_repo_addons_odoo.csv | 86 +++ 133 files changed, 5344 insertions(+) create mode 100644 .github/FUNDING.yml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 HOWTO.md create mode 100644 README.md create mode 160000 addons/MathBenTech_development create mode 160000 addons/MathBenTech_odoo-business-spending-management-quebec-canada create mode 160000 addons/MathBenTech_scrummer create mode 160000 addons/Numigi_odoo-base-addons create mode 160000 addons/Numigi_odoo-entertainment-addons create mode 160000 addons/Numigi_odoo-git-addons create mode 160000 addons/Numigi_odoo-hr-addons create mode 160000 addons/Numigi_odoo-partner-addons create mode 160000 addons/Numigi_odoo-product-addons create mode 160000 addons/Numigi_odoo-project-addons create mode 160000 addons/Numigi_odoo-purchase-addons create mode 160000 addons/Numigi_odoo-stock-addons create mode 160000 addons/Numigi_odoo-survey-addons create mode 160000 addons/Numigi_odoo-timesheet-addons create mode 160000 addons/Numigi_odoo-web-addons create mode 160000 addons/OCA_account-analytic create mode 160000 addons/OCA_account-budgeting create mode 160000 addons/OCA_account-closing create mode 160000 addons/OCA_account-consolidation create mode 160000 addons/OCA_account-financial-reporting create mode 160000 addons/OCA_account-financial-tools create mode 160000 addons/OCA_account-fiscal-rule create mode 160000 addons/OCA_account-invoice-reporting create mode 160000 addons/OCA_account-invoicing create mode 160000 addons/OCA_account-payment create mode 160000 addons/OCA_account-reconcile create mode 160000 addons/OCA_apps-store create mode 160000 addons/OCA_bank-payment create mode 160000 addons/OCA_bank-statement-import create mode 160000 addons/OCA_brand create mode 160000 addons/OCA_business-requirement create mode 160000 addons/OCA_commission create mode 160000 addons/OCA_community-data-files create mode 160000 addons/OCA_connector-telephony create mode 160000 addons/OCA_contract create mode 160000 addons/OCA_credit-control create mode 160000 addons/OCA_currency create mode 160000 addons/OCA_data-protection create mode 160000 addons/OCA_donation create mode 160000 addons/OCA_e-commerce create mode 160000 addons/OCA_edi create mode 160000 addons/OCA_event create mode 160000 addons/OCA_helpdesk create mode 160000 addons/OCA_hr create mode 160000 addons/OCA_knowledge create mode 160000 addons/OCA_l10n-canada create mode 160000 addons/OCA_maintenance create mode 160000 addons/OCA_management-system create mode 160000 addons/OCA_manufacture create mode 160000 addons/OCA_margin-analysis create mode 160000 addons/OCA_mis-builder create mode 160000 addons/OCA_multi-company create mode 160000 addons/OCA_partner-contact create mode 160000 addons/OCA_pos create mode 160000 addons/OCA_product-attribute create mode 160000 addons/OCA_product-pack create mode 160000 addons/OCA_product-variant create mode 160000 addons/OCA_project create mode 160000 addons/OCA_project-reporting create mode 160000 addons/OCA_purchase-workflow create mode 160000 addons/OCA_queue create mode 160000 addons/OCA_reporting-engine create mode 160000 addons/OCA_sale-workflow create mode 160000 addons/OCA_server-auth create mode 160000 addons/OCA_server-brand create mode 160000 addons/OCA_server-env create mode 160000 addons/OCA_server-tools create mode 160000 addons/OCA_server-ux create mode 160000 addons/OCA_social create mode 160000 addons/OCA_stock-logistics-warehouse create mode 160000 addons/OCA_timesheet create mode 160000 addons/OCA_web create mode 160000 addons/OCA_website create mode 160000 addons/OCA_wms create mode 160000 addons/Smile-SA_odoo_addons create mode 100644 addons/addons/.gitkeep create mode 100644 addons/addons/erplibre_base/__init__.py create mode 100644 addons/addons/erplibre_base/__manifest__.py create mode 100644 addons/addons/erplibre_base/static/description/icon.png create mode 100644 addons/addons/erplibre_base/static/description/index.html create mode 100644 addons/addons/erplibre_base_enterprise/__init__.py create mode 100644 addons/addons/erplibre_base_enterprise/__manifest__.py create mode 100644 addons/addons/erplibre_base_enterprise/static/description/icon.png create mode 100644 addons/addons/erplibre_base_enterprise/static/description/index.html create mode 100644 addons/addons/erplibre_base_entreprise_mrp/__init__.py create mode 100644 addons/addons/erplibre_base_entreprise_mrp/__manifest__.py create mode 100644 addons/addons/erplibre_base_entreprise_mrp/static/description/icon.png create mode 100644 addons/addons/erplibre_base_entreprise_mrp/static/description/index.html create mode 100644 addons/addons/erplibre_base_hackaton/__init__.py create mode 100644 addons/addons/erplibre_base_hackaton/__manifest__.py create mode 100644 addons/addons/erplibre_base_hackaton/static/description/icon.png create mode 100644 addons/addons/erplibre_base_hackaton/static/description/index.html create mode 100644 addons/addons/erplibre_enterprise_services_for_utility_business/__init__.py create mode 100644 addons/addons/erplibre_enterprise_services_for_utility_business/__manifest__.py create mode 100644 addons/addons/erplibre_enterprise_services_for_utility_business/i18n/fr_CA.po create mode 100644 addons/addons/erplibre_enterprise_services_for_utility_business/i18n/mathbentech_enterprise_services_for_utility_business.pot create mode 160000 addons/muk-it_muk_base create mode 160000 addons/muk-it_muk_dms create mode 160000 addons/muk-it_muk_docs create mode 160000 addons/muk-it_muk_misc create mode 160000 addons/muk-it_muk_quality create mode 160000 addons/muk-it_muk_web create mode 160000 addons/muk-it_muk_website create mode 160000 addons/odooaktiv_QuotationRevision create mode 160000 addons/openeducat_openeducat_erp create mode 100755 env_var.sh create mode 160000 odoo create mode 100644 requirements.txt create mode 100644 run.md create mode 100755 run.sh create mode 100644 script/__init__.py create mode 100644 script/addons_repo_origin.py create mode 100644 script/fork_github_repo/README.md create mode 100644 script/fork_github_repo/__init__.py create mode 100644 script/fork_project.py create mode 100644 script/fork_project_ERPLibre.py create mode 100755 script/git_change_remote.py create mode 100755 script/git_change_remote_https_to_git.py create mode 100644 script/git_tool.py create mode 100644 script/list_repo_diff.py create mode 100755 script/odoo_install_OSX_dependancy.sh create mode 100755 script/odoo_install_daemon.sh create mode 100755 script/odoo_install_debian_dependancy.sh create mode 100755 script/odoo_install_dev.sh create mode 100755 script/odoo_install_locally.sh create mode 100755 script/odoo_install_production.sh create mode 100755 script/odoo_install_production_nginx.sh create mode 100644 source_repo_addons_odoo.csv diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..1940626 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: mathben963 # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..04d387e --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +*~ +*.swp +*.tmp +*.bak +.idea +venv +*.log +config.conf +*.DS_Store +*.pyc diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..9fe9487 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,255 @@ +[submodule "addons/MathBenTech_development"] + url = https://github.com/ERPLibre/development.git + path = addons/MathBenTech_development +[submodule "addons/MathBenTech_odoo-business-spending-management-quebec-canada"] + url = https://github.com/ERPLibre/odoo-business-spending-management-quebec-canada.git + path = addons/MathBenTech_odoo-business-spending-management-quebec-canada +[submodule "addons/MathBenTech_scrummer"] + url = https://github.com/ERPLibre/scrummer.git + path = addons/MathBenTech_scrummer +[submodule "addons/muk-it_muk_base"] + url = https://github.com/ERPLibre/muk_base.git + path = addons/muk-it_muk_base +[submodule "addons/muk-it_muk_dms"] + url = https://github.com/ERPLibre/muk_dms.git + path = addons/muk-it_muk_dms +[submodule "addons/muk-it_muk_docs"] + url = https://github.com/ERPLibre/muk_docs.git + path = addons/muk-it_muk_docs +[submodule "addons/muk-it_muk_misc"] + url = https://github.com/ERPLibre/muk_misc.git + path = addons/muk-it_muk_misc +[submodule "addons/muk-it_muk_quality"] + url = https://github.com/ERPLibre/muk_quality.git + path = addons/muk-it_muk_quality +[submodule "addons/muk-it_muk_web"] + url = https://github.com/ERPLibre/muk_web.git + path = addons/muk-it_muk_web +[submodule "addons/muk-it_muk_website"] + url = https://github.com/ERPLibre/muk_website.git + path = addons/muk-it_muk_website +[submodule "addons/Numigi_odoo-base-addons"] + url = https://github.com/ERPLibre/odoo-base-addons.git + path = addons/Numigi_odoo-base-addons +[submodule "addons/Numigi_odoo-entertainment-addons"] + url = https://github.com/ERPLibre/odoo-entertainment-addons.git + path = addons/Numigi_odoo-entertainment-addons +[submodule "addons/Numigi_odoo-git-addons"] + url = https://github.com/ERPLibre/odoo-git-addons.git + path = addons/Numigi_odoo-git-addons +[submodule "addons/Numigi_odoo-hr-addons"] + url = https://github.com/ERPLibre/odoo-hr-addons.git + path = addons/Numigi_odoo-hr-addons +[submodule "addons/Numigi_odoo-partner-addons"] + url = https://github.com/ERPLibre/odoo-partner-addons.git + path = addons/Numigi_odoo-partner-addons +[submodule "addons/Numigi_odoo-product-addons"] + url = https://github.com/ERPLibre/odoo-product-addons.git + path = addons/Numigi_odoo-product-addons +[submodule "addons/Numigi_odoo-project-addons"] + url = https://github.com/ERPLibre/odoo-project-addons.git + path = addons/Numigi_odoo-project-addons +[submodule "addons/Numigi_odoo-purchase-addons"] + url = https://github.com/ERPLibre/odoo-purchase-addons.git + path = addons/Numigi_odoo-purchase-addons +[submodule "addons/Numigi_odoo-stock-addons"] + url = https://github.com/ERPLibre/odoo-stock-addons.git + path = addons/Numigi_odoo-stock-addons +[submodule "addons/Numigi_odoo-survey-addons"] + url = https://github.com/ERPLibre/odoo-survey-addons.git + path = addons/Numigi_odoo-survey-addons +[submodule "addons/Numigi_odoo-timesheet-addons"] + url = https://github.com/ERPLibre/odoo-timesheet-addons.git + path = addons/Numigi_odoo-timesheet-addons +[submodule "addons/Numigi_odoo-web-addons"] + url = https://github.com/ERPLibre/odoo-web-addons.git + path = addons/Numigi_odoo-web-addons +[submodule "addons/OCA_account-analytic"] + url = https://github.com/ERPLibre/account-analytic.git + path = addons/OCA_account-analytic +[submodule "addons/OCA_account-budgeting"] + url = https://github.com/ERPLibre/account-budgeting.git + path = addons/OCA_account-budgeting +[submodule "addons/OCA_account-closing"] + url = https://github.com/ERPLibre/account-closing.git + path = addons/OCA_account-closing +[submodule "addons/OCA_account-consolidation"] + url = https://github.com/ERPLibre/account-consolidation.git + path = addons/OCA_account-consolidation +[submodule "addons/OCA_account-financial-reporting"] + url = https://github.com/ERPLibre/account-financial-reporting.git + path = addons/OCA_account-financial-reporting +[submodule "addons/OCA_account-financial-tools"] + url = https://github.com/ERPLibre/account-financial-tools + path = addons/OCA_account-financial-tools +[submodule "addons/OCA_account-fiscal-rule"] + url = https://github.com/ERPLibre/account-fiscal-rule.git + path = addons/OCA_account-fiscal-rule +[submodule "addons/OCA_account-invoicing"] + url = https://github.com/ERPLibre/account-invoicing.git + path = addons/OCA_account-invoicing +[submodule "addons/OCA_account-invoice-reporting"] + url = https://github.com/ERPLibre/account-invoice-reporting.git + path = addons/OCA_account-invoice-reporting +[submodule "addons/OCA_account-payment"] + url = https://github.com/ERPLibre/account-payment.git + path = addons/OCA_account-payment +[submodule "addons/OCA_account-reconcile"] + url = https://github.com/ERPLibre/account-reconcile.git + path = addons/OCA_account-reconcile +[submodule "addons/OCA_apps-store"] + url = https://github.com/ERPLibre/apps-store.git + path = addons/OCA_apps-store +[submodule "addons/OCA_bank-payment"] + url = https://github.com/ERPLibre/bank-payment.git + path = addons/OCA_bank-payment +[submodule "addons/OCA_bank-statement-import"] + url = https://github.com/ERPLibre/bank-statement-import.git + path = addons/OCA_bank-statement-import +[submodule "addons/OCA_brand"] + url = https://github.com/ERPLibre/brand.git + path = addons/OCA_brand +[submodule "addons/OCA_business-requirement"] + url = https://github.com/ERPLibre/business-requirement.git + path = addons/OCA_business-requirement +[submodule "addons/OCA_commission"] + url = https://github.com/ERPLibre/commission.git + path = addons/OCA_commission +[submodule "addons/OCA_community-data-files"] + url = https://github.com/ERPLibre/community-data-files.git + path = addons/OCA_community-data-files +[submodule "addons/OCA_connector-telephony"] + url = https://github.com/ERPLibre/connector-telephony.git + path = addons/OCA_connector-telephony +[submodule "addons/OCA_contract"] + url = https://github.com/ERPLibre/contract.git + path = addons/OCA_contract +[submodule "addons/OCA_credit-control"] + url = https://github.com/ERPLibre/credit-control.git + path = addons/OCA_credit-control +[submodule "addons/OCA_currency"] + url = https://github.com/ERPLibre/currency.git + path = addons/OCA_currency +[submodule "addons/OCA_data-protection"] + url = https://github.com/ERPLibre/data-protection.git + path = addons/OCA_data-protection +[submodule "addons/OCA_donation"] + url = https://github.com/ERPLibre/donation.git + path = addons/OCA_donation +[submodule "addons/OCA_e-commerce"] + url = https://github.com/ERPLibre/e-commerce.git + path = addons/OCA_e-commerce +[submodule "addons/OCA_edi"] + url = https://github.com/ERPLibre/edi.git + path = addons/OCA_edi +[submodule "addons/OCA_event"] + url = https://github.com/ERPLibre/event.git + path = addons/OCA_event +[submodule "addons/OCA_helpdesk"] + url = https://github.com/ERPLibre/helpdesk.git + path = addons/OCA_helpdesk +[submodule "addons/OCA_hr"] + url = https://github.com/ERPLibre/hr.git + path = addons/OCA_hr +[submodule "addons/OCA_knowledge"] + url = https://github.com/ERPLibre/knowledge.git + path = addons/OCA_knowledge +[submodule "addons/OCA_l10n-canada"] + url = https://github.com/ERPLibre/l10n-canada.git + path = addons/OCA_l10n-canada +[submodule "addons/OCA_maintenance"] + url = https://github.com/ERPLibre/maintenance.git + path = addons/OCA_maintenance +[submodule "addons/OCA_management-system"] + url = https://github.com/ERPLibre/management-system.git + path = addons/OCA_management-system +[submodule "addons/OCA_manufacture"] + url = https://github.com/ERPLibre/manufacture.git + path = addons/OCA_manufacture +[submodule "addons/OCA_margin-analysis"] + url = https://github.com/ERPLibre/margin-analysis.git + path = addons/OCA_margin-analysis +[submodule "addons/OCA_mis-builder"] + url = https://github.com/ERPLibre/mis-builder.git + path = addons/OCA_mis-builder +[submodule "addons/OCA_multi-company"] + url = https://github.com/ERPLibre/multi-company.git + path = addons/OCA_multi-company +[submodule "addons/OCA_partner-contact"] + url = https://github.com/ERPLibre/partner-contact.git + path = addons/OCA_partner-contact +[submodule "addons/OCA_pos"] + url = https://github.com/ERPLibre/pos.git + path = addons/OCA_pos +[submodule "addons/OCA_product-attribute"] + url = https://github.com/ERPLibre/product-attribute.git + path = addons/OCA_product-attribute +[submodule "addons/OCA_product-pack"] + url = https://github.com/ERPLibre/product-pack.git + path = addons/OCA_product-pack +[submodule "addons/OCA_product-variant"] + url = https://github.com/ERPLibre/product-variant.git + path = addons/OCA_product-variant +[submodule "addons/OCA_project"] + url = https://github.com/ERPLibre/project.git + path = addons/OCA_project +[submodule "addons/OCA_project-reporting"] + url = https://github.com/ERPLibre/project-reporting.git + path = addons/OCA_project-reporting +[submodule "addons/OCA_purchase-workflow"] + url = https://github.com/ERPLibre/purchase-workflow.git + path = addons/OCA_purchase-workflow +[submodule "addons/OCA_queue"] + url = https://github.com/ERPLibre/queue.git + path = addons/OCA_queue +[submodule "addons/OCA_reporting-engine"] + url = https://github.com/ERPLibre/reporting-engine.git + path = addons/OCA_reporting-engine +[submodule "addons/OCA_sale-workflow"] + url = https://github.com/ERPLibre/sale-workflow.git + path = addons/OCA_sale-workflow +[submodule "addons/OCA_server-auth"] + url = https://github.com/ERPLibre/server-auth.git + path = addons/OCA_server-auth +[submodule "addons/OCA_server-brand"] + url = https://github.com/ERPLibre/server-brand.git + path = addons/OCA_server-brand +[submodule "addons/OCA_server-env"] + url = https://github.com/ERPLibre/server-env.git + path = addons/OCA_server-env +[submodule "addons/OCA_server-tools"] + url = https://github.com/ERPLibre/server-tools.git + path = addons/OCA_server-tools +[submodule "addons/OCA_server-ux"] + url = https://github.com/ERPLibre/server-ux.git + path = addons/OCA_server-ux +[submodule "addons/OCA_social"] + url = https://github.com/ERPLibre/social.git + path = addons/OCA_social +[submodule "addons/OCA_stock-logistics-warehouse"] + url = https://github.com/ERPLibre/stock-logistics-warehouse.git + path = addons/OCA_stock-logistics-warehouse +[submodule "addons/OCA_timesheet"] + url = https://github.com/ERPLibre/timesheet.git + path = addons/OCA_timesheet +[submodule "addons/OCA_web"] + url = https://github.com/ERPLibre/web.git + path = addons/OCA_web +[submodule "addons/OCA_website"] + url = https://github.com/ERPLibre/website.git + path = addons/OCA_website +[submodule "addons/OCA_wms"] + url = https://github.com/ERPLibre/wms.git + path = addons/OCA_wms +[submodule "addons/odooaktiv_QuotationRevision"] + url = https://github.com/ERPLibre/QuotationRevision.git + path = addons/odooaktiv_QuotationRevision +[submodule "addons/openeducat_openeducat_erp"] + url = https://github.com/ERPLibre/openeducat_erp.git + path = addons/openeducat_openeducat_erp +[submodule "addons/Smile-SA_odoo_addons"] + url = https://github.com/ERPLibre/odoo_addons.git + path = addons/Smile-SA_odoo_addons +[submodule "odoo"] + url = https://github.com/ERPLibre/odoo.git + path = odoo diff --git a/HOWTO.md b/HOWTO.md new file mode 100644 index 0000000..3bf0c31 --- /dev/null +++ b/HOWTO.md @@ -0,0 +1,4 @@ +# How to clone me + +First, +pip install -r requirements.txt diff --git a/README.md b/README.md new file mode 100644 index 0000000..d41b676 --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +# ERPLibre + +## Installation procedure production + +##### 1. Clone the project: +``` +git clone https://github.com/ERPLibre/ERPLibre.git +``` +##### 2. Modify the parameters +Modify the file env_var.sh for production installation. + +##### 3. Execute the script: +``` +sudo ./script/odoo_install_production.sh +``` + +## Installation procedure locally + +##### 1. Clone the project: +``` +git clone https://github.com/ERPLibre/ERPLibre.git +``` + +##### 2. Execute the script: +``` +sudo ./script/odoo_install_locally.sh +``` + +# Execution +## First run +``` +source ./venv/bin/activate +python odoo/odoo-bin -c config.conf --log-level debug +``` + +## Update all +Great idea to run it when update Odoo, update database of each modules. +``` +python odoo/odoo-bin -c config.conf -d [DATABASE] -u all --log-level debug +``` + +## Update module +``` +python odoo/odoo-bin -c config.conf -d [DATABASE] -u [module] --log-level debug +``` + +## Test +``` +python odoo/odoo-bin -c config.conf -d [DATABASE] -i [module to test] --test-enable --stop-after-init --log-level=test --test-tags [module_name][tags] +``` + +# Production +``` +python odoo/odoo-bin -c config.conf -d [DATABASE] --no-database-list +``` + +# Thanks +Thanks Yenthe Van Ginneken for your guides. \ No newline at end of file diff --git a/addons/MathBenTech_development b/addons/MathBenTech_development new file mode 160000 index 0000000..097a500 --- /dev/null +++ b/addons/MathBenTech_development @@ -0,0 +1 @@ +Subproject commit 097a5002dd6ec91512406f3add8bb7cad5372218 diff --git a/addons/MathBenTech_odoo-business-spending-management-quebec-canada b/addons/MathBenTech_odoo-business-spending-management-quebec-canada new file mode 160000 index 0000000..b295952 --- /dev/null +++ b/addons/MathBenTech_odoo-business-spending-management-quebec-canada @@ -0,0 +1 @@ +Subproject commit b295952e5c108833477b3c96b5f84a782f9015bc diff --git a/addons/MathBenTech_scrummer b/addons/MathBenTech_scrummer new file mode 160000 index 0000000..9cb9fc4 --- /dev/null +++ b/addons/MathBenTech_scrummer @@ -0,0 +1 @@ +Subproject commit 9cb9fc437c28f8c4386e0025e853b18911d174d6 diff --git a/addons/Numigi_odoo-base-addons b/addons/Numigi_odoo-base-addons new file mode 160000 index 0000000..60bc1e5 --- /dev/null +++ b/addons/Numigi_odoo-base-addons @@ -0,0 +1 @@ +Subproject commit 60bc1e5414ff3bf81a6d72831da2eaad94ccbcb2 diff --git a/addons/Numigi_odoo-entertainment-addons b/addons/Numigi_odoo-entertainment-addons new file mode 160000 index 0000000..82c3325 --- /dev/null +++ b/addons/Numigi_odoo-entertainment-addons @@ -0,0 +1 @@ +Subproject commit 82c33255261eff361a91da13b28e4e68a95b25dd diff --git a/addons/Numigi_odoo-git-addons b/addons/Numigi_odoo-git-addons new file mode 160000 index 0000000..96db417 --- /dev/null +++ b/addons/Numigi_odoo-git-addons @@ -0,0 +1 @@ +Subproject commit 96db417669a631877c1439f617ac8c0cc6edfff9 diff --git a/addons/Numigi_odoo-hr-addons b/addons/Numigi_odoo-hr-addons new file mode 160000 index 0000000..0034395 --- /dev/null +++ b/addons/Numigi_odoo-hr-addons @@ -0,0 +1 @@ +Subproject commit 0034395bcdb38c02749644607f43ccac760dfb49 diff --git a/addons/Numigi_odoo-partner-addons b/addons/Numigi_odoo-partner-addons new file mode 160000 index 0000000..f0c54ff --- /dev/null +++ b/addons/Numigi_odoo-partner-addons @@ -0,0 +1 @@ +Subproject commit f0c54ffb3409cd8e748ae5db19077c7c966cd57f diff --git a/addons/Numigi_odoo-product-addons b/addons/Numigi_odoo-product-addons new file mode 160000 index 0000000..36751bd --- /dev/null +++ b/addons/Numigi_odoo-product-addons @@ -0,0 +1 @@ +Subproject commit 36751bd3c6baced6a0b3f5ddb675d87cb04a745c diff --git a/addons/Numigi_odoo-project-addons b/addons/Numigi_odoo-project-addons new file mode 160000 index 0000000..4388a4c --- /dev/null +++ b/addons/Numigi_odoo-project-addons @@ -0,0 +1 @@ +Subproject commit 4388a4ca61b87032e2c3783dc2740b299cd31b6f diff --git a/addons/Numigi_odoo-purchase-addons b/addons/Numigi_odoo-purchase-addons new file mode 160000 index 0000000..5d226ca --- /dev/null +++ b/addons/Numigi_odoo-purchase-addons @@ -0,0 +1 @@ +Subproject commit 5d226ca3887c77e31467a192a0fbe4066bf7842c diff --git a/addons/Numigi_odoo-stock-addons b/addons/Numigi_odoo-stock-addons new file mode 160000 index 0000000..3fe57c3 --- /dev/null +++ b/addons/Numigi_odoo-stock-addons @@ -0,0 +1 @@ +Subproject commit 3fe57c3cad122d5a448239b46fda8bf76ea32493 diff --git a/addons/Numigi_odoo-survey-addons b/addons/Numigi_odoo-survey-addons new file mode 160000 index 0000000..9e897ba --- /dev/null +++ b/addons/Numigi_odoo-survey-addons @@ -0,0 +1 @@ +Subproject commit 9e897bae38ff0d6d3180296a552d994bb10c0eff diff --git a/addons/Numigi_odoo-timesheet-addons b/addons/Numigi_odoo-timesheet-addons new file mode 160000 index 0000000..d2bbb19 --- /dev/null +++ b/addons/Numigi_odoo-timesheet-addons @@ -0,0 +1 @@ +Subproject commit d2bbb19dc8f917272694ff0a6231275083fb7e74 diff --git a/addons/Numigi_odoo-web-addons b/addons/Numigi_odoo-web-addons new file mode 160000 index 0000000..3a4aa46 --- /dev/null +++ b/addons/Numigi_odoo-web-addons @@ -0,0 +1 @@ +Subproject commit 3a4aa46439a794429d5939cff561f42c4f312a99 diff --git a/addons/OCA_account-analytic b/addons/OCA_account-analytic new file mode 160000 index 0000000..7ce9fe2 --- /dev/null +++ b/addons/OCA_account-analytic @@ -0,0 +1 @@ +Subproject commit 7ce9fe25a7c977c5338001bc32d58b1cadffe51e diff --git a/addons/OCA_account-budgeting b/addons/OCA_account-budgeting new file mode 160000 index 0000000..e175ffa --- /dev/null +++ b/addons/OCA_account-budgeting @@ -0,0 +1 @@ +Subproject commit e175ffa84fb61f70de67a2732292e43bd490cefd diff --git a/addons/OCA_account-closing b/addons/OCA_account-closing new file mode 160000 index 0000000..40d40c7 --- /dev/null +++ b/addons/OCA_account-closing @@ -0,0 +1 @@ +Subproject commit 40d40c73574bf65c91c879e0607b4ac455df06b2 diff --git a/addons/OCA_account-consolidation b/addons/OCA_account-consolidation new file mode 160000 index 0000000..741fc50 --- /dev/null +++ b/addons/OCA_account-consolidation @@ -0,0 +1 @@ +Subproject commit 741fc50366bd70fceb88a2a3fcb0449b2582ed31 diff --git a/addons/OCA_account-financial-reporting b/addons/OCA_account-financial-reporting new file mode 160000 index 0000000..1e0f830 --- /dev/null +++ b/addons/OCA_account-financial-reporting @@ -0,0 +1 @@ +Subproject commit 1e0f8301ca015b3c4c456401bc30c5f211ccae3f diff --git a/addons/OCA_account-financial-tools b/addons/OCA_account-financial-tools new file mode 160000 index 0000000..9721abd --- /dev/null +++ b/addons/OCA_account-financial-tools @@ -0,0 +1 @@ +Subproject commit 9721abd4c9db653e1d009f8a023e9f750523989f diff --git a/addons/OCA_account-fiscal-rule b/addons/OCA_account-fiscal-rule new file mode 160000 index 0000000..f396ba6 --- /dev/null +++ b/addons/OCA_account-fiscal-rule @@ -0,0 +1 @@ +Subproject commit f396ba6a2e2acebaaff579f0e6991b669812d64d diff --git a/addons/OCA_account-invoice-reporting b/addons/OCA_account-invoice-reporting new file mode 160000 index 0000000..320dd9f --- /dev/null +++ b/addons/OCA_account-invoice-reporting @@ -0,0 +1 @@ +Subproject commit 320dd9fce4d212b2dcf5dc4447494964ad1e246d diff --git a/addons/OCA_account-invoicing b/addons/OCA_account-invoicing new file mode 160000 index 0000000..9db1c10 --- /dev/null +++ b/addons/OCA_account-invoicing @@ -0,0 +1 @@ +Subproject commit 9db1c104341f422b8545c3f2906d83bcb69d46ac diff --git a/addons/OCA_account-payment b/addons/OCA_account-payment new file mode 160000 index 0000000..888debe --- /dev/null +++ b/addons/OCA_account-payment @@ -0,0 +1 @@ +Subproject commit 888debebd8e42c1ee5107577ca2f3bc5f38d72e1 diff --git a/addons/OCA_account-reconcile b/addons/OCA_account-reconcile new file mode 160000 index 0000000..0390b11 --- /dev/null +++ b/addons/OCA_account-reconcile @@ -0,0 +1 @@ +Subproject commit 0390b112def3d362d95232d382317511616ee6dd diff --git a/addons/OCA_apps-store b/addons/OCA_apps-store new file mode 160000 index 0000000..022d24d --- /dev/null +++ b/addons/OCA_apps-store @@ -0,0 +1 @@ +Subproject commit 022d24db4c6463f38b9f4452fe03c9fb8b3a44ce diff --git a/addons/OCA_bank-payment b/addons/OCA_bank-payment new file mode 160000 index 0000000..7e0e572 --- /dev/null +++ b/addons/OCA_bank-payment @@ -0,0 +1 @@ +Subproject commit 7e0e572fb4772c8ebacfe52d58c396bdbd9e01f9 diff --git a/addons/OCA_bank-statement-import b/addons/OCA_bank-statement-import new file mode 160000 index 0000000..1983065 --- /dev/null +++ b/addons/OCA_bank-statement-import @@ -0,0 +1 @@ +Subproject commit 198306503b51371c8603fd8defef65fcd82bf954 diff --git a/addons/OCA_brand b/addons/OCA_brand new file mode 160000 index 0000000..601a8c5 --- /dev/null +++ b/addons/OCA_brand @@ -0,0 +1 @@ +Subproject commit 601a8c5c741b3035000f2337feab16325e6b9a49 diff --git a/addons/OCA_business-requirement b/addons/OCA_business-requirement new file mode 160000 index 0000000..dd74e74 --- /dev/null +++ b/addons/OCA_business-requirement @@ -0,0 +1 @@ +Subproject commit dd74e74583861b44c6120473ba0b56c90b887334 diff --git a/addons/OCA_commission b/addons/OCA_commission new file mode 160000 index 0000000..e679120 --- /dev/null +++ b/addons/OCA_commission @@ -0,0 +1 @@ +Subproject commit e679120a6d8f910cba81d949ecddd7b89f48fc01 diff --git a/addons/OCA_community-data-files b/addons/OCA_community-data-files new file mode 160000 index 0000000..2b17e55 --- /dev/null +++ b/addons/OCA_community-data-files @@ -0,0 +1 @@ +Subproject commit 2b17e5567d1bcb8ca377268615f209fdd57dc66e diff --git a/addons/OCA_connector-telephony b/addons/OCA_connector-telephony new file mode 160000 index 0000000..6d9df10 --- /dev/null +++ b/addons/OCA_connector-telephony @@ -0,0 +1 @@ +Subproject commit 6d9df1037a97dbf791a7f0a717846a63144174bb diff --git a/addons/OCA_contract b/addons/OCA_contract new file mode 160000 index 0000000..3e53134 --- /dev/null +++ b/addons/OCA_contract @@ -0,0 +1 @@ +Subproject commit 3e531348cb51aeb2cc16c16ab8a2b693756ba47f diff --git a/addons/OCA_credit-control b/addons/OCA_credit-control new file mode 160000 index 0000000..a97496a --- /dev/null +++ b/addons/OCA_credit-control @@ -0,0 +1 @@ +Subproject commit a97496a829cadc0d9be07d7825e93062417ab670 diff --git a/addons/OCA_currency b/addons/OCA_currency new file mode 160000 index 0000000..5c0d54e --- /dev/null +++ b/addons/OCA_currency @@ -0,0 +1 @@ +Subproject commit 5c0d54e37789ecc24bebbe53fa56a92a492575bb diff --git a/addons/OCA_data-protection b/addons/OCA_data-protection new file mode 160000 index 0000000..ce4f334 --- /dev/null +++ b/addons/OCA_data-protection @@ -0,0 +1 @@ +Subproject commit ce4f334a1077b5c15d457f22daaa48b9f639409e diff --git a/addons/OCA_donation b/addons/OCA_donation new file mode 160000 index 0000000..aa6478a --- /dev/null +++ b/addons/OCA_donation @@ -0,0 +1 @@ +Subproject commit aa6478a72c9673ad6458de19aa2362397c613fae diff --git a/addons/OCA_e-commerce b/addons/OCA_e-commerce new file mode 160000 index 0000000..d7c99e5 --- /dev/null +++ b/addons/OCA_e-commerce @@ -0,0 +1 @@ +Subproject commit d7c99e565f25b495b3c0d252f181d8df4490a757 diff --git a/addons/OCA_edi b/addons/OCA_edi new file mode 160000 index 0000000..742b131 --- /dev/null +++ b/addons/OCA_edi @@ -0,0 +1 @@ +Subproject commit 742b1316773f8a1b224e42c65c3c3a7685481a30 diff --git a/addons/OCA_event b/addons/OCA_event new file mode 160000 index 0000000..e2bdf12 --- /dev/null +++ b/addons/OCA_event @@ -0,0 +1 @@ +Subproject commit e2bdf12c61e9967eeb9abc618c79ca43b464ea7f diff --git a/addons/OCA_helpdesk b/addons/OCA_helpdesk new file mode 160000 index 0000000..b53696d --- /dev/null +++ b/addons/OCA_helpdesk @@ -0,0 +1 @@ +Subproject commit b53696d21efbda2ae9ca97bcd529e89d79e3efb4 diff --git a/addons/OCA_hr b/addons/OCA_hr new file mode 160000 index 0000000..4743acf --- /dev/null +++ b/addons/OCA_hr @@ -0,0 +1 @@ +Subproject commit 4743acf7ab796ea3738743a44c62cd516126ec53 diff --git a/addons/OCA_knowledge b/addons/OCA_knowledge new file mode 160000 index 0000000..9ae45f7 --- /dev/null +++ b/addons/OCA_knowledge @@ -0,0 +1 @@ +Subproject commit 9ae45f798bbefa854b03f612e22291ac1b95568d diff --git a/addons/OCA_l10n-canada b/addons/OCA_l10n-canada new file mode 160000 index 0000000..5680b48 --- /dev/null +++ b/addons/OCA_l10n-canada @@ -0,0 +1 @@ +Subproject commit 5680b485cdfa0b6f1c2f4e32356b5938a9752c00 diff --git a/addons/OCA_maintenance b/addons/OCA_maintenance new file mode 160000 index 0000000..4e521ec --- /dev/null +++ b/addons/OCA_maintenance @@ -0,0 +1 @@ +Subproject commit 4e521ec35f6e8b66f86a62db644dadc9206b476e diff --git a/addons/OCA_management-system b/addons/OCA_management-system new file mode 160000 index 0000000..479afcc --- /dev/null +++ b/addons/OCA_management-system @@ -0,0 +1 @@ +Subproject commit 479afcc65ee29530e2bcaa7342f93b6783d14d97 diff --git a/addons/OCA_manufacture b/addons/OCA_manufacture new file mode 160000 index 0000000..ce36844 --- /dev/null +++ b/addons/OCA_manufacture @@ -0,0 +1 @@ +Subproject commit ce36844281754a75b527c4ace21837c8a16b75ab diff --git a/addons/OCA_margin-analysis b/addons/OCA_margin-analysis new file mode 160000 index 0000000..4a50437 --- /dev/null +++ b/addons/OCA_margin-analysis @@ -0,0 +1 @@ +Subproject commit 4a50437ecfa591a72e12255448d38d0fb1037a42 diff --git a/addons/OCA_mis-builder b/addons/OCA_mis-builder new file mode 160000 index 0000000..5d76972 --- /dev/null +++ b/addons/OCA_mis-builder @@ -0,0 +1 @@ +Subproject commit 5d7697296ad90794599373940e6fc6cead8ca1a2 diff --git a/addons/OCA_multi-company b/addons/OCA_multi-company new file mode 160000 index 0000000..fdb4d25 --- /dev/null +++ b/addons/OCA_multi-company @@ -0,0 +1 @@ +Subproject commit fdb4d255b6a3b51925f8a226bfebf2eccabd2786 diff --git a/addons/OCA_partner-contact b/addons/OCA_partner-contact new file mode 160000 index 0000000..a79e576 --- /dev/null +++ b/addons/OCA_partner-contact @@ -0,0 +1 @@ +Subproject commit a79e57685caad7d0dec9318378fdd46862e31be4 diff --git a/addons/OCA_pos b/addons/OCA_pos new file mode 160000 index 0000000..6a922b3 --- /dev/null +++ b/addons/OCA_pos @@ -0,0 +1 @@ +Subproject commit 6a922b3d87491d59128a097f286be1e3f3fc11df diff --git a/addons/OCA_product-attribute b/addons/OCA_product-attribute new file mode 160000 index 0000000..ea48097 --- /dev/null +++ b/addons/OCA_product-attribute @@ -0,0 +1 @@ +Subproject commit ea48097094462e67d7e1558b333da78c6038b89c diff --git a/addons/OCA_product-pack b/addons/OCA_product-pack new file mode 160000 index 0000000..b9eccbd --- /dev/null +++ b/addons/OCA_product-pack @@ -0,0 +1 @@ +Subproject commit b9eccbdb9ae0fdd3ed1138270c3eff3142a015c3 diff --git a/addons/OCA_product-variant b/addons/OCA_product-variant new file mode 160000 index 0000000..fb4f404 --- /dev/null +++ b/addons/OCA_product-variant @@ -0,0 +1 @@ +Subproject commit fb4f4042b3ca0ee6cde6ab0625e2c914b96b174f diff --git a/addons/OCA_project b/addons/OCA_project new file mode 160000 index 0000000..4390f1f --- /dev/null +++ b/addons/OCA_project @@ -0,0 +1 @@ +Subproject commit 4390f1ffa9f00058b0d1aa7fae27fb74bbefb83b diff --git a/addons/OCA_project-reporting b/addons/OCA_project-reporting new file mode 160000 index 0000000..7f71f08 --- /dev/null +++ b/addons/OCA_project-reporting @@ -0,0 +1 @@ +Subproject commit 7f71f086dd732170e7605dfdf80e6cc4969a711e diff --git a/addons/OCA_purchase-workflow b/addons/OCA_purchase-workflow new file mode 160000 index 0000000..d174367 --- /dev/null +++ b/addons/OCA_purchase-workflow @@ -0,0 +1 @@ +Subproject commit d17436791bcfbe0985af137163564af3fe90bbe1 diff --git a/addons/OCA_queue b/addons/OCA_queue new file mode 160000 index 0000000..0b71a39 --- /dev/null +++ b/addons/OCA_queue @@ -0,0 +1 @@ +Subproject commit 0b71a3951b583f154f170adacf4920e6d7138329 diff --git a/addons/OCA_reporting-engine b/addons/OCA_reporting-engine new file mode 160000 index 0000000..14fba65 --- /dev/null +++ b/addons/OCA_reporting-engine @@ -0,0 +1 @@ +Subproject commit 14fba657a0dbda1258edcf3c92886866e7cecf67 diff --git a/addons/OCA_sale-workflow b/addons/OCA_sale-workflow new file mode 160000 index 0000000..4b20035 --- /dev/null +++ b/addons/OCA_sale-workflow @@ -0,0 +1 @@ +Subproject commit 4b200358312689d944aaaf012c5723bb2bc9cb77 diff --git a/addons/OCA_server-auth b/addons/OCA_server-auth new file mode 160000 index 0000000..f911c9f --- /dev/null +++ b/addons/OCA_server-auth @@ -0,0 +1 @@ +Subproject commit f911c9f31a064cca3012431b70e60a7b89448138 diff --git a/addons/OCA_server-brand b/addons/OCA_server-brand new file mode 160000 index 0000000..d8f27b0 --- /dev/null +++ b/addons/OCA_server-brand @@ -0,0 +1 @@ +Subproject commit d8f27b04475d3cc74a7bebb1e086f647f5e01569 diff --git a/addons/OCA_server-env b/addons/OCA_server-env new file mode 160000 index 0000000..19af535 --- /dev/null +++ b/addons/OCA_server-env @@ -0,0 +1 @@ +Subproject commit 19af535b3aedd5c1fdfbe911dacfc43ae31edb71 diff --git a/addons/OCA_server-tools b/addons/OCA_server-tools new file mode 160000 index 0000000..d97aaa9 --- /dev/null +++ b/addons/OCA_server-tools @@ -0,0 +1 @@ +Subproject commit d97aaa9fa2f01f64ebf7100668e0901fde35d42f diff --git a/addons/OCA_server-ux b/addons/OCA_server-ux new file mode 160000 index 0000000..655b3cc --- /dev/null +++ b/addons/OCA_server-ux @@ -0,0 +1 @@ +Subproject commit 655b3cc291a7e3718371a45ebe6f2e0952896adf diff --git a/addons/OCA_social b/addons/OCA_social new file mode 160000 index 0000000..7b0836b --- /dev/null +++ b/addons/OCA_social @@ -0,0 +1 @@ +Subproject commit 7b0836bf7a5c40db332dd90d5ebef619234060ac diff --git a/addons/OCA_stock-logistics-warehouse b/addons/OCA_stock-logistics-warehouse new file mode 160000 index 0000000..a591de1 --- /dev/null +++ b/addons/OCA_stock-logistics-warehouse @@ -0,0 +1 @@ +Subproject commit a591de15150f7b16c1ef23d2fc30c814874dea27 diff --git a/addons/OCA_timesheet b/addons/OCA_timesheet new file mode 160000 index 0000000..8625e65 --- /dev/null +++ b/addons/OCA_timesheet @@ -0,0 +1 @@ +Subproject commit 8625e65414801780c91e91bf93b2ed32567f8117 diff --git a/addons/OCA_web b/addons/OCA_web new file mode 160000 index 0000000..b65c492 --- /dev/null +++ b/addons/OCA_web @@ -0,0 +1 @@ +Subproject commit b65c492f4011fe4e9dac8c0a26eeef8c43cb1c39 diff --git a/addons/OCA_website b/addons/OCA_website new file mode 160000 index 0000000..ee5daaa --- /dev/null +++ b/addons/OCA_website @@ -0,0 +1 @@ +Subproject commit ee5daaa970e8e98c940d687b39a9edfb7ed8859b diff --git a/addons/OCA_wms b/addons/OCA_wms new file mode 160000 index 0000000..e7a1541 --- /dev/null +++ b/addons/OCA_wms @@ -0,0 +1 @@ +Subproject commit e7a1541f8c513cf755bd82780c6c035d2fafc2ce diff --git a/addons/Smile-SA_odoo_addons b/addons/Smile-SA_odoo_addons new file mode 160000 index 0000000..2be318c --- /dev/null +++ b/addons/Smile-SA_odoo_addons @@ -0,0 +1 @@ +Subproject commit 2be318c18ac5b0fe2129cc61d86419033ff07d5f diff --git a/addons/addons/.gitkeep b/addons/addons/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/addons/addons/erplibre_base/__init__.py b/addons/addons/erplibre_base/__init__.py new file mode 100644 index 0000000..ef5ae35 --- /dev/null +++ b/addons/addons/erplibre_base/__init__.py @@ -0,0 +1 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). diff --git a/addons/addons/erplibre_base/__manifest__.py b/addons/addons/erplibre_base/__manifest__.py new file mode 100644 index 0000000..8c98323 --- /dev/null +++ b/addons/addons/erplibre_base/__manifest__.py @@ -0,0 +1,40 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'ERPLibre base', + 'version': '0.1', + 'author': "ERPLibre", + 'website': 'https://erplibre.ca', + 'license': 'AGPL-3', + 'category': 'Human Resources', + 'summary': 'INSTALL my base', + 'description': """ +ERPLibreBase +=============== + +""", + 'depends': [ + # Custom ERPLibre + # OCA + 'web_responsive', + + # OCA server-brand + 'disable_odoo_online', + 'remove_odoo_enterprise', + + # OCA website + 'website_odoo_debranding', + 'website_no_crawler', + + # Server-tools + 'fetchmail_notify_error_to_sender', + + # Social + 'mail_debrand', + + # Partner + 'partner_quebec_tz', + ], + 'data': [], + 'installable': True, +} diff --git a/addons/addons/erplibre_base/static/description/icon.png b/addons/addons/erplibre_base/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8489202f7f94c25eea121dda416baf4df6cdee79 GIT binary patch literal 89269 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®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 literal 0 HcmV?d00001 diff --git a/addons/addons/erplibre_base/static/description/index.html b/addons/addons/erplibre_base/static/description/index.html new file mode 100644 index 0000000..ff5d662 --- /dev/null +++ b/addons/addons/erplibre_base/static/description/index.html @@ -0,0 +1,485 @@ + + + + + + MathBenTechBase + + + +
+

MathBenTechBase

+ + +
+

Credits

+
+

Authors

+
    +
  • MathBenTech
  • +
+
+
+

Contributors

+ +
+
+
+ + diff --git a/addons/addons/erplibre_base_enterprise/__init__.py b/addons/addons/erplibre_base_enterprise/__init__.py new file mode 100644 index 0000000..ef5ae35 --- /dev/null +++ b/addons/addons/erplibre_base_enterprise/__init__.py @@ -0,0 +1 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). diff --git a/addons/addons/erplibre_base_enterprise/__manifest__.py b/addons/addons/erplibre_base_enterprise/__manifest__.py new file mode 100644 index 0000000..3d1999f --- /dev/null +++ b/addons/addons/erplibre_base_enterprise/__manifest__.py @@ -0,0 +1,84 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'ERPLibre base enterprise', + 'version': '0.1', + 'author': "ERPLibre", + 'website': 'https://erplibre.ca', + 'license': 'AGPL-3', + 'category': 'Human Resources', + 'summary': 'INSTALL my base enterprise', + 'description': """ +ERPLibreBase +=============== + +""", + 'depends': [ + # Custom ERPLibre + 'erplibre_base', + + 'hr_expense_associate_with_customer', + 'hr_expense_tip', + + 'sale_order_line_limit', + + 'res_partner_fix_group_by_company', + 'configure_quebec_tax', + 'crm_filter_all', + 'sale_degroup_tax', + + 'helpdesk_mailing_list', + + # Odoo base + 'account', + + 'board', + + 'contacts', + + 'crm', + + 'portal', + + 'payment', + 'payment_transfer', + + 'project', + + 'purchase', + + 'hr', + 'hr_expense', + 'hr_org_chart', + + 'website', + 'website_crm', + + 'sale', + 'sale_management', + 'stock', + + # OCA + 'website_form_builder', + 'website_snippet_anchor', + 'partner_no_vat', + + # Numigi + 'project_chatter', + # 'project_iteration', + + # Canada + 'l10n_ca', + + # Scrummer + 'project_agile_sale_timesheet', + 'scrummer', + 'scrummer_kanban', + 'scrummer_scrum', + 'scrummer_workflow_security', + 'scrummer_workflow_transition_by_project', + 'scrummer_workflow_transitions_by_task_type', + ], + 'data': [], + 'installable': True, +} diff --git a/addons/addons/erplibre_base_enterprise/static/description/icon.png b/addons/addons/erplibre_base_enterprise/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8489202f7f94c25eea121dda416baf4df6cdee79 GIT binary patch literal 89269 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®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 literal 0 HcmV?d00001 diff --git a/addons/addons/erplibre_base_enterprise/static/description/index.html b/addons/addons/erplibre_base_enterprise/static/description/index.html new file mode 100644 index 0000000..d9f321d --- /dev/null +++ b/addons/addons/erplibre_base_enterprise/static/description/index.html @@ -0,0 +1,485 @@ + + + + + + MathBenTechBaseEnterprise + + + +
+

MathBenTechBaseEnterprise

+ + +
+

Credits

+
+

Authors

+
    +
  • MathBenTech
  • +
+
+
+

Contributors

+ +
+
+
+ + diff --git a/addons/addons/erplibre_base_entreprise_mrp/__init__.py b/addons/addons/erplibre_base_entreprise_mrp/__init__.py new file mode 100644 index 0000000..ef5ae35 --- /dev/null +++ b/addons/addons/erplibre_base_entreprise_mrp/__init__.py @@ -0,0 +1 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). diff --git a/addons/addons/erplibre_base_entreprise_mrp/__manifest__.py b/addons/addons/erplibre_base_entreprise_mrp/__manifest__.py new file mode 100644 index 0000000..e7c3f7a --- /dev/null +++ b/addons/addons/erplibre_base_entreprise_mrp/__manifest__.py @@ -0,0 +1,118 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'ERPLibre base entreprise MRP', + 'version': '0.1', + 'author': "ERPLibre", + 'website': 'https://erplibre.ca', + 'license': 'AGPL-3', + 'category': 'Human Resources', + 'summary': 'INSTALL my base entreprise MRP', + 'description': """ +ERPLibreBase +=============== + +""", + 'depends': [ + # Custom ERPLibre + 'erplibre_base', + + 'res_partner_fix_group_by_company', + 'crm_filter_all', + + 'website_helpdesk', + 'website_portal_contact', + 'website_portal_address', + 'product_manufacturer_model', + 'helpdesk_mailing_list', + 'helpdesk_join_team', + + # Odoo base + 'account', + + 'board', + + 'contacts', + + 'crm', + + 'portal', + + 'payment', + 'payment_transfer', + + 'project', + + 'website', + 'website_crm', + + # OCA + 'website_form_builder', + 'website_snippet_anchor', + 'partner_no_vat', + 'helpdesk_mgmt', + 'helpdesk_service_call', + 'helpdesk_supplier', + + # Numigi + 'project_chatter', + # 'project_iteration', + + # Canada + 'l10n_ca', + + # Scrummer + 'project_agile_sale_timesheet', + 'scrummer', + 'scrummer_kanban', + 'scrummer_scrum', + 'scrummer_workflow_security', + 'scrummer_workflow_transition_by_project', + 'scrummer_workflow_transitions_by_task_type', + + # OCA helpdesk + 'helpdesk_mgmt', + + # OCA manufacture + 'mrp_auto_assign', + 'mrp_bom_component_menu', + 'mrp_bom_line_sequence', + 'mrp_bom_location', + 'mrp_bom_tracking', + 'mrp_multi_level', + 'mrp_multi_level_estimate', + 'mrp_production_putaway_strategy', + 'mrp_production_request', + 'mrp_production_auto_post_inventory', + 'mrp_production_grouped_by_product', + 'mrp_stock_orderpoint_manual_procurement', + 'mrp_unbuild_tracked_raw_material', + 'mrp_workorder_sequence', + 'repair_refurbish', + + # OCA stock-logistics-warehouse + 'mrp_warehouse_calendar', + 'stock_available_mrp', + 'stock_orderpoint_mrp_link', + + # OCA contract + 'agreement_mrp', + + # OCA account-analytic + 'mrp_analytic', + + # ODOO S.A. + 'mrp', + 'helpdesk_mrp', + 'mrp_byproduct', + 'mrp_workcenters_machines', + 'product_mrp_info', + 'purchase_mrp', + 'sale_mrp', + 'mrp_bom_cost', + 'res_partner_supplier_own_mrp_work_centers', + + ], + 'data': [], + 'installable': True, +} diff --git a/addons/addons/erplibre_base_entreprise_mrp/static/description/icon.png b/addons/addons/erplibre_base_entreprise_mrp/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8489202f7f94c25eea121dda416baf4df6cdee79 GIT binary patch literal 89269 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®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 literal 0 HcmV?d00001 diff --git a/addons/addons/erplibre_base_entreprise_mrp/static/description/index.html b/addons/addons/erplibre_base_entreprise_mrp/static/description/index.html new file mode 100644 index 0000000..af14009 --- /dev/null +++ b/addons/addons/erplibre_base_entreprise_mrp/static/description/index.html @@ -0,0 +1,485 @@ + + + + + + MathBenTechBaseHackaton + + + +
+

MathBenTechBaseHackaton

+ + +
+

Credits

+
+

Authors

+
    +
  • MathBenTech
  • +
+
+
+

Contributors

+ +
+
+
+ + diff --git a/addons/addons/erplibre_base_hackaton/__init__.py b/addons/addons/erplibre_base_hackaton/__init__.py new file mode 100644 index 0000000..ef5ae35 --- /dev/null +++ b/addons/addons/erplibre_base_hackaton/__init__.py @@ -0,0 +1 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). diff --git a/addons/addons/erplibre_base_hackaton/__manifest__.py b/addons/addons/erplibre_base_hackaton/__manifest__.py new file mode 100644 index 0000000..a294972 --- /dev/null +++ b/addons/addons/erplibre_base_hackaton/__manifest__.py @@ -0,0 +1,73 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'ERPLibre base hackaton', + 'version': '0.1', + 'author': "ERPLibre", + 'website': 'https://erplibre.ca', + 'license': 'AGPL-3', + 'category': 'Human Resources', + 'summary': 'INSTALL my base hackaton', + 'description': """ +ERPLibreBase +=============== + +""", + 'depends': [ + # Custom ERPLibre + 'erplibre_base', + + 'res_partner_fix_group_by_company', + 'crm_filter_all', + + 'helpdesk_service_call', + 'website_helpdesk', + 'website_portal_contact', + 'website_portal_address', + + # Odoo base + 'account', + + 'board', + + 'contacts', + + 'crm', + + 'portal', + + 'payment', + 'payment_transfer', + + 'project', + + 'website', + 'website_crm', + + # OCA + 'website_form_builder', + 'website_snippet_anchor', + 'partner_no_vat', + + # Numigi + 'project_chatter', + # 'project_iteration', + + # Canada + 'l10n_ca', + + # Scrummer + 'project_agile_sale_timesheet', + 'scrummer', + 'scrummer_kanban', + 'scrummer_scrum', + 'scrummer_workflow_security', + 'scrummer_workflow_transition_by_project', + 'scrummer_workflow_transitions_by_task_type', + + # OCA helpdesk + 'helpdesk_mgmt', + ], + 'data': [], + 'installable': True, +} diff --git a/addons/addons/erplibre_base_hackaton/static/description/icon.png b/addons/addons/erplibre_base_hackaton/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8489202f7f94c25eea121dda416baf4df6cdee79 GIT binary patch literal 89269 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®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 literal 0 HcmV?d00001 diff --git a/addons/addons/erplibre_base_hackaton/static/description/index.html b/addons/addons/erplibre_base_hackaton/static/description/index.html new file mode 100644 index 0000000..af14009 --- /dev/null +++ b/addons/addons/erplibre_base_hackaton/static/description/index.html @@ -0,0 +1,485 @@ + + + + + + MathBenTechBaseHackaton + + + +
+

MathBenTechBaseHackaton

+ + +
+

Credits

+
+

Authors

+
    +
  • MathBenTech
  • +
+
+
+

Contributors

+ +
+
+
+ + diff --git a/addons/addons/erplibre_enterprise_services_for_utility_business/__init__.py b/addons/addons/erplibre_enterprise_services_for_utility_business/__init__.py new file mode 100644 index 0000000..4cdf2e8 --- /dev/null +++ b/addons/addons/erplibre_enterprise_services_for_utility_business/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). diff --git a/addons/addons/erplibre_enterprise_services_for_utility_business/__manifest__.py b/addons/addons/erplibre_enterprise_services_for_utility_business/__manifest__.py new file mode 100644 index 0000000..8afff61 --- /dev/null +++ b/addons/addons/erplibre_enterprise_services_for_utility_business/__manifest__.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'ERPLibre Enterprise Services for utility business', + 'version': '0.1', + 'author': "ERPLibre", + 'website': 'https://erplibre.ca', + 'license': 'AGPL-3', + 'category': 'Other', + 'summary': 'Services for utility business', + 'description': """ +ERPLibre Enterprise Services for utility business +==================================================== +All modules needed for enterprise with services for utility business. +""", + 'depends': [ + # ERPLibre + 'erplibre_base_enterprise', + + # Custom ERPLibre + 'product_lump_sum', + # 'sale_margin_percent', + 'sale_report_margin', + 'sale_order_margin_percent', + 'sale_margin_security', + 'sale_product_manufacturer', + 'sale_product_manufacturer_model', + # 'sale_hide_tax_sale_order_lines', # Bug + 'sale_crm_auto_update_lead', + 'crm_marge', + 'menu_force_project_first', + 'crm_working_date', + 'helpdesk_service_call', + 'website_helpdesk', + 'website_portal_contact', + 'website_portal_address', + + # OCA sale-workflow + 'sale_order_revision', + 'sale_double_validation', + + # OCA helpdesk + 'helpdesk_mgmt', + + # General + 'digest', # KPI + ], + 'data': [], + 'installable': True, +} diff --git a/addons/addons/erplibre_enterprise_services_for_utility_business/i18n/fr_CA.po b/addons/addons/erplibre_enterprise_services_for_utility_business/i18n/fr_CA.po new file mode 100644 index 0000000..bfd6e20 --- /dev/null +++ b/addons/addons/erplibre_enterprise_services_for_utility_business/i18n/fr_CA.po @@ -0,0 +1,257 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-09 22:55+0000\n" +"PO-Revision-Date: 2019-12-09 22:55+0000\n" +"Last-Translator: Alexandre Ferreira Benevides \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.sale_order_view_search_inherit_quotation +msgid "My Quotations" +msgstr "Mes Soumissions" + +#. module: sale +#: model:ir.model.fields,field_description:sale.field_sale_order__client_order_ref +msgid "Customer Reference" +msgstr "Ref. client (PO)" + +#. module: sale_cancel_reason +#: model:sale.order.cancel.reason,name:sale_cancel_reason.cancel_reason_only_quotation +msgid "Just for Quotation" +msgstr "Uniquement pour la soumission" + +#. module: purchase +#: model:mail.template,body_html:purchase.email_template_edi_purchase +msgid "" +"
\n" +"

\n" +" Dear ${object.partner_id.name}\n" +" % if object.partner_id.parent_id:\n" +" (${object.partner_id.parent_id.name})\n" +" % endif\n" +"

\n" +" Here is in attachment a request for quotation ${object.name}\n" +" % if object.partner_ref:\n" +" with reference: ${object.partner_ref}\n" +" % endif\n" +" from ${object.company_id.name}.\n" +"

\n" +" If you have any questions, please do not hesitate to contact us.\n" +"

\n" +" Best regards,\n" +"

\n" +"
" +msgstr "" +"
\n" +"

\n" +" Cher(e) ${object.partner_id.name}\n" +" % if object.partner_id.parent_id:\n" +" (${object.partner_id.parent_id.name})\n" +" % endif\n" +"

\n" +" Vous trouverez en pièce jointe une demande de soumission ${object.name}\n" +" % if object.partner_ref:\n" +" with reference: ${object.partner_ref}\n" +" % endif\n" +" de ${object.company_id.name}.\n" +"

\n" +" N'hésitez pas à nous contacter si vous avez des questions.\n" +"

\n" +" Salutations,\n" +"

\n" +"
" + +#. module: sale_order_revision +#: model_terms:ir.ui.view,arch_db:sale_order_revision.view_order_form +msgid "New Revision of Quotation" +msgstr "Nouvelle version de la soumission" + +#. module: sale_product_set +#: model_terms:ir.ui.view,arch_db:sale_product_set.product_set_add_form_view +msgid "Add set in sale order line" +msgstr "Ajout d'un Set à la soumission" + +#. module: crm +#: model:mail.activity.type,name:crm.mail_activity_demo_followup_quote +msgid "Follow-up Quote" +msgstr "Faire suivi de soumission" + +#. module: crm +#: model:mail.activity.type,name:crm.mail_activity_demo_make_quote +msgid "Make Quote" +msgstr "Faire soumission" + +#. module: crm +#: model_terms:ir.actions.act_window,help:crm.crm_case_form_view_salesteams_opportunity +msgid "" +"You will be able to plan meetings and phone calls from\n" +" opportunities, convert them into quotations, attach related\n" +" documents, track all discussions, and much more." +msgstr "" +"Vous serez en mesure de planifier des réunions et des appels provenant\n" +" d'opportunités, de les convertir en soumissions, de joindre des documents\n" +" connexes, de suivre toutes les discussions et bien plus encore." + +#. module: hr +#: model_terms:hr.job,website_description:hr.job_consultant +msgid "Analyse needs, write specification documents and quotation" +msgstr "" +"Analyser des besoins, écrire des documents de spécification et des soumissions" + +#. module: hr +#: model_terms:hr.job,website_description:hr.job_consultant +msgid "" +"We are looking for a motivated and results-driven Functional Consultant! You" +" will take part in the consulting services we provide to our partners and " +"customers, on the functional side. Your job start from the quotation to the " +"customer to the delivery to the customer. You listen the customer and try to" +" give him the best service. You report to the head of consulting service and" +" will be coached by a senior consultant." +msgstr "" +"Nous sommes à la recherche d'un consultant fonctionnel motivé et axé sur les" +" résultats ! Vous prendrez part aux services de consultation de niveau " +"fonctionnel que nous offrons à nos partenaires et clients. Votre travail " +"débute à la production de soumissions pour les clients et se poursuit jusqu'à la " +"livraison. Vous êtes à l'écoute du client et lui fournissez le meilleur " +"service. Vous rapportez au chef du service de consultation et serez formé " +"par un consultant senior." + +#. module: purchase_requisition +#: code:addons/purchase_requisition/models/purchase_requisition.py:116 +#, python-format +msgid "Cancelled by the agreement associated to this quotation." +msgstr "Annulé par le contrat associé à cette soumission." + +#. module: purchase_requisition +#: model_terms:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_type_form +msgid "Data for new quotations" +msgstr "Données pour nouvelles soumissions" + +#. module: purchase_requisition +#: selection:purchase.requisition.type,line_copy:0 +msgid "Do not create RfQ lines automatically" +msgstr "Ne pas créer de lignes de demande de soumission automatiquement" + +#. module: purchase_requisition +#: model_terms:ir.actions.act_window,help:purchase_requisition.action_purchase_requisition +msgid "" +"In a call for tenders, you can record the products you need to buy\n" +" and generate the creation of RfQs to vendors. Once the tenders have\n" +" been registered, you can review and compare them and you can\n" +" validate some and cancel others." +msgstr "" +"Dans le cas d'un appel d'offres, vous pouvez enregistrer les produits que vous souhaitez acheter\n" +" et générer des demandes de soumission pour les fournisseurs. Une fois les offres\n" +" enregistrées, vous pouvez les examiner et les comparer, puis en\n" +" valider certaines et annuler les autres." + +#. module: purchase_requisition +#: model_terms:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_form +msgid "New Quotation" +msgstr "Nouvelle soumission" + +#. module: purchase_requisition +#: model_terms:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_form +msgid "RFQs/Orders" +msgstr "Demandes de soumissions/commandes" + +#. module: purchase_requisition +#: model:ir.model.fields,help:purchase_requisition.field_purchase_requisition_type__exclusive +msgid "" +"Select only one RFQ (exclusive): when a purchase order is confirmed, cancel the remaining purchase order.\n" +"\n" +" Select multiple RFQ: allows multiple purchase orders. On confirmation of a purchase order it does not cancel the remaining orders" +msgstr "" +"Sélectionner une seule demande de soumission (exclusive) : lorsqu'un bon de commande est confirmé, annuler les autres bons de commande.\n" +"\n" +" Sélectionner plusieurs demandes de soumission : autoriser les demandes de soumission multiples. Lorsqu'un bon de commande est confirmé, les autres bons ne sont pas annulés." + +#. module: purchase_requisition +#: code:addons/purchase_requisition/models/purchase_requisition.py:156 +#, python-format +msgid "" +"You have to cancel or validate every RfQ before closing the purchase " +"requisition." +msgstr "" +"Vous devez annuler ou valider chaque demande de soumission avant de clôturer la " +"demande d'achat." + +#. module: sale_crm +#: model_terms:ir.ui.view,arch_db:sale_crm.crm_case_form_view_oppor +msgid " Quotation(s) " +msgstr "Soumission(s) " + +#. module: sale_crm +#: model:ir.ui.menu,name:sale_crm.sale_order_menu_quotations_crm +msgid "My Quotations" +msgstr "Mes Soumissions" + +#. module: sale_crm +#: model_terms:ir.ui.view,arch_db:sale_crm.crm_case_form_view_oppor +msgid "New Quotation" +msgstr "Nouvelle soumission" + +#. module: sale_crm +#: model:ir.model.fields,field_description:sale_crm.field_crm_lead__sale_number +msgid "Number of Quotations" +msgstr "Nombre de soumissions" + +#. module: sale_crm +#: model:ir.actions.act_window,name:sale_crm.sale_action_quotations_new +msgid "Quotation" +msgstr "Soumission" + +#. module: sale_crm +#: model:ir.actions.act_window,name:sale_crm.sale_action_quotations +msgid "Quotations" +msgstr "Soumissions" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.report_saleorder_document +msgid "Quotation Date:" +msgstr "Date soumission :" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.view_quotation_tree +msgid "Quotation Date" +msgstr "Date de la soumission" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.onboarding_quotation_layout_step +msgid "Customize the look of your quotations." +msgstr "Personnalisez le look de vos soumissions." + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.onboarding_quotation_layout_step +msgid "Quotation Layout" +msgstr "Layout des soumissions" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.sale_onboarding_order_confirmation_step +msgid "Choose how to confirm quotations and get paid." +msgstr "Choisissez comment confirmer vos soumissions et être payé." + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.sale_onboarding_sample_quotation_step +msgid "Send a quotation to test the customer portal." +msgstr "Envoyer une soumission pour tester le portail client." + +#. module: sale_management +#: model_terms:ir.actions.act_window,help:sale_management.sale_order_template_action +msgid "Create your quotation template" +msgstr "Créer votre modèle de soumission" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.sale_onboarding_sample_quotation_step +msgid "Sample Quotation" +msgstr "Modèle de soumission" \ No newline at end of file diff --git a/addons/addons/erplibre_enterprise_services_for_utility_business/i18n/mathbentech_enterprise_services_for_utility_business.pot b/addons/addons/erplibre_enterprise_services_for_utility_business/i18n/mathbentech_enterprise_services_for_utility_business.pot new file mode 100644 index 0000000..16bac57 --- /dev/null +++ b/addons/addons/erplibre_enterprise_services_for_utility_business/i18n/mathbentech_enterprise_services_for_utility_business.pot @@ -0,0 +1,224 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-09 22:55+0000\n" +"PO-Revision-Date: 2019-12-09 22:55+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.sale_order_view_search_inherit_quotation +msgid "My Quotations" +msgstr "" + +#. module: sale +#: model:ir.model.fields,field_description:sale.field_sale_order__client_order_ref +msgid "Customer Reference" +msgstr "" + +#. module: sale_cancel_reason +#: model:sale.order.cancel.reason,name:sale_cancel_reason.cancel_reason_only_quotation +msgid "Just for Quotation" +msgstr "" + +#. module: purchase +#: model:mail.template,body_html:purchase.email_template_edi_purchase +msgid "" +"
\n" +"

\n" +" Dear ${object.partner_id.name}\n" +" % if object.partner_id.parent_id:\n" +" (${object.partner_id.parent_id.name})\n" +" % endif\n" +"

\n" +" Here is in attachment a request for quotation ${object.name}\n" +" % if object.partner_ref:\n" +" with reference: ${object.partner_ref}\n" +" % endif\n" +" from ${object.company_id.name}.\n" +"

\n" +" If you have any questions, please do not hesitate to contact us.\n" +"

\n" +" Best regards,\n" +"

\n" +"
" +msgstr "" + +#. module: sale_order_revision +#: model_terms:ir.ui.view,arch_db:sale_order_revision.view_order_form +msgid "New Revision of Quotation" +msgstr "" + +#. module: sale_product_set +#: model_terms:ir.ui.view,arch_db:sale_product_set.product_set_add_form_view +msgid "Add set in sale order line" +msgstr "" + +#. module: crm +#: model:mail.activity.type,name:crm.mail_activity_demo_followup_quote +msgid "Follow-up Quote" +msgstr "" + +#. module: crm +#: model:mail.activity.type,name:crm.mail_activity_demo_make_quote +msgid "Make Quote" +msgstr "" + +#. module: crm +#: model_terms:ir.actions.act_window,help:crm.crm_case_form_view_salesteams_opportunity +msgid "" +"You will be able to plan meetings and phone calls from\n" +" opportunities, convert them into quotations, attach related\n" +" documents, track all discussions, and much more." +msgstr "" + +#. module: hr +#: model_terms:hr.job,website_description:hr.job_consultant +msgid "Analyse needs, write specification documents and quotation" +msgstr "" + +#. module: hr +#: model_terms:hr.job,website_description:hr.job_consultant +msgid "" +"We are looking for a motivated and results-driven Functional Consultant! You" +" will take part in the consulting services we provide to our partners and " +"customers, on the functional side. Your job start from the quotation to the " +"customer to the delivery to the customer. You listen the customer and try to" +" give him the best service. You report to the head of consulting service and" +" will be coached by a senior consultant." +msgstr "" + +#. module: purchase_requisition +#: code:addons/purchase_requisition/models/purchase_requisition.py:116 +#, python-format +msgid "Cancelled by the agreement associated to this quotation." +msgstr "" + +#. module: purchase_requisition +#: model_terms:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_type_form +msgid "Data for new quotations" +msgstr "" + +#. module: purchase_requisition +#: selection:purchase.requisition.type,line_copy:0 +msgid "Do not create RfQ lines automatically" +msgstr "" + +#. module: purchase_requisition +#: model_terms:ir.actions.act_window,help:purchase_requisition.action_purchase_requisition +msgid "" +"In a call for tenders, you can record the products you need to buy\n" +" and generate the creation of RfQs to vendors. Once the tenders have\n" +" been registered, you can review and compare them and you can\n" +" validate some and cancel others." +msgstr "" + +#. module: purchase_requisition +#: model_terms:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_form +msgid "New Quotation" +msgstr "" + +#. module: purchase_requisition +#: model_terms:ir.ui.view,arch_db:purchase_requisition.view_purchase_requisition_form +msgid "RFQs/Orders" +msgstr "" + +#. module: purchase_requisition +#: model:ir.model.fields,help:purchase_requisition.field_purchase_requisition_type__exclusive +msgid "" +"Select only one RFQ (exclusive): when a purchase order is confirmed, cancel the remaining purchase order.\n" +"\n" +" Select multiple RFQ: allows multiple purchase orders. On confirmation of a purchase order it does not cancel the remaining orders" +msgstr "" + +#. module: purchase_requisition +#: code:addons/purchase_requisition/models/purchase_requisition.py:156 +#, python-format +msgid "" +"You have to cancel or validate every RfQ before closing the purchase " +"requisition." +msgstr "" + +#. module: sale_crm +#: model_terms:ir.ui.view,arch_db:sale_crm.crm_case_form_view_oppor +msgid " Quotation(s) " +msgstr "" + +#. module: sale_crm +#: model:ir.ui.menu,name:sale_crm.sale_order_menu_quotations_crm +msgid "My Quotations" +msgstr "" + +#. module: sale_crm +#: model_terms:ir.ui.view,arch_db:sale_crm.crm_case_form_view_oppor +msgid "New Quotation" +msgstr "" + +#. module: sale_crm +#: model:ir.model.fields,field_description:sale_crm.field_crm_lead__sale_number +msgid "Number of Quotations" +msgstr "" + +#. module: sale_crm +#: model:ir.actions.act_window,name:sale_crm.sale_action_quotations_new +msgid "Quotation" +msgstr "" + +#. module: sale_crm +#: model:ir.actions.act_window,name:sale_crm.sale_action_quotations +msgid "Quotations" +msgstr "" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.report_saleorder_document +msgid "Quotation Date:" +msgstr "" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.view_quotation_tree +msgid "Quotation Date" +msgstr "" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.onboarding_quotation_layout_step +msgid "Customize the look of your quotations." +msgstr "" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.onboarding_quotation_layout_step +msgid "Quotation Layout" +msgstr "" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.sale_onboarding_order_confirmation_step +msgid "Choose how to confirm quotations and get paid." +msgstr "" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.sale_onboarding_sample_quotation_step +msgid "Send a quotation to test the customer portal." +msgstr "" + +#. module: sale_management +#: model_terms:ir.actions.act_window,help:sale_management.sale_order_template_action +msgid "Create your quotation template" +msgstr "" + +#. module: sale_quotation_builder +#: model:ir.model,name:sale_quotation_builder.model_sale_order_template +msgid "Quotation Template" +msgstr "" + +#. module: sale +#: model_terms:ir.ui.view,arch_db:sale.sale_onboarding_sample_quotation_step +msgid "Sample Quotation" +msgstr "" \ No newline at end of file diff --git a/addons/muk-it_muk_base b/addons/muk-it_muk_base new file mode 160000 index 0000000..d888c96 --- /dev/null +++ b/addons/muk-it_muk_base @@ -0,0 +1 @@ +Subproject commit d888c9695292295a732fcdd4a7b9820978df5e7f diff --git a/addons/muk-it_muk_dms b/addons/muk-it_muk_dms new file mode 160000 index 0000000..020e604 --- /dev/null +++ b/addons/muk-it_muk_dms @@ -0,0 +1 @@ +Subproject commit 020e604d635a229c09a07e839d95f8e37706606a diff --git a/addons/muk-it_muk_docs b/addons/muk-it_muk_docs new file mode 160000 index 0000000..a8ea02b --- /dev/null +++ b/addons/muk-it_muk_docs @@ -0,0 +1 @@ +Subproject commit a8ea02b9f00ae9fe5d2ea25ac43d23532cc11d45 diff --git a/addons/muk-it_muk_misc b/addons/muk-it_muk_misc new file mode 160000 index 0000000..37b9d6d --- /dev/null +++ b/addons/muk-it_muk_misc @@ -0,0 +1 @@ +Subproject commit 37b9d6dc20fa686a323057b160015bfc2c2c8143 diff --git a/addons/muk-it_muk_quality b/addons/muk-it_muk_quality new file mode 160000 index 0000000..1a4c6f2 --- /dev/null +++ b/addons/muk-it_muk_quality @@ -0,0 +1 @@ +Subproject commit 1a4c6f25c5e4fe0029d406d6283555bd23a44d27 diff --git a/addons/muk-it_muk_web b/addons/muk-it_muk_web new file mode 160000 index 0000000..431d86d --- /dev/null +++ b/addons/muk-it_muk_web @@ -0,0 +1 @@ +Subproject commit 431d86d6694e846b407c84f00a31a10f0cf5b83b diff --git a/addons/muk-it_muk_website b/addons/muk-it_muk_website new file mode 160000 index 0000000..c1e6c17 --- /dev/null +++ b/addons/muk-it_muk_website @@ -0,0 +1 @@ +Subproject commit c1e6c1755d09562f66247832bd01a0d580c43e23 diff --git a/addons/odooaktiv_QuotationRevision b/addons/odooaktiv_QuotationRevision new file mode 160000 index 0000000..701438f --- /dev/null +++ b/addons/odooaktiv_QuotationRevision @@ -0,0 +1 @@ +Subproject commit 701438f9c59bd657de516d9ef4de1ba6167bf30b diff --git a/addons/openeducat_openeducat_erp b/addons/openeducat_openeducat_erp new file mode 160000 index 0000000..4a2a1d9 --- /dev/null +++ b/addons/openeducat_openeducat_erp @@ -0,0 +1 @@ +Subproject commit 4a2a1d930d88a127959fd39af22f7d818e08663d diff --git a/env_var.sh b/env_var.sh new file mode 100755 index 0000000..b7a945b --- /dev/null +++ b/env_var.sh @@ -0,0 +1,30 @@ +#!/bin/bash +################################################################################ +# Script for installing Odoo on Ubuntu 14.04, 15.04, 16.04 and 18.04 (could be used for other version too) +# Author: Yenthe Van Ginneken +#------------------------------------------------------------------------------- +# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances +# in one Ubuntu because of the different xmlrpc_ports +#------------------------------------------------------------------------------- +################################################################################ + +OE_USER="odoo" +OE_HOME="/${OE_USER}" +OE_HOME_ODOO="${OE_HOME}/odoo" +OE_HOME_EXT="${OE_HOME_ODOO}/odoo" +# The default port where this Odoo instance will run under (provided you use the command -c in the terminal) +# Set to true if you want to install it, false if you don't need it or have it already installed. +INSTALL_WKHTMLTOPDF="True" +# Set the default Odoo port (you still have to use -c /etc/odoo-server.conf for example to use this.) +OE_PORT="8069" +OE_LONGPOLLING_PORT="8072" +# set the superadmin password +OE_SUPERADMIN="admin" +OE_VERSION="stable_prod_12.0" +OE_CONFIG="${OE_USER}" +MINIMAL_ADDONS="False" +# Set this to True if you want to install Nginx! +INSTALL_NGINX="True" +# Set the website name +WEBSITE_NAME="_" +GITHUB_TOKEN="" diff --git a/odoo b/odoo new file mode 160000 index 0000000..94bcbc9 --- /dev/null +++ b/odoo @@ -0,0 +1 @@ +Subproject commit 94bcbc92e5e5a6fd3de7267e3c01f8c11fb045f4 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ca82ce2 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +giturlparse +agithub +gitpython +PyYAML +retrying \ No newline at end of file diff --git a/run.md b/run.md new file mode 100644 index 0000000..ba722dc --- /dev/null +++ b/run.md @@ -0,0 +1,5 @@ +== Start database == +sudo systemctl start postgresql.service + +== Run Odoo == +./venv/bin/python ./odoo/odoo-bin -c config.conf diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..58f64fd --- /dev/null +++ b/run.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +./venv/bin/python ./odoo/odoo-bin -c ./config.conf diff --git a/script/__init__.py b/script/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/script/addons_repo_origin.py b/script/addons_repo_origin.py new file mode 100644 index 0000000..1112471 --- /dev/null +++ b/script/addons_repo_origin.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python +# dict config contains information about repository of original source +# level 1: website of git +# level 2: entity, organization, user +# level 3: project name +config = { + "github.com": { + "odoo": [ + "odoo", + ], + } +} +config_addons = { + "github.com": { + "MathBenTech": [ + "development", + "odoo-business-spending-management-quebec-canada", + "scrummer", + ], + "muk-it": [ + "muk_base", + "muk_dms", + "muk_docs", + "muk_misc", + "muk_quality", + "muk_web", + "muk_website", + ], + "Numigi": [ + "odoo-base-addons", + "odoo-entertainment-addons", + "odoo-git-addons", + "odoo-hr-addons", + "odoo-partner-addons", + "odoo-product-addons", + "odoo-project-addons", + "odoo-purchase-addons", + "odoo-stock-addons", + "odoo-survey-addons", + "odoo-timesheet-addons", + "odoo-web-addons", + ], + "OCA": [ + "account-analytic", + "account-budgeting", + "account-closing", + "account-consolidation", + "account-financial-reporting", + "account-fiscal-rule", + "account-invoicing", + "account-invoice-reporting", + "account-payment", + "account-reconcile", + "apps-store", + "bank-payment", + "bank-statement-import", + "brand", + "business-requirement", + "commission", + "community-data-files", + "connector-telephony", + "contract", + "credit-control", + "currency", + "data-protection", + "donation", + "e-commerce", + "edi", + "event", + "helpdesk", + "hr", + "knowledge", + "l10n-canada", + "maintenance", + "management-system", + "manufacture", + "margin-analysis", + "mis-builder", + "multi-company", + "partner-contact", + "pos", + "product-attribute", + "product-pack", + "product-variant", + "project", + "project-reporting", + "purchase-workflow", + "queue", + "reporting-engine", + "sale-workflow", + "server-auth", + "server-brand", + "server-env", + "server-tools", + "server-ux", + "social", + "stock-logistics-warehouse", + "timesheet", + "web", + "website", + "wms", + ], + "odooaktiv": [ + "QuotationRevision", + ], + "openeducat": [ + "openeducat_erp", + ], + "Smile-SA": [ + "odoo_addons", + ], + } +} diff --git a/script/fork_github_repo/README.md b/script/fork_github_repo/README.md new file mode 100644 index 0000000..f3f4b53 --- /dev/null +++ b/script/fork_github_repo/README.md @@ -0,0 +1,4 @@ +Source of fork-github-repo : https://github.com/gene1wood/fork-github-repo +TODO +Create python dependency with submodule +https://shunsvineyard.info/2019/12/23/using-git-submodule-and-develop-mode-to-manage-python-projects/ \ No newline at end of file diff --git a/script/fork_github_repo/__init__.py b/script/fork_github_repo/__init__.py new file mode 100644 index 0000000..fd213f4 --- /dev/null +++ b/script/fork_github_repo/__init__.py @@ -0,0 +1,273 @@ +from __future__ import print_function +import argparse +import os.path +import shutil +from agithub.GitHub import GitHub # pip install agithub +from git import Repo # pip install gitpython +from giturlparse import parse # pip install giturlparse +from retrying import retry # pip install retrying +import yaml # pip install PyYAML + +DEFAULT_CONFIG_FILENAME = '~/.github/fork_github_repo.yaml' + + +def github_url_argument(url): + """Validate a url as a GitHub repo url and raise argparse exceptions if + validation fails + + :param str url: A GitHub repo URL + :return: The GitHub repo URL passed in + """ + parsed_url = parse(url) + if not parsed_url.valid: + raise argparse.ArgumentTypeError('%s is not a valid git URL' + % url) + if not parsed_url.github: + raise argparse.ArgumentTypeError('%s is not a GitHub repo' + % parsed_url.url) + return url + + +def filename_argument(filename): + return os.path.expanduser(filename) + + +def get_config(): + """Parse command line arguments, extracting the config file name, + read the yaml config file and add in the command line arguments, + returning the union of config file and command line arguments + + :return: dict of config file settings and command line arguments + """ + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + description='''\ +Fork a GitHub repo, clone that repo to a local directory, add the upstream +remote, create an optional feature branch and checkout that branch''', + epilog='''\ +The config file with a default location of +~/.github/fork_github_repo.yaml contains the following settings: + +- github_token : The `GitHub personal access token with the public_repo scope + allowed. + https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/ +- repo_dir : The directory path to the directory containing all your cloned + repos. If this isn't defined, /tmp is used. + +The file is YAML formatted and the contents look like this : + +github_token: 0123456789abcdef0123456789abcdef01234567 +repo_dir: ~/Documents/github.com/example/ +organization: +''' + ) + parser.add_argument( + '-c', '--config', + help='Filename of the yaml config file (default : %s)' + % DEFAULT_CONFIG_FILENAME, + default=filename_argument(DEFAULT_CONFIG_FILENAME), + type=filename_argument) + parser.add_argument('url', help="GitHub URL of the upstream repo to fork", + type=github_url_argument) + parser.add_argument('branch', nargs='?', default=None, + help="Name of the feature branch to create") + args = parser.parse_args() + if (args.config == filename_argument(DEFAULT_CONFIG_FILENAME)) and ( + not os.path.isfile(args.config)): + parser.error('Please create a config file at %s or point to one with ' + 'the --config option.' % DEFAULT_CONFIG_FILENAME) + if not os.path.isfile(args.config): + raise argparse.ArgumentTypeError( + 'Could not find config file %s.' % args.config) + with open(args.config, 'r') as f: + try: + config = yaml.safe_load(f) + if isinstance(config, dict): + config.update(vars(args)) + return config + else: + raise argparse.ArgumentTypeError( + 'Config contains %s of "%s" but it should be a dict' + % (type(config), config)) + except yaml.YAMLError: + raise argparse.ArgumentTypeError( + 'Could not parse YAML in %s' % args.config) + + +def get_list_fork_repo(upstream_url, github_token): + gh = GitHub(token=github_token) + parsed_url = parse(upstream_url) + status, user = gh.user.get() + + # response = gh.repos[user['login']][parsed_url.repo].forks.get(sort="newest") + response = gh.repos["odoo"][parsed_url.repo].forks.get(sort="newest") + print(response) + + +def fork_and_clone_repo( + upstream_url, github_token, repo_dir_root, branch_name=None, + upstream_name='upstream', organization_name=None, fork_only=False, + repo_root=None): + """Fork a GitHub repo, clone that repo to a local directory, + add the upstream remote, create an optional feature branch and checkout + that branch + + :param str upstream_url: GitHub URL of the upstream repo + :param str github_token: GitHub auth token + :param str repo_dir_root: The local directory path under which clones + should be written + :param str branch_name: The name of the git feature branch to create + :param str upstream_name: The name to use for the remote upstream + :param str organization_name: The name the organization that replace actual user + :param bool fork_only: Stop after forking and don't clone + :param obj repo_root: Repo parent, if not None, use submodule with it + :return: github3.Head object representing the new feature branch + """ + # Scope needed is `public_repo` to fork and clone public repos + # https://developer.github.com/apps/building-integrations/setting-up-and-registering-oauth-apps/about-scopes-for-oauth-apps/ + gh = GitHub(token=github_token) + parsed_url = parse(upstream_url) + + # Fork the repo + status, user = gh.user.get() + user_name = user['login'] if not organization_name else organization_name + status, forked_repo = gh.repos[user_name][parsed_url.repo].get() + if status == 404: + status, upstream_repo = ( + gh.repos[parsed_url.owner][parsed_url.repo].get()) + if status == 404: + print("Unable to find repo %s" % upstream_url) + exit(1) + args = {} + if organization_name: + args["organization"] = organization_name + status, forked_repo = ( + gh.repos[parsed_url.owner][parsed_url.repo].forks.post(**args)) + if status == 404: + print("Error when forking repo %s" % forked_repo) + exit(1) + else: + print("Forked %s to %s" % (upstream_url, forked_repo['ssh_url'])) + elif status == 202: + print("Forked repo %s already exists" % forked_repo['full_name']) + elif status != 200: + print("Status not supported: %s - %s" % (status, forked_repo)) + exit(1) + + if fork_only: + return True + + # Clone the repo + repo_dir = os.path.expanduser(os.path.join(repo_dir_root, parsed_url.repo)) + if repo_root: + # TODO validate not already submodule + # forked_repo['ssh_url'] + http_url = f"https://{(forked_repo['ssh_url'][4:]).replace(':', '/')}" + try: + if branch_name: + submodule_repo = retry( + wait_exponential_multiplier=1000, + stop_max_delay=15000 + )(repo_root.create_submodule)(repo_dir_root, repo_dir_root, + url=http_url, + branch=branch_name) + else: + submodule_repo = retry( + wait_exponential_multiplier=1000, + stop_max_delay=15000 + )(repo_root.create_submodule)(repo_dir_root, repo_dir_root, + url=http_url) + except KeyError as e: + if os.path.isdir(repo_dir_root): + print(f"Warning, submodule {repo_dir_root} already exist, " + f"you need to add it in stage.") + else: + print(f"\nERROR Cannot create submodule {repo_dir_root}." + f"Maybe you need to delete .git/modules/{repo_dir_root}\n") + return + # # Delete appropriate submodule and recreate_submodule + # shutil.rmtree(f".git/modules/{repo_dir_root}", ignore_errors=True) + # if branch_name: + # submodule_repo = retry( + # wait_exponential_multiplier=1000, + # stop_max_delay=15000 + # )(repo_root.create_submodule)(repo_dir_root, repo_dir_root, + # url=http_url, + # branch=branch_name) + # else: + # submodule_repo = retry( + # wait_exponential_multiplier=1000, + # stop_max_delay=15000 + # )(repo_root.create_submodule)(repo_dir_root, repo_dir_root, + # url=http_url) + # Update submodule + # print(f"Try to fix submodule {repo_dir_root} with update them all.") + # retry( + # wait_exponential_multiplier=1000, + # stop_max_delay=15000 + # )(repo_root.submodule_update)(recursive=False) + # if os.path.isdir(repo_dir_root): + # print(f"Submodule {repo_dir_root} fixed.") + # else: + # # TODO remove submodule + # print(f"Error, submodule {repo_dir_root} is configured, but not " + # f"existing. Do git submodule update") + + cloned_repo = Repo(repo_dir_root) + print("Cloned %s to %s" % (http_url, repo_dir)) + # sm = cloned_repo.create_submodule('mysubrepo', 'path/to/subrepo', + # url=bare_repo.git_dir, branch='master') + else: + if os.path.isdir(repo_dir): + print("Directory %s already exists, assuming it's a clone" % repo_dir) + cloned_repo = Repo(repo_dir) + else: + cloned_repo = retry( + wait_exponential_multiplier=1000, + stop_max_delay=15000 + )(Repo.clone_from)(forked_repo['ssh_url'], repo_dir) + print("Cloned %s to %s" % (forked_repo['ssh_url'], repo_dir)) + + # Create the remote upstream + try: + upstream_remote = cloned_repo.remote(upstream_name) + print('Remote "%s" already exists in %s' % (upstream_name, repo_dir)) + except ValueError: + upstream_remote = retry( + wait_exponential_multiplier=1000, + stop_max_delay=15000 + )(cloned_repo.create_remote)(upstream_name, upstream_url) + print('Remote "%s" created for %s' % (upstream_name, upstream_url)) + + # Fetch the remote upstream + retry(wait_exponential_multiplier=1000, stop_max_delay=15000)( + upstream_remote.fetch)() + print('Remote "%s" fetched' % upstream_name) + + # Create and checkout the branch + if branch_name is None: + return cloned_repo + else: + if branch_name not in cloned_repo.refs: + branch = cloned_repo.create_head(branch_name) + print('Branch "%s" created' % branch_name) + else: + branch = cloned_repo.heads[branch_name] + print('Branch "%s" already exists' % branch_name) + if branch_name not in cloned_repo.remotes.origin.refs: + cloned_repo.remotes.origin.push(refspec='{}:{}'.format( + branch.path, branch.path)) + print('Branch "%s" pushed to origin' % branch_name) + else: + print('Branch "%s" already exists in remote origin' % branch_name) + if branch.tracking_branch() is None: + branch.set_tracking_branch( + cloned_repo.remotes.origin.refs[branch_name]) + print('Tracking branch "%s" setup for branch "%s"' % ( + cloned_repo.remotes.origin.refs[branch_name], branch_name)) + else: + print('Branch "%s" already setup to track "%s"' % ( + branch_name, cloned_repo.remotes.origin.refs[branch_name])) + branch.checkout() + print('Branch "%s" checked out' % branch_name) + return branch diff --git a/script/fork_project.py b/script/fork_project.py new file mode 100644 index 0000000..ce9a958 --- /dev/null +++ b/script/fork_project.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python +import os +import sys +import argparse +import logging +from git import Repo +from retrying import retry # pip install retrying + +new_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '..')) +sys.path.append(new_path) + +from script import fork_github_repo +from script.git_tool import GitTool + +_logger = logging.getLogger(__name__) +CST_GITHUB_TOKEN = "GITHUB_TOKEN" + + +def get_config(): + """Parse command line arguments, extracting the config file name, + returning the union of config file and command line arguments + + :return: dict of config file settings and command line arguments + """ + config = GitTool.get_project_config() + + # TODO update description + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + description='''\ +''', + epilog='''\ +''' + ) + parser.add_argument('-d', '--dir', dest="dir", default="./", + help="Path of repo to change remote, including submodule.") + parser.add_argument('--organization', dest="organization", default="ERPLibre", + help="Choose organization to fork and change all repo.") + parser.add_argument('--github_token', dest="github_token", + default=config.get(CST_GITHUB_TOKEN), + help="GitHub token generated by user") + args = parser.parse_args() + return args + + +def main(): + config = get_config() + github_token = config.github_token + + if not github_token: + raise ValueError("Missing github_token") + repo_root = Repo(config.dir) + + lst_repo = GitTool().get_source_repo_addons(repo_path=config.dir) + i = 0 + total = len(lst_repo) + for repo in lst_repo: + i += 1 + print(f"Nb element {i}/{total}") + url = repo.get("url") + repo_dir_root = repo.get("path") + branch_name = None + upstream_name = "upstream" + organization_name = config.organization + + # Exception, if repo existing, create appropriate remote to keep access + # and remove origin + # TODO do it + # Don't overwrite upstream_name if already exist + # Create origin of organization of upstream if not exist + # Move actual origin to is organization + working_repo = Repo(repo.get("relative_path")) + + dct_remote_name = {a.name: a for a in working_repo.remotes} + remote_origin = dct_remote_name.get("origin") + + # for remote in working_repo.remotes: + if remote_origin: + repo_origin_info = GitTool.get_transformed_repo_info_from_url( + remote_origin.url, repo_path=repo.get("relative_path")) + + if repo_origin_info.organization not in dct_remote_name.keys(): + # Add remote + upstream_remote = retry( + wait_exponential_multiplier=1000, + stop_max_delay=15000 + )(working_repo.create_remote)(repo_origin_info.organization, + repo_origin_info.url_https) + print('Remote "%s" created for %s' % ( + repo_origin_info.organization, repo_origin_info.url_https)) + + # Fetch the remote + retry(wait_exponential_multiplier=1000, stop_max_delay=15000)( + upstream_remote.fetch)() + print('Remote "%s" fetched' % repo_origin_info.organization) + # working_repo.git.remote.remove("origin") + upstream_name = organization_name + # TODO a la première création, on choisit le URL source en cas de non existance de upstream, + # sinon on choisit celui de ERPLibre + # [, , ] + + _logger.info( + f"Fork {url} on dir {repo_dir_root} for organization {organization_name}") + + fork_github_repo.fork_and_clone_repo( + url, + github_token, + repo_dir_root, + branch_name=branch_name, + upstream_name=upstream_name, + organization_name=organization_name, + # fork_only=True, + repo_root=repo_root, + ) + + # Update origin to new repo + + GitTool().generate_odoo_install_locally() + + +if __name__ == '__main__': + main() diff --git a/script/fork_project_ERPLibre.py b/script/fork_project_ERPLibre.py new file mode 100644 index 0000000..ffa0441 --- /dev/null +++ b/script/fork_project_ERPLibre.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python +import os +import sys +import argparse +import logging +from git import Repo + +new_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '..')) +sys.path.append(new_path) + +from script.git_tool import GitTool + +_logger = logging.getLogger(__name__) +CST_GITHUB_TOKEN = "GITHUB_TOKEN" + + +def get_config(): + """Parse command line arguments, extracting the config file name, + returning the union of config file and command line arguments + + :return: dict of config file settings and command line arguments + """ + config = GitTool.get_project_config() + + # TODO update description + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + description='''\ +''', + epilog='''\ +''' + ) + parser.add_argument('-d', '--dir', dest="dir", default="./", + help="Path of repo to change remote, including submodule.") + parser.add_argument('--organization', dest="organization", default="ERPLibre", + help="Choose organization to fork and change all repo.") + parser.add_argument("--skip_fork", action="store_true", + help="Ignore fork to generate only dependancies like " + ".gitmodules and odoo_install_locally.sh") + parser.add_argument('-f', "--force", action="store_true", + help="Force rewrite remote.") + parser.add_argument('--github_token', dest="github_token", + default=config.get(CST_GITHUB_TOKEN), + help="GitHub token generated by user") + args = parser.parse_args() + return args + + +def main(): + config = get_config() + github_token = config.github_token + git_tool = GitTool() + + if not github_token: + raise ValueError("Missing github_token") + + organization_name = config.organization + lst_repo = git_tool.get_source_repo_addons(repo_path=config.dir, add_repo_root=True) + lst_repo_organization = [git_tool.get_transformed_repo_info_from_url( + a.get("url"), repo_path=config.dir, organization_force=organization_name, + is_submodule=a.get("is_submodule"), sub_path=a.get("sub_path")) + for a in lst_repo] + i = 0 + total = len(lst_repo) + for repo in lst_repo: + i += 1 + print(f"Nb element {i}/{total}") + url = repo.get("url") + + working_repo = Repo(repo.get("relative_path")) + + dct_remote_name = {a.name: a for a in working_repo.remotes} + remote_origin = dct_remote_name.get("origin") + remote_erplibre = dct_remote_name.get("ERPLibre") + remote_organization = dct_remote_name.get(organization_name) + + if not config.skip_fork: + if not remote_erplibre: + repo_info = git_tool.get_transformed_repo_info_from_url( + url, organization_force="ERPLibre", + is_submodule=repo.get("is_submodule"), + sub_path=repo.get("sub_path")) + git_tool.add_and_fetch_remote(repo_info) + + git_tool.fork_repo(url, github_token, + organization_name=organization_name, + ) + + repo_info = git_tool.get_transformed_repo_info_from_url( + url, organization_force=organization_name, + is_submodule=repo.get("is_submodule"), sub_path=repo.get("sub_path")) + if remote_origin: + working_repo.git.remote("remove", "origin") + repo_info.organization = "origin" + git_tool.add_and_fetch_remote(repo_info) + if config.force and remote_organization: + working_repo.git.remote("remove", organization_name) + + repo_info.organization = organization_name + git_tool.add_and_fetch_remote(repo_info) + + # Update origin to new repo + git_tool.generate_git_modules(lst_repo_organization, repo_path=config.dir) + git_tool.generate_odoo_install_locally() + + +if __name__ == '__main__': + main() diff --git a/script/git_change_remote.py b/script/git_change_remote.py new file mode 100755 index 0000000..4679d96 --- /dev/null +++ b/script/git_change_remote.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python +import os +import sys +import argparse +import logging +from git import Repo + +from retrying import retry # pip install retrying + +new_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '..')) +sys.path.append(new_path) + +from script import fork_github_repo +from script import git_tool + +_logger = logging.getLogger(__name__) +CST_GITHUB_TOKEN = "GITHUB_TOKEN" + + +def get_config(): + """Parse command line arguments, extracting the config file name, + returning the union of config file and command line arguments + + :return: dict of config file settings and command line arguments + """ + config = git_tool.GitTool.get_project_config() + + # TODO update description + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + description='''\ +''', + epilog='''\ +''' + ) + parser.add_argument('-d', '--dir', dest="dir", default="./", + help="Path of repo to change remote, including submodule.") + parser.add_argument('--github_token', dest="github_token", + default=config.get(CST_GITHUB_TOKEN), + help="GitHub token generated by user") + parser.add_argument("--open_web_browser", action="store_true", + help="Open web browser for each repo.") + parser.add_argument("--generate_only_install_locally", action="store_true", + help="Only generate script odoo_install_locally.sh.") + parser.add_argument("--generate_repo_source_from_building", action="store_true", + help=f"Only generate " + f"{git_tool.CST_FILE_SOURCE_REPO_ADDONS_ODOO}") + parser.add_argument("--sync_to", dest="sync_to", + help=f"Only synchronize matching repo, use path compare to " + f"repo.") + args = parser.parse_args() + return args + + +def main(): + # repo = Repo(root_path) + # lst_repo = get_all_repo() + config = get_config() + + if config.generate_only_install_locally: + gt = git_tool.GitTool() + gt.generate_odoo_install_locally() + return + + if config.generate_repo_source_from_building: + gt = git_tool.GitTool() + gt.generate_repo_source_from_building() + return + + if config.sync_to: + gt = git_tool.GitTool() + result = gt.get_matching_repo(repo_compare_to=config.sync_to, + force_normalize_compare=True) + gt.sync_to(result) + return + + # repo_root = Repo(".") + lst_repo = git_tool.GitTool.get_repo_info_submodule(repo_path=config.dir) + i = 0 + total = len(lst_repo) + for repo in lst_repo: + i += 1 + print(f"Nb element {i}/{total}") + url = repo.get("url") + repo_dir_root = repo.get("path") + upstream_name = "MathBenTech" + organization_name = "ERPLibre" + + if config.open_web_browser: + git_tool.GitTool.open_repo_web_browser(repo.get("url_https")) + + # Create the remote upstream + split_url = url.split("/") + split_url[-2] = upstream_name + upstream_url = "/".join(split_url) + + cloned_repo = Repo(repo_dir_root) + # Checkout branch 12.0 + # try: + # cloned_repo.git.checkout(cloned_repo.head.commit.hexsha) + # cloned_repo.delete_head("12.0") + # cloned_repo.git.checkout("MathBenTech/12.0", b="12.0", force=True) + # except: + # # cloned_repo.git.checkout("MathBenTech/12.0", b="12.0", force=True) + # print(f"Cannot change branch for {repo_dir_root}") + # # try: + # # cloned_repo.git.checkout("12.0") + # # except: + # # print(f"ERROR, missing branch 12.0 for {repo_dir_root}") + + _logger.info( + f"Fork {url} on dir {repo_dir_root} for organization {organization_name}") + + try: + upstream_remote = cloned_repo.remote(upstream_name) + print('Remote "%s" already exists in %s' % + (upstream_name, repo_dir_root)) + except ValueError: + upstream_remote = retry( + wait_exponential_multiplier=1000, + stop_max_delay=15000 + )(cloned_repo.create_remote)(upstream_name, upstream_url) + print('Remote "%s" created for %s' % (upstream_name, upstream_url)) + + try: + # Fetch the remote upstream + retry(wait_exponential_multiplier=1000, stop_max_delay=15000)( + upstream_remote.fetch)() + print('Remote "%s" fetched' % upstream_name) + except Exception: + print(f"ERROR git {repo_dir_root} remote {upstream_name} not exist.") + upstream_remote.remove(cloned_repo, upstream_name) + + +if __name__ == '__main__': + main() diff --git a/script/git_change_remote_https_to_git.py b/script/git_change_remote_https_to_git.py new file mode 100755 index 0000000..5b055bb --- /dev/null +++ b/script/git_change_remote_https_to_git.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +# © 2020 TechnoLibre (http://www.technolibre.ca) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import argparse +import logging +import os +import sys + +from git import Repo + +new_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '..')) +sys.path.append(new_path) + +from script.git_tool import GitTool + +_logger = logging.getLogger(__name__) + + +def get_config(): + """Parse command line arguments, extracting the config file name, + returning the union of config file and command line arguments + + :return: dict of config file settings and command line arguments + """ + + # TODO update description + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + description='''\ +''', + epilog='''\ +''' + ) + parser.add_argument('-d', '--dir', dest="dir", default="./", + help="Path of repo to change remote, including submodule.") + parser.add_argument('-f', '--upstream', dest="upstream", default="origin", + help="Upstream name to change address https to git.") + # TODO support all_upstream + # parser.add_argument("--all_upstream", action="store_true", + # help="Replace for all existing upstream for each repo.") + parser.add_argument("--git_to_https", action="store_true", + help="Replace all repo git to https.") + args = parser.parse_args() + return args + + +def main(): + git_tool = GitTool() + config = get_config() + + upstream_name = config.upstream + lst_repo = git_tool.get_repo_info_submodule(config.dir, add_root=True, + upstream=upstream_name) + i = 0 + total = len(lst_repo) + for repo in lst_repo: + i += 1 + print(f"Nb element {i}/{total}") + repo_sm = Repo(repo.get("name")) + remote_upstream_name = [a for a in repo_sm.remotes if upstream_name == a.name] + new_url = repo.get("url_https") if config.git_to_https else repo.get("url_git") + + for remote in remote_upstream_name: + remote.set_url(new_url) + print('Remote "%s" created for %s' % (upstream_name, new_url)) + + +if __name__ == '__main__': + main() diff --git a/script/git_tool.py b/script/git_tool.py new file mode 100644 index 0000000..77699a7 --- /dev/null +++ b/script/git_tool.py @@ -0,0 +1,495 @@ +#!/usr/bin/env python +# © 2020 TechnoLibre (http://www.technolibre.ca) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import os +from . import addons_repo_origin +import webbrowser +from retrying import retry # pip install retrying +from agithub.GitHub import GitHub # pip install agithub +from giturlparse import parse # pip install giturlparse + +from git import Repo +from typing import List + +CST_FILE_SOURCE_REPO_ADDONS_ODOO = "source_repo_addons_odoo.csv" +CST_GITHUB_TOKEN = "GITHUB_TOKEN" + + +class Struct(object): + def __init__(self, **entries): + self.__dict__.update(entries) + + +class GitTool: + @staticmethod + def get_url(url: str) -> object: + """ + Transform an url in git and https. + :param url: The url to transform in https and git + :return: (url, url_https, url_git) + """ + if "https" in url: + url_git = f"git@{url[8:].replace('/', ':', 1)}" + url_https = url + else: + url_https = f"https://{(url[4:]).replace(':', '/')}" + url_git = url + + return url, url_https, url_git + + def get_transformed_repo_info_from_url(self, url: str, repo_path: str = "./", + get_obj: bool = True, + is_submodule: bool = True, + organization_force: str = None, + sub_path: str = "addons") -> object: + """ + + :param url: + :param repo_path: + :param get_obj: + :param is_submodule: + :param path: + :param organization_force: Keep repo_path and change organization + :return: + """ + _, url_https, url_git = self.get_url(url) + url_split = url_https.split("/") + organization = url_split[3] + repo_name = url_split[4] + if repo_name[-4:] == ".git": + repo_name = repo_name[:-4] + if is_submodule: + if not sub_path or sub_path == ".": + path = f"{repo_name}" + else: + path = f"{sub_path}/{organization}_{repo_name}" + else: + path = f"{repo_path}" + if repo_path[-1] == "/": + relative_path = f"{repo_path}{path}" + else: + relative_path = f"{repo_path}/{path}" + relative_path = os.path.normpath(relative_path) + + if organization_force: + organization = organization_force + url_split = url_https.split("/") + url_split[3] = organization + url_https = "/".join(url_split) + url, _, url_git = self.get_url(url_https) + + d = { + "url": url, + "url_git": url_git, + "url_https": url_https, + "organization": organization, + "repo_name": repo_name, + "path": path, + "relative_path": relative_path, + "is_submodule": is_submodule, + "sub_path": sub_path, + } + if get_obj: + return Struct(**d) + return d + + @staticmethod + def get_repo_info_submodule(repo_path: str = "./", add_root: bool = False, + upstream: str = "origin") -> list: + """ + Get information about submodule from repo_path + :param repo_path: path of repo to get information about submodule + :param add_root: add information about root repository + :param upstream: Use this upstream of root + :return: + [{ + "url": original_url, + "url_https": url in https, + "url_git": url in git, + "path": path of the submodule + "relative_path": relative path of the submodule + "name": name of the submodule + }] + """ + filename = f"{repo_path}/.gitmodules" + lst_repo = [] + with open(filename) as file: + txt = file.readlines() + + name = "" + url = "" + no_line = 0 + first_execution = True + for line in txt: + no_line += 1 + if line[:12] == "[submodule \"": + if not first_execution: + data = { + "url": url, + "url_https": url_https, + "url_git": url_git, + "path": path, + "relative_path": f"{repo_path}/{path}", + "name": name, + } + lst_repo.append(data) + name = line[12:-3] + first_execution = False + continue + elif line[:7] == "\turl = ": + url = line[7:-1] + if "https" in url: + url_git = f"git@{url[8:].replace('/', ':', 1)}" + url_https = url + else: + url_https = f"https://{(url[4:]).replace(':', '/')}" + url_git = url + continue + elif line[:8] == "\tpath = ": + path = line[8:-1] + else: + if not line.strip(): + continue + raise Exception(".gitmodules seems not correctly formatted.") + + if not first_execution: + # Get last item + data = { + "url": url, + "url_https": url_https, + "url_git": url_git, + "path": path, + "relative_path": f"{repo_path}/{path}", + "name": name, + } + lst_repo.append(data) + + if add_root: + repo_root = Repo(repo_path) + url = repo_root.git.remote("get-url", "origin") + if "https" in url: + url_git = f"git@{url[8:].replace('/', ':', 1)}" + url_https = url + else: + url_https = f"https://{(url[4:]).replace(':', '/')}" + url_git = url + + data = { + "url": url, + "url_https": url_https, + "url_git": url_git, + "path": repo_path, + "name": "", + } + lst_repo.insert(0, data) + # Sort + lst_repo = sorted(lst_repo, key=lambda k: k.get("name")) + return lst_repo + + @staticmethod + def get_repo_info_from_data_structure(repo_path="./", ignore_odoo=False): + """ + Deprecated, read file addons_repo_origin to obtains repo list. + :return: + [{ + "url": original_url, + "url_https": url in https, + "url_git": url in git, + "path": path of the submodule + "relative_path": relative path of the submodule + "name": name of the submodule + }] + """ + dct_config = { + "addons": addons_repo_origin.config_addons + } + if not ignore_odoo: + dct_config[""] = addons_repo_origin.config + result = [] + for c_path, dct_config in dct_config.items(): + for server, dct_organization in dct_config.items(): + for organization, lst_repo in dct_organization.items(): + for repo in lst_repo: + url = f"https://{server}/{organization}/{repo}.git" + url_https = f"https://{server}/{organization}/{repo}.git" + url_git = f"git@{server}:{organization}/{repo}.git" + if not c_path: + path = f"{repo}" + else: + path = f"{c_path}/{organization}_{repo}" + + name = path + result.append( + { + "url": url, + "url_https": url_https, + "url_git": url_git, + "relative_path": f"{repo_path}/{path}", + "path": path, + "name": name, + } + ) + return result + + @staticmethod + def get_project_config(repo_path="./"): + """ + Get information about configuration in env_var.sh + :param repo_path: path of repo to get information env_var.sh + :return: + { + CST_GITHUB_TOKEN: TOKEN, + } + """ + filename = f"{repo_path}env_var.sh" + with open(filename) as file: + txt = file.readlines() + txt = [a[:-1] for a in txt if "=" in a] + + lst_filter = [CST_GITHUB_TOKEN] + dct_config = {} + # Take filtered value and get bash string values + for f in lst_filter: + for v in txt: + if f in v: + lst_v = v.split("=") + if len(lst_v) > 1: + dct_config[CST_GITHUB_TOKEN] = v.split("=")[1][1:-1] + return dct_config + + @staticmethod + def open_repo_web_browser(dct_repo): + url = dct_repo.get("url_https") + if url: + webbrowser.open_new_tab(url) + + def generate_repo_source_from_building(self, repo_path="./"): + """ + Generate csv file with information about all source addons repo of Odoo + :param repo_path: Path to build repo source + :return: + """ + file_name = f"{repo_path}{CST_FILE_SOURCE_REPO_ADDONS_ODOO}" + lst_repo_info = self.get_repo_info_from_data_structure(ignore_odoo=True) + lst_result = [f"{a.get('url_https')}\n" for a in lst_repo_info] + with open(file_name, "w") as file: + file.writelines(lst_result) + + def generate_odoo_install_locally(self, repo_path="./"): + # lst_repo = self.get_repo_info_from_data_structure(ignore_odoo=True) + lst_repo = self.get_repo_info_submodule(repo_path=repo_path) + lst_result = [] + for repo in lst_repo: + # Exception, ignore addons/OCA_web and root + if "addons/OCA_web" == repo.get("path") or \ + "odoo" == repo.get("path"): + continue + str_repo = f' printf "${{OE_HOME}}/{repo.get("path")}," >> ' \ + f'${{OE_CONFIG_FILE}}\n' + lst_result.append(str_repo) + with open(f"{repo_path}script/odoo_install_locally.sh") as file: + all_lines = file.readlines() + # search place to add/replace lines + index = 0 + find_index = False + index_find = 0 + for line in all_lines: + if not find_index and "if [ $MINIMAL_ADDONS = \"False\" ]; then\n" == line: + index_find = index + 1 + for insert_line in lst_result: + all_lines.insert(index_find, insert_line) + index_find += 1 + find_index = True + # Delete all next line until meet fi + if find_index and "fi\n" == line: + # slice it + all_lines = all_lines[0:index_find] + all_lines[index:] + break + index += 1 + + # create file + with open(f"{repo_path}script/odoo_install_locally.sh", mode="w") as file: + file.writelines(all_lines) + + def generate_git_modules(self, lst_repo: List[Struct], repo_path: str = "./"): + lst_modules = [] + for repo in lst_repo: + if repo.is_submodule: + lst_modules.append(f"[submodule \"{repo.path}\"]\n" + f"\turl = {repo.url_https}\n" + f"\tpath = {repo.path}\n") + + # create file + with open(f"{repo_path}.gitmodules", mode="w") as file: + file.writelines(lst_modules) + + def get_source_repo_addons(self, repo_path="./", add_repo_root=False): + """ + Read file CST_FILE_SOURCE_REPO_ADDONS_ODOO and return structure of data + :param repo_path: path to find file CST_FILE_SOURCE_REPO_ADDONS_ODOO + :param add_repo_root: force adding repo root in the list + :return: + [{ + "url": original_url, + "url_https": url in https, + "url_git": url in git, + "path": path of the submodule + "relative_path": relative path of the submodule + "name": name of the submodule + }] + """ + file_name = f"{repo_path}{CST_FILE_SOURCE_REPO_ADDONS_ODOO}" + lst_result = [] + if add_repo_root: + # TODO what to do if origin not exist? + repo = Repo(repo_path) + url = [a for a in repo.remotes][0].url + repo_info = self.get_transformed_repo_info_from_url(url, + repo_path=repo_path, + get_obj=False, + is_submodule=False) + lst_result.append(repo_info) + with open(file_name) as file: + all_lines = file.readlines() + if all_lines: + # Ignore first line + all_lines = all_lines[1:] + for line in all_lines: + # Separate information with path in tuple + line_split = line[:-1].split(',') + if len(line_split) != 2: + print(f"Error with line {line}, suppose to have only 1 ','.") + exit(1) + url, path = line_split + repo_info = self.get_transformed_repo_info_from_url(url, + repo_path=repo_path, + get_obj=False, + sub_path=path) + lst_result.append(repo_info) + return lst_result + + def get_matching_repo(self, actual_repo="./", repo_compare_to="./", + force_normalize_compare=False): + """ + Compare repo with .gitmodules files + :param actual_repo: + :param repo_compare_to: + :param force_normalize_compare: update name of compare repo + :return: + """ + lst_repo_info_actual = self.get_repo_info_submodule(actual_repo) + dct_repo_info_actual = {a.get("name"): a for a in lst_repo_info_actual} + set_actual = set(dct_repo_info_actual.keys()) + # set_actual_repo = set( + # [a[a.find("_") + 1:] for a in dct_repo_info_actual.keys()]) + + dct_repo_info_actual_adapted = {key[key.find("_") + 1:]: item for key, item in + dct_repo_info_actual.items()} + set_actual_repo = set(dct_repo_info_actual_adapted.keys()) + + lst_repo_info_compare = self.get_repo_info_submodule(repo_compare_to) + if force_normalize_compare: + for repo_info in lst_repo_info_compare: + url_https = repo_info.get("url_https") + url_split = url_https.split("/") + organization = url_split[3] + repo_name = url_split[4][:-4] + # name = f"addons/{organization}_{repo_name}" + name = f"{repo_name}" + repo_info["name"] = name + + dct_repo_info_compare = {a.get("name"): a for a in lst_repo_info_compare} + set_compare = set(dct_repo_info_compare.keys()) + + # TODO finish the match + # lst_same_name = set_actual.intersection(set_compare) + # lst_missing_name = set_compare.difference(set_actual) + + lst_same_name_normalize = set_actual_repo.intersection(set_compare) + lst_missing_name_normalize = set_compare.difference(set_actual_repo) + lst_over_name_normalize = set_actual_repo.difference(set_compare) + print(f"Has {len(lst_same_name_normalize)} sames, " + f"{len(lst_missing_name_normalize)} missing, " + f"{len(lst_over_name_normalize)} more.") + + lst_match = [] + for key in lst_same_name_normalize: + lst_match.append(( + dct_repo_info_actual_adapted[key], + dct_repo_info_compare[key] + )) + + return lst_match + + @staticmethod + def sync_to(lst_compare_repo_info): + i = 0 + total = len(lst_compare_repo_info) + lst_same = [] + lst_diff = [] + for original, compare_to in lst_compare_repo_info: + i += 1 + print(f"Nb element {i}/{total}") + repo_original = Repo(original.get("relative_path")) + commit_original = repo_original.head.object.hexsha + repo_compare = Repo(compare_to.get("relative_path")) + commit_compare = repo_compare.head.object.hexsha + if commit_original != commit_compare: + print(f"DIFF - {original.get('name')}") + lst_diff.append((original, compare_to)) + repo_original.git.checkout(commit_compare) + else: + print(f"SAME - {original.get('name')}") + lst_same.append((original, compare_to)) + print(f"finish same {len(lst_same)}, diff {len(lst_diff)}") + + @staticmethod + def add_and_fetch_remote(repo_info: Struct): + working_repo = Repo(repo_info.relative_path) + if repo_info.organization in [a.name for a in working_repo.remotes]: + print(f"Remote \"{repo_info.organization}\" already exist " + f"in {repo_info.relative_path}") + return + # Add remote + upstream_remote = retry(wait_exponential_multiplier=1000, stop_max_delay=15000)( + working_repo.create_remote)(repo_info.organization, repo_info.url_https) + print('Remote "%s" created for %s' % ( + repo_info.organization, repo_info.url_https)) + + # Fetch the remote + retry(wait_exponential_multiplier=1000, stop_max_delay=15000)( + upstream_remote.fetch)() + print('Remote "%s" fetched' % repo_info.organization) + + def fork_repo(self, upstream_url: str, github_token: str, + organization_name: str = ""): + # https://developer.github.com/apps/building-integrations/setting-up-and-registering-oauth-apps/about-scopes-for-oauth-apps/ + gh = GitHub(token=github_token) + parsed_url = parse(upstream_url) + + # Fork the repo + status, user = gh.user.get() + user_name = user['login'] if not organization_name else organization_name + status, forked_repo = gh.repos[user_name][parsed_url.repo].get() + if status == 404: + status, upstream_repo = ( + gh.repos[parsed_url.owner][parsed_url.repo].get()) + if status == 404: + print("Unable to find repo %s" % upstream_url) + exit(1) + args = {} + if organization_name: + args["organization"] = organization_name + status, forked_repo = ( + gh.repos[parsed_url.owner][parsed_url.repo].forks.post(**args)) + if status == 404: + print("Error when forking repo %s" % forked_repo) + exit(1) + else: + print("Forked %s to %s" % (upstream_url, forked_repo['ssh_url'])) + elif status == 202: + print("Forked repo %s already exists" % forked_repo['full_name']) + elif status != 200: + print("Status not supported: %s - %s" % (status, forked_repo)) + exit(1) + return forked_repo diff --git a/script/list_repo_diff.py b/script/list_repo_diff.py new file mode 100644 index 0000000..dd9fa11 --- /dev/null +++ b/script/list_repo_diff.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python +import os +import sys +import webbrowser +import argparse +import logging +from git import Repo + +from retrying import retry # pip install retrying + +new_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '..')) +sys.path.append(new_path) + +from script.git_tool import GitTool +from script import fork_github_repo + +_logger = logging.getLogger(__name__) +CST_GITHUB_TOKEN = "GITHUB_TOKEN" + + +def get_config(): + """Parse command line arguments, extracting the config file name, + returning the union of config file and command line arguments + + :return: dict of config file settings and command line arguments + """ + # TODO update description + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + description='''\ +''', + epilog='''\ +''' + ) + parser.add_argument('-d', '--dir', dest="dir", default="./", + help="Path of repo to change remote, including submodule.") + args = parser.parse_args() + return args + + +def main(): + config = get_config() + lst_repo = GitTool.get_repo_info_submodule(repo_path=config.dir) + branch_search = "12.0" + # repo = Repo(root_path) + # repo_root = Repo(".") + lst_result = [] + + i = 0 + total = len(lst_repo) + for repo in lst_repo: + i += 1 + print(f"Nb element {i}/{total}") + repo_dir_root = repo.get("path") + remote_path = f"{config.dir}/{repo_dir_root}" + repo_root = Repo(remote_path) + repo_branch_search_sha = [a.object.hexsha for a in repo_root.branches if + branch_search in a.name] + if repo_branch_search_sha: + repo_branch_search_sha = repo_branch_search_sha[0] + else: + print(f"Error, missing branch {branch_search} in {remote_path}") + continue + lst_result.append((remote_path, repo_root.head.commit.hexsha, + repo_root.head.commit.hexsha != repo_branch_search_sha)) + + # print(repo_root) + + # # Create the remote upstream + # split_url = url.split("/") + # split_url[-2] = upstream_name + # upstream_url = "/".join(split_url) + # + # cloned_repo = Repo(repo_dir_root) + # try: + # upstream_remote = cloned_repo.remote(upstream_name) + # print('Remote "%s" already exists in %s' % + # (upstream_name, repo_dir_root)) + # except ValueError: + # upstream_remote = retry( + # wait_exponential_multiplier=1000, + # stop_max_delay=15000 + # )(cloned_repo.create_remote)(upstream_name, upstream_url) + # print('Remote "%s" created for %s' % (upstream_name, upstream_url)) + # + # try: + # # Fetch the remote upstream + # retry(wait_exponential_multiplier=1000, stop_max_delay=15000)( + # upstream_remote.fetch)() + # print('Remote "%s" fetched' % upstream_name) + # except Exception: + # print(f"ERROR git {repo_dir_root} remote {upstream_name} not exist.") + # upstream_remote.remove(upstream_remote, upstream_name) + + i = 0 + i_len = len(lst_result) + for path, hash, diff in lst_result: + i += 1 + if diff: + print(f"{i:02d}/{i_len} {diff} {path}\t{hash}") + + # lst_repo = GitTool.get_repo_info_from_data_structure() + # for repo in lst_repo: + # repo_dir_root = repo.get("path") + # repo_root = Repo(remote_path) + # repo_root.git.checkout() + + +if __name__ == '__main__': + main() diff --git a/script/odoo_install_OSX_dependancy.sh b/script/odoo_install_OSX_dependancy.sh new file mode 100755 index 0000000..f6e3398 --- /dev/null +++ b/script/odoo_install_OSX_dependancy.sh @@ -0,0 +1,52 @@ +#!/bin/bash +################################################################################ +# Script for installing Odoo on OSX +# Author: Alexandre Ferreira Benevides +#------------------------------------------------------------------------------- +# This script will install dependency for Odoo on your OSX server. +#------------------------------------------------------------------------------- +################################################################################ + +OE_USER=$(whoami) + +#-------------------------------------------------- +# Install PostgreSQL Server +#-------------------------------------------------- +echo "\n---- Install PostgreSQL Server ----" +brew install postgresql + +echo "\n---- Creating the ODOO PostgreSQL User ----" +sudo su - postgres -c "createuser -s ${OE_USER}" 2> /dev/null || true + +#-------------------------------------------------- +# Install Dependencies +#-------------------------------------------------- +echo "\n--- Installing Python 3 + pip3 --" +brew install git python3 wget +brew link git +brew link wget +echo "\n---- Installing nodeJS NPM and rtlcss for LTR support ----" +brew install nodejs npm +sudo npm install -g rtlcss + +#-------------------------------------------------- +# Install Wkhtmltopdf if needed +#-------------------------------------------------- +echo "\n---- Installing Wkhtmltopdf if needed ----" +if [ ! -f "wkhtmltox-0.12.5-1.macos-carbon.pkg" ]; then + sudo wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.macos-carbon.pkg + sudo sudo installer -pkg wkhtmltox-0.12.5-1.macos-carbon.pkg -target / +else echo "Wkhtmltopdf already installed" +fi + +# =============================================================================================== +# !!!! FOR OSX there is a problem with python 3.7.5 with PILLOW, use 3.6.9 instead and works fine +# install python 3.6.9 +# brew install pyenv +# pyenv install 3.6.9 +# then redoo link: +# unlink /usr/local/bin/python3 +# ln -s ~/.pyenv/versions/3.6.9/bin/python3.6 /usr/local/bin/python3 +# =============================================================================================== +echo "\n---- Installing venv if not already existing (rm -r venv if already exists) ----" +~/.pyenv/versions/3.6.9/bin/python3.6 -m venv venv diff --git a/script/odoo_install_daemon.sh b/script/odoo_install_daemon.sh new file mode 100755 index 0000000..9d03565 --- /dev/null +++ b/script/odoo_install_daemon.sh @@ -0,0 +1,88 @@ +#!/bin/bash +################################################################################ +# Script for installing Odoo on Ubuntu 14.04, 15.04, 16.04 and 18.04 (could be used for other version too) +# Author: Yenthe Van Ginneken +#------------------------------------------------------------------------------- +# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances +# in one Ubuntu because of the different xmlrpc_ports +#------------------------------------------------------------------------------- +################################################################################ + +. ../env_var.sh + +#OE_USER="odoo" +#OE_HOME="/${OE_USER}/odoo" +#OE_HOME_EXT="/${OE_USER}/odoo/odoo/odoo" +## The default port where this Odoo instance will run under (provided you use the command -c in the terminal) +## Set to true if you want to install it, false if you don't need it or have it already installed. +#INSTALL_WKHTMLTOPDF="True" +## Set the default Odoo port (you still have to use -c /etc/odoo-server.conf for example to use this.) +#OE_PORT="8069" +## set the superadmin password +#OE_SUPERADMIN="admin" +#OE_CONFIG="${OE_USER}" + +#-------------------------------------------------- +# Adding ODOO as a deamon with SystemD +#-------------------------------------------------- +echo -e "\n* Create init file" +sudo rm -f /tmp/${OE_CONFIG} +cat < /tmp/${OE_CONFIG} +[Unit] +Description=${OE_USER} +Requires=postgresql.service +After=network.target network-online.target postgresql.service + +[Service] +Type=simple +SyslogIdentifier=${OE_USER} +PermissionsStartOnly=true +User=${OE_USER} +Group=${OE_USER} +Restart=always +RestartSec=5 +PIDFile=${OE_HOME_ODOO}/venv/service.pid +ExecStart=${OE_HOME_ODOO}/venv/run.sh +StandardOutput=journal+console + +[Install] +WantedBy=multi-user.target +EOF + +echo -e "* Security Init File" +sudo cp /tmp/${OE_CONFIG} /etc/systemd/system/${OE_CONFIG}.service +sudo chmod 755 /etc/systemd/system/${OE_CONFIG}.service +sudo chown root: /etc/systemd/system/${OE_CONFIG}.service + +echo -e "* Start ODOO on Startup" +sudo systemctl daemon-reload +sudo systemctl enable ${OE_CONFIG}.service + +sudo su ${OE_USER} -c "sudo rm -f /tmp/${OE_USER}run.sh" +cat < /tmp/${OE_USER}run.sh +#!/usr/bin/env bash +cd ${OE_HOME_ODOO} +source ./venv/bin/activate +python3 ${OE_HOME_ODOO}/odoo/odoo-bin -c ${OE_HOME_ODOO}/config.conf +EOF + +echo -e "* Security Run File" +sudo cp /tmp/${OE_USER}run.sh ${OE_HOME_ODOO}/venv/run.sh +sudo chmod 755 ${OE_HOME_ODOO}/venv/run.sh +sudo chown ${OE_USER}: ${OE_HOME_ODOO}/venv/run.sh + +echo "-----------------------------------------------------------" +echo "Done! The Odoo server is up and running. Specifications:" +echo "Port: ${OE_PORT}" +echo "Port Long Polling: ${OE_LONGPOLLING_PORT}" +echo "User service: ${OE_USER}" +echo "User PostgreSQL: ${OE_USER}" +echo "Code location: ${OE_USER}" +echo "Addons folder: ${OE_USER}/${OE_CONFIG}/addons/" +echo "Start Odoo service: sudo systemctl start ${OE_CONFIG}" +echo "Stop Odoo service: sudo systemctl stop ${OE_CONFIG}" +echo "Restart Odoo service: sudo systemctl restart ${OE_CONFIG}" +echo "-----------------------------------------------------------" + +echo -e "* Starting Odoo Service" +sudo systemctl restart ${OE_CONFIG}.service diff --git a/script/odoo_install_debian_dependancy.sh b/script/odoo_install_debian_dependancy.sh new file mode 100755 index 0000000..f3754e8 --- /dev/null +++ b/script/odoo_install_debian_dependancy.sh @@ -0,0 +1,83 @@ +#!/bin/bash +################################################################################ +# Script for installing Odoo on Ubuntu 14.04, 15.04, 16.04 and 18.04 (could be used for other version too) +# Author: Yenthe Van Ginneken +#------------------------------------------------------------------------------- +# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances +# in one Ubuntu because of the different xmlrpc_ports +#------------------------------------------------------------------------------- +################################################################################ + +. ../env_var.sh + +OE_USER=$(whoami) +# The default port where this Odoo instance will run under (provided you use the command -c in the terminal) +# Set to true if you want to install it, false if you don't need it or have it already installed. +#INSTALL_WKHTMLTOPDF="True" + +## +### WKHTMLTOPDF download links +## === Ubuntu Trusty x64 & x32 === (for other distributions please replace these two links, +## in order to have correct version of wkhtmltopdf installed, for a danger note refer to +## https://github.com/odoo/odoo/wiki/Wkhtmltopdf ): +WKHTMLTOX_X64=https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.trusty_amd64.deb +WKHTMLTOX_X32=https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.trusty_i386.deb + +#-------------------------------------------------- +# Update Server +#-------------------------------------------------- +echo -e "\n---- Update Server ----" + +# add-apt-repository can install add-apt-repository Ubuntu 18.x +sudo apt-get install software-properties-common -y +# universe package is for Ubuntu 18.x +sudo add-apt-repository universe +# libpng12-0 dependency for wkhtmltopdf +sudo add-apt-repository "deb http://mirrors.kernel.org/ubuntu/ xenial main" +sudo apt-get update +sudo apt-get upgrade -y + +#-------------------------------------------------- +# Install PostgreSQL Server +#-------------------------------------------------- +echo -e "\n---- Install PostgreSQL Server ----" +sudo apt-get install postgresql -y + +echo -e "\n---- Creating the ODOO PostgreSQL User ----" +sudo su - postgres -c "createuser -s $OE_USER" 2> /dev/null || true + +#-------------------------------------------------- +# Install Dependencies +#-------------------------------------------------- +echo -e "\n--- Installing Python 3 + pip3 --" +sudo apt-get install git python3 python3-pip build-essential wget python3-dev python3-venv python3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less libpng12-0 gdebi -y + +echo -e "\n---- Installing nodeJS NPM and rtlcss for LTR support ----" +sudo apt-get install nodejs npm -y +sudo npm install -g rtlcss + +if [ ${INSTALL_NGINX} = "True" ]; then + sudo apt install nginx -y +fi + +#-------------------------------------------------- +# Install Wkhtmltopdf if needed +#-------------------------------------------------- +if [ ${INSTALL_WKHTMLTOPDF} = "True" ]; then + INSTALLED=$(dpkg -s wkhtmltox|grep installed) + if [ "" == "${INSTALLED}" ]; then + echo -e "\n---- Install wkhtml and place shortcuts on correct place for ODOO 12 ----" + #pick up correct one from x64 & x32 versions: + if [ "`getconf LONG_BIT`" == "64" ];then + _url=$WKHTMLTOX_X64 + else + _url=$WKHTMLTOX_X32 + fi + sudo wget ${_url} + sudo gdebi --n `basename ${_url}` + sudo ln -s /usr/local/bin/wkhtmltopdf /usr/bin + sudo ln -s /usr/local/bin/wkhtmltoimage /usr/bin + fi +else + echo "Wkhtmltopdf isn't installed due to the choice of the user!" +fi diff --git a/script/odoo_install_dev.sh b/script/odoo_install_dev.sh new file mode 100755 index 0000000..2f5f67b --- /dev/null +++ b/script/odoo_install_dev.sh @@ -0,0 +1,22 @@ +#!/bin/bash +################################################################################ +# Script for installing Odoo locally for dev +# Author: Alexandre Ferreira Benevides +################################################################################ + +. ../env_var.sh + +if [[ "${OSTYPE}" == "linux-gnu" ]]; then + OS=$(lsb_release -si) + if [[ "${OS}" == "Ubuntu" ]]; then + echo "\n---- linux-gnu installation process started ----" + ./odoo_install_debian_dependancy.sh + ./odoo_install_locally.sh + else + echo "Your Linux system is not supported." + fi +elif [[ "${OSTYPE}" == "darwin"* ]]; then + echo "\n---- Darwin installation process started ----" + ./odoo_install_OSX_dependancy.sh + ./odoo_install_locally.sh +fi diff --git a/script/odoo_install_locally.sh b/script/odoo_install_locally.sh new file mode 100755 index 0000000..2ebaf2e --- /dev/null +++ b/script/odoo_install_locally.sh @@ -0,0 +1,168 @@ +#!/bin/bash +################################################################################ +# Script for installing Odoo on Ubuntu 14.04, 15.04, 16.04 and 18.04 (could be used for other version too) +# Author: Yenthe Van Ginneken +#------------------------------------------------------------------------------- +# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances +# in one Ubuntu because of the different xmlrpc_ports +#------------------------------------------------------------------------------- +# Make a new file: +# sudo nano odoo-install.sh +# Place this content in it and then make the file executable: +# sudo chmod +x odoo-install.sh +# Execute the script to install Odoo: +# ./odoo-install +################################################################################ + +. ./env_var.sh + +OE_USER=$(whoami) +OE_HOME=$PWD +OE_HOME_EXT="${OE_HOME}/odoo" +# The default port where this Odoo instance will run under (provided you use the command -c in the terminal) +# Set to true if you want to install it, false if you don't need it or have it already installed. +#INSTALL_WKHTMLTOPDF="True" +# Set the default Odoo port (you still have to use -c /etc/odoo-server.conf for example to use this.) +#OE_PORT="8069" +#OE_LONGPOLLING_PORT="8072" +# Choose the Odoo version which you want to install. For example: 12.0, 11.0, 10.0 or saas-18. When using 'master' the master version will be installed. +# IMPORTANT! This script contains extra libraries that are specifically needed for Odoo 12.0 +#OE_VERSION="stable_prod_12.0" +# set the superadmin password +#OE_SUPERADMIN="admin" +OE_CONFIG_FILE="${OE_HOME}/config.conf" +#OE_CONFIG="${OE_USER}" +#MINIMAL_ADDONS="False" +#INSTALL_NGINX="True" + +echo -e "* Create server config file" + +touch ${OE_CONFIG_FILE} +echo -e "* Creating server config file" +printf '[options] \n; This is the password that allows database operations:\n' > ${OE_CONFIG_FILE} +printf "admin_passwd = ${OE_SUPERADMIN}\n" >> ${OE_CONFIG_FILE} +printf "db_host = False\n" >> ${OE_CONFIG_FILE} +printf "db_port = False\n" >> ${OE_CONFIG_FILE} +printf "db_user = ${OE_USER}\n" >> ${OE_CONFIG_FILE} +printf "db_password = False\n" >> ${OE_CONFIG_FILE} +printf "xmlrpc_port = ${OE_PORT}\n" >> ${OE_CONFIG_FILE} +printf "longpolling_port = ${OE_LONGPOLLING_PORT}\n" >> ${OE_CONFIG_FILE} + +printf "addons_path = ${OE_HOME_EXT}/addons,${OE_HOME}/addons/addons," >> ${OE_CONFIG_FILE} +printf "${OE_HOME}/addons/OCA_web," >> ${OE_CONFIG_FILE} +if [ $MINIMAL_ADDONS = "False" ]; then + printf "${OE_HOME}/addons/MathBenTech_development," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/MathBenTech_odoo-business-spending-management-quebec-canada," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/MathBenTech_scrummer," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/Numigi_odoo-base-addons," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/Numigi_odoo-entertainment-addons," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/Numigi_odoo-git-addons," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/Numigi_odoo-hr-addons," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/Numigi_odoo-partner-addons," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/Numigi_odoo-product-addons," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/Numigi_odoo-project-addons," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/Numigi_odoo-purchase-addons," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/Numigi_odoo-stock-addons," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/Numigi_odoo-survey-addons," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/Numigi_odoo-timesheet-addons," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/Numigi_odoo-web-addons," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_account-analytic," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_account-budgeting," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_account-closing," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_account-consolidation," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_account-financial-reporting," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_account-financial-tools," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_account-fiscal-rule," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_account-invoice-reporting," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_account-invoicing," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_account-payment," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_account-reconcile," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_apps-store," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_bank-payment," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_bank-statement-import," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_brand," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_business-requirement," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_commission," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_community-data-files," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_connector-telephony," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_contract," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_credit-control," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_currency," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_data-protection," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_donation," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_e-commerce," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_edi," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_event," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_helpdesk," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_hr," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_knowledge," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_l10n-canada," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_maintenance," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_management-system," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_manufacture," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_margin-analysis," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_mis-builder," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_multi-company," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_partner-contact," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_pos," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_product-attribute," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_product-pack," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_product-variant," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_project," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_project-reporting," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_purchase-workflow," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_queue," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_reporting-engine," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_sale-workflow," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_server-auth," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_server-brand," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_server-env," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_server-tools," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_server-ux," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_social," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_stock-logistics-warehouse," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_timesheet," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_website," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/OCA_wms," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/Smile-SA_odoo_addons," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/muk-it_muk_base," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/muk-it_muk_dms," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/muk-it_muk_docs," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/muk-it_muk_misc," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/muk-it_muk_quality," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/muk-it_muk_web," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/muk-it_muk_website," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/odooaktiv_QuotationRevision," >> ${OE_CONFIG_FILE} + printf "${OE_HOME}/addons/openeducat_openeducat_erp," >> ${OE_CONFIG_FILE} +fi +printf "\n" >> ${OE_CONFIG_FILE} + +printf "workers = 0\n" >> ${OE_CONFIG_FILE} +printf "max_cron_threads = 2\n" >> ${OE_CONFIG_FILE} + +if [ ${INSTALL_NGINX} = "True" ]; then + printf "xmlrpc_interface = 127.0.0.1\n" >> ${OE_CONFIG_FILE} + printf "netrpc_interface = 127.0.0.1\n" >> ${OE_CONFIG_FILE} + printf "proxy_mode = True\n" >> ${OE_CONFIG_FILE} +fi + +echo -e "\n---- Install Odoo with addons module ----" +git submodule update --init + +echo -e "\n---- Create Virtual environment Python ----" +cd ${OE_HOME} +python3 -m venv venv +cd - + +echo -e "\n---- Install python packages/requirements ----" +${OE_HOME}/venv/bin/pip3 install --upgrade pip +${OE_HOME}/venv/bin/pip3 install wheel phonenumbers +${OE_HOME}/venv/bin/pip3 install -r "${OE_HOME}/odoo/requirements.txt" +${OE_HOME}/venv/bin/pip3 install -r "${OE_HOME}/requirements.txt" + +# For dev/testing +${OE_HOME}/venv/bin/pip3 install websocket-client + +echo -e "\n---- Add link dependency in site-packages of Python ----" +ln -fs ${OE_HOME_EXT}/odoo ${OE_HOME}/venv/lib/python3.7/site-packages/ +ln -fs ${OE_HOME_EXT}/odoo ${OE_HOME}/venv/lib/python3.6/site-packages/ diff --git a/script/odoo_install_production.sh b/script/odoo_install_production.sh new file mode 100755 index 0000000..8b5b165 --- /dev/null +++ b/script/odoo_install_production.sh @@ -0,0 +1,56 @@ +#!/bin/bash +################################################################################ +# Script for installing Odoo on Ubuntu 14.04, 15.04, 16.04 and 18.04 (could be used for other version too) +# Author: Yenthe Van Ginneken +#------------------------------------------------------------------------------- +# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances +# in one Ubuntu because of the different xmlrpc_ports +#------------------------------------------------------------------------------- +################################################################################ + +. ../env_var.sh + +./odoo_install_debian_dependancy.sh + +echo -e "\n---- Create ODOO system user ----" +sudo adduser --system --quiet --shell=/bin/bash --home=/${OE_USER} --gecos 'ODOO' --group ${OE_USER} +#The user should also be added to the sudo'ers group. +sudo adduser ${OE_USER} sudo + +echo -e "\n---- Creating the ODOO PostgreSQL User ----" +sudo su - postgres -c "createuser -s ${OE_USER}" 2> /dev/null || true + +#echo -e "\n---- Create Log directory ----" +#sudo mkdir /var/log/${OE_USER} +#sudo chown ${OE_USER}:${OE_USER} /var/log/${OE_USER} + +echo -e "\n---- Setting permissions on home folder ----" +sudo mkdir -p ${OE_HOME} +sudo chown -R ${OE_USER}:${OE_USER} ${OE_HOME} + +#-------------------------------------------------- +# Install ODOO +#-------------------------------------------------- +echo -e "\n==== Clone this installation ====" +REMOTE_URL_GIT=`git remote get-url origin` +BRANCH_GIT=`git rev-parse --abbrev-ref HEAD` +sudo su ${OE_USER} -c "git clone --branch ${BRANCH_GIT} ${REMOTE_URL_GIT} ${OE_HOME_ODOO}" +sudo cp ../env_var.sh ${OE_HOME_ODOO} +sudo chown -R ${OE_USER}:${OE_USER} ${OE_HOME_ODOO}/env_var.sh + +LAST_PWD=$PWD +cd ${OE_HOME_ODOO} +sudo su ${OE_USER} -c "./odoo_install_locally.sh" +cd ${LAST_PWD} +#echo -e "\n* Updating server config file" +#sudo su ${OE_USER} -c "printf 'logfile = /var/log/${OE_USER}/${OE_CONFIG}.log\n' >> /${OE_USER}/odoo/config.conf" + +#-------------------------------------------------- +# Adding ODOO as a daemon +#-------------------------------------------------- +./odoo_install_daemon.sh + +#-------------------------------------------------- +# Install Nginx if needed +#-------------------------------------------------- +./odoo_install_production_nginx.sh \ No newline at end of file diff --git a/script/odoo_install_production_nginx.sh b/script/odoo_install_production_nginx.sh new file mode 100755 index 0000000..9665557 --- /dev/null +++ b/script/odoo_install_production_nginx.sh @@ -0,0 +1,99 @@ +#!/bin/bash +################################################################################ +# Script for installing Odoo on Ubuntu 14.04, 15.04, 16.04 and 18.04 (could be used for other version too) +# Author: Yenthe Van Ginneken +#------------------------------------------------------------------------------- +# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances +# in one Ubuntu because of the different xmlrpc_ports +#------------------------------------------------------------------------------- +################################################################################ + +. ../env_var.sh + +#-------------------------------------------------- +# Install Nginx if needed +#-------------------------------------------------- +if [ ${INSTALL_NGINX} = "True" ]; then + echo -e "\n---- Installing and setting up Nginx ----" + cat < /tmp/nginx${OE_USER} +upstream odoo${OE_USER} { + server 127.0.0.1:${OE_PORT}; +} +upstream odoo${OE_USER}chat { + server 127.0.0.1:${OE_LONGPOLLING_PORT}; +} + +server { + listen 80; + + server_name ${WEBSITE_NAME}; + + # Add Headers for odoo proxy mode + proxy_set_header X-Forwarded-Host \$host; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto \$scheme; + proxy_set_header X-Real-IP \$remote_addr; + add_header X-Frame-Options "SAMEORIGIN"; + add_header X-XSS-Protection "1; mode=block"; + + # odoo request log files + access_log /var/log/nginx/${OE_USER}-access.log; + error_log /var/log/nginx/${OE_USER}-error.log; + + # Increase proxy buffer size + proxy_buffers 16 64k; + proxy_buffer_size 128k; + + proxy_read_timeout 720s; + proxy_connect_timeout 720s; + proxy_send_timeout 720s; + + # Force timeouts if the backend dies + proxy_next_upstream error timeout invalid_header http_500 http_502 + http_503; + + types { + text/less less; + text/scss scss; + } + + # Enable data compression + gzip on; + gzip_min_length 1100; + gzip_buffers 4 32k; + gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript application/pdf image/jpeg image/png; + gzip_vary on; + client_header_buffer_size 4k; + large_client_header_buffers 4 64k; + client_max_body_size 1024M; + + location / { + proxy_pass http://odoo${OE_USER}; + # by default, do not forward anything + proxy_redirect off; + } + + location /longpolling { + proxy_pass http://odoo${OE_USER}chat; + } + + # cache some static data in memory for 60mins. + location ~ /[a-zA-Z0-9_-]*/static/ { + proxy_cache_valid 200 302 60m; + proxy_cache_valid 404 1m; + proxy_buffering on; + expires 864000; + proxy_pass http://odoo${OE_USER}; + } +} +EOF + + sudo mv -f /tmp/nginx${OE_USER} /etc/nginx/sites-available/${WEBSITE_NAME} + sudo ln -fs /etc/nginx/sites-available/${WEBSITE_NAME} /etc/nginx/sites-enabled/${WEBSITE_NAME} + sudo rm -f /etc/nginx/sites-enabled/default /etc/nginx/sites-available/default + sudo systemctl restart nginx + echo "Done! The Nginx server is up and running. Configuration can be found at /etc/nginx/sites-enabled/${WEBSITE_NAME}" + echo "Run manually certbot : sudo certbot --nginx" +else + echo "Nginx isn't installed due to choice of the user!" +fi diff --git a/source_repo_addons_odoo.csv b/source_repo_addons_odoo.csv new file mode 100644 index 0000000..12e7adc --- /dev/null +++ b/source_repo_addons_odoo.csv @@ -0,0 +1,86 @@ +url,path +https://github.com/MathBenTech/development.git,addons +https://github.com/MathBenTech/odoo-business-spending-management-quebec-canada.git,addons +https://github.com/MathBenTech/scrummer.git,addons +https://github.com/muk-it/muk_base.git,addons +https://github.com/muk-it/muk_dms.git,addons +https://github.com/muk-it/muk_docs.git,addons +https://github.com/muk-it/muk_misc.git,addons +https://github.com/muk-it/muk_quality.git,addons +https://github.com/muk-it/muk_web.git,addons +https://github.com/muk-it/muk_website.git,addons +https://github.com/Numigi/odoo-base-addons.git,addons +https://github.com/Numigi/odoo-entertainment-addons.git,addons +https://github.com/Numigi/odoo-git-addons.git,addons +https://github.com/Numigi/odoo-hr-addons.git,addons +https://github.com/Numigi/odoo-partner-addons.git,addons +https://github.com/Numigi/odoo-product-addons.git,addons +https://github.com/Numigi/odoo-project-addons.git,addons +https://github.com/Numigi/odoo-purchase-addons.git,addons +https://github.com/Numigi/odoo-stock-addons.git,addons +https://github.com/Numigi/odoo-survey-addons.git,addons +https://github.com/Numigi/odoo-timesheet-addons.git,addons +https://github.com/Numigi/odoo-web-addons.git,addons +https://github.com/OCA/account-analytic.git,addons +https://github.com/OCA/account-budgeting.git,addons +https://github.com/OCA/account-closing.git,addons +https://github.com/OCA/account-consolidation.git,addons +https://github.com/OCA/account-financial-reporting.git,addons +https://github.com/OCA/account-financial-tools,addons +https://github.com/OCA/account-fiscal-rule.git,addons +https://github.com/OCA/account-invoicing.git,addons +https://github.com/OCA/account-invoice-reporting.git,addons +https://github.com/OCA/account-payment.git,addons +https://github.com/OCA/account-reconcile.git,addons +https://github.com/OCA/apps-store.git,addons +https://github.com/OCA/bank-payment.git,addons +https://github.com/OCA/bank-statement-import.git,addons +https://github.com/OCA/brand.git,addons +https://github.com/OCA/business-requirement.git,addons +https://github.com/OCA/commission.git,addons +https://github.com/OCA/community-data-files.git,addons +https://github.com/OCA/connector-telephony.git,addons +https://github.com/OCA/contract.git,addons +https://github.com/OCA/credit-control.git,addons +https://github.com/OCA/currency.git,addons +https://github.com/OCA/data-protection.git,addons +https://github.com/OCA/donation.git,addons +https://github.com/OCA/e-commerce.git,addons +https://github.com/OCA/edi.git,addons +https://github.com/OCA/event.git,addons +https://github.com/OCA/helpdesk.git,addons +https://github.com/OCA/hr.git,addons +https://github.com/OCA/knowledge.git,addons +https://github.com/OCA/l10n-canada.git,addons +https://github.com/OCA/maintenance.git,addons +https://github.com/OCA/management-system.git,addons +https://github.com/OCA/manufacture.git,addons +https://github.com/OCA/margin-analysis.git,addons +https://github.com/OCA/mis-builder.git,addons +https://github.com/OCA/multi-company.git,addons +https://github.com/OCA/partner-contact.git,addons +https://github.com/OCA/pos.git,addons +https://github.com/OCA/product-attribute.git,addons +https://github.com/OCA/product-pack.git,addons +https://github.com/OCA/product-variant.git,addons +https://github.com/OCA/project.git,addons +https://github.com/OCA/project-reporting.git,addons +https://github.com/OCA/purchase-workflow.git,addons +https://github.com/OCA/queue.git,addons +https://github.com/OCA/reporting-engine.git,addons +https://github.com/OCA/sale-workflow.git,addons +https://github.com/OCA/server-auth.git,addons +https://github.com/OCA/server-brand.git,addons +https://github.com/OCA/server-env.git,addons +https://github.com/OCA/server-tools.git,addons +https://github.com/OCA/server-ux.git,addons +https://github.com/OCA/social.git,addons +https://github.com/OCA/stock-logistics-warehouse.git,addons +https://github.com/OCA/timesheet.git,addons +https://github.com/OCA/web.git,addons +https://github.com/OCA/website.git,addons +https://github.com/OCA/wms.git,addons +https://github.com/odooaktiv/QuotationRevision.git,addons +https://github.com/openeducat/openeducat_erp.git,addons +https://github.com/Smile-SA/odoo_addons.git,addons +https://github.com/odoo/odoo.git,.