Browse Source

Update modal horario e horarios itens

Felipe
Felipe Fontana 10 months ago
parent
commit
be6ea95024
  1. 34
      app/Http/Controllers/Admin/HorariosController.php
  2. 102
      app/Http/Controllers/Admin/HorariosOptionController.php
  3. 2
      app/Models/Atendimentos.php
  4. 41
      app/Models/Horario.php
  5. 77
      app/Models/HorarioOption.php
  6. 1
      config/event.php
  7. 2
      public/js/views/horarios/atualizaHorarios.js
  8. 2
      public/js/views/horarios/montaSelect.js
  9. 88
      public/js/views/horariosOption/atualizaHorariosOptions.js
  10. 37
      public/js/views/horariosOption/montaSelect.js
  11. 13
      public/js/views/horariosOption/requestType.js
  12. 4
      resources/views/admin/cadastros/horarios.blade.php
  13. 102
      resources/views/admin/cadastros/horariosOption.blade.php
  14. 264
      resources/views/components/modal/edit/modalEditHorariosOptions.blade.php
  15. 159
      resources/views/components/modal/insert/modalHorariosOption.blade.php

34
app/Http/Controllers/Admin/HorariosController.php

@ -12,6 +12,7 @@ use App\Models\Horario;
use App\Models\Agentes;
use App\Models\Filas;
use App\Models\Redirect;
use App\Models\HorarioOption;
use Illuminate\Support\Facades\DB;
class HorariosController extends Controller
@ -20,7 +21,8 @@ class HorariosController extends Controller
protected Horario $horarioRepository,
protected Agentes $agenteRepository,
protected Filas $queueRepository,
protected Redirect $redirectRepository
protected Redirect $redirectRepository,
protected HorarioOption $horarioOptionRepository,
) {
}
@ -101,9 +103,13 @@ class HorariosController extends Controller
$status = $request->status === "on" ? true : false;
$this->horarioRepository->create($request->id_number, strtoupper($request->nome), $request->opcao_nao, $request->acao_nao, $status);
$created = $this->horarioRepository->create($request->id_number, strtoupper($request->nome), $request->opcao_nao, $request->acao_nao, $status);
return redirect()->back()->with('status', 'Cadastrado com sucesso');
if(!$created){
redirect()->back()->with('status', 'Erro ao tentar cadastrar horário');
}
return redirect()->back()->with('status', 'Cadastrado com sucesso!');
}
public function edit(Request $request)
@ -139,7 +145,6 @@ class HorariosController extends Controller
return response()->json($response);
}
public function update(Request $request)
{
$id = $request->segment(2);
@ -168,4 +173,25 @@ class HorariosController extends Controller
return redirect()->back()->with('status', 'Atualizado com sucesso');
}
public function destroy($horario_id)
{
if (!$horario_id) {
return redirect()->back();
}
$horariosOptions = $this->horarioOptionRepository->list(['id_horario' => $horario_id]);
if (count($horariosOptions) > 0) {
return redirect()->back()->with('status', 'É necessário deletar todos os subitens primeiro!');
}
$deleted = $this->horarioRepository->deletar($horario_id);
if(!$deleted){
return redirect()->back()->with('status', 'Erro ao tentar deletar horário');
}
return redirect()->back()->with('status', 'Deletado com sucesso!');
}
}

102
app/Http/Controllers/Admin/HorariosOptionController.php

@ -12,6 +12,7 @@ use App\Models\Types;
use App\Models\Redirect;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Gate;
class HorariosOptionController extends Controller
{
@ -29,7 +30,7 @@ class HorariosOptionController extends Controller
if (empty($id)) {
return redirect('horarios');
}
$options = $this->horariosOptionsRepository->list(["id_redirect" => $id]);
$options = $this->horariosOptionsRepository->list(["id_horario" => $id]);
$types = Types::all();
$id_horario = $id;
@ -75,22 +76,101 @@ class HorariosOptionController extends Controller
public function store(Request $request)
{
$user = auth()->user();
if(Gate::forUser($user)->denies('store_redirect')){
abort(404);
}
$request->validate([
'sequencia' => ['required'],
'type' => ['required'],
'destino' => ['required'],
'status' => ['required'],
'id_horario' => ['required'],
'horario_inicio' => ['required'],
'horario_fim' => ['required'],
'feriado' => ['required'],
'todos_dias_semana' => ['required'],
'todos_meses' => ['required'],
'todos_dias_mes' => ['required'],
]);
$id = $request->destino;
if ($request->type == 3) {
$id = $this->agenteRepository->get(["id" => $request->destino])->matricula;
$todos_dias_semana = $request->todos_dias_semana === "Sim" ? true : false;
$todos_meses = $request->todos_meses === "Sim" ? true : false;
$todos_dias_mes = $request->todos_dias_mes === "Sim" ? true : false;
$feriado = $request->feriado === "Sim" ? true : false;
$created = $this->horariosOptionsRepository->create($request->id_horario, $request->horario_inicio, $request->horario_fim, $todos_dias_semana, $request->dias_semana,
$request->dias_semana_fim, $todos_dias_mes, $request->dias_mes, $request->dias_mes_fim, $todos_meses, $request->meses, $request->meses_fim,
$request->type, $request->destino, $feriado);
if(!$created){
redirect()->back()->with('status', 'Erro ao tentar cadastrar regra');
}
return redirect()->back()->with('status', 'Cadastrado com sucesso');
}
public function destroy($id_horario, $id_horario_option)
{
if (!$id_horario_option) {
return redirect()->back();
}
$deleted = $this->horariosOptionsRepository->deletar($id_horario_option);
if(!$deleted){
redirect()->back()->with('status', 'Erro ao tentar deletar horário');
}
return redirect()->back()->with('status', 'Deletado com sucesso!');
}
public function edit(Request $request)
{
$id = $request->segment(4);
if (empty($id)) {
return response()->json(['data' => 'Parametro ID é obrigatório']);
}
$optionData = HorarioOption::find($id);
$types = Types::all();
$response = [
'data' => [
'status' => true,
'option_data' => $optionData,
'types' => $types,
],
];
return response()->json($response);
}
public function update(Request $request)
{
$id = $request->segment(4);
if (!$id) {
return redirect()->back();
}
$hidden = $request->status === "on" ? false : true;
$created = $this->horariosOptionsRepository->create($request->sequencia, $request->descricao, $request->id_redirect, $request->type, $id, $hidden, date("Y-m-d"));
$request->validate([
'horario_inicio' => ['required'],
'horario_fim' => ['required'],
'feriado' => ['required'],
'todos_dias_semana' => ['required'],
'todos_meses' => ['required'],
'todos_dias_mes' => ['required'],
]);
$todos_dias_semana = $request->todos_dias_semana === "Sim" ? true : false;
$todos_meses = $request->todos_meses === "Sim" ? true : false;
$todos_dias_mes = $request->todos_dias_mes === "Sim" ? true : false;
$feriado = $request->feriado === "Sim" ? true : false;
$created = $this->horariosOptionsRepository->atualizar($id, $request->horario_inicio, $request->horario_fim, $todos_dias_semana, $request->dias_semana,
$request->dias_semana_fim, $todos_dias_mes, $request->dias_mes, $request->dias_mes_fim, $todos_meses, $request->meses, $request->meses_fim,
$request->type, $request->destino, $feriado);
if(!$created){
redirect()->back()->with('status', 'Erro ao tentar cadastrar opção');
redirect()->back()->with('status', 'Erro ao tentar cadastrar regra');
}
return redirect()->back()->with('status', 'Cadastrado com sucesso');

2
app/Models/Atendimentos.php

@ -34,7 +34,7 @@ class Atendimentos extends Model
->join('protocolo_reg as r', "r.uniqueid", "=", "a.uniqueid")
->leftJoin('contatos as c', "c.contato", "=", "a.cliente_id")
->select(DB::raw('DISTINCT a.uniqueid'), DB::raw('COALESCE(c.nome, a.nome) AS nome_client'), 'u.nome as nome_atendente', 'r.protocolo as protocolo')
->whereIn('ea.evento', [config('event.CONF_EVENT_TIMERMINO_CLIENTE'), config('event.CONF_EVENT_TIMERMINO_AGENTE'), config('event.CONF_EVENT_TIMEOUT_CLIENTE'), config('event.CONF_EVENT_TIMEOUT_AGENTE')]);
->whereIn('ea.evento', [config('event.CONF_EVENT_TIMERMINO_CLIENTE'), config('event.CONF_EVENT_TIMERMINO_AGENTE'), config('event.CONF_EVENT_TIMEOUT_CLIENTE'), config('event.CONF_EVENT_TIMEOUT_AGENTE'), config('event.CONF_EVENT_ABANDON')]);
if (isset($params['id_empresa'])) {
$atendimentos->where('a.id_empresa', $params['id_empresa']);

41
app/Models/Horario.php

@ -50,12 +50,39 @@ class Horario extends Model
public function create(int $id_number, string $nome, string $opcao_nao, string $acao_nao, bool $status)
{
DB::table('horarios')->insert([
'id_number' => $id_number,
'nome' => strtoupper($nome),
'opcao_nao' => $opcao_nao,
'acao_nao' => $acao_nao,
'status' => $status
]);
DB::beginTransaction();
try {
DB::table('horarios')->insert([
'id_number' => $id_number,
'nome' => strtoupper($nome),
'opcao_nao' => $opcao_nao,
'acao_nao' => $acao_nao,
'status' => $status
]);
DB::commit();
return true;
} catch (\Throwable $th) {
DB::rollBack();
return false;
}
}
public function deletar($id_horario)
{
DB::beginTransaction();
try {
DB::table('horarios')->delete([
'id' => $id_horario
]);
DB::commit();
return true;
} catch (\Throwable $th) {
DB::rollBack();
return false;
}
}
}

77
app/Models/HorarioOption.php

@ -14,6 +14,7 @@ class HorarioOption extends Model
public $timestamps = false;
protected $fillable = [
'id_horario',
'horario_inicio',
'horario_fim',
'todos_dias_semana',
@ -43,18 +44,76 @@ class HorarioOption extends Model
return $options->orderBy('id', 'asc')->get();
}
public function create(string|int $sequence, string $description, string|int $id_redirect, string|int $id_type, string|int $code_id, bool $hide, string $data_reg)
public function create(int $id_horario, string $horario_inicio, string $horario_fim, bool $todos_dias_semana, ?string $semana, ?string $semana_fim, bool $todos_dias_mes,
?int $dias_mes, ?int $dias_mes_fim, bool $todos_mes, ?string $mes, ?string $mes_fim, string $opcao, string $acao, bool $feriado)
{
DB::beginTransaction();
try {
DB::table("horarios_itens")->insert([
'id_horario' => $id_horario,
'horario_inicio'=> $horario_inicio,
'horario_fim' => $horario_fim,
'todos_dias_semana' => $todos_dias_semana,
'semana' => $semana,
'semana_fim'=> $semana_fim,
'todos_dias_mes'=> $todos_dias_mes,
'dias_mes' => $dias_mes,
'dias_mes_fim' => $dias_mes_fim,
'todos_mes' => $todos_mes,
'mes' => $mes,
'mes_fim'=> $mes_fim,
'opcao' => $opcao,
'acao' => $acao,
'feriado' => $feriado
]);
DB::commit();
return true;
} catch (\Throwable $th) {
DB::rollBack();
return false;
}
}
public function deletar($id_horario_option)
{
DB::beginTransaction();
try {
DB::table('horarios_itens')->delete([
'id' => $id_horario_option
]);
DB::commit();
return true;
} catch (\Throwable $th) {
DB::rollBack();
return false;
}
}
public function atualizar(int $id, string $horario_inicio, string $horario_fim, bool $todos_dias_semana, ?string $semana, ?string $semana_fim, bool $todos_dias_mes,
?int $dias_mes, ?int $dias_mes_fim, bool $todos_mes, ?string $mes, ?string $mes_fim, string $opcao, string $acao, bool $feriado)
{
DB::beginTransaction();
try {
DB::table("redirect_option")->insert([
'sequence' => $sequence,
'description' => $description,
'id_redirect' => $id_redirect,
'id_type' => $id_type,
'code_id' => $code_id,
'hide' => $hide,
'data_reg' => $data_reg
DB::table("horarios_itens")->where("id", $id)->update([
'horario_inicio'=> $horario_inicio,
'horario_fim' => $horario_fim,
'todos_dias_semana' => $todos_dias_semana,
'semana' => $semana,
'semana_fim'=> $semana_fim,
'todos_dias_mes'=> $todos_dias_mes,
'dias_mes' => $dias_mes,
'dias_mes_fim' => $dias_mes_fim,
'todos_mes' => $todos_mes,
'mes' => $mes,
'mes_fim'=> $mes_fim,
'opcao' => $opcao,
'acao' => $acao,
'feriado' => $feriado
]);
DB::commit();

1
config/event.php

@ -19,4 +19,5 @@ return [
"CONF_EVENT_START" => "START",
"CONF_EVENT_ERRO_ATEND" => "LOST_CONNECTION",
"CONF_EVENT_SEND_HSM" => "SENDED",
"CONF_EVENT_ABANDON" => "ABANDON",
];

2
public/js/views/horarios/atualizaHorarios.js

@ -18,7 +18,7 @@ function atualizaHorarios(horario_id) {
<input type='radio' name='status' value='off'> <span class='mr-3 dark:text-gray-100'>Não</span>`
} else {
modal.querySelector(".container-radio").innerHTML =
`<input type='radio' name='status' value='off'> <span class='mr-3 dark:text-gray-100'>Sim</span>
`<input type='radio' name='status' value='on'> <span class='mr-3 dark:text-gray-100'>Sim</span>
<input type='radio' name='status' checked value='off'> <span class='mr-3 dark:text-gray-100'>Não</span>`;
}
let containerTypes = '';

2
public/js/views/horarios/montaSelect.js

@ -17,7 +17,7 @@ async function montaSelectDestino(id_type, modal, code_id = null) {
let selectElements = "";
if (code_id) {
data.forEach(element => {
let matriculaOrId = element.matricula ?? element.id;
let matriculaOrId = element.id;
if (matriculaOrId.toString() === code_id.toString()) {
selectElements +=
` <option value="${element.id}" selected>${element.name ?? element.nome}</option>`

88
public/js/views/horariosOption/atualizaHorariosOptions.js

@ -0,0 +1,88 @@
function atualizaHorariosOptions(horario_option_id) {
$.ajax({
type: "get",
url: `options/${horario_option_id}/edit`,
success: async function({
data
}) {
const option_data = data.option_data;
const types = data.types;
const modal = document.querySelector('.modal-edit');
modal.style.display = 'block';
modal.querySelector("input[name='horario_inicio']").value = option_data.horario_inicio;
modal.querySelector("input[name='horario_fim']").value = option_data.horario_fim;
var selectSemana = document.getElementById("dias_semana2");
var selectSemanaFim = document.getElementById("dias_semana_fim2");
var selectMes = document.getElementById("meses2");
var selectMesFim = document.getElementById("meses_fim2");
var selectDia = document.getElementById("dias_mes2");
var selectDiaFim = document.getElementById("dias_mes_fim2");
modal.querySelector('form').action = `options/${horario_option_id}`;
if (option_data.feriado) {
modal.querySelector("input[id='feriado_sim']").checked = true;
} else {
modal.querySelector("input[id='feriado_nao']").checked = true;
}
if (option_data.todos_mes) {
modal.querySelector("input[id='todos_mes']").checked = true;
selectMes.disabled = true;
selectMesFim.disabled = true;
selectMes.selectedIndex = -1;
selectMesFim.selectedIndex = -1;
} else {
modal.querySelector("input[id='todos_mes_nao']").checked = true;
selectMes.selectedIndex = option_data.mes - 1;
selectMesFim.selectedIndex = option_data.mes_fim - 1;
}
if (option_data.todos_dias_semana) {
modal.querySelector("input[id='todos_dias_semana']").checked = true;
selectSemana.disabled = true;
selectSemanaFim.disabled = true;
selectSemana.selectedIndex = -1;
selectSemanaFim.selectedIndex = -1;
} else {
modal.querySelector("input[id='todos_dias_semana_nao']").checked = true;
selectSemana.selectedIndex = option_data.semana - 1;
selectSemanaFim.selectedIndex = option_data.semana_fim - 1;
}
if (option_data.todos_dias_mes) {
modal.querySelector("input[id='todos_dias_mes']").checked = true;
selectDia.disabled = true;
selectDiaFim.disabled = true;
selectDia.selectedIndex = -1;
selectDiaFim.selectedIndex = -1;
} else {
modal.querySelector("input[id='todos_dias_mes_nao']").checked = true;
selectDia.selectedIndex = option_data.dias_mes - 1;
selectDiaFim.selectedIndex = option_data.dias_mes_fim - 1;
}
let containerTypes = '';
types.forEach(type => {
if (option_data.opcao == type.id) {
containerTypes +=
` <option value="${type.id}" selected>${type.name}</option>`
} else {
containerTypes +=
` <option value="${type.id}">${type.name}</option>`
}
});
modal.querySelector(".select-types").innerHTML = containerTypes;
montaSelectDestino(option_data.opcao, modal, option_data.acao);
}
});
}
document.querySelectorAll('.select-types').forEach(el => {
el.addEventListener('change', (e) => {
const select = e.target;
const modal = select.closest('.modal') ?? select.closest('.modal-edit');
const id_redirect = select.value;
montaSelectDestino(id_redirect, modal);
})
})

37
public/js/views/horariosOption/montaSelect.js

@ -0,0 +1,37 @@
async function montaSelectDestino(id_type, modal, code_id=null) {
const data = await requestType(id_type);
const selectDestino = modal.querySelector(".select-destino");
const inputDestino = modal.querySelector(".input-destino");
if (!data) {
selectDestino.style.display = 'none';
selectDestino.disabled = true;
inputDestino.disabled = false;
inputDestino.style.display = 'block';
return;
}
selectDestino.style.display = 'block';
selectDestino.disabled = false;
inputDestino.disabled = true;
inputDestino.style.display = 'none';
let selectElements = "";
if (code_id) {
data.forEach(element => {
let matriculaOrId = element.id;
if (matriculaOrId.toString() === code_id.toString()) {
selectElements +=
` <option value="${element.id}" selected>${element.name ?? element.nome}</option>`
} else {
selectElements +=
` <option value="${element.id}">${element.name ?? element.nome}</option>`
}
})
} else {
data.forEach(element => {
selectElements += `<option value="${element.id}">${element.name ?? element.nome}</option>`
});
}
selectDestino.innerHTML = selectElements;
}

13
public/js/views/horariosOption/requestType.js

@ -0,0 +1,13 @@
function requestType(id_type) {
return new Promise(function(resolve, reject) {
$.ajax({
type: "get",
dataType: 'json',
url: `options/${id_type}`,
success: function(response) {
const data = response.data.data;
resolve(data);
}
});
});
}

4
resources/views/admin/cadastros/horarios.blade.php

@ -57,7 +57,7 @@
@can('show_redirect_option')
<a
href="{{ route('horarios.options.index', ['horario' => $horario->id]) }}"
class="text-blue-500 hover:underline">Editar Opções</a>
class="text-blue-500 hover:underline">Editar Horários Disponíveis</a>
@endcan
</td>
<td class="p-3 text-sm font-bold flex-wrap w-32">
@ -68,7 +68,7 @@
@endcan
@can('destroy_redirect')
<form method="POST"
action="{{ route('redirects.destroy', ['redirect' => $horario->id]) }}"
action="{{ route('horarios.destroy', ['horario' => $horario->id]) }}"
class="flex-1 flex" title="deletar horário"
onclick="javascript: if(!confirm('Deseja deletar esses dados?')) return false;">
@csrf

102
resources/views/admin/cadastros/horariosOption.blade.php

@ -1,3 +1,25 @@
<?php
$tipos = [
1 => 'QUEUE',
2 => 'REDIRECT',
3 => 'AGENT',
4 => 'TEXT'
];
$semana = [
'' => '',
1 => 'Domingo',
2 => 'Segunda',
3 => 'Terça',
4 => 'Quarta',
5 => 'Quinta',
6 => 'Sexta',
7 => 'Sábado'
];
$meses = ['' => '', 1 => 'Janeiro', 2 => 'Fevereiro', 3 => 'Março', 4 => 'Abril', 5 => 'Maio', 6 => 'Junho', 7 => 'Julho', 8 => 'Agosto', 9 => 'Setembro', 10 => 'Outubro', 11 => 'Novembro', 12 => 'Dezembro'];
?>
<x-app-layout>
<div class="py-8 px-8">
<a href="{{ route('horarios.index') }}" style="margin-right: auto;"
@ -40,19 +62,19 @@
<tbody>
<tr class="bg-white dark:bg-gray-800 dark:border-gray-600 border-b-2">
<td></td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">Início</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">Fim</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">Todos</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">Inicio</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">Fim</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">Todos</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">Inicio</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">Fim</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">Todos</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">Inicio</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">Fim</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">Opção</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">Ação</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">Início</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">Fim</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">Todos</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">Inicio</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">Fim</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">Todos</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">Inicio</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">Fim</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">Todos</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">Inicio</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">Fim</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">Opção</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">Destino</td>
<td></td>
</tr>
</tbody>
@ -60,21 +82,38 @@
@foreach ($options as $option)
<tbody>
<tr class="bg-white dark:bg-gray-800 dark:border-gray-600 border-b-2">
<td>{{ $option->id }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">{{ $option->id }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">{{ $option->id }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">{{ $option->id }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">{{ $option->id }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">{{ $option->id }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">{{ $option->id }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">{{ $option->id }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">{{ $option->id }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">{{ $option->id }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">{{ $option->id }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">{{ $option->id }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">{{ $option->id }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border">{{ $option->id }}</td>
<td>{{ $option->id }}</td>
<td class="p-3 text-sm {{ $option->feriado == '1' ? 'text-green-500' : 'text-red-500' }} font-bold text-center">{{ $option->feriado == '1' ? 'SIM' : 'NÃO' }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">{{ $option->horario_inicio }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">{{ $option->horario_fim }}</td>
<td class="p-3 text-sm {{ $option->todos_dias_semana == '1' ? 'text-green-500' : 'text-red-500' }} font-bold border text-center">{{ $option->todos_dias_semana == '1' ? 'SIM' : 'NÃO' }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">{{ $semana[$option->semana] }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">{{ $semana[$option->semana_fim] }}</td>
<td class="p-3 text-sm {{ $option->todos_dias_mes == '1' ? 'text-green-500' : 'text-red-500' }} font-bold border text-center">{{ $option->todos_dias_mes == '1' ? 'SIM' : 'NÃO' }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">{{ $option->dias_mes }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">{{ $option->dias_mes_fim }}</td>
<td class="p-3 text-sm {{ $option->todos_mes == '1' ? 'text-green-500' : 'text-red-500' }} font-bold border text-center">{{ $option->todos_mes == '1' ? 'SIM' : 'NÃO' }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">{{ $meses[$option->mes] }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">{{ $meses[$option->mes_fim] }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 uppercase border text-center">{{ $tipos[$option->opcao] }}</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100 border text-center">{{ $option->acao }}</td>
<td class="p-3 text-sm font-bold flex items-center gap-2 flex-wrap">
<button class="bg-blue-600 text-white rounded flex-1 text-xl text-center py-2 px-3 cursor-pointer title="editar horário"
onclick="atualizaHorariosOptions( {{ $option->id }})">
<i class="fas fa-edit"></i>
</button>
@can('destroy_redirect')
<form method="POST"
action="{{ route('horarios.options.destroy', ['horario' => $id_horario, 'option' => $option->id]) }}"
class="flex-1 flex" title="deletar horário"
onclick="javascript: if(!confirm('Deseja deletar esses dados?')) return false;">
@csrf
@method('delete')
<button class="bg-red-600 text-white rounded flex-1 text-xl text-center py-2 px-3 cursor-pointer">
<i class="fas fa-trash"></i>
</button>
</form>
@endcan
</td>
</tr>
</tbody>
@endforeach
@ -85,10 +124,11 @@
</div>
<x-modal.insert.modalHorariosOption :id_horario="$id_horario" :types="$types"></x-modalHorarioOption>
<x-modal.edit.modalEditHorariosOptions :types="$types"></x-modalEditHorariosOptions>
<script src="{{ asset('js/views/redirectOption/atualizaRedirectOption.js') }}"></script>
<script src="{{ asset('js/views/redirectOption/montaSelect.js') }}"></script>
<script src="{{ asset('js/views/redirectOption/requestType.js') }}"></script>
<script src="{{ asset('js/views/horariosOption/atualizaHorariosOptions.js') }}"></script>
<script src="{{ asset('js/views/horariosOption/montaSelect.js') }}"></script>
<script src="{{ asset('js/views/horariosOption/requestType.js') }}"></script>
<script>
const modal = document.querySelector(".modal");

264
resources/views/components/modal/edit/modalEditHorariosOptions.blade.php

@ -0,0 +1,264 @@
<?php
$tipos = [
1 => 'QUEUE',
2 => 'REDIRECT',
3 => 'AGENT',
4 => 'TEXT'
];
$semana = [
'' => '',
1 => 'Domingo',
2 => 'Segunda',
3 => 'Terça',
4 => 'Quarta',
5 => 'Quinta',
6 => 'Sexta',
7 => 'Sábado'
];
$meses = ['' => '', 1 => 'Janeiro', 2 => 'Fevereiro', 3 => 'Março', 4 => 'Abril', 5 => 'Maio', 6 => 'Junho', 7 => 'Julho', 8 => 'Agosto', 9 => 'Setembro', 10 => 'Outubro', 11 => 'Novembro', 12 => 'Dezembro'];
?>
<style>
.custom-modal-width {
max-width: 60%;
top: 50%;
left: 40%;
transform: translate(-50%, -50%);
display: flex
}
</style>
@props(['types'])
<!-- Main modal -->
<div class="fixed z-50 hidden p-4 bg-gray-900 bg-opacity-60 h-full w-full modal-edit">
<div class="custom-modal-width absolute md:h-auto">
<!-- Modal content -->
<form method="POST" action=""
class="relative bg-white rounded-lg shadow dark:bg-gray-700">
@csrf
@method("PUT")
<!-- Modal header -->
<div class="flex items-start justify-between border-b rounded-t dark:border-gray-600 px-3 py-4">
<h3 class="text-xl font-semibold text-gray-900 dark:text-white pl-3">
Editar
</h3>
<button type="button"
class="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-xl ml-auto inline-flex items-center dark:hover:bg-gray-600 dark:hover:text-white"
@click="modal = false" onclick="fecharModal()">
<i class="fas fa-times"></i>
</button>
</div>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr class="bg-white dark:bg-gray-700 dark:border-gray-900 border">
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top">
<fieldset>
<div class="flex flex-col gap-2">
<label class="dark:text-gray-100">Selecione o tipo: </label>
<select class="w-48 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase select-types" name="type">
</select>
</div>
<div class="flex flex-col gap-2">
<label class="dark:text-gray-100">Selecione o destino: </label>
<select class="w-48 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase select-destino" name="destino"></select>
<input type="text" class="w-48 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 input-destino" placeholder="Digite o texto destino: " name="destino">
</div>
</fieldset>
</td>
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top">
<fieldset>
<legend class="dark:text-gray-100">Horário: </legend>
Início
<input class="dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 input-inicio" name="horario_inicio" type="text" id="horario_inicio" size="5" maxlength="5" value="08:00"/>
Fim
<input class="dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 input-fim" name="horario_fim" type="text" id="horario_fim" value="17:59" size="5" maxlength="5"/>
</fieldset>
</td>
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top">
<fieldset>
<legend class="dark:text-gray-100">Feriado: </legend>
<span>
Sim<input name="feriado" type="radio" id="feriado_sim" value="Sim"/>
Não<input name="feriado" type="radio" id="feriado_nao" value="Nao"/>
</span>
</fieldset>
</td>
</tr>
</table>
<tr class="bg-white dark:bg-gray-700">
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr class="bg-white dark:bg-gray-700 dark:border-gray-900 border">
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top">
<fieldset>
<label class="dark:text-gray-100">Dia da Semana: </label>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr class="bg-white dark:bg-gray-700">
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" colspan="2">
<input name="todos_dias_semana" type="radio" id="todos_dias_semana" value="Sim" onclick="desabilitaCombo('dias_semana2','dias_semana_fim2')"/>
Todos
<label><input name="todos_dias_semana" type="radio" id="todos_dias_semana_nao" value="Nao" onclick="habilitaCombo('dias_semana2','dias_semana_fim2')"/>Intervalo </label>
</td>
</tr>
<tr class="bg-white dark:bg-gray-700">
<td class="p-3 text-sm text-gray-780 dark:text-gray-100">
<fieldset>
<label class="dark:text-gray-100">Inicio: </label>
<select class="w-45 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="dias_semana" size="1" id="dias_semana2">
@for ($i = 1; $i <= 7; $i++)
<option value="{{ $i }}">{{ $semana[$i] }}</option>
@endfor
</select>
</fieldset>
</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100" width="50%">
<fieldset>
<label class="dark:text-gray-100">Fim: </label>
<select class="w-45 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="dias_semana_fim" size="1" id="dias_semana_fim2">
@for ($i = 1; $i <= 7; $i++)
<option value="{{ $i }}">{{ $semana[$i] }}</option>
@endfor
</select>
</fieldset>
</td>
</tr>
</table>
</fieldset>
</td>
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top">
<fieldset>
<label class="dark:text-gray-100">Meses: </label>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr class="bg-white dark:bg-gray-700">
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" colspan="2">
<input name="todos_meses" type="radio" id="todos_mes" value="Sim" onclick="desabilitaCombo('meses2','meses_fim2')"/>
Todos
<label><input name="todos_meses" type="radio" id="todos_mes_nao" value="Nao" onclick="habilitaCombo('meses2','meses_fim2')"/>Intervalo </label>
</td>
</tr>
<tr class="bg-white dark:bg-gray-700">
<td class="p-3 text-sm text-gray-780 dark:text-gray-100">
<fieldset>
<label class="dark:text-gray-100">Inicio: </label>
<select class="w-10 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="meses" size="1" id="meses2">
@for ($i = 1; $i <= 12; $i++)
<option value="{{ $i }}">{{ $meses[$i] }}</option>
@endfor
</select>
</fieldset>
</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100" width="50%">
<fieldset>
<label class="dark:text-gray-100">Fim: </label>
<select class="w-10 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="meses_fim" size="1" id="meses_fim2">
@for ($i = 1; $i <= 12; $i++)
<option value="{{ $i }}">{{ $meses[$i] }}</option>
@endfor
</select>
</fieldset>
</td>
</tr>
</table>
</fieldset>
</td>
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top">
<fieldset>
<label class="dark:text-gray-100">Dia do Mês: </label>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr class="bg-white dark:bg-gray-700">
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" colspan="2">
<input name="todos_dias_mes" type="radio" id="todos_dias_mes" value="Sim" onclick="desabilitaCombo('dias_mes2','dias_mes_fim2')"/>
Todos
<label><input id="todos_dias_mes_nao" name="todos_dias_mes" type="radio" value="Nao" onclick="habilitaCombo('dias_mes2','dias_mes_fim2')"/>Intervalo </label>
</td>
</tr>
<tr class="bg-white dark:bg-gray-700">
<td class="p-3 text-sm text-gray-780 dark:text-gray-100">
<fieldset>
<legend class="dark:text-gray-100">Inicio: </legend>
<select class="w-10 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="dias_mes" size="1" id="dias_mes2">
@for ($i = 1; $i <= 31; $i++)
<option value="{{ $i }}">{{ $i }}</option>
@endfor
</select>
</fieldset>
</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">
<fieldset>
<legend class="dark:text-gray-100">Fim: </legend>
<select class="w-10 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="dias_mes_fim" size="1" id="dias_mes_fim2">
@for ($i = 1; $i <= 31; $i++)
<option value="{{ $i }}">{{ $i }}</option>
@endfor
</select>
</fieldset>
</td>
</tr>
</table>
</fieldset>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Modal footer -->
<div class="flex items-center p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
<button type="submit" class="bg-blue-500 hover:bg-opacity-90 transition-all text-white py-2 px-6 rounded text-lg btn-sub">
Editar
</button>
</div>
</form>
</div>
</div>
<script>
function fecharModal() {
$('.modal-edit').hide();
$('.modal-edit').find('input.sequence').removeClass('border-red-500 border-2');
$('.modal-edit').find('.text-problem').addClass('hidden');
}
function habilitaCombo(inicio, fim) {
var selectInicio = document.getElementById(inicio);
var selectFim = document.getElementById(fim);
selectInicio.disabled = false;
selectFim.disabled = false;
}
function desabilitaCombo(inicio, fim) {
var selectInicio = document.getElementById(inicio);
var selectFim = document.getElementById(fim);
selectInicio.disabled = true;
selectFim.disabled = true;
}
document.addEventListener("DOMContentLoaded", function () {
// Função para formatar os horários no formato hh:mm
function formatarHorario(input) {
// Remove caracteres não numéricos
var cleanedInput = input.replace(/[^\d]/g, "");
// Adiciona os dois pontos no formato hh:mm
var formattedInput = cleanedInput.replace(/(\d{2})(\d{2})/, "$1:$2");
return formattedInput;
}
// Adiciona ouvinte de evento para os campos de início e fim
var inputInicio = document.getElementById("horario_inicio");
var inputFim = document.getElementById("horario_fim");
inputInicio.addEventListener("input", function () {
inputInicio.value = formatarHorario(inputInicio.value);
});
inputFim.addEventListener("input", function () {
inputFim.value = formatarHorario(inputFim.value);
});
});
</script>

159
resources/views/components/modal/insert/modalHorariosOption.blade.php

@ -12,9 +12,18 @@
$meses = [1 => 'Janeiro', 2 => 'Fevereiro', 3 => 'Março', 4 => 'Abril', 5 => 'Maio', 6 => 'Junho', 7 => 'Julho', 8 => 'Agosto', 9 => 'Setembro', 10 => 'Outubro', 11 => 'Novembro', 12 => 'Dezembro'];
?>
<style>
.custom-modal-width {
max-width: 60%;
top: 50%;
left: 40%;
transform: translate(-50%, -50%);
display: flex
}
</style>
<!-- Main modal -->
<div class="flex z-50 hidden p-4 bg-gray-900 bg-opacity-60 h-full w-full modal" :class="{ 'block': modal, 'hidden': !modal }">
<div class="fixed w-full max-w-2xl md:h-auto top-[50%] left-[50%] translate-x-[-50%] translate-y-[-50%]">
<div class="fixed z-50 hidden p-4 bg-gray-900 bg-opacity-60 h-full w-full modal" :class="{ 'block': modal, 'hidden': !modal }">
<div class="custom-modal-width absolute md:h-auto">
<!-- Modal content -->
<form method="POST" action="{{ route('horarios.options.store', ['horario' => $id_horario]) }}"
class="relative bg-white rounded-lg shadow dark:bg-gray-700 id="formRedirectOption">
@ -30,10 +39,28 @@
<i class="fas fa-times"></i>
</button>
</div>
<input hidden type="text" name="id_horario" value="{{$id_horario}}">
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr class="bg-white dark:bg-gray-700 dark:border-gray-900 border">
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="50%" valign="top">
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top">
<fieldset>
<div class="flex flex-col gap-2">
<label class="dark:text-gray-100">Selecione o tipo: </label>
<select class="w-48 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase select-types" name="type">
@foreach ($types as $type)
<option value="{{ $type->id }}" class="uppercase">{{ $type->name }}</option>
@endforeach
</select>
</div>
<div class="flex flex-col gap-2">
<label class="dark:text-gray-100">Selecione o destino: </label>
<select class="w-48 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase select-destino" name="destino"></select>
<input type="text" class="w-48 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 input-destino" placeholder="Digite o texto destino: " name="destino">
</div>
</fieldset>
</td>
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top">
<fieldset>
<legend class="dark:text-gray-100">Horário: </legend>
Início
@ -42,7 +69,7 @@
<input class="dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 input-fim" name="horario_fim" type="text" id="horario_fim" value="17:59" size="5" maxlength="5"/>
</fieldset>
</td>
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="50%" valign="top">
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top">
<fieldset>
<legend class="dark:text-gray-100">Feriado: </legend>
<span>
@ -64,9 +91,9 @@
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr class="bg-white dark:bg-gray-700">
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" colspan="2">
<input name="todos_dias_semana" type="radio" id="todos_dias_semana" value="Sim" checked/>
<input name="todos_dias_semana" type="radio" id="todos_dias_semana" value="Sim" checked onclick="desabilitaCombo('dias_semana','dias_semana_fim')"/>
Todos
<label><input name="todos_dias_semana" type="radio" value="Não"/>Intervalo </label>
<label><input name="todos_dias_semana" type="radio" value="Nao" onclick="habilitaCombo('dias_semana','dias_semana_fim')"/>Intervalo </label>
</td>
</tr>
<tr class="bg-white dark:bg-gray-700">
@ -96,19 +123,55 @@
</td>
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top">
<fieldset>
<label class="dark:text-gray-100">Dia do Mês: </label>
<label class="dark:text-gray-100">Meses: </label>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr class="bg-white dark:bg-gray-700">
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" colspan="2">
<input name="todos_dias_mes" type="radio" id="todos_dias_mes" value="Sim" checked/>
<input name="todos_meses" type="radio" id="todos_dias_mes" value="Sim" checked onclick="desabilitaCombo('meses','meses_fim')"/>
Todos
<label><input name="todos_dias_mes" type="radio" value="Não"/>Intervalo </label>
<label><input name="todos_meses" type="radio" value="Nao" onclick="habilitaCombo('meses','meses_fim')"/>Intervalo </label>
</td>
</tr>
<tr class="bg-white dark:bg-gray-700">
<td class="p-3 text-sm text-gray-780 dark:text-gray-100">
<fieldset>
<label class="dark:text-gray-100">Inicio: </label>
<select class="w-10 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="meses" size="1" id="meses" disabled="disabled">
@for ($i = 1; $i <= 12; $i++)
<option value="{{ $i }}">{{ $meses[$i] }}</option>
@endfor
</select>
</fieldset>
</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100" width="50%">
<fieldset>
<label class="dark:text-gray-100">Fim: </label>
<select class="w-10 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="meses_fim" size="1" id="meses_fim" disabled="disabled">
@for ($i = 1; $i <= 12; $i++)
<option value="{{ $i }}">{{ $meses[$i] }}</option>
@endfor
</select>
</fieldset>
</td>
</tr>
</table>
</fieldset>
</td>
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" width="33%" valign="top">
<fieldset>
<label class="dark:text-gray-100">Dia do Mês: </label>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr class="bg-white dark:bg-gray-700">
<td class="p-3 text-sm text-gray-800 dark:text-gray-100" colspan="2">
<input name="todos_dias_mes" type="radio" id="todos_dias_mes" value="Sim" checked onclick="desabilitaCombo('dias_mes','dias_mes_fim')"/>
Todos
<label><input id="intervalo_dias_mes" name="todos_dias_mes" type="radio" value="Nao" onclick="habilitaCombo('dias_mes','dias_mes_fim')"/>Intervalo </label>
</td>
</tr>
<tr class="bg-white dark:bg-gray-700">
<td class="p-3 text-sm text-gray-780 dark:text-gray-100">
<fieldset>
<legend class="dark:text-gray-100">Inicio: </legend>
<select class="w-10 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="dias_mes" size="1" id="dias_mes" disabled="disabled">
@for ($i = 1; $i <= 31; $i++)
<option value="{{ $i }}">{{ $i }}</option>
@ -116,9 +179,9 @@
</select>
</fieldset>
</td>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100" width="50%">
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">
<fieldset>
<label class="dark:text-gray-100">Fim: </label>
<legend class="dark:text-gray-100">Fim: </legend>
<select class="w-10 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase" name="dias_mes_fim" size="1" id="dias_mes_fim" disabled="disabled">
@for ($i = 1; $i <= 31; $i++)
<option value="{{ $i }}">{{ $i }}</option>
@ -134,37 +197,6 @@
</table>
</td>
</tr>
<tr>
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr class="bg-white dark:bg-gray-700 dark:border-gray-900 border">
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">
<table cellpadding="0" cellspacing="0" border="0">
<tr class="bg-white dark:bg-gray-700 dark:border-gray-900">
<td class="p-3 text-sm text-gray-700 dark:text-gray-100">
<fieldset>
<div class="flex flex-col gap-2">
<label class="dark:text-gray-100">Selecione o tipo: </label>
<select class="w-48 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase select-types" name="type">
@foreach ($types as $type)
<option value="{{ $type->id }}" class="uppercase">{{ $type->name }}</option>
@endforeach
</select>
</div>
<div class="flex flex-col gap-2">
<label class="dark:text-gray-100">Selecione o destino: </label>
<select class="w-48 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 uppercase select-destino" name="destino"></select>
<input type="text" class="w-48 dark:bg-gray-800 placeholder:text-gray-800 dark:placeholder:text-gray-100 dark:text-gray-100 input-destino" placeholder="Digite o texto destino: " name="destino">
</div>
</fieldset>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Modal footer -->
<div class="flex items-center p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
@ -175,3 +207,46 @@
</form>
</div>
</div>
<script>
function habilitaCombo(inicio, fim) {
var selectInicio = document.getElementById(inicio);
var selectFim = document.getElementById(fim);
selectInicio.disabled = false;
selectFim.disabled = false;
}
function desabilitaCombo(inicio, fim) {
var selectInicio = document.getElementById(inicio);
var selectFim = document.getElementById(fim);
selectInicio.disabled = true;
selectFim.disabled = true;
}
document.addEventListener("DOMContentLoaded", function () {
// Função para formatar os horários no formato hh:mm
function formatarHorario(input) {
// Remove caracteres não numéricos
var cleanedInput = input.replace(/[^\d]/g, "");
// Adiciona os dois pontos no formato hh:mm
var formattedInput = cleanedInput.replace(/(\d{2})(\d{2})/, "$1:$2");
return formattedInput;
}
// Adiciona ouvinte de evento para os campos de início e fim
var inputInicio = document.getElementById("horario_inicio");
var inputFim = document.getElementById("horario_fim");
inputInicio.addEventListener("input", function () {
inputInicio.value = formatarHorario(inputInicio.value);
});
inputFim.addEventListener("input", function () {
inputFim.value = formatarHorario(inputFim.value);
});
});
</script>

Loading…
Cancel
Save