<?php
namespace App\Http\Controllers;
use App\Models\Merchant;
use App\Models\Operator;
use App\Models\Store;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Ramsey\Uuid\Uuid;
class MerchantController extends Controller
{
public function saveMerchant(Request $request)
{
$this->validate($request, [
'merchant_name' => 'required',
'merchant_phone' => 'required',
'merchant_email' => 'required',
'merchant_company_name' => 'required',
'merchant_company_mobile' => 'required',
// 'merchant_company_email' => 'required',
'merchant_address' => 'required',
'merchant_nuit' => 'required',
'merchant_nib' => 'required'
]);
Merchant::create([
'merchant_name' => $request->merchant_name,
'merchant_email' => $request->merchant_email,
'merchant_phone' => $request->merchant_phone,
'merchant_address' => $request->merchant_address,
'merchant_nuit' => $request->merchant_nuit,
'merchant_nib' => $request->merchant_nib,
'merchant_company_name' => $request->merchant_company_name,
'merchant_company_logo' => $request->merchant_company_logo,
'merchant_company_nuit' => $request->merchant_company_nuit,
'merchant_company_phone' => $request->merchant_company_phone,
'merchant_company_mobile' => $request->merchant_company_mobile,
// 'merchant_company_email' => $request->merchant_company_email,
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Cadastrado com Sucesso'], 200);
}
public function updateMerchant(Request $request){
$this->validate($request, [
'id' => 'required'
]);
$merchant = Merchant::query()->where('id', $request->id)->first();
$merchant->update([
'merchant_name' => $request->merchant_name,
'merchant_email' => $request->merchant_email,
'merchant_phone' => $request->merchant_phone,
'merchant_address' => $request->merchant_address,
'merchant_nuit' => $request->merchant_nuit,
'merchant_nib' => $request->merchant_nib,
'merchant_company_name' => $request->merchant_company_name,
// 'merchant_company_email' => $request->merchant_company_email,
'merchant_company_logo' => $request->merchant_company_logo,
'merchant_company_nuit' => $request->merchant_company_nuit,
'merchant_company_phone' => $request->merchant_company_phone,
'merchant_company_mobile' => $request->merchant_company_mobile,
]);
return response()->json(['message' => 'Actualizado com Sucesso'], 200);
}
public function addStore(Request $request)
{
$this->validate($request, [
'store_name' => 'required',
'store_address' => 'required',
'manager' => 'required',
'manager_phone_number' => 'required',
'store_mobile_phone' => 'required',
'email' => 'required',
'merchant_id' => 'required'
]);
Store::create([
'store_name' => $request->store_name,
'store_address' => $request->store_address,
'manager' => $request->manager,
'manager_phone_number' => $request->manager_phone_number,
'store_mobile_phone' => $request->store_mobile_phone,
'email' => $request->email,
'store_public_id' => Uuid::uuid4(),
'password' => Hash::make('12345678'),
'merchant_id' => $request->merchant_id,
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Cadastrado com Sucesso'], 200);
}
public function updateStore(Request $request) {
$this->validate($request, [
'id' => 'required'
]);
$store = Store::query()->where('id', $request->id)->first();
$store->update([
'store_name' => $request->store_name,
'store_address' => $request->store_address,
'manager' => $request->manager,
'manager_phone_number' => $request->manager_phone_number,
'store_mobile_phone' => $request->store_mobile_phone,
'email' => $request->email,
'password' => Hash::make('12345678'),
'merchant_id' => $request->merchant_id
]);
return response()->json(['message' => 'Actualizado com Sucesso'], 200);
}
public function addOperator(Request $request)
{
$this->validate($request, [
'name' => 'required',
'last_name' => 'required',
'email' => 'required',
'phone' => 'required',
'store_id' => 'required'
]);
Operator::create([
'name' => $request->name,
'last_name' => $request->last_name,
'email' => $request->email,
'phone' => $request->phone,
'password' => Hash::make('12345678'),
'pin' => Hash::make('1234'),
'store_id' => $request->store_id,
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Operador(a) ' . $request->name . ' Adicionado com Sucesso.'], 200);
}
public function updateOperator(Request $request)
{
$this->validate($request, [
'id' => 'required',
]);
$store = Operator::query()->where('id', $request->id)->first();
$store->update([
'name' => $request->name,
'last_name' => $request->last_name,
'email' => $request->email,
'phone' => $request->phone,
'password' => Hash::make('12345678'),
'pin' => Hash::make('1234'),
'store_id' => $request->store_id
]);
return response()->json(['message' => 'Actualizado com Sucesso'], 200);
}
public function disableOrActiveOperator($id)
{
$user = Operator::find($id);
if ($user) {
if ($user->status == 'activo') {
$user->update(['status' => 'inactivo']);
return response()->json(['message' => 'Operador bloqueado com Sucesso']);
} else {
$user->update(['status' => 'activo']);
return response()->json(['message' => 'Operador activado com Sucesso']);
}
} else {
return response()->json(['message' => 'Operador não encontrado'], 400);
}
}
public function deleteOperator($id)
{
$user = Operator::find($id);
if ($user) {
$user->delete();
return response()->json(['message' => 'Operador Removido com Sucesso']);
} else {
return response()->json(['message' => 'Operador não encontrado'], 400);
}
}
public function deleteStore($id)
{
$user = Store::find($id);
if ($user) {
$user->delete();
return response()->json(['message' => 'Store Removido com Sucesso']);
} else {
return response()->json(['message' => 'Store não encontrado'], 400);
}
}
public function getStores()
{
$data = Store::query()
->orderBy('store_name', 'asc')
->get();
return response()->json(['data' => $data], 200);
}
public function getOperators()
{
$data = Operator::query()
->orderBy('name', 'asc')
->get();
return response()->json(['data' => $data], 200);
}
public function getMerchants()
{
$data = Merchant::query()
->orderBy('merchant_name', 'asc')
->get();
return response()->json(['data' => $data], 200);
}
}