mirror of
https://github.com/snipe/snipe-it.git
synced 2025-02-02 08:21:09 -08:00
2d8269ddcd
* Create a new action_log table to replace asset_log. Use Polymorphism to generalize class and targets. Port everything I can find to use it. Add a migration to port the asset_logs table to action_logs. * Initial work on requestable asset models * Backend work for polymorphic requests table to store checkout requests. * Add missing files * Add a record to the db when requesting items. Build up a testing route for interfacing with this. * Users can now toggle requests of items on the request page. Reformat page to use the same tab layout we use elsewhere * Polymorphic request function. Implement requesting of asset models. Need to port mail/slack to notifications still. * Implement requesting of asset models. Build up emails and notifications to support it. Allow specifying a quantity of model to request. * Add view to show currently requested assets. Needs some work and cleanup, but it isn't accessible from anywhere yet.
84 lines
2.4 KiB
PHP
84 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Models\Actionlog;
|
|
use App\Models\Asset;
|
|
use App\Models\CheckoutRequest;
|
|
use App\Models\User;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
trait Loggable
|
|
{
|
|
|
|
public function log()
|
|
{
|
|
return $this->morphMany(Actionlog::class, 'item');
|
|
}
|
|
|
|
public function logCheckout($note, $target = null /*target is overridable for components*/)
|
|
{
|
|
$log = new Actionlog;
|
|
// 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;
|
|
}
|
|
$log->user_id = Auth::user()->id;
|
|
if (!is_null($this->asset_id) || isset($target)) {
|
|
$log->target_type = Asset::class;
|
|
$log->target_id = $this->asset_id;
|
|
} else if (!is_null($this->assigned_to)) {
|
|
$log->target_type = User::class;
|
|
$log->target_id = $this->assigned_to;
|
|
}
|
|
$item =call_user_func(array($log->target_type, 'find'), $log->target_id);
|
|
$log->location_id = $item->location_id;
|
|
$log->note = $note;
|
|
$log->logaction('checkout');
|
|
|
|
return $log;
|
|
}
|
|
|
|
public function logCheckin($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->location_id = null;
|
|
$log->note = $note;
|
|
$log->user_id = Auth::user()->id;
|
|
$log->logaction('checkin from');
|
|
|
|
return $log;
|
|
}
|
|
|
|
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->user_id = Auth::user()->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;
|
|
}
|
|
}
|