model; } /** * Bootstrap Table Bits * @param array $all_custom_fields Preloaded cache of custom fields * @return mixed */ public function forDataTable($all_custom_fields) { // Actions $inout = ''; $actions = '
'; if ($this->model->deleted_at=='') { if (Gate::allows('create', $this->model)) { $actions .= Helper::generateDatatableButton('clone', route('clone/hardware', $this->model->id)); } if (Gate::allows('update', $this->model)) { $actions .= Helper::generateDatatableButton('edit', route('hardware.edit', $this->model->id)); } if (Gate::allows('delete', $this->model)) { $actions .= Helper::generateDatatableButton( 'delete', route('hardware.destroy', $this->model->id), true, /*enabled*/ trans('admin/hardware/message.delete.confirm'), $this->model->asset_tag ); } } elseif ($this->model->model->deleted_at=='') { $actions .= Helper::generateDatatableButton('restore', route('restore/hardware', $this->model->id)); } $actions .= '
'; if (($this->model->availableForCheckout())) { if (Gate::allows('checkout', $this->model)) { $inout = '' . trans('general.checkout') . ''; } } else { if (!empty($this->model->assigned_to)) { if (Gate::allows('checkin', $this->model)) { $inout = '' . trans('general.checkin') . ''; } } } $results = []; $results['checkbox'] = '
'; $results['id'] = $this->id; $results['name'] = $this->nameUrl(); $results['asset_tag'] = $this->assetTagUrl(); $results['serial'] = $this->serial; $results['image'] = $this->imageUrl(); // Presets for when conditionals fail. $results['model'] = $this->modelUrl(); $results['model_number'] = $this->model->model_number; $results['category'] = $this->categoryUrl(); $results['manufacturer'] = $this->manufacturerUrl(); $results['status_label'] = ''; $results['assigned_to'] = ''; if ($assigned = $this->model->assignedTo) { $results['assigned_to'] = $assigned->present()->glyph() . ' ' . $assigned->present()->nameUrl(); } $results['status_label'] = $this->statusText(); $results['location'] = ''; if (isset($assigned) and !empty($assignedLoc = $this->model->assetLoc)) { $results['location'] = $assignedLoc->present()->nameUrl(); } elseif (!empty($this->model->defaultLoc)) { $results['location'] = $this->model->defaultLoc->present()->nameUrl(); } $results['eol'] = $this->eol_date() ?: ''; $results['purchase_cost'] = Helper::formatCurrencyOutput($this->purchase_cost); $results['purchase_date'] = $this->purchase_date ?: ''; $results['notes'] = $this->notes; $results['order_number'] = $this->order_number; if (!empty($this->order_number)) { $results['order_number'] = link_to_route('hardware.index', $this->order_number, ['order_number' => $this->order_number]); } $results['last_checkout'] = $this->last_checkout ?: ''; $results['expected_checkin'] = $this->expected_checkin ?: ''; $results['created_at'] = ''; if (!empty($this->created_at)) { $results['created_at'] = $this->created_at->format('F j, Y h:iA'); } $results['companyName'] = $this->companyUrl(); $results['actions'] = $actions; $results['change'] = $inout; // Custom Field bits foreach ($all_custom_fields as $field) { $column_name = $field->db_column_name(); if ($field->isFieldDecryptable($this->model->{$column_name})) { if (Gate::allows('admin')) { if (($field->format=='URL') && ($this->model->{$column_name}!='')) { $row[$column_name] = ''.Helper::gracefulDecrypt($field, $this->model->{$column_name}).''; } else { $row[$column_name] = Helper::gracefulDecrypt($field, $this->model->{$column_name}); } } else { $row[$field->db_column_name()] = strtoupper(trans('admin/custom_fields/general.encrypted')); } } else { if (($field->format=='URL') && ($this->model->{$field->db_column_name()}!='')) { $row[$field->db_column_name()] = ''.$this->model->{$field->db_column_name()}.''; } else { $row[$field->db_column_name()] = e($this->model->{$field->db_column_name()}); } } } return $results; } /** * Generate html link to this items asset tag * @return string */ public function assetTagUrl() { return (string) link_to_route('hardware.show', e($this->asset_tag), $this->id); } /** * Generate html link to this items name. * @return string */ public function nameUrl() { return (string) link_to_route('hardware.show', e($this->name), $this->id); } public function modelUrl() { if ($this->model->model) { return $this->model->model->present()->nameUrl(); } return ''; } /** * Generate img tag to this items image. * @return mixed|string */ public function imageUrl() { $imagePath = ''; if ($this->image && !empty($this->image)) { $imagePath = $this->image; } elseif ($this->model && !empty($this->model->image)) { $imagePath = $this->model->image; } $url = config('app.url'); if (!empty($imagePath)) { $imagePath = ""; } return $imagePath; } /** * Get Displayable Name * @return string **/ public function name() { if (empty($this->name)) { if (isset($this->model)) { return $this->model->name.' ('.$this->asset_tag.')'; } return $this->asset_tag; } else { return $this->name.' ('.$this->asset_tag.')'; } } /** * Helper for notification polymorphism. * @return mixed */ public function fullName() { return $this->name(); } /** * Returns the date this item hits EOL. * @return false|string */ public function eol_date() { if (( $this->purchase_date ) && ( $this->model )) { $date = date_create($this->purchase_date); date_add($date, date_interval_create_from_date_string($this->model->model->eol . ' months')); return date_format($date, 'Y-m-d'); } } /** * How many months until this asset hits EOL. * @return null */ public function months_until_eol() { $today = date("Y-m-d"); $d1 = new DateTime($today); $d2 = new DateTime($this->eol_date()); if ($this->eol_date() > $today) { $interval = $d2->diff($d1); } else { $interval = null; } return $interval; } public function statusText() { if ($this->model->assignedTo) { return trans('general.deployed'); } return $this->model->assetstatus->name; } /** * Date the warantee expires. * @return false|string */ public function warrantee_expires() { $date = date_create($this->purchase_date); date_add($date, date_interval_create_from_date_string($this->warranty_months . ' months')); return date_format($date, 'Y-m-d'); } /** * Url to view this item. * @return string */ public function viewUrl() { return route('hardware.show', $this->id); } public function glyph() { return ''; } }