Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
c6a0b79
Update translations
jeremi Apr 23, 2025
d4bbc1d
[UPD] Update spp_area.pot
Apr 23, 2025
1c4195f
[UPD] Update spp_audit_log.pot
Apr 23, 2025
9fc6ec3
[UPD] Update spp_base_gis.pot
Apr 23, 2025
2a620bc
[UPD] Update spp_change_request.pot
Apr 23, 2025
7af6cb9
[UPD] Update spp_event_data.pot
Apr 23, 2025
11911d3
[UPD] Update spp_idpass.pot
Apr 23, 2025
5eacd4c
[UPD] Update spp_scan_id_document.pot
Apr 23, 2025
6e08cb3
[UPD] Update spp_service_points.pot
Apr 23, 2025
e46b29e
[FIX] spp_openid_vci: Fix issue card server action not showing
reichie020212 Apr 25, 2025
31c8395
Update Lao Translations
jeremi Apr 28, 2025
bd375f5
[FIX] Removing demo data URL for the CRVS import module
kneckinator Apr 18, 2025
d4daaa2
[FIX] Fixing test
kneckinator Apr 18, 2025
0870634
[UPD] Update spp_area.pot
Apr 28, 2025
0afdfa8
[UPD] Update spp_audit_log.pot
Apr 28, 2025
66193e1
[UPD] Update spp_base_gis.pot
Apr 28, 2025
afb6f95
[UPD] Update spp_event_data.pot
Apr 28, 2025
5d13a96
[chore] Update action to use CodeQLAction v3
kneckinator May 6, 2025
c7e42e6
[chore] Making sure action is running when target is 17.0
kneckinator May 6, 2025
dce2935
[chore] Improve code-analysis execution
kneckinator May 6, 2025
d97a647
[chore] Refining code-analysis
kneckinator May 6, 2025
c6410f2
[chore] Improve TruffleHog run
kneckinator May 6, 2025
132c267
[chore] refactored duplicated literal
kneckinator May 12, 2025
3d70268
[chore] refactored duplicated literals
kneckinator May 12, 2025
7c8cb19
[chore] refactored duplicated literals
kneckinator May 12, 2025
350e8f0
[chore] removed commented out code
kneckinator May 12, 2025
9b518f9
[chore] cleaned up expression that will always be true
kneckinator May 12, 2025
7233c81
[chore] adjust variable names to match field name
kneckinator May 12, 2025
e1ec705
[chore] remove commented out code
kneckinator May 12, 2025
a897882
[chore] adding tests for the spp_api controller
kneckinator May 13, 2025
d649f90
[chore] Enabling and fixing tests in spp_starter that were marked as …
kneckinator May 13, 2025
1f757bd
[chore] refactor function for clarity
kneckinator May 12, 2025
f683f2a
[chore] refactor function for clarity - adding tests
kneckinator May 12, 2025
7a9cfd4
[chore] aligning development status
kneckinator May 13, 2025
4a73c5b
[chore] Align libraries with Odoo 17
kneckinator May 27, 2025
516800b
[FIX] Hide unneccessary options in actions
emjay0921 May 30, 2025
62802a5
Add Claude to the build
jeremi Jun 14, 2025
12c7b70
Initial commit
gonzalesedwin1123 Apr 15, 2025
3814711
[FIX] problems when installing spp_change_request alongside spp_chang…
emjay0921 Jul 2, 2025
2d4a8c3
[FIX] cr types on dms views
emjay0921 Jul 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions .github/workflows/claude.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Claude PR Assistant

on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]

jobs:
claude-code-action:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Run Claude PR Action
uses: jeremi/claude-code-action@main
with:
use_oauth: true
claude_access_token: ${{ secrets.CLAUDE_ACCESS_TOKEN }}
claude_refresh_token: ${{ secrets.CLAUDE_REFRESH_TOKEN }}
claude_expires_at: ${{ secrets.CLAUDE_EXPIRES_AT }}

timeout_minutes: "60"
# Optional: add custom trigger phrase (default: @claude)
# trigger_phrase: "/claude"
# Optional: add assignee trigger for issues
# assignee_trigger: "claude"
# Optional: add custom environment variables (YAML format)
# claude_env: |
# NODE_ENV: test
# DEBUG: true
# API_URL: https://api.example.com
# Optional: limit the number of conversation turns
# max_turns: "5"
38 changes: 27 additions & 11 deletions .github/workflows/code-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ name: "Code Scanning - Action"
on:
push:
branches:
- "{{ odoo_version }}"
- "17.0"
pull_request:
branches:
- "{{ odoo_version }}"
- "17.0"
schedule:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
Expand Down Expand Up @@ -38,11 +38,11 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# Override language selection by uncommenting this and choosing your languages
Expand All @@ -52,7 +52,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
# If this step fails, then you should remove it and run the build manually (see below).
- name: Autobuild
uses: github/codeql-action/autobuild@v2
uses: github/codeql-action/autobuild@v3

# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
Expand All @@ -66,13 +66,29 @@ jobs:
# make release

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2

- name: TruffleHog OSS
if: env.BRANCH_NAME != github.event.repository.default_branch
uses: github/codeql-action/analyze@v3

Trufflehog-Scan:
runs-on: ubuntu-latest
needs: CodeQL-Build
steps:
- name: Checkout repository (for Trufflehog - full history)
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: TruffleHog OSS (on pull_request)
if: github.event_name == 'pull_request'
uses: trufflesecurity/trufflehog@main
with:
path: ./
base: ${{ github.event.repository.default_branch }}
head: HEAD
base: ${{ github.event.pull_request.base.sha }}
head: ${{ github.event.pull_request.head.sha }}
extra_args: --debug --only-verified

- name: TruffleHog OSS (on push to 17.0)
if: github.event_name == 'push' && github.ref == 'refs/heads/17.0'
uses: trufflesecurity/trufflehog@main
with:
path: ./
extra_args: --debug --only-verified # Scanning the entire repo
9 changes: 0 additions & 9 deletions g2p_connect_demo/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,33 +16,24 @@
"g2p_registry_group",
"g2p_registry_membership",
"g2p_programs",
# "g2p_bank",
"spp_custom_field",
# "spp_custom_fields_ui",
"spp_entitlement_cash",
# "spp_dashboard",
"spp_idpass",
"spp_idqueue",
"spp_area",
# "spp_change_request",
"spp_event_data",
"spp_service_points",
"theme_openspp_muk",
# "spp_pos",
# "spp_sms",
"queue_job",
# "spp_change_request_add_children_demo",
"spp_custom_filter",
"product",
"stock",
],
"external_dependencies": {"python": ["faker"]},
"data": [
"security/ir.model.access.csv",
# "data/users_data.xml",
"data/sample_data.xml",
"views/generate_data_view.xml",
# "views/generate_change_request_data_view.xml",
"views/groups_view.xml",
"views/individuals_view.xml",
],
Expand Down
1 change: 0 additions & 1 deletion g2p_connect_demo/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,5 @@
from . import registrant
from . import generate_group

# from . import generate_change_request
from . import individual
from . import group
7 changes: 4 additions & 3 deletions g2p_connect_demo/models/generate_change_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ def _generate_sample_data(self, **kwargs):
res_id = kwargs.get("res_id")
res = self.browse(res_id)

res_partner_model_obj = self.env["res.partner"]

registrants = kwargs.get("registrant_ids")
membership_kinds = kwargs.get("membership_kinds")
num_crs = min(res.num_crs, 1000)
Expand All @@ -83,7 +85,7 @@ def _generate_sample_data(self, **kwargs):
registrant_id = random.choice(registrants)

# Get applicants based on registrant_id
registrant = self.env["res.partner"].search([("id", "=", registrant_id)])[0]
registrant = res_partner_model_obj.search([("id", "=", registrant_id)])[0]
if registrant.lang:
lang = registrant.lang
else:
Expand All @@ -95,7 +97,7 @@ def _generate_sample_data(self, **kwargs):
applicant_id = random.choice(applicant_ids)

# TODO: Fix error in phone number format
applicant = self.env["res.partner"].search([("id", "=", applicant_id)])
applicant = res_partner_model_obj.search([("id", "=", applicant_id)])
if applicant.phone:
applicant_phone = applicant.phone
else:
Expand Down Expand Up @@ -126,7 +128,6 @@ def _generate_sample_data(self, **kwargs):
date_start = datetime.datetime.now() - relativedelta(years=100)
date_end = datetime.datetime.now()
birthdate = fake.date_between_dates(date_start=date_start, date_end=date_end).isoformat()
# phone = fake.phone_number()
uid_number = str(random.randint(100000000000, 999999999999))
kind = random.choice(membership_kinds)
applicant_relation = random.choice(["father", "mother", "grandfather"] * 50)
Expand Down
45 changes: 23 additions & 22 deletions g2p_connect_demo/models/generate_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,16 @@ def _generate_sample_data(self, **kwargs):
res = self.browse(res_id)
fake = create_faker(res.locale)

# sex_choice_range = ["Female", "Male"] * 50 + ["Other"]
sex_choices = self.env["gender.type"].search([]).mapped("value")
sex_choice_range = sex_choices * 50
res_partner_model_obj = self.env["res.partner"]
g2p_group_membership_model_obj = self.env["g2p.group.membership"]

gender_choices = self.env["gender.type"].search([]).mapped("value")
gender_choice_range = gender_choices * 50
age_group_range = ["A", "C", "N"] * 2 + ["E"]
group_size_range = list(range(1, 2)) * 2 + list(range(3, 5)) * 4 + list(range(6, 8))

group_membership_kind_head_id = self.env.ref("g2p_registry_membership.group_membership_kind_head").id
group_kind_household_id = self.env.ref("g2p_registry_group.group_kind_household").id
# group_kind_family_id = self.env.ref("g2p_registry_group.group_kind_family").id

num_groups = min(res.num_groups, 1000)

Expand Down Expand Up @@ -98,7 +99,7 @@ def _generate_sample_data(self, **kwargs):
head = res._generate_individual_data(
fake,
last_name,
sex_choice_range,
gender_choice_range,
["A", "E"],
registration_date,
bank_id,
Expand Down Expand Up @@ -138,7 +139,7 @@ def _generate_sample_data(self, **kwargs):
"bank_ids": bank_ids,
}

create_group_id = self.env["res.partner"].create(group)
create_group_id = res_partner_model_obj.create(group)

head["id"] = f"{group_id}-0"
members = [head]
Expand All @@ -147,7 +148,7 @@ def _generate_sample_data(self, **kwargs):
data = res._generate_individual_data(
fake,
last_name,
sex_choice_range,
gender_choice_range,
age_group_range,
registration_date,
bank_id,
Expand All @@ -169,8 +170,8 @@ def _generate_sample_data(self, **kwargs):
if is_head:
member.pop("is_head", None)
member.pop("is_principal_recipient", None)
create_member_id = self.env["res.partner"].create(member)
self.env["g2p.group.membership"].create(
create_member_id = res_partner_model_obj.create(member)
g2p_group_membership_model_obj.create(
{
"group": create_group_id.id,
"individual": create_member_id.id,
Expand All @@ -186,8 +187,8 @@ def _generate_sample_data(self, **kwargs):
elif is_principal_recipient:
member.pop("is_head", None)
member.pop("is_principal_recipient", None)
create_member_id = self.env["res.partner"].create(member)
self.env["g2p.group.membership"].create(
create_member_id = res_partner_model_obj.create(member)
g2p_group_membership_model_obj.create(
{
"group": create_group_id.id,
"individual": create_member_id.id,
Expand All @@ -196,8 +197,8 @@ def _generate_sample_data(self, **kwargs):
)

else:
create_member_id = self.env["res.partner"].create(member)
self.env["g2p.group.membership"].create(
create_member_id = res_partner_model_obj.create(member)
g2p_group_membership_model_obj.create(
{
"group": create_group_id.id,
"individual": create_member_id.id,
Expand All @@ -210,8 +211,6 @@ def _generate_sample_data(self, **kwargs):
)
_logger.info(msg)
return {"result": msg, "res_model": self._name, "res_ids": [res_id]}
# _logger.info("-" * 80)
# _logger.info(json.dumps({"group": group, "members": members}, indent=4))

def mark_as_done(self):
self.update({"state": "generate"})
Expand All @@ -220,14 +219,14 @@ def _generate_individual_data(
self,
fake,
last_name,
sex_choice_range,
gender_choice_range,
age_group_range,
registration_date,
bank_id,
):
sex = random.choice(sex_choice_range)
gender = random.choice(gender_choice_range)
age_group = random.choice(age_group_range)
first_name = fake.first_name_male() if sex == "Male" else fake.first_name_female()
first_name = fake.first_name_male() if gender == "Male" else fake.first_name_female()
different_last_name = random.randint(0, 100) < 10
if age_group == "N":
date_start = datetime.datetime.now() - relativedelta(years=1)
Expand Down Expand Up @@ -269,22 +268,24 @@ def _generate_individual_data(
registration_date = fake.date_between_dates(date_start=dob, date_end=datetime.datetime.now()).isoformat()
dob = dob.isoformat()

fullname = f"{first_name} {last_name}"
full_name = f"{first_name} {last_name}"
bank_ids = []
phone = ""
# Do not give bank account to kids

# Do not assign bank accounts to children
if age_group != "C":
val = {
"bank_id": bank_id.id,
"acc_number": str(random.randint(1, 999999999)),
}
bank_ids.append([0, 0, val])
phone = fake.phone_number()

data = {
"name": fullname,
"name": full_name,
"given_name": first_name,
"family_name": last_name,
"gender": sex,
"gender": gender,
"birthdate": dob,
"is_registrant": True,
"is_group": False,
Expand Down
2 changes: 1 addition & 1 deletion openspp-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ odoo-addon-spp-service-points==17.0.1.0.0.11
odoo-addon-spp-starter==17.0.1.0.0.11
odoo-addon-spp-user-roles==17.0.1.0.0.9
# generated from manifests external_dependencies
Pillow>=9.3.0
Pillow>=9.0.1
PyLD
bravado_core
faker
Expand Down
6 changes: 3 additions & 3 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# generated from manifests external_dependencies
Pillow>=10.3.0
Pillow>=9.0.1
PyLD
bravado_core
extendable_pydantic==1.3.0
Expand All @@ -14,10 +14,10 @@ pyproj
python-magic
pytz
qrcode
requests>=2.32.3
requests>=2.25.1
shapely
simplejson
swagger_spec_validator
urllib3>=2.4.0
urllib3>=1.26.5
xlrd
zipp>=3.19.1
18 changes: 0 additions & 18 deletions spp_api/controllers/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@ class OAS(http.Controller):
)
def index(self, **params):
primary_name = params.get("urls.primaryName")
# swagger_settings = {
# "urls": self._get_api_urls(),
# "urls.primaryName": primary_name,
# }

values = {
"urls": json.dumps(self._get_api_urls()),
Expand All @@ -56,20 +52,6 @@ def _get_api_urls(self):
}
)

# services_registry = _rest_services_databases.get(request.env.cr.dbname, {})
# api_urls = []
# for rest_root_path, spec in list(services_registry.items()):
# collection_path = rest_root_path[1:-1] # remove '/'
# collection_name = spec["collection_name"]
# for service in self._get_service_in_collection(collection_name):
# api_urls.append(
# {
# "name": "{}: {}".format(collection_path, service._usage),
# "url": "/api-docs/%s/%s.json"
# % (collection_path, service._usage),
# }
# )
# api_urls = sorted(api_urls, key=lambda k: k["name"])
return api_urls

@http.route(
Expand Down
Loading