Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
9516807
Merge pull request #297 from mkumar-02/17.0-develop
shibu-narayanan Mar 3, 2025
c484f00
[UPD] Update g2p_programs.pot
openg2pbot Mar 3, 2025
729a8a7
add g2p connect to add sponsor bank to g2p brige
amen50 Apr 3, 2025
e9e096e
fix pre commit issue
amen50 Apr 3, 2025
3a27b58
Bank name
amen50 Apr 4, 2025
a29cc76
update changes
amen50 Apr 10, 2025
eb69f1c
update the readablity the function
amen50 Apr 14, 2025
6deb559
update class name G2PProgram
amen50 Apr 16, 2025
c5af4e7
add external_dependencies
amen50 Apr 17, 2025
bff550e
add external_dependencies
amen50 Apr 17, 2025
6ec4607
Bridge Configuration Module updated
lalithkota Apr 18, 2025
2450c23
restructer the module
amen50 Apr 21, 2025
f7e9cac
make validation from xml
amen50 Apr 21, 2025
13ddb24
Bridge Config: updated program validation
lalithkota Apr 21, 2025
47dd13b
Github Workflow: Update actions/cache to v4
mkumar-02 Apr 22, 2025
a4c5180
Merge pull request #304 from mkumar-02/17.0-develop
shibu-narayanan Apr 22, 2025
89c809a
Merge branch 'OpenG2P:17.0-develop' into 17.0-develop
amen50 Apr 22, 2025
ee6f800
update pre commit
amen50 Apr 22, 2025
78d43a8
Merge pull request #305 from amen50/17.0-develop
shibu-narayanan Apr 23, 2025
fcd7681
[UPD] Update g2p_payment_g2p_connect.pot
openg2pbot Apr 23, 2025
305f3ff
[UPD] Update g2p_bridge_configuration.pot
openg2pbot Apr 23, 2025
0b0dc88
Added help desk
May 5, 2025
86c796b
module name changed
May 7, 2025
676f4bd
Merge remote-tracking branch 'shibu/17.0-develop' into 17.0-1.3
lalithkota May 12, 2025
b1f7e8d
G2P Support Desk fixed
lalithkota May 12, 2025
bbc1637
G2P Support Desk added manifest icon
lalithkota May 12, 2025
18bc546
Merge branch '17.0-1.3' of https://github.com/OpenG2P/openg2p-program…
lalithkota Jul 22, 2025
869d0aa
G2P Connect Payment: Fixed json serialization
lalithkota Jul 22, 2025
3f97115
Fixed minor errors shown by Odoo-LS
lalithkota Jul 24, 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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ coverage.xml
# Visual Studio cache/options directory
.vs/
.vscode
**/odools.toml

# OSX Files
.DS_Store
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ addon | version | maintainers | summary
[g2p_proxy_means_test](g2p_proxy_means_test/) | 17.0.1.3.0 | | G2P: Proxy Means Test
[g2p_reimbursement_portal](g2p_reimbursement_portal/) | 17.0.1.3.0 | | G2P Reimbursement Portal
[g2p_social_registry_importer](g2p_social_registry_importer/) | 17.0.1.3.0 | | Import records from Social Registry
[g2p_support_desk](g2p_support_desk/) | 17.0.1.3.0 | | OpenG2P Support Desk Management System
[g2p_theme](g2p_theme/) | 17.0.1.3.0 | | OpenG2P Theme


Expand Down
4 changes: 3 additions & 1 deletion g2p_bridge_configuration/models/payment_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@ def publish_bridge_benefit_program(self):
},
}

token = self.create_jwt_token(json.dumps(data, separators=(",", ":")))
token = self.create_jwt_token(
json.dumps(data, indent=None, separators=(",", ":"), sort_keys=True)
)
headers = {
"Accept": "application/json",
"Content-Type": "application/json",
Expand Down
4 changes: 3 additions & 1 deletion g2p_payment_g2p_connect/models/cycle.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ def generate_summary(self):
"message": self.disbursement_envelope_id,
}

token = payment_manager.create_jwt_token(json.dumps(data, separators=(",", ":")))
token = payment_manager.create_jwt_token(
json.dumps(data, indent=None, separators=(",", ":"), sort_keys=True)
)
headers = {
"Accept": "application/json",
"Content-Type": "application/json",
Expand Down
12 changes: 9 additions & 3 deletions g2p_payment_g2p_connect/models/payment_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,9 @@ def _send_payments(self, batches):
)
try:
_logger.info("G2P Bridge Disbursement Batch Data: %s", batch_data)
token = self.create_jwt_token(json.dumps(batch_data, separators=(",", ":")))
token = self.create_jwt_token(
json.dumps(batch_data, indent=None, separators=(",", ":"), sort_keys=True)
)
headers = {
"Accept": "application/json",
"Content-Type": "application/json",
Expand Down Expand Up @@ -268,7 +270,9 @@ def payments_status_check(self, id_):
}
try:
_logger.info("G2P Connect Disbursement Status Data: %s", status_data)
token = payment_manager.create_jwt_token(json.dumps(status_data, separators=(",", ":")))
token = payment_manager.create_jwt_token(
json.dumps(status_data, indent=None, separators=(",", ":"), sort_keys=True)
)
headers = {
"Accept": "application/json",
"Content-Type": "application/json",
Expand Down Expand Up @@ -388,7 +392,9 @@ def _create_envelope_g2p_bridge(self, cycle):
},
}
try:
token = self.create_jwt_token(json.dumps(envelope_request_data, separators=(",", ":")))
token = self.create_jwt_token(
json.dumps(envelope_request_data, indent=None, separators=(",", ":"), sort_keys=True)
)
headers = {
"Accept": "application/json",
"Content-Type": "application/json",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ def jsonize_form_data(self, data, program, membership=None):
@api.model
def add_files_to_store(self, files, store, program_membership=None, tags=None):
file_details = []
DOC_TAGS = self.env["g2p.document.tag"]
try:
DOC_TAGS = self.env["g2p.document.tag"]
for file in files:
if file and store:
document_file = self.env["storage.file"].create(
Expand Down
4 changes: 2 additions & 2 deletions g2p_programs/models/managers/payment_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class BasePaymentManager(models.AbstractModel):
name = fields.Char("Manager Name", required=True)
program_id = fields.Many2one("g2p.program", string="Program", required=True)

def prepare_payments(self, entitlements):
def prepare_payments(self, cycle, entitlements):
"""
This method is used to prepare the payment list of the entitlements.
:param entitlements: The entitlements.
Expand Down Expand Up @@ -142,7 +142,7 @@ def constrains_batch_tag_ids(self):
if rec.batch_tag_ids.sorted("order")[-1].domain != "[]":
raise ValidationError(_("Last tag in the Batch Tags list must contain empty domain."))

def prepare_payments(self, cycle, entitlements=None):
def prepare_payments(self, cycle, entitlements):
if not entitlements:
entitlements = cycle.entitlement_ids.filtered(lambda a: a.state == "approved")
else:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ def test_connection(self):
},
}

@api.onchange("registry")
@api.onchange("target_registry")
def onchange_target_registry(self):
for rec in self:
rec.target_program = None
Expand Down
11 changes: 11 additions & 0 deletions g2p_support_desk/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# OpenG2P Support Desk Management System

This module provides a comprehensive support desk management system with:

- Ticket Management
- Team Management
- SLA Tracking
- Knowledge Base
- Beneficiary Portal Access

Refer to https://docs.openg2p.org.
1 change: 1 addition & 0 deletions g2p_support_desk/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
35 changes: 35 additions & 0 deletions g2p_support_desk/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"name": "G2P Support Desk",
"category": "G2P",
"version": "17.0.1.3.0",
"sequence": 1,
"author": "OpenG2P",
"website": "https://openg2p.org",
"license": "LGPL-3",
"summary": "OpenG2P Support Desk Management System",
"depends": [
"base",
"mail",
"portal",
"web",
"g2p_programs",
"g2p_registry_base",
],
"data": [
"security/support_desk_security.xml",
"security/ir.model.access.csv",
"views/support_ticket_views.xml",
"views/support_team_views.xml",
"views/support_category_views.xml",
"views/support_tag_views.xml",
"views/support_stage_views.xml",
"views/menu_views.xml",
"data/support_desk_data.xml",
],
"demo": [
"demo/helpdesk_demo.xml",
],
"installable": True,
"application": True,
"auto_install": False,
}
76 changes: 76 additions & 0 deletions g2p_support_desk/data/support_desk_data.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<!-- Sequences -->
<record id="seq_support_ticket" model="ir.sequence">
<field name="name">Support Ticket</field>
<field name="code">support.ticket</field>
<field name="prefix">TICK</field>
<field name="padding">5</field>
<field name="company_id" eval="False" />
</record>

<!-- Default Stages -->
<record id="stage_new" model="support.stage">
<field name="name">New</field>
<field name="sequence">10</field>
<field name="is_default">True</field>
</record>

<record id="stage_in_progress" model="support.stage">
<field name="name">In Progress</field>
<field name="sequence">20</field>
</record>

<record id="stage_waiting" model="support.stage">
<field name="name">Waiting</field>
<field name="sequence">30</field>
<field name="fold">True</field>
</record>

<record id="stage_done" model="support.stage">
<field name="name">Done</field>
<field name="sequence">40</field>
<field name="fold">True</field>
<field name="done">True</field>
</record>

<record id="stage_cancelled" model="support.stage">
<field name="name">Cancelled</field>
<field name="sequence">50</field>
<field name="fold">True</field>
<field name="done">True</field>
</record>

<!-- Default Categories -->
<record id="category_technical" model="support.category">
<field name="name">Technical</field>
<field name="sequence">10</field>
</record>

<record id="category_functional" model="support.category">
<field name="name">Functional</field>
<field name="sequence">20</field>
</record>

<!-- Default Tags -->
<record id="tag_bug" model="support.tag">
<field name="name">Bug</field>
<field name="color">1</field>
</record>

<record id="tag_enhancement" model="support.tag">
<field name="name">Enhancement</field>
<field name="color">2</field>
</record>

<record id="tag_urgent" model="support.tag">
<field name="name">Urgent</field>
<field name="color">3</field>
</record>

<!-- Default Team -->
<record id="team_support" model="support.team">
<field name="name">Support Team</field>
<field name="leader_id" ref="base.user_admin" />
</record>
</odoo>
58 changes: 58 additions & 0 deletions g2p_support_desk/demo/helpdesk_demo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<!-- Demo Support Team -->
<record id="demo_support_team_1" model="support.team">
<field name="name">Technical Support</field>
<field name="description">Handle technical issues and bug reports</field>
</record>

<record id="demo_support_team_2" model="support.team">
<field name="name">Beneficiary Service</field>
<field name="description">Handle general inquiries and beneficiary support</field>
</record>

<!-- Demo Categories -->
<record id="demo_category_bug" model="support.category">
<field name="name">Bug Report</field>
<field name="description">Software bugs and technical issues</field>
<field name="sequence">1</field>
</record>

<record id="demo_category_feature" model="support.category">
<field name="name">Feature Request</field>
<field name="description">New feature suggestions and improvements</field>
<field name="sequence">2</field>
</record>

<!-- Demo Tags -->
<record id="demo_tag_critical" model="support.tag">
<field name="name">Critical</field>
<field name="color">1</field>
</record>

<record id="demo_tag_improvement" model="support.tag">
<field name="name">Improvement</field>
<field name="color">4</field>
</record>

<!-- Demo Tickets -->
<record id="demo_ticket_1" model="support.ticket">
<field name="name">Login Issue</field>
<field name="description">Unable to login to the system</field>
<field name="stage_id" ref="stage_new" />
<field name="team_id" ref="demo_support_team_1" />
<field name="category_id" ref="demo_category_bug" />
<field name="priority">2</field>
<field name="tag_ids" eval="[(6, 0, [ref('demo_tag_critical')])]" />
</record>

<record id="demo_ticket_2" model="support.ticket">
<field name="name">New Dashboard Feature</field>
<field name="description">Request for customizable dashboard widgets</field>
<field name="stage_id" ref="stage_new" />
<field name="team_id" ref="demo_support_team_2" />
<field name="category_id" ref="demo_category_feature" />
<field name="priority">1</field>
<field name="tag_ids" eval="[(6, 0, [ref('demo_tag_improvement')])]" />
</record>
</odoo>
5 changes: 5 additions & 0 deletions g2p_support_desk/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from . import support_ticket
from . import support_team
from . import support_category
from . import support_tag
from . import support_stage
21 changes: 21 additions & 0 deletions g2p_support_desk/models/support_category.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from odoo import fields, models


class SupportCategory(models.Model):
_name = "support.category"
_description = "Support Ticket Category"
_order = "sequence, name"

name = fields.Char("Category Name", required=True)
sequence = fields.Integer(default=10)
description = fields.Text()
parent_id = fields.Many2one("support.category", string="Parent Category")
child_ids = fields.One2many("support.category", "parent_id", string="Child Categories")
active = fields.Boolean(default=True)

ticket_ids = fields.One2many("support.ticket", "category_id", string="Tickets")
ticket_count = fields.Integer(compute="_compute_ticket_count", string="Tickets Count")

def _compute_ticket_count(self):
for category in self:
category.ticket_count = len(category.ticket_ids)
23 changes: 23 additions & 0 deletions g2p_support_desk/models/support_stage.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from odoo import fields, models


class SupportStage(models.Model):
_name = "support.stage"
_description = "Support Ticket Stage"
_order = "sequence, id"

name = fields.Char(string="Stage Name", required=True, translate=True)
sequence = fields.Integer(default=10)
is_default = fields.Boolean(string="Default Stage")
fold = fields.Boolean(string="Folded in Kanban")
done = fields.Boolean(string="Request Done")

description = fields.Text(translate=True)
team_ids = fields.Many2many("support.team", string="Teams")

template_id = fields.Many2one(
"mail.template",
string="Email Template",
domain=[("model", "=", "support.ticket")],
help="Automatically send an email when the ticket reaches this stage.",
)
10 changes: 10 additions & 0 deletions g2p_support_desk/models/support_tag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from odoo import fields, models


class SupportTag(models.Model):
_name = "support.tag"
_description = "Support Ticket Tag"

name = fields.Char(string="Tag Name", required=True)
color = fields.Integer(string="Color Index")
active = fields.Boolean(default=True)
22 changes: 22 additions & 0 deletions g2p_support_desk/models/support_team.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from odoo import fields, models


class SupportTeam(models.Model):
_name = "support.team"
_description = "Support Team"
_inherit = ["mail.thread"]

name = fields.Char(string="Team Name", required=True)
leader_id = fields.Many2one("res.users", string="Team Leader", tracking=True)
member_ids = fields.Many2many("res.users", string="Team Members")
description = fields.Text()

ticket_ids = fields.One2many("support.ticket", "team_id", string="Tickets")
ticket_count = fields.Integer(compute="_compute_ticket_count", string="Tickets Count")

active = fields.Boolean(default=True)
color = fields.Integer(string="Color Index")

def _compute_ticket_count(self):
for team in self:
team.ticket_count = len(team.ticket_ids)
Loading
Loading