diff --git a/website_oca_integrator/README.rst b/website_oca_integrator/README.rst
index 2c0b6c81..dec0ac2c 100644
--- a/website_oca_integrator/README.rst
+++ b/website_oca_integrator/README.rst
@@ -1,7 +1,3 @@
-.. image:: https://odoo-community.org/readme-banner-image
- :target: https://odoo-community.org/get-involved?utm_source=readme
- :alt: Odoo Community Association
-
======================
Website OCA Integrator
======================
@@ -17,7 +13,7 @@ Website OCA Integrator
.. |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/license-AGPL--3-blue.png
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Foca--custom-lightgray.png?logo=github
diff --git a/website_oca_integrator/__manifest__.py b/website_oca_integrator/__manifest__.py
index 55a9e968..e5b2daf3 100644
--- a/website_oca_integrator/__manifest__.py
+++ b/website_oca_integrator/__manifest__.py
@@ -17,9 +17,6 @@
"membership",
"website_membership",
"website_customer",
- "github_connector",
- "github_connector_odoo",
- "apps_product_creator",
],
"data": [
"security/ir.model.access.csv",
@@ -28,8 +25,6 @@
"views/view_portal_templates.xml",
"views/website_oca_integrator_data.xml",
"views/view_res_partner.xml",
- "views/view_odoo_author.xml",
- "data/ir_cron.xml",
],
"external_dependencies": {"python": ["responses"]},
"assets": {
@@ -37,9 +32,6 @@
"website_oca_integrator/static/src/js/integrator_portal.js",
"website_oca_integrator/static/src/scss/website_oca_integrator.scss",
],
- "web.assets_tests": [
- "website_oca_integrator/static/src/js/integrator_portal_tour.js",
- ],
},
"installable": True,
}
diff --git a/website_oca_integrator/controllers/main.py b/website_oca_integrator/controllers/main.py
index 34a21e02..fc999dc0 100644
--- a/website_oca_integrator/controllers/main.py
+++ b/website_oca_integrator/controllers/main.py
@@ -96,9 +96,7 @@ def integrators(self, country=None, page=0, **post):
# search integrators matching current search parameters
integrator_ids = partner_obj.sudo().search(
base_integrator_domain,
- order="grade_id ASC, implemented_partner_count DESC,"
- "contributor_count DESC, member_count DESC,"
- "name ASC",
+ order="grade_id ASC, member_count DESC, name ASC",
offset=pager["offset"],
limit=self._references_per_page,
)
@@ -126,42 +124,6 @@ def integrators(self, country=None, page=0, **post):
status=integrators and 200 or 404,
)
- def get_integrator_modules_list(self, integrator):
- """
- Returns 5 favourite modules selected by integrator. If integrator has
- not selected 5 modules, then returns latest 5 developed modules.
- """
- module_display_count = 5
- favourite_modules = integrator.favourite_module_ids.filtered("is_published")
- developed_modules = integrator.developed_module_ids.filtered("is_published")
- favourite_module_count = len(favourite_modules)
- developed_module_count = len(developed_modules)
-
- remaining_modules = module_display_count - favourite_module_count
-
- # if integrator has developed less than 5 modules then
- # remaining modules are just other than favourite modules.
- if developed_module_count < module_display_count:
- remaining_modules = developed_module_count - favourite_module_count
-
- if remaining_modules:
- remaining_product_tmpl_ids = list(
- set(developed_modules.ids) - set(favourite_modules.ids)
- )
- # search latest product variant of module.
- sorted_modules = request.env["product.product"].search(
- [("product_tmpl_id", "in", remaining_product_tmpl_ids)],
- order="create_date desc",
- )
-
- sorted_modules = sorted_modules.mapped("product_tmpl_id")[
- :remaining_modules
- ]
-
- favourite_modules += sorted_modules
-
- return favourite_modules, developed_module_count
-
def get_integrator_references(self, integrator):
# sort integrator references by implemented date.
references = integrator.implemented_partner_ids.sorted(
@@ -197,26 +159,18 @@ def integrators_detail(self, integrator_id, **post):
if integrator.sudo().exists() and (
integrator.website_published or is_website_publisher
):
- modules_list, developed_module_count = self.get_integrator_modules_list(
- integrator
- )
-
references = self.get_integrator_references(integrator)
sponsorship_lines = integrator.sponsorship_line_ids.sorted(
key=lambda r: r.date_end, reverse=True
)[:5]
- display_all_modules = True if developed_module_count > 5 else False
-
values = {
"main_object": integrator,
"integrator": integrator,
"current_country": current_country,
"references": references,
- "modules_list": modules_list,
"sponsorship_lines": sponsorship_lines,
- "display_all_modules": display_all_modules,
}
return request.render("website_oca_integrator.integrators", values)
return self.integrators(**post)
@@ -259,7 +213,6 @@ def integrator_contributors(
country_domain = [
"|",
("membership_state", "=", "paid"),
- ("github_name", "!=", False),
("website_published", "=", True),
("parent_id", "=", integrator_id),
]
diff --git a/website_oca_integrator/controllers/portal.py b/website_oca_integrator/controllers/portal.py
index d448766d..bf0b1167 100644
--- a/website_oca_integrator/controllers/portal.py
+++ b/website_oca_integrator/controllers/portal.py
@@ -1,61 +1,11 @@
# Copyright 2018 Surekha Technologies (https://www.surekhatech.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-from odoo import http
-from odoo.http import request, route
from odoo.addons.portal.controllers.portal import CustomerPortal
class IntegratorPortal(CustomerPortal):
- @route()
- def account(self, redirect=None, **post):
- if post:
- modules = request.httprequest.form.getlist("favourite_module_ids")
- if not modules:
- modules = post.get("favourite_module_ids")
- if modules:
- modules = modules.split(",")
- if modules:
- post["favourite_module_ids"] = [int(id) for id in modules]
- else:
- post["favourite_module_ids"] = False
- return super().account(redirect=redirect, **post)
-
- @http.route(
- "/my/account/get_developed_modules",
- type="http",
- auth="user",
- methods=["GET"],
- website=True,
- sitemap=False,
- )
- def integrator_developed_module_read(self, query="", limit=25, **post):
- integrator = request.env.user.partner_id
- modules_data = request.env["product.template"].search_read(
- [
- ("id", "in", integrator.developed_module_ids.ids),
- ("name", "=ilike", "%" + (query or "") + "%"),
- ],
- fields=["id", "name"],
- limit=int(limit),
- )
- return request.make_json_response(modules_data)
-
- @http.route(
- "/my/account/get_favourite_modules",
- type="http",
- auth="user",
- methods=["GET"],
- website=True,
- sitemap=False,
- )
- def integrator_favourite_module_read(self):
- integrator = request.env.user.partner_id
- modules = integrator.favourite_module_ids
- modules_data = [{"id": m.id, "name": m.name} for m in modules]
- return request.make_json_response(modules_data)
-
def details_form_validate(self, data):
# after adding HTML editor in portal page, if we click on
# 'Confirm' button then, 'files' key is passed in post data.
diff --git a/website_oca_integrator/data/ir_cron.xml b/website_oca_integrator/data/ir_cron.xml
deleted file mode 100644
index 2bd4cc32..00000000
--- a/website_oca_integrator/data/ir_cron.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
- Synchronize Contributor Modules
- 1
-
-
- days
- code
-
- model.cron_create_github_user_module()
-
-
diff --git a/website_oca_integrator/i18n/website_oca_integrator.pot b/website_oca_integrator/i18n/website_oca_integrator.pot
index efc9faea..c1d4b68b 100644
--- a/website_oca_integrator/i18n/website_oca_integrator.pot
+++ b/website_oca_integrator/i18n/website_oca_integrator.pot
@@ -398,4 +398,4 @@ msgstr ""
#. module: website_oca_integrator
#: model_terms:ir.ui.view,arch_db:website_oca_integrator.integrators
msgid "to view Contributors/Members"
-msgstr ""
+msgstr ""
\ No newline at end of file
diff --git a/website_oca_integrator/models/__init__.py b/website_oca_integrator/models/__init__.py
index 48879143..fa307030 100644
--- a/website_oca_integrator/models/__init__.py
+++ b/website_oca_integrator/models/__init__.py
@@ -1,4 +1,2 @@
-from . import contributor_module_line
-from . import odoo_author
from . import res_partner
from . import sponsorship
diff --git a/website_oca_integrator/models/contributor_module_line.py b/website_oca_integrator/models/contributor_module_line.py
deleted file mode 100644
index 1beec541..00000000
--- a/website_oca_integrator/models/contributor_module_line.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 2018 Surekha Technologies (https://www.surekhatech.com)
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-from odoo import fields, models
-
-
-class ContributorModuleLine(models.Model):
- _name = "contributor.module.line"
- _description = "Contributor Line"
-
- product_template_id = fields.Many2one(
- string="Odoo Module", comodel_name="product.template", required=True
- )
-
- partner_id = fields.Many2one(
- comodel_name="res.partner", string="Partner", required=True
- )
-
- date_pr_merged = fields.Datetime(string="Merged date of PR", required=True)
diff --git a/website_oca_integrator/models/odoo_author.py b/website_oca_integrator/models/odoo_author.py
deleted file mode 100644
index 4af48427..00000000
--- a/website_oca_integrator/models/odoo_author.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2018 Surekha Technologies (https://www.surekhatech.com)
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-from odoo import fields, models
-
-
-class OdooAuthor(models.Model):
- _inherit = "odoo.author"
-
- partner_id = fields.Many2one(
- comodel_name="res.partner",
- string="Company",
- domain="[('is_company','=', True),('website_published', '=', True)]",
- help="Select company which is linked to this author.",
- )
diff --git a/website_oca_integrator/models/res_partner.py b/website_oca_integrator/models/res_partner.py
index f5bc797f..679be76d 100644
--- a/website_oca_integrator/models/res_partner.py
+++ b/website_oca_integrator/models/res_partner.py
@@ -11,118 +11,40 @@
class ResPartner(models.Model):
_inherit = "res.partner"
- github_organization = fields.Char()
-
- github_organization_url = fields.Char(
- string="Github Organization URL",
- compute="_compute_github_organization_url",
- store=True,
- )
-
is_integrator = fields.Boolean(
string="Integrator",
compute="_compute_integrator",
store=True,
)
- contributor_count = fields.Integer(
- string="Number of contributors",
- compute="_compute_contributor_count",
- store=True,
- )
-
member_count = fields.Integer(
string="Number of members",
compute="_compute_member_count",
store=True,
)
- module_count = fields.Integer(
- string="Number of modules",
- compute="_compute_module_count",
- store=True,
- )
-
implemented_date = fields.Date()
- author_ids = fields.One2many(
- comodel_name="odoo.author",
- string="Authors",
- inverse_name="partner_id",
- readonly=True,
- )
-
- developed_module_ids = fields.Many2many(
- string="Developed Modules",
- comodel_name="product.template",
- relation="product_module_res_partner_rel",
- column1="partner_id",
- column2="product_template_id",
- compute="_compute_developed_modules",
- store=True,
- )
-
- favourite_module_ids = fields.Many2many(
- string="Favourite Modules",
- comodel_name="product.template",
- relation="favourite_product_module_res_partner_rel",
- column1="partner_id",
- column2="product_template_id",
- readonly=True,
- )
-
sponsorship_line_ids = fields.One2many(
string="Sponsorship Activities",
comodel_name="sponsorship.line",
inverse_name="partner_id",
)
- contributor_module_line_ids = fields.One2many(
- string="Contributed Modules",
- comodel_name="contributor.module.line",
- inverse_name="partner_id",
- readonly=True,
- )
-
- @api.depends("github_organization")
- def _compute_github_organization_url(self):
- github_url = "https://github.com/"
- for record in self:
- if record.is_company and record.github_organization:
- record.github_organization_url = github_url + record.github_organization
- else:
- record.github_organization_url = False
-
@api.depends(
"child_ids",
- "child_ids.github_name",
"child_ids.membership_state",
"child_ids.parent_id",
)
def _compute_integrator(self):
"""
- Integrators are partners who have any contact with a commit to OCA repositories
- or a current OCA membership.
+ Integrators are partners who have any contact a current OCA membership.
"""
for partner in self:
partner.is_integrator = any(
- (child.github_name or child.membership_state == "paid")
- for child in partner.child_ids
+ child.membership_state == "paid" for child in partner.child_ids
)
- @api.depends("child_ids.github_name", "child_ids.parent_id")
- def _compute_contributor_count(self):
- contributor_data = self.read_group(
- domain=[("parent_id", "in", self.ids), ("github_name", "!=", False)],
- fields=["parent_id"],
- groupby=["parent_id"],
- )
- contributor_mapped_data = {
- item["parent_id"][0]: item["parent_id_count"] for item in contributor_data
- }
- for partner in self:
- partner.contributor_count = contributor_mapped_data.get(partner.id, 0)
-
@api.depends("child_ids.membership_state", "child_ids.parent_id")
def _compute_member_count(self):
member_data = self.read_group(
@@ -135,187 +57,3 @@ def _compute_member_count(self):
}
for partner in self:
partner.member_count = member_mapped_data.get(partner.id, 0)
-
- @api.depends("author_ids", "author_ids.partner_id", "author_ids.module_qty")
- def _compute_module_count(self):
- for partner in self:
- partner.module_count = sum(
- author.module_qty for author in partner.author_ids
- )
-
- @api.depends(
- "is_integrator",
- "author_ids",
- "author_ids.module_ids",
- "author_ids.module_ids.technical_name",
- )
- def _compute_developed_modules(self):
- OdooModule = self.env["odoo.module"]
- ProductTemplate = self.env["product.template"]
-
- for partner in self:
- if not partner.is_integrator or not partner.author_ids:
- partner.developed_module_ids = [(5, 0, 0)]
- continue
-
- module_list = OdooModule.search(
- [("author_ids", "in", partner.author_ids.ids)]
- )
- products = ProductTemplate.search(
- [("odoo_module_id", "in", module_list.ids)]
- )
- partner.developed_module_ids = [(6, 0, products.ids)]
-
- def write(self, vals):
- # clear github organization data if partner is not company
- if not vals.get("is_company", True):
- vals["github_organization"] = False
- return super().write(vals)
-
- def update_contributor_modules(self, contributor, modules):
- """
- Update contributor with fetched modules from Github.
-
- `modules` is a dict: {technical_name: merged_datetime}
- """
- OdooModule = self.env["odoo.module"]
- ProductTemplate = self.env["product.template"]
-
- if not modules:
- return
-
- module_rs = OdooModule.search([("technical_name", "in", list(modules.keys()))])
-
- github_templates = ProductTemplate.search(
- [("odoo_module_id", "in", module_rs.ids)]
- )
-
- contributor_module_lines = contributor.contributor_module_line_ids
- product_mapped_data = {
- line.product_template_id.id: line.id for line in contributor_module_lines
- }
-
- current_templates = contributor_module_lines.mapped("product_template_id")
- total_templates = github_templates | current_templates
- common_templates = github_templates & current_templates
- new_templates = github_templates - current_templates
-
- update_records = [
- (
- 1,
- product_mapped_data[product.id],
- {"date_pr_merged": modules[product.odoo_module_id.technical_name]},
- )
- for product in common_templates
- ]
-
- new_records = [
- (
- 0,
- 0,
- {
- "product_template_id": product.id,
- "date_pr_merged": modules[product.odoo_module_id.technical_name],
- },
- )
- for product in new_templates
- ]
-
- delete_records = []
- if len(total_templates) > 5:
- remove_products_count = len(total_templates) - 5
- delete_records = [
- (2, line.id, False)
- for line in contributor_module_lines.sorted(key="date_pr_merged")[
- :remove_products_count
- ]
- ]
-
- contributor.write(
- {
- "contributor_module_line_ids": update_records
- + new_records
- + delete_records
- }
- )
-
- def get_github_user_modules(self, gh_events, github_orgs):
- """
- Find latest 5 technical name of the modules based on the PR which are opened
- for OCA organization by github user.
- """
- current_page_modules = {} # holds module name and merged date of PR.
-
- for gh_event in gh_events:
- org = gh_event.org and gh_event.org.login
- if not (
- gh_event.type == "PullRequestEvent"
- and org in github_orgs
- and gh_event.payload["action"] == "opened"
- ):
- continue
-
- pr_number = gh_event.payload["pull_request"]["number"]
- try:
- gh_pull_request = gh_event.repo.get_pull(pr_number)
- except Exception:
- _logger.warning(
- "Error while fetching pull request #'%s' of repository '%s'/'%s'.",
- pr_number,
- org,
- gh_event.repo,
- )
- continue
-
- if not gh_pull_request.merged:
- continue
-
- commit_sha = gh_pull_request.head.sha
- gh_commit = gh_event.repo.get_commit(commit_sha)
-
- for commit_file in gh_commit.files:
- file_name = commit_file.filename.split("/")[0].split(".")
-
- if len(file_name) != 1:
- continue
-
- technical_name = file_name[0]
- if technical_name in current_page_modules:
- continue
-
- odoo_module = self.env["odoo.module"].search(
- [("technical_name", "=", technical_name)], limit=1
- )
- if odoo_module:
- current_page_modules[technical_name] = gh_pull_request.merged_at
- if len(current_page_modules) == 5:
- return current_page_modules
-
- return current_page_modules
-
- def get_github_organization(self):
- return self.env["github.organization"].search([]).mapped("github_name")
-
- def get_contributors(self):
- return self.env["res.partner"].search(
- [("github_name", "!=", False), ("website_published", "=", True)]
- )
-
- def contributors_fetch_modules(self):
- gh_api = self.get_github_connector()
- contributors = self.get_contributors()
- github_orgs = self.get_github_organization()
-
- for contributor in contributors:
- try:
- gh_user = gh_api.get_user(contributor.github_name)
- except Exception:
- _logger.warning("Error while fetching user '%s'.", contributor.name)
- continue
-
- gh_events = gh_user.get_events()
- modules = self.get_github_user_modules(gh_events, github_orgs)
- self.update_contributor_modules(contributor, modules)
-
- def cron_create_github_user_module(self):
- self.contributors_fetch_modules()
diff --git a/website_oca_integrator/security/ir.model.access.csv b/website_oca_integrator/security/ir.model.access.csv
index 2bb8f28e..de1e7169 100644
--- a/website_oca_integrator/security/ir.model.access.csv
+++ b/website_oca_integrator/security/ir.model.access.csv
@@ -2,5 +2,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_sponsorship_line_partner_manager,sponsorship_line partner_manager,model_sponsorship_line,base.group_partner_manager,1,1,1,1
access_sponsorship_line_portal,sponsorship_line portal,model_sponsorship_line,base.group_portal,1,0,0,0
access_sponsorship_line_user,sponsorship_line user,model_sponsorship_line,base.group_user,1,0,0,0
-access_contributor_module_reader_portal,contributor_module reader portal,model_contributor_module_line,base.group_portal,1,0,0,0
-access_contributor_module_reader_user,contributor_module reader user,model_contributor_module_line,base.group_user,1,0,0,0
diff --git a/website_oca_integrator/static/description/index.html b/website_oca_integrator/static/description/index.html
index 44feb71f..f4d07db6 100644
--- a/website_oca_integrator/static/description/index.html
+++ b/website_oca_integrator/static/description/index.html
@@ -3,7 +3,7 @@
-README.rst
+Website OCA Integrator
-
+
+
Website OCA Integrator
-
-
-
-
-
-
Website OCA Integrator
-

+

This module adds menu “Integrators” in website, which displays
integrators, contributors, members and modules related information.
Table of contents
@@ -390,7 +385,7 @@
Website OCA Integrator
-
+
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 to smash it by providing a detailed and welcomed
@@ -398,15 +393,15 @@
Do not contact contributors directly about support or help with technical issues.
-