* @since [v3.4] * @return \App\Models\Actionlog */ public function log() { return $this->morphMany(Actionlog::class, 'item'); } public function setImported(bool $bool): void { $this->imported = $bool; } /** * @author Daniel Meltzer * @since [v3.4] * @return \App\Models\Actionlog */ public function logCheckout($note, $target, $action_date = null, $originalValues = []) { $log = new Actionlog; $log = $this->determineLogItemType($log); if (auth()->user()) { $log->created_by = auth()->id(); } if (! isset($target)) { throw new \Exception('All checkout logs require a target.'); return; } if (! isset($target->id)) { throw new \Exception('That target seems invalid (no target ID available).'); return; } $log->target_type = get_class($target); $log->target_id = $target->id; // Figure out what the target is if ($log->target_type == Location::class) { $log->location_id = $target->id; } elseif ($log->target_type == Asset::class) { $log->location_id = $target->location_id; } else { $log->location_id = $target->location_id; } $log->note = $note; $log->action_date = $action_date; if (! $log->action_date) { $log->action_date = date('Y-m-d H:i:s'); } $changed = []; $originalValues = array_intersect_key($originalValues, array_flip(['action_date','name','status_id','location_id','expected_checkin'])); foreach ($originalValues as $key => $value) { if ($key == 'action_date' && $value != $action_date) { $changed[$key]['old'] = $value; $changed[$key]['new'] = is_string($action_date) ? $action_date : $action_date->format('Y-m-d H:i:s'); } elseif ($value != $this->getAttributes()[$key]) { $changed[$key]['old'] = $value; $changed[$key]['new'] = $this->getAttributes()[$key]; } } if (!empty($changed)){ $log->log_meta = json_encode($changed); } $log->logaction('checkout'); return $log; } /** * Helper method to determine the log item type */ private function determineLogItemType($log) { // We need to special case licenses because of license_seat vs license. So much for clean polymorphism : if (static::class == LicenseSeat::class) { $log->item_type = License::class; $log->item_id = $this->license_id; } else { $log->item_type = static::class; $log->item_id = $this->id; } return $log; } /** * @author Daniel Meltzer * @since [v3.4] * @return \App\Models\Actionlog */ public function logCheckin($target, $note, $action_date = null, $originalValues = []) { $log = new Actionlog; if($target != null){ $log->target_type = get_class($target); $log->target_id = $target->id; } if (static::class == LicenseSeat::class) { $log->item_type = License::class; $log->item_id = $this->license_id; } else { $log->item_type = static::class; $log->item_id = $this->id; if (static::class == Asset::class) { if ($asset = Asset::find($log->item_id)) { $asset->increment('checkin_counter', 1); } } } $log->location_id = null; $log->note = $note; $log->action_date = $action_date; if (! $log->action_date) { $log->action_date = date('Y-m-d H:i:s'); } if (auth()->user()) { $log->created_by = auth()->id(); } $changed = []; $originalValues = array_intersect_key($originalValues, array_flip(['action_date','name','status_id','location_id','rtd_location_id','expected_checkin'])); foreach ($originalValues as $key => $value) { if ($key == 'action_date' && $value != $action_date) { $changed[$key]['old'] = $value; $changed[$key]['new'] = is_string($action_date) ? $action_date : $action_date->format('Y-m-d H:i:s'); } elseif ($value != $this->getAttributes()[$key]) { $changed[$key]['old'] = $value; $changed[$key]['new'] = $this->getAttributes()[$key]; } } if (!empty($changed)){ $log->log_meta = json_encode($changed); } $log->logaction('checkin from'); return $log; } /** * @author A. Gianotto * @since [v4.0] * @return \App\Models\Actionlog */ public function logAudit($note, $location_id, $filename = null) { $log = new Actionlog; $location = Location::find($location_id); if (static::class == LicenseSeat::class) { $log->item_type = License::class; $log->item_id = $this->license_id; } else { $log->item_type = static::class; $log->item_id = $this->id; } $log->location_id = ($location_id) ? $location_id : null; $log->note = $note; $log->created_by = auth()->id(); $log->filename = $filename; $log->logaction('audit'); $params = [ 'item' => $log->item, 'filename' => $log->filename, 'admin' => $log->adminuser, 'location' => ($location) ? $location->name : '', 'note' => $note, ]; Setting::getSettings()->notify(new AuditNotification($params)); return $log; } /** * @author Daniel Meltzer * @since [v3.5] * @return \App\Models\Actionlog */ public function logCreate($note = null) { $created_by = -1; if (auth()->user()) { $created_by = auth()->id(); } $log = new Actionlog; if (static::class == LicenseSeat::class) { $log->item_type = License::class; $log->item_id = $this->license_id; } else { $log->item_type = static::class; $log->item_id = $this->id; } $log->location_id = null; $log->note = $note; $log->created_by = $created_by; $log->logaction('create'); $log->save(); return $log; } /** * @author Daniel Meltzer * @since [v3.4] * @return \App\Models\Actionlog */ public function logUpload($filename, $note) { $log = new Actionlog; if (static::class == LicenseSeat::class) { $log->item_type = License::class; $log->item_id = $this->license_id; } else { $log->item_type = static::class; $log->item_id = $this->id; } $log->created_by = auth()->id(); $log->note = $note; $log->target_id = null; $log->created_at = date('Y-m-d H:i:s'); $log->filename = $filename; $log->logaction('uploaded'); return $log; } }