File: /var/www/vhost/disk-apps/demo.sports-crowd.com/app/Http/Controllers/UserController.php
<?php
namespace App\Http\Controllers;
use App\Rol;
use App\Tag;
use App\City;
use App\User;
use DateTime;
use App\Order;
use App\Ticket;
use App\Address;
use App\Core\Customer\CustomerTableService;
use App\Core\Ticket\TicketTypesEnum;
use App\Core\User\Application\UserService;
use App\UserTag;
use App\Discount;
use App\Sucursal;
use App\Parameter;
use Carbon\Carbon;
use App\MatchEvent;
use App\TicketMain;
use App\PreSubscriber;
use App\CourierCompany;
use App\DataPolicy;
use App\DataPolicyClient;
use App\UserInformation;
use App\TicketUserBlock;
use App\DiscountOrderUser;
use App\DocumentType;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\AddressController;
use App\Http\Controllers\TicketsController;
use App\Http\Controllers\Exports\FansExport;
use App\Http\Controllers\Exports\ReportClients;
use App\Http\Controllers\MassiveFansController;
use App\Http\Controllers\Api\TicketApiController;
use App\Http\Controllers\Imports\SubscribersImport;
use App\Http\Controllers\Imports\UserSegmentationImport;
use App\Http\Controllers\Imports\UserSegmentationTemplate;
use App\Http\Controllers\Exports\ClientsExport;
use App\Http\Controllers\Imports\ClientImport;
use App\Http\Controllers\Imports\ClientTemplate;
use App\TermClient;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Maatwebsite\Excel\Facades\Excel;
use Yajra\DataTables\Facades\DataTables;
use App\Jobs\Clients\GenerateClientExportJob;
use Illuminate\Support\Facades\Cache;
class UserController extends Controller
{
private $__ADMINROLES = [];
private $util;
public function __construct()
{
$this->util = new UtilController();
$this->__ADMINROLES = [$this->__SUPERADMIN_ROL];
}
public function indexClient()
{
$multiselectItems = Tag::select('id', 'name')->where('active', true)->get();
return view('users.clients', compact('multiselectItems'));
}
public function indexDelivery()
{
$deliveryMan = User::orderBy('first_name', 'ASC')->where("rol_id", 3)->get();
$sucursals = Sucursal::where('active', 1)->get();
return view('users.deliveryMan')
->with('deliveryMan', $deliveryMan)
->with('sucursals', $sucursals);
}
public function indexAdmin()
{
return view('users.admins');
}
public function indexSubscriber()
{
return view('users.preSubscribers');
}
public function tableFilterSubscriber()
{
$obj = PreSubscriber::with('seat');
return Datatables::of($obj)
->addColumn('actions', function ($obj) {
return '<i class="fa fa-trash iconMini" onClick="clickDeletePreSubscriber(' . $obj->id . ')" data-id="' . $obj->id . '" title="Eliminar"></i>';
})
->rawColumns(['actions'])
->make(true);
}
public function indexAddClient()
{
$cities = City::where('active', 1)->orderBy('name', 'ASC')->get();
$multiselectItems = Tag::select('id', 'name')->where('active', true)->get();
return view('users.addClients', compact(
'cities',
'multiselectItems'
));
}
public function indexAddDelivery()
{
$sucursals = Sucursal::where('active', 1)->orderBy('name', 'ASC')->get();
$courier = CourierCompany::all();
return view('users.addDeliveryMan', compact(
'sucursals',
'courier'
));
}
public function indexAddAdmin()
{
$sucursals = Sucursal::where('active', 1)->orderBy('name', 'ASC')->get();
$rols = Rol::select('id', 'name')->whereIn('id', ($this->__ADMINROLES))->orderBy('name', 'ASC')->get();
$tags = Tag::select('id', 'name')->where('active', true)->get();
return view('users.addAdmin', compact(
'sucursals',
'rols',
'tags'
));
}
public function indexEditClient($id)
{
$client = User::find($id);
$directions = Address::where('user_id', $id)->get();
$cities = City::where('active', 1)->orderBy('name', 'ASC')->get();
$multiselectItems = Tag::select('id', 'name')->where('active', true)->get();
$userTags = UserTag::select('tag_id')->where('user_id', $id)->whereNull('academy_user_id')->get();
return view('users.editClients', compact(
'client',
'directions',
'multiselectItems',
'userTags',
'cities'
));
}
public function indexEditDeliveryMan($id)
{
$deliveryM = User::find($id);
$info = UserInformation::where('user_id', $id)->first();
$sucursals = Sucursal::where('active', 1)->orderBy('name', 'ASC')->get();
$courier = CourierCompany::all();
return view('users.editDeliveryMan')->with('deliveryM', $deliveryM)->with('info', $info)->with('sucursals', $sucursals)->with('courier', $courier);
}
public function indexEditAdmin($id)
{
$admin = User::find($id);
$info = UserInformation::where('user_id', $admin->id)->first();
$sucursals = Sucursal::where('active', 1)->orderBy('name', 'ASC')->get();
$rols = Rol::select('id', 'name')->orderBy('name', 'ASC')->get();
$tags = Tag::select('id', 'name')->where('active', true)->get();
$assignedTags = UserTag::where('user_id', $id)->pluck('tag_id')->toArray();
return view('users.editAdmin', compact(
'admin',
'info',
'sucursals',
'rols',
'tags',
'assignedTags'
));
}
public function createUserResponsibleAcademy(Request $request)
{
$user = $this->createClient($request, $is_ticket = false, $validateByDocument = false);
return $user;
}
// TODO: check if is_ticket is a semantic variable
public function createClient(Request $request, $is_ticket = false, $validateByDocument = true)
{
$is_ticket = filter_var($is_ticket, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) ?? false;
$validateByDocument = filter_var($validateByDocument, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) ?? true;
$password = $request["password"] != null ? $request["password"] : base64_encode(random_bytes(4));
$data = array(
'rol' => $this->__CLIENT_ROL,
'accountInfo' => [
'name' => $request->input('first_name'),
'lastName' => $request->input('last_name'),
'cellPhone' => $request->input('phone'),
'dialCode' => $request->input('dial_code', null),
'countryCode' => $request->input('country_code', null),
'email' => $request->input('email'),
'password' => $password,
'document' => $request->input('document'),
'document_type_id' => $request->input('document_type_id', null),
]
);
$userDocument = null;
if ($request["document"]) {
$userDocument = User::where("document", $request["document"])
->whereNull('deleted_at')
->first();
}
// Valido si existe un usuario con el mismo documento y no esta eliminado
if ($userDocument && $validateByDocument) {
if ($userDocument) {
$this->addTags($userDocument, $request["tags"]);
$this->updateCreateAddress($is_ticket, $request, $userDocument->id);
return array(
'r' => true,
'm' => trans('messages.controller_client_tag2'),
'd' => $userDocument,
'oldUser' => true
);
}
}
$userEmail = User::where("email", "=", $request["email"])
->whereNull('deleted_at')
->first();
// Valido si existe un usuario con el mismo email y no esta eliminado.
if ($userEmail) {
$this->addTags($userEmail, $request["tags"]);
$this->updateCreateAddress($is_ticket, $request, $userEmail->id);
return array(
'r' => true,
'm' => trans('messages.controller_client_tag3'),
'd' => $userEmail,
'oldUser' => true
);
}
$remoteUser = $this->signupFromAdminSale($data, $validateByDocument);
if ($remoteUser->status == "document_already_exists" && $userDocument) {
return array('r' => true, 'm' => 'Usuario existe', 'd' => $userDocument);
} else if ($remoteUser->status != "success") {
return array('r' => false);
}
$logObj = $remoteUser;
$user = User::where("email", "=", $request["email"])->first();
$this->addTags($user, $request["tags"]);
if ($request['document_type']) {
$documentType = DocumentType::where('name', 'like', '%' . $request['document_type'] . '%')->first();
if ($documentType) {
$user->document_type_id = $documentType->id;
$user->update();
}
}
if (Auth::user()) {
$this->registerLog(Auth::user()->id, 'Creó cliente', json_encode($logObj), "Create", $this->getModule($request));
}
$this->updateCreateAddress($is_ticket, $request, $remoteUser->user->id);
if (config('app.notify_create_user') == 'true') {
$newUsers[] = [
'user' => $remoteUser->user,
'password' => $password, // Contraseña sin codificar
];
$userService = new UserService();
$userService->dispatchNewUserProcesses($newUsers, 'mails.user.new-client');
}
return array(
'r' => true,
'd' => $remoteUser->user,
'm' => trans('messages.controller_client_tag1'),
'status' => 'success'
);
}
public function signupFromAdminSale(array $request, $validateByDocument = true)
{
if ($validateByDocument) {
$userCopy = User::where("document", $request["accountInfo"]["document"])
->whereNotNull('document')
->first();
// TODO: remove duplicated query to users table
if (isset($userCopy->id)) {
$user = new User();
$userN = $user->where('document', $request["accountInfo"]["document"])->first();
if (isset($userN->id)) {
return (object) ['r' => true, 'status' => 'document_already_exists'];
} else {
$userTerms = TermClient::where("user_id", $userCopy->id)->first();
return $this->createDataPolicy($userCopy, $userTerms);
}
}
}
return $this->createUser($request, $request["rol"]);
}
public function createUser($request, $rol)
{
$user = new User();
$user->first_name = $request["accountInfo"]["name"];
$user->last_name = $request["accountInfo"]["lastName"];
$user->phone = $request["accountInfo"]["cellPhone"] ?? null;
$user->email = $request["accountInfo"]["email"];
$user->dial_code = $request["accountInfo"]["dialCode"] ?? null;
$user->country_code = $request["accountInfo"]["countryCode"] ?? null;
$user->password = Hash::make($request["accountInfo"]["password"]);
if (isset($request["accountInfo"]["document"])) {
$user->document = $request["accountInfo"]["document"];
}
if (isset($request["accountInfo"]["document_type_id"])) {
$user->document_type_id = $request["accountInfo"]["document_type_id"];
}
$user->rol_id = $rol;
$isSubscriber = null;
if (isset($isSubscriber))
$user->is_subscriber = $isSubscriber;
$user->save();
$termId = null;
if ($user->id) {
$termConditionController = new TermConditionController();
$bodyTerm = $termConditionController->getTermsActive();
if ($bodyTerm) {
$termId = $bodyTerm->id;
}
$userTerms = new TermClient();
$userTerms->accepted = 1;
$userTerms->term_id = $termId;
$userTerms->user_id = $user->id;
$userTerms->save();
$userInformation = new UserInformation();
$userInformation->is_initial = 1;
$userInformation->is_tutorial_viewed = 1;
$userInformation->is_habeas_data_viewed = 1;
$userInformation->user_id = $user->id;
if (in_array($rol, [$this->__MESSENGER_ROL]) && isset($request["accountInfo"])) {
$userInformation->plate = $request["accountInfo"]["plate"];
$userInformation->courier_company_id = $request["accountInfo"]["courier_company_id"];
$userInformation->sucursal_id = $request["accountInfo"]["sucursal_id"];
}
$userInformation->save();
}
return $this->createDataPolicy($user, $userTerms);
}
public function createDataPolicy($userCopy, $userTermsCopy)
{
$user = $userCopy;
$policy = DataPolicy::where('active', 1)->first();
if (!$policy) {
if ($userCopy) {
return (object) ['r' => true, 'status' => 'document_already_exists'];
} else {
return (object) ['r' => false, 'status' => 'error'];
}
}
$policyId = $policy->id;
$dataPolicyController = new DataPolicyController();
$bodyPolicy = $dataPolicyController->getActivePolicy();
if ($bodyPolicy && isset($bodyPolicy->activePolicy)) {
$policyId = $bodyPolicy->activePolicy->id;
}
$dataPolicy = new DataPolicyClient();
$dataPolicy->accepted = $userTermsCopy->accepted;
$dataPolicy->data_policy_id = $policyId;
$dataPolicy->user_id = $user->id;
$dataPolicy->created_at = $userTermsCopy->created_at;
$dataPolicy->updated_at = $userTermsCopy->updated_at;
$dataPolicy->save();
return (object) ['r' => true, 'status' => 'success', 'user' => $user, 'm' => trans('messages.controller_client_tag1')];
}
private function updateCreateAddress($createUpdate, $request, $userId)
{
if (!$createUpdate && $request["direction"]) {
Address::updateOrCreate(['user_id' => $userId, 'direction' => $request["direction"]], [
'direction' => $request['direction'],
'district' => $request["district"],
'user_id' => $userId,
'active' => true,
'indications' => $request["indications"],
'lat' => $request["lat"],
'long' => $request["long"],
'city_id' => $request["city_id"]
]);
}
}
public function addTags($user, $tagsIdArray)
{
if (!$user) {
return;
} else if (!$tagsIdArray) {
$tagsIdArray = [];
}
UserTag::where('user_id', $user->id)->whereNull('academy_user_id')->delete();
foreach ($tagsIdArray as $tagId) {
UserTag::updateOrCreate(
['tag_id' => $tagId, 'user_id' => $user->id, 'academy_user_id' => null],
['tag_id' => $tagId, 'user_id' => $user->id, 'academy_user_id' => null]
);
}
}
public function createDeliveryMan(Request $request)
{
$parameters = Parameter::select('id', 'db_city', 'db_name')->first();
$data = array(
'rol' => $this->__MESSENGER_ROL,
'accountInfo' => array(
'name' => $request["first_name"],
'lastName' => $request["last_name"],
'cellPhone' => $request["phone"],
'email' => $request["email"],
'password' => $request["password"],
'document' => $request["document"],
'courier_company_id' => $request["courier_company_id"],
'sucursal_id' => $request["sucursal_id"],
'plate' => $request["plate"],
),
);
$r = User::where("document", $request["document"])->first();
$email = User::where("email", "=", $request["email"])->withTrashed()->first();
// Valido si existe un usaurio con el mismo documento
if ($r) {
return array('r' => false, 'm' => trans('messages.controller_deliveryMan_tag2'));
}
// Valido si existe un usuario con el mismo email.
if ($email) {
if ($email->email == $request["email"]) {
if ($email->deleted_at != null) {
return array('r' => true, 'm' => trans('messages.controller_deliveryMan_tag7'), 'id' => $email->id);
} else {
return array('r' => false, 'm' => trans('messages.controller_deliveryMan_tag3'));
}
}
}
$remoteUser = $this->signupFromAdminSale($data);
$logObj = $remoteUser;
$this->registerLog(Auth::user()->id, 'Creó mensajero', json_encode($logObj), "Create", $this->getModule($request));
if ($remoteUser->status != "success") {
return array('r' => false);
}
return array('r' => true, 'm' => trans('messages.controller_deliveryMan_tag1'), 'd' => $remoteUser->user->id);
}
public function createAdmin(Request $request)
{
$parameters = Parameter::select('id', 'db_city', 'db_name')->first();
$data = array(
'rol' => $request["rol_id"], // Rol para cliente
'accountInfo' => array(
'name' => $request["first_name"],
'lastName' => $request["last_name"],
'cellPhone' => $request["phone"],
'email' => $request["email"],
'password' => $request["password"],
'document' => $request["document"],
'courier_company_id' => null,
'sucursal_id' => $request["sucursal_id"],
'plate' => null,
),
);
$r = User::where("document", $request["document"])->first();
$email = User::where("email", "=", $request["email"])->first();
// Valido si existe un usaurio con el mismo documento
if ($r) {
return array('r' => false, 'm' => trans('messages.controller_admin_tag2'));
}
// Valido si existe un usuario con el mismo email.
if ($email) {
if ($email->email == $request["email"]) {
return array('r' => false, 'm' => trans('messages.controller_admin_tag3'));
}
}
$remoteUser = $this->signupFromAdminSale($data);
if ($remoteUser->status != "success") {
return array('r' => false);
}
$this->addTags($remoteUser->user, $request["tags"]);
$logObj = $remoteUser;
$this->registerLog(Auth::user()->id, 'Creó admin', json_encode($logObj), "Create", $this->getModule($request));
return array('r' => true, 'm' => trans('messages.controller_admin_tag1'));
}
public function updateClient(Request $request)
{
$user = User::find($request["id"]);
$user->first_name = $request["first_name"];
$user->last_name = $request["last_name"];
$user->phone = $request["phone"];
$user->email = $request["email"];
if (isset($request["password"]) && !empty($request["password"])) {
$user->password = Hash::make($request["password"]);
}
$user->document = $request["document"];
$user->rol_id = 4;
$user->is_subscriber = $request["is_subscriber"];
$user->update();
$idAddress = $request["direction_used"];
// add direction
if ($request["direction"] != null) {
$address = new AddressController;
$idAddress = $address->create("", $request["direction"], $request["district"], $request["indications"], $request["lat"], $request["long"], $request["city_id"], $user->id);
}
$directions = Address::where('user_id', $user->id)->get();
foreach ($directions as $direction) {
if ($direction->id == $idAddress) {
$direction->last_used = 1;
} else {
$direction->last_used = 0;
}
$direction->update();
}
$this->addTags($user, $request["tags"]);
$this->registerLog(Auth::user()->id, 'Se modifico la información del cliente', json_encode($user), "update", $this->getModule($request));
return array('r' => true, 'm' => trans('messages.controller_client_tag4'));
}
public function updateDeliveryMan(Request $request)
{
$user = User::find($request["id"]);
$user->first_name = $request["first_name"];
$user->document = $request["document"];
$user->last_name = $request["last_name"];
$user->phone = $request["phone"];
$user->email = $request["email"];
if (!empty($request["password"])) {
$user->password = Hash::make($request["password"]);
}
$user->update();
$this->updateInfoDelivery($request["plate"], $request["id"], $request["courier_company_id"], $request["sucursal_id"]);
$this->registerLog(Auth::user()->id, 'Se modifico la información del mensajero', json_encode($user), "update", $this->getModule($request));
return array('r' => true, 'm' => trans('messages.controller_deliveryMan_tag4'));
}
public function updateAdmin(Request $request)
{
$user = User::find($request["id"]);
$user->first_name = $request["first_name"];
$user->document = $request["document"];
$user->last_name = $request["last_name"];
$user->phone = $request["phone"];
$user->email = $request["email"];
$user->rol_id = $request["rol_id"];
if (!empty($request["password"])) {
$user->password = Hash::make($request["password"]);
}
$user->update();
$info = UserInformation::where('user_id', $request["id"])->first();
$info->sucursal_id = $request["sucursal_id"];
$info->update();
$this->addTags($user, $request["tags"]);
$this->registerLog(Auth::user()->id, 'Se modifico la información del administrador', json_encode($user), "update", $this->getModule($request));
return array('r' => true, 'm' => trans('messages.controller_admin_tag4'));
}
public function updateInfoDelivery($plate, $id, $courier, $sucursal)
{
$info = UserInformation::where('user_id', $id)->first();
$info->plate = $plate;
$info->courier_company_id = $courier;
$info->sucursal_id = $sucursal;
$info->update();
return true;
}
public function getClient(Request $request)
{
$id = $request["id"];
$client = User::find($id);
return $client->toArray();
}
public function getDeliveryMan(Request $request)
{
$id = $request["id"];
$u = User::find($id);
$i = UserInformation::where('user_id', $u->id)->first();
$i->courier_company_id = $i->company->name;
if ($i->photo != null) {
$img = config('filesystems.disks.s3.url') . "/deliveryman/" . $i->photo;
} else {
$img = 'img/user.png';
}
return array('r' => true, 'u' => $u->toArray(), 'i' => $i->toArray(), 'img' => $img);
}
public function getAdmin(Request $request)
{
$id = $request["id"];
$u = User::find($id);
$i = UserInformation::where('user_id', $u->id)->first();
$i->sucursal_id = $i->sucursal->name;
return array('r' => true, 'u' => $u->toArray(), 'i' => $i->toArray());
}
public function activateClient(Request $request)
{
$id = $request['id'];
$state = $request['state'];
$user = User::find($id);
$logObj = $user;
$user->active = $state;
$user->update();
// Log
$this->registerLog(Auth::user()->id, 'Actualizó campo active de cliente', json_encode($logObj), "Update", $this->getModule($request));
return array('r' => true, 'm' => trans('messages.controller_client_tag4'));
}
public function activateDeliveryMan(Request $request)
{
$id = $request['id'];
$state = $request['state'];
$user = User::find($id);
$logObj = $user;
$user->active = $state;
$user->update();
// Log
$this->registerLog(
Auth::user()->id,
'Actualizó campo active de mensajero',
json_encode($logObj),
"Update",
6
);
return array('r' => true, 'm' => trans('messages.controller_deliveryMan_tag4'));
}
public function onlineDeliveryMan(Request $request)
{
$id = $request['id'];
$state = $request['state'];
$user = User::find($id);
$logObj = $user;
$user->online = $state;
$user->update();
// Log
$this->registerLog(
Auth::user()->id,
'Actualizó campo online de mensajero',
json_encode($logObj),
"Update",
6
);
return array('r' => true, 'm' => trans('messages.controller_deliveryMan_tag4'));
}
public function activateAdmin(Request $request)
{
$id = $request['id'];
$state = $request['state'];
$user = User::find($id);
$logObj = $user;
$user->active = $state;
$user->update();
// Log
$this->registerLog(
Auth::user()->id,
'Actualizó campo active de administrador',
json_encode($logObj),
"Update",
6
);
return array('r' => true, 'm' => trans('messages.controller_admin_tag4'));
}
public function multipleSession(Request $request)
{
$id = $request['id'];
$state = $request['state'];
$user = User::find($id);
$logObj = $user;
$user->multiple_session = $state;
$user->update();
// Log
$this->registerLog(
Auth::user()->id,
'Actualizó campo sesion multiple de mensajero',
json_encode($logObj),
"Update",
6
);
return array('r' => true, 'm' => trans('messages.controller_deliveryMan_tag5'));
}
public function deleteDeliveryMan(Request $request)
{
$userId = $request['id'];
$logObj = User::find($userId);
$this->deleteUser($userId);
// Log
$this->registerLog(Auth::user()->id, 'Elimino mensajero', json_encode($logObj), "Delete", $this->getModule($request));
return array('r' => true, 'm' => trans('messages.controller_deliveryMan_tag6'));
}
public function deleteAdmin(Request $request)
{
$userId = $request['id'];
$logObj = User::find($userId);
$this->deleteUser($userId);
// Log
$this->registerLog(Auth::user()->id, 'Elimino administrador', json_encode($logObj), "Delete", $this->getModule($request));
return array('r' => true, 'm' => trans('messages.controller_admin_tag6'));
}
public function tableFilterClient(Request $request, CustomerTableService $customerTableService)
{
$count = $customerTableService->getTableCount($request);
$obj = $customerTableService->getTableQuery($request);
$dataTable = DataTables::of($obj)->setTotalRecords($count);
$this->tableFilterClientCustomColumns($dataTable);
$response = $dataTable->make(true);
$data = $response->getData();
$data = json_decode(json_encode($data), true);
$queries = DB::getQueryLog();
$newQueries = [];
foreach ($queries as $query) {
if (!is_string($query['query'])) {
$query['query'] = $query['query']->getValue();
}
if (str_contains($query['query'], 'select') && str_contains($query['query'], 'group by')) {
$newQueries[] = $query;
}
}
$data['queries'] = $newQueries;
return $data;
}
public function tableFilterDeliveryMan()
{
$obj = $obj = DB::table('users')
->select('users.id', 'users.first_name', 'users.last_name', 'users.document', 'users.phone', 'users.active', 'users.multiple_session', 'users.online', 'users.created_at')
->where('users.rol_id', 3)->whereNull('users.deleted_at');
return Datatables::of($obj)
->addColumn('actions', function ($obj) {
return '<i class="fa fa-eye iconMini" onClick="clickInfoDeliveryMan(' . $obj->id . ')" name="btnEditar" data-id="' . $obj->id . '" title="Información"></i>
<i class="fa fa-pencil iconMini" onClick="clickEditDeliveryMan(' . $obj->id . ')" data-id="' . $obj->id . '" title="Editar"></i>
<i class="fa fa-trash iconMini" onClick="clickDeleteDeliveryMan(' . $obj->id . ')" data-id="' . $obj->id . '" title="Eliminar"></i>';
})
->editColumn('active', function ($obj) {
if ($obj->active == 0) {
return '<div class="switch"><label><div class="checkbox checbox-switch switch-success"> <label> No <input type="checkbox" onChange="chkDeliveryMan(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" /> <span></span>Si </label></div> </label> </div>';
} else {
return '<div class="switch"><label> <div class="checkbox checbox-switch switch-success"> <label> No <input type="checkbox" onChange="chkDeliveryMan(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" checked="" />
<span></span> Si </label> </div> </label> </div>';
}
})
->editColumn('online', function ($obj) {
if ($obj->active == 0) {
return '<div class="switch"><label><div class="checkbox checbox-switch switch-success"> <label> No <input type="checkbox" onChange="chkOnlineDelivery(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkonline' . $obj->id . '" name="Checkonline" /> <span></span>Si </label></div> </label> </div>';
} else {
return '<div class="switch"><label> <div class="checkbox checbox-switch switch-success"> <label> No <input type="checkbox" onChange="chkOnlineDelivery(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkonline' . $obj->id . '" name="Checkonline" checked="" />
<span></span> Si </label> </div> </label> </div>';
}
})
->editColumn('multiple_session', function ($obj) {
if ($obj->multiple_session == 0) {
return '<div class="switch"><label><div class="checkbox checbox-switch switch-success"> <label> No <input type="checkbox" onChange="chkMSDeliveryMan(' . $obj->id . ')" data-id="' . $obj->id . '" id="CheckMS' . $obj->id . '" /> <span></span>Si </label></div> </label> </div>';
} else {
return '<div class="switch"><label> <div class="checkbox checbox-switch switch-success"> <label> No <input type="checkbox" onChange="chkMSDeliveryMan(' . $obj->id . ')" data-id="' . $obj->id . '" id="CheckMS' . $obj->id . '" checked="" />
<span></span> Si </label> </div> </label> </div>';
}
})
->editColumn('created_at', function ($obj) {
return \Carbon\Carbon::parse($obj->created_at)->format('Y-m-d h:i:s A');
})
->rawColumns(['active', 'actions', 'multiple_session', 'online'])
->make(true);
}
public function tableFilterAdmins()
{
DB::statement("SET sql_mode = ''");
$obj = $obj = DB::table('users')
->select('users.id', 'users.first_name', 'users.last_name', 'users.email', 'users.active', 'rols.name as rol', DB::raw('GROUP_CONCAT(DISTINCT(tags.name)) AS segmentation'), 'users.created_at')
->join('rols', 'rols.id', '=', 'users.rol_id')
->leftjoin('user_tags', 'users.id', '=', 'user_tags.user_id')
->leftjoin('tags', function ($join) {
$join->on('tags.id', '=', 'user_tags.tag_id')->where('tags.active', 1);
})
->whereIn('rols.id', ($this->__ADMINROLES))
->whereNull('users.deleted_at')
->groupBy('users.id');
DB::statement("SET sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'");
return Datatables::of($obj)
->addColumn('actions', function ($obj) {
return '<i class="fa fa-eye iconMini" onClick="clickInfoAdmins(' . $obj->id . ')" name="btnEditar" data-id="' . $obj->id . '" title="Información"></i>
<i class="fa fa-pencil iconMini" onClick="clickEditAdmins(' . $obj->id . ')" data-id="' . $obj->id . '" title="Editar"></i>
<i class="fa fa-trash iconMini" onClick="clickDeleteAdmins(' . $obj->id . ')" data-id="' . $obj->id . '" title="Eliminar"></i>';
})
->editColumn('active', function ($obj) {
if ($obj->active == 0) {
return '<div class="switch"><label><div class="checkbox checbox-switch switch-success"> <label> No <input type="checkbox" onChange="chkAdmins(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" /> <span></span>Si </label></div> </label> </div>';
} else {
return '<div class="switch"><label> <div class="checkbox checbox-switch switch-success"> <label> No <input type="checkbox" onChange="chkAdmins(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" checked="" />
<span></span> Si </label> </div> </label> </div>';
}
})
->editColumn('created_at', function ($obj) {
return \Carbon\Carbon::parse($obj->created_at)->format('Y-m-d h:i:s A');
})
->rawColumns(['active', 'actions'])
->make(true);
}
public function getDirections($user_id)
{
$address = Address::where('user_id', $user_id)->get();
return $address->toArray();
}
public function autocomplete(Request $request)
{
$term = $request->input('term');
$results = array();
$queries = DB::table('users')
->where('document', 'LIKE', '%' . $term . '%')
->where('rol_id', 4)
->take(5)->get();
$parameters = Parameter::first();
$current = new DateTime();
$discounts = Discount::where('when_start', '<=', $current)->where('when_finish', '>=', $current)->where('active', 1)->get(); // se traen los descuentos que aun esten vigentes
foreach ($queries as $query) {
$client = User::find($query->id);
//cliente referido
$userInfo = UserInformation::where('user_id', $client->id)->select('referred_code', 'referred_finish_date')->first();
$clientRefer = UserInformation::where('referred_user_code', $userInfo->referred_code)->first();
$lastOrders = Order::where("client_id", $client->id)->with('orderProducts')->take(3)->get();
if ($clientRefer) { // si alguien tiene el codigo del cliente se verifica que este tenga pedidos
$orders = Order::where("client_id", $clientRefer->user_id)->first();
if ($orders) { // si tiene pedidos se envia el id del referido para que luego de aplicar el desccuento se borre lo que este en el campo referred_user_code
$idRefered = $clientRefer->user_id;
} else {
$idRefered = null;
}
} else {
$idRefered = null;
}
$results[] = [
'id' => $query->id,
'value' => $query->document,
'phone' => $query->phone,
'directions' => $client->addresses,
'document' => $query->document,
'first_name' => $query->first_name,
'last_name' => $query->last_name,
'email' => $query->email,
'created_at' => $query->created_at,
'referred_user_code' => $userInfo->referred_user_code,
'referred_finish_date' => $userInfo->referred_finish_date,
'is_register_discount_active' => $parameters->is_register_discount_active,
'register_discount_delivery' => $parameters->register_discount_delivery,
'days_register_discount_delivery' => $parameters->days_register_discount_delivery,
'clientRefer' => $idRefered,
'discounts' => json_encode($discounts),
'lastOrders' => $lastOrders,
];
}
return json_encode($results);
}
public function getAllDeliveryMan()
{
$deliveryMan = User::where('online', 1)->where('active', 1)->where('rol_id', 3)->get();
return array('r' => true, 'm' => $deliveryMan);
}
public function recoverAccount(Request $request)
{
$user = User::where('id', $request['id'])->withTrashed()->first();
$user->restore();
return array('r' => true, 'm' => trans('messages.controller_deliveryMan_tag8'), 'id' => $request["id"]);
}
public function getClientDocument($document)
{
if (isset($document)) {
$client = User::where('document', $document)->first();
$direction = '';
$district = '';
$indications = '';
$idDir = '';
$lat = '';
$long = '';
if ($client) {
if (count($client->addresses) > 0) {
$arrayDir = $client->addresses;
foreach ($arrayDir as $key => $dir) {
if ($dir->last_used == 1) {
$direction = $dir->direction;
$district = $dir->district;
$indications = $dir->indications;
$idDir = $dir->id;
$lat = $dir->lat;
$long = $dir->long;
}
}
}
return array(
'r' => true,
'client' => $client->toArray(),
'direction' => $direction,
'district' => $district,
'indications' => $indications,
'idDir' => $idDir,
'lat' => $lat,
'long' => $long,
'addresses' => $arrayDir->toArray()
);
} else {
return array('respuesta' => false);
}
} else {
return array('respuesta' => false);
}
}
public function getAlbumOfYearUser($_id)
{
$client = User::where('id', $_id)->first();
$yearAlbumNow = Carbon::now();
$yearAlbum = $yearAlbumNow->format('d-m-Y');
$arrYearAlbum['fecha_actual'] = $yearAlbum;
$arrClient = array($client);
$resultado = array_merge($arrClient, $arrYearAlbum);
return response()->json($resultado);
}
public function autocompleteMail(Request $request)
{
$term = $request->input('term');
$results = array();
$queries = DB::table('users')
->where([['email', 'LIKE', '%' . $term . '%'], ['rol_id', 4]])
->whereNull('deleted_at')
->take(5)->get();
$parameters = Parameter::first();
$current = new DateTime();
$discounts = Discount::where('when_start', '<=', $current)->where('when_finish', '>=', $current)->where('active', 1)->get(); // se traen los descuentos que aun esten vigentes
foreach ($queries as $query) {
$client = User::find($query->id);
//cliente referido
$userInfo = UserInformation::where('user_id', $client->id)->select('referred_code', 'referred_finish_date')->first();
$clientRefer = UserInformation::where('referred_user_code', $userInfo->referred_code)->first();
if ($clientRefer) { // si alguien tiene el codigo del cliente se verifica que este tenga pedidos
$orders = Order::where("client_id", $clientRefer->user_id)->first();
if ($orders) { // si tiene pedidos se envia el id del referido para que luego de aplicar el desccuento se borre lo que este en el campo referred_user_code
$idRefered = $clientRefer->user_id;
} else {
$idRefered = null;
}
} else {
$idRefered = null;
}
$results[] = [
'id' => $query->id,
'value' => $query->email,
'phone' => $query->phone,
'pns_id' => $query->pns_id,
'directions' => $client->addresses,
'document' => $query->document,
'first_name' => $query->first_name,
'last_name' => $query->last_name,
'created_at' => $query->created_at,
'referred_user_code' => $userInfo->referred_user_code,
'referred_finish_date' => $userInfo->referred_finish_date,
'is_register_discount_active' => $parameters->is_register_discount_active,
'register_discount_delivery' => $parameters->register_discount_delivery,
'days_register_discount_delivery' => $parameters->days_register_discount_delivery,
'clientRefer' => $idRefered,
'discounts' => json_encode($discounts),
];
}
return json_encode($results);
}
public function saveImage(Request $request)
{
$id = $request->id;
$num_ram = rand(1, 999);
$extension = $request->file('photo')->getClientOriginalExtension();
$filenametostore = $num_ram . time() . '.' . $extension;
Storage::disk('s3')->put(config('s3.deliveryman') . $filenametostore, fopen($request->file('photo'), 'r+'), 'public');
$u = User::find($id);
$userInfo = UserInformation::where('user_id', $u->id)->first();
$userInfo->photo = $filenametostore;
$logObject = $userInfo;
$userInfo->update();
$this->registerLog(Auth::user()->id, 'Guardó imagen mensajero', json_encode($logObject), "Create", $this->getModule($request));
return array('r' => true, 'm' => trans('messages.controller_deliveryMan_tag1'));
}
public function updateImage(Request $request)
{
$id = $request->id;
$u = User::find($id);
$userInfo = UserInformation::where('user_id', $u->id)->first();
$image = $userInfo->photo;
Storage::disk('s3')->delete(config('s3.deliveryman') . $image);
$num_ram = rand(1, 999);
$extension = $request->file('photo')->getClientOriginalExtension();
$filenametostore = $num_ram . time() . '.' . $extension;
Storage::disk('s3')->put(config('s3.deliveryman') . $filenametostore, fopen($request->file('photo'), 'r+'), 'public');
$logObject = $userInfo;
$userInfo->photo = $filenametostore;
$userInfo->update();
$this->registerLog(Auth::user()->id, 'Actualizó imagen mensajero', json_encode($logObject), "Update", $this->getModule($request));
return array('r' => true, 'm' => trans('messages.controller_deliveryMan_tag9'), 'file' => config('filesystems.disks.s3.url') . '/deliveryman/' . $filenametostore);
}
public function fixPassword($init, $end)
{
$users = User::where('id', '>=', $init)->where('id', '<=', $end)->get();
foreach ($users as $key => $user) {
$user->password = Hash::make($user->password);
$user->update();
}
return response()->json(200);
}
public function reportClientNever()
{
return Excel::download((new ReportClients)->withoutOrders(), trans('messages.controller_deliveryMan_tag10') . '.xlsx');
}
public function reportClientFifteen()
{
return Excel::download((new ReportClients)->withOrdersLastFifteenDays(), trans('messages.controller_deliveryMan_tag11') . '.xlsx');
}
public function reportClientAll()
{
return Excel::download(new ReportClients, trans('messages.controller_deliveryMan_tag12') . '.xlsx');
}
public function coupone($id, $code)
{
$discount = Discount::where('code_coupon', $code)->first();
if ($discount) {
if ($discount->is_multiple_redeem) {
return array('r' => true, 'd' => $discount->toArray());
} else {
$discountOrder = DiscountOrderUser::where('discount_id', $discount->id)->get();
if (count($discountOrder) >= $discount->max_winners) {
return array('r' => false, 'm' => trans('messages.controller_deliveryMan_tag15'));
}
$discountOrder = DiscountOrderUser::where('discount_id', $discount->id)->where('user_id', $id)->first();
if ($discountOrder) {
return array('r' => false, 'm' => trans('messages.controller_deliveryMan_tag14'));
} else {
return array('r' => true, 'd' => $discount->toArray());
}
}
} else {
return array('r' => false, 'm' => trans('messages.controller_deliveryMan_tag13'));
}
}
public function searchUser($document, $email = "", $first_name = "", $last_name = "", $phone = "", $force = false)
{
try {
$user = null;
if ($document && $document != "" && !$force) {
$user = User::select('id', 'first_name', 'last_name', 'document', 'phone', 'email')->where([['document', $document], ['active', true]])->orderBy('last_session', 'desc')->first();
}
if (!$user && $email && $email != "") {
$user = User::select('id', 'first_name', 'last_name', 'document', 'phone', 'email')->where([['email', $email], ['active', true]])->orderBy('last_session', 'desc')->first();
if ($user) {
if ($first_name)
$user->first_name = $first_name;
if ($last_name)
$user->last_name = $last_name;
if ($document)
$user->document = $document;
if ($phone)
$user->phone = $phone;
$user->update();
}
}
return $user;
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_creating'), "data" => $th->getMessage()));
}
}
public function importSubscribers(Request $request)
{
try {
$file = new SubscribersImport;
$file->request = $request;
Excel::import($file, $request->archivo);
return array('r' => true, 'd' => $file->answer, 'm' => trans('messages.screen_products_tag45') . ' ' . $file->edit['creados'] . ' creados.');
} catch (\Exception $e) {
$error = [
'request' => $request->all(),
'message' => $e->getMessage(),
'getFile' => $e->getFile(),
'getLine' => $e->getLine(),
];
$util = new UtilController();
$util->logFile(json_encode($error));
return array('r' => false, 'd' => null, 'm' => trans('messages.screen_products_tag46') . $request->name_file . " " . $e->getMessage());
}
}
public function generateSubscribersCredit()
{
try {
$is_subscriber = true;
$userNotRegister = [];
$listAbonos = PreSubscriber::where([['payment', false], ['is_credit', true]])->with('seat', 'seat.letter')->get();
if (count($listAbonos) == 0) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_validation_12'), "data" => null));
}
$match_event = DB::table('match_events')
->select('match_events.id', 'match_events.name', 'match_events.season_id')
->join('seasons', 'seasons.id', '=', 'match_events.season_id')
->where([['seasons.is_suscription', true], ['seasons.active', true]])
->where([['match_events.event_start', '>', Carbon::now()], ['match_events.active', true]])
->first();
if (!$match_event) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_validation_20'), "data" => null));
}
$ticketApiController = new TicketApiController();
$ticketsController = new TicketsController();
foreach ($listAbonos as $item) {
$tickets_array = [];
$user_abono = User::where('document', $item->document)->where('email', $item->email)->where('active', true)->orderBy('last_session', 'desc')->first();
if (!$user_abono) {
$is_subscriber = false;
$userNotRegister[] = 'documento: ' . $item->document . ', correo: ' . $item->email;
} else {
$seat = $item->seat;
$validateLockedChair = $this->validateSubscriberInfo($seat->id, $match_event->id);
if ($validateLockedChair) {
DB::rollback();
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_validation_17'), "dataseat" => $seat->letter->name . $seat->code, "data" => null));
}
$data_ticket = array(
'seat' => $seat,
'match_event_id' => $match_event->id,
'ticket_type_id' => TicketTypesEnum::SUBSCRIBER,
'match_event_price' => $item->price,
'zone_name' => $item->seat->zone_id,
'price' => $item->price,
'dataTicket' => array(
'checkedCtrl' => true
),
);
array_push($tickets_array, $data_ticket);
$request = new Request([
'tickets' => $tickets_array,
'type_process' => "block",
'amount' => $item->price,
'ticket_type_id' => TicketTypesEnum::SUBSCRIBER,
'season_id' => $match_event->season_id,
]);
$data = $ticketApiController->createBlocks($request, $user_abono->id);
$response = json_decode($data->getContent());
if (!$response->r) {
return $data;
break;
}
$ticketsPending = TicketMain::findOrFail($response->data);
if (!$ticketsPending->ticket_user_blocks->isEmpty()) {
if (!$ticketsController->generateTickets($ticketsPending->ticket_user_blocks, $response->data)) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_validation_14', ['seat' => $seat->letter->name . $seat->code]), "data" => null));
}
$ticketsPending->payment_state = "CONFIRMED";
$ticketsPending->payment_comment = "Abono tipo credito";
$ticketsPending->update();
}
}
}
if ($is_subscriber == false) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_validation_19'), "data" => $userNotRegister));
}
return response(array("r" => true, "type" => "success", "m" => __('messages.create_ticket'), "data" => null));
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_global'), "data" => $th->getMessage()));
}
}
public function generateSubscribersRandom()
{
try {
$userNotRegister = [];
$countProcess = 0;
$listAbonos = PreSubscriber::where([['payment', false], ['is_credit', true]])->with('seat')->get();
if (count($listAbonos) == 0) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_validation_12'), "data" => null));
}
$match_event = MatchEvent::where('event_start', '>', Carbon::now())->orderBy('created_at', 'desc')->first();
$ticketsController = new TicketsController();
$massiveFansController = new MassiveFansController();
foreach ($listAbonos as $item) {
$user_abono = User::where([['document', $item->document], ['active', true]])->orderBy('active', 'desc')->first();
if (!$user_abono) {
$userNotRegister[] = $item->document;
} else {
$old_main = Ticket::where([['user_id', $user_abono->id], ['match_event_id', 24]])->first();
if (!$old_main) {
$userNotRegister[] = $item->document . "-noticket";
} else {
$seat_id = 0;
$seats = $massiveFansController->getSeatsAvailableFromLocationAndEvent(
[
'zone_id' => $item->seat->zone_id,
'quantity' => 1,
'match_event_id' => $match_event->id,
]
);
if (!count($seats)) {
$seat_id = $item->seat_id;
} else {
$seat_id = $seats[0]->id;
}
$t = $ticketsController->createTicket(
[
'seat_id' => $seat_id,
'match_event_id' => $match_event->id,
'user_id' => $user_abono->id,
'ticket_type_id' => TicketTypesEnum::SUBSCRIBER,
'ticket_main_id' => $old_main->ticket_main_id,
'price' => $item->price,
'is_from_massive' => true
]
);
if (!$t instanceof \Illuminate\Database\Eloquent\Model) {
if (array_key_exists('r', $t)) {
if ($t['r'] == false) {
DB::rollback();
return array('r' => false, 'd' => $t['data'], 'm' => $t['m']);
}
}
}
$countProcess++;
$item->delete();
}
}
}
return response(array("r" => true, "type" => "error", "title" => "Oops...", "m" => __('messages.create_ticket') . " Numero total: " . $countProcess, "data" => $userNotRegister));
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_global'), "data" => $th->getMessage()));
}
}
public function deleteSubscribers()
{
try {
PreSubscriber::truncate();
return response(array("r" => true, "type" => "error", "title" => "Oops...", "m" => __('messages.deleted_successfully'), "data" => null));
} catch (\Throwable $th) {
return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_global'), "data" => $th->getMessage()));
}
}
public function reportFansAll()
{
return Excel::download(new FansExport, trans('messages.subcategories_controller_tag13') . '.xlsx');
}
public function deleteClient(Request $request)
{
$userId = $request->userId;
$logObj = User::find($userId);
$this->deleteUser($userId);
// Log
$this->registerLog(Auth::user()->id, 'Elimino cliente', json_encode($logObj), "Delete", $this->getModule($request));
return array('r' => true, 'm' => trans('messages.controller_other_users_tag1'));
}
public function getById($id)
{
return User::find($id);
}
//función para validar y generar exportación
public function validateExport(Request $request, CustomerTableService $customerTableService)
{
$query = $customerTableService->getTableQuery($request);
if (!$query->exists()) {
return response()->json([
'success' => false,
'message' => 'No existen datos a exportar',
]);
}
$name = 'Clientes_' . date("Ymd_His") . '.xlsx';
$userId = auth()->id();
// Inicializar estado
Cache::put("export_{$userId}_{$name}", [
'status' => 'processing',
'filename' => $name,
], now()->addHours(2));
// Despachar job (con el namespace correcto)
GenerateClientExportJob::dispatch(
$request->all(),
$name,
$userId
);
return response()->json([
'success' => true,
'message' => 'El archivo se está generando',
'filename' => $name,
'processing' => true
]);
}
// Método checkExportStatus (sin cambios)
public function checkExportStatus(Request $request)
{
$filename = $request->input('filename');
$userId = auth()->id();
$cacheKey = "export_{$userId}_{$filename}";
$status = Cache::get($cacheKey);
if (!$status) {
return response()->json([
'success' => false,
'status' => 'not_found',
'message' => 'Export no encontrado',
], 404);
}
return response()->json([
'success' => true,
'status' => $status['status'], // 'processing', 'completed', 'failed'
'filename' => $status['filename'] ?? null,
'url' => $status['url'] ?? null,
'error' => $status['error'] ?? null,
]);
}
// Método para descargar
public function downloadExport($filename)
{
$userId = auth()->id();
$cacheKey = "export_{$userId}_{$filename}";
$status = Cache::get($cacheKey);
if (!$status || $status['status'] !== 'completed') {
abort(404, 'Archivo no encontrado o aún en proceso');
}
$path = "public/{$filename}";
if (!Storage::exists($path)) {
abort(404, 'Archivo no encontrado');
}
return Storage::download($path);
}
public function export($name)
{
return $this->util->export($name);
}
public function templateImportSegmentation()
{
return Excel::download(new UserSegmentationTemplate, trans('messages.controller_client_tag5') . '.xlsx');
}
public function importSegmentation(Request $request)
{
try {
$file = new UserSegmentationImport;
$file->request = $request;
Excel::import($file, $request->archivo);
return array('r' => true, 'd' => $file->answer, 'm' => trans('messages.screen_products_tag45') . ' ' . $file->edit['creados'] . ' creados.');
} catch (\Exception $e) {
$error = [
'request' => $request->all(),
'message' => $e->getMessage(),
'getFile' => $e->getFile(),
'getLine' => $e->getLine(),
];
$util = new UtilController();
$util->logFile(json_encode($error));
return array('r' => false, 'd' => null, 'm' => trans('messages.screen_products_tag46') . $request->name_file . " " . $e->getMessage());
}
}
public function template()
{
return Excel::download(new ClientTemplate, trans('messages.clients.import_file') . '.xlsx');
}
public function import(Request $request)
{
try {
$file = new ClientImport;
$file->request = $request;
Excel::import($file, $request->archivo);
return array('r' => true, 'd' => $file->answer, 'm' => trans('messages.clients.import_success') . ' ' . $file->edit['creados'] . ' cliente/s creado/s,' . ' ' . $file->edit['existen'] . ' cliente/s que ya existían.');
} catch (\Exception $e) {
$error = [
'request' => $request->all(),
'message' => $e->getMessage(),
'getFile' => $e->getFile(),
'getLine' => $e->getLine(),
];
$util = new UtilController();
$util->logFile(json_encode($error));
return array('r' => false, 'm' => trans('messages.clients.import_error') . $request->name_file . " " . $e->getMessage());
}
}
function validateSubscriberInfo($seatId, $matchEventId)
{
return TicketUserBlock::where('seat_id', $seatId)->where('match_event_id', $matchEventId)->exists();
}
public function deletePreSubscriber(Request $request)
{
$preSubscriber = PreSubscriber::find($request->id);
$logObj = $preSubscriber;
$preSubscriber->delete();
$this->registerLog(Auth::user()->id, 'Elimino PreSubscriber', json_encode($logObj), "Delete", $this->getModule($request));
$data = array('r' => true, 'm' => trans('messages.subscribers.controller_delete_tag1'));
return response()->json($data, 200);
}
public function correctUserRecords($email = null)
{
if (in_array(Auth::user()->rol->id, [$this->__SUPERADMIN_ROL])) {
if ($email)
$users = User::select('id', 'created_at')->where('email', $email)->withTrashed()->get();
else
$users = User::select('id', 'created_at')->withTrashed()->get();
if (!count($users))
return 'No existen usuarios a corregir';
$userInformations = UserInformation::get();
if ($email) {
UserInformation::where('user_id', $users[0]->id)->delete();
} else {
UserInformation::truncate();
}
foreach ($users as $user) {
$id = $user->id;
$info = $userInformations->filter(function ($data) use ($id) {
return $data->user_id == $id;
})->first();
if (!$info) {
$info = new UserInformation();
$info->user_id = $id;
$info->is_initial = 1;
$info->is_tutorial_viewed = 1;
$info->is_habeas_data_viewed = 1;
$info->created_at = $user->created_at;
$info->save();
} else {
$info->id = $id;
UserInformation::create($info->toArray());
}
}
return 'Proceso ejecutado exitosamente: Total usuarios revisados => ' . count($users);
}
return 'Proceso no ejecutado por permisos';
}
public function deleteUser($userId)
{
$user = User::find($userId);
if ($user) {
TermClient::where('user_id', $userId)->delete();
UserInformation::where('user_id', $userId)->delete();
User::where('id', $userId)->delete();
}
}
public function getByEmail($email)
{
return User::select('id', 'first_name', 'last_name', 'document', 'phone')->where('email', $email)->first();
}
public function getByDocument(Request $request)
{
$document = $request->input('document');
$users = User::select('id', 'first_name', 'last_name', 'document', 'phone', 'email')
->where('document', $document)
->get();
$obfuscatedUsers = $users->map(function ($user) {
return [
'id' => $user->id,
'first_name' => $this->obfuscateValue((string) $user->first_name),
'last_name' => $this->obfuscateValue((string) $user->last_name),
'document' => $this->obfuscateValue((string) $user->document),
'phone' => $this->obfuscateValue((string) $user->phone),
'email' => $this->obfuscateEmail((string) $user->email),
];
});
return response()->json($obfuscatedUsers);
}
protected function obfuscateValue(string $value): string
{
$length = strlen($value);
if ($length <= 4) {
return str_repeat('*', $length);
}
return str_repeat('*', $length - 4) . substr($value, -4);
}
protected function obfuscateEmail(string $email): string
{
if (!str_contains($email, '@')) {
return $this->obfuscateValue($email);
}
[$localPart, $domain] = explode('@', $email, 2);
$obfuscatedLocal = $this->obfuscateValue($localPart);
return $obfuscatedLocal . '@' . $domain;
}
private function tableFilterClientCustomColumns($dataTable)
{
$dataTable->addColumn('actions', function ($obj) {
$cards = $obj->cards;
if ($this->validateRolePermissions('user', 'administrator') || $this->validateRolePermissions('user', 'supervisor')) {
$actions = '
<i class="fa fa-eye iconMini" onClick="clickInfoClient(' . $obj->id . ')" data-id="' . $obj->id . '" title="Información"></i>
<i class="fa fa-pencil iconMini" onClick="clickEditClient(' . $obj->id . ')" data-id="' . $obj->id . '" title="Editar"></i>
<i class="fa fa-trash iconMini" onClick="clickDeleteClient(' . $obj->id . ')" data-id="' . $obj->id . '" title="Eliminar"></i>
';
if ($cards) {
$first_name = "'$obj->first_name'";
$last_name = "'$obj->last_name'";
$document = "'$obj->document'";
$documentType = "'$obj->documentTypeAlias'";
$userPhoto = $obj->userPhoto ? "'" . config('filesystems.disks.s3.url') . "/avatars/" . $obj->userPhoto . "'" : "null";
$actions .= '<i class="fa fa-id-card-o iconMini" onClick="loadCards(' . $obj->id . ', ' . $first_name . ', ' . $last_name . ', ' . $document . ', ' . $documentType . ', ' . $cards . ', ' . $userPhoto . ')" data-id="' . $obj->id . '" title="Carnés"></i>';
}
return $actions;
} elseif ($this->validateRolePermissions('user', 'seller')) {
return '<i class="fa fa-eye iconMini" onClick="clickInfoClient(' . $obj->id . ')" data-id="' . $obj->id . '" title="Información"></i>';
} else {
return '';
}
})
->editColumn('active', function ($obj) {
if ($this->validateRolePermissions('ticketing', 'administrator') || $this->validateRolePermissions('ticketing', 'supervisor')) {
if ($obj->active == 0) {
return '<div class="switch"><label><div class="checkbox checbox-switch switch-success"> <label> ' . __('messages.no') . ' <input type="checkbox" onChange="chkClient(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" /> <span></span>' . __('messages.yes') . ' </label></div> </label> </div>';
} else {
return '<div class="switch"><label> <div class="checkbox checbox-switch switch-success"> <label> ' . __('messages.no') . ' <input type="checkbox" onChange="chkClient(' . $obj->id . ')" data-id="' . $obj->id . '" id="Checkactive' . $obj->id . '" name="Checkactivo" checked="" />
<span></span> ' . __('messages.yes') . ' </label> </div> </label> </div>';
}
} else {
return $obj->active == 1 ? 'SI' : 'NO';
}
})
->editColumn('last_session', function ($obj) {
return \Carbon\Carbon::parse($obj->last_session)->format('Y-m-d');
})
->editColumn('time_session', function ($obj) {
return \Carbon\Carbon::parse($obj->time_session)->format('h:i:s A');
})
->editColumn('sex', function ($obj) {
return $this->util->getFullSexText($obj->sex);
})
->rawColumns(['active', 'actions']);
}
public function registerNewUser(Request $request)
{
try {
$validator = Validator::make($request->all(), [
'first_name' => 'required|string|max:255',
'last_name' => 'required|string|max:255',
'email' => 'required|email',
'phone' => 'nullable|string|max:20',
'dial_code' => 'nullable|string|max:5',
'country_code' => 'nullable|string|max:5',
'document_type_id' => 'nullable|exists:document_types,id',
'document' => 'required|string',
]);
if ($validator->fails()) {
return response()->json([
'success' => false,
'message' => 'Errores de validación',
'errors' => $validator->errors()
], 422);
}
$validated = $validator->validated();
$userResponse = $this->createClient(new Request($validated), $is_ticket = false, $validateByDocument = false);
if (!$userResponse['r']) {
return response()->json([
'success' => false,
'message' => $userResponse['m'] ?? 'Error al registrar el usuario',
], 500);
}
$user = User::find($userResponse['d']->id);
Auth::login($user);
return response()->json([
'success' => true,
'message' => 'Usuario registrado exitosamente. Complete sus datos para continuar.',
], 200);
} catch (Exception $e) {
return response()->json([
'success' => false,
'message' => $e->getMessage() ?? 'Error al registrar el usuario',
], 500);
}
}
}