source: trunk/grails-app/views/taskDetailed/show.gsp @ 181

Last change on this file since 181 was 181, checked in by gav, 14 years ago

Change is* in Task to just 'active', 'scheduled' and 'approved'.
Regenerate non detailed controller and views.
Adjust detailed controller, views and services to suite.
Add support for task actions 'approve', 'complete', 'trash' and their counter parts.
Default task status to "not started" when creating a new task.

File size: 33.6 KB
Line 
1<html>
2    <head>
3        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
4        <meta name="layout" content="main" />
5        <title>Show Task</title>
6        <g:javascript src="overlayPane.js" />
7        <nav:resources override="true"/>
8        <resource:tabView skin="tabviewCustom" />
9    </head>
10    <body>
11        <div class="nav">
12            <nav:renderSubItems group="nav"/>
13        </div>
14        <div class="body">
15            <g:if test="${flash.message}">
16            <div class="message">${flash.message}</div>
17            </g:if>
18            <g:if test="${taskInstance.trash}" >
19                <div class="errors">
20                        This task is in the trash bin, but can be restored if required.
21                </div>
22            </g:if>
23            <g:hasErrors bean="${taskInstance}">
24            <div class="errors">
25                <g:renderErrors bean="${taskInstance}" as="list" />
26            </div>
27            </g:hasErrors>
28
29            <richui:tabView id="tabView">
30
31                <richui:tabLabels>
32                    <richui:tabLabel selected="${showTaskTab}" title="Task #${taskInstance.id}" />
33                    <richui:tabLabel selected="${showProcedureTab}" title="Procedure" />
34                    <richui:tabLabel selected="${showRecurrenceTab}" title="Recurrence" />
35                    <richui:tabLabel selected="${showInventoryTab}" title="Inventory" />
36                    <richui:tabLabel selected="${showSubTasksTab}" title="Sub Tasks" />
37                </richui:tabLabels>
38
39                <richui:tabContents>
40
41<!-- Start Task tab -->
42                    <richui:tabContent>
43
44                        <div class="dialog">
45                            <table>
46                                <tbody>
47
48                                    <tr class="prop">
49                                        <td valign="top" class="name">Description:</td>
50
51                                        <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'description')}</td>
52
53                                    </tr>
54
55                                    <tr class="prop">
56                                        <td valign="top" class="name">Comment:</td>
57
58                                        <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'comment')}</td>
59
60                                    </tr>
61
62                                    <tr class="prop">
63                                        <td valign="top" class="name">Target Start:</td>
64
65                                        <td valign="top" class="value"><g:formatDate date="${taskInstance.targetStartDate}" format="EEE, dd-MMM-yyyy"/></td>
66
67                                    </tr>
68
69                                    <tr class="prop">
70                                        <td valign="top" class="name">Target Completion:</td>
71
72                                        <td valign="top" class="value"><g:formatDate date="${taskInstance.targetCompletionDate}" format="EEE, dd-MMM-yyyy"/></td>
73
74                                    </tr>
75
76                                    <tr class="prop">
77                                        <td valign="top" class="name">
78                                            <div id="modControlClosed">
79                                                <a href='' onclick="showElement('modifications');
80                                                                                    showElement('modControlOpened');
81                                                                                    hideElement('modControlClosed'); return false;">
82                                                    Modifications <img  src="${resource(dir:'images/skin',file:'bullet_toggle_plus.png')}" alt="Show" />
83                                                </a>
84                                            </div>
85                                            <div id="modControlOpened" style="display:none;">
86                                                <a href='' onclick="hideElement('modifications');
87                                                                                    hideElement('modControlOpened');
88                                                                                    showElement('modControlClosed');
89                                                                                    return false;">
90                                                    Modifications <img  src="${resource(dir:'images/skin',file:'bullet_toggle_minus.png')}" alt="Show" />
91                                                </a>
92                                            </div>
93                                        </td>
94
95                                        <td  valign="top" style="text-align:left;" class="value">
96                                            <div id="modifications" style="display:none;">
97                                                <ul>
98                                                <g:each var="a" in="${taskModificationList}">
99                                                    <li>${a?.encodeAsHTML()}</li>
100                                                </g:each>
101                                                </ul>
102                                            </div>
103                                        </td>
104                                    </tr>
105
106
107                                    <tr class="prop">
108                                        <td valign="top" class="name">Lead Person:</td>
109
110                                        <td valign="top" class="value">${taskInstance?.leadPerson?.encodeAsHTML()}</td>
111
112                                    </tr>
113
114                                    <tr class="prop">
115                                        <td valign="top" class="name">Primary Asset:</td>
116
117                                        <td valign="top" class="value"><g:link controller="assetDetailed" action="show" id="${taskInstance?.primaryAsset?.id}">${taskInstance?.primaryAsset?.encodeAsHTML()}</g:link></td>
118
119                                    </tr>
120
121                                    <tr class="prop">
122                                        <td valign="top" class="name">Associated Assets:</td>
123
124                                        <td  valign="top" style="text-align:left;" class="value">
125                                            <ul>
126                                            <g:each var="a" in="${taskInstance.associatedAssets}">
127                                                <li>${a?.encodeAsHTML()}</li>
128                                            </g:each>
129                                            </ul>
130                                        </td>
131
132                                    </tr>
133
134                                    <tr class="prop">
135                                        <td valign="top" class="name">Priority:</td>
136
137                                        <td valign="top" class="value">${taskInstance?.taskPriority?.encodeAsHTML()}</td>
138
139                                    </tr>
140
141                                    <tr class="prop">
142                                        <td valign="top" class="name">Status:</td>
143
144                                        <td valign="top" class="value">${taskInstance?.taskStatus?.encodeAsHTML()}</td>
145
146                                    </tr>
147
148                                    <tr class="prop">
149                                        <td valign="top" class="name">Approved:</td>
150
151                                        <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'approved')}</td>
152
153                                    </tr>
154
155                                    <tr class="prop">
156                                        <td valign="top" class="name">Scheduled:</td>
157
158                                        <td valign="top" class="value">${fieldValue(bean:taskInstance, field:'scheduled')}</td>
159
160                                    </tr>
161
162                                    <tr class="prop">
163                                        <td valign="top" class="name">Parent Task:</td>
164
165                                        <td valign="top" class="value"><g:link controller="taskDetailed" action="show" id="${taskInstance?.parentTask?.id}">${taskInstance?.parentTask?.encodeAsHTML()}</g:link></td>
166
167                                    </tr>
168
169                                    <tr class="prop">
170                                        <td valign="top" class="name">Group:</td>
171
172                                        <td valign="top" class="value">${taskInstance?.taskGroup?.encodeAsHTML()}</td>
173
174                                    </tr>
175
176                                    <tr class="prop">
177                                        <td valign="top" class="name">Type:</td>
178
179                                        <td valign="top" class="value">${taskInstance?.taskType?.encodeAsHTML()}</td>
180
181                                    </tr>
182
183                                    <tr class="prop">
184                                        <td valign="top" class="name">Assigned Persons:</td>
185
186                                        <td  valign="top" style="text-align:left;" class="value">
187                                            <ul>
188                                            <g:each var="a" in="${taskInstance.assignedPersons}">
189                                                <li><g:link controller="assignedPersonDetailed" action="edit" id="${a.id}">${a?.encodeAsHTML()}</g:link></li>
190                                            </g:each>
191                                            </ul>
192                                            <g:link controller="assignedPersonDetailed" params="['task.id':taskInstance?.id]" action="create">Add AssignedPerson</g:link>
193                                        </td>
194
195                                    </tr>
196
197                                </tbody>
198                            </table>
199                        </div>
200
201                        <div class="buttons">
202                            <g:form>
203                                <input type="hidden" name="id" value="${taskInstance?.id}" />
204
205                                <g:if test="${taskInstance.trash}" >
206                                    <span class="button"><g:actionSubmit class="restore" onclick="return confirm('Are you sure?');" value="Restore" /></span>
207                                </g:if>
208                                <g:else>
209
210                                    <g:if test="${taskInstance.taskStatus.id != 3}" >
211                                        <span class="button"><g:actionSubmit class="complete" value="Complete" /></span>
212
213                                        <g:if test="${taskInstance.approved}" >
214                                            <span class="button"><g:actionSubmit class="renegeApproval" value="Renege Approval" action="renegeApproval" /></span>
215                                        </g:if>
216                                        <g:else>
217                                            <span class="button"><g:actionSubmit class="approve" value="Approve" /></span>
218                                        </g:else>
219
220                                        <span class="button"><g:actionSubmit class="edit" value="Edit" /></span>
221                                        <span class="button"><g:actionSubmit class="trash" onclick="return confirm('Are you sure?');" value="Trash" /></span>
222
223                                    </g:if>
224                                    <g:else>
225                                        <span class="button"><g:actionSubmit class="reopen" value="Reopen" /></span>
226                                    </g:else>
227
228                                </g:else>
229                            </g:form>
230                        </div>
231
232                        <div class="list">
233                            <h1>Faults</h1>
234                            <table>
235                                <thead>
236                                    <tr>
237                                        <th>Comment</th>
238                                        <th>Date Done</th>
239                                        <th>Duration</th>
240                                        <th>Entered By</th>
241                                        <th></th>
242                                    </tr>
243                                </thead>
244                                <tbody>
245                                <g:each in="${entryFaultList}" status="i" var="entry">
246                                        <tr class="${(i % 2) == 0 ? 'clickableOdd' : 'clickableEven'}" onclick='window.location = "${request.getContextPath()}/entryDetailed/edit/${entry.id}"'/>
247
248                                            <td style="width:65%">${entry.comment}</td>
249                                            <td><g:formatDate date="${entry.dateDone}" format="EEE, dd-MMM-yyyy"/></td>
250                                            <td>${entry.durationHour}:${entry.durationMinute}</td>
251                                            <td>${entry.enteredBy}</td>
252
253                                            <td>
254                                                <g:link controller="entryDetailed" action="edit" id="${entry.id}">
255                                                    <img  src="${resource(dir:'images/skin',file:'database_edit.png')}" alt="Edit" />
256                                                </g:link>
257                                            </td>
258
259                                        </tr>
260                                </g:each>
261                                </tbody>
262                            </table>
263                        </div>
264
265                        <div class="list">
266                            <h1>Work Done</h1>
267                            <table>
268                                <thead>
269                                    <tr>
270                                        <th>Comment</th>
271                                        <th>Date Done</th>
272                                        <th>Duration</th>
273                                        <th>Entered By</th>
274                                        <th></th>
275                                    </tr>
276                                </thead>
277                                <tbody>
278                                <g:each in="${entryWorkDoneList}" status="i" var="entry">
279                                        <tr class="${(i % 2) == 0 ? 'clickableOdd' : 'clickableEven'}" onclick='window.location = "${request.getContextPath()}/entryDetailed/edit/${entry.id}"'/>
280
281                                            <td width="65%">${entry.comment}</td>
282                                            <td><g:formatDate date="${entry.dateDone}" format="EEE, dd-MMM-yyyy"/></td>
283                                            <td>${entry.durationHour}:${entry.durationMinute}</td>
284                                            <td>${entry.enteredBy}</td>
285
286                                            <td>
287                                                <g:link controller="entryDetailed" action="edit" id="${entry.id}">
288                                                    <img  src="${resource(dir:'images/skin',file:'database_edit.png')}" alt="Edit" />
289                                                </g:link>
290                                            </td>
291
292                                        </tr>
293                                </g:each>
294                                </tbody>
295                            </table>
296                        </div>
297
298                        <br />
299
300                        <div class="buttons">
301                            <g:form controller="entryDetailed">
302                                <input type="hidden" name="taskInstance.id" value="${taskInstance?.id}" />
303                                <span class="button">
304                                    <g:actionSubmit value="Add Entry" action="create"  class="add"/>
305                                </span>
306                            </g:form>
307                        </div>
308                    </richui:tabContent>
309<!-- End Task tab -->
310
311
312<!-- Start Task Procedure tab-->
313                    <richui:tabContent>
314                        <g:if test="${!taskProcedureExits}">
315                            <br />
316                            No Procedure linked.
317                            <br />
318                            <br />
319                            <g:form controller="taskProcedureDetailed" >
320                                <input type="hidden" name="taskInstance.id" value="${taskInstance?.id}" />
321
322                                <div class="buttons">
323                                    <span class="button">
324                                        <g:actionSubmit value="New" action="create" class="add"/>
325                                    </span>
326                                    <span class="button">
327                                        <g:actionSubmit value="Search" action="search" class="search"/>
328                                    </span>
329                                </div>
330
331                            </g:form>
332
333                        </g:if>
334                        <g:else>
335                            <div class="dialog">
336                                <table>
337                                    <tbody>
338
339                                        <tr class="prop">
340                                            <td valign="top" class="name">Procedure Id:</td>
341
342                                            <td valign="top" class="value">${fieldValue(bean:taskProcedureInstance, field:'id')}</td>
343
344                                        </tr>
345
346                                        <tr class="prop">
347                                            <td valign="top" class="name">Name:</td>
348
349                                            <td valign="top" class="value">${fieldValue(bean:taskProcedureInstance, field:'name')}</td>
350
351                                        </tr>
352
353                                        <tr class="prop">
354                                            <td valign="top" class="name">Description:</td>
355
356                                            <td valign="top" class="value">${fieldValue(bean:taskProcedureInstance, field:'description')}</td>
357
358                                        </tr>
359
360                                        <tr class="prop">
361                                            <td valign="top" class="name">Is Active:</td>
362
363                                            <td valign="top" class="value">${fieldValue(bean:taskProcedureInstance, field:'isActive')}</td>
364
365                                        </tr>
366
367                                    </tbody>
368                                </table>
369                            </div>
370                            <div class="buttons">
371                                <g:form controller="taskProcedureDetailed">
372                                    <input type="hidden" name="id" value="${taskProcedureInstance?.id}" />
373                                    <span class="button"><g:actionSubmit class="edit" value="Edit" /></span>
374                                </g:form>
375                            </div>
376
377                            <div class="list">
378                                <table>
379                                    <thead>
380                                        <tr>
381                                            <th>Step</th>
382                                            <th>Description</th>
383                                        </tr>
384                                    </thead>
385                                    <tbody>
386                                        <g:each in="${maintenanceActionList}" status="i" var="maintenanceAction">
387                                            <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
388
389                                                <td valign="top" class="name">
390                                                    ${maintenanceAction?.procedureStepNumber}
391                                                </td>
392
393                                                <td  valign="top" style="text-align:left;" class="value">
394                                                    ${maintenanceAction?.description}
395                                                </td>
396
397                                            </tr>
398                                        </g:each>
399
400                                    </tbody>
401                                </table>
402                            </div>
403
404                        </g:else>
405
406                    </richui:tabContent>
407<!-- End Task Procedure tab-->
408
409<!-- Start Task Recurrence tab -->
410                    <richui:tabContent>
411
412                        <g:if test="${!taskRecurringScheduleExits}">
413                            <br />
414                            No Recurring Schedule.
415                            <br />
416                            <br />
417                            <g:form controller="taskRecurringScheduleDetailed" >
418                                <input type="hidden" name="taskInstance.id" value="${taskInstance?.id}" />
419
420                                <div class="buttons">
421                                    <span class="button">
422                                        <g:actionSubmit value="Create" action="create"  class="add"/>
423                                    </span>
424                                </div>
425
426                            </g:form>
427
428                        </g:if>
429                        <g:else>
430
431                        <div class="dialog">
432                                <table>
433                                    <tbody>
434                                        <tr class="prop">
435                                            <td valign="top" class="name">Recurring Schedule:</td>
436
437                                            <td valign="top" class="value">${taskRecurringScheduleInstance.encodeAsHTML()}</td>
438
439                                        </tr>
440
441                                        <tr class="prop">
442                                            <td valign="top" class="name">Start Date:</td>
443
444                                            <td valign="top" class="value">
445                                                <g:formatDate date="${taskRecurringScheduleInstance.startDate}" format="EEE, dd-MMM-yyyy"/>
446                                            </td>
447
448                                        </tr>
449
450                                        <tr class="prop">
451                                            <td valign="top" class="name">Task Duration:</td>
452
453                                            <td valign="top" class="value">
454                                                ${taskRecurringScheduleInstance?.taskDuration} ${taskRecurringScheduleInstance?.taskDurationPeriod}
455                                            </td>
456                                        </tr>
457
458                                        <tr class="prop">
459                                            <td valign="top" class="name">Generate Ahead:</td>
460
461                                            <td valign="top" class="value">
462                                                ${taskRecurringScheduleInstance?.generateAhead} ${taskRecurringScheduleInstance?.generateAheadPeriod}
463                                            </td>
464
465                                        </tr>
466
467                                        </tr>
468
469                                        <tr class="prop">
470                                            <td valign="top" class="name">Is Enabled:</td>
471
472                                            <td valign="top" class="value">${fieldValue(bean:taskRecurringScheduleInstance, field:'isEnabled')}</td>
473
474                                        </tr>
475
476                                    </tbody>
477                                </table>
478
479                                <table>
480                                    <tbody>
481
482                                        <tr class="prop">
483                                            <td valign="top" class="name">Next Target Start Date:</td>   
484
485                                            <td valign="top" class="value">
486                                                <g:formatDate date="${taskRecurringScheduleInstance.nextTargetStartDate}" format="EEE, dd-MMM-yyyy"/>
487                                            </td>
488
489                                        </tr>
490
491                                        <tr class="prop">
492                                            <td valign="top" class="name">Next Target Completion Date:</td>   
493
494                                            <td valign="top" class="value">
495                                                <g:formatDate date="${taskRecurringScheduleInstance.nextTargetCompletionDate}" format="EEE, dd-MMM-yyyy"/>
496                                            </td>
497
498                                        </tr>
499
500                                        <tr class="prop">
501                                            <td valign="top" class="name">Next Generation Date:</td>
502
503                                            <td valign="top" class="value">
504                                                <g:formatDate date="${taskRecurringScheduleInstance.nextGenerationDate}" format="EEE, dd-MMM-yyyy"/>
505                                            </td>
506                                        </tr>
507
508                                        <tr class="prop">
509                                            <td valign="top" class="name">Last Generated Date:</td>
510
511                                            <td valign="top" class="value">
512                                                <g:formatDate date="${taskRecurringScheduleInstance.lastGeneratedDate}" format="EEE, dd-MMM-yyyy"/>
513                                            </td>
514
515                                        </tr>
516
517                                        <tr class="prop">
518                                            <td valign="top" class="name">Last Generated Sub Task:</td>
519
520                                            <td valign="top" class="value">
521                                                <g:link controller="taskDetailed" action="show" id="${taskRecurringScheduleInstance?.lastGeneratedSubTask?.id}">
522                                                    ${taskRecurringScheduleInstance?.lastGeneratedSubTask?.encodeAsHTML()}
523                                                </g:link>
524                                            </td>
525                                        </tr>
526                                    </tbody>
527                                </table>
528                            </div>
529                            <div class="buttons">
530                                <g:form controller="taskRecurringScheduleDetailed">
531                                    <input type="hidden" name="id" value="${taskRecurringScheduleInstance?.id}" />
532                                    <span class="button"><g:actionSubmit class="edit" value="Edit" /></span>
533                                </g:form>
534                            </div>
535
536                        </g:else>
537                    </richui:tabContent>
538<!-- End Task Recurrence tab -->
539
540<!-- Start Inventory tab -->
541                    <richui:tabContent>
542
543                        <g:if test="${inventoryMovementList.isEmpty()}">
544                            <br />
545                            No Inventory Used.
546                            <br />
547                            <br />
548                        </g:if>
549                        <g:else>
550                            <div class="list">
551                                <table>
552                                    <thead>
553                                        <tr>
554                                            <th>Inventory Item</th>
555                                            <th>Quantity</th>
556                                            <th>Movement Type</th>
557                                            <th>Date</th>
558                                            <th></th>
559                                        </tr>
560                                    </thead>
561                                    <tbody>
562                                        <g:each in="${inventoryMovementList}" status="i" var="inventoryMovementInstance">
563                                            <tr class="${(i % 2) == 0 ? 'clickableOdd' : 'clickableEven'}" onclick='window.location = "${request.getContextPath()}/inventoryMovementDetailed/show/${inventoryMovementInstance.id}"'/>
564
565                                                <td>${fieldValue(bean:inventoryMovementInstance, field:'inventoryItem')}</td>
566                                                <td>${fieldValue(bean:inventoryMovementInstance, field:'quantity')}</td>
567                                                <td>${fieldValue(bean:inventoryMovementInstance, field:'inventoryMovementType')}</td>
568                                                <td><g:formatDate date="${inventoryMovementInstance.date}" format="EEE, dd-MMM-yyyy"/></td>
569                                                <td>
570                                                    <g:link controller="inventoryMovementDetailed" action="show" id="${inventoryMovementInstance.id}">
571                                                        <img  src="${resource(dir:'images/skin',file:'database_go.png')}" alt="Show" />
572                                                    </g:link>
573                                                </td>
574
575                                            </tr>
576                                        </g:each>
577                                    </tbody>
578                                </table>
579                            </div>
580                        </g:else>
581
582                        <g:form controller="inventoryMovementDetailed" >
583                            <input type="hidden" name="task.id" value="${taskInstance?.id}" />
584                            <div class="buttons">
585                                <g:if test="${!inventoryMovementList.isEmpty()}">
586                                    Results: ${inventoryMovementList.size()}
587                                    <br />
588                                </g:if>
589                                <span class="button">
590                                    <g:actionSubmit value="Add" action="create"  class="add"/>
591                                </span>
592                            </div>
593                        </g:form>
594
595                    </richui:tabContent>
596<!-- End Inventory tab -->
597
598<!-- Start Sub Task tab -->
599                    <richui:tabContent>
600                        <g:if test="${subTaskInstanceTotal >= 1}">
601                            <div class="list">
602                                <table>
603                                    <thead>
604                                        <tr>
605
606                                            <th>Id</th>
607
608                                            <th>Target Start Date</th>
609
610                                            <th>Description</th>
611
612                                            <th>Lead Person</th>
613
614                                            <th>Task Priority</th>
615
616                                            <th>Task Status</th>
617
618                                            <th></th>
619
620                                        </tr>
621                                    </thead>
622                                    <tbody>
623                                    <g:each in="${subTaskInstanceList}" status="i" var="subTaskInstance">
624                                    <tr class="${(i % 2) == 0 ? 'clickableOdd' : 'clickableEven'}" onclick='window.location = "${request.getContextPath()}/taskDetailed/show/${subTaskInstance.id}"'/>
625
626                                            <td>${fieldValue(bean:subTaskInstance, field:'id')}</td>
627
628                                            <td><g:formatDate date="${subTaskInstance.targetStartDate}" format="EEE, dd-MMM-yyyy"/></td>
629
630                                            <td>${subTaskInstance.description}</td>
631
632
633                                            <td>${subTaskInstance.leadPerson}</td>
634
635                                            <td>${subTaskInstance.taskPriority}</td>
636
637                                            <td>${subTaskInstance.taskStatus}</td>
638
639                                            <td>
640                                                <g:link action="show" id="${subTaskInstance.id}">
641                                                    <img  src="${resource(dir:'images/skin',file:'database_go.png')}" alt="Show" />
642                                                </g:link>
643                                            </td>
644
645                                        </tr>
646                                    </g:each>
647                                    </tbody>
648                                </table>
649                            </div>
650
651                            <div class="buttons">
652                                <g:form>
653                                    <input type="hidden" name="id" value="${taskInstance?.id}" />
654                                    <g:if test="${subTaskInstanceTotal > subTaskInstanceMax}">
655                                        Showing ${subTaskInstanceMax} of ${subTaskInstanceTotal}
656                                        <br />
657                                    </g:if>
658                                    <g:else>
659                                        Total ${subTaskInstanceTotal}
660                                        <br />
661                                    </g:else>
662                                    <span class="button"><g:actionSubmit action="listSubTasks" class="table" value="Sortable List" /></span>
663                                </g:form>
664                            </div>
665
666                        </g:if>
667                        <g:else>
668                            <br />
669                            No Sub Tasks.
670                        </g:else>
671
672                    </richui:tabContent>
673<!-- End Sub Task tab -->
674
675                </richui:tabContents>
676            </richui:tabView>
677
678        </div>
679    </body>
680</html>
Note: See TracBrowser for help on using the repository browser.