├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── auth_oauth_check_client_id ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── res_users.py └── static │ └── description │ └── icon.png ├── auth_oauth_ip ├── README.rst ├── __init__.py ├── __manifest__.py ├── doc │ ├── changelog.rst │ └── index.rst ├── models.py ├── static │ └── description │ │ └── icon.png └── views.xml ├── docs ├── .gitignore ├── Makefile ├── README.rst ├── _extensions │ ├── exercise_admonition.py │ ├── github_link.py │ ├── html_domain.py │ └── odoo_ext │ │ ├── __init__.py │ │ ├── breadcrumb_list.html │ │ ├── layout.html │ │ ├── pygments_override.py │ │ ├── static │ │ ├── animations.less │ │ ├── aside.less │ │ ├── bootstrap-3.3.6 │ │ │ └── less │ │ │ │ ├── alerts.less │ │ │ │ ├── badges.less │ │ │ │ ├── bootstrap.less │ │ │ │ ├── breadcrumbs.less │ │ │ │ ├── button-groups.less │ │ │ │ ├── buttons.less │ │ │ │ ├── carousel.less │ │ │ │ ├── close.less │ │ │ │ ├── code.less │ │ │ │ ├── component-animations.less │ │ │ │ ├── dropdowns.less │ │ │ │ ├── forms.less │ │ │ │ ├── glyphicons.less │ │ │ │ ├── grid.less │ │ │ │ ├── input-groups.less │ │ │ │ ├── jumbotron.less │ │ │ │ ├── labels.less │ │ │ │ ├── list-group.less │ │ │ │ ├── media.less │ │ │ │ ├── mixins.less │ │ │ │ ├── mixins │ │ │ │ ├── alerts.less │ │ │ │ ├── background-variant.less │ │ │ │ ├── border-radius.less │ │ │ │ ├── buttons.less │ │ │ │ ├── center-block.less │ │ │ │ ├── clearfix.less │ │ │ │ ├── forms.less │ │ │ │ ├── gradients.less │ │ │ │ ├── grid-framework.less │ │ │ │ ├── grid.less │ │ │ │ ├── hide-text.less │ │ │ │ ├── image.less │ │ │ │ ├── labels.less │ │ │ │ ├── list-group.less │ │ │ │ ├── nav-divider.less │ │ │ │ ├── nav-vertical-align.less │ │ │ │ ├── opacity.less │ │ │ │ ├── pagination.less │ │ │ │ ├── panels.less │ │ │ │ ├── progress-bar.less │ │ │ │ ├── reset-filter.less │ │ │ │ ├── reset-text.less │ │ │ │ ├── resize.less │ │ │ │ ├── responsive-visibility.less │ │ │ │ ├── size.less │ │ │ │ ├── tab-focus.less │ │ │ │ ├── table-row.less │ │ │ │ ├── text-emphasis.less │ │ │ │ ├── text-overflow.less │ │ │ │ └── vendor-prefixes.less │ │ │ │ ├── modals.less │ │ │ │ ├── navbar.less │ │ │ │ ├── navs.less │ │ │ │ ├── normalize.less │ │ │ │ ├── pager.less │ │ │ │ ├── pagination.less │ │ │ │ ├── panels.less │ │ │ │ ├── popovers.less │ │ │ │ ├── print.less │ │ │ │ ├── progress-bars.less │ │ │ │ ├── responsive-embed.less │ │ │ │ ├── responsive-utilities.less │ │ │ │ ├── scaffolding.less │ │ │ │ ├── tables.less │ │ │ │ ├── theme.less │ │ │ │ ├── thumbnails.less │ │ │ │ ├── tooltip.less │ │ │ │ ├── type.less │ │ │ │ ├── utilities.less │ │ │ │ ├── variables.less │ │ │ │ └── wells.less │ │ ├── bootstrap.css.map │ │ ├── bootstrap.js │ │ ├── doc.js │ │ ├── font-awesome-4.7.0 │ │ │ ├── HELP-US-OUT.txt │ │ │ ├── css │ │ │ │ ├── font-awesome.css │ │ │ │ └── font-awesome.min.css │ │ │ ├── fonts │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ ├── less │ │ │ │ ├── animated.less │ │ │ │ ├── bordered-pulled.less │ │ │ │ ├── core.less │ │ │ │ ├── fixed-width.less │ │ │ │ ├── font-awesome.less │ │ │ │ ├── icons.less │ │ │ │ ├── larger.less │ │ │ │ ├── list.less │ │ │ │ ├── mixins.less │ │ │ │ ├── path.less │ │ │ │ ├── rotated-flipped.less │ │ │ │ ├── screen-reader.less │ │ │ │ ├── stacked.less │ │ │ │ └── variables.less │ │ │ └── scss │ │ │ │ ├── _animated.scss │ │ │ │ ├── _bordered-pulled.scss │ │ │ │ ├── _core.scss │ │ │ │ ├── _fixed-width.scss │ │ │ │ ├── _icons.scss │ │ │ │ ├── _larger.scss │ │ │ │ ├── _list.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _path.scss │ │ │ │ ├── _rotated-flipped.scss │ │ │ │ ├── _screen-reader.scss │ │ │ │ ├── _stacked.scss │ │ │ │ ├── _variables.scss │ │ │ │ └── font-awesome.scss │ │ ├── fonts │ │ │ ├── Material-Design-Icons.eot │ │ │ ├── Material-Design-Icons.svg │ │ │ ├── Material-Design-Icons.ttf │ │ │ └── Material-Design-Icons.woff │ │ ├── footer.less │ │ ├── header.less │ │ ├── img │ │ │ ├── 2x_apps_families_s.png │ │ │ ├── apps_families_s.png │ │ │ ├── banner_bg.png │ │ │ ├── geometric_gradient.png │ │ │ ├── github-square_32.png │ │ │ ├── logos │ │ │ │ ├── odoo_logo.png │ │ │ │ ├── odoo_logo.svg │ │ │ │ └── odoo_logo_small.png │ │ │ ├── odoo_logo_rgb.png │ │ │ └── odoo_logo_white.png │ │ ├── jquery.min.js │ │ ├── jquery.noconflict.js │ │ ├── layout.less │ │ ├── mdi.less │ │ ├── mixins.less │ │ ├── print.less │ │ ├── style.css │ │ ├── style.less │ │ ├── typography.less │ │ └── variables.less │ │ ├── sub-menu_list.html │ │ ├── switcher.py │ │ ├── switchers_list.html │ │ ├── theme.conf │ │ └── translator.py ├── _static │ ├── .placeholder │ ├── banners │ │ ├── actions.jpg │ │ ├── actions.small.jpg │ │ ├── build_a_module.jpg │ │ ├── build_a_module.small.jpg │ │ ├── build_a_theme.jpg │ │ ├── build_a_theme.small.jpg │ │ ├── build_a_website.jpg │ │ ├── build_a_website.small.jpg │ │ ├── build_interface_ext.jpg │ │ ├── build_interface_ext.small.jpg │ │ ├── cmdline.jpg │ │ ├── cmdline.small.jpg │ │ ├── data_files.jpg │ │ ├── data_files.small.jpg │ │ ├── deploying_odoo.jpg │ │ ├── deploying_odoo.small.jpg │ │ ├── home-bg.jpg │ │ ├── index.jpg │ │ ├── installing_odoo.jpg │ │ ├── installing_odoo.small.jpg │ │ ├── javascript.jpg │ │ ├── javascript.small.jpg │ │ ├── m_1.jpg │ │ ├── m_1.small.jpg │ │ ├── m_2.jpg │ │ ├── m_2.small.jpg │ │ ├── m_accounting.jpg │ │ ├── m_accounting.small.jpg │ │ ├── mixins.jpg │ │ ├── mixins.small.jpg │ │ ├── module.jpg │ │ ├── module.small.jpg │ │ ├── odoo_guideline.jpg │ │ ├── odoo_guideline.small.jpg │ │ ├── orm_api.jpg │ │ ├── orm_api.small.jpg │ │ ├── qweb.jpg │ │ ├── qweb.small.jpg │ │ ├── reports.jpg │ │ ├── reports.small.jpg │ │ ├── security.jpg │ │ ├── security.small.jpg │ │ ├── subscription.jpg │ │ ├── testing_modules.jpg │ │ ├── testing_modules.small.jpg │ │ ├── translate.jpg │ │ ├── translate.small.jpg │ │ ├── upgrade_api.jpg │ │ ├── views.jpg │ │ ├── views.small.jpg │ │ ├── web_controllers.jpg │ │ ├── web_controllers.small.jpg │ │ ├── web_service_api.jpg │ │ └── web_service_api.small.jpg │ ├── issue_template.md │ ├── odoo.css │ └── pull-request-version.png ├── api.rst ├── conf.py ├── demo.rst ├── demo │ ├── nginx_odoo.conf │ ├── nginx_odoo_params │ └── saas-demo.rst ├── dns.rst ├── images │ ├── 1.jpg │ ├── 10.jpg │ ├── 11.jpg │ ├── 12.jpg │ ├── 13.jpg │ ├── 14.jpg │ ├── 15.jpg │ ├── 2.jpg │ ├── 3.jpg │ ├── 4.jpg │ ├── 5.jpg │ ├── 6.jpg │ ├── 7.jpg │ ├── 8.jpg │ ├── 9.jpg │ ├── inheritance_methods.png │ └── rating_request.png ├── index.rst ├── reference.rst ├── reference │ └── development.rst ├── requirements.txt ├── setup.rst ├── setup │ ├── client.rst │ ├── dependencies.rst │ ├── install.rst │ ├── odoo-configuration.rst │ └── port_80.rst ├── usage.rst └── usage │ ├── features.rst │ └── subscriptions.rst ├── oauth_provider ├── README.rst ├── __init__.py ├── __manifest__.py ├── controllers │ ├── __init__.py │ └── main.py ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ └── oauth_provider.py ├── security │ └── ir.model.access.csv ├── static │ └── description │ │ └── icon.png └── validators.py ├── oca_dependencies.txt ├── requirements.txt ├── saas.py ├── saas_base ├── README.rst ├── __init__.py ├── __manifest__.py ├── exceptions.py ├── models │ ├── __init__.py │ └── saas_base.py ├── static │ └── description │ │ └── icon.png └── tools.py ├── saas_client ├── README.rst ├── __init__.py ├── __manifest__.py ├── controllers │ ├── __init__.py │ ├── main.py │ └── web_settings_dashboard.py ├── data │ ├── auth_oauth_data.xml │ ├── ir_actions.xml │ ├── ir_config_parameter.xml │ └── ir_cron.xml ├── http.py ├── models │ ├── __init__.py │ ├── ir_configparameter.py │ ├── ir_module_module.py │ ├── res_config.py │ ├── res_user.py │ └── update.py ├── security │ ├── groups.xml │ └── rules.xml ├── static │ ├── description │ │ └── icon.png │ └── src │ │ ├── js │ │ ├── saas_client.js │ │ └── saas_dashboard.js │ │ └── xml │ │ └── saas_dashboard.xml └── views │ ├── res_config.xml │ └── saas_client.xml ├── saas_portal ├── README.rst ├── __init__.py ├── __manifest__.py ├── controllers │ ├── __init__.py │ └── main.py ├── data │ ├── cron.xml │ ├── ir_config_parameter.xml │ ├── mail_template_data.xml │ ├── plan_sequence.xml │ ├── res_users.xml │ ├── subtype.xml │ └── support_team.xml ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ ├── ir_config_parameter.py │ ├── res_config.py │ ├── res_users.py │ └── saas_portal.py ├── security │ └── ir.model.access.csv ├── static │ └── description │ │ └── icon.png ├── views │ ├── res_config.xml │ ├── res_users.xml │ └── saas_portal.xml └── wizard │ ├── __init__.py │ ├── batch_delete.py │ ├── batch_delete.xml │ ├── config_wizard.py │ └── config_wizard.xml ├── saas_portal_async ├── README.rst ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── saas_portal_async.py ├── static │ └── description │ │ └── icon.png └── views │ └── wizard.xml ├── saas_portal_backup ├── README.rst ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── saas_portal.py ├── static │ └── description │ │ └── icon.png └── views │ └── saas_portal_views.xml ├── saas_portal_demo ├── README.rst ├── __init__.py ├── __manifest__.py ├── controllers │ ├── __init__.py │ └── main.py ├── data │ ├── ir_actions.xml │ ├── ir_cron.xml │ ├── mail_template.xml │ └── product.xml ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ ├── product.py │ ├── saas_portal.py │ └── saas_portal_demo.py ├── security │ ├── ir.model.access.csv │ └── saas_portal_demo.xml ├── static │ ├── description │ │ └── icon.png │ └── src │ │ └── css │ │ └── module_shop.css └── views │ ├── product.xml │ ├── saas_portal_demo.xml │ ├── saas_portal_demo_templates.xml │ └── templates.xml ├── saas_portal_portal ├── README.rst ├── __init__.py ├── __manifest__.py ├── controllers │ ├── __init__.py │ └── portal.py ├── doc │ ├── changelog.rst │ └── index.rst ├── static │ └── src │ │ └── js │ │ └── main.js └── views │ └── website_instance_templates.xml ├── saas_portal_sale ├── README.rst ├── __init__.py ├── __manifest__.py ├── data │ ├── ir_config_parameter.xml │ └── mail_template_data.xml ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ ├── product_template.py │ └── saas_portal.py ├── static │ └── description │ │ └── icon.png └── views │ ├── product_attribute_views.xml │ ├── product_template_views.xml │ └── saas_portal.xml ├── saas_portal_sale_online ├── README.rst ├── __init__.py ├── __manifest__.py ├── doc │ ├── changelog.rst │ └── index.rst ├── static │ └── description │ │ └── icon.png └── views │ └── templates.xml ├── saas_portal_sale_subscription ├── README.rst ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ ├── account_analytic_account.py │ ├── account_invoice.py │ ├── product_template.py │ └── saas_portal.py ├── static │ └── description │ │ └── icon.png ├── views │ ├── account_invoice_view.xml │ ├── product_attribute_views.xml │ └── saas_portal.xml └── wizard │ ├── __init__.py │ ├── subscription_wizard.py │ └── subscription_wizard.xml ├── saas_portal_signup ├── __init__.py ├── __manifest__.py ├── controllers │ ├── __init__.py │ └── main.py ├── doc │ ├── changelog.rst │ └── index.rst ├── static │ └── description │ │ └── icon.png └── views │ └── signup.xml ├── saas_portal_signup_custom ├── README.rst ├── __init__.py ├── __openerp__.py ├── controllers │ ├── __init__.py │ └── main.py ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ ├── product.py │ └── saas_portal.py ├── security │ └── ir.model.access.csv └── views │ ├── product_view.xml │ ├── saas_portal.xml │ └── signup.xml ├── saas_portal_start ├── README.rst ├── __init__.py ├── __manifest__.py ├── controllers │ ├── __init__.py │ └── main.py ├── doc │ ├── changelog.rst │ └── index.rst ├── static │ ├── description │ │ └── icon.png │ └── src │ │ ├── css │ │ └── main.css │ │ └── js │ │ └── main.js └── views │ └── website.xml ├── saas_portal_subscription ├── README.rst ├── __init__.py ├── __manifest__.py ├── data │ └── base_automation.xml ├── models │ ├── __init__.py │ ├── saas_portal.py │ └── subscription_log.py ├── static │ └── description │ │ └── icon.png ├── views │ └── saas_portal.xml └── wizard │ ├── __init__.py │ ├── subscription_wizard.py │ └── subscription_wizard.xml ├── saas_portal_tagging ├── README.rst ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ ├── saas_portal_tagging.py │ └── wizard.py ├── static │ └── description │ │ └── icon.png └── views │ ├── saas_portal_tagging_views.xml │ └── wizard.xml ├── saas_portal_templates ├── README.rst ├── __init__.py ├── __manifest__.py ├── controllers │ ├── __init__.py │ └── main.py ├── models │ ├── __init__.py │ └── saas_portal_templates.py ├── static │ └── description │ │ └── icon.png └── views │ └── website.xml ├── saas_server ├── README.rst ├── __init__.py ├── __manifest__.py ├── controllers │ ├── __init__.py │ └── main.py ├── data │ ├── auth_oauth_data.xml │ ├── ir_config_parameter.xml │ └── pre_install.yml ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ ├── res_config_settings.py │ └── saas_server.py ├── static │ └── description │ │ └── icon.png └── views │ ├── res_config_settings_views.xml │ └── saas_server.xml ├── saas_server_autodelete ├── README.rst ├── __init__.py ├── __manifest__.py ├── data │ └── ir_cron.xml └── static │ └── description │ └── icon.png ├── saas_server_backup_ftp ├── __init__.py ├── __manifest__.py ├── data │ └── ir_cron.xml ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ ├── res_config.py │ └── saas_server.py ├── static │ └── description │ │ └── icon.png └── views │ └── res_config.xml ├── saas_server_backup_rotate ├── README.rst ├── __init__.py ├── __manifest__.py ├── data │ └── ir_cron.xml ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ ├── res_config.py │ └── saas_server.py ├── static │ └── description │ │ └── icon.png └── views │ └── res_config.xml ├── saas_server_backup_rotate_s3 ├── README.rst ├── __init__.py ├── __manifest__.py ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ └── saas_server.py └── static │ └── description │ └── icon.png ├── saas_server_backup_s3 ├── README.rst ├── __init__.py ├── __manifest__.py ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ ├── res_config.py │ └── saas_client.py ├── static │ └── description │ │ └── icon.png └── views │ ├── res_config.xml │ └── saas_portal_views.xml ├── saas_server_demo ├── README.rst ├── __init__.py ├── __manifest__.py ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ ├── module.py │ └── saas_server_demo.py ├── static │ └── description │ │ └── icon.png └── views │ └── saas_server_demo.xml ├── saas_sysadmin ├── __init__.py ├── __manifest__.py ├── models │ ├── __init__.py │ └── saas_portal.py ├── static │ └── description │ │ └── icon.png └── views │ └── saas_portal_views.xml ├── saas_sysadmin_aws ├── README.rst ├── __init__.py ├── __manifest__.py ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ └── res_config.py ├── static │ └── description │ │ └── icon.png └── views │ └── res_config.xml ├── saas_sysadmin_aws_route53 ├── README.rst ├── __init__.py ├── __manifest__.py ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ └── saas_sysadmin_aws_route53.py ├── static │ └── description │ │ └── icon.png └── views │ └── saas_sysadmin_aws_route53.xml ├── saas_sysadmin_mailgun ├── README.rst ├── __init__.py ├── __manifest__.py ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ ├── mailgun.py │ ├── res_config.py │ └── saas_sysadmin_mailgun.py ├── static │ └── description │ │ └── icon.png └── views │ └── res_config.xml ├── saas_sysadmin_route53 ├── README.md ├── __init__.py ├── __manifest__.py ├── doc │ ├── changelog.rst │ └── index.rst ├── models │ ├── __init__.py │ └── saas_sysdamin_route53.py └── static │ └── description │ └── icon.png └── saas_utils ├── README.rst ├── __init__.py ├── __manifest__.py ├── connector.py ├── database.py ├── doc ├── changelog.rst └── index.rst └── static └── description └── icon.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | bin/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | eggs/ 16 | lib/ 17 | lib64/ 18 | parts/ 19 | sdist/ 20 | var/ 21 | *.egg-info/ 22 | .installed.cfg 23 | *.egg 24 | 25 | # Installer logs 26 | pip-log.txt 27 | pip-delete-this-directory.txt 28 | 29 | # Unit test / coverage reports 30 | htmlcov/ 31 | .tox/ 32 | .coverage 33 | .cache 34 | nosetests.xml 35 | coverage.xml 36 | 37 | # Translations 38 | *.mo 39 | 40 | # Mr Developer 41 | .mr.developer.cfg 42 | .project 43 | .pydevproject 44 | 45 | # Rope 46 | .ropeproject 47 | 48 | # Django stuff: 49 | *.log 50 | *.pot 51 | 52 | # Sphinx documentation 53 | docs/_build/ 54 | 55 | # Eclipse 56 | .settings 57 | 58 | # PyCharm 59 | .idea 60 | 61 | # nvim mergtool 62 | *.orig 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Build Status](http://runbot.it-projects.info/runbot/badge/flat/odoo-saas-tools/10.0.svg)](http://runbot.it-projects.info/demo/odoo-saas-tools/10.0) 2 | 3 | Odoo SaaS Tools 4 | ================== 5 | 6 | System to sale and manage odoo databases. 7 | 8 | Main Project Website: https://it-projects-llc.github.io/odoo-saas-tools/ 9 | 10 | Getting Started: https://it-projects-llc.github.io/odoo-saas-tools/getting-started/ 11 | 12 | News: https://it-projects-llc.github.io/odoo-saas-tools/blog/ — [Subscribe by Email!](https://feedburner.google.com/fb/a/mailverify?uri=odoo-saas-tools&loc=en_US) 13 | 14 | Documentation: https://odoo-saas-tools.readthedocs.io/ 15 | -------------------------------------------------------------------------------- /auth_oauth_check_client_id/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /auth_oauth_check_client_id/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'auth_oauth - check client_id', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'Ivan Yelizariev, Nicolas JEUDY', 5 | 'license': 'LGPL-3', 6 | 'category': 'SaaS', 7 | "support": "apps@it-projects.info", 8 | 'website': 'https://it-projects.info', 9 | 10 | 'depends': ['auth_oauth'], 11 | 'data': [], 12 | 'installable': True, 13 | } 14 | -------------------------------------------------------------------------------- /auth_oauth_check_client_id/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_users 2 | -------------------------------------------------------------------------------- /auth_oauth_check_client_id/models/res_users.py: -------------------------------------------------------------------------------- 1 | from odoo import models 2 | 3 | 4 | class ResUsers(models.Model): 5 | _inherit = 'res.users' 6 | 7 | def _auth_oauth_validate(self, provider, access_token): 8 | validation = super(ResUsers, self)._auth_oauth_validate(provider, access_token) 9 | client_id = validation.get('client_id') 10 | if client_id: 11 | p = self.env['auth.oauth.provider'].browse(provider) 12 | assert client_id == p.client_id, "wrong client_id" 13 | return validation 14 | -------------------------------------------------------------------------------- /auth_oauth_check_client_id/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/auth_oauth_check_client_id/static/description/icon.png -------------------------------------------------------------------------------- /auth_oauth_ip/README.rst: -------------------------------------------------------------------------------- 1 | ============================= 2 | Local IP for OAuth requests 3 | ============================= 4 | 5 | Allows to check access_token by requests in local network. 6 | 7 | The module adds two fields to auth.oauth.provider: 8 | 9 | * local_host 10 | * local_port 11 | 12 | This addresses is used on sending Authentication and Validation requests by using simple trick: 13 | 14 | # host - origin host for the URL 15 | # url - original host is replaced by local_host and local_port 16 | urllib2.Request(url, headers={'host': host}) 17 | 18 | Credits 19 | ======= 20 | 21 | Contributors 22 | ------------ 23 | * Ivan Yelizariev 24 | 25 | Sponsors 26 | -------- 27 | * `IT-Projects LLC `__ 28 | 29 | Further information 30 | =================== 31 | 32 | HTML Description: https://apps.odoo.com/apps/modules/8.0/auth_oauth_ip/ 33 | 34 | Usage instructions: ``__ 35 | 36 | Changelog: ``__ 37 | 38 | Tested on Odoo 8.0 39 | -------------------------------------------------------------------------------- /auth_oauth_ip/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /auth_oauth_ip/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | "name": """Local IP for OAuth requests""", 3 | "summary": """Allows to check access_token by requests in local network""", 4 | "category": "Extra Tools", 5 | "images": [], 6 | "version": "11.0.1.0.0", 7 | "author": "IT-Projects LLC, Ivan Yelizariev, Nicolas JEUDY", 8 | "support": "apps@it-projects.info", 9 | "website": "https://it-projects.info", 10 | "license": "LGPL-3", 11 | # "price": 9.00, 12 | # "currency": "EUR", 13 | 14 | "depends": [ 15 | "auth_oauth", 16 | ], 17 | "external_dependencies": {"python": [], "bin": []}, 18 | "data": [ 19 | "views.xml", 20 | ], 21 | "qweb": [ 22 | ], 23 | "demo": [ 24 | ], 25 | 26 | "post_load": None, 27 | "pre_init_hook": None, 28 | "post_init_hook": None, 29 | "installable": True, 30 | "auto_install": False, 31 | } 32 | -------------------------------------------------------------------------------- /auth_oauth_ip/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | Changelog 2 | ========= 3 | 4 | `1.0.0` 5 | ------- 6 | 7 | - Init version 8 | -------------------------------------------------------------------------------- /auth_oauth_ip/doc/index.rst: -------------------------------------------------------------------------------- 1 | ============================= 2 | Local IP for OAuth requests 3 | ============================= 4 | 5 | Usage 6 | ===== 7 | 8 | * `Enable Technical Features `__ 9 | * open ``Settings / Users / OAuth Providers`` 10 | * select a Provider you need 11 | * click ``[Edit]`` 12 | * set **Local IP** and **Local Port** 13 | * click ``[Save]`` 14 | 15 | This local address will be used whenever you authenticate via the Provider. 16 | -------------------------------------------------------------------------------- /auth_oauth_ip/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/auth_oauth_ip/static/description/icon.png -------------------------------------------------------------------------------- /auth_oauth_ip/views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | auth.oauth.provider.form 6 | auth.oauth.provider 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | _build 2 | -------------------------------------------------------------------------------- /docs/README.rst: -------------------------------------------------------------------------------- 1 | ====================== 2 | Odoo Saas Tools Docs 3 | ====================== 4 | 5 | https://odoo-saas-tools.readthedocs.io/ 6 | 7 | How to update Docs 8 | ================== 9 | 10 | Initialization 11 | -------------- 12 | 13 | * Fork this repo 14 | * Clone to your machine 15 | * Install dependencies:: 16 | 17 | sudo pip install -r requirements.txt 18 | 19 | Contribution 20 | ------------ 21 | 22 | * Edit files in the repo. Check documentations: 23 | 24 | * http://www.sphinx-doc.org/en/stable/rest.html 25 | * http://www.sphinx-doc.org/en/stable/domains.html 26 | * http://www.sphinx-doc.org/en/stable/markup/index.html 27 | 28 | * Try it out:: 29 | 30 | cd /path/to/odoo-saas-tools/docs 31 | make html 32 | # check warningn and errors in compilation logs 33 | google-chrome _build/html/index.html 34 | 35 | * Make commits, push, create Pull Request 36 | -------------------------------------------------------------------------------- /docs/_extensions/exercise_admonition.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | """ 4 | Adds a new "exercise" admonition type 5 | """ 6 | 7 | def setup(app): 8 | app.add_directive('exercise', Exercise) 9 | app.add_node(exercise, html=( 10 | lambda self, node: self.visit_admonition(node, 'exercise'), 11 | lambda self, node: self.depart_admonition(node) 12 | ), latex=( 13 | lambda self, node: self.visit_admonition(node), 14 | lambda self, node: self.depart_admonition(node) 15 | )) 16 | 17 | from docutils import nodes 18 | from docutils.parsers.rst.directives import admonitions 19 | class exercise(nodes.Admonition, nodes.Element): pass 20 | class Exercise(admonitions.BaseAdmonition): 21 | node_class = exercise 22 | 23 | from sphinx.locale import admonitionlabels, l_ 24 | admonitionlabels['exercise'] = l_('Exercise') 25 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/breadcrumb_list.html: -------------------------------------------------------------------------------- 1 | {# warning: if doc structure change, these rules may have to change as well #} 2 | 3 | {# ===== VARIABLES ====== #} 4 | {% set master_doc_short_name = 'Documentation' %} 5 | 6 | {% if pagename == master_doc %} 7 |
  • {{ master_doc_short_name }}
  • 8 | {% else %} 9 | {% for parent in parents %} 10 | {% if loop.length > 1%} 11 | {% if loop.first %} 12 |
  • {{ master_doc_short_name }}
  • 13 | {% else %} 14 | {% if loop.index == 2 %} 15 |
  • {{parent.title}}
  • 16 | {% endif %} 17 | {% endif %} 18 | {% else %} 19 |
  • {{ master_doc_short_name }}
  • 20 | {% endif %} 21 | {% endfor %} 22 |
  • {{ meta.get('main-title', title) }}
  • 23 | {% endif %} 24 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/animations.less: -------------------------------------------------------------------------------- 1 | 2 | // Animations 3 | 4 | .keyframes(ripple; { 5 | 100% { 6 | opacity: 0; 7 | .scale(2.5); 8 | } 9 | }); 10 | 11 | .keyframes(fadeInUp; { 12 | 0% { 13 | opacity: 0; 14 | .translate(0; 60px); 15 | } 16 | 40% { opacity: 1} 17 | 100% { 18 | opacity: 1; 19 | .translate(none; none); 20 | } 21 | }); 22 | 23 | .keyframes(fadeIn; { 24 | 0% { 25 | opacity: 0; 26 | } 27 | 100% { 28 | opacity: 1; 29 | } 30 | }); 31 | 32 | 33 | .fadeInUp { 34 | .animation(fadeInUp 1s); 35 | } 36 | 37 | .fadeIn { 38 | .animation(fadeIn 1s); 39 | } 40 | 41 | 42 | // Ripple Buttons 43 | 44 | .ripple { 45 | z-index: 2; 46 | } 47 | .inner-ripple { 48 | display: block; 49 | position: absolute; 50 | border-radius: 100%; 51 | opacity: 1; 52 | z-index: -1; 53 | background: rgba(0, 0, 0, .05); 54 | pointer-events: none; 55 | .scale(0); 56 | } 57 | .inner-ripple-animated { 58 | .animation(ripple 0.35s ease-in); 59 | } -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | 6 | .breadcrumb { 7 | padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; 8 | margin-bottom: @line-height-computed; 9 | list-style: none; 10 | background-color: @breadcrumb-bg; 11 | border-radius: @border-radius-base; 12 | 13 | > li { 14 | display: inline-block; 15 | 16 | + li:before { 17 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space 18 | padding: 0 5px; 19 | color: @breadcrumb-color; 20 | } 21 | } 22 | 23 | > .active { 24 | color: @breadcrumb-active-color; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/close.less: -------------------------------------------------------------------------------- 1 | // 2 | // Close icons 3 | // -------------------------------------------------- 4 | 5 | 6 | .close { 7 | float: right; 8 | font-size: (@font-size-base * 1.5); 9 | font-weight: @close-font-weight; 10 | line-height: 1; 11 | color: @close-color; 12 | text-shadow: @close-text-shadow; 13 | .opacity(.2); 14 | 15 | &:hover, 16 | &:focus { 17 | color: @close-color; 18 | text-decoration: none; 19 | cursor: pointer; 20 | .opacity(.5); 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 27 | button& { 28 | padding: 0; 29 | cursor: pointer; 30 | background: transparent; 31 | border: 0; 32 | -webkit-appearance: none; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | // Heads up! 6 | // 7 | // We don't use the `.opacity()` mixin here since it causes a bug with text 8 | // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. 9 | 10 | .fade { 11 | opacity: 0; 12 | .transition(opacity .15s linear); 13 | &.in { 14 | opacity: 1; 15 | } 16 | } 17 | 18 | .collapse { 19 | display: none; 20 | 21 | &.in { display: block; } 22 | tr&.in { display: table-row; } 23 | tbody&.in { display: table-row-group; } 24 | } 25 | 26 | .collapsing { 27 | position: relative; 28 | height: 0; 29 | overflow: hidden; 30 | .transition-property(~"height, visibility"); 31 | .transition-duration(.35s); 32 | .transition-timing-function(ease); 33 | } 34 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/media.less: -------------------------------------------------------------------------------- 1 | .media { 2 | // Proper spacing between instances of .media 3 | margin-top: 15px; 4 | 5 | &:first-child { 6 | margin-top: 0; 7 | } 8 | } 9 | 10 | .media, 11 | .media-body { 12 | zoom: 1; 13 | overflow: hidden; 14 | } 15 | 16 | .media-body { 17 | width: 10000px; 18 | } 19 | 20 | .media-object { 21 | display: block; 22 | 23 | // Fix collapse in webkit from max-width: 100% and display: table-cell. 24 | &.img-thumbnail { 25 | max-width: none; 26 | } 27 | } 28 | 29 | .media-right, 30 | .media > .pull-right { 31 | padding-left: 10px; 32 | } 33 | 34 | .media-left, 35 | .media > .pull-left { 36 | padding-right: 10px; 37 | } 38 | 39 | .media-left, 40 | .media-right, 41 | .media-body { 42 | display: table-cell; 43 | vertical-align: top; 44 | } 45 | 46 | .media-middle { 47 | vertical-align: middle; 48 | } 49 | 50 | .media-bottom { 51 | vertical-align: bottom; 52 | } 53 | 54 | // Reset margins on headings for tighter default spacing 55 | .media-heading { 56 | margin-top: 0; 57 | margin-bottom: 5px; 58 | } 59 | 60 | // Media list variation 61 | // 62 | // Undo default ul/ol styles 63 | .media-list { 64 | padding-left: 0; 65 | list-style: none; 66 | } 67 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/alerts.less: -------------------------------------------------------------------------------- 1 | // Alerts 2 | 3 | .alert-variant(@background; @border; @text-color) { 4 | background-color: @background; 5 | border-color: @border; 6 | color: @text-color; 7 | 8 | hr { 9 | border-top-color: darken(@border, 5%); 10 | } 11 | .alert-link { 12 | color: darken(@text-color, 10%); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/background-variant.less: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | .bg-variant(@color) { 4 | background-color: @color; 5 | a&:hover, 6 | a&:focus { 7 | background-color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/border-radius.less: -------------------------------------------------------------------------------- 1 | // Single side border-radius 2 | 3 | .border-top-radius(@radius) { 4 | border-top-right-radius: @radius; 5 | border-top-left-radius: @radius; 6 | } 7 | .border-right-radius(@radius) { 8 | border-bottom-right-radius: @radius; 9 | border-top-right-radius: @radius; 10 | } 11 | .border-bottom-radius(@radius) { 12 | border-bottom-right-radius: @radius; 13 | border-bottom-left-radius: @radius; 14 | } 15 | .border-left-radius(@radius) { 16 | border-bottom-left-radius: @radius; 17 | border-top-left-radius: @radius; 18 | } 19 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/center-block.less: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | .center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/clearfix.less: -------------------------------------------------------------------------------- 1 | // Clearfix 2 | // 3 | // For modern browsers 4 | // 1. The space content is one way to avoid an Opera bug when the 5 | // contenteditable attribute is included anywhere else in the document. 6 | // Otherwise it causes space to appear at the top and bottom of elements 7 | // that are clearfixed. 8 | // 2. The use of `table` rather than `block` is only necessary if using 9 | // `:before` to contain the top-margins of child elements. 10 | // 11 | // Source: http://nicolasgallagher.com/micro-clearfix-hack/ 12 | 13 | .clearfix() { 14 | &:before, 15 | &:after { 16 | content: " "; // 1 17 | display: table; // 2 18 | } 19 | &:after { 20 | clear: both; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/hide-text.less: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | // 3 | // Heads up! v3 launched with only `.hide-text()`, but per our pattern for 4 | // mixins being reused as classes with the same name, this doesn't hold up. As 5 | // of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. 6 | // 7 | // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 8 | 9 | // Deprecated as of v3.0.1 (has been removed in v4) 10 | .hide-text() { 11 | font: ~"0/0" a; 12 | color: transparent; 13 | text-shadow: none; 14 | background-color: transparent; 15 | border: 0; 16 | } 17 | 18 | // New mixin to use as of v3.0.1 19 | .text-hide() { 20 | .hide-text(); 21 | } 22 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/image.less: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | .img-responsive(@display: block) { 10 | display: @display; 11 | max-width: 100%; // Part 1: Set a maximum relative to the parent 12 | height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching 13 | } 14 | 15 | 16 | // Retina image 17 | // 18 | // Short retina mixin for setting background-image and -size. Note that the 19 | // spelling of `min--moz-device-pixel-ratio` is intentional. 20 | .img-retina(@file-1x; @file-2x; @width-1x; @height-1x) { 21 | background-image: url("@{file-1x}"); 22 | 23 | @media 24 | only screen and (-webkit-min-device-pixel-ratio: 2), 25 | only screen and ( min--moz-device-pixel-ratio: 2), 26 | only screen and ( -o-min-device-pixel-ratio: 2/1), 27 | only screen and ( min-device-pixel-ratio: 2), 28 | only screen and ( min-resolution: 192dpi), 29 | only screen and ( min-resolution: 2dppx) { 30 | background-image: url("@{file-2x}"); 31 | background-size: @width-1x @height-1x; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/labels.less: -------------------------------------------------------------------------------- 1 | // Labels 2 | 3 | .label-variant(@color) { 4 | background-color: @color; 5 | 6 | &[href] { 7 | &:hover, 8 | &:focus { 9 | background-color: darken(@color, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/list-group.less: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | .list-group-item-variant(@state; @background; @color) { 4 | .list-group-item-@{state} { 5 | color: @color; 6 | background-color: @background; 7 | 8 | a&, 9 | button& { 10 | color: @color; 11 | 12 | .list-group-item-heading { 13 | color: inherit; 14 | } 15 | 16 | &:hover, 17 | &:focus { 18 | color: @color; 19 | background-color: darken(@background, 5%); 20 | } 21 | &.active, 22 | &.active:hover, 23 | &.active:focus { 24 | color: #fff; 25 | background-color: @color; 26 | border-color: @color; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/nav-divider.less: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | .nav-divider(@color: #e5e5e5) { 6 | height: 1px; 7 | margin: ((@line-height-computed / 2) - 1) 0; 8 | overflow: hidden; 9 | background-color: @color; 10 | } 11 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/nav-vertical-align.less: -------------------------------------------------------------------------------- 1 | // Navbar vertical align 2 | // 3 | // Vertically center elements in the navbar. 4 | // Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. 5 | 6 | .navbar-vertical-align(@element-height) { 7 | margin-top: ((@navbar-height - @element-height) / 2); 8 | margin-bottom: ((@navbar-height - @element-height) / 2); 9 | } 10 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/opacity.less: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | .opacity(@opacity) { 4 | opacity: @opacity; 5 | // IE8 filter 6 | @opacity-ie: (@opacity * 100); 7 | filter: ~"alpha(opacity=@{opacity-ie})"; 8 | } 9 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/pagination.less: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | .pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { 4 | > li { 5 | > a, 6 | > span { 7 | padding: @padding-vertical @padding-horizontal; 8 | font-size: @font-size; 9 | line-height: @line-height; 10 | } 11 | &:first-child { 12 | > a, 13 | > span { 14 | .border-left-radius(@border-radius); 15 | } 16 | } 17 | &:last-child { 18 | > a, 19 | > span { 20 | .border-right-radius(@border-radius); 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/panels.less: -------------------------------------------------------------------------------- 1 | // Panels 2 | 3 | .panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) { 4 | border-color: @border; 5 | 6 | & > .panel-heading { 7 | color: @heading-text-color; 8 | background-color: @heading-bg-color; 9 | border-color: @heading-border; 10 | 11 | + .panel-collapse > .panel-body { 12 | border-top-color: @border; 13 | } 14 | .badge { 15 | color: @heading-bg-color; 16 | background-color: @heading-text-color; 17 | } 18 | } 19 | & > .panel-footer { 20 | + .panel-collapse > .panel-body { 21 | border-bottom-color: @border; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/progress-bar.less: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | 3 | .progress-bar-variant(@color) { 4 | background-color: @color; 5 | 6 | // Deprecated parent class requirement as of v3.2.0 7 | .progress-striped & { 8 | #gradient > .striped(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/reset-filter.less: -------------------------------------------------------------------------------- 1 | // Reset filters for IE 2 | // 3 | // When you need to remove a gradient background, do not forget to use this to reset 4 | // the IE filter for IE9 and below. 5 | 6 | .reset-filter() { 7 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); 8 | } 9 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/reset-text.less: -------------------------------------------------------------------------------- 1 | .reset-text() { 2 | font-family: @font-family-base; 3 | // We deliberately do NOT reset font-size. 4 | font-style: normal; 5 | font-weight: normal; 6 | letter-spacing: normal; 7 | line-break: auto; 8 | line-height: @line-height-base; 9 | text-align: left; // Fallback for where `start` is not supported 10 | text-align: start; 11 | text-decoration: none; 12 | text-shadow: none; 13 | text-transform: none; 14 | white-space: normal; 15 | word-break: normal; 16 | word-spacing: normal; 17 | word-wrap: normal; 18 | } 19 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/resize.less: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | .resizable(@direction) { 4 | resize: @direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/responsive-visibility.less: -------------------------------------------------------------------------------- 1 | // Responsive utilities 2 | 3 | // 4 | // More easily include all the states for responsive-utilities.less. 5 | .responsive-visibility() { 6 | display: block !important; 7 | table& { display: table !important; } 8 | tr& { display: table-row !important; } 9 | th&, 10 | td& { display: table-cell !important; } 11 | } 12 | 13 | .responsive-invisibility() { 14 | display: none !important; 15 | } 16 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/size.less: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | .size(@width; @height) { 4 | width: @width; 5 | height: @height; 6 | } 7 | 8 | .square(@size) { 9 | .size(@size; @size); 10 | } 11 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/tab-focus.less: -------------------------------------------------------------------------------- 1 | // WebKit-style focus 2 | 3 | .tab-focus() { 4 | // Default 5 | outline: thin dotted; 6 | // WebKit 7 | outline: 5px auto -webkit-focus-ring-color; 8 | outline-offset: -2px; 9 | } 10 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/table-row.less: -------------------------------------------------------------------------------- 1 | // Tables 2 | 3 | .table-row-variant(@state; @background) { 4 | // Exact selectors below required to override `.table-striped` and prevent 5 | // inheritance to nested tables. 6 | .table > thead > tr, 7 | .table > tbody > tr, 8 | .table > tfoot > tr { 9 | > td.@{state}, 10 | > th.@{state}, 11 | &.@{state} > td, 12 | &.@{state} > th { 13 | background-color: @background; 14 | } 15 | } 16 | 17 | // Hover states for `.table-hover` 18 | // Note: this is not available for cells or rows within `thead` or `tfoot`. 19 | .table-hover > tbody > tr { 20 | > td.@{state}:hover, 21 | > th.@{state}:hover, 22 | &.@{state}:hover > td, 23 | &:hover > .@{state}, 24 | &.@{state}:hover > th { 25 | background-color: darken(@background, 5%); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/text-emphasis.less: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | .text-emphasis-variant(@color) { 4 | color: @color; 5 | a&:hover, 6 | a&:focus { 7 | color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/mixins/text-overflow.less: -------------------------------------------------------------------------------- 1 | // Text overflow 2 | // Requires inline-block or block for proper styling 3 | 4 | .text-overflow() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/pager.less: -------------------------------------------------------------------------------- 1 | // 2 | // Pager pagination 3 | // -------------------------------------------------- 4 | 5 | 6 | .pager { 7 | padding-left: 0; 8 | margin: @line-height-computed 0; 9 | list-style: none; 10 | text-align: center; 11 | &:extend(.clearfix all); 12 | li { 13 | display: inline; 14 | > a, 15 | > span { 16 | display: inline-block; 17 | padding: 5px 14px; 18 | background-color: @pager-bg; 19 | border: 1px solid @pager-border; 20 | border-radius: @pager-border-radius; 21 | } 22 | 23 | > a:hover, 24 | > a:focus { 25 | text-decoration: none; 26 | background-color: @pager-hover-bg; 27 | } 28 | } 29 | 30 | .next { 31 | > a, 32 | > span { 33 | float: right; 34 | } 35 | } 36 | 37 | .previous { 38 | > a, 39 | > span { 40 | float: left; 41 | } 42 | } 43 | 44 | .disabled { 45 | > a, 46 | > a:hover, 47 | > a:focus, 48 | > span { 49 | color: @pager-disabled-color; 50 | background-color: @pager-bg; 51 | cursor: @cursor-disabled; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/responsive-embed.less: -------------------------------------------------------------------------------- 1 | // Embeds responsive 2 | // 3 | // Credit: Nicolas Gallagher and SUIT CSS. 4 | 5 | .embed-responsive { 6 | position: relative; 7 | display: block; 8 | height: 0; 9 | padding: 0; 10 | overflow: hidden; 11 | 12 | .embed-responsive-item, 13 | iframe, 14 | embed, 15 | object, 16 | video { 17 | position: absolute; 18 | top: 0; 19 | left: 0; 20 | bottom: 0; 21 | height: 100%; 22 | width: 100%; 23 | border: 0; 24 | } 25 | } 26 | 27 | // Modifier class for 16:9 aspect ratio 28 | .embed-responsive-16by9 { 29 | padding-bottom: 56.25%; 30 | } 31 | 32 | // Modifier class for 4:3 aspect ratio 33 | .embed-responsive-4by3 { 34 | padding-bottom: 75%; 35 | } 36 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/thumbnails.less: -------------------------------------------------------------------------------- 1 | // 2 | // Thumbnails 3 | // -------------------------------------------------- 4 | 5 | 6 | // Mixin and adjust the regular image class 7 | .thumbnail { 8 | display: block; 9 | padding: @thumbnail-padding; 10 | margin-bottom: @line-height-computed; 11 | line-height: @line-height-base; 12 | background-color: @thumbnail-bg; 13 | border: 1px solid @thumbnail-border; 14 | border-radius: @thumbnail-border-radius; 15 | .transition(border .2s ease-in-out); 16 | 17 | > img, 18 | a > img { 19 | &:extend(.img-responsive); 20 | margin-left: auto; 21 | margin-right: auto; 22 | } 23 | 24 | // Add a hover state for linked versions only 25 | a&:hover, 26 | a&:focus, 27 | a&.active { 28 | border-color: @link-color; 29 | } 30 | 31 | // Image captions 32 | .caption { 33 | padding: @thumbnail-caption-padding; 34 | color: @thumbnail-caption-color; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // Floats 7 | // ------------------------- 8 | 9 | .clearfix { 10 | .clearfix(); 11 | } 12 | .center-block { 13 | .center-block(); 14 | } 15 | .pull-right { 16 | float: right !important; 17 | } 18 | .pull-left { 19 | float: left !important; 20 | } 21 | 22 | 23 | // Toggling content 24 | // ------------------------- 25 | 26 | // Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1 27 | .hide { 28 | display: none !important; 29 | } 30 | .show { 31 | display: block !important; 32 | } 33 | .invisible { 34 | visibility: hidden; 35 | } 36 | .text-hide { 37 | .text-hide(); 38 | } 39 | 40 | 41 | // Hide from screenreaders and browsers 42 | // 43 | // Credit: HTML5 Boilerplate 44 | 45 | .hidden { 46 | display: none !important; 47 | } 48 | 49 | 50 | // For Affix plugin 51 | // ------------------------- 52 | 53 | .affix { 54 | position: fixed; 55 | } 56 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/bootstrap-3.3.6/less/wells.less: -------------------------------------------------------------------------------- 1 | // 2 | // Wells 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .well { 8 | min-height: 20px; 9 | padding: 19px; 10 | margin-bottom: 20px; 11 | background-color: @well-bg; 12 | border: 1px solid @well-border; 13 | border-radius: @border-radius-base; 14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 15 | blockquote { 16 | border-color: #ddd; 17 | border-color: rgba(0,0,0,.15); 18 | } 19 | } 20 | 21 | // Sizes 22 | .well-lg { 23 | padding: 24px; 24 | border-radius: @border-radius-large; 25 | } 26 | .well-sm { 27 | padding: 9px; 28 | border-radius: @border-radius-small; 29 | } 30 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/font-awesome-4.7.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/font-awesome-4.7.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/font-awesome-4.7.0/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/fonts/Material-Design-Icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/fonts/Material-Design-Icons.eot -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/fonts/Material-Design-Icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/fonts/Material-Design-Icons.ttf -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/fonts/Material-Design-Icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/fonts/Material-Design-Icons.woff -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/img/2x_apps_families_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/img/2x_apps_families_s.png -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/img/apps_families_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/img/apps_families_s.png -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/img/banner_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/img/banner_bg.png -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/img/geometric_gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/img/geometric_gradient.png -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/img/github-square_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/img/github-square_32.png -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/img/logos/odoo_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/img/logos/odoo_logo.png -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/img/logos/odoo_logo_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/img/logos/odoo_logo_small.png -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/img/odoo_logo_rgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/img/odoo_logo_rgb.png -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/img/odoo_logo_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_extensions/odoo_ext/static/img/odoo_logo_white.png -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/static/jquery.noconflict.js: -------------------------------------------------------------------------------- 1 | $.noConflict(true); 2 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/sub-menu_list.html: -------------------------------------------------------------------------------- 1 | {# note: if odoo.com/page/docs sub-menu's structure change, these links have to change as well #} 2 | 3 |
  • Features
  • 4 |
  • Structure of SaaS system
  • 5 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/switchers_list.html: -------------------------------------------------------------------------------- 1 | {% if languages %} 2 | 12 | {% endif %} 13 | 14 | {% if versions %} 15 | 25 | {% endif %} 26 | -------------------------------------------------------------------------------- /docs/_extensions/odoo_ext/theme.conf: -------------------------------------------------------------------------------- 1 | [theme] 2 | inherit = basic 3 | stylesheet = style.css 4 | pygments_style = odoo 5 | -------------------------------------------------------------------------------- /docs/_static/.placeholder: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/.placeholder -------------------------------------------------------------------------------- /docs/_static/banners/actions.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/actions.jpg -------------------------------------------------------------------------------- /docs/_static/banners/actions.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/actions.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/build_a_module.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/build_a_module.jpg -------------------------------------------------------------------------------- /docs/_static/banners/build_a_module.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/build_a_module.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/build_a_theme.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/build_a_theme.jpg -------------------------------------------------------------------------------- /docs/_static/banners/build_a_theme.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/build_a_theme.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/build_a_website.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/build_a_website.jpg -------------------------------------------------------------------------------- /docs/_static/banners/build_a_website.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/build_a_website.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/build_interface_ext.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/build_interface_ext.jpg -------------------------------------------------------------------------------- /docs/_static/banners/build_interface_ext.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/build_interface_ext.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/cmdline.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/cmdline.jpg -------------------------------------------------------------------------------- /docs/_static/banners/cmdline.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/cmdline.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/data_files.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/data_files.jpg -------------------------------------------------------------------------------- /docs/_static/banners/data_files.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/data_files.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/deploying_odoo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/deploying_odoo.jpg -------------------------------------------------------------------------------- /docs/_static/banners/deploying_odoo.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/deploying_odoo.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/home-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/home-bg.jpg -------------------------------------------------------------------------------- /docs/_static/banners/index.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/index.jpg -------------------------------------------------------------------------------- /docs/_static/banners/installing_odoo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/installing_odoo.jpg -------------------------------------------------------------------------------- /docs/_static/banners/installing_odoo.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/installing_odoo.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/javascript.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/javascript.jpg -------------------------------------------------------------------------------- /docs/_static/banners/javascript.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/javascript.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/m_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/m_1.jpg -------------------------------------------------------------------------------- /docs/_static/banners/m_1.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/m_1.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/m_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/m_2.jpg -------------------------------------------------------------------------------- /docs/_static/banners/m_2.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/m_2.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/m_accounting.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/m_accounting.jpg -------------------------------------------------------------------------------- /docs/_static/banners/m_accounting.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/m_accounting.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/mixins.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/mixins.jpg -------------------------------------------------------------------------------- /docs/_static/banners/mixins.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/mixins.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/module.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/module.jpg -------------------------------------------------------------------------------- /docs/_static/banners/module.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/module.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/odoo_guideline.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/odoo_guideline.jpg -------------------------------------------------------------------------------- /docs/_static/banners/odoo_guideline.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/odoo_guideline.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/orm_api.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/orm_api.jpg -------------------------------------------------------------------------------- /docs/_static/banners/orm_api.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/orm_api.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/qweb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/qweb.jpg -------------------------------------------------------------------------------- /docs/_static/banners/qweb.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/qweb.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/reports.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/reports.jpg -------------------------------------------------------------------------------- /docs/_static/banners/reports.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/reports.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/security.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/security.jpg -------------------------------------------------------------------------------- /docs/_static/banners/security.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/security.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/subscription.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/subscription.jpg -------------------------------------------------------------------------------- /docs/_static/banners/testing_modules.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/testing_modules.jpg -------------------------------------------------------------------------------- /docs/_static/banners/testing_modules.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/testing_modules.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/translate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/translate.jpg -------------------------------------------------------------------------------- /docs/_static/banners/translate.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/translate.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/upgrade_api.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/upgrade_api.jpg -------------------------------------------------------------------------------- /docs/_static/banners/views.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/views.jpg -------------------------------------------------------------------------------- /docs/_static/banners/views.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/views.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/web_controllers.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/web_controllers.jpg -------------------------------------------------------------------------------- /docs/_static/banners/web_controllers.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/web_controllers.small.jpg -------------------------------------------------------------------------------- /docs/_static/banners/web_service_api.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/web_service_api.jpg -------------------------------------------------------------------------------- /docs/_static/banners/web_service_api.small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/banners/web_service_api.small.jpg -------------------------------------------------------------------------------- /docs/_static/issue_template.md: -------------------------------------------------------------------------------- 1 | Short description of the issue 2 | 3 | ***Impacted versions:*** 4 | 5 | - 6 | 7 | ***Steps to reproduce:*** 8 | 9 | 1. 10 | 2. 11 | 3. 12 | 13 | ***Current behavior:*** 14 | 15 | - 16 | 17 | ***Expected behavior:*** 18 | 19 | - 20 | -------------------------------------------------------------------------------- /docs/_static/odoo.css: -------------------------------------------------------------------------------- 1 | @import "style.css"; 2 | 3 | p.rubric { 4 | font-family: Lato, Arial, sans-serif; 5 | font-weight: 500; 6 | line-height: 1.1; 7 | color: inherit; 8 | margin-top: 10px; 9 | margin-bottom: 8px; 10 | } 11 | 12 | .section p.rubric { 13 | font-size: 30px; 14 | } 15 | .section .section p.rubric { 16 | font-size: 24px; 17 | } 18 | .section .section .section p.rubric { 19 | font-size: 18px; 20 | } 21 | .section .section .section .section p.rubric { 22 | font-size: 14px; 23 | } 24 | .section .section .section .section .section p.rubric { 25 | font-size: 12px; 26 | } 27 | -------------------------------------------------------------------------------- /docs/_static/pull-request-version.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/_static/pull-request-version.png -------------------------------------------------------------------------------- /docs/demo.rst: -------------------------------------------------------------------------------- 1 | ======================== 2 | Apps Demonstration Tools 3 | ======================== 4 | 5 | .. toctree:: 6 | :titlesonly: 7 | 8 | demo/saas-demo 9 | -------------------------------------------------------------------------------- /docs/demo/nginx_odoo.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | #rewrite ^/.*$ https://$host$request_uri? permanent; #Uncomment this line in case you want to use https only 4 | server_name NGINX_SERVER_DOMAIN; 5 | include odoo_params; 6 | 7 | location /longpolling { 8 | proxy_pass http://SERVER_HOST:8072; 9 | } 10 | 11 | location / { 12 | proxy_pass http://SERVER_HOST:8069; 13 | } 14 | 15 | location ~* /web/static/ { 16 | proxy_cache_valid 200 90m; 17 | proxy_buffering on; 18 | expires 864000; 19 | proxy_pass http://SERVER_HOST:8069; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /docs/demo/nginx_odoo_params: -------------------------------------------------------------------------------- 1 | charset utf-8; 2 | 3 | ## increase proxy buffer to handle some OpenERP web requests 4 | proxy_buffers 16 64k; 5 | proxy_buffer_size 128k; 6 | 7 | ## set headers 8 | proxy_set_header Host $host; 9 | proxy_set_header X-Real-IP $remote_addr; 10 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 11 | proxy_set_header X-Forwarded-Proto $scheme; 12 | 13 | proxy_read_timeout 600s; #set centrally in nginx.conf 14 | client_max_body_size 200m; 15 | 16 | #general proxy settings 17 | proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; 18 | 19 | # by default, do not forward anything 20 | proxy_redirect off; 21 | proxy_buffering off; 22 | -------------------------------------------------------------------------------- /docs/images/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/1.jpg -------------------------------------------------------------------------------- /docs/images/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/10.jpg -------------------------------------------------------------------------------- /docs/images/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/11.jpg -------------------------------------------------------------------------------- /docs/images/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/12.jpg -------------------------------------------------------------------------------- /docs/images/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/13.jpg -------------------------------------------------------------------------------- /docs/images/14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/14.jpg -------------------------------------------------------------------------------- /docs/images/15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/15.jpg -------------------------------------------------------------------------------- /docs/images/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/2.jpg -------------------------------------------------------------------------------- /docs/images/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/3.jpg -------------------------------------------------------------------------------- /docs/images/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/4.jpg -------------------------------------------------------------------------------- /docs/images/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/5.jpg -------------------------------------------------------------------------------- /docs/images/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/6.jpg -------------------------------------------------------------------------------- /docs/images/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/7.jpg -------------------------------------------------------------------------------- /docs/images/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/8.jpg -------------------------------------------------------------------------------- /docs/images/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/9.jpg -------------------------------------------------------------------------------- /docs/images/inheritance_methods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/inheritance_methods.png -------------------------------------------------------------------------------- /docs/images/rating_request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/images/rating_request.png -------------------------------------------------------------------------------- /docs/index.rst: -------------------------------------------------------------------------------- 1 | :main-title: Documentation 2 | :banner: banners/home-bg.jpg 3 | 4 | ===== 5 | Index 6 | ===== 7 | 8 | .. todo:: what's the documentation's license? 9 | 10 | .. rst-class:: index-tree 11 | .. titlesonly breaks level 3 (~in-document) toc of left navbar, so use 12 | maxdepth instead 13 | .. toctree:: 14 | :maxdepth: 2 15 | 16 | setup 17 | usage 18 | demo 19 | api 20 | reference 21 | 22 | .. ifconfig:: todo_include_todos 23 | 24 | .. rubric:: Things to add and fix 25 | 26 | .. todolist:: 27 | -------------------------------------------------------------------------------- /docs/reference.rst: -------------------------------------------------------------------------------- 1 | ========= 2 | Reference 3 | ========= 4 | 5 | .. toctree:: 6 | :titlesonly: 7 | 8 | reference/development 9 | -------------------------------------------------------------------------------- /docs/reference/development.rst: -------------------------------------------------------------------------------- 1 | Development 2 | =========== 3 | 4 | Structure of SaaS system: 5 | ------------------------- 6 | 7 | * SaaS Portal - main database for control servers and clients, manage client templates and plans. 8 | * SaaS Servers - technical databases to control client databases. SaaS server create, edit, delete databases. Each SaaS Server can be installed on a separate machine (e.g. VPS) 9 | * SaaS Clients - client database to be used by customers. Each SaaS Client is attached to a SaaS Server. 10 | 11 | -------------------------------------------------------------------------------- /docs/requirements.txt: -------------------------------------------------------------------------------- 1 | sphinx==1.2.3 2 | mercurial==3.2.2 3 | sphinx-patchqueue==0.4.0 4 | -------------------------------------------------------------------------------- /docs/setup.rst: -------------------------------------------------------------------------------- 1 | :types: setting_up 2 | 3 | ========== 4 | Setting Up 5 | ========== 6 | 7 | .. toctree:: 8 | :titlesonly: 9 | 10 | setup/install 11 | setup/dependencies 12 | setup/client 13 | setup/odoo-configuration 14 | setup/port_80 15 | -------------------------------------------------------------------------------- /docs/setup/port_80.rst: -------------------------------------------------------------------------------- 1 | Web server 2 | ========== 3 | 4 | All requests to domains you are use must be redirected to localhost:8069 with preserving value for header HOST. Check possible configurations below. 5 | 6 | 7 | Nginx 8 | ----- 9 | 10 | server { 11 | listen 80 default_server; 12 | 13 | proxy_set_header Host $host; 14 | 15 | proxy_set_header X-Real-IP $remote_addr; 16 | 17 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 18 | 19 | proxy_set_header X-Forwarded-Proto $scheme; 20 | 21 | location /longpolling { 22 | proxy_pass http://127.0.0.1:8072; 23 | } 24 | 25 | location / { 26 | proxy_pass http://127.0.0.1:8069; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /docs/usage.rst: -------------------------------------------------------------------------------- 1 | ===== 2 | Usage 3 | ===== 4 | 5 | .. toctree:: 6 | :titlesonly: 7 | 8 | usage/features 9 | usage/subscriptions -------------------------------------------------------------------------------- /docs/usage/subscriptions.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/docs/usage/subscriptions.rst -------------------------------------------------------------------------------- /oauth_provider/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import controllers 3 | -------------------------------------------------------------------------------- /oauth_provider/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'OAuth2 provider', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'Ivan Yelizariev', 5 | 'license': 'LGPL-3', 6 | 'category': 'SaaS', 7 | "support": "apps@it-projects.info", 8 | 'website': 'https://it-projects.info', 9 | 10 | 'depends': ['web'], 11 | 'external_dependencies': { 12 | 'python': ['oauthlib'], 13 | }, 14 | 'data': [ 15 | 'security/ir.model.access.csv', 16 | ], 17 | 'installable': True, 18 | } 19 | -------------------------------------------------------------------------------- /oauth_provider/controllers/__init__.py: -------------------------------------------------------------------------------- 1 | from . import main 2 | -------------------------------------------------------------------------------- /oauth_provider/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /oauth_provider/doc/index.rst: -------------------------------------------------------------------------------- 1 | ============== 2 | oauth_provider 3 | ============== 4 | 5 | Addon allows to users to login in odoo databases via master database 6 | 7 | INSTALLATION 8 | ============ 9 | 10 | Dependencies 11 | ------------ 12 | 13 | * https://github.com/idan/oauthlib 14 | -------------------------------------------------------------------------------- /oauth_provider/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import oauth_provider 2 | -------------------------------------------------------------------------------- /oauth_provider/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_oauth_application,access_oauth_application,model_oauth_application,base.group_user,1,0,0,0 3 | access_oauth_access_token,access_oauth_access_token,model_oauth_access_token,,1,0,0,0 4 | -------------------------------------------------------------------------------- /oauth_provider/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/oauth_provider/static/description/icon.png -------------------------------------------------------------------------------- /oca_dependencies.txt: -------------------------------------------------------------------------------- 1 | e-commerce https://github.com/vauxoo-dev/e-commerce.git 11.0-migrate_sale_require_login_10-2-11 2 | access-addons 3 | website-addons 4 | contract 5 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | boto 2 | rotate_backups_s3 3 | pysftp 4 | oauthlib 5 | simplejson 6 | -------------------------------------------------------------------------------- /saas_base/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Base 2 | ========= 3 | 4 | Base models to use in saas environment. 5 | 6 | -------------------------------------------------------------------------------- /saas_base/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import exceptions 3 | -------------------------------------------------------------------------------- /saas_base/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Base', 3 | 'version': '11.0.1.0.1', 4 | 'author': 'Cesar Lage, Nicolas JEUDY', 5 | 'license': 'LGPL-3', 6 | 'category': 'SaaS', 7 | "support": "apps@it-projects.info", 8 | 'website': 'https://it-projects.info', 9 | 'depends': ['base'], 10 | 'data': [], 11 | 'installable': True, 12 | } 13 | -------------------------------------------------------------------------------- /saas_base/exceptions.py: -------------------------------------------------------------------------------- 1 | class MaximumDBException(Exception): 2 | pass 3 | 4 | 5 | class MaximumTrialDBException(Exception): 6 | pass 7 | 8 | 9 | class SuspendedDBException(Exception): 10 | pass 11 | -------------------------------------------------------------------------------- /saas_base/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import saas_base 2 | -------------------------------------------------------------------------------- /saas_base/models/saas_base.py: -------------------------------------------------------------------------------- 1 | from odoo import fields 2 | from odoo import models 3 | 4 | 5 | class SaasClient(models.AbstractModel): 6 | _name = 'saas_base.client' 7 | 8 | users_len = fields.Integer('Count users', readonly=True) 9 | max_users = fields.Char('Max users allowed', readonly=True) 10 | file_storage = fields.Integer('File storage (MB)', readonly=True) 11 | db_storage = fields.Integer('DB storage (MB)', readonly=True) 12 | total_storage_limit = fields.Integer('Total storage limit (MB)', readonly=True, default=0) 13 | trial = fields.Boolean('Trial', help='indication of trial clients', default=False, readonly=True) 14 | -------------------------------------------------------------------------------- /saas_base/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_base/static/description/icon.png -------------------------------------------------------------------------------- /saas_base/tools.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | def get_size(start_path='.'): 5 | total_size = 0 6 | for dirpath, dirnames, filenames in os.walk(start_path): 7 | for f in filenames: 8 | fp = os.path.join(dirpath, f) 9 | total_size += os.path.getsize(fp) 10 | return total_size 11 | -------------------------------------------------------------------------------- /saas_client/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Client 2 | =========== 3 | 4 | Module for client database 5 | -------------------------------------------------------------------------------- /saas_client/__init__.py: -------------------------------------------------------------------------------- 1 | from . import controllers 2 | from . import models 3 | from . import http 4 | -------------------------------------------------------------------------------- /saas_client/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Client', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'Ivan Yelizariev, Nicolas JEUDY', 5 | 'license': 'LGPL-3', 6 | 'category': 'SaaS', 7 | "support": "apps@it-projects.info", 8 | 'website': 'https://it-projects.info', 9 | 'depends': [ 10 | 'auth_oauth', 11 | 'auth_oauth_ip', 12 | 'auth_oauth_check_client_id', 13 | 'mail', 14 | 'web_settings_dashboard', 15 | 'access_limit_records_number', 16 | ], 17 | 'data': [ 18 | 'views/saas_client.xml', 19 | 'views/res_config.xml', 20 | 'security/rules.xml', 21 | 'security/groups.xml', 22 | 'data/ir_cron.xml', 23 | 'data/auth_oauth_data.xml', 24 | 'data/ir_config_parameter.xml', 25 | 'data/ir_actions.xml', 26 | ], 27 | 'installable': True, 28 | 'qweb': [ 29 | 'static/src/xml/saas_dashboard.xml', 30 | ], 31 | } 32 | -------------------------------------------------------------------------------- /saas_client/controllers/__init__.py: -------------------------------------------------------------------------------- 1 | from . import main 2 | from . import web_settings_dashboard 3 | -------------------------------------------------------------------------------- /saas_client/data/auth_oauth_data.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SaaS 6 | http://odoo.local/oauth2/auth 7 | userinfo 8 | http://odoo.local/oauth2/tokeninfo 9 | 10 | zocial openerp 11 | Log in via SaaS Portal 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /saas_client/data/ir_config_parameter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | saas_client.pay_subscription_url 6 | 7 | 8 | 9 | saas_client.page_for_suspended 10 | / 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /saas_client/data/ir_cron.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | days 6 | -1 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /saas_client/http.py: -------------------------------------------------------------------------------- 1 | import odoo 2 | from odoo.http import OpenERPSession 3 | from odoo.addons.base_sparse_field.models.fields import monkey_patch 4 | from odoo.addons.saas_base.exceptions import SuspendedDBException 5 | 6 | 7 | @monkey_patch(OpenERPSession) 8 | def check_security(self): 9 | with odoo.registry(self.db).cursor() as cr: 10 | uid = self.uid 11 | env = odoo.api.Environment(cr, uid, {}) 12 | suspended = env['ir.config_parameter'].sudo().get_param('saas_client.suspended', '0') 13 | if suspended == "1" and uid != odoo.SUPERUSER_ID: 14 | raise SuspendedDBException 15 | return check_security.super(self) 16 | 17 | -------------------------------------------------------------------------------- /saas_client/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import ir_configparameter 2 | from . import res_user 3 | from . import update 4 | from . import res_config 5 | from . import ir_module_module 6 | -------------------------------------------------------------------------------- /saas_client/models/ir_configparameter.py: -------------------------------------------------------------------------------- 1 | from odoo import models, api 2 | from odoo.tools import mute_logger 3 | 4 | 5 | class IrConfigParameter(models.Model): 6 | _inherit = 'ir.config_parameter' 7 | 8 | @api.model_cr 9 | @mute_logger('odoo.addons.base.ir.ir_config_parameter') 10 | def init(self, force=False): 11 | super(IrConfigParameter, self).init(force=force) 12 | if force: 13 | oauth_oe = self.env.ref('saas_client.saas_oauth_provider') 14 | dbuuid = self.sudo().get_param('database.uuid') 15 | oauth_oe.write({'client_id': dbuuid}) 16 | -------------------------------------------------------------------------------- /saas_client/models/ir_module_module.py: -------------------------------------------------------------------------------- 1 | from odoo import api, models 2 | 3 | 4 | class Module(models.Model): 5 | _inherit = "ir.module.module" 6 | 7 | @api.model 8 | def search_read(self, domain=None, *args, **kw): 9 | params = self.env.context.get("params", {}) 10 | is_executed_from_apps_menu = "action" in params and params["action"] == self.env.ref("base.open_module_tree").id 11 | 12 | if not is_executed_from_apps_menu: 13 | return super(Module, self).search_read(domain, *args, **kw) 14 | 15 | Config = self.env["ir.config_parameter"].sudo() 16 | visible_modules = Config.get_param("saas_client.visible_modules", default="").strip().split(",") 17 | visible_modules = list(filter(bool, visible_modules)) 18 | if not visible_modules: 19 | return super(Module, self).search_read(domain, *args, **kw) 20 | 21 | if not domain: 22 | new_domain = [("name", "in", visible_modules)] 23 | else: 24 | new_domain = ["&", ("name", "in", visible_modules)] + domain 25 | return super(Module, self).search_read(new_domain, *args, **kw) 26 | -------------------------------------------------------------------------------- /saas_client/models/res_config.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields, api 2 | 3 | 4 | class ResConfigSettings(models.TransientModel): 5 | _inherit = 'res.config.settings' 6 | 7 | current_domain = fields.Char(readonly=True) 8 | domain_change_link = fields.Html(readonly=True) 9 | 10 | @api.model 11 | def get_values(self): 12 | res = super(ResConfigSettings, self).get_values() 13 | current_domain = self.env["ir.config_parameter"].sudo().get_param('web.base.url', default=None) 14 | link = self.env["ir.config_parameter"].sudo().get_param('saas_client.saas_dashboard', default=None) 15 | html = link and '' + 'You can change your domain name here' + '' or False 16 | res.update( 17 | current_domain=current_domain or False, 18 | domain_change_link=html, 19 | ) 20 | return res 21 | -------------------------------------------------------------------------------- /saas_client/models/update.py: -------------------------------------------------------------------------------- 1 | from odoo.models import AbstractModel 2 | from odoo.tools.config import config 3 | 4 | 5 | class publisher_warranty_contract(AbstractModel): 6 | _inherit = "publisher_warranty.contract" 7 | 8 | def update_notification(self, cron_mode=True): 9 | url = self.env['ir.config_parameter'].sudo().get_param('saas_client.publisher_warranty_url') 10 | print(('update_notification', url)) 11 | if not url: 12 | return 13 | config.options["publisher_warranty_url"] = url 14 | 15 | return super(publisher_warranty_contract, self).update_notification(cron_mode) 16 | -------------------------------------------------------------------------------- /saas_client/security/groups.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | SaaS Support 7 | 8 | Special group for superuser. Should not be used for client users 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /saas_client/security/rules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /saas_client/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_client/static/description/icon.png -------------------------------------------------------------------------------- /saas_client/static/src/js/saas_dashboard.js: -------------------------------------------------------------------------------- 1 | odoo.define('saas_client', function (require) { 2 | "use strict"; 3 | 4 | var Widget = require('web.Widget'); 5 | var Dashboard = require('web_settings_dashboard'); 6 | 7 | 8 | Dashboard.Dashboard.include({ 9 | init: function(parent, data){ 10 | var ret = this._super(parent, data); 11 | this.all_dashboards.push('saas'); 12 | return ret; 13 | }, 14 | load_saas: function(data){ 15 | return new DashboardSaaS(this, data.saas).replace(this.$('.o_web_settings_dashboard_saas')); 16 | }, 17 | }); 18 | 19 | var DashboardSaaS = Widget.extend({ 20 | 21 | template: 'DashboardSaaS', 22 | 23 | // events: { 24 | // 'click .o_pay_subscription': 'on_pay_subscription', 25 | // }, 26 | 27 | init: function(parent, data){ 28 | this.data = data; 29 | this.parent = parent; 30 | return this._super.apply(this, arguments); 31 | }, 32 | 33 | // on_pay_subscription: function(){ 34 | 35 | // }, 36 | }); 37 | 38 | }); 39 | -------------------------------------------------------------------------------- /saas_client/views/saas_client.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /saas_portal/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Portal 2 | =========== 3 | 4 | Module for main database in saas structure. 5 | -------------------------------------------------------------------------------- /saas_portal/__init__.py: -------------------------------------------------------------------------------- 1 | from . import controllers 2 | from . import models 3 | from . import wizard 4 | -------------------------------------------------------------------------------- /saas_portal/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Portal', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'Ivan Yelizariev, Nicolas JEUDY', 5 | 'license': 'LGPL-3', 6 | 'category': 'SaaS', 7 | "support": "apps@it-projects.info", 8 | 'website': 'https://it-projects.info', 9 | 'depends': [ 10 | 'oauth_provider', 11 | 'website', 12 | 'auth_signup', 13 | 'saas_base', 14 | ], 15 | 'data': [ 16 | 'data/mail_template_data.xml', 17 | 'data/plan_sequence.xml', 18 | 'data/cron.xml', 19 | 'wizard/config_wizard.xml', 20 | 'wizard/batch_delete.xml', 21 | 'views/saas_portal.xml', 22 | 'views/res_config.xml', 23 | 'data/ir_config_parameter.xml', 24 | 'data/subtype.xml', 25 | 'data/support_team.xml', 26 | 'views/res_users.xml', 27 | 'data/res_users.xml', 28 | 'security/ir.model.access.csv', 29 | ], 30 | 'installable': True, 31 | } 32 | -------------------------------------------------------------------------------- /saas_portal/controllers/__init__.py: -------------------------------------------------------------------------------- 1 | from . import main 2 | -------------------------------------------------------------------------------- /saas_portal/data/ir_config_parameter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | saas_portal.expiration_notify_in_advance 6 | 2 7 | 8 | 9 | saas_portal.page_for_maximumdb 10 | / 11 | 12 | 13 | saas_portal.page_for_maximumtrialdb 14 | / 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /saas_portal/data/plan_sequence.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | SaaS Portal Plan 7 | saas_portal.plan 8 | 3 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /saas_portal/data/res_users.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /saas_portal/data/subtype.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Subscription expired 7 | saas_portal.client 8 | 9 | Subscription expired 10 | 11 | 12 | 13 | Subscription expired 14 | saas_portal.support_team 15 | 16 | support_team_id 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /saas_portal/data/support_team.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Main Support Team 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /saas_portal/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_portal/doc/index.rst: -------------------------------------------------------------------------------- 1 | =========== 2 | saas_portal 3 | =========== 4 | 5 | Installation 6 | ============ 7 | 8 | * `Install `__ this module in a usual way 9 | 10 | Configuration 11 | ============= 12 | 13 | {Instruction how to configure the module before start to use it} 14 | 15 | TODO 16 | 17 | Usage 18 | ===== 19 | 20 | {Instruction for daily usage. It should describe how to check that module works. What shall user do and what would user get.} 21 | 22 | TODO 23 | 24 | Uninstallation 25 | ============== 26 | 27 | {Optional section for uninstallation notes. Delete it if you don't have notes for uninstallation.} 28 | -------------------------------------------------------------------------------- /saas_portal/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_config 2 | from . import saas_portal 3 | from . import ir_config_parameter 4 | from . import res_users 5 | -------------------------------------------------------------------------------- /saas_portal/models/ir_config_parameter.py: -------------------------------------------------------------------------------- 1 | from odoo import models, api 2 | 3 | 4 | BASE_SAAS_DOMAIN = 'saas_portal.base_saas_domain' 5 | 6 | 7 | class IrConfigParameter(models.Model): 8 | 9 | _inherit = 'ir.config_parameter' 10 | 11 | @api.model 12 | def set_param(self, key, value): 13 | if key == 'web.base.url' and not self.get_param(BASE_SAAS_DOMAIN): 14 | domain_only = value 15 | if '/' in domain_only: 16 | # get rid of "http(s)://" at the beggining and "/" and the end if any 17 | domain_only = domain_only.split('/')[2] 18 | self.set_param(BASE_SAAS_DOMAIN, domain_only) 19 | return super(IrConfigParameter, self).set_param(key, value) 20 | -------------------------------------------------------------------------------- /saas_portal/models/res_users.py: -------------------------------------------------------------------------------- 1 | from odoo import api, fields, models 2 | 3 | 4 | class ResUsers(models.Model): 5 | _inherit = 'res.users' 6 | 7 | support_team_id = fields.Many2one('saas_portal.support_team', 8 | 'Support Team', 9 | help='Support team for SaaS') 10 | 11 | def __init__(self, pool, cr): 12 | super(ResUsers, self).__init__(pool, cr) 13 | # duplicate list to avoid modifying the original reference 14 | self.SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS) 15 | self.SELF_WRITEABLE_FIELDS.extend(['support_team_id']) 16 | 17 | @api.model 18 | def create(self, values): 19 | # overridden to signup along with creation of db through saas backend wizard 20 | user = super(ResUsers, self).create(values) 21 | if self.env.context.get('saas_signup'): 22 | user.partner_id.signup_prepare() 23 | return user 24 | -------------------------------------------------------------------------------- /saas_portal/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_saas_server,saas_portal.server,model_saas_portal_server,base.group_system,1,1,1,0 3 | access_saas_plan,saas_portal.plan,model_saas_portal_plan,base.group_system,1,1,1,0 4 | access_saas_client,saas_portal.client,model_saas_portal_client,base.group_system,1,1,1,0 5 | -------------------------------------------------------------------------------- /saas_portal/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal/static/description/icon.png -------------------------------------------------------------------------------- /saas_portal/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import config_wizard 2 | from . import batch_delete 3 | -------------------------------------------------------------------------------- /saas_portal/wizard/batch_delete.py: -------------------------------------------------------------------------------- 1 | from openerp import models, fields, api 2 | 3 | 4 | class SaasBatchDeleteWizard(models.TransientModel): 5 | _name = 'saas_portal.batch_delete_wizard' 6 | 7 | def _default_client_ids(self): 8 | return self._context.get('active_ids') 9 | 10 | client_ids = fields.Many2many('saas_portal.client', 'saas_batch_delete_clients_rel', 'cid', 'did', 11 | readonly=True, default=_default_client_ids) 12 | 13 | @api.multi 14 | def delete_from_server(self): 15 | self.client_ids._delete_database_server() 16 | -------------------------------------------------------------------------------- /saas_portal_async/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Portal Asynchronous database creation 2 | ========================================== 3 | Asynchronous client database creation. 4 | 5 | Attention! 6 | ========== 7 | Module does not work on 9.0 because connector ain't ported for 9.0 for this time. 8 | 9 | Usage 10 | ===== 11 | 12 | Prepare enviroment 13 | ^^^^^^^^^^^^^^^^^^ 14 | 15 | Get connector module https://github.com/OCA/connector/tree/8.0 16 | 17 | Optionaly you may test connector module using this module: https://github.com/OCA/connector-interfaces/tree/8.0/test_base_import_async 18 | 19 | For example try to export/import asyncronous way some contacts. 20 | 21 | Directly actions 22 | ^^^^^^^^^^^^^^^^ 23 | 24 | Install this module. 25 | 26 | 27 | Mark "asynchronous" checkbox when creating new client database from saas plan. 28 | 29 | You can look up database creation jobs in Connector->Jobs. If job is done new base is finished. 30 | -------------------------------------------------------------------------------- /saas_portal_async/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /saas_portal_async/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Portal Asynchronous database creation', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'IT-Projects LLC, Nicolas JEUDY', 5 | "support": "apps@it-projects.info", 6 | 'website': "https://it-projects.info", 7 | 'license': 'GPL-3', 8 | 'category': 'SaaS', 9 | 'depends': [ 10 | 'base', 11 | 'saas_portal', 12 | 'connector', 13 | ], 14 | 'installable': False, 15 | 'application': False, 16 | 'data': [ 17 | 'views/wizard.xml', 18 | ], 19 | } 20 | -------------------------------------------------------------------------------- /saas_portal_async/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import saas_portal_async 2 | -------------------------------------------------------------------------------- /saas_portal_async/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_async/static/description/icon.png -------------------------------------------------------------------------------- /saas_portal_async/views/wizard.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | saas_portal_create_client_view_form_inherit 6 | saas_portal.create_client 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /saas_portal_backup/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Portal Backup 2 | ==================== 3 | 4 | This addon introduces the following functionalities 5 | 6 | * Ability to backup database via a button on the UI 7 | * Backs up database on deletion if specified 8 | * Backs up database before upgrade if specified 9 | 10 | Instructions 11 | ------------ 12 | Install a transport agent on server (e.g saas_server_backup_s3) 13 | -------------------------------------------------------------------------------- /saas_portal_backup/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from . import models 3 | -------------------------------------------------------------------------------- /saas_portal_backup/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Portal backup', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'Salton Massally (iDT Labs), Nicolas JEUDY', 5 | 'license': 'GPL-3', 6 | 'category': 'SaaS', 7 | 'website': 'idtlabs.sl', 8 | 'depends': ['saas_portal'], 9 | 'data': [ 10 | 'views/saas_portal_views.xml', 11 | ], 12 | 'installable': True, 13 | } 14 | -------------------------------------------------------------------------------- /saas_portal_backup/models/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from . import saas_portal 3 | -------------------------------------------------------------------------------- /saas_portal_backup/models/saas_portal.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from odoo import models, fields, api 3 | 4 | 5 | class SaasPortalClient(models.Model): 6 | _inherit = 'saas_portal.client' 7 | 8 | backup = fields.Boolean('Backup on Modify', help="Backs up first before deleting \ 9 | or upgrading", default=True) 10 | 11 | @api.multi 12 | def action_backup(self): 13 | self.ensure_one() 14 | self._backup() 15 | 16 | @api.multi 17 | def delete_database(self): 18 | for database_obj in self: 19 | if database_obj.backup: 20 | database_obj._backup() 21 | return super(SaasPortalClient, self).delete_database() 22 | 23 | @api.multi 24 | def upgrade(self, payload=None): 25 | for database_obj in self: 26 | if database_obj.backup: 27 | # backup won't be done for upgrades through saas.config.do_upgrade_database 28 | # TODO: replace all saas.config.do_upgrade_database to self.upgrade 29 | database_obj._backup() 30 | return super(SaasPortalClient, self).upgrade(payload=payload) 31 | -------------------------------------------------------------------------------- /saas_portal_backup/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_backup/static/description/icon.png -------------------------------------------------------------------------------- /saas_portal_backup/views/saas_portal_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | saas_portal.client.form 6 | saas_portal.client 7 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /saas_portal_demo/__init__.py: -------------------------------------------------------------------------------- 1 | from . import controllers 2 | from . import models 3 | -------------------------------------------------------------------------------- /saas_portal_demo/controllers/__init__.py: -------------------------------------------------------------------------------- 1 | from . import main 2 | -------------------------------------------------------------------------------- /saas_portal_demo/data/ir_actions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | My Instances 5 | self 6 | /my/instances 7 | 8 | 9 | -------------------------------------------------------------------------------- /saas_portal_demo/data/product.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Odoo Version 6 | 7 | 8 | 8.0 9 | 10 | 11 | 12 | 9.0 13 | 14 | 15 | 16 | 10.0 17 | 18 | 19 | 20 | 11.0 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /saas_portal_demo/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | Changelog 2 | ========= 3 | 4 | `1.0.0` 5 | ------- 6 | 7 | - Init version 8 | -------------------------------------------------------------------------------- /saas_portal_demo/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import saas_portal_demo 2 | from . import product 3 | from . import saas_portal 4 | -------------------------------------------------------------------------------- /saas_portal_demo/models/product.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields 2 | 3 | 4 | class ProductVariant(models.Model): 5 | _inherit = 'product.product' 6 | 7 | variant_plan_id = fields.Many2one('saas_portal.plan', string='Plan for Variant', ondelete='cascade') 8 | 9 | 10 | class ProductTemplate(models.Model): 11 | _inherit = 'product.template' 12 | 13 | module_name = fields.Char('Module name', help='Demo module technical name') 14 | saas_demo = fields.Boolean(help='This product template is used for saas demo') 15 | -------------------------------------------------------------------------------- /saas_portal_demo/models/saas_portal.py: -------------------------------------------------------------------------------- 1 | from odoo import models, api, SUPERUSER_ID 2 | 3 | 4 | class SaasPortalPlan(models.Model): 5 | _inherit = 'saas_portal.plan' 6 | 7 | @api.multi 8 | def create_new_database(self, **kwargs): 9 | res = super(SaasPortalPlan, self).create_new_database(**kwargs) 10 | user_id = kwargs.get('user_id') 11 | user = user_id and user_id != SUPERUSER_ID and self.env['res.users'].browse(user_id) 12 | if user: 13 | user.action_id = self.env.ref('saas_portal_demo.action_open_my_instances').id 14 | return res 15 | -------------------------------------------------------------------------------- /saas_portal_demo/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_saas_portal_plan_public,saas_portal.plan,saas_portal.model_saas_portal_plan,,1,0,0,0 3 | access_saas_portal_demo_plan_module_public,saas_portal.demo_plan_module,saas_portal_demo.model_saas_portal_demo_plan_module,,1,0,0,0 4 | -------------------------------------------------------------------------------- /saas_portal_demo/security/saas_portal_demo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /saas_portal_demo/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_demo/static/description/icon.png -------------------------------------------------------------------------------- /saas_portal_demo/views/product.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | product.product.saas 6 | product.product 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /saas_portal_portal/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Portal Portal 2 | ================== 3 | 4 | Allows your customers to manage their saas services from a beautiful web interface. 5 | -------------------------------------------------------------------------------- /saas_portal_portal/__init__.py: -------------------------------------------------------------------------------- 1 | from . import controllers 2 | -------------------------------------------------------------------------------- /saas_portal_portal/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Portal Portal', 3 | 'version': '11.0.1.1.1', 4 | 'author': "IT-Projects LLC, Ildar Nasyrov, Nicolas JEUDY", 5 | 'license': 'LGPL-3', 6 | 'category': 'SaaS', 7 | "support": "apps@it-projects.info", 8 | 'website': 'https://it-projects.info', 9 | 'depends': ['portal', 'saas_portal'], 10 | 'data': [ 11 | 'views/website_instance_templates.xml', 12 | ], 13 | 'installable': True, 14 | } 15 | -------------------------------------------------------------------------------- /saas_portal_portal/controllers/__init__.py: -------------------------------------------------------------------------------- 1 | from . import portal 2 | -------------------------------------------------------------------------------- /saas_portal_portal/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.1.1` 2 | ------------ 3 | 4 | - **Fix:** fix checking database name js regex - previous one restricted number of levels in a domain name 5 | 6 | `1.1.0` 7 | ------------ 8 | 9 | - **New:** allow to work with several databases from portal page (list all client's databases with stats) and rename each one 10 | 11 | `1.0.0` 12 | ------------ 13 | 14 | - **Init version** 15 | -------------------------------------------------------------------------------- /saas_portal_portal/doc/index.rst: -------------------------------------------------------------------------------- 1 | ================== 2 | saas_portal_portal 3 | ================== 4 | 5 | Installation 6 | ============ 7 | 8 | * `Install `__ this module in a usual way 9 | 10 | Configuration 11 | ============= 12 | 13 | {Instruction how to configure the module before start to use it} 14 | 15 | TODO 16 | 17 | Usage 18 | ===== 19 | 20 | {Instruction for daily usage. It should describe how to check that module works. What shall user do and what would user get.} 21 | 22 | TODO 23 | 24 | Uninstallation 25 | ============== 26 | 27 | {Optional section for uninstallation notes. Delete it if you don't have notes for uninstallation.} 28 | -------------------------------------------------------------------------------- /saas_portal_sale/README.rst: -------------------------------------------------------------------------------- 1 | SaaS portal sale 2 | ================ 3 | 4 | With this module you can sale SaaS 5 | There are attribute codes for SaaS products to be used as a parameters for client databases that are purchased. 6 | 7 | SaaS attribute codes for SaaS products 8 | -------------------------------------- 9 | * SUBSCRIPTION_PERIOD 10 | * MAX_USERS 11 | 12 | These codes should be assigned in Sales->Configuration->Product Categories & Attributes->Attributes. 13 | Values for the codes should be assigned in Sales->Configuration->Product Categories & Attributes->Attribute Values. 14 | 15 | 16 | Known issues 17 | ============ 18 | -------------------------------------------------------------------------------- /saas_portal_sale/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /saas_portal_sale/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': "Saas Portal Sale", 3 | 'author': "IT-Projects LLC, Ildar Nasyrov, Nicolas JEUDY", 4 | 'license': 'LGPL-3', 5 | "support": "apps@it-projects.info", 6 | 'website': "https://twitter.com/nasyrov_ildar", 7 | 'category': 'SaaS', 8 | 'version': '11.0.1.0.0', 9 | 'depends': [ 10 | 'sale', 11 | 'saas_portal', 12 | 'product_price_factor', 13 | 'saas_portal_start', 14 | 'contract', 15 | ], 16 | 'data': [ 17 | 'views/product_template_views.xml', 18 | 'views/product_attribute_views.xml', 19 | 'views/saas_portal.xml', 20 | 'data/mail_template_data.xml', 21 | 'data/ir_config_parameter.xml', 22 | ], 23 | } 24 | -------------------------------------------------------------------------------- /saas_portal_sale/data/ir_config_parameter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | saas_portal.page_for_nonfree_subdomains 6 | / 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /saas_portal_sale/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_portal_sale/doc/index.rst: -------------------------------------------------------------------------------- 1 | ================ 2 | saas_portal_sale 3 | ================ 4 | 5 | Installation 6 | ============ 7 | 8 | * `Install `__ this module in a usual way 9 | 10 | Configuration 11 | ============= 12 | 13 | {Instruction how to configure the module before start to use it} 14 | 15 | TODO 16 | 17 | Usage 18 | ===== 19 | 20 | {Instruction for daily usage. It should describe how to check that module works. What shall user do and what would user get.} 21 | 22 | TODO 23 | 24 | Uninstallation 25 | ============== 26 | 27 | {Optional section for uninstallation notes. Delete it if you don't have notes for uninstallation.} 28 | -------------------------------------------------------------------------------- /saas_portal_sale/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import product_template 2 | from . import saas_portal 3 | -------------------------------------------------------------------------------- /saas_portal_sale/models/product_template.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields 2 | 3 | 4 | class ProductTemplateSaaS(models.Model): 5 | _inherit = 'product.template' 6 | 7 | plan_ids = fields.One2many( 8 | 'saas_portal.plan', 'product_tmpl_id', 9 | string='SaaS Plans', 10 | help='Create db per each selected plan - use the DB Names prefix setting in each selected plans') 11 | saas_default = fields.Boolean( 12 | 'Is default', 13 | help='Use as default SaaS product on signup form') 14 | on_create_email_template = fields.Many2one( 15 | 'mail.template', 16 | string='credentials mail') 17 | saas_plan_id = fields.Many2one('saas_portal.plan', 18 | string='Related SaaS Plan', 19 | ondelete='restrict') 20 | 21 | 22 | class ProductAttributeSaaS(models.Model): 23 | _inherit = "product.attribute" 24 | 25 | saas_code = fields.Selection('_get_saas_codes') 26 | 27 | def _get_saas_codes(self): 28 | return [('max_users', 'max_users'), 29 | ('total_storage_limit', 'total_storage_limit')] 30 | -------------------------------------------------------------------------------- /saas_portal_sale/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_sale/static/description/icon.png -------------------------------------------------------------------------------- /saas_portal_sale/views/product_attribute_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | saas_product.attribute.tree 5 | product.attribute 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /saas_portal_sale/views/product_template_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | product.product.saas 5 | product.template 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | product.product.saas 21 | product.product 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /saas_portal_sale_online/README.rst: -------------------------------------------------------------------------------- 1 | SaaS portal sale 2 | ================ 3 | 4 | With this module you can sale SaaS 5 | -------------------------------------------------------------------------------- /saas_portal_sale_online/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_sale_online/__init__.py -------------------------------------------------------------------------------- /saas_portal_sale_online/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': "Saas Portal Sale Online", 3 | 'author': "IT-Projects LLC, Ildar Nasyrov, Nicolas JEUDY", 4 | 'license': 'LGPL-3', 5 | "support": "apps@it-projects.info", 6 | 'website': "https://twitter.com/nasyrov_ildar", 7 | 'category': 'SaaS', 8 | 'version': '11.0.1.0.0', 9 | 'depends': ['website_sale', 'saas_portal', 'saas_portal_sale', 'website_sale_require_login'], 10 | 'data': [ 11 | 'views/templates.xml', 12 | ], 13 | 14 | 'installable': True, 15 | } 16 | -------------------------------------------------------------------------------- /saas_portal_sale_online/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_portal_sale_online/doc/index.rst: -------------------------------------------------------------------------------- 1 | ======================= 2 | saas_portal_sale_online 3 | ======================= 4 | 5 | Installation 6 | ============ 7 | 8 | * `Install `__ this module in a usual way 9 | 10 | Configuration 11 | ============= 12 | 13 | {Instruction how to configure the module before start to use it} 14 | 15 | TODO 16 | 17 | Usage 18 | ===== 19 | 20 | {Instruction for daily usage. It should describe how to check that module works. What shall user do and what would user get.} 21 | 22 | TODO 23 | 24 | Uninstallation 25 | ============== 26 | 27 | {Optional section for uninstallation notes. Delete it if you don't have notes for uninstallation.} 28 | -------------------------------------------------------------------------------- /saas_portal_sale_online/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_sale_online/static/description/icon.png -------------------------------------------------------------------------------- /saas_portal_sale_online/views/templates.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /saas_portal_sale_subscription/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Portal Sale Subscription 2 | ============================= 3 | 4 | This module complements *SaaS Portal Sale* and *SaaS Portal 5 | Subscription* to improve the management of subscriptions sold: 6 | 7 | * Enables subscription period as product attribute. 8 | * Adds subscription invoices to SaaS clients. 9 | * The expiration date also takes into account period paid from invoices. 10 | * Emails are sent to customers to create SaaS clients on pay invoices. 11 | * SaaS client contracts are configured based on first invoices. 12 | * Recurring invoices extend SaaS client subscriptions. 13 | * Trials become subscriptions on validate invoices if plans allow it. 14 | -------------------------------------------------------------------------------- /saas_portal_sale_subscription/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizard 3 | -------------------------------------------------------------------------------- /saas_portal_sale_subscription/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Portal Sale Subscription', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'PlanetaTIC, IT-Projects LLC, Ildar Nasyrov, Nicolas JEUDY', 5 | 'license': 'LGPL-3', 6 | 'category': 'SaaS', 7 | 'support': 'info@planetatic.com', 8 | 'website': "https://www.planetatic.com", 9 | 'depends': [ 10 | 'saas_portal_sale', 11 | 'saas_portal_subscription', 12 | ], 13 | 'data': [ 14 | 'views/account_invoice_view.xml', 15 | 'views/product_attribute_views.xml', 16 | 'views/saas_portal.xml', 17 | 'wizard/subscription_wizard.xml', 18 | ], 19 | 'installable': True, 20 | } 21 | -------------------------------------------------------------------------------- /saas_portal_sale_subscription/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import account_analytic_account 2 | from . import account_invoice 3 | from . import product_template 4 | from . import saas_portal 5 | -------------------------------------------------------------------------------- /saas_portal_sale_subscription/models/account_analytic_account.py: -------------------------------------------------------------------------------- 1 | from odoo import api, models 2 | 3 | 4 | class AccountAnalyticAccount(models.Model): 5 | _inherit = 'account.analytic.account' 6 | 7 | @api.model 8 | def _prepare_invoice_line(self, line, invoice_id): 9 | ''' 10 | Set client in invoice created from contract 11 | ''' 12 | res = super(AccountAnalyticAccount, self)._prepare_invoice_line( 13 | line, invoice_id) 14 | contract = line.analytic_account_id 15 | if not contract: 16 | return res 17 | clients = self.env['saas_portal.client'].search([ 18 | ('contract_id', '=', contract.id), 19 | ]) 20 | if not clients: 21 | return res 22 | res['saas_client_id'] = clients[0].id 23 | return res 24 | -------------------------------------------------------------------------------- /saas_portal_sale_subscription/models/product_template.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields 2 | 3 | 4 | class ProductAttributeSaaS(models.Model): 5 | _inherit = 'product.attribute' 6 | 7 | def _get_saas_codes(self): 8 | res = super(ProductAttributeSaaS, self)._get_saas_codes() 9 | res.extend([ 10 | ('install_modules', 'install_modules'), 11 | ('subscription_period', 'subscription_period'), 12 | ]) 13 | return res 14 | 15 | 16 | class ProductAttributeValueSaaS(models.Model): 17 | _inherit = 'product.attribute.value' 18 | 19 | saas_code_value = fields.Char('SaaS code value') 20 | -------------------------------------------------------------------------------- /saas_portal_sale_subscription/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_sale_subscription/static/description/icon.png -------------------------------------------------------------------------------- /saas_portal_sale_subscription/views/product_attribute_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | product.attribute.value.view.tree.saas 5 | product.attribute.value 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | product.attribute.value.tree.saas 16 | product.attribute.value 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /saas_portal_sale_subscription/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import subscription_wizard 2 | -------------------------------------------------------------------------------- /saas_portal_signup/__init__.py: -------------------------------------------------------------------------------- 1 | from . import controllers 2 | -------------------------------------------------------------------------------- /saas_portal_signup/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Portal Sign Up', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'Cesar Lage, Nicolas JEUDY', 5 | 'license': 'LGPL-3', 6 | 'category': 'SaaS', 7 | "support": "apps@it-projects.info", 8 | 'website': 'https://it-projects.info', 9 | 'depends': ['auth_signup', 'saas_portal'], 10 | 'data': ['views/signup.xml'], 11 | 'installable': True, 12 | 13 | 'description': ''' 14 | Module to book a new client in SaaS Portal from sign up 15 | ''', 16 | } 17 | -------------------------------------------------------------------------------- /saas_portal_signup/controllers/__init__.py: -------------------------------------------------------------------------------- 1 | from . import main 2 | -------------------------------------------------------------------------------- /saas_portal_signup/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_portal_signup/doc/index.rst: -------------------------------------------------------------------------------- 1 | ================== 2 | saas_portal_signup 3 | ================== 4 | 5 | Installation 6 | ============ 7 | 8 | * `Install `__ this module in a usual way 9 | 10 | Configuration 11 | ============= 12 | 13 | {Instruction how to configure the module before start to use it} 14 | 15 | TODO 16 | 17 | Usage 18 | ===== 19 | 20 | {Instruction for daily usage. It should describe how to check that module works. What shall user do and what would user get.} 21 | 22 | TODO 23 | 24 | Uninstallation 25 | ============== 26 | 27 | {Optional section for uninstallation notes. Delete it if you don't have notes for uninstallation.} 28 | -------------------------------------------------------------------------------- /saas_portal_signup/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_signup/static/description/icon.png -------------------------------------------------------------------------------- /saas_portal_signup_custom/README.rst: -------------------------------------------------------------------------------- 1 | ====================================== 2 | Create databases after signup custom 3 | ====================================== 4 | 5 | This is customization of saas_portal_signup module that allows to create several databases for new customers after signup. 6 | 7 | Credits 8 | ======= 9 | 10 | Contributors 11 | ------------ 12 | * Ildar Nasyrov 13 | 14 | Sponsors 15 | -------- 16 | * `IT-Projects LLC `__ 17 | 18 | Maintainers 19 | ----------- 20 | * `IT-Projects LLC `__ 21 | 22 | Further information 23 | =================== 24 | 25 | Demo: http://runbot.it-projects.info/demo/REPO-NAME/BRANCH 26 | 27 | HTML Description: https://apps.odoo.com/apps/modules/VERSION/TECHNICAL_NAME/ 28 | 29 | Usage instructions: ``_ 30 | 31 | Changelog: ``_ 32 | 33 | Tested on Odoo 8.0 c150838bb56ef4c08f2b2ccde3264ce42f9f42de 34 | -------------------------------------------------------------------------------- /saas_portal_signup_custom/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from . import models 4 | from . import controllers 5 | -------------------------------------------------------------------------------- /saas_portal_signup_custom/__openerp__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | { 3 | "name": """Create databases after signup custom""", 4 | "summary": """Create several databases for new customers after signup""", 5 | "category": "SaaS", 6 | "images": [], 7 | "version": "1.0.0", 8 | "application": False, 9 | 10 | "author": "IT-Projects LLC, Ildar Nasyrov", 11 | "support": "apps@it-projects.info", 12 | "website": "https://it-projects.info", 13 | "license": "GPL-3", 14 | # "price": 9.00, 15 | # "currency": "EUR", 16 | 17 | "depends": [ 18 | 'saas_portal_sale', 19 | 'saas_portal_signup', 20 | ], 21 | "external_dependencies": {"python": [], "bin": []}, 22 | "data": [ 23 | 'security/ir.model.access.csv', 24 | 'views/product_view.xml', 25 | 'views/signup.xml', 26 | 'views/saas_portal.xml', 27 | ], 28 | "qweb": [ 29 | ], 30 | "demo": [ 31 | ], 32 | 33 | "post_load": None, 34 | "pre_init_hook": None, 35 | "post_init_hook": None, 36 | 37 | "auto_install": False, 38 | "installable": False, 39 | } 40 | -------------------------------------------------------------------------------- /saas_portal_signup_custom/controllers/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from . import main 3 | -------------------------------------------------------------------------------- /saas_portal_signup_custom/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------- 3 | 4 | - Init version 5 | -------------------------------------------------------------------------------- /saas_portal_signup_custom/models/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from . import product 4 | from . import saas_portal 5 | -------------------------------------------------------------------------------- /saas_portal_signup_custom/models/product.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from openerp import models, fields 3 | 4 | 5 | class ProductTemplate(models.Model): 6 | _inherit = 'product.template' 7 | 8 | plan_ids = fields.Many2many('saas_portal.plan', 9 | string='SaaS Plans', 10 | help='Create db per each selected plan - use the DB Names prefix setting in each selected plans') 11 | saas_default = fields.Boolean('Use as default SaaS product') 12 | on_create_email_template = fields.Many2one('email.template', 13 | default=lambda self: self.env.ref('saas_portal_sale.email_template_create_saass')) 14 | -------------------------------------------------------------------------------- /saas_portal_signup_custom/models/saas_portal.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from openerp import fields 4 | from openerp import models 5 | 6 | 7 | class SaasPortalPlan(models.Model): 8 | _inherit = 'saas_portal.plan' 9 | 10 | dbname_prefix = fields.Char('DB Names prefix', 11 | help='specify this field if you want to create several databases at once using saas_portal_signup module', 12 | placeholder='test-') 13 | -------------------------------------------------------------------------------- /saas_portal_signup_custom/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | access_product_product_public,product.product.public,product.model_product_product,,1,0,0,0 3 | access_product_template_public,product.template.public,product.model_product_template,,1,0,0,0 4 | access_product_category_public,product.category.public,product.model_product_category,,1,0,0,0 5 | -------------------------------------------------------------------------------- /saas_portal_signup_custom/views/product_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | product.template.saas 6 | product.template 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 1 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /saas_portal_signup_custom/views/saas_portal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | saas_portal.plans.form 7 | saas_portal.plan 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /saas_portal_start/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Portal - /page/start 2 | ========================= 3 | 4 | Module add features like this ones https://www.odoo.com/page/start 5 | -------------------------------------------------------------------------------- /saas_portal_start/__init__.py: -------------------------------------------------------------------------------- 1 | from . import controllers 2 | -------------------------------------------------------------------------------- /saas_portal_start/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Portal - /page/start', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'Ivan Yelizariev, Nicolas JEUDY', 5 | 'license': 'LGPL-3', 6 | 'category': 'SaaS', 7 | "support": "apps@it-projects.info", 8 | 'website': 'https://it-projects.info', 9 | 'depends': ['website', 'saas_portal'], 10 | 'data': [ 11 | 'views/website.xml', 12 | ], 13 | 'installable': True, 14 | } 15 | -------------------------------------------------------------------------------- /saas_portal_start/controllers/__init__.py: -------------------------------------------------------------------------------- 1 | from . import main 2 | -------------------------------------------------------------------------------- /saas_portal_start/controllers/main.py: -------------------------------------------------------------------------------- 1 | from odoo import http 2 | from odoo.http import request 3 | from odoo.addons.saas_portal.controllers.main import SaasPortal 4 | 5 | 6 | class SaasPortalStart(SaasPortal): 7 | 8 | @http.route(['/page/website.start', '/page/start'], type='http', auth="public", website=True) 9 | def start(self, **post): 10 | base_saas_domain = self.get_config_parameter('base_saas_domain') 11 | values = { 12 | 'base_saas_domain': base_saas_domain, 13 | 'plan_id': post.get('plan_id') 14 | } 15 | return request.render("website.start", values) 16 | -------------------------------------------------------------------------------- /saas_portal_start/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_portal_start/doc/index.rst: -------------------------------------------------------------------------------- 1 | ================= 2 | saas_server_start 3 | ================= 4 | 5 | Installation 6 | ============ 7 | 8 | * `Install `__ this module in a usual way 9 | 10 | Configuration 11 | ============= 12 | 13 | {Instruction how to configure the module before start to use it} 14 | 15 | TODO 16 | 17 | Usage 18 | ===== 19 | 20 | {Instruction for daily usage. It should describe how to check that module works. What shall user do and what would user get.} 21 | 22 | TODO 23 | 24 | Uninstallation 25 | ============== 26 | 27 | {Optional section for uninstallation notes. Delete it if you don't have notes for uninstallation.} 28 | -------------------------------------------------------------------------------- /saas_portal_start/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_start/static/description/icon.png -------------------------------------------------------------------------------- /saas_portal_start/static/src/css/main.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_start/static/src/css/main.css -------------------------------------------------------------------------------- /saas_portal_subscription/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Portal Subscription 2 | ======================== 3 | 4 | This module helps the management of subscriptions: 5 | 6 | * Adds a subscription log of expiration changes and reasons to SaaS clients. 7 | * The expiration date is computed from: 8 | 9 | * SaaS client creation date. 10 | * Expiration changes. 11 | * Grace days in plan. 12 | * Trial hours in plan. 13 | 14 | * An email is sent to the customer after each expiration change. 15 | -------------------------------------------------------------------------------- /saas_portal_subscription/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | from . import wizard 3 | -------------------------------------------------------------------------------- /saas_portal_subscription/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Portal Subscription', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'PlanetaTIC, Ivan Yelizariev, Nicolas JEUDY', 5 | 'license': 'LGPL-3', 6 | 'category': 'SaaS', 7 | 'support': 'info@planetatic.com', 8 | 'website': "https://www.planetatic.com", 9 | 'depends': [ 10 | 'saas_portal', 11 | 'base_automation', 12 | ], 13 | 'data': [ 14 | 'data/base_automation.xml', 15 | 'wizard/subscription_wizard.xml', 16 | 'views/saas_portal.xml', 17 | ], 18 | 'installable': True, 19 | } 20 | -------------------------------------------------------------------------------- /saas_portal_subscription/data/base_automation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Send SaaS expiration info 5 | True 6 | ir.actions.server 7 | 8 | code 9 | records.send_expiration_info() 10 | 11 | 12 | 13 | Send SaaS expiration info 14 | 15 | 16 | on_write 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /saas_portal_subscription/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import saas_portal 2 | from . import subscription_log 3 | -------------------------------------------------------------------------------- /saas_portal_subscription/models/subscription_log.py: -------------------------------------------------------------------------------- 1 | from odoo import fields, models 2 | 3 | 4 | class SaasSubscriptionLog(models.Model): 5 | _name = 'saas_portal.subscription_log' 6 | _order = 'id desc' 7 | 8 | client_id = fields.Many2one('saas_portal.client', 'Client') 9 | expiration = fields.Datetime('Previous expiration') 10 | expiration_new = fields.Datetime('New expiration') 11 | reason = fields.Text('Reason') 12 | -------------------------------------------------------------------------------- /saas_portal_subscription/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_subscription/static/description/icon.png -------------------------------------------------------------------------------- /saas_portal_subscription/wizard/__init__.py: -------------------------------------------------------------------------------- 1 | from . import subscription_wizard 2 | -------------------------------------------------------------------------------- /saas_portal_subscription/wizard/subscription_wizard.py: -------------------------------------------------------------------------------- 1 | from odoo import api, fields, models 2 | 3 | 4 | class SaasSubscriptionWizard(models.TransientModel): 5 | _name = 'saas_portal.subscription_wizard' 6 | 7 | client_id = fields.Many2one('saas_portal.client', 'Client', readonly=True) 8 | expiration = fields.Datetime('Current expiration', readonly=True) 9 | expiration_new = fields.Datetime('New expiration', required=True) 10 | reason = fields.Text(string='Reason', required=True) 11 | 12 | @api.model 13 | def default_get(self, fields): 14 | result = super(SaasSubscriptionWizard, self).default_get(fields) 15 | client = self.env['saas_portal.client'].browse( 16 | self.env.context.get('active_id')) 17 | result['client_id'] = client.id 18 | result['expiration'] = client.expiration_datetime 19 | result['expiration_new'] = client.expiration_datetime 20 | return result 21 | 22 | @api.multi 23 | def apply_changes(self): 24 | if self.expiration_new != self.expiration: 25 | self.client_id.change_subscription( 26 | self.expiration_new, self.reason) 27 | -------------------------------------------------------------------------------- /saas_portal_tagging/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Portal Tagging 2 | =================== 3 | 4 | This addon introduces the following functionalities 5 | * Ability to tag client databases 6 | * Ability to tag plans which are copied on to clients spurned from that plan 7 | -------------------------------------------------------------------------------- /saas_portal_tagging/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /saas_portal_tagging/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Portal Tagging', 3 | 'summary': "Ability to tag client databases", 4 | 'version': '11.0.1.0.0', 5 | 'author': 'Salton Massally , Nicolas JEUDY', 6 | 'license': 'GPL-3', 7 | 'category': 'SaaS', 8 | 'website': 'idtlabs.sl', 9 | 'depends': ['saas_portal'], 10 | 'data': [ 11 | 'views/saas_portal_tagging_views.xml', 12 | 'views/wizard.xml' 13 | ], 14 | 'installable': True, 15 | } 16 | -------------------------------------------------------------------------------- /saas_portal_tagging/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import saas_portal_tagging 2 | from . import wizard 3 | -------------------------------------------------------------------------------- /saas_portal_tagging/models/wizard.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields, api 2 | 3 | 4 | class SaasTagClient(models.TransientModel): 5 | _name = 'saas_portal.tag_client' 6 | 7 | @api.model 8 | def _default_categories(self): 9 | client = self.env['saas_portal.client'].browse( 10 | self.env.context['active_id']) 11 | return client.category_ids.ids 12 | 13 | category_ids = fields.Many2many( 14 | 'saas.portal.category', 15 | string='Tags', 16 | default=_default_categories 17 | ) 18 | 19 | @api.multi 20 | def apply(self): 21 | self.ensure_one() 22 | client = self.env['saas_portal.client'].browse( 23 | self.env.context['active_id']) 24 | client.write({'category_ids': [(6, 0, self.category_ids.ids)]}) 25 | return True 26 | -------------------------------------------------------------------------------- /saas_portal_tagging/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_tagging/static/description/icon.png -------------------------------------------------------------------------------- /saas_portal_templates/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Portal - templates 2 | ======================= 3 | 4 | Module adds web page with a database templates for choosing. 5 | 6 | Use this path: 7 | 8 | /saas_portal_templates/select-template 9 | 10 | It's something like that https://accounts.odoo.com/odoo-enterprise/select-app but it is based on template databases, rather than apps 11 | -------------------------------------------------------------------------------- /saas_portal_templates/__init__.py: -------------------------------------------------------------------------------- 1 | from . import controllers 2 | from . import models 3 | -------------------------------------------------------------------------------- /saas_portal_templates/__manifest__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | { 3 | 'name': 'SaaS Portal - templates', 4 | 'version': '11.0.1.0.0', 5 | 'author': 'Ivan Yelizariev, Nicolas JEUDY', 6 | 'license': 'LGPL-3', 7 | 'category': 'SaaS', 8 | "support": "apps@it-projects.info", 9 | 'website': 'https://it-projects.info', 10 | 'depends': ['saas_portal'], 11 | 'data': [ 12 | 'views/website.xml', 13 | ], 14 | 'installable': True, 15 | } 16 | -------------------------------------------------------------------------------- /saas_portal_templates/controllers/__init__.py: -------------------------------------------------------------------------------- 1 | from . import main 2 | -------------------------------------------------------------------------------- /saas_portal_templates/controllers/main.py: -------------------------------------------------------------------------------- 1 | from odoo import http 2 | from odoo.http import request 3 | from odoo.addons.web.controllers.main import login_and_redirect 4 | from odoo.addons.saas_portal.controllers.main import SaasPortal as saas_portal_controller 5 | 6 | 7 | class SaasPortalTemplates(saas_portal_controller): 8 | 9 | @http.route(['/saas_portal_templates/select-template'], type='http', auth='public', website=True) 10 | def select_template(self, **post): 11 | domain = [('state', 'in', ['confirmed'])] 12 | fields = ['id', 'name', 'summary'] 13 | templates = request.env['saas_portal.plan'].sudo().search_read(domain=domain, fields=fields) 14 | values = {'templates': templates} 15 | return request.website.render("saas_portal_templates.select_template", values) 16 | 17 | @http.route(['/saas_portal_templates/new_database'], type='http', auth='public', website=True) 18 | def new_database(self, **post): 19 | if not request.session.uid: 20 | return login_and_redirect() 21 | plan_id = int(post.get('plan_id')) 22 | 23 | res = self.create_new_database(plan_id) 24 | return request.redirect(res.get('url')) 25 | -------------------------------------------------------------------------------- /saas_portal_templates/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import saas_portal_templates 2 | -------------------------------------------------------------------------------- /saas_portal_templates/models/saas_portal_templates.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_templates/models/saas_portal_templates.py -------------------------------------------------------------------------------- /saas_portal_templates/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_portal_templates/static/description/icon.png -------------------------------------------------------------------------------- /saas_server/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Server 2 | =========== 3 | 4 | Module for central database on odoo databases cluster. Cluster is a odoo 5 | installation. Each cluster is located on a separate server, in the main. 6 | -------------------------------------------------------------------------------- /saas_server/__init__.py: -------------------------------------------------------------------------------- 1 | from . import controllers 2 | from . import models 3 | -------------------------------------------------------------------------------- /saas_server/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Server', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'Ivan Yelizariev, Nicolas JEUDY', 5 | 'license': 'LGPL-3', 6 | 'category': 'SaaS', 7 | "support": "apps@it-projects.info", 8 | 'website': 'https://it-projects.info', 9 | 'depends': [ 10 | 'auth_oauth', 11 | 'auth_oauth_ip', 12 | 'saas_base', 13 | 'website', 14 | ], 15 | 'data': [ 16 | 'views/saas_server.xml', 17 | 'views/res_config_settings_views.xml', 18 | 'data/auth_oauth_data.xml', 19 | 'data/ir_config_parameter.xml', 20 | 'data/pre_install.yml', 21 | ], 22 | 'installable': True, 23 | } 24 | -------------------------------------------------------------------------------- /saas_server/controllers/__init__.py: -------------------------------------------------------------------------------- 1 | from . import main 2 | -------------------------------------------------------------------------------- /saas_server/data/auth_oauth_data.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SaaS 6 | http://odoo.local/oauth2/auth 7 | userinfo 8 | http://odoo.local/oauth2/tokeninfo 9 | 10 | zocial openerp 11 | Log in via SaaS Portal 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /saas_server/data/ir_config_parameter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | saas_client.ab_location 6 | http://odoo.local/saas_server/ab/css/%s.css 7 | 8 | 9 | saas_client.ab_register 10 | https://www.it-projects.info/page/website.contactus/? 11 | 12 | 13 | saas_client.saas_dashboard 14 | http://odoo.local/my/home 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /saas_server/data/pre_install.yml: -------------------------------------------------------------------------------- 1 | - 2 | !python {model: res.users}: | 3 | SUPERUSER_ID = 1 4 | oauth_provider_id = ref('saas_server.saas_oauth_provider') 5 | self.browse(SUPERUSER_ID).write({'oauth_provider_id': oauth_provider_id, 'oauth_uid': SUPERUSER_ID}) 6 | 7 | dbuuid = self.env['ir.config_parameter'].sudo().get_param('database.uuid') 8 | self.env['auth.oauth.provider'].browse(oauth_provider_id).write({'client_id': dbuuid}) 9 | -------------------------------------------------------------------------------- /saas_server/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_server/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import saas_server 2 | from . import res_config_settings 3 | -------------------------------------------------------------------------------- /saas_server/models/res_config_settings.py: -------------------------------------------------------------------------------- 1 | # Copyright 2018 Ildar Nasyrov 2 | # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). 3 | 4 | from odoo import api, fields, models 5 | 6 | 7 | class ResConfigSettings(models.TransientModel): 8 | _inherit = 'res.config.settings' 9 | 10 | module_saas_server_backup_ftp = fields.Boolean(string='Use SFTP Backup profile', help='Use saas_server_backup_ftp module') 11 | -------------------------------------------------------------------------------- /saas_server/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_server/static/description/icon.png -------------------------------------------------------------------------------- /saas_server_autodelete/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Portal - autodelete expired databases 2 | ========================================== 3 | 4 | The module adds cron job to delete expired trial databases. 5 | -------------------------------------------------------------------------------- /saas_server_autodelete/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_server_autodelete/__init__.py -------------------------------------------------------------------------------- /saas_server_autodelete/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Server - Autodelete expired databases', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'Ivan Yelizariev, Nicolas JEUDY', 5 | 'license': 'LGPL-3', 6 | 'category': 'SaaS', 7 | "support": "apps@it-projects.info", 8 | 'website': 'https://it-projects.info', 9 | 'depends': ['saas_server'], 10 | 'data': [ 11 | 'data/ir_cron.xml', 12 | ], 13 | 'installable': True, 14 | } 15 | -------------------------------------------------------------------------------- /saas_server_autodelete/data/ir_cron.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Delete expired databases 6 | 7 | 1 8 | hours 9 | -1 10 | 11 | 12 | code 13 | model._cron_delete_expired_databases() 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /saas_server_autodelete/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_server_autodelete/static/description/icon.png -------------------------------------------------------------------------------- /saas_server_backup_ftp/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /saas_server_backup_ftp/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': "saas_server_backup_ftp", 3 | 'author': "IT-Projects LLC, Ildar Nasyrov, Nicolas JEUDY", 4 | 'license': 'GPL-3', 5 | "support": "apps@it-projects.info", 6 | 'website': "https://twitter.com/nasyrov_ildar", 7 | 'category': 'SaaS', 8 | 'version': '11.0.1.0.0', 9 | 'depends': ['saas_server'], 10 | "external_dependencies": {"python": ['pysftp'], "bin": []}, 11 | 'data': [ 12 | 'views/res_config.xml', 13 | 'data/ir_cron.xml', 14 | ], 15 | } 16 | -------------------------------------------------------------------------------- /saas_server_backup_ftp/data/ir_cron.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Backup SaaS Databases Scheduler 7 | 1 8 | days 9 | 10 | -1 11 | 12 | code 13 | model.schedule_saas_databases_backup() 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /saas_server_backup_ftp/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_server_backup_ftp/doc/index.rst: -------------------------------------------------------------------------------- 1 | ====================== 2 | saas_server_backup_ftp 3 | ====================== 4 | 5 | Installation 6 | ============ 7 | 8 | * `Install `__ this module in a usual way 9 | 10 | Configuration 11 | ============= 12 | 13 | {Instruction how to configure the module before start to use it} 14 | 15 | TODO 16 | 17 | Usage 18 | ===== 19 | 20 | {Instruction for daily usage. It should describe how to check that module works. What shall user do and what would user get.} 21 | 22 | TODO 23 | 24 | Uninstallation 25 | ============== 26 | 27 | {Optional section for uninstallation notes. Delete it if you don't have notes for uninstallation.} 28 | -------------------------------------------------------------------------------- /saas_server_backup_ftp/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_config 2 | from . import saas_server 3 | -------------------------------------------------------------------------------- /saas_server_backup_ftp/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_server_backup_ftp/static/description/icon.png -------------------------------------------------------------------------------- /saas_server_backup_rotate/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Server Rotate Backup 2 | ========================= 3 | 4 | Rotate backups 5 | -------------------------------------------------------------------------------- /saas_server_backup_rotate/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /saas_server_backup_rotate/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Server Rotate Backup', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'Salton Masssally, Nicolas JEUDY', 5 | 'license': 'GPL-3', 6 | 'category': 'SaaS', 7 | "support": "apps@it-projects.info", 8 | 'website': 'http://idtlabs.sl', 9 | 'depends': ['saas_server'], 10 | 'data': [ 11 | 'data/ir_cron.xml', 12 | 'views/res_config.xml', 13 | ], 14 | 'installable': True, 15 | } 16 | -------------------------------------------------------------------------------- /saas_server_backup_rotate/data/ir_cron.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Saas Server - Delete Expired Backup 5 | 6 | 7 | 1 8 | days 9 | -1 10 | 11 | 12 | rotate_backups 13 | () 14 | 15 | 16 | -------------------------------------------------------------------------------- /saas_server_backup_rotate/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_server_backup_rotate/doc/index.rst: -------------------------------------------------------------------------------- 1 | ========================= 2 | saas_server_backup_rotate 3 | ========================= 4 | 5 | Installation 6 | ============ 7 | 8 | * `Install `__ this module in a usual way 9 | 10 | Configuration 11 | ============= 12 | 13 | {Instruction how to configure the module before start to use it} 14 | 15 | TODO 16 | 17 | Usage 18 | ===== 19 | 20 | {Instruction for daily usage. It should describe how to check that module works. What shall user do and what would user get.} 21 | 22 | TODO 23 | 24 | Uninstallation 25 | ============== 26 | 27 | {Optional section for uninstallation notes. Delete it if you don't have notes for uninstallation.} 28 | -------------------------------------------------------------------------------- /saas_server_backup_rotate/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import saas_server 2 | from . import res_config 3 | -------------------------------------------------------------------------------- /saas_server_backup_rotate/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_server_backup_rotate/static/description/icon.png -------------------------------------------------------------------------------- /saas_server_backup_rotate_s3/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Server Rotate Backup S3 2 | ============================ 3 | 4 | Rotate backups on S3 -------------------------------------------------------------------------------- /saas_server_backup_rotate_s3/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /saas_server_backup_rotate_s3/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Server Rotate Backup S3', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'Salton Masssally, Nicolas JEUDY', 5 | 'license': 'GPL-3', 6 | 'category': 'SaaS', 7 | "support": "apps@it-projects.info", 8 | 'website': 'http://idtlabs.sl', 9 | 'depends': ['saas_server', 'saas_server_backup_s3', 'saas_server_backup_rotate'], 10 | "external_dependencies": {"python": ['boto', 'rotate_backups_s3'], "bin": []}, 11 | 'data': [ 12 | ], 13 | 'installable': True, 14 | } 15 | -------------------------------------------------------------------------------- /saas_server_backup_rotate_s3/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_server_backup_rotate_s3/doc/index.rst: -------------------------------------------------------------------------------- 1 | ============================ 2 | saas_server_backup_rotate_s3 3 | ============================ 4 | 5 | Installation 6 | ============ 7 | 8 | * `Install `__ this module in a usual way 9 | 10 | Configuration 11 | ============= 12 | 13 | {Instruction how to configure the module before start to use it} 14 | 15 | TODO 16 | 17 | Usage 18 | ===== 19 | 20 | {Instruction for daily usage. It should describe how to check that module works. What shall user do and what would user get.} 21 | 22 | TODO 23 | 24 | Uninstallation 25 | ============== 26 | 27 | {Optional section for uninstallation notes. Delete it if you don't have notes for uninstallation.} 28 | -------------------------------------------------------------------------------- /saas_server_backup_rotate_s3/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import saas_server 2 | -------------------------------------------------------------------------------- /saas_server_backup_rotate_s3/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_server_backup_rotate_s3/static/description/icon.png -------------------------------------------------------------------------------- /saas_server_backup_s3/README.rst: -------------------------------------------------------------------------------- 1 | SaaS Server Backup S3 2 | ============================= 3 | 4 | Installed on server and sends backup data to S3. 5 | 6 | To Use: 7 | ------- 8 | * Install boto (pip install boto) 9 | * Optionally install FileChunkIO as it provides huge performance boost (pip install filechunkio) 10 | * Enter your AWS ID & KEY 11 | * Enter your AWS bucket in which you want data stored 12 | * Ensure that the bucket exists 13 | 14 | 15 | TODO 16 | ---- 17 | use FileChunkIO and boto parrallel processing to handle large files 18 | -------------------------------------------------------------------------------- /saas_server_backup_s3/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /saas_server_backup_s3/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS Server Backup S3', 3 | 'version': '11.0.1.0.0', 4 | 'author': 'Salton Massally, Nicolas JEUDY', 5 | 'license': 'LGPL-3', 6 | 'category': 'SaaS', 7 | "support": "apps@it-projects.info", 8 | 'website': 'http://idtlabs.sl', 9 | 'external_dependencies': { 10 | 'python': [ 11 | 'boto', 12 | ], 13 | }, 14 | 'depends': ['saas_server'], 15 | 'data': [ 16 | 'views/res_config.xml', 17 | ], 18 | 'installable': True, 19 | } 20 | -------------------------------------------------------------------------------- /saas_server_backup_s3/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_server_backup_s3/doc/index.rst: -------------------------------------------------------------------------------- 1 | ===================== 2 | saas_server_backup_s3 3 | ===================== 4 | 5 | Installation 6 | ============ 7 | 8 | * `Install `__ this module in a usual way 9 | 10 | Configuration 11 | ============= 12 | 13 | {Instruction how to configure the module before start to use it} 14 | 15 | TODO 16 | 17 | Usage 18 | ===== 19 | 20 | {Instruction for daily usage. It should describe how to check that module works. What shall user do and what would user get.} 21 | 22 | TODO 23 | 24 | Uninstallation 25 | ============== 26 | 27 | {Optional section for uninstallation notes. Delete it if you don't have notes for uninstallation.} 28 | -------------------------------------------------------------------------------- /saas_server_backup_s3/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_config 2 | from . import saas_client 3 | -------------------------------------------------------------------------------- /saas_server_backup_s3/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_server_backup_s3/static/description/icon.png -------------------------------------------------------------------------------- /saas_server_backup_s3/views/saas_portal_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | saas_portal.server.form 7 | saas_portal.server 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /saas_server_demo/README.rst: -------------------------------------------------------------------------------- 1 | ================== 2 | Saas Server Demo 3 | ================== 4 | 5 | This module introduces additional parameters for __manifest__.py 6 | so that modules with these parameters 7 | can be demonstrated in automatically generated databases. 8 | It also makes possible to update the modules' Git repositories and restart the Server through commands from SaaS Portal 9 | so new demo databases could be created with latest updates in the demonstrated modules. 10 | 11 | Contributors 12 | ------------ 13 | * Ildar Nasyrov 14 | 15 | Sponsors 16 | -------- 17 | * `IT-Projects LLC `_ 18 | 19 | Further information 20 | =================== 21 | 22 | Demo: http://runbot.it-projects.info/demo/odoo-saas-tools/10.0 23 | 24 | Usage instructions: ``_ 25 | 26 | Changelog: ``_ 27 | 28 | Tested on Odoo 10.0 00e169c05a270a0943a74fbeb0a884009946c7cd 29 | 30 | -------------------------------------------------------------------------------- /saas_server_demo/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /saas_server_demo/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | "name": """Saas Server Demo""", 3 | "summary": """new parameters in __openerp__.py for demonstrative modules, control repositories for demonstration""", 4 | "category": "SaaS", 5 | "images": [], 6 | "version": "11.0.1.0.0", 7 | 8 | "author": "IT-Projects LLC, Ildar Nasyrov, Nicolas JEUDY", 9 | "website": "https://it-projects.info", 10 | "license": "GPL-3", 11 | # "price": 9.00, 12 | # "currency": "EUR", 13 | 14 | "depends": [ 15 | "saas_server", 16 | ], 17 | "external_dependencies": {"python": ['simplejson'], "bin": ['git']}, 18 | "data": [ 19 | "views/saas_server_demo.xml", 20 | ], 21 | "qweb": [ 22 | ], 23 | "demo": [ 24 | ], 25 | 26 | "post_load": None, 27 | "pre_init_hook": None, 28 | "post_init_hook": None, 29 | "installable": True, 30 | "auto_install": False, 31 | } 32 | -------------------------------------------------------------------------------- /saas_server_demo/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_server_demo/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import saas_server_demo 2 | from . import module 3 | -------------------------------------------------------------------------------- /saas_server_demo/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_server_demo/static/description/icon.png -------------------------------------------------------------------------------- /saas_sysadmin/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from . import models 3 | -------------------------------------------------------------------------------- /saas_sysadmin/__manifest__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | { 3 | 'name': 'SaaS System Administration', 4 | 'summary': "System Administration Framework for SAAS Tools", 5 | 'version': '11.0.1.0.0', 6 | 'author': 'Salton Massally (iDT Labs), Nicolas JEUDY', 7 | 'license': 'LGPL-3', 8 | 'category': 'SaaS', 9 | 'website': 'idtlabs.sl', 10 | 'depends': ['saas_portal'], 11 | 'data': [ 12 | 'views/saas_portal_views.xml', 13 | ], 14 | 'installable': True, 15 | } 16 | -------------------------------------------------------------------------------- /saas_sysadmin/models/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from . import saas_portal 3 | -------------------------------------------------------------------------------- /saas_sysadmin/models/saas_portal.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from odoo import fields 3 | from odoo import models 4 | 5 | 6 | class SaasPortalServer(models.Model): 7 | _inherit = 'saas_portal.server' 8 | 9 | ip_address = fields.Char('Server IP Address') 10 | -------------------------------------------------------------------------------- /saas_sysadmin/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_sysadmin/static/description/icon.png -------------------------------------------------------------------------------- /saas_sysadmin/views/saas_portal_views.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | saas_portal.server.form 7 | saas_portal.server 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /saas_sysadmin_aws/README.rst: -------------------------------------------------------------------------------- 1 | =================== 2 | SaaS Sysadmin AWS 3 | =================== 4 | 5 | This is base module for all modules that use Amazon AWS. 6 | With it you set your credentials (Access Key ID and Secret Access Key) 7 | so that other modules could take them and use with AWS SDK that is boto python library 8 | to control services such as Route53 or EC2 for example. 9 | 10 | Contributors 11 | ============ 12 | * Ildar Nasyrov 13 | * Salton Massally (iDT Labs) 14 | * Nicolas JEUDY 15 | 16 | Sponsors 17 | ======== 18 | * `IT-Projects LLC `__ 19 | 20 | Further information 21 | =================== 22 | 23 | Usage instructions: ``__ 24 | 25 | Changelog: ``__ 26 | 27 | Tested on Odoo 9.0 aa759451cf28b68dbdb1e9638dc68d09c82a3e5b 28 | -------------------------------------------------------------------------------- /saas_sysadmin_aws/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /saas_sysadmin_aws/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': "Saas Sysadmin AWS", 3 | 'author': "IT-Projects LLC, Ildar Nasyrov, Nicolas JEUDY", 4 | 'license': 'LGPL-3', 5 | "support": "apps@it-projects.info", 6 | 'website': "https://twitter.com/nasyrov_ildar", 7 | 'category': 'SaaS', 8 | 'version': '11.0.1.0.0', 9 | 'depends': ['saas_portal'], 10 | 'data': [ 11 | 'views/res_config.xml', 12 | ], 13 | } 14 | -------------------------------------------------------------------------------- /saas_sysadmin_aws/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | 2 | Changelog 3 | ========= 4 | 5 | `1.0.0` 6 | ------- 7 | 8 | - Init version 9 | -------------------------------------------------------------------------------- /saas_sysadmin_aws/doc/index.rst: -------------------------------------------------------------------------------- 1 | =================== 2 | SaaS Sysadmin AWS 3 | =================== 4 | 5 | Usage 6 | ===== 7 | 8 | * Get your Access Key ID and Secret Access Key http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSGettingStartedGuide/AWSCredentials.html 9 | * Open menu ``Settings / SaaS Portal Settings``, put your credendials in ``AWS access`` section and click ``[apply]`` 10 | -------------------------------------------------------------------------------- /saas_sysadmin_aws/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_config 2 | -------------------------------------------------------------------------------- /saas_sysadmin_aws/models/res_config.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields, api 2 | 3 | 4 | class SaasPortalConfigWizard(models.TransientModel): 5 | _inherit = 'res.config.settings' 6 | 7 | saas_route53_aws_accessid = fields.Char('AWS Access ID') 8 | saas_route53_aws_accesskey = fields.Char('AWS Secret Key') 9 | 10 | @api.multi 11 | def set_values(self): 12 | super(SaasPortalConfigWizard, self).set_values() 13 | ICPSudo = self.env['ir.config_parameter'].sudo() 14 | ICPSudo.set_param("saas_route53.saas_route53_aws_accessid", self.saas_route53_aws_accessid) 15 | ICPSudo.set_param("saas_route53.saas_route53_aws_accesskey", self.saas_route53_aws_accesskey) 16 | 17 | @api.model 18 | def get_values(self): 19 | res = super(SaasPortalConfigWizard, self).get_values() 20 | ICPSudo = self.env['ir.config_parameter'].sudo() 21 | res.update( 22 | saas_route53_aws_accessid=ICPSudo.get_param('saas_route53.saas_route53_aws_accessid'), 23 | saas_route53_aws_accesskey=ICPSudo.get_param('saas_route53.saas_route53_aws_accesskey'), 24 | ) 25 | return res 26 | -------------------------------------------------------------------------------- /saas_sysadmin_aws/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_sysadmin_aws/static/description/icon.png -------------------------------------------------------------------------------- /saas_sysadmin_aws_route53/README.rst: -------------------------------------------------------------------------------- 1 | =========================== 2 | SaaS Sysadmin AWS Route53 3 | =========================== 4 | 5 | This module is designed for use by another modules 6 | such as saas_sysadmin_mailgun that is dependent 7 | on AWS DNS servers fascility. 8 | 9 | Credits 10 | ======= 11 | 12 | Contributors 13 | ------------ 14 | * Ildar Nasyrov 15 | * Salton Massally (iDT Labs) 16 | 17 | Sponsors 18 | -------- 19 | * `IT-Projects LLC `__ 20 | 21 | Further information 22 | =================== 23 | 24 | Usage instructions: ``__ 25 | 26 | Changelog: ``__ 27 | 28 | Tested on Odoo 9.0 4dafa2fcdf9131e38485b6816f8e425c7914db80 29 | -------------------------------------------------------------------------------- /saas_sysadmin_aws_route53/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /saas_sysadmin_aws_route53/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | "name": """Saas Sysadmin AWS Route53""", 3 | "summary": """This module can be used by other SaaS modules when DNS needed""", 4 | "category": "SaaS", 5 | "images": [], 6 | "version": "11.0.1.0.0", 7 | 8 | "author": "IT-Projects LLC, Ildar Nasyrov, Nicolas JEUDY", 9 | "support": "apps@it-projects.info", 10 | "website": "https://it-projects.info", 11 | "license": "LGPL-3", 12 | # "price": 9.00, 13 | # "currency": "EUR", 14 | 15 | "depends": [ 16 | "saas_sysadmin", 17 | "saas_sysadmin_aws", 18 | ], 19 | "external_dependencies": {"python": ['boto'], "bin": []}, 20 | "data": [ 21 | "views/saas_sysadmin_aws_route53.xml", 22 | ], 23 | "demo": [ 24 | ], 25 | "installable": True, 26 | "auto_install": False, 27 | } 28 | -------------------------------------------------------------------------------- /saas_sysadmin_aws_route53/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | Changelog 2 | ========= 3 | 4 | `1.0.0` 5 | ------- 6 | 7 | - Init version 8 | -------------------------------------------------------------------------------- /saas_sysadmin_aws_route53/doc/index.rst: -------------------------------------------------------------------------------- 1 | 2 | =========================== 3 | SaaS Sysadmin AWS Route53 4 | =========================== 5 | 6 | Usage 7 | ===== 8 | 9 | * Open menu ``SaaS / SaaS / Servers``, open your server's form 10 | * Click ``[edit]`` and define Server IP Address then click ``[save]`` 11 | * Now as Server IP Address field is defined you may edit AWS Hosted Zone field 12 | * Click ``[edit]`` and start typing in AWS Hosted Zone field 13 | * From AWS Hosted Zone field's drop-down menu choose ``[Create and Edit...]`` 14 | * Check ``Create Zone`` flag if you want to create zone. Leave it unchecked if you already have the zone. 15 | * Click ``[save]`` on AWS Hosted Zone form and ``[save]`` on server's form 16 | -------------------------------------------------------------------------------- /saas_sysadmin_aws_route53/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import saas_sysadmin_aws_route53 2 | -------------------------------------------------------------------------------- /saas_sysadmin_aws_route53/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_sysadmin_aws_route53/static/description/icon.png -------------------------------------------------------------------------------- /saas_sysadmin_aws_route53/views/saas_sysadmin_aws_route53.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | saas_portal.server.form 6 | saas_portal.server 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /saas_sysadmin_mailgun/README.rst: -------------------------------------------------------------------------------- 1 | ========================== 2 | Mailgun for saas clients 3 | ========================== 4 | 5 | This module automatically creates mail domain on your account 6 | of http://www.mailgun.com/ service for client's databases on selected plan. 7 | Every domain on mailgun.com should be validated before use. 8 | Mailgun.com require special DNS records on your DNS server for validation and mail routing. 9 | The records also created automatically by the module. 10 | Amazon Web Services Route 53 account are required for this purpose. 11 | 12 | 13 | Contributors 14 | ============ 15 | * Ildar Nasyrov 16 | * Nicolas JEUDY 17 | 18 | Sponsors 19 | ======== 20 | * `IT-Projects LLC `__ 21 | 22 | Further information 23 | =================== 24 | 25 | Usage instructions: ``__ 26 | 27 | Changelog: ``__ 28 | 29 | Tested on Odoo 9.0 1b5c2ced45b508a6e86681cad47efe12c486362b 30 | -------------------------------------------------------------------------------- /saas_sysadmin_mailgun/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /saas_sysadmin_mailgun/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | "name": """Saas Sysadmin Mailgun""", 3 | "summary": """This module configurates new databases for clients such as their users can send and receive mails""", 4 | "category": "SaaS", 5 | "images": [], 6 | "version": "11.0.1.0.0", 7 | 8 | "author": "IT-Projects LLC, Ildar Nasyrov, Nicolas JEUDY", 9 | "support": "apps@it-projects.info", 10 | "website": "https://it-projects.info", 11 | "license": "LGPL-3", 12 | # "price": 9.00, 13 | # "currency": "EUR", 14 | 15 | "depends": [ 16 | "saas_sysadmin_aws_route53", 17 | ], 18 | "external_dependencies": {"python": ['boto'], "bin": []}, 19 | "data": [ 20 | "views/res_config.xml", 21 | ], 22 | "demo": [ 23 | ], 24 | "installable": True, 25 | "auto_install": False, 26 | } 27 | -------------------------------------------------------------------------------- /saas_sysadmin_mailgun/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_sysadmin_mailgun/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import res_config 2 | from . import saas_sysadmin_mailgun 3 | -------------------------------------------------------------------------------- /saas_sysadmin_mailgun/models/res_config.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields, api 2 | 3 | 4 | class SaasPortalConfigWizard(models.TransientModel): 5 | _inherit = 'res.config.settings' 6 | 7 | saas_mailgun_api_key = fields.Char('Mailgun API Key') 8 | 9 | @api.multi 10 | def set_values(self): 11 | super(SaasPortalConfigWizard, self).set_values() 12 | ICPSudo = self.env['ir.config_parameter'].sudo() 13 | ICPSudo.set_param("saas_mailgun.saas_mailgun_api_key", self.saas_mailgun_api_key) 14 | 15 | @api.model 16 | def get_values(self): 17 | res = super(SaasPortalConfigWizard, self).get_values() 18 | ICPSudo = self.env['ir.config_parameter'].sudo() 19 | res.update( 20 | saas_mailgun_api_key=ICPSudo.get_param('saas_mailgun.saas_mailgun_api_key'), 21 | ) 22 | return res 23 | -------------------------------------------------------------------------------- /saas_sysadmin_mailgun/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_sysadmin_mailgun/static/description/icon.png -------------------------------------------------------------------------------- /saas_sysadmin_mailgun/views/res_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | res.config.settings.view.form.inherit.sys_maigun 5 | res.config.settings 6 | 7 | 8 | 9 | 10 |

    Sysadmin Mailgun Settings

    11 |
    12 |
    13 |
    19 |
    20 |
    21 |
    22 |
    23 |
    24 | -------------------------------------------------------------------------------- /saas_sysadmin_route53/README.md: -------------------------------------------------------------------------------- 1 | 2 | saas_sysadmin_route53 3 | ===================== 4 | Integrates AWS Route53 with SAAS Portal so that domain records 5 | are managed when servers and clients are added or deleted from 6 | saas portal 7 | 8 | 9 | Usage 10 | ===== 11 | 12 | 1. Configure your AWS Credentials from Settings > Saas Portal Settings 13 | -------------------------------------------------------------------------------- /saas_sysadmin_route53/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /saas_sysadmin_route53/__manifest__.py: -------------------------------------------------------------------------------- 1 | { 2 | 'name': 'SaaS System Administration Route 53', 3 | 'summary': "Aws Route 53 integration for SAAS Tools", 4 | 'version': '11.0.1.0.0', 5 | 'author': 'Salton Massally (iDT Labs), Nicolas JEUDY', 6 | 'license': 'LGPL-3', 7 | 'category': 'SaaS', 8 | 'website': 'idtlabs.sl', 9 | 'external_dependencies': { 10 | 'python': [ 11 | 'boto', 12 | ], 13 | }, 14 | 'depends': [ 15 | 'saas_sysadmin', 16 | 'saas_sysadmin_aws', 17 | 'saas_sysadmin_aws_route53', 18 | ], 19 | 'data': [ 20 | ], 21 | 'installable': True, 22 | } 23 | -------------------------------------------------------------------------------- /saas_sysadmin_route53/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_sysadmin_route53/doc/index.rst: -------------------------------------------------------------------------------- 1 | ===================== 2 | saas_sysadmin_route53 3 | ===================== 4 | 5 | Installation 6 | ============ 7 | 8 | * `Install `__ this module in a usual way 9 | 10 | Configuration 11 | ============= 12 | 13 | {Instruction how to configure the module before start to use it} 14 | 15 | TODO 16 | 17 | Usage 18 | ===== 19 | 20 | {Instruction for daily usage. It should describe how to check that module works. What shall user do and what would user get.} 21 | 22 | TODO 23 | 24 | Uninstallation 25 | ============== 26 | 27 | {Optional section for uninstallation notes. Delete it if you don't have notes for uninstallation.} 28 | -------------------------------------------------------------------------------- /saas_sysadmin_route53/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import saas_sysdamin_route53 2 | -------------------------------------------------------------------------------- /saas_sysadmin_route53/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_sysadmin_route53/static/description/icon.png -------------------------------------------------------------------------------- /saas_utils/README.rst: -------------------------------------------------------------------------------- 1 | ========== 2 | saas_utils 3 | ========== 4 | 5 | Installation 6 | ============ 7 | 8 | * `Install `__ this module in a usual way 9 | 10 | This module add some utils to development team 11 | -------------------------------------------------------------------------------- /saas_utils/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # OpenERP, Open Source Management Solution 4 | # Copyright (C) 2004-2010, 2014 Tiny SPRL (). 5 | # 6 | # This program is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU Affero General Public License as 8 | # published by the Free Software Foundation, either version 3 of the 9 | # License, or (at your option) any later version. 10 | # 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU Affero General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU Affero General Public License 17 | # along with this program. If not, see . 18 | # 19 | ############################################################################## 20 | 21 | from . import connector 22 | from . import database 23 | -------------------------------------------------------------------------------- /saas_utils/doc/changelog.rst: -------------------------------------------------------------------------------- 1 | `1.0.0` 2 | ------------ 3 | 4 | - Init version 5 | - Clean all code for V11 6 | -------------------------------------------------------------------------------- /saas_utils/doc/index.rst: -------------------------------------------------------------------------------- 1 | ========== 2 | saas_utils 3 | ========== 4 | 5 | Installation 6 | ============ 7 | 8 | * `Install `__ this module in a usual way 9 | 10 | This module add some utils to development team 11 | -------------------------------------------------------------------------------- /saas_utils/static/description/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-projects-llc/odoo-saas-tools/8e9ad4d06853b668a42a3e8177c8246fd946f0e9/saas_utils/static/description/icon.png --------------------------------------------------------------------------------