1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace App\Plugins\ServiceDesk\Model\Assets; |
4
|
|
|
|
5
|
|
|
use Illuminate\Database\Eloquent\Model; |
6
|
|
|
use App\Plugins\ServiceDesk\Model\Common\AssetRelation; |
7
|
|
|
|
8
|
|
|
class SdAssets extends Model { |
9
|
|
|
|
10
|
|
|
protected $table = 'sd_assets'; |
11
|
|
|
protected $fillable = [ |
12
|
|
|
'id', |
13
|
|
|
'name', |
14
|
|
|
'description', |
15
|
|
|
'department_id', |
16
|
|
|
'asset_type_id', |
17
|
|
|
'impact_type_id', |
18
|
|
|
'managed_by', |
19
|
|
|
'used_by', |
20
|
|
|
'attachment', |
21
|
|
|
'location_id', |
22
|
|
|
'assigned_on', |
23
|
|
|
'product_id', |
24
|
|
|
'external_id', |
25
|
|
|
'organization', |
26
|
|
|
]; |
27
|
|
|
|
28
|
|
|
public function setExternalIdAttribute($value) { |
29
|
|
|
$this->attributes['external_id'] = str_slug($value); |
30
|
|
|
} |
31
|
|
|
|
32
|
|
|
public function departmentRelation() { |
33
|
|
|
return $this->belongsTo('App\Model\helpdesk\Agent\Department', 'department_id'); |
34
|
|
|
} |
35
|
|
|
|
36
|
|
|
/** |
37
|
|
|
* get the department name |
38
|
|
|
* @return string |
39
|
|
|
*/ |
40
|
|
|
public function departments() { |
41
|
|
|
$value = "--"; |
42
|
|
|
$attr = $this->attributes['department_id']; |
43
|
|
|
if ($attr) { |
44
|
|
|
$attrs = $this->departmentRelation()->first(); |
45
|
|
|
if ($attrs) { |
46
|
|
|
$value = $attrs->name; |
47
|
|
|
} |
48
|
|
|
} |
49
|
|
|
return ucfirst($value); |
50
|
|
|
} |
51
|
|
|
|
52
|
|
|
public function impactRelation() { |
53
|
|
|
return $this->belongsTo('App\Plugins\ServiceDesk\Model\Assets\SdImpactypes', 'impact_type_id'); |
54
|
|
|
} |
55
|
|
|
|
56
|
|
|
/** |
57
|
|
|
* get the impact name |
58
|
|
|
* @return string |
59
|
|
|
*/ |
60
|
|
|
public function impacts() { |
61
|
|
|
$value = "--"; |
62
|
|
|
$attr = $this->attributes['impact_type_id']; |
63
|
|
|
//dd() |
64
|
|
|
if ($attr) { |
65
|
|
|
$attrs = $this->impactRelation()->first(); |
66
|
|
|
if ($attrs) { |
67
|
|
|
$value = $attrs->name; |
68
|
|
|
} |
69
|
|
|
} |
70
|
|
|
return ucfirst($value); |
71
|
|
|
} |
72
|
|
|
|
73
|
|
|
public function locationRelation() { |
74
|
|
|
return $this->belongsTo('App\Plugins\ServiceDesk\Model\Assets\SdLocations', 'location_id'); |
75
|
|
|
} |
76
|
|
|
|
77
|
|
|
/** |
78
|
|
|
* get the location name |
79
|
|
|
* @return string |
80
|
|
|
*/ |
81
|
|
|
public function locations() { |
82
|
|
|
$value = "--"; |
83
|
|
|
$attr = $this->attributes['location_id']; |
84
|
|
|
if ($attr) { |
85
|
|
|
$attrs = $this->locationRelation()->first(); |
86
|
|
|
if ($attrs) { |
87
|
|
|
$value = "<a href=" . url('service-desk/location-types/' . $attr . '/show') . ">$attrs->title</a>"; |
88
|
|
|
} |
89
|
|
|
} |
90
|
|
|
return ucfirst($value); |
91
|
|
|
} |
92
|
|
|
|
93
|
|
|
public function assetTypes() { |
94
|
|
|
$value = "--"; |
95
|
|
|
$attr = $this->attributes['asset_type_id']; |
96
|
|
|
if ($attr) { |
97
|
|
|
$attrs = $this->assetType()->first(); |
98
|
|
|
if ($attrs) { |
99
|
|
|
$value = $attrs->name; |
100
|
|
|
} |
101
|
|
|
} |
102
|
|
|
return ucfirst($value); |
103
|
|
|
} |
104
|
|
|
|
105
|
|
View Code Duplication |
public function used() { |
|
|
|
|
106
|
|
|
$value = "--"; |
107
|
|
|
$attr = $this->attributes['used_by']; |
108
|
|
|
if ($attr) { |
109
|
|
|
$attrs = $this->usedBy()->first(); |
110
|
|
|
if ($attrs) { |
111
|
|
|
$value = ucfirst($attrs->first_name) . " " . ucfirst($attrs->last_name); |
112
|
|
|
if ($value == " ") { |
113
|
|
|
$value = $attrs->user_name; |
114
|
|
|
} |
115
|
|
|
} |
116
|
|
|
} |
117
|
|
|
return $value; |
118
|
|
|
} |
119
|
|
|
|
120
|
|
View Code Duplication |
public function managed() { |
|
|
|
|
121
|
|
|
$value = "--"; |
122
|
|
|
$attr = $this->attributes['managed_by']; |
123
|
|
|
if ($attr) { |
124
|
|
|
$attrs = $this->managedBy()->first(); |
125
|
|
|
if ($attrs) { |
126
|
|
|
$value = ucfirst($attrs->first_name) . " " . ucfirst($attrs->last_name); |
127
|
|
|
if ($value == " ") { |
128
|
|
|
$value = $attrs->user_name; |
129
|
|
|
} |
130
|
|
|
} |
131
|
|
|
} |
132
|
|
|
return $value; |
133
|
|
|
} |
134
|
|
|
|
135
|
|
|
public function products() { |
136
|
|
|
$value = "--"; |
137
|
|
|
$attr = $this->attributes['product_id']; |
138
|
|
|
if ($attr) { |
139
|
|
|
$attrs = $this->product()->first(); |
140
|
|
|
if ($attrs) { |
141
|
|
|
$value = "<a href=" . url('service-desk/products/' . $attr . '/show') . ">$attrs->name</a>"; |
142
|
|
|
} |
143
|
|
|
} |
144
|
|
|
return $value; |
145
|
|
|
} |
146
|
|
|
|
147
|
|
|
public function assignedOn() { |
148
|
|
|
$value = "--"; |
149
|
|
|
$attr = $this->attributes['assigned_on']; |
150
|
|
|
if ($attr !== NULL) { |
151
|
|
|
$value = $this->attributes['assigned_on']; |
152
|
|
|
} |
153
|
|
|
return $value; |
154
|
|
|
} |
155
|
|
|
|
156
|
|
|
public function usedBy() { |
157
|
|
|
return $this->belongsTo('App\User', 'used_by'); |
158
|
|
|
} |
159
|
|
|
|
160
|
|
|
public function managedBy() { |
161
|
|
|
return $this->belongsTo('App\User', 'managed_by'); |
162
|
|
|
} |
163
|
|
|
|
164
|
|
|
public function assetType() { |
165
|
|
|
return $this->belongsTo('App\Plugins\ServiceDesk\Model\Assets\SdAssettypes'); |
166
|
|
|
} |
167
|
|
|
|
168
|
|
|
public function relation() { |
169
|
|
|
return $this->hasMany('App\Plugins\ServiceDesk\Model\Common\TicketAssetProblem', 'asset_id'); |
170
|
|
|
} |
171
|
|
|
|
172
|
|
|
public function assetForm() { |
173
|
|
|
return $this->hasMany('App\Plugins\ServiceDesk\Model\Assets\AssetForm', 'asset_id'); |
174
|
|
|
} |
175
|
|
|
|
176
|
|
|
public function additionalData() { |
177
|
|
|
return $this->assetForm()->lists('value', 'key')->toArray(); |
178
|
|
|
} |
179
|
|
|
|
180
|
|
|
public function product() { |
181
|
|
|
return $this->belongsTo('App\Plugins\ServiceDesk\Model\Products\SdProducts', 'product_id'); |
182
|
|
|
} |
183
|
|
|
|
184
|
|
|
public function detachRelation() { |
185
|
|
|
$relations = $this->relation()->get(); |
186
|
|
|
if ($relations->count() > 0) { |
187
|
|
|
foreach ($relations as $relation) { |
188
|
|
|
$relation->asset_id = NULL; |
189
|
|
|
$relation->save(); |
190
|
|
|
} |
191
|
|
|
} |
192
|
|
|
$forms = $this->assetForm()->get(); |
193
|
|
|
if ($forms->count() > 0) { |
194
|
|
|
foreach ($forms as $form) { |
195
|
|
|
$form->delete(); |
196
|
|
|
} |
197
|
|
|
} |
198
|
|
|
} |
199
|
|
|
|
200
|
|
|
public function deleteAttachment($id) { |
201
|
|
|
\App\Plugins\ServiceDesk\Controllers\Library\UtilityController::deleteAssetRelation($id); |
202
|
|
|
$table = $this->table; |
203
|
|
|
\App\Plugins\ServiceDesk\Controllers\Library\UtilityController::deleteAttachments($id, $table); |
204
|
|
|
} |
205
|
|
|
|
206
|
|
|
public function delete() { |
207
|
|
|
$id = $this->id; |
|
|
|
|
208
|
|
|
$this->deleteAttachment($id); |
209
|
|
|
$this->detachRelation(); |
210
|
|
|
parent::delete(); |
211
|
|
|
} |
212
|
|
|
|
213
|
|
|
public function requests() { |
214
|
|
|
$assets = $this->assetRelation(); |
215
|
|
|
$ids = []; |
216
|
|
|
foreach ($assets as $key => $value) { |
217
|
|
|
$explode = explode('.', $key); |
218
|
|
|
$ids[] = array_first($explode); |
219
|
|
|
} |
220
|
|
|
return $this->getRequesters($ids); |
221
|
|
|
} |
222
|
|
|
|
223
|
|
|
public function assetRelation() { |
224
|
|
|
$relation = new AssetRelation(); |
225
|
|
|
$relations = $relation->lists('asset_ids', 'id')->toArray(); |
|
|
|
|
226
|
|
|
$array = array_dot($relations); |
227
|
|
|
$id = $this->attributes['id']; |
228
|
|
|
$array1 = array_where($array, function ($key, $value) use($id) { |
229
|
|
|
if ($value == $id) { |
230
|
|
|
return $value; |
231
|
|
|
} |
232
|
|
|
}); |
233
|
|
|
|
234
|
|
|
return $array1; |
235
|
|
|
} |
236
|
|
|
|
237
|
|
|
public function getRequesters($ids) { |
238
|
|
|
$relation = new AssetRelation(); |
239
|
|
|
$relations = $relation->whereIn('id', $ids)->lists('owner')->toArray(); |
|
|
|
|
240
|
|
|
$schema = []; |
241
|
|
|
if (count($relations) > 0) { |
242
|
|
|
foreach ($relations as $relation) { |
243
|
|
|
$explode = explode(':', $relation); |
244
|
|
|
$table = array_first($explode); |
245
|
|
|
$id = array_last($explode); |
246
|
|
|
//dd($id); |
247
|
|
|
$schema[] = $this->switchCase($table, $id); |
248
|
|
|
} |
249
|
|
|
} |
250
|
|
|
return $schema; |
251
|
|
|
} |
252
|
|
|
|
253
|
|
|
public function switchCase($table, $id) { |
254
|
|
|
$change = new \App\Plugins\ServiceDesk\Model\Changes\SdChanges(); |
255
|
|
|
$release = new \App\Plugins\ServiceDesk\Model\Releases\SdReleases(); |
256
|
|
|
$ticket = new \App\Plugins\ServiceDesk\Model\Common\Ticket(); |
257
|
|
|
$problem = new \App\Plugins\ServiceDesk\Model\Problem\SdProblem(); |
258
|
|
|
switch ($table) { |
259
|
|
|
case "sd_changes": |
260
|
|
|
return $change->find($id); |
|
|
|
|
261
|
|
|
case "sd_releases": |
262
|
|
|
return $release->find($id); |
|
|
|
|
263
|
|
|
case "tickets": |
264
|
|
|
return $ticket->find($id); |
|
|
|
|
265
|
|
|
case "sd_problem": |
266
|
|
|
return $problem->find($id); |
|
|
|
|
267
|
|
|
} |
268
|
|
|
} |
269
|
|
|
|
270
|
|
|
public function getOrganizationRelation() { |
271
|
|
|
$related = "App\Model\helpdesk\Agent_panel\Organization"; |
272
|
|
|
return $this->belongsTo($related, 'organization'); |
273
|
|
|
} |
274
|
|
|
|
275
|
|
View Code Duplication |
public function getOrganization() { |
|
|
|
|
276
|
|
|
$name = ""; |
277
|
|
|
if ($this->getOrganizationRelation()) { |
278
|
|
|
$org = $this->getOrganizationRelation()->first(); |
279
|
|
|
if ($org) { |
280
|
|
|
$name = $org->name; |
281
|
|
|
} |
282
|
|
|
} |
283
|
|
|
return $name; |
284
|
|
|
} |
285
|
|
|
|
286
|
|
View Code Duplication |
public function getOrgWithLink() { |
|
|
|
|
287
|
|
|
$name = "--"; |
288
|
|
|
$org = $this->getOrganization(); |
289
|
|
|
if ($org !== "") { |
290
|
|
|
$orgs = $this->getOrganizationRelation()->first(); |
291
|
|
|
if ($orgs) { |
292
|
|
|
$id = $orgs->id; |
293
|
|
|
$name = "<a href=" . url('organizations/' . $id) . ">" . ucfirst($org) . "</a>"; |
294
|
|
|
} |
295
|
|
|
} |
296
|
|
|
return $name; |
297
|
|
|
} |
298
|
|
|
|
299
|
|
|
} |
300
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.