diff --git a/documents_quality/README.rst b/documents_quality/README.rst new file mode 100644 index 000000000..e6a921eb9 --- /dev/null +++ b/documents_quality/README.rst @@ -0,0 +1,98 @@ +===================== +Documents for Quality +===================== + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fosi--addons-lightgray.png?logo=github + :target: https://github.com/OCA/osi-addons/tree/14.0/osi_custom_profit_loss + :alt: OCA/osi-addons + +|badge1| |badge2| |badge3| + +This module provides 3 documents folders where all the files attached to: + +* quality control points +* quality checks +* quality alerts + +will be available. + +**Table of contents** + +.. contents:: + :local: + +Configure +========= + +* Go to Documents > Settings +* Activate the settings +* Change the folder +* Set the tags + +Usage +===== + +* Go to Quality > Quality Control > Control Points (or Quality Checks or Quality Alerts) +* Create or open a record +* Upload a file as an attachment +* Go to Documents +* Select the Quality Control Points (or Quality Checks or Quality Alerts) folder +* Select the file uploaded previously. It is linked to the quality control point + (or quality check or quality alert). + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Open Source Integrators + +Contributors +~~~~~~~~~~~~ + +* `Open Source Integrators `__: + + * Antonio Yamuta + * Maxime Chambreuil + * Melody Fetterly + +Maintainers +~~~~~~~~~~~ + +This module is maintained by Open Source Integrators. + +.. image:: https://github.com/ursais.png + :alt: Open Source Integrators + :target: https://www.opensourceintegrators.com + +Open Source Integrators™ (OSI) provides customers a unique combination of +open source business process consulting and implementations. + +.. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px + :target: https://github.com/max3903 + :alt: max3903 + +Current `maintainer `__: + +|maintainer-max3903| + +This module is part of the `OSI Addons `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/documents_quality/__init__.py b/documents_quality/__init__.py new file mode 100644 index 000000000..708e164fd --- /dev/null +++ b/documents_quality/__init__.py @@ -0,0 +1,3 @@ +# Copyright (C) 2021 Open Source Integrators +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +from . import models diff --git a/documents_quality/__manifest__.py b/documents_quality/__manifest__.py new file mode 100644 index 000000000..a5e2abfcc --- /dev/null +++ b/documents_quality/__manifest__.py @@ -0,0 +1,22 @@ +# Copyright (C) 2021 Open Source Integrators +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +{ + "name": "Documents - Quality", + "summary": "Documents for Quality Control Points, Checks and Alerts", + "category": "Productivity/Documents", + "website": "https://github.com/ursais/osi-addons", + "author": "Open Source Integrators", + "maintainer": "Open Source Integrators", + "version": "17.0.1.0.0", + "license": "LGPL-3", + "depends": ["documents", "quality"], + "data": [ + "data/documents_folder.xml", + "data/res_company.xml", + "data/documents_facet.xml", + "data/documents_tag.xml", + "views/res_config_settings.xml", + ], + "development_status": "Beta", + "maintainers": ["max3903"], +} diff --git a/documents_quality/data/documents_facet.xml b/documents_quality/data/documents_facet.xml new file mode 100644 index 000000000..742f243ce --- /dev/null +++ b/documents_quality/data/documents_facet.xml @@ -0,0 +1,21 @@ + + + + Documents + 5 + + + + + Documents + 5 + + + + + Documents + 5 + + + + diff --git a/documents_quality/data/documents_folder.xml b/documents_quality/data/documents_folder.xml new file mode 100644 index 000000000..e3df145ae --- /dev/null +++ b/documents_quality/data/documents_folder.xml @@ -0,0 +1,26 @@ + + + + Quality + 20 + + + + Control Points + 20 + + + + + Checks + 25 + + + + + Alerts + 30 + + + + diff --git a/documents_quality/data/documents_tag.xml b/documents_quality/data/documents_tag.xml new file mode 100644 index 000000000..9e94a3e2d --- /dev/null +++ b/documents_quality/data/documents_tag.xml @@ -0,0 +1,21 @@ + + + + New + + 10 + + + + New + + 10 + + + + New + + 10 + + + diff --git a/documents_quality/data/res_company.xml b/documents_quality/data/res_company.xml new file mode 100644 index 000000000..769deda5a --- /dev/null +++ b/documents_quality/data/res_company.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/documents_quality/models/__init__.py b/documents_quality/models/__init__.py new file mode 100644 index 000000000..69dc3b727 --- /dev/null +++ b/documents_quality/models/__init__.py @@ -0,0 +1,9 @@ +# Copyright (C) 2021 Open Source Integrators +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +from . import ( + quality_point, + quality_check, + quality_alert, + res_config_settings, + res_company, +) diff --git a/documents_quality/models/quality_alert.py b/documents_quality/models/quality_alert.py new file mode 100644 index 000000000..e3e2e2724 --- /dev/null +++ b/documents_quality/models/quality_alert.py @@ -0,0 +1,23 @@ +# Copyright (C) 2021 Open Source Integrators +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +from odoo import models + + +class QualityAlert(models.Model): + _name = "quality.alert" + _inherit = ["quality.alert", "documents.mixin"] + + def _get_document_tags(self): + company = self.company_id or self.env.company + return company.quality_alert_tags + + def _get_document_folder(self): + company = self.company_id or self.env.company + return company.quality_alert_folder + + def _check_create_documents(self): + company = self.company_id or self.env.company + return ( + company.documents_quality_alert_settings + and super()._check_create_documents() + ) diff --git a/documents_quality/models/quality_check.py b/documents_quality/models/quality_check.py new file mode 100644 index 000000000..c053a61c4 --- /dev/null +++ b/documents_quality/models/quality_check.py @@ -0,0 +1,23 @@ +# Copyright (C) 2021 Open Source Integrators +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +from odoo import models + + +class QualityCheck(models.Model): + _name = "quality.check" + _inherit = ["quality.check", "documents.mixin"] + + def _get_document_tags(self): + company = self.company_id or self.env.company + return company.quality_check_tags + + def _get_document_folder(self): + company = self.company_id or self.env.company + return company.quality_check_folder + + def _check_create_documents(self): + company = self.company_id or self.env.company + return ( + company.documents_quality_check_settings + and super()._check_create_documents() + ) diff --git a/documents_quality/models/quality_point.py b/documents_quality/models/quality_point.py new file mode 100644 index 000000000..69248225c --- /dev/null +++ b/documents_quality/models/quality_point.py @@ -0,0 +1,23 @@ +# Copyright (C) 2021 Open Source Integrators +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +from odoo import models + + +class QualityPoint(models.Model): + _name = "quality.point" + _inherit = ["quality.point", "documents.mixin"] + + def _get_document_tags(self): + company = self.company_id or self.env.company + return company.quality_point_tags + + def _get_document_folder(self): + company = self.company_id or self.env.company + return company.quality_point_folder + + def _check_create_documents(self): + company = self.company_id or self.env.company + return ( + company.documents_quality_point_settings + and super()._check_create_documents() + ) diff --git a/documents_quality/models/res_company.py b/documents_quality/models/res_company.py new file mode 100644 index 000000000..4296d3a64 --- /dev/null +++ b/documents_quality/models/res_company.py @@ -0,0 +1,47 @@ +# Copyright (C) 2021 Open Source Integrators +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + def _domain_company(self): + company = self.env.company or self.env.user.company_id.id + return ["|", ("company_id", "=", False), ("company_id", "=", company)] + + # Quality Control Points + documents_quality_point_settings = fields.Boolean() + quality_point_folder = fields.Many2one( + "documents.folder", + string="Quality Control Points Workspace", + domain=_domain_company, + default=lambda self: self.env.ref( + "documents_quality_point_folder", raise_if_not_found=False + ), + ) + quality_point_tags = fields.Many2many("documents.tag", "quality_point_tags_table") + + # Quality Checks + documents_quality_check_settings = fields.Boolean() + quality_check_folder = fields.Many2one( + "documents.folder", + string="Quality Checks Workspace", + domain=_domain_company, + default=lambda self: self.env.ref( + "documents_quality_check_folder", raise_if_not_found=False + ), + ) + quality_check_tags = fields.Many2many("documents.tag", "quality_check_tags_table") + + # Quality Alerts + documents_quality_alert_settings = fields.Boolean() + quality_alert_folder = fields.Many2one( + "documents.folder", + string="Quality Alerts Workspace", + domain=_domain_company, + default=lambda self: self.env.ref( + "documents_quality_alert_folder", raise_if_not_found=False + ), + ) + quality_alert_tags = fields.Many2many("documents.tag", "quality_alert_tags_table") diff --git a/documents_quality/models/res_config_settings.py b/documents_quality/models/res_config_settings.py new file mode 100644 index 000000000..acfb4d49e --- /dev/null +++ b/documents_quality/models/res_config_settings.py @@ -0,0 +1,82 @@ +# Copyright (C) 2021 Open Source Integrators +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +from odoo import api, fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + # Quality Control Points + documents_quality_point_settings = fields.Boolean( + related="company_id.documents_quality_point_settings", + readonly=False, + string="Quality Control Points", + ) + quality_point_folder = fields.Many2one( + "documents.folder", + related="company_id.quality_point_folder", + readonly=False, + string="Quality Control Points Default Workspace", + ) + quality_point_tags = fields.Many2many( + "documents.tag", + "quality_point_tags_table", + related="company_id.quality_point_tags", + readonly=False, + string="Quality Control Points Tags", + ) + + @api.onchange("quality_point_folder") + def on_quality_point_folder_change(self): + if self.quality_point_folder != self.quality_point_tags.mapped("folder_id"): + self.quality_point_tags = False + + # Quality Checks + documents_quality_check_settings = fields.Boolean( + related="company_id.documents_quality_check_settings", + readonly=False, + string="Quality Checks", + ) + quality_check_folder = fields.Many2one( + "documents.folder", + related="company_id.quality_check_folder", + readonly=False, + string="Quality Checks Default Workspace", + ) + quality_check_tags = fields.Many2many( + "documents.tag", + "quality_check_tags_table", + related="company_id.quality_check_tags", + readonly=False, + string="Quality Checks Tags", + ) + + @api.onchange("quality_check_folder") + def on_quality_check_folder_change(self): + if self.quality_check_folder != self.quality_check_tags.mapped("folder_id"): + self.quality_check_tags = False + + # Quality Alerts + documents_quality_alert_settings = fields.Boolean( + related="company_id.documents_quality_alert_settings", + readonly=False, + string="Quality Alerts", + ) + quality_alert_folder = fields.Many2one( + "documents.folder", + related="company_id.quality_alert_folder", + readonly=False, + string="Quality Alerts Default Workspace", + ) + quality_alert_tags = fields.Many2many( + "documents.tag", + "quality_alert_tags_table", + related="company_id.quality_alert_tags", + readonly=False, + string="Quality Alerts Tags", + ) + + @api.onchange("quality_alert_folder") + def on_quality_alert_folder_change(self): + if self.quality_alert_folder != self.quality_alert_tags.mapped("folder_id"): + self.quality_alert_tags = False diff --git a/documents_quality/static/description/icon.png b/documents_quality/static/description/icon.png new file mode 100644 index 000000000..ff28f5b3a Binary files /dev/null and b/documents_quality/static/description/icon.png differ diff --git a/documents_quality/views/res_config_settings.xml b/documents_quality/views/res_config_settings.xml new file mode 100644 index 000000000..65b814580 --- /dev/null +++ b/documents_quality/views/res_config_settings.xml @@ -0,0 +1,128 @@ + + + + res.config.settings.documents.purchase + res.config.settings + + + + + 0 + + + + + + +
+
+
+
+
+
+
+
+ + + + +
+
+
+
+
+
+
+
+ + + + +
+
+
+
+
+
+
+
+
+
+
+ +