mirror of
https://github.com/snipe/snipe-it.git
synced 2024-12-26 06:04:08 -08:00
f7dbda4ed3
* Work towards a functional travis. Step 1: Disable broken unit tests. * Fix functional tests This updates the login information and model factories to work with changes to source. * Importer name/full name fixes. Fix a bug where "name" was used ambigously and mapping "item name" to "name" would confuse the importer into thinking it should also be a user name. Now we default to "full name" for the users name, and "item name" for the item name. These are still both configurable through the custom mapping. Also update sample csvs and remove an outdated sample. * Max length of supplier notes is 191, not 255, as per default laravel string length. Might make sense to change this to a text field in the future to match other places. * Use sqlite/different db setup for unit tests. * Fix assets api test. * Fix Components API test. * increase travis memory limit for functional tests. * Use travis config for api tests as well. * Fix memory limit file. * Disable ApiComponentsAssetsCest until it's fixed.
125 lines
3.6 KiB
PHP
Executable file
125 lines
3.6 KiB
PHP
Executable file
<?php
|
|
namespace App\Models;
|
|
|
|
use App\Http\Traits\UniqueUndeletedTrait;
|
|
use App\Models\SnipeModel;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
|
use Watson\Validating\ValidatingTrait;
|
|
|
|
class Supplier extends SnipeModel
|
|
{
|
|
use SoftDeletes;
|
|
protected $dates = ['deleted_at'];
|
|
protected $table = 'suppliers';
|
|
|
|
protected $rules = array(
|
|
'name' => 'required|min:1|max:255|unique_undeleted',
|
|
'address' => 'max:50|nullable',
|
|
'address2' => 'max:50|nullable',
|
|
'city' => 'max:255|nullable',
|
|
'state' => 'max:32|nullable',
|
|
'country' => 'max:3|nullable',
|
|
'fax' => 'min:7|max:35|nullable',
|
|
'phone' => 'min:7|max:35|nullable',
|
|
'contact' => 'max:100|nullable',
|
|
'notes' => 'max:191|nullable', // Default string length is 191 characters..
|
|
'email' => 'email|max:150|nullable',
|
|
'zip' => 'max:10|nullable',
|
|
'url' => 'sometimes|nullable|string|max:250',
|
|
);
|
|
|
|
/**
|
|
* Whether the model should inject it's identifier to the unique
|
|
* validation rules before attempting validation. If this property
|
|
* is not set in the model it will default to true.
|
|
*
|
|
* @var boolean
|
|
*/
|
|
protected $injectUniqueIdentifier = true;
|
|
use ValidatingTrait;
|
|
use UniqueUndeletedTrait;
|
|
|
|
/**
|
|
* The attributes that are mass assignable.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $fillable = ['name','address','address2','city','state','country','zip','phone','fax','email','contact','url','notes'];
|
|
|
|
|
|
// Eager load counts.
|
|
// We do this to eager load the "count" of seats from the controller. Otherwise calling "count()" on each model results in n+1
|
|
public function assetsRelation()
|
|
{
|
|
return $this->hasMany(Asset::class)->whereNull('deleted_at')->selectRaw('supplier_id, count(*) as count')->groupBy('supplier_id');
|
|
}
|
|
|
|
public function getLicenseSeatsCountAttribute()
|
|
{
|
|
if ($this->licenseSeatsRelation->first()) {
|
|
return $this->licenseSeatsRelation->first()->count;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
public function assets()
|
|
{
|
|
return $this->hasMany('\App\Models\Asset', 'supplier_id');
|
|
}
|
|
|
|
public function accessories()
|
|
{
|
|
return $this->hasMany('\App\Models\Accessory', 'supplier_id');
|
|
}
|
|
|
|
public function asset_maintenances()
|
|
{
|
|
return $this->hasMany('\App\Models\AssetMaintenance', 'supplier_id');
|
|
}
|
|
|
|
public function num_assets()
|
|
{
|
|
if ($this->assetsRelation->first()) {
|
|
return $this->assetsRelation->first()->count;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public function licenses()
|
|
{
|
|
return $this->hasMany('\App\Models\License', 'supplier_id');
|
|
}
|
|
|
|
public function num_licenses()
|
|
{
|
|
return $this->licenses()->count();
|
|
}
|
|
|
|
public function addhttp($url)
|
|
{
|
|
if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
|
|
$url = "http://" . $url;
|
|
}
|
|
return $url;
|
|
}
|
|
|
|
/**
|
|
* Query builder scope to search on text
|
|
*
|
|
* @param Illuminate\Database\Query\Builder $query Query builder instance
|
|
* @param text $search Search term
|
|
*
|
|
* @return Illuminate\Database\Query\Builder Modified query builder
|
|
*/
|
|
public function scopeTextSearch($query, $search)
|
|
{
|
|
|
|
return $query->where(function ($query) use ($search) {
|
|
|
|
$query->where('name', 'LIKE', '%'.$search.'%');
|
|
});
|
|
}
|
|
}
|