init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,222 @@
<?php
namespace App\Services\Cadastro\Feriado;
use App\Models\Cadastro\Feriado\Feriado;
use App\Services\Service;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
class FeriadoService extends Service
{
public static function datatable()
{
$feriados = DB::table('cadastro_feriado')
->select(
'cadastro_feriado.id',
'cadastro_feriado.dia',
'cadastro_feriado.ano',
'cadastro_feriado.observacao',
'cadastro_feriado_tipo.descricao as tipo_descricao',
DB::raw('(
CASE WHEN cadastro_feriado.mes = 1 THEN "JANEIRO"
WHEN cadastro_feriado.mes = 2 THEN "FEVEREIRO"
WHEN cadastro_feriado.mes = 3 THEN "MARÇO"
WHEN cadastro_feriado.mes = 4 THEN "ABRIL"
WHEN cadastro_feriado.mes = 5 THEN "MAIO"
WHEN cadastro_feriado.mes = 6 THEN "JUNHO"
WHEN cadastro_feriado.mes = 7 THEN "JULHO"
WHEN cadastro_feriado.mes = 8 THEN "AGOSTO"
WHEN cadastro_feriado.mes = 9 THEN "SETEMBRO"
WHEN cadastro_feriado.mes = 10 THEN "OUTUBRO"
WHEN cadastro_feriado.mes = 11 THEN "NOVEMBRO"
WHEN cadastro_feriado.mes = 12 THEN "DEZEMBRO"
END
) AS mes')
)
->leftJoin(
'cadastro_feriado_tipo',
'cadastro_feriado_tipo.id',
'cadastro_feriado.tipo_id'
)
->whereNull('cadastro_feriado.deleted_at');
$order = request()->get("order");
if ($order) {
if ($order[0]["columnName"] == "data") {
$feriados->orderBy("cadastro_feriado.data", $order[0]["dir"]);
}
}
return $feriados;
}
public static function create()
{
$feriado = new Feriado;
$feriado->fill(array_fill_keys($feriado->getFillable(), null));
return [
'form' => [
'tipos' => self::getTipos(),
'modulos' => self::getModulos(),
],
'model' => [
'mes' => $feriado->mes,
'dia' => $feriado->dia,
'ano' => $feriado->ano,
'tipo_id' => $feriado->tipo_id,
'observacao' => $feriado->observacao,
'modulos' => [],
]
];
}
public static function getTipos()
{
return DB::table('cadastro_feriado_tipo')
->select(
'id',
'descricao'
)
->orderBy('descricao')
->get();
}
public static function getModulos()
{
return DB::table('administracao_modulo')
->select(
'id',
'nome'
)
->orderBy('nome')
->get();
}
public static function store(Request $request)
{
self::validate($request);
$feriado = new Feriado;
DB::transaction(function () use ($request, $feriado) {
if ($request['ano']) {
$dados = $request->all();
$dados['data'] = $dados['ano'] . '-' . $dados['mes'] . '-' . $dados['dia'];
$feriado = Feriado::create($dados);
$feriado->modulos()->attach($request['modulos']);
} else {
$currentYear = date('Y');
$futureLimit = $currentYear + 10;
for ($year = $currentYear; $year <= $futureLimit; $year++) {
$dados = $request->all();
$dados['ano'] = $year;
$dados['data'] = $dados['ano'] . '-' . $dados['mes'] . '-' . $dados['dia'];
$feriado = Feriado::create($dados);
$feriado->modulos()->attach($request['modulos']);
}
}
});
return $feriado;
}
public static function edit($id)
{
$feriado = Feriado::findOrFail($id);
return [
'form' => [
'tipos' => self::getTipos(),
'modulos' => self::getModulos(),
],
'model' => [
'ano' => $feriado->ano,
'mes' => $feriado->mes,
'dia' => $feriado->dia,
'tipo_id' => $feriado->tipo_id,
'observacao' => $feriado->observacao,
'modulos' => $feriado->modulos->pluck('id'),
]
];
}
public static function update($request, $id)
{
self::validate($request);
$feriado = Feriado::findOrFail($id);
DB::transaction(function () use ($request, $feriado) {
$feriado->update($request->all());
$feriado->modulos()->sync($request['modulos']);
});
return $feriado;
}
public static function destroy($id)
{
Feriado::findOrFail($id)->delete();
return null;
}
private static function validate($request)
{
$validations = [
'dia' => [
'required',
'integer',
Rule::unique('\App\Models\Cadastro\Feriado\Feriado')
->where(function ($query) use ($request) {
return $query
->where('id', '<>', $request->route('feriado') ?? null)
->where('dia', $request->dia)
->where('mes', $request->mes)
->where('ano', $request->ano)
->whereNull('deleted_at');
}),
],
'observacao' => [
'string',
'required',
'max:500',
],
'tipo_id' => [
'required',
'integer',
],
'modulos' => [
'nullable',
'array',
],
];
$messages = [
'dia.unique' => 'Feriado ou ponto facultativo já foi inserido anteriormente para data informada.',
'observacao' => 'Mensagem é obrigatória.'
];
return $request->validate($validations, $messages);
}
}