Commit 797b04d2 authored by OskarStenberg's avatar OskarStenberg
Browse files

Merged bulkConsumableActions

parent f1437063
<?php
namespace App\Http\Controllers\Consumables;
use App\Helpers\Helper;
use App\Http\Controllers\CheckInOutRequest;
use App\Http\Controllers\Controller;
use App\Models\Consumable;
use App\Models\Setting;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class BulkConsumablesController extends Controller
{
use CheckInOutRequest;
/**
* Display the bulk edit page.
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @return View
* @internal param int $assetId
* @since [v2.0]
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function edit(Request $request)
{
$this->authorize('update', Consumable::class);
if (!$request->filled('ids')) {
return redirect()->back()->with('error', 'No assets selected');
}
$consumable_ids = array_keys($request->input('ids'));
if ($request->filled('bulk_actions')) {
switch($request->input('bulk_actions')) {
case 'labels':
return view('consumables/labels')
->with('consumables', Consumable::find($consumable_ids))
->with('settings', Setting::getSettings())
->with('bulkedit', true)
->with('count', 0);
case 'delete':
$consumables = Consumable::find($consumable_ids);
$consumables->each(function ($consumable) {
$this->authorize('delete', $consumable);
});
return view('consumables/bulk-delete')->with('consumables', $consumables);
case 'edit':
return view('consumables/bulk')
->with('consumables', request('ids'));
}
}
return redirect()->back()->with('error', 'No action selected');
}
/**
* Save bulk edits
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @return Redirect
* @internal param array $assets
* @since [v2.0]
*/
public function update(Request $request)
{
$this->authorize('update', Consumable::class);
\Log::debug($request->input('ids'));
if(!$request->filled('ids') || count($request->input('ids')) <= 0) {
return redirect()->route("consumables.index")->with('warning', trans('No consumables selected, so nothing was updated.')); //TODO: trans
}
$consumables = array_keys($request->input('ids'));
if (($request->filled('purchase_date'))
|| ($request->filled('purchase_cost'))
|| ($request->filled('category_id'))
|| ($request->filled('order_number'))
|| ($request->filled('location_id'))
|| ($request->filled('qty'))
|| ($request->filled('company_id'))
|| ($request->filled('manufacturer_id'))
|| ($request->filled('min_amt'))
|| ($request->filled('model_number'))
) {
foreach ($consumables as $consumableId) {
$this->update_array = [];
$this->conditionallyAddItem('purchase_date')
->conditionallyAddItem('purchase_cost')
->conditionallyAddItem('order_number')
->conditionallyAddItem('requestable')
->conditionallyAddItem('status_id')
->conditionallyAddItem('supplier_id')
->conditionallyAddItem('category_id')
->conditionallyAddItem('manufacturer_id')
->conditionallyAddItem('qty')
->conditionallyAddItem('min_amt')
->conditionallyAddItem('warranty_months');
if ($request->filled('purchase_cost')) {
$this->update_array['purchase_cost'] = Helper::ParseFloat($request->input('purchase_cost'));
}
if ($request->filled('company_id')) {
$this->update_array['company_id'] = $request->input('company_id');
if ($request->input('company_id')=="clear") {
$this->update_array['company_id'] = null;
}
}
if ($request->filled('qty')) {
$this->update_array['qty'] = $request->input('qty');
}
if ($request->filled('min_amt')) {
$this->update_array['min_amt'] = $request->input('min_amt');
}
if ($request->filled('category_id')) {
$this->update_array['category_id'] = $request->input('category_id');
}
if ($request->filled('location_id')) {
$this->update_array['location_id'] = $request->input('location_id');
}
if ($request->filled('manufacturer_id')) {
$this->update_array['manufacturer_id'] = $request->input('manufacturer_id');
}
\Log::debug(implode(", ", $this->update_array));
\Log::debug(implode(", ", array_keys($this->update_array)));
DB::table('consumables')
->where('id', $consumableId)
->update($this->update_array);
} // endforeach
return redirect()->route("consumables.index")->with('success', trans('admin/consumables/message.update.success'));
// no values given, nothing to update
}
return redirect()->route("consumables.index")->with('warning', trans('admin/consumables/message.update.nothing_updated'));
}
/**
* Array to store update data per item
* @var Array
*/
private $update_array;
/**
* Adds parameter to update array for an item if it exists in request
* @param String $field field name
* @return BulkAssetsController Model for Chaining
*/
protected function conditionallyAddItem($field)
{
if(request()->filled($field)) {
$this->update_array[$field] = request()->input($field);
}
return $this;
}
/**
* Save bulk deleted.
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @param Request $request
* @return View
* @throws \Illuminate\Auth\Access\AuthorizationException
* @internal param array $assets
* @since [v2.0]
*/
public function destroy(Request $request)
{
$this->authorize('delete', Consumable::class);
if ($request->filled('ids')) {
$consumables = Consumable::find($request->get('ids'));
foreach ($consumables as $consumable) {
$update_array['deleted_at'] = date('Y-m-d H:i:s');
DB::table('consumables')
->where('id', $consumable->id)
->update($update_array);
} // endforeach
return redirect()->to("consumables")->with('success', trans('admin/consumables/message.delete.success'));
// no values given, nothing to update
}
return redirect()->to("consumables")->with('info', trans('admin/consumables/message.delete.nothing_updated'));
}
}
<?php
return array(
'bulk_delete' => 'Confirm Bulk Delete Consumables',
'bulk_delete_help' => 'Review the consumables for bulk deletion below. Once deleted, these consumables can be restored.',
'bulk_delete_warn' => 'You are about to delete :consumable_count consumables.',
'bulk_update' => 'Bulk Update Consumables',
'bulk_update_help' => 'This form allows you to update multiple consumables at once. Only fill in the fields you need to change. Any fields left blank will remain unchanged. ',
'bulk_update_warn' => 'You are about to edit the properties of :consumable_count consumables.',
'cost' => 'Purchase Cost',
'create' => 'Create Asset',
'date' => 'Purchase Date',
'manufacturer' => 'Manufacturer',
'model' => 'Model',
'months' => 'months',
'name' => 'Asset Name',
'notes' => 'Notes',
'order' => 'Order Number',
'qr' => 'QR Code',
'category' => 'Consumable Category',
'update' => 'Consumable Update',
'years' => 'years',
)
;
@extends('layouts/default')
{{-- Page title --}}
@section('title')
{{ trans('admin/consumables/form.bulk_delete') }}
@parent
@stop
@section('header_right')
<a href="{{ URL::previous() }}" class="btn btn-primary pull-right">
{{ trans('general.back') }}</a>
@stop
{{-- Page content --}}
@section('content')
<div class="row">
<!-- left column -->
<div class="col-md-12">
<p>{{ trans('admin/consumables/form.bulk_delete_help') }}</p>
<form class="form-horizontal" method="post" action="{{ route('consumables/bulkdelete') }}" autocomplete="off" role="form">
{{csrf_field()}}
<div class="box box-default">
<div class="box-header with-border">
<h2 class="box-title" style="color: red">{{ trans('admin/consumables/form.bulk_delete_warn', ['consumable_count' => count($consumables)]) }}</h2>
</div>
<div class="box-body">
<table class="table table-striped table-condensed">
<thead>
<tr>
<td></td>
<td>ID</td>
<td>Name</td>
<td>Location</td>
</tr>
</thead>
<tbody>
@foreach ($consumables as $consumable)
<tr>
<td><input type="checkbox" name="ids[]" value="{{ $consumable->id }}" checked="checked"></td>
<td>{{ $consumable->id }}</td>
<td>{{ $consumable->present()->name() }}</td>
<td>
@if ($consumable->location)
{{ $consumable->location->name }}
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
</div><!-- /.box-body -->
<div class="box-footer text-right">
<a class="btn btn-link" href="{{ URL::previous() }}" method="post" enctype="multipart/form-data">{{ trans('button.cancel') }}</a>
<button type="submit" class="btn btn-success" id="submit-button"><i class="fa fa-check icon-white" aria-hidden="true"></i> {{ trans('general.delete') }}</button>
</div><!-- /.box-footer -->
</div><!-- /.box -->
</form>
</div> <!-- .col-md-12-->
</div><!--.row-->
@stop
@extends('layouts/default')
{{-- Page title --}}
@section('title')
{{ trans('admin/consumables/form.update') }}
@parent
@stop
@section('header_right')
<a href="{{ URL::previous() }}" class="btn btn-sm btn-primary pull-right">
{{ trans('general.back') }}</a>
@stop
{{-- Page content --}}
@section('content')
<div class="row">
<div class="col-md-8 col-md-offset-2">
<p>{{ trans('admin/consumables/form.bulk_update_help') }}</p>
<div class="callout callout-warning">
<i class="fa fa-warning"></i> {{ trans('admin/consumables/form.bulk_update_warn', ['consumable_count' => count($consumables)]) }}
</div>
<form class="form-horizontal" method="post" action="{{ route('consumables/bulksave') }}" autocomplete="off" role="form">
{{ csrf_field() }}
<div class="box box-default">
<div class="box-body">
<!-- Company -->
@include ('partials.forms.edit.company-select', ['translated_name' => trans('general.company'), 'fieldname' => 'company_id'])
<!-- Category -->
<div id="{{ 'category_id' }}" class="form-group category_id">
{{ Form::label('category_id', trans('general.category'), array('class' => 'col-md-3 control-label')) }}
<div class="col-md-7">
<select class="js-data-ajax" data-endpoint="categories/{{ (isset($category_type)) ? $category_type : 'consumable' }}" data-placeholder="{{ trans('general.select_category') }}" name="category_id" style="width: 100%" id="category_select_id" aria-label="category_id">
<option value="" role="option">{{ trans('general.select_category') }}</option>
</select>
</div>
<div class="col-md-1 col-sm-1 text-left">
@can('create', \App\Models\Category::class)
@if ((!isset($hide_new)) || ($hide_new!='true'))
<a href='{{ route('modal.show',['type' => 'category', 'category_type' => isset($category_type) ? $category_type : 'consumable' ]) }}' data-toggle="modal" data-target="#createModal" data-select='category_select_id' class="btn btn-sm btn-primary">New</a>
@endif
@endcan
</div>
{!! $errors->first('category_id', '<div class="col-md-8 col-md-offset-3"><span class="alert-msg" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i> :message</span></div>') !!}
</div>
<!-- Manufacturer -->
<div id="manufacturer_id" class="form-group manufacturer_id">
{{ Form::label('manufacturer_id', trans('general.manufacturer'), array('class' => 'col-md-3 control-label')) }}
<div class="col-md-7">
<select class="js-data-ajax" data-endpoint="manufacturers" data-placeholder="{{ trans('general.select_manufacturer') }}" name="manufacturer_id" style="width: 100%" id="manufacturer_select_id" aria-label="manufacturer_id">
<option value="" role="option">{{ trans('general.select_manufacturer') }}</option>
</select>
</div>
<div class="col-md-1 col-sm-1 text-left">
@can('create', \App\Models\Manufacturer::class)
@if ((!isset($hide_new)) || ($hide_new!='true'))
<a href='{{ route('modal.show', 'manufacturer') }}' data-toggle="modal" data-target="#createModal" data-select='manufacturer_select_id' class="btn btn-sm btn-primary">New</a>
@endif
@endcan
</div>
{!! $errors->first('manufacturer_id', '<div class="col-md-8 col-md-offset-3"><span class="alert-msg" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i> :message</span></div>') !!}
</div>
<!-- Location -->
<div id="location_id" class="form-group location_id"{!! (isset($style)) ? ' style="'.e($style).'"' : '' !!}>
{{ Form::label('location_id', trans('general.location'), array('class' => 'col-md-3 control-label')) }}
<div class="col-md-6">
<select class="js-data-ajax" data-endpoint="locations" data-placeholder="{{ trans('general.select_location') }}" name="location_id" style="width: 100%" id="location_id_location_select" aria-label="location_id">
<option value="" role="option">{{ trans('general.select_location') }}</option>
</select>
</div>
<div class="col-md-1 col-sm-1 text-left">
@can('create', \App\Models\Location::class)
@if ((!isset($hide_new)) || ($hide_new!='true'))
<a href='{{ route('modal.show', 'location') }}' data-toggle="modal" data-target="#createModal" data-select='location_id_location_select' class="btn btn-sm btn-primary">New</a>
@endif
@endcan
</div>
{!! $errors->first('location_id', '<div class="col-md-8 col-md-offset-3"><span class="alert-msg" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i> :message</span></div>') !!}
@if (isset($help_text))
<div class="col-md-7 col-sm-11 col-md-offset-3">
<p class="help-block">{{ $help_text }}</p>
</div>
@endif
</div>
<!-- Model Number -->
<div class="form-group {{ $errors->has('model_number') ? ' has-error' : '' }}">
<label for="model_number" class="col-md-3 control-label">{{ trans('general.model_no') }}</label>
<div class="col-md-7">
<input class="form-control" type="text" name="model_number" aria-label="model_number" id="model_number" value="" />
{!! $errors->first('model_number', '<span class="alert-msg" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i> :message</span>') !!}
</div>
</div>
<!-- Order Number -->
<div class="form-group {{ $errors->has('order_number') ? ' has-error' : '' }}">
<label for="order_number" class="col-md-3 control-label">{{ trans('general.order_number') }}</label>
<div class="col-md-7 col-sm-12">
<input class="form-control" type="text" name="order_number" aria-label="order_number" id="order_number" value="" />
{!! $errors->first('order_number', '<span class="alert-msg" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i> :message</span>') !!}
</div>
</div>
<!-- Purchase Date -->
<div class="form-group {{ $errors->has('purchase_date') ? ' has-error' : '' }}">
<label for="purchase_date" class="col-md-3 control-label">{{ trans('general.purchase_date') }}</label>
<div class="input-group col-md-3">
<div class="input-group date" data-provide="datepicker" data-date-format="yyyy-mm-dd" data-autoclose="true">
<input type="text" class="form-control" placeholder="{{ trans('general.select_date') }}" name="purchase_date" id="purchase_date" value="">
<span class="input-group-addon"><i class="fa fa-calendar" aria-hidden="true"></i></span>
</div>
{!! $errors->first('purchase_date', '<span class="alert-msg" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i> :message</span>') !!}
</div>
</div>
<!-- Purchase Cost -->
<div class="form-group {{ $errors->has('purchase_cost') ? ' has-error' : '' }}">
<label for="purchase_cost" class="col-md-3 control-label">{{ trans('general.purchase_cost') }}</label>
<div class="col-md-9">
<div class="input-group col-md-4" style="padding-left: 0px;">
<input class="form-control" type="text" name="purchase_cost" aria-label="purchase_cost" id="purchase_cost" value="" />
<span class="input-group-addon">
@if (isset($currency_type))
{{ $currency_type }}
@else
{{ $snipeSettings->default_currency }}
@endif
</span>
</div>
<div class="col-md-9" style="padding-left: 0px;">
{!! $errors->first('purchase_cost', '<span class="alert-msg" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i> :message</span>') !!}
</div>
</div>
</div>
<!-- QTY -->
<div class="form-group {{ $errors->has('qty') ? ' has-error' : '' }}">
<label for="qty" class="col-md-3 control-label">{{ trans('general.quantity') }}</label>
<div class="col-md-7">
<div class="col-md-2" style="padding-left:0px">
<input class="form-control" type="text" name="qty" aria-label="qty" id="qty" value="">
</div>
{!! $errors->first('qty', '<span class="alert-msg" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i> :message</span>') !!}
</div>
</div>
<!-- Min QTY -->
<div class="form-group{{ $errors->has('min_amt') ? ' has-error' : '' }}">
<label for="min_amt" class="col-md-3 control-label">{{ trans('general.min_amt') }}</label>
<div class="col-md-9">
<div class="col-md-2" style="padding-left:0px">
<input class="form-control col-md-3" type="text" name="min_amt" id="min_amt" aria-label="min_amt" value="" />
</div>
<div class="col-md-7" style="margin-left: -15px;">
<a href="#" data-toggle="tooltip" title="{{ trans('general.min_amt_help') }}"><i class="fa fa-info-circle" aria-hidden="true"></i>
<span class="sr-only">{{ trans('general.min_amt_help') }}</span>
</a>
</div>
<div class="col-md-12">
{!! $errors->first('min_amt', '<span class="alert-msg" aria-hidden="true"><i class="fa fa-times" aria-hidden="true"></i> :message</span>') !!}
</div>
</div>
</div>
@foreach ($consumables as $key => $value)
<input type="hidden" name="ids[{{ $key }}]" value="1">
@endforeach
</div> <!--/.box-body-->
<div class="text-right box-footer">
<button type="submit" class="btn btn-success"><i class="fa fa-check icon-white" aria-hidden="true"></i> {{ trans('general.save') }}</button>
</div>
</div> <!--/.box.box-default-->
</form>
</div> <!--/.col-md-8-->
</div>
@stop
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment