This commit is contained in:
222
api/app/Services/Cadastro/Feriado/FeriadoService.php
Normal file
222
api/app/Services/Cadastro/Feriado/FeriadoService.php
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user