190 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			190 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
 | 
						|
namespace Modules\Admin\app\Http\Controllers;
 | 
						|
 | 
						|
use App\Http\Controllers\Controller;
 | 
						|
use App\Models\Client;
 | 
						|
use App\Traits\HasFilterRequest;
 | 
						|
use App\Traits\HasOrderByRequest;
 | 
						|
use Illuminate\Http\RedirectResponse;
 | 
						|
use Illuminate\Http\Request;
 | 
						|
use Illuminate\Http\Response;
 | 
						|
use Illuminate\Support\Facades\File;
 | 
						|
use Illuminate\Support\Facades\Storage;
 | 
						|
use JsonException;
 | 
						|
use Modules\Admin\app\Http\Requests\ClientRequest;
 | 
						|
 | 
						|
class ClientController extends Controller
 | 
						|
{
 | 
						|
    use HasOrderByRequest;
 | 
						|
    use HasFilterRequest;
 | 
						|
 | 
						|
    public function __construct()
 | 
						|
    {
 | 
						|
        // module check model exist and table
 | 
						|
        if (!class_exists(Client::class)) {
 | 
						|
            throw new JsonException("user table not exist");
 | 
						|
        }
 | 
						|
        ;
 | 
						|
    }
 | 
						|
 | 
						|
    public function get(Request $request)
 | 
						|
    {
 | 
						|
        $client = new Client;
 | 
						|
 | 
						|
        // Order by
 | 
						|
        $this->orderByRequest($client, $request);
 | 
						|
 | 
						|
        // Filter
 | 
						|
        $this->filterRequest(
 | 
						|
            builder: $client,
 | 
						|
            request: $request,
 | 
						|
            filterKeys: [
 | 
						|
                'name' => self::F_TEXT,
 | 
						|
                'phone' => self::F_TEXT,
 | 
						|
                'email' => self::F_TEXT,
 | 
						|
                'company' => self::F_TEXT,
 | 
						|
                'status' => self::F_BOOLEAN,
 | 
						|
                'subscribe' => self::F_BOOLEAN,
 | 
						|
            ]
 | 
						|
        );
 | 
						|
 | 
						|
        $responseData = array_merge(
 | 
						|
            $client->paginate($request->get('per_page'))->toArray(),
 | 
						|
            ['status' => true]
 | 
						|
        );
 | 
						|
 | 
						|
        return response()->json($responseData);
 | 
						|
    }
 | 
						|
 | 
						|
    public function create(ClientRequest $request)
 | 
						|
    {
 | 
						|
        $payload = $request->all();
 | 
						|
 | 
						|
        $client = new Client;
 | 
						|
 | 
						|
        $client->name = $request->get('name');
 | 
						|
        $client->password = bcrypt($request->get('password', Client::DEFAULT_PASSWORD));
 | 
						|
        $client->email = $request->get('email', '');
 | 
						|
        $client->email_verified_at = now();
 | 
						|
        $client->phone = $request->get('phone', '');
 | 
						|
        $client->country_code = $request->get('country_code', 'AU');
 | 
						|
        $client->company = $request->get('company', '');
 | 
						|
        $client->save();
 | 
						|
 | 
						|
        if ($request->hasFile('avatar')) {
 | 
						|
            $file = $request->file('avatar');
 | 
						|
            $filename = $client->id . '.' . $file->getClientOriginalExtension();
 | 
						|
            $path = Client::PATH_AVATAR . "/$filename";
 | 
						|
 | 
						|
            Storage::disk('public')->put($path, $file->get());
 | 
						|
 | 
						|
            $client->avatar = $path;
 | 
						|
            $client->save();
 | 
						|
        }
 | 
						|
 | 
						|
        return response()->json([
 | 
						|
            'data' => $client,
 | 
						|
            'status' => true
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    public function update(ClientRequest $request)
 | 
						|
    {
 | 
						|
        $id = $request->get('id');
 | 
						|
 | 
						|
        $client = Client::find($id);
 | 
						|
 | 
						|
        if ($request->has('name')) {
 | 
						|
            $client->name = $request->get('name');
 | 
						|
        }
 | 
						|
        if ($request->has('password') && !empty($request->get('password'))) {
 | 
						|
            $client->password = bcrypt($request->get('password'));
 | 
						|
        }
 | 
						|
        if ($request->has('email')) {
 | 
						|
            $client->email = $request->get('email');
 | 
						|
        }
 | 
						|
        if ($request->has('phone')) {
 | 
						|
            $client->phone = $request->get('phone');
 | 
						|
        }
 | 
						|
        if ($request->has('company')) {
 | 
						|
            $client->company = $request->get('company');
 | 
						|
        }
 | 
						|
        if ($request->has('country_code')) {
 | 
						|
            $client->country_code = $request->get('country_code');
 | 
						|
        }
 | 
						|
        if ($request->has('status')) {
 | 
						|
            $client->status = ($request->get('status') == 'true' || $request->get('status') == '1') ? 1 : 0;
 | 
						|
        }
 | 
						|
        $client->save();
 | 
						|
 | 
						|
        if ($request->hasFile('avatar')) {
 | 
						|
            $file = $request->file('avatar');
 | 
						|
            $filename = $client->id . '.' . $file->getClientOriginalExtension();
 | 
						|
            $path = Client::PATH_AVATAR . "/$filename";
 | 
						|
            $avatarOld = Storage::disk('public')->exists($client->avatar);
 | 
						|
 | 
						|
            if ($avatarOld) {
 | 
						|
                Storage::disk('public')->delete($client->avatar);
 | 
						|
            }
 | 
						|
 | 
						|
            Storage::disk('public')->put($path, $file->get());
 | 
						|
            $client->update([
 | 
						|
                'avatar' => $path
 | 
						|
            ]);
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        return response()->json([
 | 
						|
            'data' => $client,
 | 
						|
            'status' => true
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    public function delete(ClientRequest $request)
 | 
						|
    {
 | 
						|
        $id = $request->get('id');
 | 
						|
 | 
						|
        Client::destroy($id);
 | 
						|
        return response()->json([
 | 
						|
            'status' => true
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    // Delete multiple clients
 | 
						|
    public function deletes(ClientRequest $request)
 | 
						|
    {
 | 
						|
        $clients = $request->get('clients');
 | 
						|
        $ids = collect($clients)->pluck('id');
 | 
						|
        Client::whereIn('id', $ids)->delete();
 | 
						|
        return response()->json([
 | 
						|
            'data' => $ids,
 | 
						|
            'status' => true
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    // Update multiple clients
 | 
						|
    public function updates(ClientRequest $request)
 | 
						|
    {
 | 
						|
        $clients = $request->get('clients');
 | 
						|
        $ids = collect($clients)->pluck('id');
 | 
						|
 | 
						|
        foreach ($clients as $ClientRequest) {
 | 
						|
            // convert to object|array to array
 | 
						|
            $ClientRequest = collect($ClientRequest)->toArray();
 | 
						|
            // handle array
 | 
						|
            $client = Client::find($ClientRequest['id']);
 | 
						|
            if ($client) {
 | 
						|
                // exclude id field
 | 
						|
                unset($client['id']);
 | 
						|
 | 
						|
                $client->update($ClientRequest);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return response()->json([
 | 
						|
            'data' => Client::whereIn('id', $ids)->get(),
 | 
						|
            'status' => true
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
}
 |