New save mechanic
This commit is contained in:
parent
f1f7694835
commit
9d5cd27575
15 changed files with 685 additions and 128 deletions
|
@ -36,7 +36,7 @@ class PredefinedKitsController extends Controller
|
||||||
|
|
||||||
$total = $kits->count();
|
$total = $kits->count();
|
||||||
$kits = $kits->skip($offset)->take($limit)->get();
|
$kits = $kits->skip($offset)->take($limit)->get();
|
||||||
return (new PredefinedKitsTransformer)->transformPrdefinedKits($kits, $total);
|
return (new PredefinedKitsTransformer)->transformPredefinedKits($kits, $total);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ class PredefinedKitsController extends Controller
|
||||||
{
|
{
|
||||||
$this->authorize('view', PredefinedKit::class);
|
$this->authorize('view', PredefinedKit::class);
|
||||||
$kit = PredefinedKit::findOrFail($id);
|
$kit = PredefinedKit::findOrFail($id);
|
||||||
return (new PredefinedKitsTransformer)->transformPrdefinedKit($kit);
|
return (new PredefinedKitsTransformer)->transformPredefinedKit($kit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -247,16 +247,20 @@ class PredefinedKitsController extends Controller
|
||||||
*/
|
*/
|
||||||
public function storeModel(Request $request, $kit_id)
|
public function storeModel(Request $request, $kit_id)
|
||||||
{
|
{
|
||||||
|
//return response()->json(Helper::formatStandardApiResponse('error', 'string11', dd($request))); // TODO: trans
|
||||||
|
|
||||||
$this->authorize('update', PredefinedKit::class);
|
$this->authorize('update', PredefinedKit::class);
|
||||||
|
|
||||||
$kit = PredefinedKit::findOrFail($kit_id);
|
$kit = PredefinedKit::findOrFail($kit_id);
|
||||||
|
|
||||||
$quantity = $request->input('quantity', 1);
|
$quantity = $request->input('quantity', 1);
|
||||||
if( $quantity < 1) {
|
if( $quantity < 1) {
|
||||||
$quantity = 1;
|
$quantity = 1;
|
||||||
}
|
}
|
||||||
|
//echo $request->get('model');
|
||||||
$kit->models()->attach( $request->get('model'), ['quantity' => $quantity]);
|
$kit->models()->attach( $request->get('model'), ['quantity' => $quantity]);
|
||||||
|
|
||||||
return response()->json(Helper::formatStandardApiResponse('success', $kit, 'License added successfull')); // TODO: trans
|
return response()->json(Helper::formatStandardApiResponse('success', $kit, 'Model added successfull')); // TODO: trans
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers\Kits;
|
||||||
|
|
||||||
use App\Models\PredefinedKit;
|
use App\Models\PredefinedKit;
|
||||||
use App\Models\AssetModel;
|
use App\Models\AssetModel;
|
||||||
|
@ -7,6 +7,11 @@ use App\Models\PredefinedModel;
|
||||||
use App\Models\License;
|
use App\Models\License;
|
||||||
use App\Models\PredefinedLicence;
|
use App\Models\PredefinedLicence;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Requests\ImageUploadRequest;
|
||||||
|
use App\Models\Accessory;
|
||||||
|
use App\Models\SnipeItPivot;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,7 +41,7 @@ class PredefinedKitsController extends Controller
|
||||||
{
|
{
|
||||||
//$this->authorize('create', PredefinedKit::class);
|
//$this->authorize('create', PredefinedKit::class);
|
||||||
|
|
||||||
return view('kits/edit')->with('item', new PredefinedKit);
|
return view('kits/create')->with('item', new PredefinedKit);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -83,7 +88,7 @@ class PredefinedKitsController extends Controller
|
||||||
if(!$success) {
|
if(!$success) {
|
||||||
return redirect()->back()->withInput()->withErrors($kit->getErrors());
|
return redirect()->back()->withInput()->withErrors($kit->getErrors());
|
||||||
}
|
}
|
||||||
return redirect()->route("models.index")->with('success', 'Kit was successfully created.'); // TODO: trans()
|
return redirect()->route("kits.index")->with('success', 'Kit was successfully created.'); // TODO: trans()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -91,13 +96,13 @@ class PredefinedKitsController extends Controller
|
||||||
*
|
*
|
||||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||||
* @since [v1.0]
|
* @since [v1.0]
|
||||||
* @param int $kitId
|
* @param int $kit_id
|
||||||
* @return View
|
* @return View
|
||||||
*/
|
*/
|
||||||
public function edit($kitId = null)
|
public function edit($kit_id = null)
|
||||||
{
|
{
|
||||||
$this->authorize('update', PredefinedKit::class);
|
$this->authorize('update', PredefinedKit::class);
|
||||||
if ($kit = PredefinedKit::find($kitId)) {
|
if ($kit = PredefinedKit::find($kit_id)) {
|
||||||
return view('kits/edit')
|
return view('kits/edit')
|
||||||
->with('item', $kit)
|
->with('item', $kit)
|
||||||
->with('models', $kit->models)
|
->with('models', $kit->models)
|
||||||
|
@ -113,40 +118,21 @@ class PredefinedKitsController extends Controller
|
||||||
*
|
*
|
||||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||||
* @since [v1.0]
|
* @since [v1.0]
|
||||||
* @param int $kitId
|
* @param int $kit_id
|
||||||
* @return Redirect
|
* @return Redirect
|
||||||
*/
|
*/
|
||||||
public function update(ImageUploadRequest $request, $kitId = null)
|
public function update(ImageUploadRequest $request, $kit_id = null)
|
||||||
{
|
{
|
||||||
$this->authorize('update', PredefinedKit::class);
|
$this->authorize('update', PredefinedKit::class);
|
||||||
// Check if the kit exists
|
// Check if the kit exists
|
||||||
if (is_null($kit = PredefinedKit::find($kitId))) {
|
if (is_null($kit = PredefinedKit::find($kit_id))) {
|
||||||
// Redirect to the kits management page
|
// Redirect to the kits management page
|
||||||
return redirect()->route('kits.index')->with('error','Kit does not exist'); // TODO: trans
|
return redirect()->route('kits.index')->with('error','Kit does not exist'); // TODO: trans
|
||||||
}
|
}
|
||||||
|
|
||||||
$kit->name = $request->input('name');
|
$kit->name = $request->input('name');
|
||||||
|
|
||||||
// update models
|
if ($kit->save()) {
|
||||||
$new_model_ids = $request->input('models');
|
|
||||||
$old_model_ids = $kit->models()->pluck('id'); // METODO: проверить
|
|
||||||
// для получения ид надо что-то такое https://stackoverflow.com/questions/34308169/eloquent-orm-laravel-5-get-array-of-ids
|
|
||||||
// project built on Laravel 5.4
|
|
||||||
list($add_model_ids, $remove_model_ids) = $this->getAddingDeletingElements($new_model_ids, $old_model_ids); // METODO: тут ошибка, надо именно ид-шки получать, а не сами модели
|
|
||||||
|
|
||||||
$new_licence_ids = $request->input('licences');
|
|
||||||
$old_licence_ids = $kit->licences()->pluck('id'); // METODO: проверить
|
|
||||||
list($add_licence_ids, $remove_licence_ids) = $this->getAddingDeletingElements($new_licence_ids, $old_licence_ids);
|
|
||||||
|
|
||||||
$success = DB::transaction(function() use($kit, $add_models, $remove_models, $add_licences, $remove_licences) {
|
|
||||||
$kit->models()->detach($remove_models);
|
|
||||||
$kit->models()->attach($add_models);
|
|
||||||
$kit->licenses()->detach($remove_licenses);
|
|
||||||
$kit->licenses()->attach($add_licenses);
|
|
||||||
return $kit->save();
|
|
||||||
});
|
|
||||||
|
|
||||||
if ($success) {
|
|
||||||
return redirect()->route("kits.index")->with('success', 'Kit was successfully updated'); // TODO: trans
|
return redirect()->route("kits.index")->with('success', 'Kit was successfully updated'); // TODO: trans
|
||||||
}
|
}
|
||||||
return redirect()->back()->withInput()->withErrors($kit->getErrors());
|
return redirect()->back()->withInput()->withErrors($kit->getErrors());
|
||||||
|
@ -158,14 +144,14 @@ class PredefinedKitsController extends Controller
|
||||||
*
|
*
|
||||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||||
* @since [v1.0]
|
* @since [v1.0]
|
||||||
* @param int $kitId
|
* @param int $kit_id
|
||||||
* @return Redirect
|
* @return Redirect
|
||||||
*/
|
*/
|
||||||
public function destroy($kitId)
|
public function destroy($kit_id)
|
||||||
{
|
{
|
||||||
$this->authorize('delete', PredefinedKit::class);
|
$this->authorize('delete', PredefinedKit::class);
|
||||||
// Check if the kit exists
|
// Check if the kit exists
|
||||||
if (is_null($kit = PredefinedKit::find($kitId))) {
|
if (is_null($kit = PredefinedKit::find($kit_id))) {
|
||||||
return redirect()->route('kits.index')->with('error', 'Kit not found'); // TODO: trans
|
return redirect()->route('kits.index')->with('error', 'Kit not found'); // TODO: trans
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,28 +166,123 @@ class PredefinedKitsController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the model information to present to the model view page
|
* Get the kit information to present to the kit view page
|
||||||
*
|
*
|
||||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||||
* @since [v1.0]
|
* @since [v1.0]
|
||||||
* @param int $modelId
|
* @param int $modelId
|
||||||
* @return View
|
* @return View
|
||||||
*/
|
*/
|
||||||
public function show($modelId = null)
|
public function show($kit_id = null)
|
||||||
{
|
{
|
||||||
$this->authorize('view', AssetModel::class);
|
$this->authorize('view', PredefinedKit::class);
|
||||||
$model = AssetModel::withTrashed()->find($modelId);
|
$kit = PredefinedKit::find($kit_id);
|
||||||
|
|
||||||
if (isset($model->id)) {
|
if (isset($kit->id)) {
|
||||||
return view('models/view', compact('model'));
|
return view('kits/view', compact('kit'));
|
||||||
}
|
}
|
||||||
// Prepare the error message
|
// Prepare the error message
|
||||||
$error = trans('admin/models/message.does_not_exist', compact('id'));
|
$error = 'Kit does not exist.'; // TODO: trans
|
||||||
|
|
||||||
// Redirect to the user management page
|
// Redirect to the user management page
|
||||||
return redirect()->route('models.index')->with('error', $error);
|
return redirect()->route('kits.index')->with('error', $error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a view containing the Predefined Kit edit form.
|
||||||
|
*
|
||||||
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||||
|
* @since [v1.0]
|
||||||
|
* @param int $kit_id
|
||||||
|
* @return View
|
||||||
|
*/
|
||||||
|
public function editModel($kit_id, $model_id)
|
||||||
|
{
|
||||||
|
$this->authorize('update', PredefinedKit::class);
|
||||||
|
if ( ($kit = PredefinedKit::find($kit_id))
|
||||||
|
&& ($model = $kit->models()->find($model_id)) ) {
|
||||||
|
// $item = $model->pivot;
|
||||||
|
// $item->name1 = 'tesn1';
|
||||||
|
// dd($item);
|
||||||
|
//dd($model->pivot);
|
||||||
|
// $item = $model->pivot;
|
||||||
|
|
||||||
|
return view('kits/model-edit', [
|
||||||
|
'kit' => $kit,
|
||||||
|
'model' => $model,
|
||||||
|
'item' => $model->pivot
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
return redirect()->route('kits.index')->with('error', 'Kit does not exist'); // TODO: trans
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the kit information to present to the kit view page
|
||||||
|
*
|
||||||
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||||
|
* @since [v1.0]
|
||||||
|
* @param int $modelId
|
||||||
|
* @return View
|
||||||
|
*/
|
||||||
|
public function updateModel(Request $request, $kit_id) {
|
||||||
|
$this->authorize('update', PredefinedKit::class);
|
||||||
|
if (is_null($kit = PredefinedKit::find($kit_id))) {
|
||||||
|
// Redirect to the kits management page
|
||||||
|
return redirect()->route('kits.index')->with('error','Kit does not exist'); // TODO: trans
|
||||||
|
}
|
||||||
|
//return view('kits/create-model')->with('item', $kit);
|
||||||
|
|
||||||
|
|
||||||
|
// $quantity = $request->input('quantity', 1);
|
||||||
|
// if( $quantity < 1) {
|
||||||
|
// $quantity = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
$validator = \Validator::make($request->all(), $kit->modelRules);
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return redirect()->back()->withInput()->withErrors($validator);
|
||||||
|
}
|
||||||
|
// $kit->models()->sync([$request->input('model_id') => ['quantity' => $request->input('quantity')]]);
|
||||||
|
// $kit->models()->updateExistingPivot($request->input('pivot_id'), ['model_id' => $request->input('model_id'), 'quantity' => $request->input('quantity')]);
|
||||||
|
// $s = [$request->input('pivot_id') => ['model_id' => $request->input('model_id'), 'quantity' => $request->input('quantity')]];
|
||||||
|
//dd($s);
|
||||||
|
// $changes = $kit->models()->syncWithoutDetaching([$request->input('pivot_id') => ['model_id' => $request->input('model_id'), 'quantity' => $request->input('quantity')]]);
|
||||||
|
// $changes = $kit->models()->syncWithoutDetaching(['1' => ['model_id' => '2', 'quantity' => '35']]);
|
||||||
|
$pivot = $kit->models()->wherePivot('id', $request->input('pivot_id'))->first()->pivot;
|
||||||
|
// $pivot = $kit->models()->newPivotStatement()->find('1');
|
||||||
|
// $ret = $kit->models()->newPivotStatement()->find('1');
|
||||||
|
$pivot->model_id = $request->input('model_id');
|
||||||
|
$pivot->quantity = $request->input('quantity');
|
||||||
|
$pivot->save();
|
||||||
|
|
||||||
|
// return $this->edit($kit_id)->with('success', 'Model updated successfully.');
|
||||||
|
return redirect()->route('kits.edit', $kit_id)->with('success', 'Model updated successfully.'); // TODO: trans
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the kit information to present to the kit view page
|
||||||
|
*
|
||||||
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||||
|
* @since [v1.0]
|
||||||
|
* @param int $modelId
|
||||||
|
* @return View
|
||||||
|
*/
|
||||||
|
public function detachModel($kit_id, $model_id) {
|
||||||
|
$this->authorize('update', PredefinedKit::class);
|
||||||
|
if (is_null($kit = PredefinedKit::find($kit_id))) {
|
||||||
|
// Redirect to the kits management page
|
||||||
|
return redirect()->route('kits.index')->with('error','Kit does not exist'); // TODO: trans
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete childs
|
||||||
|
$kit->models()->detach($model_id);
|
||||||
|
|
||||||
|
// Redirect to the kit management page
|
||||||
|
return redirect()->route('kits.index')->with('success', 'Kit was successfully deleted'); // TODO: trans
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if a fieldset is set, 'add default values' is ticked and if
|
* Returns true if a fieldset is set, 'add default values' is ticked and if
|
||||||
* any default values were entered into the form.
|
* any default values were entered into the form.
|
||||||
|
|
|
@ -36,4 +36,11 @@ class ModalController extends Controller
|
||||||
return view('modals.manufacturer');
|
return view('modals.manufacturer');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function kitModel() {
|
||||||
|
return view('modals.kit-model');
|
||||||
|
}
|
||||||
|
|
||||||
|
function kitLicense() {
|
||||||
|
return view('modals.kit-license');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
72
app/Http/Transformers/PredefinedKitsTransformer.php
Normal file
72
app/Http/Transformers/PredefinedKitsTransformer.php
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
<?php
|
||||||
|
namespace App\Http\Transformers;
|
||||||
|
|
||||||
|
use App\Models\PredefinedKit;
|
||||||
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
|
use Gate;
|
||||||
|
use App\Helpers\Helper;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
use App\Models\SnipeModel;
|
||||||
|
|
||||||
|
class PredefinedKitsTransformer
|
||||||
|
{
|
||||||
|
|
||||||
|
public function transformPredefinedKits (Collection $kits, $total)
|
||||||
|
{
|
||||||
|
$array = array();
|
||||||
|
foreach ($kits as $kit) {
|
||||||
|
$array[] = self::transformPredefinedKit($kit);
|
||||||
|
}
|
||||||
|
return (new DatatablesTransformer)->transformDatatables($array, $total);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function transformPredefinedKit (PredefinedKit $kit)
|
||||||
|
{
|
||||||
|
$array = [
|
||||||
|
'id' => (int) $kit->id,
|
||||||
|
'name' => e($kit->name)
|
||||||
|
];
|
||||||
|
|
||||||
|
$permissions_array['available_actions'] = [
|
||||||
|
'update' => Gate::allows('update', PredefinedKit::class),
|
||||||
|
'delete' => Gate::allows('delete', PredefinedKit::class),
|
||||||
|
// 'clone' => Gate::allows('create', PredefinedKit::class),
|
||||||
|
// 'restore' => Gate::allows('create', PredefinedKit::class),
|
||||||
|
];
|
||||||
|
|
||||||
|
$array += $permissions_array;
|
||||||
|
return $array;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function transformElements(Collection $elements, $total) {
|
||||||
|
$array = array();
|
||||||
|
foreach ($elements as $element) {
|
||||||
|
$array[] = self::transformElement($element);
|
||||||
|
}
|
||||||
|
return (new DatatablesTransformer)->transformDatatables($array, $total);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function transformElement(SnipeModel $element) {
|
||||||
|
$array = [
|
||||||
|
'id' => (int) $element->id,
|
||||||
|
'pivot_id' => (int) $element->pivot->id,
|
||||||
|
'owner_id' => (int) $element->pivot->kit_id,
|
||||||
|
'quantity' => (int) $element->pivot->quantity,
|
||||||
|
'name' => e($element->name)
|
||||||
|
];
|
||||||
|
|
||||||
|
$permissions_array['available_actions'] = [
|
||||||
|
'update' => Gate::allows('update', PredefinedKit::class),
|
||||||
|
'delete' => Gate::allows('delete', PredefinedKit::class),
|
||||||
|
];
|
||||||
|
|
||||||
|
$array += $permissions_array;
|
||||||
|
return $array;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function transformPredefinedKitsDatatable($kits) {
|
||||||
|
return (new DatatablesTransformer)->transformDatatables($kits);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
106
app/Models/PredefinedKit.php
Normal file
106
app/Models/PredefinedKit.php
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
<?php
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use App\Http\Traits\UniqueUndeletedTrait;
|
||||||
|
use App\Models\SnipeModel;
|
||||||
|
use App\Models\Traits\Searchable;
|
||||||
|
use App\Presenters\Presentable;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use Watson\Validating\ValidatingTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model for Categories. Categories are a higher-level group
|
||||||
|
* than Asset Models, and handle things like whether or not
|
||||||
|
* to require acceptance from the user, whether or not to
|
||||||
|
* send a EULA to the user, etc.
|
||||||
|
*
|
||||||
|
* @version v1.0
|
||||||
|
*/
|
||||||
|
class PredefinedKit extends SnipeModel
|
||||||
|
{
|
||||||
|
protected $presenter = 'App\Presenters\PredefinedKitPresenter';
|
||||||
|
use Presentable;
|
||||||
|
protected $table = 'kits';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Category validation rules
|
||||||
|
*/
|
||||||
|
public $rules = array(
|
||||||
|
'name' => 'required|min:1|max:255|unique'
|
||||||
|
);
|
||||||
|
|
||||||
|
use ValidatingTrait;
|
||||||
|
|
||||||
|
public $modelRules = [
|
||||||
|
'model_id' => 'required|exists:models,id',
|
||||||
|
'quantity' => 'required|integer|min:1',
|
||||||
|
'pivot_id' => 'integer|exists:kits_models,id'
|
||||||
|
];
|
||||||
|
|
||||||
|
public $licenseRules = [
|
||||||
|
'license_id' => 'required|exists:licenses,id',
|
||||||
|
'quantity' => 'required|integer|min:1',
|
||||||
|
'pivot_id' => 'integer|exists:kits_licenses,id'
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The attributes that are mass assignable.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $fillable = [
|
||||||
|
'name'
|
||||||
|
];
|
||||||
|
|
||||||
|
use Searchable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The attributes that should be included when searching the model.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $searchableAttributes = ['name'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The relations and their attributes that should be included when searching the model.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $searchableRelations = [];
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Establishes the kits -> models relationship
|
||||||
|
*
|
||||||
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||||
|
* @since [v2.0]
|
||||||
|
* @return \Illuminate\Database\Eloquent\Relations\Relation
|
||||||
|
*/
|
||||||
|
public function models()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany('\App\Models\AssetModel', 'kits_models', 'kit_id', 'model_id')->withPivot('id', 'quantity');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Establishes the kits -> licenses relationship
|
||||||
|
*
|
||||||
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||||
|
* @since [v4.3]
|
||||||
|
* @return \Illuminate\Database\Eloquent\Relations\Relation
|
||||||
|
*/
|
||||||
|
public function licenses()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany('\App\Models\License', 'kits_licenses', 'kit_id', 'license_id')->withPivot('id', 'quantity');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* -----------------------------------------------
|
||||||
|
* BEGIN QUERY SCOPES
|
||||||
|
* -----------------------------------------------
|
||||||
|
**/
|
||||||
|
|
||||||
|
}
|
11
app/Models/SnipeItPivot.php
Normal file
11
app/Models/SnipeItPivot.php
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?php
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Relations\Pivot;
|
||||||
|
|
||||||
|
class SnipeItPivot extends Pivot
|
||||||
|
{
|
||||||
|
|
||||||
|
use ValidatingTrait;
|
||||||
|
public $rules = [];
|
||||||
|
}
|
178
app/Presenters/PredefinedKitPresenter.php
Normal file
178
app/Presenters/PredefinedKitPresenter.php
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Presenters;
|
||||||
|
|
||||||
|
use App\Helpers\Helper;
|
||||||
|
use Illuminate\Support\Facades\Gate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class LicensePresenter
|
||||||
|
* @package App\Presenters
|
||||||
|
*/
|
||||||
|
class PredefinedKitPresenter extends Presenter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Json Column Layout for bootstrap table
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function dataTableLayout()
|
||||||
|
{
|
||||||
|
$layout = [
|
||||||
|
[
|
||||||
|
"field" => "id",
|
||||||
|
"searchable" => false,
|
||||||
|
"sortable" => true,
|
||||||
|
"switchable" => true,
|
||||||
|
"title" => trans('general.id'),
|
||||||
|
"visible" => false
|
||||||
|
], [
|
||||||
|
"field" => "name",
|
||||||
|
"searchable" => true,
|
||||||
|
"sortable" => true,
|
||||||
|
"title" => 'Name', // TODO: trans
|
||||||
|
"formatter" => "kitsLinkFormatter"
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
$layout[] = [
|
||||||
|
"field" => "actions",
|
||||||
|
"searchable" => false,
|
||||||
|
"sortable" => false,
|
||||||
|
"switchable" => false,
|
||||||
|
"title" => trans('table.actions'),
|
||||||
|
"formatter" => "kitsActionsFormatter",
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
return json_encode($layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Json Column Layout for bootstrap table
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function dataTableModels()
|
||||||
|
{
|
||||||
|
$layout = [
|
||||||
|
[
|
||||||
|
"field" => "id",
|
||||||
|
"searchable" => false,
|
||||||
|
"sortable" => true,
|
||||||
|
"switchable" => true,
|
||||||
|
"title" => trans('general.id'),
|
||||||
|
"visible" => false
|
||||||
|
], [
|
||||||
|
"field" => "pivot_id",
|
||||||
|
"searchable" => false,
|
||||||
|
"sortable" => true,
|
||||||
|
"switchable" => true,
|
||||||
|
"title" => trans('general.id'),
|
||||||
|
"visible" => false
|
||||||
|
], [
|
||||||
|
"field" => "owner_id",
|
||||||
|
"searchable" => false,
|
||||||
|
"sortable" => true,
|
||||||
|
"switchable" => true,
|
||||||
|
"title" => trans('general.id'),
|
||||||
|
"visible" => false
|
||||||
|
], [
|
||||||
|
"field" => "name",
|
||||||
|
"searchable" => true,
|
||||||
|
"sortable" => true,
|
||||||
|
"title" => 'Name', // TODO: trans
|
||||||
|
"formatter" => "modelsLinkFormatter"
|
||||||
|
], [
|
||||||
|
"field" => "quantity",
|
||||||
|
"searchable" => false,
|
||||||
|
"sortable" => false,
|
||||||
|
"title" => 'Quantity', // TODO: trans
|
||||||
|
], [
|
||||||
|
"field" => "actions",
|
||||||
|
"searchable" => false,
|
||||||
|
"sortable" => false,
|
||||||
|
"switchable" => false,
|
||||||
|
"title" => trans('table.actions'),
|
||||||
|
"formatter" => "kits_modelsActionsFormatter",
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
return json_encode($layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Json Column Layout for bootstrap table
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function dataTableLicenses()
|
||||||
|
{
|
||||||
|
$layout = [
|
||||||
|
[
|
||||||
|
"field" => "id",
|
||||||
|
"searchable" => false,
|
||||||
|
"sortable" => true,
|
||||||
|
"switchable" => true,
|
||||||
|
"title" => trans('general.id'),
|
||||||
|
"visible" => false
|
||||||
|
], [
|
||||||
|
"field" => "pivot_id",
|
||||||
|
"searchable" => false,
|
||||||
|
"sortable" => true,
|
||||||
|
"switchable" => true,
|
||||||
|
"title" => trans('general.id'),
|
||||||
|
"visible" => false
|
||||||
|
], [
|
||||||
|
"field" => "owner_id",
|
||||||
|
"searchable" => false,
|
||||||
|
"sortable" => true,
|
||||||
|
"switchable" => true,
|
||||||
|
"title" => trans('general.id'),
|
||||||
|
"visible" => false
|
||||||
|
], [
|
||||||
|
"field" => "name",
|
||||||
|
"searchable" => true,
|
||||||
|
"sortable" => true,
|
||||||
|
"title" => 'Name', // TODO: trans
|
||||||
|
"formatter" => "licensesLinkFormatter"
|
||||||
|
], [
|
||||||
|
"field" => "actions",
|
||||||
|
"searchable" => false,
|
||||||
|
"sortable" => false,
|
||||||
|
"switchable" => false,
|
||||||
|
"title" => trans('table.actions'),
|
||||||
|
"formatter" => "kits_licensesActionsFormatter",
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
return json_encode($layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Link to this kit Name
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function nameUrl()
|
||||||
|
{
|
||||||
|
return (string)link_to_route('kits.show', $this->name, $this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Link to this kit Name
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function fullName()
|
||||||
|
{
|
||||||
|
return $this->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Url to view this item.
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function viewUrl()
|
||||||
|
{
|
||||||
|
return route('kits.show', $this->id);
|
||||||
|
}
|
||||||
|
}
|
10
resources/views/kits/create.blade.php
Normal file
10
resources/views/kits/create.blade.php
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
@extends('layouts/edit-form', [
|
||||||
|
'createText' => 'Create kit',
|
||||||
|
'updateText' => 'Update kit',
|
||||||
|
'formAction' => ($item) ? route('kits.update', ['kit' => $item->id]) : route('kits.store'),
|
||||||
|
])
|
||||||
|
|
||||||
|
{{-- Page content --}}
|
||||||
|
@section('inputFields')
|
||||||
|
@include ('partials.forms.edit.name', ['translated_name' => 'Name']) {{-- TODO: trans --}}
|
||||||
|
@stop
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
{{-- Page content --}}
|
{{-- Page content --}}
|
||||||
@section('inputFields')
|
@section('inputFields')
|
||||||
@include ('partials.forms.edit.name')
|
@include ('partials.forms.edit.name', ['translated_name' => 'Name']) {{-- TODO: trans --}}
|
||||||
@stop
|
@stop
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
|
@ -15,13 +15,14 @@
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="box box-default">
|
<div class="box box-default">
|
||||||
<div class="box-header with-border">
|
<div class="box-header with-border">
|
||||||
<h3 class="box-title">Models</h3>
|
{{-- <h3 class="box-title"><span>Models </span><a href="{{ route('modal.kit.model', ['kit' => $item->id]) }}" data-toggle="modal" data-target="#createModal" class="btn btn-sm btn-primary"><i class="fa fa-plus icon-white"></i> Append</a></h3> --}}
|
||||||
|
<h3 class="box-title"><span>Models </span></h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table
|
<table
|
||||||
data-cookie-id-table="kitModelsTable"
|
data-cookie-id-table="kitModelsTable"
|
||||||
data-columns="{{ \App\Presenters\::modelsDataTableLayout() }}"
|
data-columns="{{ \App\Presenters\PredefinedKitPresenter::dataTableModels() }}"
|
||||||
data-pagination="true"
|
data-pagination="true"
|
||||||
data-search="true"
|
data-search="true"
|
||||||
data-side-pagination="server"
|
data-side-pagination="server"
|
||||||
|
@ -32,12 +33,13 @@
|
||||||
data-sort-name="name"
|
data-sort-name="name"
|
||||||
id="kitModelsTable"
|
id="kitModelsTable"
|
||||||
class="table table-striped snipe-table"
|
class="table table-striped snipe-table"
|
||||||
data-url="{{ route('api.kits.models.index') }}"
|
data-url="{{ route('api.kits.models.index', $item->id) }}"
|
||||||
data-export-options='{
|
data-export-options='{
|
||||||
"fileName": "export-kit-models-{{ date('Y-m-d') }}",
|
"fileName": "export-kit-models-{{ date('Y-m-d') }}",
|
||||||
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
||||||
}'>
|
}'>
|
||||||
</table>
|
</table>
|
||||||
|
<a href="{{ route('modal.kit.model', ['kit' => $item->id]) }}" data-toggle="modal" data-target="#createModal" class="btn btn-primary pull-right"><i class="fa fa-plus icon-white"></i> Append</a>
|
||||||
</div>
|
</div>
|
||||||
</div> <!--.box-body-->
|
</div> <!--.box-body-->
|
||||||
</div> <!-- /.box.box-default-->
|
</div> <!-- /.box.box-default-->
|
||||||
|
@ -54,7 +56,7 @@
|
||||||
|
|
||||||
<table
|
<table
|
||||||
data-cookie-id-table="kitLicensesTable"
|
data-cookie-id-table="kitLicensesTable"
|
||||||
data-columns="{{ \App\Presenters\::licensesDataTableLayout() }}"
|
data-columns="{{ \App\Presenters\PredefinedKitPresenter::dataTableLicenses() }}"
|
||||||
data-pagination="true"
|
data-pagination="true"
|
||||||
data-search="true"
|
data-search="true"
|
||||||
data-side-pagination="server"
|
data-side-pagination="server"
|
||||||
|
@ -65,7 +67,7 @@
|
||||||
data-sort-name="name"
|
data-sort-name="name"
|
||||||
id="kitLicensesTable"
|
id="kitLicensesTable"
|
||||||
class="table table-striped snipe-table"
|
class="table table-striped snipe-table"
|
||||||
data-url="{{ route('api.kits.licenses.index') }}"
|
data-url="{{ route('api.kits.licenses.index', $item->id) }}"
|
||||||
data-export-options='{
|
data-export-options='{
|
||||||
"fileName": "export-kit-models-{{ date('Y-m-d') }}",
|
"fileName": "export-kit-models-{{ date('Y-m-d') }}",
|
||||||
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
||||||
|
@ -76,4 +78,8 @@
|
||||||
</div> <!-- /.box.box-default-->
|
</div> <!-- /.box.box-default-->
|
||||||
</div> <!-- .col-md-12-->
|
</div> <!-- .col-md-12-->
|
||||||
</div>
|
</div>
|
||||||
|
@stop
|
||||||
|
|
||||||
|
@section('moar_scripts')
|
||||||
|
@include ('partials.bootstrap-table')
|
||||||
@stop
|
@stop
|
|
@ -21,7 +21,7 @@ Kits
|
||||||
|
|
||||||
<table
|
<table
|
||||||
data-cookie-id-table="kitsTable"
|
data-cookie-id-table="kitsTable"
|
||||||
data-columns="{{ \App\Presenters\::dataTableLayout() }}"
|
data-columns="{{ \App\Presenters\PredefinedKitPresenter::dataTableLayout() }}"
|
||||||
data-pagination="true"
|
data-pagination="true"
|
||||||
data-search="true"
|
data-search="true"
|
||||||
data-side-pagination="server"
|
data-side-pagination="server"
|
||||||
|
@ -39,6 +39,28 @@ Kits
|
||||||
}'>
|
}'>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
{{-- <h2>Test</h2>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table
|
||||||
|
data-cookie-id-table="kitModelsTable"
|
||||||
|
data-columns="{{ \App\Presenters\PredefinedKitPresenter::dataTableModels() }}"
|
||||||
|
data-pagination="true"
|
||||||
|
data-search="true"
|
||||||
|
data-side-pagination="server"
|
||||||
|
data-show-columns="true"
|
||||||
|
data-show-export="true"
|
||||||
|
data-show-refresh="true"
|
||||||
|
data-sort-order="asc"
|
||||||
|
data-sort-name="name"
|
||||||
|
id="kitModelsTable"
|
||||||
|
class="table table-striped snipe-table"
|
||||||
|
data-url="{{ route('api.kits.models.index', 1) }}"
|
||||||
|
data-export-options='{
|
||||||
|
"fileName": "export-kit-models-{{ date('Y-m-d') }}",
|
||||||
|
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
|
||||||
|
}'>
|
||||||
|
</table>
|
||||||
|
</div> --}}
|
||||||
</div> <!--.box-body-->
|
</div> <!--.box-body-->
|
||||||
</div> <!-- /.box.box-default-->
|
</div> <!-- /.box.box-default-->
|
||||||
</div> <!-- .col-md-12-->
|
</div> <!-- .col-md-12-->
|
||||||
|
|
58
resources/views/kits/model-edit.blade.php
Normal file
58
resources/views/kits/model-edit.blade.php
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
@extends('layouts/edit-form', [
|
||||||
|
'createText' => 'Append model', // TODO: trans
|
||||||
|
'updateText' => 'Update appended model', // TODO: trans
|
||||||
|
'formAction' => ($item) ? route('kits.models.update', ['kit_id' => $kit->id, 'model_id' => $item->model_id]) : route('kits.models.store', ['kit_id' => $kit->id]),
|
||||||
|
])
|
||||||
|
|
||||||
|
{{-- Page content --}}
|
||||||
|
@section('inputFields')
|
||||||
|
{{-- <div class="form-group {{ $errors->has('name') ? ' has-error' : '' }}">
|
||||||
|
<label for="model_id">{{ trans('general.asset_model') }}:</label>
|
||||||
|
<div class="col-md-8 col-xs-12 required">
|
||||||
|
<select class="js-data-ajax select2" data-endpoint="models" name="model" style="width: 100%" id="model_id" value="{{ Input::old('name', $pivot->model_id) }}" data-validation="required" />
|
||||||
|
{{ Form::select('model_id', [] , Input::old('name', $pivot->model_id), array('class'=>'select2', 'style'=>'width:100%')) }}
|
||||||
|
</div>
|
||||||
|
</div> --}}
|
||||||
|
{{-- At first, I tried to use partials.forms.edit.model-select. But, it required ValidatingTrait (rules method). Pivot class doesn't have it. --}}
|
||||||
|
@include ('partials.forms.edit.model-select', ['translated_name' => trans('admin/hardware/form.model'), 'fieldname' => 'model_id', 'required' => 'true'])
|
||||||
|
{{-- <div id="model_id" class="form-group{{ $errors->has('model_id') ? ' has-error' : '' }}">
|
||||||
|
|
||||||
|
{{ Form::label('model_id', trans('admin/hardware/form.model'), array('class' => 'col-md-3 control-label')) }}
|
||||||
|
|
||||||
|
<div class="col-md-7 required">
|
||||||
|
<select class="js-data-ajax" data-endpoint="models" data-placeholder="{{ trans('general.select_model') }}" name="model_id" style="width: 100%" id="model_select_id" data-validation="required">
|
||||||
|
@if ($model_id = Input::old('model_id', (isset($item)) ? $item->model_id : ''))
|
||||||
|
<option value="{{ $model_id }}" selected="selected">
|
||||||
|
{{ (\App\Models\AssetModel::find($model_id)) ? \App\Models\AssetModel::find($model_id)->name : '' }}
|
||||||
|
</option>
|
||||||
|
@else
|
||||||
|
<option value="">{{ trans('general.select_model') }}</option>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 col-sm-1 text-left">
|
||||||
|
@can('create', \App\Models\AssetModel::class)
|
||||||
|
@if ((!isset($hide_new)) || ($hide_new!='true'))
|
||||||
|
<a href='{{ route('modal.model') }}' data-toggle="modal" data-target="#createModal" data-select='model_select_id' class="btn btn-sm btn-default">New</a>
|
||||||
|
<span class="mac_spinner" style="padding-left: 10px; color: green; display:none; width: 30px;"><i class="fa fa-spinner fa-spin"></i> </span>
|
||||||
|
@endif
|
||||||
|
@endcan
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{!! $errors->first('model_id', '<div class="col-md-8 col-md-offset-3"><span class="alert-msg"><i class="fa fa-times"></i> :message</span></div>') !!}
|
||||||
|
</div> --}}
|
||||||
|
<div class="form-group {{ $errors->has('quantity') ? ' has-error' : '' }}">
|
||||||
|
<label for="quantity" class="col-md-3 control-label">{{ trans('general.quantity') }}</label>
|
||||||
|
<div class="col-md-7 required">
|
||||||
|
<div class="col-md-2" style="padding-left:0px">
|
||||||
|
<input class="form-control" type="text" name="quantity" id="quantity" value="{{ Input::old('quantity', $item->quantity) }}" />
|
||||||
|
</div>
|
||||||
|
{!! $errors->first('quantity', '<span class="alert-msg"><i class="fa fa-times"></i> :message</span>') !!}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="hidden" name="pivot_id" value="{{$item->id}}">
|
||||||
|
{{-- <input class="form-control" type="text" name="quantity" id="quantity" value="{{ Input::old('quantity', $item->quantity) }}" /> --}}
|
||||||
|
|
||||||
|
@stop
|
38
resources/views/modals/kit-model.blade.php
Normal file
38
resources/views/modals/kit-model.blade.php
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{{-- See snipeit_modals.js for what powers this --}}
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
|
<span aria-hidden="true">×</span></button>
|
||||||
|
<h4 class="modal-title">Append model{{-- TODO: trans --}}</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form action="{{ route('api.kits.models.store', ['kit_id' => request('kit')]) }}" onsubmit="return false">
|
||||||
|
{{ csrf_field() }}
|
||||||
|
<div class="alert alert-danger" id="modal_error_msg" style="display:none">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dynamic-form-row">
|
||||||
|
<div class="col-md-4 col-xs-12"><label for="modal-model_id">{{ trans('general.asset_model') }}:
|
||||||
|
</label></div>
|
||||||
|
<div class="col-md-8 col-xs-12 required">
|
||||||
|
<select class="js-data-ajax" data-endpoint="models" name="model" style="width: 100%" id="modal-model_id" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dynamic-form-row">
|
||||||
|
<div class="col-md-4 col-xs-12"><label for="modal-quantity_id">Quantity{{-- TODO: trans --}}:
|
||||||
|
</label></div>
|
||||||
|
<div class="col-md-8 col-xs-12 required">
|
||||||
|
<input type='text' name='quantity' id='modal-quantity_id' class="form-control">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('button.cancel') }}</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="modal-save">{{ trans('general.save') }}</button>
|
||||||
|
</div>
|
||||||
|
</div><!-- /.modal-content -->
|
||||||
|
</div><!-- /.modal-dialog -->
|
|
@ -150,22 +150,26 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make the edit/delete buttons
|
// Make the edit/delete buttons
|
||||||
function genericActionsFormatter(destination) {
|
function genericActionsFormatter(owner_name, element_name = '') {
|
||||||
return function (value,row) {
|
return function (value,row) {
|
||||||
|
|
||||||
var actions = '<nobr>';
|
var actions = '<nobr>';
|
||||||
|
|
||||||
// Add some overrides for any funny urls we have
|
// Add some overrides for any funny urls we have
|
||||||
var dest = destination;
|
var dest = owner_name;
|
||||||
|
|
||||||
if (destination=='groups') {
|
if (dest =='groups') {
|
||||||
var dest = 'admin/groups';
|
var dest = 'admin/groups';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (destination=='maintenances') {
|
if (dest =='maintenances') {
|
||||||
var dest = 'hardware/maintenances';
|
var dest = 'hardware/maintenances';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(element_name != '') {
|
||||||
|
dest = dest + '/' + row.owner_id + '/' + element_name;
|
||||||
|
}
|
||||||
|
|
||||||
if ((row.available_actions) && (row.available_actions.clone === true)) {
|
if ((row.available_actions) && (row.available_actions.clone === true)) {
|
||||||
actions += '<a href="{{ url('/') }}/' + dest + '/' + row.id + '/clone" class="btn btn-sm btn-info" data-toggle="tooltip" title="Clone"><i class="fa fa-copy"></i></a> ';
|
actions += '<a href="{{ url('/') }}/' + dest + '/' + row.id + '/clone" class="btn btn-sm btn-info" data-toggle="tooltip" title="Clone"><i class="fa fa-copy"></i></a> ';
|
||||||
}
|
}
|
||||||
|
@ -195,52 +199,6 @@
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// This only works for model index pages because it uses the row's model ID
|
|
||||||
function genericChildActionsFormatter(parent, child) {
|
|
||||||
return function (value,row) {
|
|
||||||
|
|
||||||
var actions = '<nobr>';
|
|
||||||
|
|
||||||
// Add some overrides for any funny urls we have
|
|
||||||
var dest = destination;
|
|
||||||
|
|
||||||
if (destination=='groups') {
|
|
||||||
var dest = 'admin/groups';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (destination=='maintenances') {
|
|
||||||
var dest = 'hardware/maintenances';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((row.available_actions) && (row.available_actions.clone === true)) {
|
|
||||||
actions += '<a href="{{ url('/') }}/' + dest + '/' + row.id + '/clone" class="btn btn-sm btn-info" data-toggle="tooltip" title="Clone"><i class="fa fa-copy"></i></a> ';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((row.available_actions) && (row.available_actions.update === true)) {
|
|
||||||
actions += '<a href="{{ url('/') }}/' + dest + '/' + row.id + '/edit" class="btn btn-sm btn-warning" data-toggle="tooltip" title="Update"><i class="fa fa-pencil"></i></a> ';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((row.available_actions) && (row.available_actions.delete === true)) {
|
|
||||||
actions += '<a href="{{ url('/') }}/' + dest + '/' + row.id + '" '
|
|
||||||
+ ' class="btn btn-danger btn-sm delete-asset" data-tooltip="true" '
|
|
||||||
+ ' data-toggle="modal" '
|
|
||||||
+ ' data-content="{{ trans('general.sure_to_delete') }} ' + row.name + '?" '
|
|
||||||
+ ' data-title="{{ trans('general.delete') }}" onClick="return false;">'
|
|
||||||
+ '<i class="fa fa-trash"></i></a> ';
|
|
||||||
} else {
|
|
||||||
actions += '<a class="btn btn-danger btn-sm delete-asset disabled" onClick="return false;"><i class="fa fa-trash"></i></a> ';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((row.available_actions) && (row.available_actions.restore === true)) {
|
|
||||||
actions += '<a href="{{ url('/') }}/' + dest + '/' + row.id + '/restore" class="btn btn-sm btn-warning" data-toggle="tooltip" title="Restore"><i class="fa fa-retweet"></i></a> ';
|
|
||||||
}
|
|
||||||
|
|
||||||
actions +='</nobr>';
|
|
||||||
return actions;
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// This handles the icons and display of polymorphic entries
|
// This handles the icons and display of polymorphic entries
|
||||||
function polymorphicItemFormatter(value) {
|
function polymorphicItemFormatter(value) {
|
||||||
|
@ -370,10 +328,7 @@
|
||||||
'depreciations',
|
'depreciations',
|
||||||
'fieldsets',
|
'fieldsets',
|
||||||
'groups',
|
'groups',
|
||||||
'kits',
|
'kits'
|
||||||
// METODO: проверить, что эти пути работают
|
|
||||||
'kits.models',
|
|
||||||
'kits.licenses',
|
|
||||||
];
|
];
|
||||||
|
|
||||||
for (var i in formatters) {
|
for (var i in formatters) {
|
||||||
|
@ -383,15 +338,15 @@
|
||||||
window[formatters[i] + 'InOutFormatter'] = genericCheckinCheckoutFormatter(formatters[i]);
|
window[formatters[i] + 'InOutFormatter'] = genericCheckinCheckoutFormatter(formatters[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
var childFormatters = [
|
var child_formatters = [
|
||||||
['kits', 'models'],
|
['kits', 'models'],
|
||||||
['kits', 'licenses'],
|
['kits', 'licenses'],
|
||||||
];
|
];
|
||||||
|
|
||||||
for (var i in childFormatters) {
|
for (var i in child_formatters) {
|
||||||
var parentName = childFormatters[i][0];
|
var owner_name = child_formatters[i][0];
|
||||||
var childName = childFormatters[i][2];
|
var child_name = child_formatters[i][1];
|
||||||
window[childFormatters[i][0] + 'ChildsActionsFormatter'] = genericChildActionsFormatter(childFormatters[i][0], childFormatters[i][1]);
|
window[owner_name + '_' + child_name + 'ActionsFormatter'] = genericActionsFormatter(owner_name, child_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,8 @@ Route::group(['middleware' => 'auth','prefix' => 'modals'], function () {
|
||||||
Route::get('statuslabel',['as' => 'modal.statuslabel','uses' => 'ModalController@statuslabel']);
|
Route::get('statuslabel',['as' => 'modal.statuslabel','uses' => 'ModalController@statuslabel']);
|
||||||
Route::get('supplier',['as' => 'modal.supplier','uses' => 'ModalController@supplier']);
|
Route::get('supplier',['as' => 'modal.supplier','uses' => 'ModalController@supplier']);
|
||||||
Route::get('user',['as' => 'modal.user','uses' => 'ModalController@user']);
|
Route::get('user',['as' => 'modal.user','uses' => 'ModalController@user']);
|
||||||
|
Route::get('kit-model',['as' => 'modal.kit.model','uses' => 'ModalController@kitModel']);
|
||||||
|
Route::get('kit-license',['as' => 'modal.kit.license','uses' => 'ModalController@kitLicense']);
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
// Predefined Kit Management
|
// Predefined Kit Management
|
||||||
Route::resource('kit', 'Kits\PredefinedKitController', [
|
Route::resource('kits', 'Kits\PredefinedKitsController', [
|
||||||
'middleware' => ['auth'],
|
'middleware' => ['auth'],
|
||||||
'parameters' => ['kit' => 'kit_id']
|
'parameters' => ['kit' => 'kit_id']
|
||||||
]);
|
]);
|
||||||
|
@ -10,12 +10,12 @@ Route::resource('kit', 'Kits\PredefinedKitController', [
|
||||||
|
|
||||||
Route::group([ 'prefix' => 'kits/{kit_id}', 'middleware' => ['auth'] ], function () {
|
Route::group([ 'prefix' => 'kits/{kit_id}', 'middleware' => ['auth'] ], function () {
|
||||||
|
|
||||||
Route::get('licenses',
|
// Route::get('licenses',
|
||||||
[
|
// [
|
||||||
'as' => 'kits.licenses.index',
|
// 'as' => 'kits.licenses.index',
|
||||||
'uses' => 'Kits\PredefinedKitsController@indexLicenses',
|
// 'uses' => 'Kits\PredefinedKitsController@indexLicenses',
|
||||||
]
|
// ]
|
||||||
);
|
// );
|
||||||
|
|
||||||
Route::post('licenses',
|
Route::post('licenses',
|
||||||
[
|
[
|
||||||
|
@ -33,18 +33,18 @@ Route::group([ 'prefix' => 'kits/{kit_id}', 'middleware' => ['auth'] ], function
|
||||||
|
|
||||||
Route::delete('licenses/{license_id}',
|
Route::delete('licenses/{license_id}',
|
||||||
[
|
[
|
||||||
'as' => 'kits.licenses.destroy',
|
'as' => 'kits.licenses.detach',
|
||||||
'uses' => 'Kits\PredefinedKitsController@destroyLicense',
|
'uses' => 'Kits\PredefinedKitsController@detachLicense',
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
Route::get('models',
|
// Route::get('models',
|
||||||
[
|
// [
|
||||||
'as' => 'kits.models.index',
|
// 'as' => 'kits.models.index',
|
||||||
'uses' => 'Kits\PredefinedKitsController@indexModels',
|
// 'uses' => 'Kits\PredefinedKitsController@indexModels',
|
||||||
]
|
// ]
|
||||||
);
|
// );
|
||||||
|
|
||||||
Route::post('models',
|
Route::post('models',
|
||||||
[
|
[
|
||||||
|
@ -59,11 +59,18 @@ Route::group([ 'prefix' => 'kits/{kit_id}', 'middleware' => ['auth'] ], function
|
||||||
'uses' => 'Kits\PredefinedKitsController@updateModel',
|
'uses' => 'Kits\PredefinedKitsController@updateModel',
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Route::get('models/{model_id}/edit',
|
||||||
|
[
|
||||||
|
'as' => 'kits.models.edit',
|
||||||
|
'uses' => 'Kits\PredefinedKitsController@editModel',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
Route::delete('models/{model_id}',
|
Route::delete('models/{model_id}',
|
||||||
[
|
[
|
||||||
'as' => 'kits.models.destroy',
|
'as' => 'kits.models.detach',
|
||||||
'uses' => 'Kits\PredefinedKitsController@destroyModel',
|
'uses' => 'Kits\PredefinedKitsController@detachModel',
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue