2017-01-12 19:40:20 -08:00
< ? php
namespace App\Http\Controllers\Api ;
use App\Helpers\Helper ;
2019-03-13 20:12:03 -07:00
use App\Http\Controllers\Controller ;
2017-03-10 22:08:59 -08:00
use App\Http\Transformers\ManufacturersTransformer ;
2017-10-26 22:09:08 -07:00
use App\Http\Transformers\SelectlistTransformer ;
2023-11-22 10:04:24 -08:00
use App\Models\Actionlog ;
2019-03-13 20:12:03 -07:00
use App\Models\Manufacturer ;
use Illuminate\Http\Request ;
2021-06-29 02:28:52 -07:00
use App\Http\Requests\ImageUploadRequest ;
2018-09-29 21:33:52 -07:00
use Illuminate\Support\Facades\Storage ;
2024-07-04 23:07:20 -07:00
use Illuminate\Http\JsonResponse ;
2017-01-12 19:40:20 -08:00
class ManufacturersController extends Controller
{
/**
* Display a listing of the resource .
*
* @ author [ A . Gianotto ] [ < snipe @ snipe . net > ]
* @ since [ v4 . 0 ]
* @ return \Illuminate\Http\Response
*/
2024-07-04 23:07:20 -07:00
public function index ( Request $request ) : JsonResponse | array
2017-01-12 19:40:20 -08:00
{
$this -> authorize ( 'view' , Manufacturer :: class );
2023-04-26 16:39:15 -07:00
$allowed_columns = [ 'id' , 'name' , 'url' , 'support_url' , 'support_email' , 'warranty_lookup_url' , 'support_phone' , 'created_at' , 'updated_at' , 'image' , 'assets_count' , 'consumables_count' , 'components_count' , 'licenses_count' ];
2017-01-13 09:37:06 -08:00
$manufacturers = Manufacturer :: select (
2023-04-26 16:39:15 -07:00
[ 'id' , 'name' , 'url' , 'support_url' , 'warranty_lookup_url' , 'support_email' , 'support_phone' , 'created_at' , 'updated_at' , 'image' , 'deleted_at' ]
2019-05-22 00:52:51 -07:00
) -> withCount ( 'assets as assets_count' ) -> withCount ( 'licenses as licenses_count' ) -> withCount ( 'consumables as consumables_count' ) -> withCount ( 'accessories as accessories_count' );
2017-01-13 09:37:06 -08:00
2021-06-10 13:15:52 -07:00
if ( $request -> input ( 'deleted' ) == 'true' ) {
2018-03-03 18:46:19 -08:00
$manufacturers -> onlyTrashed ();
}
2017-01-13 09:37:06 -08:00
2019-05-23 17:39:50 -07:00
if ( $request -> filled ( 'search' )) {
2017-01-13 09:37:06 -08:00
$manufacturers = $manufacturers -> TextSearch ( $request -> input ( 'search' ));
}
2022-06-28 19:59:45 -07:00
if ( $request -> filled ( 'name' )) {
$manufacturers -> where ( 'name' , '=' , $request -> input ( 'name' ));
}
if ( $request -> filled ( 'url' )) {
$manufacturers -> where ( 'url' , '=' , $request -> input ( 'url' ));
}
if ( $request -> filled ( 'support_url' )) {
$manufacturers -> where ( 'support_url' , '=' , $request -> input ( 'support_url' ));
}
2023-04-26 16:39:15 -07:00
if ( $request -> filled ( 'warranty_lookup_url' )) {
$manufacturers -> where ( 'warranty_lookup_url' , '=' , $request -> input ( 'warranty_lookup_url' ));
}
2022-06-28 19:59:45 -07:00
if ( $request -> filled ( 'support_phone' )) {
$manufacturers -> where ( 'support_phone' , '=' , $request -> input ( 'support_phone' ));
}
if ( $request -> filled ( 'support_email' )) {
$manufacturers -> where ( 'support_email' , '=' , $request -> input ( 'support_email' ));
}
2023-04-12 11:28:46 -07:00
// Make sure the offset and limit are actually integers and do not exceed system limits
2023-10-14 12:39:52 -07:00
$offset = ( $request -> input ( 'offset' ) > $manufacturers -> count ()) ? $manufacturers -> count () : app ( 'api_offset_value' );
2023-04-16 08:46:39 -07:00
$limit = app ( 'api_limit_value' );
2019-09-03 14:02:08 -07:00
2017-01-13 09:37:06 -08:00
$order = $request -> input ( 'order' ) === 'asc' ? 'asc' : 'desc' ;
$sort = in_array ( $request -> input ( 'sort' ), $allowed_columns ) ? $request -> input ( 'sort' ) : 'created_at' ;
$manufacturers -> orderBy ( $sort , $order );
$total = $manufacturers -> count ();
$manufacturers = $manufacturers -> skip ( $offset ) -> take ( $limit ) -> get ();
2021-06-10 13:15:52 -07:00
2017-03-10 22:08:59 -08:00
return ( new ManufacturersTransformer ) -> transformManufacturers ( $manufacturers , $total );
2017-01-12 19:40:20 -08:00
}
/**
* Store a newly created resource in storage .
*
* @ author [ A . Gianotto ] [ < snipe @ snipe . net > ]
* @ since [ v4 . 0 ]
2021-06-29 02:28:52 -07:00
* @ param \App\Http\Requests\ImageUploadRequest $request
2017-01-12 19:40:20 -08:00
*/
2024-07-04 23:07:20 -07:00
public function store ( ImageUploadRequest $request ) : JsonResponse
2017-01-12 19:40:20 -08:00
{
$this -> authorize ( 'create' , Manufacturer :: class );
$manufacturer = new Manufacturer ;
$manufacturer -> fill ( $request -> all ());
2021-06-29 02:28:52 -07:00
$manufacturer = $request -> handleImages ( $manufacturer );
2017-01-12 19:40:20 -08:00
if ( $manufacturer -> save ()) {
return response () -> json ( Helper :: formatStandardApiResponse ( 'success' , $manufacturer , trans ( 'admin/manufacturers/message.create.success' )));
}
2021-06-10 13:15:52 -07:00
return response () -> json ( Helper :: formatStandardApiResponse ( 'error' , null , $manufacturer -> getErrors ()));
2017-01-12 19:40:20 -08:00
}
/**
* Display the specified resource .
*
* @ author [ A . Gianotto ] [ < snipe @ snipe . net > ]
* @ since [ v4 . 0 ]
* @ param int $id
*/
2024-07-04 23:07:20 -07:00
public function show ( $id ) : JsonResponse | array
2017-01-12 19:40:20 -08:00
{
$this -> authorize ( 'view' , Manufacturer :: class );
2019-05-24 14:21:53 -07:00
$manufacturer = Manufacturer :: withCount ( 'assets as assets_count' ) -> withCount ( 'licenses as licenses_count' ) -> withCount ( 'consumables as consumables_count' ) -> withCount ( 'accessories as accessories_count' ) -> findOrFail ( $id );
2021-06-10 13:15:52 -07:00
2017-07-29 15:46:10 -07:00
return ( new ManufacturersTransformer ) -> transformManufacturer ( $manufacturer );
2017-01-12 19:40:20 -08:00
}
/**
* Update the specified resource in storage .
*
* @ author [ A . Gianotto ] [ < snipe @ snipe . net > ]
* @ since [ v4 . 0 ]
2021-06-29 02:28:52 -07:00
* @ param \App\Http\Requests\ImageUploadRequest $request
2017-01-12 19:40:20 -08:00
* @ param int $id
*/
2024-07-04 23:07:20 -07:00
public function update ( ImageUploadRequest $request , $id ) : JsonResponse
2017-01-12 19:40:20 -08:00
{
2018-07-12 18:28:02 -07:00
$this -> authorize ( 'update' , Manufacturer :: class );
2017-01-12 19:40:20 -08:00
$manufacturer = Manufacturer :: findOrFail ( $id );
$manufacturer -> fill ( $request -> all ());
2021-06-29 04:25:20 -07:00
$manufacturer = $request -> handleImages ( $manufacturer );
2017-01-12 19:40:20 -08:00
if ( $manufacturer -> save ()) {
return response () -> json ( Helper :: formatStandardApiResponse ( 'success' , $manufacturer , trans ( 'admin/manufacturers/message.update.success' )));
}
return response () -> json ( Helper :: formatStandardApiResponse ( 'error' , null , $manufacturer -> getErrors ()));
}
/**
* Remove the specified resource from storage .
*
* @ author [ A . Gianotto ] [ < snipe @ snipe . net > ]
* @ since [ v4 . 0 ]
* @ param int $id
*/
2024-07-04 23:07:20 -07:00
public function destroy ( $id ) : JsonResponse
2017-01-12 19:40:20 -08:00
{
$this -> authorize ( 'delete' , Manufacturer :: class );
2020-05-23 10:36:02 -07:00
$manufacturer = Manufacturer :: findOrFail ( $id );
2017-01-12 19:40:20 -08:00
$this -> authorize ( 'delete' , $manufacturer );
2018-09-24 19:04:00 -07:00
2020-05-23 10:36:02 -07:00
if ( $manufacturer -> isDeletable ()) {
2018-09-24 19:04:00 -07:00
$manufacturer -> delete ();
return response () -> json ( Helper :: formatStandardApiResponse ( 'success' , null , trans ( 'admin/manufacturers/message.delete.success' )));
2021-06-10 13:15:52 -07:00
}
2017-01-12 19:40:20 -08:00
2020-05-23 10:36:02 -07:00
return response () -> json ( Helper :: formatStandardApiResponse ( 'error' , null , trans ( 'admin/manufacturers/message.assoc_users' )));
2018-09-24 19:04:00 -07:00
2017-01-12 19:40:20 -08:00
}
2017-10-26 22:09:08 -07:00
2023-11-22 10:04:24 -08:00
/**
* Restore a given Manufacturer ( mark as un - deleted )
*
* @ author [ A . Gianotto ] [ < snipe @ snipe . net > ]
* @ since [ v6 . 3.4 ]
* @ param int $id
* @ throws \Illuminate\Auth\Access\AuthorizationException
*/
2024-07-04 23:07:20 -07:00
public function restore ( $id ) : JsonResponse
2023-11-22 10:04:24 -08:00
{
$this -> authorize ( 'delete' , Manufacturer :: class );
if ( $manufacturer = Manufacturer :: withTrashed () -> find ( $id )) {
if ( $manufacturer -> deleted_at == '' ) {
return response () -> json ( Helper :: formatStandardApiResponse ( 'error' , trans ( 'general.not_deleted' , [ 'item_type' => trans ( 'general.manufacturer' )])), 200 );
}
if ( $manufacturer -> restore ()) {
$logaction = new Actionlog ();
$logaction -> item_type = Manufacturer :: class ;
$logaction -> item_id = $manufacturer -> id ;
$logaction -> created_at = date ( 'Y-m-d H:i:s' );
2024-09-17 14:16:41 -07:00
$logaction -> created_by = auth () -> id ();
2023-11-22 12:08:41 -08:00
$logaction -> logaction ( 'restore' );
2023-11-22 10:04:24 -08:00
return response () -> json ( Helper :: formatStandardApiResponse ( 'success' , trans ( 'admin/manufacturers/message.restore.success' )), 200 );
}
// Check validation to make sure we're not restoring an item with the same unique attributes as a non-deleted one
return response () -> json ( Helper :: formatStandardApiResponse ( 'error' , trans ( 'general.could_not_restore' , [ 'item_type' => trans ( 'general.manufacturer' ), 'error' => $manufacturer -> getErrors () -> first ()])), 200 );
}
return response () -> json ( Helper :: formatStandardApiResponse ( 'error' , null , trans ( 'admin/manufacturers/message.does_not_exist' )));
}
2017-10-26 22:09:08 -07:00
/**
* Gets a paginated collection for the select2 menus
*
* @ author [ A . Gianotto ] [ < snipe @ snipe . net > ]
* @ since [ v4 . 0.16 ]
* @ see \App\Http\Transformers\SelectlistTransformer
*/
2024-07-04 23:07:20 -07:00
public function selectlist ( Request $request ) : array
2017-10-26 22:09:08 -07:00
{
2022-02-11 11:46:14 -08:00
$this -> authorize ( 'view.selectlists' );
2017-10-26 22:09:08 -07:00
$manufacturers = Manufacturer :: select ([
'id' ,
'name' ,
'image' ,
]);
2019-05-23 17:39:50 -07:00
if ( $request -> filled ( 'search' )) {
2017-10-26 22:09:08 -07:00
$manufacturers = $manufacturers -> where ( 'name' , 'LIKE' , '%' . $request -> get ( 'search' ) . '%' );
}
$manufacturers = $manufacturers -> orderBy ( 'name' , 'ASC' ) -> paginate ( 50 );
// Loop through and set some custom properties for the transformer to use.
// This lets us have more flexibility in special cases like assets, where
// they may not have a ->name value but we want to display something anyway
foreach ( $manufacturers as $manufacturer ) {
$manufacturer -> use_text = $manufacturer -> name ;
2018-09-29 21:33:52 -07:00
$manufacturer -> use_image = ( $manufacturer -> image ) ? Storage :: disk ( 'public' ) -> url ( 'manufacturers/' . $manufacturer -> image , $manufacturer -> image ) : null ;
2017-10-26 22:09:08 -07:00
}
return ( new SelectlistTransformer ) -> transformSelectlist ( $manufacturers );
}
2017-01-12 19:40:20 -08:00
}