223 lines
6.3 KiB
PHP
223 lines
6.3 KiB
PHP
<?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);
|
|
}
|
|
}
|