mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
2095 lines
63 KiB
XML
Executable File
2095 lines
63 KiB
XML
Executable File
<?xml version="1.0" encoding="UTF-8"?>
|
|
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0">
|
|
<classes>
|
|
<class id="UserRequest" _delta="define">
|
|
<parent>Ticket</parent>
|
|
<properties>
|
|
<comment><![CDATA[/**
|
|
* Persistent classes for a CMDB
|
|
*
|
|
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
|
* @license http://opensource.org/licenses/AGPL-3.0
|
|
*/]]></comment>
|
|
<category>bizmodel,searchable,requestmgmt</category>
|
|
<abstract>false</abstract>
|
|
<key_type>autoincrement</key_type>
|
|
<db_table>ticket_request</db_table>
|
|
<db_key_field>id</db_key_field>
|
|
<db_final_class_field/>
|
|
<naming>
|
|
<attributes>
|
|
<attribute id="ref"/>
|
|
</attributes>
|
|
</naming>
|
|
<fields_semantic>
|
|
<state_attribute>status</state_attribute>
|
|
</fields_semantic>
|
|
<style>
|
|
<icon>images/user-request.svg</icon>
|
|
<main_color>$ibo-color-blue-800</main_color>
|
|
</style>
|
|
<reconciliation>
|
|
<attributes>
|
|
<attribute id="ref"/>
|
|
</attributes>
|
|
</reconciliation>
|
|
<order>
|
|
<columns>
|
|
<column id="ref" ascending="false"/>
|
|
</columns>
|
|
</order>
|
|
</properties>
|
|
<fields>
|
|
<field id="status" xsi:type="AttributeEnum">
|
|
<always_load_in_tables>true</always_load_in_tables>
|
|
<values>
|
|
<value id="new">
|
|
<code>new</code>
|
|
<style>
|
|
<main_color>$ibo-lifecycle-new-state-primary-color</main_color>
|
|
<complementary_color>$ibo-lifecycle-new-state-secondary-color</complementary_color>
|
|
<decoration_classes/>
|
|
</style>
|
|
</value>
|
|
<value id="waiting_for_approval">
|
|
<code>waiting_for_approval</code>
|
|
<style>
|
|
<main_color>$ibo-lifecycle-waiting-state-primary-color</main_color>
|
|
<complementary_color>$ibo-lifecycle-waiting-state-secondary-color</complementary_color>
|
|
<decoration_classes>fas fa-hourglass-half</decoration_classes>
|
|
</style>
|
|
</value>
|
|
<value id="approved">
|
|
<code>approved</code>
|
|
<style>
|
|
<main_color>$ibo-lifecycle-success-state-primary-color</main_color>
|
|
<complementary_color>$ibo-lifecycle-success-state-secondary-color</complementary_color>
|
|
<decoration_classes>fas fa-user-check</decoration_classes>
|
|
</style>
|
|
</value>
|
|
<value id="rejected">
|
|
<code>rejected</code>
|
|
<style>
|
|
<main_color>$ibo-lifecycle-failure-state-primary-color</main_color>
|
|
<complementary_color>$ibo-lifecycle-failure-state-secondary-color</complementary_color>
|
|
<decoration_classes>fas fa-user-times</decoration_classes>
|
|
</style>
|
|
</value>
|
|
<value id="assigned">
|
|
<code>assigned</code>
|
|
<style>
|
|
<main_color>$ibo-lifecycle-neutral-state-primary-color</main_color>
|
|
<complementary_color>$ibo-lifecycle-neutral-state-secondary-color</complementary_color>
|
|
<decoration_classes/>
|
|
</style>
|
|
</value>
|
|
<value id="pending">
|
|
<code>pending</code>
|
|
<style>
|
|
<main_color>$ibo-lifecycle-waiting-state-primary-color</main_color>
|
|
<complementary_color>$ibo-lifecycle-waiting-state-secondary-color</complementary_color>
|
|
<decoration_classes>fas fa-hourglass-half</decoration_classes>
|
|
</style>
|
|
</value>
|
|
<value id="escalated_tto">
|
|
<code>escalated_tto</code>
|
|
<style>
|
|
<main_color>$ibo-lifecycle-failure-state-primary-color</main_color>
|
|
<complementary_color>$ibo-lifecycle-failure-state-secondary-color</complementary_color>
|
|
<decoration_classes>fas fa-fire</decoration_classes>
|
|
</style>
|
|
</value>
|
|
<value id="escalated_ttr">
|
|
<code>escalated_ttr</code>
|
|
<style>
|
|
<main_color>$ibo-lifecycle-failure-state-primary-color</main_color>
|
|
<complementary_color>$ibo-lifecycle-failure-state-secondary-color</complementary_color>
|
|
<decoration_classes>fas fa-fire</decoration_classes>
|
|
</style>
|
|
</value>
|
|
<value id="resolved">
|
|
<code>resolved</code>
|
|
<style>
|
|
<main_color>$ibo-lifecycle-success-state-primary-color</main_color>
|
|
<complementary_color>$ibo-lifecycle-success-state-secondary-color</complementary_color>
|
|
<decoration_classes>fas fa-check</decoration_classes>
|
|
</style>
|
|
</value>
|
|
<value id="closed">
|
|
<code>closed</code>
|
|
<style>
|
|
<main_color>$ibo-lifecycle-frozen-state-primary-color</main_color>
|
|
<complementary_color>$ibo-lifecycle-frozen-state-secondary-color</complementary_color>
|
|
<decoration_classes/>
|
|
</style>
|
|
</value>
|
|
</values>
|
|
<default_style>
|
|
<main_color>$ibo-lifecycle-neutral-state-primary-color</main_color>
|
|
<complementary_color>$ibo-lifecycle-neutral-state-secondary-color</complementary_color>
|
|
<decoration_classes/>
|
|
</default_style>
|
|
<sql>status</sql>
|
|
<default_value>new</default_value>
|
|
<is_null_allowed>false</is_null_allowed>
|
|
</field>
|
|
<field id="request_type" xsi:type="AttributeEnum">
|
|
<values>
|
|
<value id="service_request">
|
|
<code>service_request</code>
|
|
</value>
|
|
</values>
|
|
<sql>request_type</sql>
|
|
<default_value>service_request</default_value>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
<display_style>list</display_style>
|
|
</field>
|
|
<field id="impact" xsi:type="AttributeEnum">
|
|
<values>
|
|
<value id="1">
|
|
<code>1</code>
|
|
</value>
|
|
<value id="2">
|
|
<code>2</code>
|
|
</value>
|
|
<value id="3">
|
|
<code>3</code>
|
|
</value>
|
|
</values>
|
|
<sql>impact</sql>
|
|
<default_value>1</default_value>
|
|
<is_null_allowed>false</is_null_allowed>
|
|
<display_style>list</display_style>
|
|
</field>
|
|
<field id="priority" xsi:type="AttributeEnum">
|
|
<values>
|
|
<value id="1">
|
|
<code>1</code>
|
|
</value>
|
|
<value id="2">
|
|
<code>2</code>
|
|
</value>
|
|
<value id="3">
|
|
<code>3</code>
|
|
</value>
|
|
<value id="4">
|
|
<code>4</code>
|
|
</value>
|
|
</values>
|
|
<dependencies>
|
|
<attribute id="impact"/>
|
|
<attribute id="urgency"/>
|
|
</dependencies>
|
|
<sql>priority</sql>
|
|
<default_value>4</default_value>
|
|
<is_null_allowed>false</is_null_allowed>
|
|
</field>
|
|
<field id="urgency" xsi:type="AttributeEnum">
|
|
<values>
|
|
<value id="1">
|
|
<code>1</code>
|
|
</value>
|
|
<value id="2">
|
|
<code>2</code>
|
|
</value>
|
|
<value id="3">
|
|
<code>3</code>
|
|
</value>
|
|
<value id="4">
|
|
<code>4</code>
|
|
</value>
|
|
</values>
|
|
<sql>urgency</sql>
|
|
<default_value>4</default_value>
|
|
<is_null_allowed>false</is_null_allowed>
|
|
</field>
|
|
<field id="origin" xsi:type="AttributeEnum">
|
|
<values>
|
|
<value id="mail">
|
|
<code>mail</code>
|
|
</value>
|
|
<value id="phone">
|
|
<code>phone</code>
|
|
</value>
|
|
<value id="portal">
|
|
<code>portal</code>
|
|
</value>
|
|
</values>
|
|
<sql>origin</sql>
|
|
<default_value>phone</default_value>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
</field>
|
|
<field id="approver_id" xsi:type="AttributeExternalKey">
|
|
<filter><![CDATA[
|
|
SELECT Person WHERE org_id= :this->org_id
|
|
]]></filter>
|
|
<dependencies>
|
|
<attribute id="org_id"/>
|
|
</dependencies>
|
|
<sql>approver_id</sql>
|
|
<target_class>Person</target_class>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
<on_target_delete>DEL_MANUAL</on_target_delete>
|
|
<allow_target_creation>false</allow_target_creation>
|
|
</field>
|
|
<field id="approver_email" xsi:type="AttributeExternalField">
|
|
<extkey_attcode>approver_id</extkey_attcode>
|
|
<target_attcode>email</target_attcode>
|
|
</field>
|
|
<field id="service_id" xsi:type="AttributeExternalKey">
|
|
<filter><![CDATA[SELECT Service AS s JOIN lnkCustomerContractToService AS l1 ON l1.service_id=s.id JOIN CustomerContract AS cc ON l1.customercontract_id=cc.id WHERE cc.org_id = :this->org_id AND s.status != 'obsolete']]></filter>
|
|
<dependencies>
|
|
<attribute id="org_id"/>
|
|
</dependencies>
|
|
<sql>service_id</sql>
|
|
<target_class>Service</target_class>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
<on_target_delete>DEL_MANUAL</on_target_delete>
|
|
<allow_target_creation>false</allow_target_creation>
|
|
</field>
|
|
<field id="service_name" xsi:type="AttributeExternalField">
|
|
<extkey_attcode>service_id</extkey_attcode>
|
|
<target_attcode>name</target_attcode>
|
|
</field>
|
|
<field id="servicesubcategory_id" xsi:type="AttributeExternalKey">
|
|
<filter><![CDATA[SELECT ServiceSubcategory WHERE service_id = :this->service_id AND request_type = :this->request_type AND status != 'obsolete']]></filter>
|
|
<dependencies>
|
|
<attribute id="service_id"/>
|
|
<attribute id="request_type"/>
|
|
</dependencies>
|
|
<sql>servicesubcategory_id</sql>
|
|
<target_class>ServiceSubcategory</target_class>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
<on_target_delete>DEL_MANUAL</on_target_delete>
|
|
<allow_target_creation>false</allow_target_creation>
|
|
<jointype/>
|
|
</field>
|
|
<field id="servicesubcategory_name" xsi:type="AttributeExternalField">
|
|
<extkey_attcode>servicesubcategory_id</extkey_attcode>
|
|
<target_attcode>name</target_attcode>
|
|
</field>
|
|
<field id="escalation_flag" xsi:type="AttributeEnum">
|
|
<values>
|
|
<value id="yes">
|
|
<code>yes</code>
|
|
</value>
|
|
<value id="no">
|
|
<code>no</code>
|
|
</value>
|
|
</values>
|
|
<sql>escalation_flag</sql>
|
|
<default_value>no</default_value>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
<display_style>list</display_style>
|
|
</field>
|
|
<field id="escalation_reason" xsi:type="AttributeString">
|
|
<sql>escalation_reason</sql>
|
|
<default_value/>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
</field>
|
|
<field id="assignment_date" xsi:type="AttributeDateTime">
|
|
<sql>assignment_date</sql>
|
|
<default_value/>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
</field>
|
|
<field id="resolution_date" xsi:type="AttributeDateTime">
|
|
<sql>resolution_date</sql>
|
|
<default_value/>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
</field>
|
|
<field id="last_pending_date" xsi:type="AttributeDateTime">
|
|
<sql>last_pending_date</sql>
|
|
<default_value/>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
</field>
|
|
<field id="cumulatedpending" xsi:type="AttributeStopWatch">
|
|
<states>
|
|
<state id="pending"/>
|
|
</states>
|
|
<working_time/>
|
|
<thresholds/>
|
|
<goal/>
|
|
</field>
|
|
<field id="tto" xsi:type="AttributeStopWatch">
|
|
<always_load_in_tables>true</always_load_in_tables>
|
|
<states>
|
|
<state id="new"/>
|
|
<state id="escalated_tto"/>
|
|
<state id="approved"/>
|
|
</states>
|
|
<working_time/>
|
|
<goal>ResponseTicketTTO</goal>
|
|
<thresholds>
|
|
<threshold id="75">
|
|
<highlight>
|
|
<code>warning</code>
|
|
<persistent>false</persistent>
|
|
</highlight>
|
|
<actions>
|
|
</actions>
|
|
</threshold>
|
|
<threshold id="100">
|
|
<highlight>
|
|
<code>critical</code>
|
|
<persistent>false</persistent>
|
|
</highlight>
|
|
<actions>
|
|
<action>
|
|
<verb>ApplyStimulus</verb>
|
|
<params>
|
|
<param>ev_timeout</param>
|
|
</params>
|
|
</action>
|
|
</actions>
|
|
</threshold>
|
|
</thresholds>
|
|
</field>
|
|
<field id="ttr" xsi:type="AttributeStopWatch">
|
|
<always_load_in_tables>true</always_load_in_tables>
|
|
<states>
|
|
<state id="new"/>
|
|
<state id="escalated_tto"/>
|
|
<state id="assigned"/>
|
|
<state id="approved"/>
|
|
<state id="escalated_ttr"/>
|
|
</states>
|
|
<working_time/>
|
|
<goal>ResponseTicketTTR</goal>
|
|
<thresholds>
|
|
<threshold id="75">
|
|
<highlight>
|
|
<code>warning</code>
|
|
<persistent>false</persistent>
|
|
</highlight>
|
|
<actions>
|
|
</actions>
|
|
</threshold>
|
|
<threshold id="100">
|
|
<highlight>
|
|
<code>critical</code>
|
|
<persistent>false</persistent>
|
|
</highlight>
|
|
<actions>
|
|
<action>
|
|
<verb>ApplyStimulus</verb>
|
|
<params>
|
|
<param>ev_timeout</param>
|
|
</params>
|
|
</action>
|
|
</actions>
|
|
</threshold>
|
|
</thresholds>
|
|
</field>
|
|
<field id="tto_escalation_deadline" xsi:type="AttributeSubItem">
|
|
<target_attcode>tto</target_attcode>
|
|
<item_code>100_deadline</item_code>
|
|
</field>
|
|
<field id="sla_tto_passed" xsi:type="AttributeSubItem">
|
|
<target_attcode>tto</target_attcode>
|
|
<item_code>100_passed</item_code>
|
|
</field>
|
|
<field id="sla_tto_over" xsi:type="AttributeSubItem">
|
|
<target_attcode>tto</target_attcode>
|
|
<item_code>100_overrun</item_code>
|
|
</field>
|
|
<field id="ttr_escalation_deadline" xsi:type="AttributeSubItem">
|
|
<target_attcode>ttr</target_attcode>
|
|
<item_code>100_deadline</item_code>
|
|
</field>
|
|
<field id="sla_ttr_passed" xsi:type="AttributeSubItem">
|
|
<target_attcode>ttr</target_attcode>
|
|
<item_code>100_passed</item_code>
|
|
</field>
|
|
<field id="sla_ttr_over" xsi:type="AttributeSubItem">
|
|
<target_attcode>ttr</target_attcode>
|
|
<item_code>100_overrun</item_code>
|
|
</field>
|
|
<field id="time_spent" xsi:type="AttributeDuration">
|
|
<sql>time_spent</sql>
|
|
<default_value/>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
</field>
|
|
<field id="resolution_code" xsi:type="AttributeEnum">
|
|
<values>
|
|
<value id="assistance">
|
|
<code>assistance</code>
|
|
</value>
|
|
<value id="other">
|
|
<code>other</code>
|
|
</value>
|
|
<value id="software patch">
|
|
<code>software patch</code>
|
|
</value>
|
|
<value id="training">
|
|
<code>training</code>
|
|
</value>
|
|
<value id="hardware repair">
|
|
<code>hardware repair</code>
|
|
</value>
|
|
<value id="system update">
|
|
<code>system update</code>
|
|
</value>
|
|
<value id="bug fixed">
|
|
<code>bug fixed</code>
|
|
</value>
|
|
</values>
|
|
<sql>resolution_code</sql>
|
|
<default_value>assistance</default_value>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
</field>
|
|
<field id="solution" xsi:type="AttributeText">
|
|
<sql>solution</sql>
|
|
<default_value/>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
</field>
|
|
<field id="pending_reason" xsi:type="AttributeText">
|
|
<sql>pending_reason</sql>
|
|
<default_value/>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
</field>
|
|
<field id="parent_request_id" xsi:type="AttributeExternalKey">
|
|
<filter><![CDATA[SELECT UserRequest WHERE id != :this->id AND status NOT IN ('rejected','resolved','closed')]]></filter>
|
|
<dependencies>
|
|
</dependencies>
|
|
<sql>parent_request_id</sql>
|
|
<target_class>UserRequest</target_class>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
<on_target_delete>DEL_MANUAL</on_target_delete>
|
|
</field>
|
|
<field id="parent_request_ref" xsi:type="AttributeExternalField">
|
|
<extkey_attcode>parent_request_id</extkey_attcode>
|
|
<target_attcode>ref</target_attcode>
|
|
</field>
|
|
<field id="parent_incident_id" xsi:type="AttributeExternalKey">
|
|
<filter><![CDATA[SELECT Incident WHERE status != "closed"]]></filter>
|
|
<sql>parent_incident_id</sql>
|
|
<target_class>Incident</target_class>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
<on_target_delete>DEL_MANUAL</on_target_delete>
|
|
</field>
|
|
<field id="parent_incident_ref" xsi:type="AttributeExternalField">
|
|
<extkey_attcode>parent_incident_id</extkey_attcode>
|
|
<target_attcode>ref</target_attcode>
|
|
</field>
|
|
<field id="parent_problem_id" xsi:type="AttributeExternalKey">
|
|
<sql>parent_problem_id</sql>
|
|
<target_class>Problem</target_class>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
<on_target_delete>DEL_MANUAL</on_target_delete>
|
|
</field>
|
|
<field id="parent_problem_ref" xsi:type="AttributeExternalField">
|
|
<extkey_attcode>parent_problem_id</extkey_attcode>
|
|
<target_attcode>ref</target_attcode>
|
|
</field>
|
|
<field id="parent_change_id" xsi:type="AttributeExternalKey">
|
|
<filter><![CDATA[SELECT Change WHERE status != "closed"]]></filter>
|
|
<sql>parent_change_id</sql>
|
|
<target_class>Change</target_class>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
<on_target_delete>DEL_MANUAL</on_target_delete>
|
|
</field>
|
|
<field id="parent_change_ref" xsi:type="AttributeExternalField">
|
|
<extkey_attcode>parent_change_id</extkey_attcode>
|
|
<target_attcode>ref</target_attcode>
|
|
</field>
|
|
<field id="related_request_list" xsi:type="AttributeLinkedSet">
|
|
<linked_class>UserRequest</linked_class>
|
|
<ext_key_to_me>parent_request_id</ext_key_to_me>
|
|
<edit_mode>add_remove</edit_mode>
|
|
<count_min>0</count_min>
|
|
<count_max>0</count_max>
|
|
</field>
|
|
<field id="public_log" xsi:type="AttributeCaseLog">
|
|
<sql>public_log</sql>
|
|
<default_value/>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
</field>
|
|
<field id="user_satisfaction" xsi:type="AttributeEnum">
|
|
<values>
|
|
<value id="1">
|
|
<code>1</code>
|
|
</value>
|
|
<value id="2">
|
|
<code>2</code>
|
|
</value>
|
|
<value id="3">
|
|
<code>3</code>
|
|
</value>
|
|
<value id="4">
|
|
<code>4</code>
|
|
</value>
|
|
</values>
|
|
<sql>user_satisfaction</sql>
|
|
<default_value>1</default_value>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
</field>
|
|
<field id="user_comment" xsi:type="AttributeText">
|
|
<sql>user_commment</sql>
|
|
<default_value/>
|
|
<is_null_allowed>true</is_null_allowed>
|
|
</field>
|
|
</fields>
|
|
<lifecycle>
|
|
<highlight_scale>
|
|
<item id="warning">
|
|
<rank>1</rank>
|
|
<color>HIGHLIGHT_CLASS_WARNING</color>
|
|
<icon>images/user-request-deadline.svg</icon>
|
|
</item>
|
|
<item id="critical">
|
|
<rank>2</rank>
|
|
<color>HIGHLIGHT_CLASS_CRITICAL</color>
|
|
<icon>images/user-request-escalated.svg</icon>
|
|
</item>
|
|
<item id="closed">
|
|
<rank>3</rank>
|
|
<color>HIGHLIGHT_CLASS_NONE</color>
|
|
<icon>images/user-request-closed.svg</icon>
|
|
</item>
|
|
</highlight_scale>
|
|
<stimuli>
|
|
<stimulus id="ev_assign" xsi:type="StimulusUserAction"/>
|
|
<stimulus id="ev_reassign" xsi:type="StimulusUserAction"/>
|
|
<stimulus id="ev_approve" xsi:type="StimulusUserAction"/>
|
|
<stimulus id="ev_reject" xsi:type="StimulusUserAction"/>
|
|
<stimulus id="ev_pending" xsi:type="StimulusUserAction"/>
|
|
<stimulus id="ev_timeout" xsi:type="StimulusInternal"/>
|
|
<stimulus id="ev_autoresolve" xsi:type="StimulusInternal"/>
|
|
<stimulus id="ev_autoclose" xsi:type="StimulusInternal"/>
|
|
<stimulus id="ev_resolve" xsi:type="StimulusUserAction"/>
|
|
<stimulus id="ev_close" xsi:type="StimulusUserAction"/>
|
|
<stimulus id="ev_reopen" xsi:type="StimulusUserAction"/>
|
|
<stimulus id="ev_wait_for_approval" xsi:type="StimulusUserAction"/>
|
|
</stimuli>
|
|
<states>
|
|
<state id="new">
|
|
<flags>
|
|
<attribute id="ref">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="org_id">
|
|
<mandatory/>
|
|
</attribute>
|
|
<attribute id="caller_id">
|
|
<mandatory/>
|
|
</attribute>
|
|
<attribute id="team_id">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="agent_id">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="priority">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="start_date">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="last_update">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="close_date">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="approver_id">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="request_type">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="escalation_flag">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="escalation_reason">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="assignment_date">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="resolution_date">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="last_pending_date">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="time_spent">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="resolution_code">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="solution">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="pending_reason">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="user_satisfaction">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="user_comment">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="tto_escalation_deadline">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="sla_tto_passed">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="sla_tto_over">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="sla_ttr_passed">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="ttr_escalation_deadline">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="sla_ttr_over">
|
|
<hidden/>
|
|
</attribute>
|
|
</flags>
|
|
<transitions>
|
|
<transition id="ev_assign">
|
|
<target>assigned</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">assignment_date</param>
|
|
</params>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
<transition id="ev_timeout">
|
|
<target>escalated_tto</target>
|
|
<actions/>
|
|
</transition>
|
|
<transition id="ev_wait_for_approval">
|
|
<target>waiting_for_approval</target>
|
|
<actions/>
|
|
</transition>
|
|
<transition id="ev_autoresolve">
|
|
<target>resolved</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">resolution_date</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>SetElapsedTime</verb>
|
|
<params>
|
|
<param xsi:type="attcode">time_spent</param>
|
|
<param xsi:type="attcode">start_date</param>
|
|
<param xsi:type="string">DefaultWorkingTimeComputer</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>ResolveChildTickets</verb>
|
|
<params/>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
</transitions>
|
|
</state>
|
|
<state id="escalated_tto">
|
|
<highlight>
|
|
<code>critical</code>
|
|
</highlight>
|
|
<inherit_flags_from>new</inherit_flags_from>
|
|
<flags>
|
|
<attribute id="team_id"/>
|
|
</flags>
|
|
<transitions>
|
|
<transition id="ev_assign">
|
|
<target>assigned</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">assignment_date</param>
|
|
</params>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
</transitions>
|
|
</state>
|
|
<state id="assigned">
|
|
<inherit_flags_from>new</inherit_flags_from>
|
|
<flags>
|
|
<attribute id="team_id">
|
|
<mandatory/>
|
|
<must_prompt/>
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="agent_id">
|
|
<mandatory/>
|
|
<must_prompt/>
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="approver_id">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="assignment_date">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="tto_escalation_deadline">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="sla_tto_passed">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="sla_tto_over">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="ttr_escalation_deadline">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="caller_id"/>
|
|
<attribute id="escalation_flag"/>
|
|
<attribute id="escalation_reason"/>
|
|
</flags>
|
|
<transitions>
|
|
<transition id="ev_pending">
|
|
<target>pending</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">last_pending_date</param>
|
|
</params>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
<transition id="ev_resolve">
|
|
<target>resolved</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">resolution_date</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>SetElapsedTime</verb>
|
|
<params>
|
|
<param xsi:type="attcode">time_spent</param>
|
|
<param xsi:type="attcode">start_date</param>
|
|
<param xsi:type="string">DefaultWorkingTimeComputer</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>ResolveChildTickets</verb>
|
|
<params/>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
<transition id="ev_reassign">
|
|
<target>assigned</target>
|
|
<flags>
|
|
<attribute id="agent_id">
|
|
<must_change/>
|
|
</attribute>
|
|
<attribute id="team_id">
|
|
<must_prompt/>
|
|
</attribute>
|
|
</flags>
|
|
<actions/>
|
|
</transition>
|
|
<transition id="ev_timeout">
|
|
<target>escalated_ttr</target>
|
|
<actions/>
|
|
</transition>
|
|
<transition id="ev_autoresolve">
|
|
<target>resolved</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">resolution_date</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>SetElapsedTime</verb>
|
|
<params>
|
|
<param xsi:type="attcode">time_spent</param>
|
|
<param xsi:type="attcode">start_date</param>
|
|
<param xsi:type="string">DefaultWorkingTimeComputer</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>ResolveChildTickets</verb>
|
|
<params/>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
</transitions>
|
|
</state>
|
|
<state id="escalated_ttr">
|
|
<highlight>
|
|
<code>critical</code>
|
|
</highlight>
|
|
<inherit_flags_from>assigned</inherit_flags_from>
|
|
<flags/>
|
|
<transitions>
|
|
<transition id="ev_pending">
|
|
<target>pending</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">last_pending_date</param>
|
|
</params>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
<transition id="ev_resolve">
|
|
<target>resolved</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">resolution_date</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>SetElapsedTime</verb>
|
|
<params>
|
|
<param xsi:type="attcode">time_spent</param>
|
|
<param xsi:type="attcode">start_date</param>
|
|
<param xsi:type="string">DefaultWorkingTimeComputer</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>ResolveChildTickets</verb>
|
|
<params/>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
<transition id="ev_reassign">
|
|
<target>assigned</target>
|
|
<actions/>
|
|
</transition>
|
|
<transition id="ev_autoresolve">
|
|
<target>resolved</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">resolution_date</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>SetElapsedTime</verb>
|
|
<params>
|
|
<param xsi:type="attcode">time_spent</param>
|
|
<param xsi:type="attcode">start_date</param>
|
|
<param xsi:type="string">DefaultWorkingTimeComputer</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>ResolveChildTickets</verb>
|
|
<params/>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
</transitions>
|
|
</state>
|
|
<state id="waiting_for_approval">
|
|
<inherit_flags_from>new</inherit_flags_from>
|
|
<flags>
|
|
<attribute id="approver_id">
|
|
<must_prompt/>
|
|
</attribute>
|
|
<attribute id="team_id"/>
|
|
</flags>
|
|
<transitions>
|
|
<transition id="ev_approve">
|
|
<target>approved</target>
|
|
<actions/>
|
|
</transition>
|
|
<transition id="ev_reject">
|
|
<target>rejected</target>
|
|
<actions/>
|
|
</transition>
|
|
</transitions>
|
|
</state>
|
|
<state id="approved">
|
|
<inherit_flags_from>waiting_for_approval</inherit_flags_from>
|
|
<flags>
|
|
<attribute id="approver_id">
|
|
<read_only/>
|
|
</attribute>
|
|
</flags>
|
|
<transitions>
|
|
<transition id="ev_timeout">
|
|
<target>escalated_tto</target>
|
|
<actions/>
|
|
</transition>
|
|
<transition id="ev_assign">
|
|
<target>assigned</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">assignment_date</param>
|
|
</params>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
<transition id="ev_autoresolve">
|
|
<target>resolved</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">resolution_date</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>SetElapsedTime</verb>
|
|
<params>
|
|
<param xsi:type="attcode">time_spent</param>
|
|
<param xsi:type="attcode">start_date</param>
|
|
<param xsi:type="string">DefaultWorkingTimeComputer</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>ResolveChildTickets</verb>
|
|
<params/>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
</transitions>
|
|
</state>
|
|
<state id="rejected">
|
|
<inherit_flags_from>new</inherit_flags_from>
|
|
<flags>
|
|
<attribute id="tto_escalation_deadline">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="team_id"/>
|
|
</flags>
|
|
<transitions>
|
|
<transition id="ev_reopen">
|
|
<target>new</target>
|
|
<actions/>
|
|
</transition>
|
|
</transitions>
|
|
</state>
|
|
<state id="pending">
|
|
<inherit_flags_from>assigned</inherit_flags_from>
|
|
<flags>
|
|
<attribute id="last_pending_date">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="pending_reason">
|
|
<mandatory/>
|
|
<must_prompt/>
|
|
</attribute>
|
|
<attribute id="ttr_escalation_deadline">
|
|
<hidden/>
|
|
</attribute>
|
|
</flags>
|
|
<transitions>
|
|
<transition id="ev_assign">
|
|
<target>assigned</target>
|
|
<actions>
|
|
</actions>
|
|
</transition>
|
|
<transition id="ev_autoresolve">
|
|
<target>resolved</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">resolution_date</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>SetElapsedTime</verb>
|
|
<params>
|
|
<param xsi:type="attcode">time_spent</param>
|
|
<param xsi:type="attcode">start_date</param>
|
|
<param xsi:type="string">DefaultWorkingTimeComputer</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>ResolveChildTickets</verb>
|
|
<params/>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
</transitions>
|
|
</state>
|
|
<state id="resolved">
|
|
<highlight>
|
|
<code>closed</code>
|
|
</highlight>
|
|
<inherit_flags_from>assigned</inherit_flags_from>
|
|
<flags>
|
|
<attribute id="caller_id">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="origin">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="impact">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="urgency">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="service_id">
|
|
<mandatory/>
|
|
<must_prompt/>
|
|
</attribute>
|
|
<attribute id="servicesubcategory_id">
|
|
<must_prompt/>
|
|
</attribute>
|
|
<attribute id="escalation_flag">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="escalation_reason">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="parent_request_id">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="parent_change_id">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="parent_problem_id">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="title">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="description">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="org_id">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="team_id">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="agent_id">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="resolution_date">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="time_spent">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="resolution_code">
|
|
<mandatory/>
|
|
<must_prompt/>
|
|
</attribute>
|
|
<attribute id="solution">
|
|
<mandatory/>
|
|
<must_prompt/>
|
|
</attribute>
|
|
<attribute id="pending_reason">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="sla_ttr_passed">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="ttr_escalation_deadline">
|
|
<hidden/>
|
|
</attribute>
|
|
<attribute id="sla_ttr_over">
|
|
<read_only/>
|
|
</attribute>
|
|
</flags>
|
|
<transitions>
|
|
<transition id="ev_close">
|
|
<target>closed</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">close_date</param>
|
|
</params>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
<transition id="ev_reopen">
|
|
<target>assigned</target>
|
|
<actions>
|
|
</actions>
|
|
</transition>
|
|
<transition id="ev_autoresolve">
|
|
<target>resolved</target>
|
|
<actions>
|
|
<action>
|
|
<verb>SetCurrentDate</verb>
|
|
<params>
|
|
<param xsi:type="attcode">resolution_date</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>SetElapsedTime</verb>
|
|
<params>
|
|
<param xsi:type="attcode">time_spent</param>
|
|
<param xsi:type="attcode">start_date</param>
|
|
<param xsi:type="string">DefaultWorkingTimeComputer</param>
|
|
</params>
|
|
</action>
|
|
<action>
|
|
<verb>ResolveChildTickets</verb>
|
|
<params/>
|
|
</action>
|
|
</actions>
|
|
</transition>
|
|
</transitions>
|
|
</state>
|
|
<state id="closed">
|
|
<highlight>
|
|
<code>closed</code>
|
|
</highlight>
|
|
<inherit_flags_from>resolved</inherit_flags_from>
|
|
<flags>
|
|
<attribute id="private_log">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="public_log">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="functionalcis_list">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="contacts_list">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="service_id">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="servicesubcategory_id">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="close_date">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="resolution_code">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="solution">
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="pending_reason">
|
|
<read_only/>
|
|
<read_only/>
|
|
</attribute>
|
|
<attribute id="user_satisfaction">
|
|
<read_only/>
|
|
<must_prompt/>
|
|
</attribute>
|
|
<attribute id="user_comment">
|
|
<read_only/>
|
|
<must_prompt/>
|
|
</attribute>
|
|
</flags>
|
|
<transitions/>
|
|
</state>
|
|
</states>
|
|
</lifecycle>
|
|
<methods>
|
|
<method id="GetTicketRefFormat">
|
|
<static>true</static>
|
|
<access>public</access>
|
|
<type>Overload-DBObject</type>
|
|
<code><![CDATA[
|
|
public static function GetTicketRefFormat()
|
|
{
|
|
return 'R-%06d';
|
|
}
|
|
]]></code>
|
|
</method>
|
|
<method id="SetAssignedDate">
|
|
<comment><![CDATA[/**
|
|
* To be deprecated: use SetCurrentDate() instead
|
|
* @return void
|
|
*/]]></comment>
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>LifecycleAction</type>
|
|
<code><![CDATA[ public function SetAssignedDate($sStimulusCode)
|
|
{
|
|
$this->Set('assignment_date', time());
|
|
return true;
|
|
}]]></code>
|
|
</method>
|
|
<method id="SetLastPendingDate">
|
|
<comment><![CDATA[/**
|
|
* To be deprecated: use SetCurrentDate() instead
|
|
* @return void
|
|
*/]]></comment>
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>LifecycleAction</type>
|
|
<code><![CDATA[ public function SetLastPendingDate($sStimulusCode)
|
|
{
|
|
$this->Set('last_pending_date', time());
|
|
return true;
|
|
}]]></code>
|
|
</method>
|
|
<method id="SetResolveDate">
|
|
<comment><![CDATA[/**
|
|
* To be deprecated: use SetCurrentDate() and SetElapsedTime() instead
|
|
* @return void
|
|
*/]]></comment>
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>LifecycleAction</type>
|
|
<code><![CDATA[ public function SetResolveDate($sStimulusCode)
|
|
{
|
|
$this->Set('resolution_date', time());
|
|
$iTimeSpent = time() - AttributeDateTime::GetAsUnixSeconds($this->Get('start_date'));
|
|
$this->Set('time_spent', $iTimeSpent);
|
|
return true;
|
|
}]]></code>
|
|
</method>
|
|
<method id="SetClosureDate">
|
|
<comment><![CDATA[/**
|
|
* To be deprecated: use SetCurrentDate() instead
|
|
* @return void
|
|
*/]]></comment>
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>LifecycleAction</type>
|
|
<code><![CDATA[ public function SetClosureDate($sStimulusCode)
|
|
{
|
|
$this->Set('close_date', time());
|
|
return true;
|
|
}]]></code>
|
|
</method>
|
|
<method id="SetApprover">
|
|
<comment><![CDATA[/**
|
|
* To be deprecated: use SetCurrentUser() instead
|
|
* @return void
|
|
*/]]></comment>
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>LifecycleAction</type>
|
|
<code><![CDATA[ public function SetApprover($sStimulusCode)
|
|
{
|
|
$this->Set('approver_id', UserRights::GetUserId());
|
|
return true;
|
|
}]]></code>
|
|
</method>
|
|
<method id="DoCheckToWrite">
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>Overload-DBObject</type>
|
|
<code><![CDATA[public function DoCheckToWrite()
|
|
{
|
|
parent::DoCheckToWrite();
|
|
if (!$this->IsNew() && ($this->Get('parent_request_id') == $this->GetKey()))
|
|
{
|
|
$this->m_aCheckIssues[] = Dict::Format('Class:UserRequest/Error:CannotAssignParentRequestIdToSelf');
|
|
}
|
|
}]]></code>
|
|
</method>
|
|
<method id="ComputePriority">
|
|
<comment>/** Compute the priority of the ticket based on its impact and urgency
|
|
* @return integer The priority of the ticket 1(high) .. 3(low)
|
|
*/</comment>
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>LifecycleAction</type>
|
|
<code><![CDATA[ public function ComputePriority()
|
|
{
|
|
// priority[impact][urgency]
|
|
$aPriorities = array(
|
|
// a department
|
|
1 => array(
|
|
1 => 1,
|
|
2 => 1,
|
|
3 => 2,
|
|
4 => 4,
|
|
),
|
|
// a group
|
|
2 => array(
|
|
1 => 1,
|
|
2 => 2,
|
|
3 => 3,
|
|
4 => 4,
|
|
),
|
|
// a person
|
|
3 => array(
|
|
1 => 2,
|
|
2 => 3,
|
|
3 => 3,
|
|
4 => 4,
|
|
),
|
|
);
|
|
$iPriority = 1;
|
|
if (isset($aPriorities[(int)$this->Get('impact')]) && isset($aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')]))
|
|
{
|
|
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
|
|
}
|
|
return $iPriority;
|
|
}]]></code>
|
|
</method>
|
|
<method id="ComputeValues">
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>Overload-DBObject</type>
|
|
<code><![CDATA[ public function ComputeValues()
|
|
{
|
|
|
|
// Compute the priority of the ticket
|
|
$this->Set('priority', $this->ComputePriority());
|
|
|
|
return parent::ComputeValues();
|
|
}]]></code>
|
|
</method>
|
|
<method id="DisplayBareRelations">
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>Overload-cmdbAbstractObject</type>
|
|
<code><![CDATA[ function DisplayBareRelations(WebPage $oPage, $bEditMode = false)
|
|
{
|
|
parent::DisplayBareRelations($oPage, $bEditMode);
|
|
|
|
if (MetaModel::IsValidClass('KnownError'))
|
|
{
|
|
//Search for known errors
|
|
$oPage->SetCurrentTab('Class:UserRequest:KnownErrorList');
|
|
$iTicketID = $this->GetKey();;
|
|
$oKnownErrorSet = new CMDBObjectSet(DBObjectSearch::FromOQL("SELECT KnownError AS ke JOIN lnkErrorToFunctionalCI AS l1 ON l1.error_id=ke.id JOIN FunctionalCI AS ci ON l1.functionalci_id=ci.id JOIN lnkFunctionalCIToTicket AS l2 ON l2.functionalci_id=ci.id WHERE l2.ticket_id=$iTicketID"));
|
|
$iNumberKE=$oKnownErrorSet->count();
|
|
if ($iNumberKE > 0)
|
|
{
|
|
$oPage->SetCurrentTab('Class:UserRequest:KnownErrorList', Dict::S('Class:UserRequest:KnownErrorList')." ($iNumberKE)");
|
|
}
|
|
else
|
|
{
|
|
$oPage->SetCurrentTab('Class:UserRequest:KnownErrorList');
|
|
}
|
|
self::DisplaySet($oPage, $oKnownErrorSet, array ('menu' => false));
|
|
}
|
|
}]]></code>
|
|
</method>
|
|
<method id="resolveChilds">
|
|
<comment><![CDATA[/**
|
|
* To be deprecated: use ResolveChildTickets() instead
|
|
*/]]></comment>
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>LifecycleAction</type>
|
|
<code><![CDATA[ public function resolveChilds($sStimulusCode)
|
|
{
|
|
|
|
$sOQL = "SELECT UserRequest WHERE parent_request_id=:ticket";
|
|
$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL),
|
|
array(),
|
|
array(
|
|
'ticket' => $this->GetKey(),
|
|
)
|
|
);
|
|
while($oRequest = $oChildRequestSet->Fetch())
|
|
{
|
|
if ( $oRequest->Get('status') != 'resolved')
|
|
{
|
|
$oRequest->set('servicesubcategory_id',$this->Get('servicesubcategory_id'));
|
|
$oRequest->set('service_id',$this->Get('service_id'));
|
|
$oRequest->set('team_id',$this->Get('team_id'));
|
|
$oRequest->set('agent_id',$this->Get('agent_id'));
|
|
$oRequest->set('resolution_code',$this->Get('resolution_code'));
|
|
$oRequest->set('solution','Automatically resolved by request:[[UserRequest:'.$this->Get('ref').']]');
|
|
$oRequest->ApplyStimulus('ev_autoresolve');
|
|
$oRequest->DBUpdate();
|
|
}
|
|
}
|
|
return true;
|
|
|
|
}]]></code>
|
|
</method>
|
|
<method id="ResolveChildTickets">
|
|
<comment><![CDATA[/**
|
|
* Cascade the resolution to child User Request
|
|
* @return true (returning false would stop the ongoing transition)
|
|
*/]]></comment>
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>LifecycleAction</type>
|
|
<arguments>
|
|
</arguments>
|
|
<code><![CDATA[ public function ResolveChildTickets()
|
|
{
|
|
static $aTickets = array(); // prevent infinite recursion
|
|
|
|
// Automatically resolve child requests
|
|
$sOQL = "SELECT UserRequest WHERE parent_request_id = :ticket AND status != 'resolved'";
|
|
$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('ticket' => $this->GetKey()));
|
|
while($oRequest = $oChildRequestSet->Fetch())
|
|
{
|
|
if (!array_key_exists($oRequest->GetKey(), $aTickets))
|
|
{
|
|
$aTickets[$oRequest->GetKey()] = true;
|
|
$oRequest->ResolveFrom($this);
|
|
}
|
|
}
|
|
return true;
|
|
}]]></code>
|
|
</method>
|
|
<method id="ResolveFrom">
|
|
<comment><![CDATA[/**
|
|
* Resolve the ticket from another resolved ticket
|
|
* @return void
|
|
*/]]></comment>
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>Internal</type>
|
|
<code><![CDATA[ public function ResolveFrom($oParentTicket)
|
|
{
|
|
if ($this->Get('status') != 'resolved' && $this->Get('status') != 'closed' )
|
|
{
|
|
$aDummy = array();
|
|
$aExcludedAttributes = array('team_id', 'agent_id');
|
|
foreach(MetaModel::ListAttributeDefs(get_class($this)) as $sAttCode => $oAttDef)
|
|
{
|
|
// Exclude inter dependant attributes to keep consistency
|
|
if(in_array($sAttCode, $aExcludedAttributes))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if (($this->GetAttributeFlags($sAttCode, $aDummy, 'resolved') & OPT_ATT_MANDATORY) && empty($this->Get($sAttCode)))
|
|
{
|
|
$this->Set($sAttCode, $oParentTicket->Get($sAttCode));
|
|
}
|
|
}
|
|
if (($this->Get('team_id') == 0) || ($this->Get('agent_id') ==0))
|
|
{
|
|
$this->Set('team_id', $oParentTicket->Get('team_id'));
|
|
$this->Set('agent_id', $oParentTicket->Get('agent_id'));
|
|
}
|
|
$sParent = '[['.get_class($oParentTicket).':'.$oParentTicket->Get('ref').']]';
|
|
$this->Set('solution', Dict::Format('Tickets:ResolvedFrom', $sParent, MetaModel::GetName(get_class($oParentTicket))));
|
|
$this->ApplyStimulus('ev_autoresolve');
|
|
$this->DBUpdate();
|
|
}
|
|
}]]></code>
|
|
</method>
|
|
<method id="UpdateChildRequestLog">
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>LifecycleAction</type>
|
|
<code><![CDATA[ public function UpdateChildRequestLog()
|
|
{
|
|
$oLog = $this->Get('public_log');
|
|
$sLogPublic = $oLog->GetModifiedEntry('html');
|
|
if ($sLogPublic != '')
|
|
{
|
|
$sOQL = "SELECT UserRequest WHERE parent_request_id=:ticket";
|
|
$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL),
|
|
array(),
|
|
array(
|
|
'ticket' => $this->GetKey(),
|
|
)
|
|
);
|
|
while($oRequest = $oChildRequestSet->Fetch())
|
|
{
|
|
$oRequest->set('public_log',$sLogPublic);
|
|
$oRequest->DBUpdate();
|
|
}
|
|
|
|
}
|
|
$oLog = $this->Get('private_log');
|
|
$sLogPrivate = $oLog->GetModifiedEntry('html');
|
|
if ($sLogPrivate != '')
|
|
{
|
|
$sOQL = "SELECT UserRequest WHERE parent_request_id=:ticket";
|
|
$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL),
|
|
array(),
|
|
array(
|
|
'ticket' => $this->GetKey(),
|
|
)
|
|
);
|
|
while($oRequest = $oChildRequestSet->Fetch())
|
|
{
|
|
$oRequest->set('private_log',$sLogPrivate);
|
|
$oRequest->DBUpdate();
|
|
}
|
|
}
|
|
return true;
|
|
|
|
}]]></code>
|
|
</method>
|
|
<method id="ComputeImpactedItems">
|
|
<static>false</static>
|
|
<access>public</access>
|
|
<type>LifecycleAction</type>
|
|
<code><![CDATA[
|
|
public function ComputeImpactedItems()
|
|
{
|
|
// This method is kept for backward compatibility
|
|
// in case a delta redefines it, but you may call
|
|
// UpdateImpactedItems directly
|
|
$this->UpdateImpactedItems();
|
|
}]]></code>
|
|
</method>
|
|
<method id="OnInsert">
|
|
<static>false</static>
|
|
<access>protected</access>
|
|
<type>Overload-DBObject</type>
|
|
<code><![CDATA[
|
|
protected function OnInsert()
|
|
{
|
|
parent::OnInsert();
|
|
$this->ComputeImpactedItems();
|
|
$this->SetIfNull('last_update', time());
|
|
$this->SetIfNull('start_date', time());
|
|
}]]></code>
|
|
</method>
|
|
<method id="OnUpdate">
|
|
<static>false</static>
|
|
<access>protected</access>
|
|
<type>Overload-DBObject</type>
|
|
<code><![CDATA[
|
|
protected function OnUpdate()
|
|
{
|
|
parent::OnUpdate();
|
|
$aChanges = $this->ListChanges();
|
|
if (array_key_exists('functionalcis_list', $aChanges))
|
|
{
|
|
$this->UpdateImpactedItems();
|
|
}
|
|
$this->Set('last_update', time());
|
|
$this->UpdateChildRequestLog();
|
|
}]]></code>
|
|
</method>
|
|
</methods>
|
|
<presentation>
|
|
<details>
|
|
<items>
|
|
<item id="functionalcis_list">
|
|
<rank>10</rank>
|
|
</item>
|
|
<item id="contacts_list">
|
|
<rank>20</rank>
|
|
</item>
|
|
<item id="related_request_list">
|
|
<rank>30</rank>
|
|
</item>
|
|
<item id="workorders_list">
|
|
<rank>40</rank>
|
|
</item>
|
|
<item id="col:col1">
|
|
<rank>50</rank>
|
|
<items>
|
|
<item id="fieldset:Ticket:baseinfo">
|
|
<rank>10</rank>
|
|
<items>
|
|
<item id="org_id">
|
|
<rank>10</rank>
|
|
</item>
|
|
<item id="caller_id">
|
|
<rank>20</rank>
|
|
</item>
|
|
<item id="status">
|
|
<rank>30</rank>
|
|
</item>
|
|
<item id="origin">
|
|
<rank>40</rank>
|
|
</item>
|
|
<item id="title">
|
|
<rank>50</rank>
|
|
</item>
|
|
<item id="description">
|
|
<rank>60</rank>
|
|
</item>
|
|
</items>
|
|
</item>
|
|
<item id="fieldset:Ticket:moreinfo">
|
|
<rank>20</rank>
|
|
<items>
|
|
<item id="service_id">
|
|
<rank>10</rank>
|
|
</item>
|
|
<item id="servicesubcategory_id">
|
|
<rank>20</rank>
|
|
</item>
|
|
<item id="escalation_flag">
|
|
<rank>30</rank>
|
|
</item>
|
|
<item id="escalation_reason">
|
|
<rank>40</rank>
|
|
</item>
|
|
<item id="pending_reason">
|
|
<rank>50</rank>
|
|
</item>
|
|
</items>
|
|
</item>
|
|
</items>
|
|
</item>
|
|
<item id="col:col2">
|
|
<rank>60</rank>
|
|
<items>
|
|
<item id="fieldset:Ticket:Type">
|
|
<rank>10</rank>
|
|
<items>
|
|
<item id="request_type">
|
|
<rank>10</rank>
|
|
</item>
|
|
<item id="impact">
|
|
<rank>20</rank>
|
|
</item>
|
|
<item id="urgency">
|
|
<rank>30</rank>
|
|
</item>
|
|
<item id="priority">
|
|
<rank>40</rank>
|
|
</item>
|
|
</items>
|
|
</item>
|
|
<item id="fieldset:Ticket:contact">
|
|
<rank>20</rank>
|
|
<items>
|
|
<item id="team_id">
|
|
<rank>10</rank>
|
|
</item>
|
|
<item id="agent_id">
|
|
<rank>20</rank>
|
|
</item>
|
|
<item id="approver_id">
|
|
<rank>30</rank>
|
|
</item>
|
|
</items>
|
|
</item>
|
|
<item id="fieldset:Ticket:date">
|
|
<rank>30</rank>
|
|
<items>
|
|
<item id="start_date">
|
|
<rank>10</rank>
|
|
</item>
|
|
<item id="last_update">
|
|
<rank>20</rank>
|
|
</item>
|
|
<item id="assignment_date">
|
|
<rank>30</rank>
|
|
</item>
|
|
<item id="tto_escalation_deadline">
|
|
<rank>40</rank>
|
|
</item>
|
|
<item id="ttr_escalation_deadline">
|
|
<rank>50</rank>
|
|
</item>
|
|
<item id="last_pending_date">
|
|
<rank>60</rank>
|
|
</item>
|
|
<item id="resolution_date">
|
|
<rank>70</rank>
|
|
</item>
|
|
<item id="close_date">
|
|
<rank>80</rank>
|
|
</item>
|
|
</items>
|
|
</item>
|
|
</items>
|
|
</item>
|
|
<item id="col:col3">
|
|
<rank>70</rank>
|
|
<items>
|
|
<item id="fieldset:Ticket:relation">
|
|
<rank>10</rank>
|
|
<items>
|
|
<item id="parent_request_id">
|
|
<rank>10</rank>
|
|
</item>
|
|
<item id="parent_incident_id">
|
|
<rank>20</rank>
|
|
</item>
|
|
<item id="parent_problem_id">
|
|
<rank>30</rank>
|
|
</item>
|
|
<item id="parent_change_id">
|
|
<rank>40</rank>
|
|
</item>
|
|
</items>
|
|
</item>
|
|
<item id="fieldset:Ticket:resolution">
|
|
<rank>20</rank>
|
|
<items>
|
|
<item id="resolution_code">
|
|
<rank>10</rank>
|
|
</item>
|
|
<item id="solution">
|
|
<rank>20</rank>
|
|
</item>
|
|
<item id="time_spent">
|
|
<rank>30</rank>
|
|
</item>
|
|
<item id="user_satisfaction">
|
|
<rank>40</rank>
|
|
</item>
|
|
<item id="user_comment">
|
|
<rank>50</rank>
|
|
</item>
|
|
</items>
|
|
</item>
|
|
<item id="fieldset:Ticket:SLA">
|
|
<rank>30</rank>
|
|
<items>
|
|
<item id="sla_tto_passed">
|
|
<rank>10</rank>
|
|
</item>
|
|
<item id="sla_tto_over">
|
|
<rank>20</rank>
|
|
</item>
|
|
<item id="sla_ttr_passed">
|
|
<rank>30</rank>
|
|
</item>
|
|
<item id="sla_ttr_over">
|
|
<rank>40</rank>
|
|
</item>
|
|
</items>
|
|
</item>
|
|
</items>
|
|
</item>
|
|
<item id="public_log">
|
|
<rank>100</rank>
|
|
</item>
|
|
<item id="private_log">
|
|
<rank>110</rank>
|
|
</item>
|
|
</items>
|
|
</details>
|
|
<search>
|
|
<items>
|
|
<item id="ref">
|
|
<rank>10</rank>
|
|
</item>
|
|
<item id="org_id">
|
|
<rank>20</rank>
|
|
</item>
|
|
<item id="title">
|
|
<rank>30</rank>
|
|
</item>
|
|
<item id="description">
|
|
<rank>40</rank>
|
|
</item>
|
|
<item id="start_date">
|
|
<rank>50</rank>
|
|
</item>
|
|
<item id="resolution_date">
|
|
<rank>70</rank>
|
|
</item>
|
|
<item id="close_date">
|
|
<rank>80</rank>
|
|
</item>
|
|
<item id="status">
|
|
<rank>90</rank>
|
|
</item>
|
|
<item id="operational_status">
|
|
<rank>95</rank>
|
|
</item>
|
|
<item id="caller_id">
|
|
<rank>100</rank>
|
|
</item>
|
|
<item id="origin">
|
|
<rank>110</rank>
|
|
</item>
|
|
<item id="request_type">
|
|
<rank>120</rank>
|
|
</item>
|
|
<item id="impact">
|
|
<rank>130</rank>
|
|
</item>
|
|
<item id="urgency">
|
|
<rank>140</rank>
|
|
</item>
|
|
<item id="priority">
|
|
<rank>150</rank>
|
|
</item>
|
|
<item id="service_id">
|
|
<rank>160</rank>
|
|
</item>
|
|
<item id="servicesubcategory_id">
|
|
<rank>170</rank>
|
|
</item>
|
|
<item id="team_id">
|
|
<rank>180</rank>
|
|
</item>
|
|
<item id="agent_id">
|
|
<rank>190</rank>
|
|
</item>
|
|
<item id="escalation_flag">
|
|
<rank>200</rank>
|
|
</item>
|
|
<item id="resolution_code">
|
|
<rank>210</rank>
|
|
</item>
|
|
<item id="user_satisfaction">
|
|
<rank>220</rank>
|
|
</item>
|
|
<item id="sla_tto_passed">
|
|
<rank>230</rank>
|
|
</item>
|
|
<item id="sla_ttr_passed">
|
|
<rank>240</rank>
|
|
</item>
|
|
</items>
|
|
</search>
|
|
<list>
|
|
<items>
|
|
<item id="title">
|
|
<rank>10</rank>
|
|
</item>
|
|
<item id="org_id">
|
|
<rank>20</rank>
|
|
</item>
|
|
<item id="caller_id">
|
|
<rank>30</rank>
|
|
</item>
|
|
<item id="start_date">
|
|
<rank>40</rank>
|
|
</item>
|
|
<item id="status">
|
|
<rank>50</rank>
|
|
</item>
|
|
<item id="agent_id">
|
|
<rank>60</rank>
|
|
</item>
|
|
</items>
|
|
</list>
|
|
</presentation>
|
|
</class>
|
|
<class id="Organization">
|
|
<fields>
|
|
<field id="overview" xsi:type="AttributeDashboard" _delta="if_exists">
|
|
<definition>
|
|
<cells>
|
|
<cell id="9000" _delta="delete">
|
|
<rank>5</rank>
|
|
<dashlets>
|
|
<dashlet id="0" xsi:type="DashletEmptyCell">
|
|
<rank>0</rank>
|
|
</dashlet>
|
|
</dashlets>
|
|
</cell>
|
|
<cell id="1" _delta="define">
|
|
<rank>10</rank>
|
|
<dashlets>
|
|
<dashlet id="9" xsi:type="DashletHeaderDynamic">
|
|
<rank>0</rank>
|
|
<title>Organization:Overview:UserRequests</title>
|
|
<icon>itop-welcome-itil/images/user-request-deadline.svg</icon>
|
|
<subtitle>Menu:UserRequest:OpenRequests</subtitle>
|
|
<query>SELECT UserRequest WHERE status != "closed" AND org_id=:this->id</query>
|
|
<group_by>status</group_by>
|
|
<values>new,assigned,escalated_tto,escalated_ttr,resolved</values>
|
|
</dashlet>
|
|
</dashlets>
|
|
</cell>
|
|
<cell id="3" _delta="define">
|
|
<rank>30</rank>
|
|
<dashlets>
|
|
<dashlet id="10" xsi:type="DashletObjectList">
|
|
<rank>0</rank>
|
|
<title>Organization:Overview:MyUserRequests</title>
|
|
<query>SELECT UserRequest AS i WHERE i.agent_id = :current_contact_id AND status NOT IN ("closed", "resolved") AND org_id=:this->id</query>
|
|
<menu>true</menu>
|
|
</dashlet>
|
|
<dashlet id="13" xsi:type="DashletGroupByPie">
|
|
<rank>1</rank>
|
|
<title>Organization:Overview:Tickets</title>
|
|
<query>SELECT Ticket WHERE org_id = :this->id</query>
|
|
<group_by>finalclass</group_by>
|
|
<style>pie</style>
|
|
<aggregation_function>count</aggregation_function>
|
|
<aggregation_attribute/>
|
|
<limit/>
|
|
<order_by>attribute</order_by>
|
|
<order_direction>desc</order_direction>
|
|
</dashlet>
|
|
</dashlets>
|
|
</cell>
|
|
</cells>
|
|
</definition>
|
|
</field>
|
|
</fields>
|
|
</class>
|
|
</classes>
|
|
<menus>
|
|
<menu id="WelcomeMenuPage" xsi:type="DashboardMenuNode" _delta="must_exist">
|
|
<definition>
|
|
<cells>
|
|
<cell id="1" _delta="define">
|
|
<rank>1</rank>
|
|
<dashlets>
|
|
<dashlet id="11" xsi:type="DashletHeaderDynamic">
|
|
<rank>0</rank>
|
|
<title>Menu:RequestManagement</title>
|
|
<icon>itop-welcome-itil/images/user-request-deadline.svg</icon>
|
|
<subtitle>Menu:UserRequest:OpenRequests</subtitle>
|
|
<query>SELECT UserRequest WHERE status != "closed"</query>
|
|
<group_by>status</group_by>
|
|
<values>new,assigned,escalated_tto,escalated_ttr,resolved</values>
|
|
</dashlet>
|
|
<dashlet id="12" xsi:type="DashletObjectList">
|
|
<rank>1</rank>
|
|
<title>UI:WelcomeMenu:MyCalls</title>
|
|
<query>SELECT UserRequest AS i WHERE i.agent_id = :current_contact_id AND status NOT IN ("closed", "resolved")</query>
|
|
<menu>true</menu>
|
|
</dashlet>
|
|
</dashlets>
|
|
</cell>
|
|
</cells>
|
|
</definition>
|
|
</menu>
|
|
<menu id="RequestManagement" xsi:type="MenuGroup" _delta="define">
|
|
<rank>30</rank>
|
|
<enable_stimulus/>
|
|
<style>
|
|
<decoration_classes>fas fa-comment-alt</decoration_classes>
|
|
</style>
|
|
</menu>
|
|
<menu id="UserRequest:Overview" xsi:type="DashboardMenuNode" _delta="define">
|
|
<rank>0</rank>
|
|
<parent>RequestManagement</parent>
|
|
<definition>
|
|
<layout>DashboardLayoutTwoCols</layout>
|
|
<title>UI:RequestMgmtMenuOverview:Title</title>
|
|
<cells>
|
|
<cell id="0">
|
|
<rank>0</rank>
|
|
<dashlets>
|
|
<dashlet id="1" xsi:type="DashletGroupByPie">
|
|
<rank>0</rank>
|
|
<title>UI-RequestManagementOverview-RequestByType-last-14-days</title>
|
|
<query>SELECT UserRequest WHERE DATE_SUB(NOW(), INTERVAL 14 DAY) < start_date</query>
|
|
<group_by>request_type</group_by>
|
|
<style>pie</style>
|
|
</dashlet>
|
|
</dashlets>
|
|
</cell>
|
|
<cell id="1">
|
|
<rank>1</rank>
|
|
<dashlets>
|
|
<dashlet id="2" xsi:type="DashletGroupByBars">
|
|
<rank>0</rank>
|
|
<title>UI-RequestManagementOverview-Last-14-days</title>
|
|
<query>SELECT UserRequest WHERE DATE_SUB(NOW(), INTERVAL 14 DAY) < start_date</query>
|
|
<group_by>start_date:day_of_month</group_by>
|
|
<style>bars</style>
|
|
</dashlet>
|
|
</dashlets>
|
|
</cell>
|
|
<cell id="2">
|
|
<rank>2</rank>
|
|
<dashlets>
|
|
<dashlet id="3" xsi:type="DashletGroupByTable">
|
|
<rank>0</rank>
|
|
<title>UI-RequestManagementOverview-OpenRequestByStatus</title>
|
|
<query>SELECT UserRequest WHERE status NOT IN ('closed','rejected')</query>
|
|
<group_by>status</group_by>
|
|
<style>table</style>
|
|
</dashlet>
|
|
</dashlets>
|
|
</cell>
|
|
<cell id="3">
|
|
<rank>3</rank>
|
|
<dashlets>
|
|
<dashlet id="4" xsi:type="DashletGroupByTable">
|
|
<rank>0</rank>
|
|
<title>UI-RequestManagementOverview-OpenRequestByAgent</title>
|
|
<query>SELECT UserRequest WHERE status NOT IN ('closed','rejected')</query>
|
|
<group_by>agent_id</group_by>
|
|
<style>table</style>
|
|
</dashlet>
|
|
</dashlets>
|
|
</cell>
|
|
<cell id="4">
|
|
<rank>4</rank>
|
|
<dashlets>
|
|
<dashlet id="5" xsi:type="DashletGroupByTable">
|
|
<rank>0</rank>
|
|
<title>UI-RequestManagementOverview-OpenRequestByType</title>
|
|
<query>SELECT UserRequest WHERE status NOT IN ('closed','rejected')</query>
|
|
<group_by>finalclass</group_by>
|
|
<style>table</style>
|
|
</dashlet>
|
|
</dashlets>
|
|
</cell>
|
|
<cell id="5">
|
|
<rank>5</rank>
|
|
<dashlets>
|
|
<dashlet id="6" xsi:type="DashletGroupByTable">
|
|
<rank>0</rank>
|
|
<title>UI-RequestManagementOverview-OpenRequestByCustomer</title>
|
|
<query>SELECT UserRequest WHERE status NOT IN ('closed','rejected')</query>
|
|
<group_by>org_id</group_by>
|
|
<style>table</style>
|
|
</dashlet>
|
|
</dashlets>
|
|
</cell>
|
|
</cells>
|
|
</definition>
|
|
</menu>
|
|
<menu id="NewUserRequest" xsi:type="NewObjectMenuNode" _delta="define">
|
|
<rank>1</rank>
|
|
<parent>RequestManagement</parent>
|
|
<class>UserRequest</class>
|
|
</menu>
|
|
<menu id="SearchUserRequests" xsi:type="SearchMenuNode" _delta="define">
|
|
<rank>2</rank>
|
|
<parent>RequestManagement</parent>
|
|
<class>UserRequest</class>
|
|
</menu>
|
|
<menu id="UserRequest:Shortcuts" xsi:type="TemplateMenuNode" _delta="define">
|
|
<rank>3</rank>
|
|
<parent>RequestManagement</parent>
|
|
<template_file/>
|
|
</menu>
|
|
<menu id="UserRequest:MyRequests" xsi:type="OQLMenuNode" _delta="define">
|
|
<rank>0</rank>
|
|
<parent>UserRequest:Shortcuts</parent>
|
|
<oql><![CDATA[SELECT UserRequest WHERE agent_id = :current_contact_id AND status NOT IN ("closed","resolved")]]></oql>
|
|
<do_search/>
|
|
<auto_reload>fast</auto_reload>
|
|
</menu>
|
|
<menu id="UserRequest:EscalatedRequests" xsi:type="OQLMenuNode" _delta="define">
|
|
<rank>1</rank>
|
|
<parent>UserRequest:Shortcuts</parent>
|
|
<oql><![CDATA[SELECT UserRequest WHERE status IN ("escalated_tto", "escalated_ttr") OR escalation_flag="yes"]]></oql>
|
|
<do_search/>
|
|
<auto_reload>fast</auto_reload>
|
|
</menu>
|
|
<menu id="UserRequest:OpenRequests" xsi:type="OQLMenuNode" _delta="define">
|
|
<rank>2</rank>
|
|
<parent>UserRequest:Shortcuts</parent>
|
|
<oql><![CDATA[SELECT UserRequest WHERE status NOT IN ("closed")]]></oql>
|
|
<do_search>1</do_search>
|
|
<auto_reload>fast</auto_reload>
|
|
</menu>
|
|
<menu id="UserRequest:MySupportRequests" xsi:type="OQLMenuNode" _delta="define">
|
|
<rank>3</rank>
|
|
<parent>UserRequest:Shortcuts</parent>
|
|
<oql><![CDATA[SELECT UserRequest WHERE caller_id = :current_contact_id AND status NOT IN ("closed")]]></oql>
|
|
<do_search/>
|
|
<auto_reload>fast</auto_reload>
|
|
</menu>
|
|
</menus>
|
|
<module_designs>
|
|
<module_design id="itop-portal">
|
|
<classes>
|
|
<class id="ServiceSubcategory">
|
|
<scopes>
|
|
<scope id="all">
|
|
<oql_view _delta="redefine"><![CDATA[SELECT ServiceSubcategory WHERE status != 'obsolete' AND request_type = 'service_request']]></oql_view>
|
|
</scope>
|
|
</scopes>
|
|
</class>
|
|
</classes>
|
|
</module_design>
|
|
</module_designs>
|
|
</itop_design>
|