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); } }