|
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/ |
<?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');
}
}
}