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);
}
}