HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/posscale/www/printmanager/app/Http/Controllers/Tenant/DashboardController.php
<?php

namespace App\Http\Controllers\Tenant;

use App\Http\Controllers\Controller;
use App\Http\Requests\CustomerRequest;
use App\Models\Address;
use App\Models\Customer;
use App\Models\Order;
use App\Models\Printer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Validator;
use Carbon\Carbon;

class DashboardController extends Controller
{
    /**
     * Show the form for creating the resource.
     */
    public function view()
    {
        $customers_list = Customer::all();
        $printers = Printer::whereNotNull('customer_id')->get();
        $unassined_printers = Printer::whereNull('customer_id')->get();
        $totalPrinters = Printer::count();
        $totalLowTonner = Printer::where('toner_status', 1)->count();
        $printerErrorCount = Printer::whereNotNull('detected_error')->count();
        
        // Get current tenant ID
        $currentTenantId = tenant()->id;
        
        // Query orders from central database for current month
        $ordersThisMonth =  Order::on('mysql')->where('tenant_id', $currentTenantId)
            ->whereMonth('order_date', Carbon::now()->month)
            ->whereYear('order_date', Carbon::now()->year)->count();


        return view('tenant.dashboard', [
            'totalLowTonner' => $totalLowTonner, 
            'totalPrinters' => $totalPrinters, 
            'printers' => $printers, 
            'customers_list' => $customers_list,  
            'unassined_printers' => $unassined_printers,
            'printerErrorCount' => $printerErrorCount,
            'ordersThisMonth' => $ordersThisMonth
        ]);
    }
    /**
     * Show the form for creating the resource.
     */
    public function update_printer(Request $request)
    {
        abort_unless(auth()->user()?->can('manage_printers'), 403);

        $validated = $request->validate([
            'printer_id' => 'required|numeric',
            'customer_id' => 'required|numeric',
            'address_id' => 'required|numeric',
        ]);

        $printer = Printer::find($validated['printer_id']);
        $printer->customer_id = $validated['customer_id'];
        $printer->address_id = $validated['address_id'];

        $printer->equipment_id  = $request->equipment_id;
        $printer->serial_number = $request->serial_number;
        $printer->model         = $request->model;

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

        $printer->save();
        //return Redirect::route('dashboard')->with('message', 'Customer assigned successfully.');
        return redirect()->back()->with('message', 'Customer assigned successfully.');
    }


    /**
     * Store a newly created resource in storage.
     */
    public function storeCustomerAndAddressValidate(Request $request)
    {
        abort_unless(auth()->user()?->can('manage_customers'), 403);

        $rules = [
            'name'      => 'required|string|max:255',
            'email'     => 'required|email',
            'phone'     => 'required|string',
            'address'   => 'required|string',
            'city'      => 'required|string',
            'state'     => 'required|string',
            'zip'       => 'required|string',
        ];

        $validator = Validator::make($request->all(), $rules);

        if ($validator->fails()) {
            return response()->json(['status' => false, 'errors' => $validator->errors()], 403);
        }
        return response()->json(['status' => false, 'message' => 'Validation passed.']);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function storeCustomerAndAddress(Request $request)
    {
        abort_unless(auth()->user()?->can('manage_customers'), 403);

        $fields = $request->all();
        $customer = new Customer();
        $customer->name = $fields['name'];
        $customer->email = $fields['email'];
        $customer->phone = $fields['phone'];
        $customer->save();

        $address = new Address();
        $address->address   = $fields['address'];
        $address->city      = $fields['city'];
        $address->state     = $fields['state'];
        $address->zip       = $fields['zip'];
        $customer->addresses()->save($address);

        return response()->json(['status' => false, 'customer' => $customer->toArray()]);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function validateAddress(Request $request)
    {
        abort_unless(auth()->user()?->can('manage_customers'), 403);

        $rules = [
            'address'   => 'required|string',
            'city'      => 'required|string',
            'state'     => 'required|string',
            'zip'       => 'required|string',
        ];
        $validator = Validator::make($request->all(), $rules);
        if ($validator->fails()) {
            return response()->json(['status' => false, 'errors' => $validator->errors()], 403);
        }
        return response()->json(['status' => false, 'message' => 'Validation passed.']);
    }

    public function storeCustomerNewAddress(Request $request)
    {
        abort_unless(auth()->user()?->can('manage_customers'), 403);

        $fields = $request->all();
        $customer = Customer::find($fields['customer_id']);
        $address = new Address();
        $address->address   = $fields['address'];
        $address->city      = $fields['city'];
        $address->state     = $fields['state'];
        $address->zip       = $fields['zip'];
        $customer->addresses()->save($address);
        return response()->json(['status' => false, 'address' => $address->toArray()]);
    }
}