Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ faker
fastapi>=0.110.0
geojson
httpx
jwcrypto
numpy>=1.22.2
openpyxl
parse-accept-language
Expand Down
17 changes: 9 additions & 8 deletions spp_change_request_v2/tests/test_ux_wizards.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,18 @@ def test_wizard_create_draft_success(self):

result = wizard.action_create_draft()

# Should return action to open a form
self.assertEqual(result["type"], "ir.actions.act_window")
self.assertTrue(result["res_id"])
self.assertEqual(result["target"], "current")
# Should return client action that closes modal then opens form
self.assertEqual(result["type"], "ir.actions.client")
self.assertEqual(result["tag"], "open_cr_close_modal")
params = result["params"]
self.assertTrue(params["res_id"])

# If CR type has a detail model, wizard opens detail form directly
# Otherwise, it falls back to CR form
if cr_type.detail_model:
# Opened detail form
self.assertEqual(result["res_model"], cr_type.detail_model)
detail = self.env[cr_type.detail_model].browse(result["res_id"])
self.assertEqual(params["res_model"], cr_type.detail_model)
detail = self.env[cr_type.detail_model].browse(params["res_id"])
self.assertTrue(detail.exists())
# Verify the CR was created and linked
cr = detail.change_request_id
Expand All @@ -108,8 +109,8 @@ def test_wizard_create_draft_success(self):
self.assertEqual(cr.approval_state, "draft")
else:
# Opened CR form (fallback)
self.assertEqual(result["res_model"], "spp.change.request")
cr = self.env["spp.change.request"].browse(result["res_id"])
self.assertEqual(params["res_model"], "spp.change.request")
cr = self.env["spp.change.request"].browse(params["res_id"])
self.assertTrue(cr.exists())
self.assertEqual(cr.request_type_id, cr_type)
self.assertEqual(cr.registrant_id, self.group)
Expand Down
10 changes: 8 additions & 2 deletions spp_change_request_v2/wizards/create_wizard.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,12 @@ def action_create_draft(self):
if target == "group" and not is_group:
raise UserError(_("This request type requires a group registrant, not an individual."))

# Resolve translated strings while the ORM environment is available.
# Calling _() inside a return dict can fail when the cursor context
# is no longer reachable from the call stack.
detail_form_name = _("Change Request Details")
cr_form_name = _("Change Request")

# Create the draft CR (this auto-creates the detail record)
cr = self.env["spp.change.request"].create(
{
Expand All @@ -241,7 +247,7 @@ def action_create_draft(self):
"type": "ir.actions.client",
"tag": "open_cr_close_modal",
"params": {
"name": _("Change Request Details"),
"name": detail_form_name,
"res_model": cr.detail_res_model,
"res_id": detail.id,
"view_id": view_id,
Expand All @@ -258,7 +264,7 @@ def action_create_draft(self):
"type": "ir.actions.client",
"tag": "open_cr_close_modal",
"params": {
"name": _("Change Request"),
"name": cr_form_name,
"res_model": "spp.change.request",
"res_id": cr.id,
"context": {
Expand Down
1 change: 1 addition & 0 deletions spp_claim_169/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"qrcode",
"Pillow",
"claim169",
"jwcrypto",
],
},
"data": [
Expand Down
73 changes: 46 additions & 27 deletions spp_drims_sl_demo/data/demo_gis_reports.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<!--
GIS Report Demo Data for DRIMS Sri Lanka Demo
Expand All @@ -11,20 +11,24 @@
<record id="gis_report_request_distribution" model="spp.gis.report">
<field name="name">Relief Request Distribution</field>
<field name="code">DRIMS_SL_REQUEST_DIST</field>
<field name="description">Geographic distribution of disaster relief requests. Shows which areas have the most pending or active requests to help coordinate response efforts.</field>
<field name="category_id" ref="spp_gis_report.category_disaster_response"/>
<field
name="description"
>Geographic distribution of disaster relief requests. Shows which areas have the most pending or active requests to help coordinate response efforts.</field>
<field name="category_id" ref="spp_gis_report.category_disaster_response" />
<field name="sequence">10</field>
<field name="source_model_id" search="[('model', '=', 'spp.drims.request')]"/>
<field name="source_model_id" search="[('model', '=', 'spp.drims.request')]" />
<field name="area_field_path">destination_area_id</field>
<field name="filter_mode">domain</field>
<field name="filter_domain">[('state', 'not in', ['draft', 'cancelled'])]</field>
<field
name="filter_domain"
>[('state', 'not in', ['draft', 'cancelled'])]</field>
<field name="aggregation_method">count</field>
<field name="base_area_level">1</field>
<field name="normalization_method">raw</field>
<field name="enable_rollup">True</field>
<field name="rollup_method">sum</field>
<field name="rollup_weight_source">count</field>
<field name="color_scheme_id" ref="spp_gis.scheme_viridis"/>
<field name="color_scheme_id" ref="spp_gis.scheme_viridis" />
<field name="threshold_mode">auto_quartile</field>
<field name="bucket_count">5</field>
<field name="refresh_mode">scheduled</field>
Expand All @@ -37,21 +41,25 @@
<record id="gis_report_affected_population" model="spp.gis.report">
<field name="name">Affected Population by Area</field>
<field name="code">DRIMS_SL_AFFECTED_POP</field>
<field name="description">Total affected population as reported in disaster relief requests. Helps prioritize areas with the highest number of people in need of assistance.</field>
<field name="category_id" ref="spp_gis_report.category_disaster_response"/>
<field
name="description"
>Total affected population as reported in disaster relief requests. Helps prioritize areas with the highest number of people in need of assistance.</field>
<field name="category_id" ref="spp_gis_report.category_disaster_response" />
<field name="sequence">20</field>
<field name="source_model_id" search="[('model', '=', 'spp.drims.request')]"/>
<field name="source_model_id" search="[('model', '=', 'spp.drims.request')]" />
<field name="area_field_path">destination_area_id</field>
<field name="filter_mode">domain</field>
<field name="filter_domain">[('state', 'not in', ['draft', 'cancelled', 'rejected'])]</field>
<field
name="filter_domain"
>[('state', 'not in', ['draft', 'cancelled', 'rejected'])]</field>
<field name="aggregation_method">sum</field>
<field name="aggregation_field">affected_population</field>
<field name="base_area_level">1</field>
<field name="normalization_method">per_area_sqkm</field>
<field name="enable_rollup">True</field>
<field name="rollup_method">sum</field>
<field name="rollup_weight_source">count</field>
<field name="color_scheme_id" ref="spp_gis.scheme_blues"/>
<field name="color_scheme_id" ref="spp_gis.scheme_blues" />
<field name="threshold_mode">auto_jenks</field>
<field name="bucket_count">5</field>
<field name="refresh_mode">scheduled</field>
Expand All @@ -64,20 +72,24 @@
<record id="gis_report_pending_requests" model="spp.gis.report">
<field name="name">Pending Approval Requests</field>
<field name="code">DRIMS_SL_PENDING_REQUESTS</field>
<field name="description">Requests awaiting approval by geographic area. Highlights areas where response coordination needs attention to ensure timely relief delivery.</field>
<field name="category_id" ref="spp_gis_report.category_disaster_response"/>
<field
name="description"
>Requests awaiting approval by geographic area. Highlights areas where response coordination needs attention to ensure timely relief delivery.</field>
<field name="category_id" ref="spp_gis_report.category_disaster_response" />
<field name="sequence">30</field>
<field name="source_model_id" search="[('model', '=', 'spp.drims.request')]"/>
<field name="source_model_id" search="[('model', '=', 'spp.drims.request')]" />
<field name="area_field_path">destination_area_id</field>
<field name="filter_mode">domain</field>
<field name="filter_domain">[('approval_state', 'in', ['pending', 'submitted'])]</field>
<field
name="filter_domain"
>[('approval_state', 'in', ['pending', 'submitted'])]</field>
<field name="aggregation_method">count</field>
<field name="base_area_level">1</field>
<field name="normalization_method">raw</field>
<field name="enable_rollup">True</field>
<field name="rollup_method">sum</field>
<field name="rollup_weight_source">count</field>
<field name="color_scheme_id" ref="spp_gis.scheme_viridis"/>
<field name="color_scheme_id" ref="spp_gis.scheme_viridis" />
<field name="threshold_mode">auto_quartile</field>
<field name="bucket_count">4</field>
<field name="refresh_mode">scheduled</field>
Expand All @@ -90,21 +102,25 @@
<record id="gis_report_relief_value" model="spp.gis.report">
<field name="name">Total Relief Value by Area</field>
<field name="code">DRIMS_SL_RELIEF_VALUE</field>
<field name="description">Cumulative value of relief supplies requested by area. Helps track resource distribution and identify areas with high material needs.</field>
<field name="category_id" ref="spp_gis_report.category_disaster_response"/>
<field
name="description"
>Cumulative value of relief supplies requested by area. Helps track resource distribution and identify areas with high material needs.</field>
<field name="category_id" ref="spp_gis_report.category_disaster_response" />
<field name="sequence">40</field>
<field name="source_model_id" search="[('model', '=', 'spp.drims.request')]"/>
<field name="source_model_id" search="[('model', '=', 'spp.drims.request')]" />
<field name="area_field_path">destination_area_id</field>
<field name="filter_mode">domain</field>
<field name="filter_domain">[('state', 'not in', ['draft', 'cancelled', 'rejected'])]</field>
<field
name="filter_domain"
>[('state', 'not in', ['draft', 'cancelled', 'rejected'])]</field>
<field name="aggregation_method">sum</field>
<field name="aggregation_field">total_value</field>
<field name="base_area_level">1</field>
<field name="normalization_method">raw</field>
<field name="enable_rollup">True</field>
<field name="rollup_method">sum</field>
<field name="rollup_weight_source">count</field>
<field name="color_scheme_id" ref="spp_gis.scheme_viridis"/>
<field name="color_scheme_id" ref="spp_gis.scheme_viridis" />
<field name="threshold_mode">auto_quartile</field>
<field name="bucket_count">5</field>
<field name="refresh_mode">scheduled</field>
Expand All @@ -117,27 +133,30 @@
<record id="gis_report_fulfillment_progress" model="spp.gis.report">
<field name="name">Request Fulfillment Progress</field>
<field name="code">DRIMS_SL_FULFILLMENT_PCT</field>
<field name="description">Average fulfillment percentage of relief requests by area. Identifies areas where delivery is lagging and additional logistics support may be needed.</field>
<field name="category_id" ref="spp_gis_report.category_disaster_response"/>
<field
name="description"
>Average fulfillment percentage of relief requests by area. Identifies areas where delivery is lagging and additional logistics support may be needed.</field>
<field name="category_id" ref="spp_gis_report.category_disaster_response" />
<field name="sequence">50</field>
<field name="source_model_id" search="[('model', '=', 'spp.drims.request')]"/>
<field name="source_model_id" search="[('model', '=', 'spp.drims.request')]" />
<field name="area_field_path">destination_area_id</field>
<field name="filter_mode">domain</field>
<field name="filter_domain">[('state', 'not in', ['draft', 'cancelled', 'rejected'])]</field>
<field
name="filter_domain"
>[('state', 'not in', ['draft', 'cancelled', 'rejected'])]</field>
<field name="aggregation_method">avg</field>
<field name="aggregation_field">fulfillment_pct</field>
<field name="base_area_level">1</field>
<field name="normalization_method">raw</field>
<field name="enable_rollup">True</field>
<field name="rollup_method">weighted_avg</field>
<field name="rollup_weight_source">count</field>
<field name="color_scheme_id" ref="spp_gis.scheme_viridis"/>
<field name="color_scheme_id" ref="spp_gis.scheme_viridis" />
<field name="threshold_mode">auto_equal</field>
<field name="bucket_count">5</field>
<field name="refresh_mode">scheduled</field>
<field name="refresh_interval">hourly</field>
<field name="auto_create_layer" eval="True" />
<field name="layer_active_on_startup" eval="True" />
</record>

</odoo>
Loading
Loading