diff --git a/Dockerfile b/Dockerfile index e05eeda..9e1e751 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,31 @@ FROM php:8.1-fpm +SHELL ["/bin/bash", "--login", "-c"] ARG user=contacte ARG uid=1000 -RUN apt-get update && apt-get install -y curl zip unzip nodejs vim sudo +# RUN apt-get update && apt-get install -y curl zip unzip nodejs npm vim sudo +RUN apt-get update && apt-get install -y curl zip unzip vim sudo RUN apt-get update && apt-get install -y libpq-dev && docker-php-ext-install pdo pdo_pgsql RUN curl -sS https://getcomposer.org/installer -o composer-setup.php RUN HASH=`curl -sS https://composer.github.io/installer.sig` RUN php composer-setup.php --install-dir=/usr/local/bin --filename=composer +RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash RUN useradd -G www-data,root -u $uid -d /home/$user $user WORKDIR /var/www COPY . . +RUN chown $user:$user -R /var/www +RUN composer install +RUN nvm install 18.17.1 +RUN chmod -R 777 /var/www/storage +RUN npm install +RUN npm run build +RUN php artisan key:generate +EXPOSE 8181 -EXPOSE 80 +ENTRYPOINT [ "php" ] + +CMD ["artisan", "serve", "--host", "0.0.0.0", "--port", "80"]' diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index d82c325..d508009 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -14,18 +14,17 @@ class Helper return (object) $array; } - - public static function last_day_in_mouth() + public static function last_date_in_mouth() { $mes = date('m'); $ano = date('Y'); - $data_fim = date("Y-m-" . cal_days_in_month(CAL_GREGORIAN, $mes, $ano)); + $ultimoDiaMes = self::last_day_in_mouth($mes, $ano); + $data_fim = date("Y-m-" . $ultimoDiaMes); return $data_fim; } - - - - + public static function last_day_in_mouth($month, $year){ + return $month == 2 ? ($year % 4 ? 28 : ($year % 100 ? 29 : ($year % 400 ? 28 : 29))) : (($month - 1) % 7 % 2 ? 30 : 31); + } } diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 33cda67..801c242 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -2,22 +2,22 @@ namespace App\Http\Controllers; -use app\Helpers\Crypt; use App\Helpers\Helper; use App\Models\Atendimentos; use App\Models\Filas; -use App\Models\Supervisor; -use DateTime; -use GuzzleHttp\Psr7\Request; +use App\Models\Pausas; use Illuminate\Support\Facades\DB; class DashboardController extends Controller { public function index() { - return view('admin.dashboard'); - } + $user = auth()->user(); + $id_empresa = $user->empresa->first()->id; + $pausas = Pausas::where(["id_empresa" => $id_empresa, "is_ativo" => true])->get(); + return view('admin.dashboard', compact('pausas')); + } public function getRelatorioDados() { @@ -31,9 +31,9 @@ class DashboardController extends Controller ->groupBy('u.nome') ->get(); - - $atendimentosStatusData = DB::table('supervisor as a') - ->leftJoin('eventos_atendimento as b', 'a.id_usuario', '=', 'b.id_usuario') + $atendimentosStatusData = DB::table('usuarios as u') + ->join('usuario_empresa as ue', 'ue.id_usuario', '=', 'u.id') + ->join('eventos_atendimento as ea', 'ea.id_usuario', '=', 'u.id') ->select('b.evento', DB::raw('count(b.evento) as qtde_usados')) ->where('a.id_empresa', $id_empresa) ->groupBy('b.evento') @@ -48,7 +48,7 @@ class DashboardController extends Controller $data_inicio = date("Y-m-01"); $data_atual = date('Y-m-d'); - $data_fim = Helper::last_day_in_mouth(); + $data_fim = Helper::last_date_in_mouth(); $atendimentosPorMes = $this->getAtendimentosMes($data_inicio, $data_fim); $atendimentosDia = $this->getAtendimentoDia($data_atual); @@ -86,7 +86,6 @@ class DashboardController extends Controller return $total_atendimentos; } - private function relatoriosDados() { $user = auth()->user(); @@ -171,12 +170,12 @@ class DashboardController extends Controller } $user = auth()->user(); $id_empresa = $user->empresa->first()->id; - $fila = Filas::where('id', $id)->where('id_empresa', $id_empresa)->first(); + $fila = Filas::where(['id' => $id, 'id_empresa' => $id_empresa])->first(); + $pausas = Pausas::where(["id_empresa" => $id_empresa, "is_ativo" => true])->get(); - return view('admin.agentesLogados', compact('fila')); + return view('admin.agentesLogados', compact('fila', 'pausas')); } - public function relatoriosFilas($id) { @@ -189,21 +188,6 @@ class DashboardController extends Controller $fila = Filas::where('id', $id)->where('id_empresa', $id_empresa)->first(); - // $agentesNaFila = DB::table('supervisor as s') - // ->leftJoin('atendimento as a', function ($join) { - // $data_atual = date('Y-m-d'); - - // $join->on('s.id_usuario', '=', 'a.id_usuario') - // ->where(DB::raw('DATE(a.data_reg)'), $data_atual); - // }) - // ->select('s.*', DB::raw('COALESCE(COUNT(a.id), 0) AS qtde_atendimento')) - // ->where([ - // ['s.id_empresa', $id_empresa], - // ['fila', $fila->nome], - // ]) - // ->groupBy('s.id') - // ->get(); - $agentesNaFila = DB::table('supervisor as s') ->leftJoin('atendimento as a', function ($join) { $data_atual = date('Y-m-d h:i:s'); diff --git a/app/Http/Controllers/EmpresaController.php b/app/Http/Controllers/EmpresaController.php index 984ca89..269f7a5 100644 --- a/app/Http/Controllers/EmpresaController.php +++ b/app/Http/Controllers/EmpresaController.php @@ -27,8 +27,6 @@ class EmpresaController extends Controller return redirect()->back(); } - - $request->validate([ 'nome' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:'.Empresa::class], diff --git a/app/Http/Controllers/SupervisorController.php b/app/Http/Controllers/SupervisorController.php index 5dc3dfd..c0be1d9 100644 --- a/app/Http/Controllers/SupervisorController.php +++ b/app/Http/Controllers/SupervisorController.php @@ -2,161 +2,96 @@ namespace App\Http\Controllers; -use App\Models\Agentes; use App\Models\Filas; -use App\Models\numberChanel; -use App\Models\Setores; -use App\Models\Supervisor; +use App\Models\Pausas; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class SupervisorController extends Controller { - // - - public function index(Request $request) + public function desconectarAgente(Request $request) { + $request->validate([ + 'supervisor_id' => ['required'], + ]); - $user = auth()->user(); - - $id_empresa = $user->empresa->first()->id; - - $filas = Filas::where([ - ['is_ativa', true], - ['id_empresa', $id_empresa] - ])->get(); - - - $agentes = DB::table('usuarios as u') - ->join('usuario_empresa as ue', 'ue.id_usuario', '=', 'u.id') - ->select('u.*') - ->where('u.status', true) - ->get(); - - $numberChannels = numberChanel::where('id_empresa', $id_empresa)->get(); - - $supervisores = Supervisor::where('id_empresa', $id_empresa); - - + $deleted = DB::table("supervisor as s")->where("s.id", $request->supervisor_id)->delete(); - if ($request->pesquisa) { - $pesquisa = strtolower($request->pesquisa); - $supervisores->where(DB::raw('LOWER(supervisor.nome)'), 'like', "%$pesquisa%"); + if(!$deleted){ + return redirect()->back()->with('status', 'Erro ao desconectar agente'); } - $supervisores = $supervisores->get(); - - return view('admin.supervisor', compact('filas', 'agentes', 'supervisores', 'numberChannels')); + return redirect()->back()->with('status', 'Desconectado com sucesso'); } - - public function create(Request $request) + public function pausaAgente(Request $request) { - $request->validate([ - 'agente_id' => ['required'], - 'fila' => ['required'], - 'channel' => ['required'] + 'pausa' => ['string', 'required'], + 'supervisor_id' => ['required'], ]); - - if (empty($request->agente_id) || empty($request->fila) || empty($request->channel)) { - return redirect('supervisor'); - } - - - $agenteData = Agentes::find($request->agente_id); - - $user = auth()->user(); - - $id_empresa = $user->empresa->first()->id; - - - Supervisor::create([ - "id_usuario" => $request->agente_id, - "matricula" => $agenteData->matricula, - "nome" => $agenteData->nome, - "fila" => $request->fila, - "id_empresa" => $id_empresa, - "status" => "LIVRE", - "id_number_channel" => $request->channel + $pausa = Pausas::where("id", $request->pausa)->first(); + $updated = DB::table("supervisor as s")->where("s.id", $request->supervisor_id)->update([ + 'motivo_pausa' => strtoupper($pausa->motivo), + 'status' => "PAUSA", ]); - return redirect('supervisor'); - } - - public function destroy($id) - { - if (empty($id)) { - return redirect('supervisor'); + if(!$updated){ + return redirect()->back()->with('status', 'Erro ao pausar agente'); } - Supervisor::where('id', $id)->delete(); - - return redirect('supervisor')->with('status', 'deletado com sucesso'); + return redirect()->back()->with('status', 'Pausado com sucesso'); } - - - public function edit($id) + public function retirarPausaAgente(Request $request) { + $request->validate([ + 'supervisor_id' => ['required'], + ]); - if (empty($id)) { - return redirect('supervisor'); - } - - $filas = Filas::where('is_ativa', '=', true)->get(); - - $agentes = Agentes::where('status', '=', true)->get(); - - $numberChannels = numberChanel::all(); - - $userData = Supervisor::find($id); + $updated = DB::table("supervisor as s")->where("s.id", $request->supervisor_id)->update([ + 'motivo_pausa' => null, + 'status' => "LIVRE", + ]); + if(!$updated){ + return redirect()->back()->with('status', 'Erro ao retirar pausa do agente'); + } - return view('admin.editSupervisores', compact('userData', 'filas', 'agentes', 'numberChannels')); + return redirect()->back()->with('status', 'Pausa retirada com sucesso'); } - - - public function update(Request $request, $id) + public function pausarTodosAgentes(Request $request, $id) { - - - if (empty($id)) { - return redirect('supervisor'); + $fila = Filas::where("id", $id)->first(); + $pausa = Pausas::where("id", $request->pausa)->first(); + + $agentes = DB::table("supervisor as s") + ->where("s.fila", $fila->nome) + ->get(); + + DB::beginTransaction(); + + try { + foreach ($agentes as $agente) { + DB::table("supervisor as s") + ->where('s.id', $agente->id) + ->update([ + 'motivo_pausa' => strtoupper($pausa->motivo), + 'status' => "PAUSA", + ]); + } + + DB::commit(); + + return redirect()->back()->with('status', 'Todos os agentes foram colocados em pausa'); + } catch (\Throwable $th) { + DB::rollBack(); + dd($th->getMessage()); + return redirect('users')->with('status', 'Erro ao tentar pausar todos os agentes'); } - - - $request->validate([ - 'agente_id' => ['required'], - 'fila' => ['required'], - 'channel' => ['required'] - ]); - - if (empty($request->agente_id) || empty($request->fila) || empty($request->channel)) { - return redirect('supervisor'); - } - - - $agenteData = Agentes::find($request->agente_id); - - $user = auth()->user(); - - $id_empresa = $user->empresa->first()->id; - - Supervisor::where('id', $id) - ->update([ - "id_usuario" => $request->agente_id, - "matricula" => $agenteData->matricula, - "nome" => $agenteData->nome, - "fila" => $request->fila, - "id_empresa" => $id_empresa, - "id_number_channel" => $request->channel - ]); - - - return redirect('supervisor')->with('status', 'atualizado com sucesso'); } + } diff --git a/resources/views/admin/agentesLogados.blade.php b/resources/views/admin/agentesLogados.blade.php index d5cfbaf..9dfec3e 100644 --- a/resources/views/admin/agentesLogados.blade.php +++ b/resources/views/admin/agentesLogados.blade.php @@ -3,6 +3,11 @@