File: /var/www/vhost/disk-apps/agile-selling-wpb/app/Http/Controllers/Api/UserApiController.php
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Mail\MailboxUser;
use App\Events\ChatEvent;
use Carbon\Carbon;
use App\User;
use App\UserInformation;
use App\Address;
use App\Mailbox;
use App\Parameter;
use App\Message;
use App\Chat;
use App\ChatMessage;
use App\Discount;
use App\DiscountOrderUser;
use App\DocumentType;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
class UserApiController extends Controller
{
public function getAllDeliveries()
{
$couriers = User::where('rol_id', 3)
->where('id', '!=', Auth::user()->id)
->where('active', 1)->where('online', 1)->get();
return array('r' => true, 'd' => $couriers);
}
public function closeDeliverySession(Request $request)
{
$obj = User::where('email', $request['email'])->first();
if (!is_null($obj)) {
$obj->last_session = null;
$obj->online = 0;
$obj->update();
}
return array('r' => true);
}
public function getClient($document)
{
$client = User::where('document', $document)->where('active', 1)->first();
if (isset($client->id)) {
$direction = Address::address($client->id)->first();
$result = array('client' => $client->toArray(), 'address' => $direction);
return array('r' => true, 'd' => $result);
} else {
return array('r' => false, 'd' => null);
}
}
public function infoUser(Request $request)
{
$user = User::where("email", $request["email"])->with('userInfo')->with('addresses')->with('addresses.city')->first();
$data = array('status' => 'success', 'user' => $user);
return response()->json($data, 200);
}
public function updateUser(Request $request)
{
$user_id = Auth::user()->id;
$user = User::find($user_id);
$user_info = UserInformation::where('user_id', $user_id)->first();
$user->first_name = $request["first_name"];
$user->last_name = $request["last_name"];
$user->document = $request["document"];
$user->phone = $request["phone"];
$user->email = $request["email"];
$user->document_type_id = $request["document_type"];
$user_info->dob = $request["birthdate"];
$user->update();
$user_info->update();
if ($user) {
$userInfo = User::where("id", $user_id)->with('userInfo')->with('addresses')->with('addresses.city')->first();
$data = array('status' => 'success', 'user' => $userInfo);
return response()->json($data, 200);
} else {
$data = array('status' => 'error', 'user' => null);
return response()->json($data, 200);
}
}
public function savePlayerId(Request $request)
{
$id = Auth::user()->id;
$user = User::find($id);
$user->pns_id = $request['playerId'];
$user->update();
return array('r' => true);
}
public function mailbox(Request $request)
{
$user_id = Auth::user()->id;
$mailbox = new Mailbox();
$mailbox->message = $request["mailbox"];
$mailbox->user_id = $user_id;
$mailbox->save();
if ($mailbox) {
$user = User::find($user_id);
$parameters = Parameter::find(1);
$mail = new \stdClass();
$mail->originCity = $parameters->db_city;
$mail->userName = $user->first_name .' '. $user->last_name;
$mail->userEmail = $user->email;
Mail::to($parameters->email_notification)->send(new MailboxUser($mail));
$data = array('status' => 'success');
return response()->json($data, 200);
}
}
public function getMessages()
{
$user_id = Auth::user()->id;
$chat = Chat::where('user_id', $user_id)->first();
$messages = array();
if ($chat != null) {
$messages = ChatMessage::where('chat_id', $chat->id)->with('messages')->get();
}
$data = array('status' => 'success', 'messages' => $messages);
return response()->json($data, 200);
}
public function newMessage(Request $request)
{
$user_id = Auth::user()->id;
$nameUser = Auth::user()->first_name . " " . Auth::user()->last_name;
$chat = Chat::where('user_id', $user_id)->first();
if ($chat != null) { // Existe conversación.
$message = new Message();
$message->message = $request["message"];
$message->user_id = $user_id;
$message->read_user = 1;
$message->image = '';
$message->save();
$chat_message = new ChatMessage;
$chat_message->chat_id = $chat->id;
$chat_message->messages_id = $message->id;
$chat_message->save();
} else {
$chat = new Chat;
$chat->user_id = $user_id;
$chat->save();
$message = new Message();
$message->message = $request["message"];
$message->user_id = $user_id;
$message->read_user = 1;
$message->image = '';
$message->save();
$chat_message = new ChatMessage;
$chat_message->chat_id = $chat->id;
$chat_message->messages_id = $message->id;
$chat_message->save();
}
$time = $chat_message->messages->time_elapsed_string($chat_message->messages->created_at);
if ($message) {
$response = array("message" => $message, "name" => $nameUser, "time" => $time);
event(new ChatEvent($response, $user_id, 4));
$data = array('status' => 'success', 'message' => $message);
return response()->json($data, 200);
}
}
public function getUserPermission()
{
$id = Auth::user()->id;
$parameters = Parameter::find(1);
if ($parameters->deliveryMan_create_order) {
return array('r' => true, 'city' => $parameters->db_city);
} else {
return array('r' => false, 'city' => $parameters->db_city);
}
}
public function updateDelivery(Request $request)
{
$id = Auth::user()->id;
$user = User::where('id', $id)->with('userInfo')->first();
$user->first_name = $request['name'];
$user->last_name = $request['lastname'];
$user->document = $request['document'];
$user->phone = $request['phone'];
$user->email = $request['email'];
$user->update();
return array('r' => true);
}
public function updateInfoPermission()
{
$parameters = Parameter::find(1);
if ($parameters->deliveryMan_update_info) {
return array('r' => true);
} else {
return array('r' => false);
}
}
// Genera Pin aleatorio gane.
public function generatepin()
{
$date = Carbon::now();
$pin = $date->getTimestamp() . rand(10,99);
return $pin;
}
public function uploadImageProfile(Request $request)
{
try{
$id = Auth::user()->id;
$filename = $this->generatepin() . '.jpg';
$user = UserInformation::select('id','user_id','photo_social','photo')->where('user_id', $id)->first();
if($user->photo){
Storage::disk('s3')->delete(env('S3_AVATARS_PATH') . $user->photo);
}
$user->photo_social = null;
$user->photo = $filename;
$user->update();
list($baseType, $image) = explode(';', $request->file);
list(, $image) = explode(',', $image);
$image = base64_decode($image);
// Subir archivo a AWS S3
Storage::disk('s3')->put(env('S3_AVATARS_PATH') . $filename, $image, 'public');
return array('status' => true, 'filename' => $filename);
}catch(\Exception $exx){
return array('status' => false, 'error' => $exx->getMessage());
}
}
public function itIsAuthorized(Request $request)
{
$id = Auth::user()->id;
try {
$data = array('status' => 'success');
return response()->json($data, 200);
} catch (Exception $e) {
return $e;
}
}
public function updateViewTutorial()
{
try {
UserInformation::where('user_id', Auth::user()->id)->update(['is_tutorial_viewed' => true]);
return response()->json(array('status' => true, 'm' => ''), 200);
} catch (Exception $e) {
return array('status' => false, 'error' => $e->getMessage());
}
}
public function registerDiscountShipments(Request $request)
{
$user_id = Auth::user()->id;
$discount = Discount::where([['active', true], ['discount_type_id', 1]])->first();
if (isset($discount->id)) {
$date = Carbon::now();
$finalDate = $date->addDays($discount->days_register_discount_delivery);
$discountOrderUser = new DiscountOrderUser();
$discountOrderUser->user_id = $user_id;
$discountOrderUser->discount_id = $discount->id;
$discountOrderUser->limit_discount = $finalDate;
$discountOrderUser->save();
$data = array('status' => 'success');
return response()->json($data, 200);
} else {
$data = array('status' => 'there_is_no_discount');
return response()->json($data, 200);
}
}
public function updateSucursalUser(Request $request)
{
$user_id = Auth::user()->id;
$updateUser = UserInformation::where('user_id', $user_id)
->update(['current_sucursal_id' => $request["sucursal_id"]]);
if ($updateUser) {
$data = array('status' => 'success');
return response()->json($data, 200);
} else {
$data = array('status' => 'error');
return response()->json($data, 200);
}
}
public function getDocumentTypes()
{
$document_types = DocumentType::where('active', true)->get();
$data = array('status' => 'success', 'documents_types' => $document_types);
return response()->json($data, 200);
}
public function updateLastSession()
{
try {
$user = User::where('id', Auth::user()->id)->first();
$user->last_session = Carbon::now();
$user->update();
return array('r' => true, 'm' => null);
} catch (\Throwable $th) {
return array('r' => false, 'm' => $th->getMessage());
}
}
}