Skip to content

Commit bdef7dc

Browse files
committed
feat(spp_change_request_v2): add skip-to-review button and enforce field-level readonly
- Add action_skip_to_review() on detail base: skips documents stage if all required docs are uploaded, otherwise shows warning and redirects to documents stage - Add "Review & Submit" button (btn-success) to all 11 detail form views - Add field-level readonly on all editable fields across detail forms and documents form: only CR managers in draft/revision state can edit - Form-level readonly on <form> tag kept as additional layer
1 parent 7b615d6 commit bdef7dc

13 files changed

Lines changed: 477 additions & 77 deletions

spp_change_request_v2/models/change_request_detail_base.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,26 @@ def action_next_documents(self):
8080
raise UserError(_("No proposed changes detected. Please make changes before proceeding."))
8181
return self.change_request_id.action_goto_documents()
8282

83+
def action_skip_to_review(self):
84+
"""Skip documents stage and go directly to review if all required docs are uploaded."""
85+
self.ensure_one()
86+
change_req = self.change_request_id
87+
if not change_req.has_proposed_changes:
88+
raise UserError(_("No proposed changes detected. Please make changes before proceeding."))
89+
if not change_req.documents_complete:
90+
return {
91+
"type": "ir.actions.client",
92+
"tag": "display_notification",
93+
"params": {
94+
"title": _("Missing Documents"),
95+
"message": _("Some required documents are missing. Redirecting to Documents stage."),
96+
"type": "warning",
97+
"sticky": False,
98+
"next": change_req.action_goto_documents(),
99+
},
100+
}
101+
return change_req.action_goto_review()
102+
83103
def action_submit_for_approval(self):
84104
"""Submit the parent CR for approval."""
85105
self.ensure_one()

spp_change_request_v2/views/detail_add_member_views.xml

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
<field name="name">spp.cr.detail.add_member.form</field>
66
<field name="model">spp.cr.detail.add_member</field>
77
<field name="arch" type="xml">
8-
<form readonly="not is_cr_manager">
8+
<form
9+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
10+
>
911
<header>
1012
<field name="is_cr_manager" invisible="1" />
1113
<button
@@ -17,6 +19,15 @@
1719
invisible="approval_state not in ('draft', 'revision')"
1820
groups="spp_change_request_v2.group_cr_manager"
1921
/>
22+
<button
23+
name="action_skip_to_review"
24+
string="Review &amp; Submit"
25+
type="object"
26+
class="btn-success"
27+
icon="fa-check-circle"
28+
invisible="approval_state not in ('draft', 'revision')"
29+
groups="spp_change_request_v2.group_cr_manager"
30+
/>
2031
<button
2132
name="action_save_and_go_to_list"
2233
string="Save as Draft"
@@ -49,27 +60,46 @@
4960
<!-- Member Details -->
5061
<group string="New Member Information">
5162
<group>
52-
<field name="given_name" required="1" />
53-
<field name="family_name" required="1" />
63+
<field
64+
name="given_name"
65+
required="1"
66+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
67+
/>
68+
<field
69+
name="family_name"
70+
required="1"
71+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
72+
/>
5473
<field name="member_name" readonly="1" force_save="1" />
5574
</group>
5675
<group>
57-
<field name="birthdate" />
76+
<field
77+
name="birthdate"
78+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
79+
/>
5880
<field
5981
name="gender_id"
6082
options="{'no_create': True, 'no_open': True}"
83+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
6184
/>
6285
<field
6386
name="relationship_id"
6487
options="{'no_create': True, 'no_open': True}"
88+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
6589
/>
6690
</group>
6791
</group>
6892

6993
<group string="Contact Information">
7094
<group>
71-
<field name="phone" />
72-
<field name="id_number" />
95+
<field
96+
name="phone"
97+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
98+
/>
99+
<field
100+
name="id_number"
101+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
102+
/>
73103
</group>
74104
</group>
75105

spp_change_request_v2/views/detail_change_hoh_views.xml

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<field name="arch" type="xml">
88
<form
99
string="Change Head of Household Details"
10-
readonly="not is_cr_manager"
10+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
1111
>
1212
<header>
1313
<field name="is_cr_manager" invisible="1" />
@@ -20,6 +20,15 @@
2020
invisible="approval_state not in ('draft', 'revision')"
2121
groups="spp_change_request_v2.group_cr_manager"
2222
/>
23+
<button
24+
name="action_skip_to_review"
25+
string="Review &amp; Submit"
26+
type="object"
27+
class="btn-success"
28+
icon="fa-check-circle"
29+
invisible="approval_state not in ('draft', 'revision')"
30+
groups="spp_change_request_v2.group_cr_manager"
31+
/>
2332
<button
2433
name="action_save_and_go_to_list"
2534
string="Save as Draft"
@@ -46,6 +55,7 @@
4655
options="{'no_create': True}"
4756
domain="[('id', 'in', available_individual_ids)]"
4857
required="1"
58+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
4959
/>
5060
<field
5161
name="new_head_membership_id"
@@ -56,20 +66,28 @@
5666
</group>
5767
<group>
5868
<group string="Change Details">
59-
<field name="reason" />
60-
<field name="effective_date" />
69+
<field
70+
name="reason"
71+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
72+
/>
73+
<field
74+
name="effective_date"
75+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
76+
/>
6177
</group>
6278
<group string="Previous Head Reassignment">
6379
<field
6480
name="previous_head_new_role_id"
6581
options="{'no_create': True, 'no_open': True}"
82+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
6683
/>
6784
</group>
6885
</group>
6986
<group string="Additional Information">
7087
<field
7188
name="remarks"
7289
placeholder="Enter any additional notes..."
90+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
7391
/>
7492
</group>
7593
</sheet>

spp_change_request_v2/views/detail_create_group_views.xml

Lines changed: 69 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
<field name="name">spp.cr.detail.create_group.form</field>
66
<field name="model">spp.cr.detail.create_group</field>
77
<field name="arch" type="xml">
8-
<form string="Create New Group Details" readonly="not is_cr_manager">
8+
<form
9+
string="Create New Group Details"
10+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
11+
>
912
<header>
1013
<field name="is_cr_manager" invisible="1" />
1114
<button
@@ -17,6 +20,15 @@
1720
invisible="approval_state not in ('draft', 'revision')"
1821
groups="spp_change_request_v2.group_cr_manager"
1922
/>
23+
<button
24+
name="action_skip_to_review"
25+
string="Review &amp; Submit"
26+
type="object"
27+
class="btn-success"
28+
icon="fa-check-circle"
29+
invisible="approval_state not in ('draft', 'revision')"
30+
groups="spp_change_request_v2.group_cr_manager"
31+
/>
2032
<button
2133
name="action_save_and_go_to_list"
2234
string="Save as Draft"
@@ -34,62 +46,106 @@
3446
<sheet>
3547
<group>
3648
<group string="Group Information">
37-
<field name="group_name" required="1" />
49+
<field
50+
name="group_name"
51+
required="1"
52+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
53+
/>
3854
<field
3955
name="group_type_id"
4056
options="{'no_create': True, 'no_open': True}"
57+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
4158
/>
4259
</group>
4360
<group string="Contact">
44-
<field name="phone" />
45-
<field name="email" />
61+
<field
62+
name="phone"
63+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
64+
/>
65+
<field
66+
name="email"
67+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
68+
/>
4669
</group>
4770
</group>
4871

4972
<separator string="Head of Household" />
5073
<group>
5174
<group>
52-
<field name="create_new_head" />
75+
<field
76+
name="create_new_head"
77+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
78+
/>
5379
</group>
5480
</group>
5581
<group invisible="create_new_head">
5682
<group string="Select Existing Individual">
5783
<field
5884
name="head_individual_id"
5985
options="{'no_create': True}"
86+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
6087
/>
6188
</group>
6289
</group>
6390
<group invisible="not create_new_head">
6491
<group string="New Head Information">
65-
<field name="head_given_name" required="create_new_head" />
66-
<field name="head_family_name" required="create_new_head" />
92+
<field
93+
name="head_given_name"
94+
required="create_new_head"
95+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
96+
/>
97+
<field
98+
name="head_family_name"
99+
required="create_new_head"
100+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
101+
/>
67102
<field name="head_name" readonly="1" force_save="1" />
68-
<field name="head_birthdate" />
103+
<field
104+
name="head_birthdate"
105+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
106+
/>
69107
<field
70108
name="head_gender_id"
71109
options="{'no_create': True, 'no_open': True}"
110+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
111+
/>
112+
<field
113+
name="head_phone"
114+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
72115
/>
73-
<field name="head_phone" />
74116
</group>
75117
</group>
76118

77119
<separator string="Address" />
78120
<group>
79121
<group>
80-
<field name="address_line1" />
81-
<field name="address_line2" />
82-
<field name="city" />
122+
<field
123+
name="address_line1"
124+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
125+
/>
126+
<field
127+
name="address_line2"
128+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
129+
/>
130+
<field
131+
name="city"
132+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
133+
/>
83134
</group>
84135
<group>
85136
<field
86137
name="state_id"
87138
options="{'no_create': True, 'no_open': True}"
139+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
140+
/>
141+
<field
142+
name="postal_code"
143+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
88144
/>
89-
<field name="postal_code" />
90145
<field
91146
name="country_id"
92147
options="{'no_create': True, 'no_open': True}"
148+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
93149
/>
94150
</group>
95151
</group>

spp_change_request_v2/views/detail_edit_group_views.xml

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
<field name="name">spp.cr.detail.edit_group.form</field>
66
<field name="model">spp.cr.detail.edit_group</field>
77
<field name="arch" type="xml">
8-
<form readonly="not is_cr_manager">
8+
<form
9+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
10+
>
911
<header>
1012
<field name="is_cr_manager" invisible="1" />
1113
<button
@@ -17,6 +19,15 @@
1719
invisible="approval_state not in ('draft', 'revision')"
1820
groups="spp_change_request_v2.group_cr_manager"
1921
/>
22+
<button
23+
name="action_skip_to_review"
24+
string="Review &amp; Submit"
25+
type="object"
26+
class="btn-success"
27+
icon="fa-check-circle"
28+
invisible="approval_state not in ('draft', 'revision')"
29+
groups="spp_change_request_v2.group_cr_manager"
30+
/>
2031
<button
2132
name="action_save_and_go_to_list"
2233
string="Save as Draft"
@@ -52,22 +63,44 @@
5263

5364
<group string="Basic Information">
5465
<group>
55-
<field name="group_name" required="1" />
66+
<field
67+
name="group_name"
68+
required="1"
69+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
70+
/>
5671
</group>
5772
<group>
58-
<field name="phone" />
59-
<field name="email" />
73+
<field
74+
name="phone"
75+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
76+
/>
77+
<field
78+
name="email"
79+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
80+
/>
6081
</group>
6182
</group>
6283

6384
<group string="Address">
6485
<group>
65-
<field name="address_line1" />
66-
<field name="address_line2" />
86+
<field
87+
name="address_line1"
88+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
89+
/>
90+
<field
91+
name="address_line2"
92+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
93+
/>
6794
</group>
6895
<group>
69-
<field name="city" />
70-
<field name="postal_code" />
96+
<field
97+
name="city"
98+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
99+
/>
100+
<field
101+
name="postal_code"
102+
readonly="not is_cr_manager or approval_state not in ('draft', 'revision')"
103+
/>
71104
</group>
72105
</group>
73106
</sheet>

0 commit comments

Comments
 (0)