org_id AND caller_id = :contact->id]]>
org_id]]>
Ticket
bizmodel,searchable,requestmgmt
false
autoincrement
ticket_request
id
images/user-request.png
true
new
waiting_for_approval
approved
rejected
assigned
pending
escalated_tto
escalated_ttr
resolved
closed
status
new
false
service_request
request_type
service_request
true
list
1
2
3
impact
1
false
list
1
2
3
4
priority
4
false
1
2
3
4
urgency
4
false
mail
phone
portal
origin
phone
true
org_id]]>
approver_id
Person
true
DEL_MANUAL
false
approver_id
email
org_id AND s.status != 'obsolete']]>
service_id
Service
true
DEL_MANUAL
false
service_id
name
service_id AND request_type = :this->request_type AND status != 'obsolete']]>
servicesubcategory_id
ServiceSubcategory
true
DEL_MANUAL
false
servicesubcategory_id
name
yes
no
escalation_flag
no
true
list
escalation_reason
true
assignment_date
true
resolution_date
true
last_pending_date
true
true
ResponseTicketTTO
warning
false
critical
false
ApplyStimulus
ev_timeout
true
ResponseTicketTTR
warning
false
critical
false
ApplyStimulus
ev_timeout
tto
100_deadline
tto
100_passed
tto
100_overrun
ttr
100_deadline
ttr
100_passed
ttr
100_overrun
time_spent
true
assistance
other
software patch
training
hardware repair
system update
bug fixed
resolution_code
assistance
true
solution
true
pending_reason
true
id AND status NOT IN ('rejected','resolved','closed')]]>
parent_request_id
UserRequest
true
DEL_MANUAL
parent_request_id
ref
parent_incident_id
Incident
true
DEL_MANUAL
parent_incident_id
ref
parent_problem_id
Problem
true
DEL_MANUAL
parent_problem_id
ref
parent_change_id
Change
true
DEL_MANUAL
parent_change_id
ref
UserRequest
parent_request_id
add_remove
0
0
public_log
true
1
2
3
4
user_satisfaction
1
true
-
1
HIGHLIGHT_CLASS_WARNING
images/user-request-deadline.png
-
2
HIGHLIGHT_CLASS_CRITICAL
images/user-request-escalated.png
-
3
HIGHLIGHT_CLASS_NONE
images/user-request-closed.png
status
assigned
SetCurrentDate
assignment_date
escalated_tto
waiting_for_approval
resolved
SetCurrentDate
resolution_date
SetElapsedTime
time_spent
start_date
DefaultWorkingTimeComputer
ResolveChildTickets
critical
new
assigned
SetCurrentDate
assignment_date
new
pending
SetCurrentDate
last_pending_date
resolved
SetCurrentDate
resolution_date
SetElapsedTime
time_spent
start_date
DefaultWorkingTimeComputer
ResolveChildTickets
assigned
escalated_ttr
resolved
SetCurrentDate
resolution_date
SetElapsedTime
time_spent
start_date
DefaultWorkingTimeComputer
ResolveChildTickets
critical
assigned
pending
SetCurrentDate
last_pending_date
resolved
SetCurrentDate
resolution_date
SetElapsedTime
time_spent
start_date
DefaultWorkingTimeComputer
ResolveChildTickets
assigned
resolved
SetCurrentDate
resolution_date
SetElapsedTime
time_spent
start_date
DefaultWorkingTimeComputer
ResolveChildTickets
new
approved
rejected
waiting_for_approval
escalated_tto
assigned
SetCurrentDate
assignment_date
resolved
SetCurrentDate
resolution_date
SetElapsedTime
time_spent
start_date
DefaultWorkingTimeComputer
ResolveChildTickets
new
new
assigned
assigned
resolved
SetCurrentDate
resolution_date
SetElapsedTime
time_spent
start_date
DefaultWorkingTimeComputer
ResolveChildTickets
closed
assigned
closed
SetCurrentDate
close_date
assigned
resolved
SetCurrentDate
resolution_date
SetElapsedTime
time_spent
start_date
DefaultWorkingTimeComputer
ResolveChildTickets
closed
resolved
false
public
LifecycleAction
Set('assignment_date', time());
return true;
}]]>
false
public
LifecycleAction
Set('last_pending_date', time());
return true;
}]]>
false
public
LifecycleAction
Set('resolution_date', time());
$iTimeSpent = time() - AttributeDateTime::GetAsUnixSeconds($this->Get('start_date'));
$this->Set('time_spent', $iTimeSpent);
return true;
}]]>
false
public
LifecycleAction
Set('close_date', time());
return true;
}]]>
false
public
LifecycleAction
Set('approver_id', UserRights::GetUserId());
return true;
}]]>
false
public
Overload-DBObject
IsNew() && ($this->Get('parent_request_id') == $this->GetKey()))
{
$this->m_aCheckIssues[] = Dict::Format('Class:UserRequest/Error:CannotAssignParentRequestIdToSelf');
}
}]]>
/** Compute the priority of the ticket based on its impact and urgency
* @return integer The priority of the ticket 1(high) .. 3(low)
*/
false
public
LifecycleAction
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')][(int)$this->Get('urgency')]))
{
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
}
return $iPriority;
}]]>
false
public
Overload-DBObject
Set('priority', $this->ComputePriority());
return parent::ComputeValues();
}]]>
false
public
Overload-cmdbAbstractObject
SetCurrentTab(Dict::S('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(Dict::S('Class:UserRequest:KnownErrorList')." ($iNumberKE)");
}
else
{
$oPage->SetCurrentTab(Dict::S('Class:UserRequest:KnownErrorList'));
}
self::DisplaySet($oPage, $oKnownErrorSet, array ('menu' => false));
}
}
}]]>
false
public
LifecycleAction
$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;
}]]>
false
public
LifecycleAction
$this->GetKey()));
while($oRequest = $oChildRequestSet->Fetch())
{
if (!array_key_exists($oRequest->GetKey(), $aTickets))
{
$aTickets[$oRequest->GetKey()] = true;
$oRequest->ResolveFrom($this);
}
}
return true;
}]]>
false
public
Internal
Get('status') != 'resolved')
{
$this->Set('servicesubcategory_id', $oParentTicket->Get('servicesubcategory_id'));
$this->Set('service_id', $oParentTicket->Get('service_id'));
$this->Set('team_id', $oParentTicket->Get('team_id'));
$this->Set('agent_id', $oParentTicket->Get('agent_id'));
$this->Set('resolution_code', $oParentTicket->Get('resolution_code'));
$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();
}
}]]>
false
public
LifecycleAction
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;
}]]>
false
public
LifecycleAction
UpdateImpactedItems();
}]]>
false
protected
Overload-DBObject
ComputeImpactedItems();
$this->Set('last_update', time());
$this->Set('start_date', time());
}]]>
false
protected
Overload-DBObject
ListChanges();
if (array_key_exists('functionalcis_list', $aChanges))
{
$this->UpdateImpactedItems();
}
$this->Set('last_update', time());
$this->UpdateChildRequestLog();
}]]>
-
10
-
20
-
30
-
40
-
50
-
10
-
10
-
20
-
30
-
40
-
50
-
60
-
20
-
10
-
20
-
30
-
40
-
50
-
60
-
10
-
10
-
20
-
30
-
40
-
20
-
10
-
20
-
30
-
30
-
10
-
20
-
30
-
40
-
50
-
60
-
70
-
80
-
70
-
10
-
10
-
20
-
30
-
40
-
20
-
10
-
20
-
30
-
40
-
30
-
10
-
20
-
30
-
40
-
10
-
20
-
30
-
40
-
50
-
70
-
80
-
90
-
95
-
100
-
110
-
120
-
130
-
140
-
150
-
160
-
170
-
180
-
190
-
200
-
210
-
220
-
230
-
240
-
10
-
20
-
30
-
40
-
50
-
60