This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\WebService\Almoxarifado\Cliente;
|
||||
|
||||
use App\Exceptions\WebService\Almoxarifado\Cliente\PeriodoContabil\ConflictException;
|
||||
use App\Exceptions\WebService\Almoxarifado\Cliente\PeriodoContabil\InvalidDaysLimitException;
|
||||
use App\Exceptions\WebService\Almoxarifado\Cliente\PeriodoContabil\PeriodoContabilNotFoundException;
|
||||
use App\Models\WebService\Almoxarifado\Cliente\PeriodoContabil;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class PeriodoContabilService extends Service
|
||||
{
|
||||
public const LIMITE_DIAS_PERIODO = 31;
|
||||
|
||||
public static function index()
|
||||
{
|
||||
return DB::table('web_service_almoxarifado_cliente_periodo_contabil AS periodo_contabil')
|
||||
->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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user