-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathchange_request_views.xml
More file actions
628 lines (601 loc) · 37.6 KB
/
change_request_views.xml
File metadata and controls
628 lines (601 loc) · 37.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- ══════════════════════════════════════════════════════════════════════════
CHANGE REQUEST LIST VIEW (Enhanced)
══════════════════════════════════════════════════════════════════════════ -->
<record id="spp_change_request_list" model="ir.ui.view">
<field name="name">spp.change.request.list</field>
<field name="model">spp.change.request</field>
<field name="arch" type="xml">
<list decoration-muted="display_state == 'rejected'"
decoration-success="display_state == 'applied'"
decoration-warning="display_state == 'revision'"
create="0"
sample="1">
<field name="name" decoration-bf="1"/>
<field name="request_type_id"/>
<field name="registrant_id"/>
<field name="display_state" widget="badge"
decoration-info="display_state == 'draft'"
decoration-warning="display_state in ('pending', 'revision')"
decoration-success="display_state in ('approved', 'applied')"
decoration-danger="display_state == 'rejected'"/>
<field name="source_type" optional="hide"/>
<field name="create_uid" string="Created By" widget="many2one_avatar_user"/>
<field name="create_date" string="Created" widget="datetime"/>
<field name="applied_date" optional="show" widget="datetime"/>
<field name="applied_by_id" optional="hide" widget="many2one_avatar_user"/>
</list>
</field>
</record>
<!-- ══════════════════════════════════════════════════════════════════════════
CHANGE REQUEST KANBAN VIEW
══════════════════════════════════════════════════════════════════════════ -->
<record id="spp_change_request_kanban" model="ir.ui.view">
<field name="name">spp.change.request.kanban</field>
<field name="model">spp.change.request</field>
<field name="arch" type="xml">
<kanban default_group_by="display_state" class="o_kanban_small_column"
quick_create="false" create="0" sample="1">
<field name="name"/>
<field name="request_type_id"/>
<field name="registrant_id"/>
<field name="display_state"/>
<field name="create_uid"/>
<field name="create_date"/>
<field name="is_applied"/>
<progressbar field="display_state"
colors='{"draft": "secondary", "pending": "warning", "revision": "info", "approved": "primary", "applied": "success", "rejected": "danger"}'/>
<templates>
<t t-name="card">
<div class="o_kanban_card_content">
<div class="o_kanban_primary_left">
<strong>
<field name="name"/>
</strong>
</div>
<div class="text-muted mb-1">
<field name="request_type_id"/>
</div>
<div class="d-flex align-items-center">
<i class="fa fa-user me-1 text-muted" title="Registrant"/>
<field name="registrant_id"/>
</div>
<div class="mt-2 d-flex justify-content-between align-items-center">
<span class="text-muted small">
<field name="create_date" widget="datetime"/>
</span>
<field name="create_uid" widget="many2one_avatar_user"/>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- ══════════════════════════════════════════════════════════════════════════
CHANGE REQUEST CALENDAR VIEW
══════════════════════════════════════════════════════════════════════════ -->
<record id="spp_change_request_calendar" model="ir.ui.view">
<field name="name">spp.change.request.calendar</field>
<field name="model">spp.change.request</field>
<field name="arch" type="xml">
<calendar string="Change Requests" date_start="create_date"
color="request_type_id" mode="month" quick_create="0">
<field name="name"/>
<field name="registrant_id"/>
<field name="display_state"/>
</calendar>
</field>
</record>
<!-- ══════════════════════════════════════════════════════════════════════════
CHANGE REQUEST PIVOT VIEW
══════════════════════════════════════════════════════════════════════════ -->
<record id="spp_change_request_pivot" model="ir.ui.view">
<field name="name">spp.change.request.pivot</field>
<field name="model">spp.change.request</field>
<field name="arch" type="xml">
<pivot string="Change Requests Analysis" sample="1">
<field name="request_type_id" type="row"/>
<field name="display_state" type="col"/>
</pivot>
</field>
</record>
<!-- ══════════════════════════════════════════════════════════════════════════
CHANGE REQUEST GRAPH VIEW
══════════════════════════════════════════════════════════════════════════ -->
<record id="spp_change_request_graph" model="ir.ui.view">
<field name="name">spp.change.request.graph</field>
<field name="model">spp.change.request</field>
<field name="arch" type="xml">
<graph string="Change Requests" type="bar" sample="1">
<field name="display_state"/>
</graph>
</field>
</record>
<!-- ══════════════════════════════════════════════════════════════════════════
CHANGE REQUEST FORM VIEW (Enhanced)
══════════════════════════════════════════════════════════════════════════ -->
<record id="spp_change_request_form" model="ir.ui.view">
<field name="name">spp.change.request.form</field>
<field name="model">spp.change.request</field>
<field name="arch" type="xml">
<form create="0">
<header>
<!-- Hidden fields for visibility logic -->
<field name="has_proposed_changes" invisible="1"/>
<field name="can_approve" invisible="1"/>
<!-- Draft Actions -->
<button name="action_submit_for_approval"
string="Submit for Approval"
type="object"
class="btn-primary"
invisible="approval_state != 'draft' or not has_proposed_changes"/>
<!-- Pending Actions (Validator) - Only visible if user can approve -->
<button name="action_approve"
string="Approve"
type="object"
class="btn-success"
invisible="approval_state != 'pending' or not can_approve"
groups="spp_change_request_v2.group_cr_validator,spp_change_request_v2.group_cr_validator_hq"
confirm="Approve this change request? The changes will be ready to record."/>
<button name="action_request_revision"
string="Request Changes"
type="object"
class="btn-secondary"
invisible="approval_state != 'pending' or not can_approve"
groups="spp_change_request_v2.group_cr_validator,spp_change_request_v2.group_cr_validator_hq"/>
<button name="action_reject"
string="Reject"
type="object"
class="btn-outline-danger"
invisible="approval_state != 'pending' or not can_approve"
groups="spp_change_request_v2.group_cr_validator,spp_change_request_v2.group_cr_validator_hq"
confirm="Reject this change request? This action cannot be undone."/>
<!-- Approved Actions -->
<button name="action_apply"
string="Finalize & Record Changes"
type="object"
class="btn-primary"
invisible="approval_state != 'approved' or is_applied"
confirm="This will record all approved changes to the beneficiary's profile. This action cannot be undone. Continue?"/>
<!-- Revision Actions -->
<button name="action_submit_for_approval"
string="Resubmit for Review"
type="object"
class="btn-primary"
invisible="approval_state != 'revision' or not has_proposed_changes"/>
<!-- Reset to Draft (for rejected) -->
<button name="action_reset_to_draft"
string="Start Over"
type="object"
class="btn-secondary"
invisible="approval_state != 'rejected'"
confirm="This will clear all review history and return to editing mode. You will need to resubmit for approval when done. Continue?"/>
<field name="display_state" widget="statusbar"
statusbar_visible="draft,pending,approved,applied"/>
</header>
<sheet>
<!-- Button Box with Smart Buttons -->
<div class="oe_button_box" name="button_box">
<button name="action_open_detail"
type="object"
class="oe_stat_button"
icon="fa-edit"
invisible="approval_state not in ('draft', 'revision')">
<div class="o_stat_info">
<span class="o_stat_text">Edit</span>
<span class="o_stat_value">Details</span>
</div>
</button>
<button name="action_open_preview_wizard"
type="object"
class="oe_stat_button"
icon="fa-eye"
groups="base.group_no_one"
invisible="approval_state in ('applied', 'rejected')">
<div class="o_stat_info">
<span class="o_stat_text">Preview</span>
<span class="o_stat_value">Changes</span>
</div>
</button>
</div>
<!-- Ribbons for terminal states -->
<widget name="web_ribbon" title="Applied" bg_color="text-bg-success"
invisible="not is_applied"/>
<widget name="web_ribbon" title="Rejected" bg_color="text-bg-danger"
invisible="approval_state != 'rejected'"/>
<!-- Compact header - Request Type only (CR number is in breadcrumb) -->
<div class="oe_title mb-2">
<field name="name" invisible="1"/>
<h2 class="d-flex align-items-center">
<field name="request_type_id" options="{'no_open': True}" class="me-2" readonly="approval_state != 'draft'" force_save="1"/>
</h2>
</div>
<!-- Target Type Information Banner -->
<div class="alert alert-secondary py-2" role="status"
invisible="not target_type_message">
<div class="d-flex align-items-center">
<i class="fa fa-info-circle me-2" title="Info"/>
<field name="target_type_message" nolabel="1"/>
</div>
</div>
<!-- Main Info Groups -->
<group>
<group string="About This Request">
<field name="registrant_domain" invisible="1"/>
<field name="registrant_id" readonly="approval_state != 'draft'"
domain="registrant_domain"
options="{'no_create': True, 'no_quick_create': True, 'no_open': True}"/>
<field name="applicant_id"
string="Submitted By (If Different)"
help="Person who submitted this request on behalf of the beneficiary"
invisible="not request_type_id.is_requires_applicant"
readonly="approval_state not in ('draft', 'revision')"
options="{'no_create': True, 'no_quick_create': True, 'no_open': True}"/>
<field name="applicant_phone"
string="Contact Phone"
help="Phone number to reach the person who submitted this request"
invisible="not applicant_id"
readonly="approval_state not in ('draft', 'revision')"/>
</group>
<group string="Submission Info">
<!-- Source type/reference hidden - technical audit fields -->
<field name="source_type" invisible="1"/>
<field name="source_reference" invisible="1"/>
<field name="create_uid" string="Submitted By" readonly="1"/>
<field name="create_date" string="Submitted On" readonly="1"/>
</group>
</group>
<!-- Revision Needed Banner -->
<div class="alert alert-warning" role="status"
invisible="approval_state != 'revision'">
<div class="d-flex align-items-center">
<i class="fa fa-edit fa-2x me-3" title="Edit"/>
<div>
<h5 class="alert-heading mb-1">Changes Requested</h5>
<p class="mb-0">
A reviewer has requested changes to this request.
Please review the feedback below, make the necessary edits, and resubmit.
</p>
</div>
</div>
</div>
<!-- Ready to Finalize Banner -->
<div class="alert alert-success" role="status"
invisible="approval_state != 'approved' or is_applied">
<div class="d-flex align-items-center">
<i class="fa fa-check-circle fa-2x me-3" title="Approved"/>
<div>
<h5 class="alert-heading mb-1">Approved - Ready to Finalize</h5>
<p class="mb-0">
This request has been approved. Click "Finalize & Record Changes" to
save the changes to the beneficiary's profile.
</p>
</div>
</div>
</div>
<!-- Multi-tier Approval Progress Banner -->
<div class="alert alert-info" role="status"
invisible="not multitier_approval_message">
<div class="d-flex align-items-center">
<i class="fa fa-info-circle fa-2x me-3" title="Info"/>
<div>
<field name="multitier_approval_message" nolabel="1"/>
</div>
</div>
</div>
<!-- Completion Info (visible after applied) -->
<group invisible="not is_applied">
<group string="Completion Details">
<field name="approval_state" invisible="1"/>
<field name="is_applied" invisible="1"/>
<field name="applied_date" string="Completed On"/>
<field name="applied_by_id" string="Completed By"/>
</group>
</group>
<!-- Notebook with Tabs -->
<notebook>
<page string="Details" name="details">
<field name="detail_res_model" invisible="1"/>
<field name="detail_res_id" invisible="1"/>
<field name="is_creator" invisible="1"/>
<!-- Creator in draft/revision: Show preview with prominent edit button -->
<div class="mb-3 text-center"
invisible="not (approval_state in ('draft', 'revision') and is_creator)">
<button name="action_open_detail"
type="object"
class="btn btn-primary btn-lg">
<i class="fa fa-edit me-2"/>Continue Editing
</button>
</div>
<!-- Draft/Revision OR Pending/Approved: Show split-pane review -->
<div invisible="approval_state in ('applied', 'rejected')">
<div class="row">
<!-- Left column: Current registrant data -->
<div class="col-md-6">
<div class="card h-100">
<div class="card-header bg-light d-flex justify-content-between align-items-center">
<h5 class="mb-0">
<i class="fa fa-user me-2"/>Current Data
</h5>
<button name="action_view_registrant"
type="object"
class="btn btn-sm btn-link text-primary"
invisible="not registrant_id">
<i class="fa fa-external-link me-1"/>View Registrant
</button>
</div>
<div class="card-body">
<field name="registrant_summary_html" class="o_readonly_modifier"/>
</div>
</div>
</div>
<!-- Right column: Proposed changes -->
<div class="col-md-6">
<div class="card h-100">
<div class="card-header bg-light">
<h5 class="mb-0">
<i class="fa fa-edit me-2"/>Proposed Changes
</h5>
</div>
<div class="card-body">
<field name="preview_html" class="o_readonly_modifier"/>
</div>
</div>
</div>
</div>
</div>
<!-- Applied/Rejected state: Show historical view -->
<div invisible="approval_state not in ('applied', 'rejected')">
<div class="alert alert-secondary mb-3" role="alert">
<i class="fa fa-history me-2" title="History"/>
<strong>Historical Record:</strong> This change request has been
<span invisible="approval_state != 'applied'">completed</span>
<span invisible="approval_state != 'rejected'">declined</span>.
</div>
<div class="row">
<!-- Left column: Current registrant data -->
<div class="col-md-6">
<div class="card h-100">
<div class="card-header bg-light">
<h5 class="mb-0">
<i class="fa fa-user me-2"/>Registrant
</h5>
</div>
<div class="card-body">
<field name="registrant_summary_html" class="o_readonly_modifier"/>
</div>
</div>
</div>
<!-- Right column: Changes that were made -->
<div class="col-md-6">
<div class="card h-100">
<div class="card-header bg-light">
<h5 class="mb-0">
<i class="fa fa-edit me-2"/>
<span invisible="approval_state != 'applied'">Changes Applied</span>
<span invisible="approval_state != 'rejected'">Proposed Changes</span>
</h5>
</div>
<div class="card-body">
<field name="preview_html" class="o_readonly_modifier"/>
</div>
</div>
</div>
</div>
</div>
</page>
<page string="Documents" name="documents">
<div class="alert alert-info mb-3" role="alert" invisible="not dms_directory_id">
<i class="fa fa-folder-open me-2" title="Documents"/>
<strong>Storage Location:</strong>
<field name="dms_directory_id" class="oe_inline" readonly="1"
options="{'no_open': True}"/>
</div>
<group>
<button name="action_upload_document"
string="Upload Document"
type="object"
class="btn-primary"
invisible="approval_state not in ('draft', 'revision')"
icon="fa-upload"/>
</group>
<field name="document_ids"
mode="list,kanban"
readonly="1"
force_save="1"
context="{'default_directory_id': dms_directory_id}"/>
</page>
<page string="Notes" name="notes">
<group>
<field name="description" placeholder="Enter a description of this change request..."
readonly="approval_state not in ('draft', 'revision')"/>
</group>
<group>
<field name="notes" placeholder="Internal notes (not visible to applicant)..."
readonly="approval_state not in ('draft', 'revision')"/>
</group>
</page>
<page string="Revision Requested" name="revision_info"
invisible="approval_state != 'revision'">
<div class="alert alert-warning mb-3" role="alert">
<div class="d-flex align-items-start">
<i class="fa fa-edit fa-2x me-3 mt-1" title="Revision"/>
<div>
<h5 class="alert-heading mb-2">Reviewer Feedback</h5>
<p class="mb-0">
Please address the following comments before resubmitting this request.
</p>
</div>
</div>
</div>
<group>
<group string="Revision Details">
<field name="revision_requested_by_id" string="Requested By" readonly="1"/>
<field name="revision_requested_date" string="Requested On" readonly="1" widget="datetime"/>
</group>
</group>
<group>
<group string="Required Changes" colspan="2">
<field name="revision_notes" nolabel="1" readonly="1"
placeholder="No specific notes provided..."
force_save="1"/>
</group>
</group>
</page>
<page string="Status History" name="validation">
<div class="text-muted mb-3">
<i class="fa fa-info-circle me-1" title="Info"/>
Timeline of reviews and approvals for this request.
</div>
<field name="approval_review_ids" readonly="1" nolabel="1"/>
</page>
</notebook>
<!-- Error Display - User-friendly -->
<div class="alert alert-danger" role="alert" invisible="not apply_error">
<div class="d-flex align-items-center">
<i class="fa fa-exclamation-circle fa-2x me-3" title="Error"/>
<div>
<h5 class="alert-heading mb-1">Unable to Complete Request</h5>
<p class="mb-0">
<field name="apply_error" class="d-inline"/>
</p>
<small class="text-muted">
If this error persists, please contact your supervisor.
</small>
</div>
</div>
</div>
</sheet>
<chatter/>
</form>
</field>
</record>
<!-- ══════════════════════════════════════════════════════════════════════════
CHANGE REQUEST SEARCH VIEW (Enhanced)
══════════════════════════════════════════════════════════════════════════ -->
<record id="spp_change_request_search" model="ir.ui.view">
<field name="name">spp.change.request.search</field>
<field name="model">spp.change.request</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<field name="registrant_id"/>
<field name="request_type_id"/>
<field name="create_uid" string="Created By"/>
<separator/>
<filter name="draft" string="Draft"
domain="[('display_state', '=', 'draft')]"/>
<filter name="pending" string="Under Review"
domain="[('display_state', '=', 'pending')]"/>
<filter name="revision" string="Needs Changes"
domain="[('display_state', '=', 'revision')]"/>
<filter name="approved" string="Approved"
domain="[('display_state', '=', 'approved')]"/>
<filter name="applied" string="Completed"
domain="[('display_state', '=', 'applied')]"/>
<filter name="rejected" string="Declined"
domain="[('display_state', '=', 'rejected')]"/>
<separator/>
<filter name="my_requests" string="My Requests"
domain="[('create_uid', '=', uid)]"/>
<filter name="needs_action" string="Needs My Action"
domain="[('display_state', 'in', ['pending', 'approved'])]"
groups="spp_change_request_v2.group_cr_validator,spp_change_request_v2.group_cr_validator_hq"/>
<separator/>
<filter name="sla_warning" string="SLA Warning (24h)"
domain="[('pending_since', '<', (datetime.datetime.now() - datetime.timedelta(days=1)))]"
groups="spp_change_request_v2.group_cr_validator,spp_change_request_v2.group_cr_validator_hq"/>
<filter name="sla_exceeded" string="SLA Exceeded (48h)"
domain="[('pending_since', '<', (datetime.datetime.now() - datetime.timedelta(days=2)))]"
groups="spp_change_request_v2.group_cr_validator,spp_change_request_v2.group_cr_validator_hq"/>
<separator/>
<filter name="group_type" string="Type"
context="{'group_by': 'request_type_id'}"/>
<filter name="group_state" string="Status"
context="{'group_by': 'display_state'}"/>
<filter name="group_registrant" string="Registrant"
context="{'group_by': 'registrant_id'}"/>
<filter name="group_creator" string="Created By"
context="{'group_by': 'create_uid'}"/>
</search>
</field>
</record>
<!-- ══════════════════════════════════════════════════════════════════════════
CHANGE REQUEST ACTIONS
══════════════════════════════════════════════════════════════════════════ -->
<!-- Main Action - All Change Requests -->
<record id="action_change_request" model="ir.actions.act_window">
<field name="name">Change Requests</field>
<field name="path">change-requests</field>
<field name="res_model">spp.change.request</field>
<field name="view_mode">list,kanban,form,calendar,pivot,graph</field>
<field name="search_view_id" ref="spp_change_request_search"/>
<field name="context">{'create_action': 'spp_change_request_v2.action_cr_create_wizard'}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No change requests found
</p>
<p>
Change requests allow you to propose changes to registrant
information with an approval workflow.
</p>
</field>
</record>
<!-- Action - My Change Requests -->
<record id="action_my_change_requests" model="ir.actions.act_window">
<field name="name">My Change Requests</field>
<field name="path">my-change-requests</field>
<field name="res_model">spp.change.request</field>
<field name="view_mode">list,kanban,form</field>
<field name="search_view_id" ref="spp_change_request_search"/>
<field name="context">{'search_default_my_requests': 1, 'create_action': 'spp_change_request_v2.action_cr_create_wizard'}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
You haven't created any change requests yet
</p>
</field>
</record>
<!-- Action - Under Review (Validators) -->
<record id="action_pending_change_requests" model="ir.actions.act_window">
<field name="name">Under Review</field>
<field name="path">under-review-change-requests</field>
<field name="res_model">spp.change.request</field>
<field name="view_mode">list,kanban,form</field>
<field name="search_view_id" ref="spp_change_request_search"/>
<field name="domain">[('display_state', '=', 'pending')]</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No change requests under review
</p>
<p>
All caught up! Check back later for new submissions.
</p>
</field>
</record>
<!-- Action - Ready to Apply -->
<record id="action_approved_change_requests" model="ir.actions.act_window">
<field name="name">Ready to Apply</field>
<field name="path">approved-change-requests</field>
<field name="res_model">spp.change.request</field>
<field name="view_mode">list,kanban,form</field>
<field name="search_view_id" ref="spp_change_request_search"/>
<field name="domain">[('display_state', '=', 'approved')]</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No approved change requests waiting
</p>
</field>
</record>
<!-- Action - Analytics -->
<record id="action_change_request_analytics" model="ir.actions.act_window">
<field name="name">CR Analytics</field>
<field name="res_model">spp.change.request</field>
<field name="view_mode">pivot,graph,list</field>
<field name="search_view_id" ref="spp_change_request_search"/>
<field name="context">{}</field>
</record>
</odoo>