select([ 'periodo_contabil.id', 'periodo_contabil.inicio', 'periodo_contabil.fim', ]) ->orderBy('periodo_contabil.inicio') ->orderBy('periodo_contabil.fim') ->get(); } public static function create() { return [ 'model' => [ 'periodo_contabil' => ['start' => null, 'end' => null], ], ]; } public static function store($request) { self::validate($request); return PeriodoContabil::create(self::getPeriodoContabilData($request))->fresh(); } public static function show($id) { return self::getPeriodoContabilModel($id); } private static function getPeriodoContabilData($request) { return [ 'inicio' => $request->inicio, 'fim' => $request->fim, ]; } public static function destroy($id) { self::getPeriodoContabilModel($id)->delete(); } public static function datatable() { return DB::table('web_service_almoxarifado_cliente_periodo_contabil AS periodo_contabil') ->select([ 'periodo_contabil.id', DB::raw("DATE_FORMAT(periodo_contabil.inicio, '%d/%m/%Y') AS inicio"), DB::raw("DATE_FORMAT(periodo_contabil.fim, '%d/%m/%Y') AS fim"), ]); } private static function validate($request) { $request->validate([ 'inicio' => [ 'required', 'date_format:Y-m-d', 'before_or_equal:fim', ], 'fim' => [ 'required', 'date_format:Y-m-d', 'after_or_equal:inicio', ], ]); $inicio = Carbon::create($request->inicio); $fim = Carbon::create($request->fim); if ($inicio->diff($fim)->days > self::LIMITE_DIAS_PERIODO) { throw new InvalidDaysLimitException(); } $periodoContabilConflitante = PeriodoContabil::whereBetween('inicio', [$request->inicio, $request->fim]) ->orWhereBetween('fim', [$request->inicio, $request->fim]) ->exists(); if ($periodoContabilConflitante) { throw new ConflictException(); } } private static function getPeriodoContabilModel($id) { $periodoContabil = PeriodoContabil::find($id); if (is_null($periodoContabil)) { throw new PeriodoContabilNotFoundException(); } return $periodoContabil; } }