HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/posscale/public_html/printmanager/app/Http/Controllers/Tenant/ManagePrinter.php
<?php

namespace App\Http\Controllers\Tenant;

use App\Actions\SmtpAction;
use App\Filament\Resources\TonerInkResource;
use App\Http\Controllers\Controller;
use App\Http\Requests\PrinterRequest;
use App\Models\Make;
use App\Models\Models;
use App\Models\Printer;
use App\Models\Customer;
use App\Models\Address as ModelsAddress;
use App\Models\PrinterSmtp;
use App\Models\PrinterType as ModelsPrinterType;
use App\Models\TonerInk;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redirect;

class ManagePrinter extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index(Request $request)
    {
        abort_unless(auth()->user()?->can('manage_printers'), 403);

        $search = $request->input('search');
        $low_toner = $request->input('low_toner', 0);

        $printers = Printer::whereAny([
            'equipment_id',
            'model_name',
            'serial_number',
        ], 'LIKE', '%' . $search . '%')
            ->whereNotNull('customer_id')
            ->when($request->low_toner, function ($q, $low_toner) {
                return $q->where('toner_status', $low_toner);
            })->paginate(15);

        $unassined_printers = Printer::whereAny([
            'equipment_id',
            'model_name',
            'serial_number',
        ], 'LIKE', '%' . $search . '%')
            ->whereNull('customer_id')
            ->when($request->low_toner, function ($q, $low_toner) {
                return $q->where('toner_status', $low_toner);
            })
            ->paginate(15);
        $customers_list = Customer::all();

        return view('tenant.printer.list', ['printers' => $printers, 'customers_list' => $customers_list, 'search' => $search, 'unassined_printers' => $unassined_printers]);
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        abort_unless(auth()->user()?->can('manage_printers'), 403);

        $printer_type = ModelsPrinterType::all();
        $printer_type_main = tenancy()->central(function ($tenant) {
            return ModelsPrinterType::all();
        });
        
        $customers_list = Customer::all();
        $address   = ModelsAddress::find(0);
        $printer_model_list= tenancy()->central(function ($tenant) {
            return Models::find(0);
        });
        $printer_make_list= tenancy()->central(function ($tenant) {
            return Make::all();
        });

         $printer_tonerorink_list= tenancy()->central(function ($tenant) {
            return TonerInk::find(0);
        });

        return view('tenant.printer.form', ['printer_tonerorink_list'=>$printer_tonerorink_list,'printer_model_list'=>$printer_model_list,'printer_make_list'=>$printer_make_list,'printer' => [], 'address' => [], 'customers_list' => $customers_list, 'smtp' => [], 'customers' => [], 'reception' => [],  'action' => 'Add Printer', 'printer_type' => $printer_type, 'printer_type_main' => $printer_type_main]);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(PrinterRequest $request)
    {
        // Only users with manage_printers permission may create printers
        abort_unless(auth()->user()?->can('manage_printers'), 403);

        $validated = $request->validated();
        $printer = new Printer([
            'model_name'      => $validated['model_name'],
            'serial_number'   => $validated['serial_number'],
            'equipment_id'    => $validated['equipment_id'],
            'type_title'    => $validated['type_title'],
            'toner_type'    => $validated['toner_type'],
            'drum_unit'    => $validated['drum_unit'],
            'fuser_unit'    => $validated['fuser_unit'],
            'paper_tray'    => $validated['paper_tray'],
            'paper_feed_rollers'    => $request->paper_feed_rollers,
            'duplex_unit'    => $request->duplex_unit,
            'transfer_belt'    => $request->transfer_belt,
            'toner_discreptions'    => $request->toner_discreptions,
            'make'           => $request->make,
            'model'          => $request->model,
            'toner_inks_id'          => $request->toner_inks_id,
            'toner_stock'       => $request->toner_stock,
            'address'           => $request->address,
            'city'              => $request->city,
            'zip'               => $request->zip,
            'state'             => $request->state,
            'country'           => $request->country,
            'customer_id'           => $validated['customer_id'],
            'address_id'           => $validated['address_id'],
            'ip_address'           => $request->ip_address,
            'status'           => $request->status,
            'install_date'           => $request->install_date,
            
            


        ]);
        $printer->smtp_active = $validated['connect_to_smpt'] ?? 0;
        if (isset($validated['connect_to_smpt'])) {
            $printer->smtp_active = $validated['connect_to_smpt'];
        }
        $printer->smtp_status = false;
        $printer->smtp_error = '';
        $printer->smtp_sync_date = date('Y-m-d h:i:s');
        $printer->save();
        if (isset($validated['connect_to_smpt'])) {
            if (!$printer->smtp) {
                $printer->smtp()->create([
                    'host'          => $validated['host'],
                    'auth'          => $validated['auth'],
                    'user_name'     => $validated['user_name'],
                    'user_password' => $validated['user_password'],
                    'port'          => $validated['port'],
                    'from'          => $validated['from'],
                    'from_name'     => $validated['from_name']
                ]);
            } else {
                $printer->smtp->host            = $validated['host'];
                $printer->smtp->auth            = $validated['auth'];
                $printer->smtp->user_name       = $validated['user_name'];
                $printer->smtp->user_password   = $validated['user_password'];
                $printer->smtp->port            = $validated['port'];
                $printer->smtp->from            = $validated['from'];
                $printer->smtp->from_name       = $validated['from_name'];

                $printer->smtp->save();
            }
        }


        if (!$printer->reception) {
            $printer->reception()->create([
                'name'              => $request->rec_name,
                'email'             => $request->rec_email,
                'phone'             => $request->rec_phone,
            ]);
        } else {
            $printer->reception->name            = $request->rec_name;
            $printer->reception->email            = $request->rec_email;
            $printer->reception->phone            = $request->rec_phone;
            $printer->reception->save();
        }

        return Redirect::route('printers.index')->with('message', 'Printer added successfully.');
    }

    /**
     * Display the specified resource.
     */
    public function show(Printer $printer)
    {
        $jobs = $printer->jobs()->orderBy('created_at', 'desc')->simplePaginate(15);
        return view('tenant.printer.show', ['printer' => $printer, 'jobs' => $jobs]);
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(Printer $printer)
    {
        abort_unless(auth()->user()?->can('manage_printers'), 403);

        $printer_type = ModelsPrinterType::all();
        $printer_type_main = tenancy()->central(function ($tenant) {
            return ModelsPrinterType::all();
        });
        $customers_list = Customer::all();
        $address   = ModelsAddress::find($printer['address_id']);

        $smtp = [];
        if ($printer->smtp) {
            $smtp = $printer->smtp->toArray();
        }
        $customers = [];
        if ($printer->customers) {
            $customers = $printer->customers->toArray();
        }
        $reception = [];
        if ($printer->reception) {
            $reception = $printer->reception->toArray();
        }

        
        $printer_make_list= tenancy()->central(function ($tenant) {
            return Make::all();
        });

        $make_id = $printer['make'];
        $model_id = $printer['model'];
        

        $printer_model_list = tenancy()->central(function () use ($make_id) {
            return Models::where('make_id', $make_id)->get();
        });

        $printer_tonerorink_list = tenancy()->central(function () use ($model_id) {
            return TonerInk::where('model_id', $model_id)->get();
        });
        
        return view('tenant.printer.form', ['printer_tonerorink_list'=>$printer_tonerorink_list,'printer_model_list'=>$printer_model_list,'printer_make_list'=>$printer_make_list,'printer' => $printer->toArray(), 'customers_list' => $customers_list, 'address' => $address, 'smtp' => $smtp, 'reception' => $reception, 'customers' => $customers, 'action' => 'Edit Printer', 'printer_type' => $printer_type, 'printer_type_main' => $printer_type_main]);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(PrinterRequest $request, Printer $printer)
    {
        $user = auth()->user();

        // Only users with manage_printers permission may update printers
        abort_unless($user?->can('manage_printers'), 403);
        
        $validated = $request->validated();

        $printer->model_name    = $validated['model_name'];
        $printer->equipment_id  = $validated['equipment_id'];
        $printer->serial_number = $validated['serial_number'];
        $printer->smtp_active   = $validated['connect_to_smpt'] ?? 0;

        $printer->toner_type            = $validated['toner_type'];
        $printer->drum_unit             = $validated['drum_unit'];
        $printer->fuser_unit            = $validated['fuser_unit'];
        $printer->paper_tray            = $validated['paper_tray'];
        $printer->paper_feed_rollers    = $request->paper_feed_rollers;
        $printer->duplex_unit           = $request->duplex_unit;
        $printer->transfer_belt         = $request->transfer_belt;
        $printer->toner_discreptions    = $request->toner_discreptions;
        $printer->make               = $request->make;
        $printer->model              = $request->model;
        $printer->toner_inks_id              = $request->toner_inks_id;
        if(in_array($user->user_type,[1,2])){
            $printer->toner_stock              = $request->toner_stock;        
        }

        $printer->address               = $request->address;
        $printer->city                  = $request->city;
        $printer->zip                   = $request->zip;
        $printer->state                 = $request->state;
        $printer->country               = $request->country;
        $printer->customer_id               = $request->customer_id;
        $printer->address_id               = $request->address_id;

        $printer->ip_address                 = $request->ip_address;
        $printer->status                 = $request->status;
        $printer->install_date                 = $request->install_date;

    


        $printer->save();
        if (isset($validated['connect_to_smpt'])) {
            if (!$printer->smtp) {
                $printer->smtp()->create([
                    'host'          => $validated['host'],
                    'auth'          => $validated['auth'],
                    'user_name'     => $validated['user_name'],
                    'user_password' => $validated['user_password'],
                    'port'          => $validated['port'],
                    'from'          => $validated['from'],
                    'from_name'     => $validated['from_name']
                ]);
            } else {
                $printer->smtp->host            = $validated['host'];
                $printer->smtp->auth            = $validated['auth'];
                $printer->smtp->user_name       = $validated['user_name'];
                $printer->smtp->user_password   = $validated['user_password'];
                $printer->smtp->port            = $validated['port'];
                $printer->smtp->from            = $validated['from'];
                $printer->smtp->from_name       = $validated['from_name'];
                $printer->smtp->save();
            }

            if ($printer->smtp) {
                $smtp_details = array();
                $smtp_details['client'] = [
                    'host'          => $printer->smtp->host,
                    'port'          => $printer->smtp->port,
                    'encryption'    => 'ssl',
                    'username'      => $printer->smtp->user_name,
                    'password'      =>  $printer->smtp->user_password,
                    'protocol'      => 'imap'
                ];


                $smtp_connection = new SmtpAction($smtp_details);
                $connection_info = $smtp_connection->testConnection();
                if ($connection_info['status']) {
                    $printer->smtp_status = $connection_info['status'];
                } else {
                    $printer->smtp_status = $connection_info['status'];
                    $printer->smtp_error = $connection_info['message'];
                }

                $printer->save();
            }
        }


        if (!$printer->reception) {
            $printer->reception()->create([
                'name'              => $request->rec_name,
                'email'             => $request->rec_email,
                'phone'             => $request->rec_phone,
            ]);
        } else {
            $printer->reception->name            = $request->rec_name;
            $printer->reception->email            = $request->rec_email;
            $printer->reception->phone            = $request->rec_phone;
            $printer->reception->save();
        }

        return Redirect::route('printers.index')->with('message', 'Printer updated successfully.');
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(Printer $printer)
    {
        abort_unless(auth()->user()?->can('manage_printers'), 403);

        $printer->delete();
        return Redirect::route('printers.index')->with('message', 'Printer delete successfully.');
    }

    public function getAddress($id)
    {
        $subcategories = ModelsAddress::where('customer_id', $id)->get();
        return response()->json($subcategories);
    }
    public function getModel($id)
    {
        
        $printer_model_list = tenancy()->central(function () use ($id) {
            return Models::where('make_id', $id)->get();
        });
        return response()->json($printer_model_list);
    }

    public function getTonerOrInk($id)
    {
        
        $printer_tonerorink_list = tenancy()->central(function () use ($id) {
            return TonerInk::where('model_id', $id)->get();
        });
        return response()->json($printer_tonerorink_list);
    }
}