init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

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