This commit is contained in:
@@ -0,0 +1,268 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\WebService\Almoxarifado\Cliente;
|
||||
|
||||
use App\Exceptions\WebService\Almoxarifado\Cliente\Unidade\CannotDeleteUnidadeException;
|
||||
use App\Exceptions\WebService\Almoxarifado\Cliente\Unidade\UnidadeNotFoundException;
|
||||
use App\Models\Cadastro\Estabelecimento\CentroCusto as CadastroCentroCusto;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade as CadastroUnidade;
|
||||
use App\Models\WebService\Almoxarifado\Cliente\Unidade;
|
||||
use App\Services\Service;
|
||||
use App\Utils\DataUtil;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class UnidadeService extends Service
|
||||
{
|
||||
public static function list($request)
|
||||
{
|
||||
switch ($request->listar) {
|
||||
|
||||
case 'infraestruturas': {
|
||||
|
||||
return self::getInfraestruturas($request->unidade_id);
|
||||
}
|
||||
case 'centros-custo': {
|
||||
|
||||
return self::getCentrosCusto($request->infraestrutura_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function index($request)
|
||||
{
|
||||
self::validateIndex($request);
|
||||
|
||||
$unidades = DB::table('web_service_almoxarifado_cliente_unidade AS unidade')
|
||||
->when(DataUtil::isStringBoolean($request->query('is_almoxarifado')), fn ($q) => $q
|
||||
->where(
|
||||
'unidade.is_almoxarifado',
|
||||
DataUtil::getBooleanValueFromStringBoolean($request->query('is_almoxarifado'))
|
||||
)
|
||||
)
|
||||
->select([
|
||||
'unidade.id',
|
||||
'unidade.conectasus_centro_custo_id',
|
||||
'unidade.nome',
|
||||
'unidade.cnes',
|
||||
'unidade.is_almoxarifado',
|
||||
])
|
||||
->orderBy('unidade.nome')
|
||||
->get();
|
||||
|
||||
$unidades->each(function ($unidade) {
|
||||
|
||||
$unidade->is_almoxarifado = (bool) $unidade->is_almoxarifado;
|
||||
});
|
||||
|
||||
return $unidades;
|
||||
}
|
||||
|
||||
private static function validateIndex($request)
|
||||
{
|
||||
$request->validate([
|
||||
'is_almoxarifado' => [
|
||||
'string',
|
||||
Rule::in('true', 'false'),
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => [
|
||||
'conectasus_unidade_id' => null,
|
||||
'conectasus_infraestrutura_id' => null,
|
||||
'conectasus_centro_custo_id' => null,
|
||||
'nome' => null,
|
||||
'cnes' => null,
|
||||
'is_almoxarifado' => false,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function store($request)
|
||||
{
|
||||
self::validate($request);
|
||||
|
||||
return Unidade::create(self::getUnidadeData($request))->fresh();
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
return self::getUnidadeModel($id);
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$unidade = self::getUnidadeModel($id);
|
||||
|
||||
return [
|
||||
'form' => self::getFormData($unidade),
|
||||
'model' => [
|
||||
'conectasus_unidade_id' => $unidade->conectasusCentroCusto->infraestrutura->unidade_id ?? null,
|
||||
'conectasus_infraestrutura_id' => $unidade->conectasusCentroCusto->infraestrutura_id ?? null,
|
||||
'conectasus_centro_custo_id' => $unidade->conectasus_centro_custo_id,
|
||||
'nome' => $unidade->nome,
|
||||
'cnes' => $unidade->cnes,
|
||||
'is_almoxarifado' => $unidade->is_almoxarifado,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData($unidade = null)
|
||||
{
|
||||
$conectaSusInfraestruturas = [];
|
||||
$conectaSusCentrosCusto = [];
|
||||
|
||||
if (isset($unidade->conectasus_centro_custo_id)) {
|
||||
|
||||
$conectaSusInfraestruturas = self::getInfraestruturas(
|
||||
$unidade->conectasusCentroCusto->infraestrutura->unidade_id
|
||||
);
|
||||
|
||||
$conectaSusCentrosCusto = self::getCentrosCusto($unidade->conectasusCentroCusto->infraestrutura_id);
|
||||
}
|
||||
|
||||
return [
|
||||
'conectasus_unidades' => CadastroUnidade::orderBy('nome_fantasia')->get(['id', 'nome_fantasia']),
|
||||
'conectasus_infraestruturas' => $conectaSusInfraestruturas,
|
||||
'conectasus_centros_custo' => $conectaSusCentrosCusto,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getInfraestruturas($unidadeId)
|
||||
{
|
||||
return DB::table('cadastro_infraestrutura AS infraestrutura')
|
||||
->join('cadastro_unidade AS unidade', 'unidade.id', 'infraestrutura.unidade_id')
|
||||
->whereNull('infraestrutura.deleted_at')
|
||||
->where('infraestrutura.unidade_id', $unidadeId)
|
||||
->orderBy('infraestrutura.nome')
|
||||
->select([
|
||||
'infraestrutura.id',
|
||||
DB::raw("COALESCE(infraestrutura.nome, unidade.nome_fantasia) AS nome"),
|
||||
])
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getCentrosCusto($infraestruturaId)
|
||||
{
|
||||
return DB::table('cadastro_centro_custo AS centro_custo')
|
||||
->join('cadastro_setor AS setor', 'setor.id', 'centro_custo.setor_id')
|
||||
->whereNull('centro_custo.deleted_at')
|
||||
->where('centro_custo.infraestrutura_id', $infraestruturaId)
|
||||
->orderBy('setor.nome')
|
||||
->select([
|
||||
'centro_custo.id',
|
||||
'setor.nome AS setor_nome',
|
||||
])
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function update($request, $id)
|
||||
{
|
||||
$unidade = self::getUnidadeModel($id);
|
||||
|
||||
self::validate($request);
|
||||
|
||||
return tap($unidade)->update(self::getUnidadeData($request))->fresh();
|
||||
}
|
||||
|
||||
private static function getUnidadeData($request)
|
||||
{
|
||||
return $request->only(['conectasus_centro_custo_id', 'nome', 'cnes', 'is_almoxarifado']);
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
$unidade = self::getUnidadeModel($id);
|
||||
|
||||
if ($unidade->entradas()->exists()) {
|
||||
|
||||
throw new CannotDeleteUnidadeException();
|
||||
}
|
||||
|
||||
$unidade->delete();
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
return DB::table('web_service_almoxarifado_cliente_unidade AS unidade')
|
||||
->leftJoin(
|
||||
'cadastro_centro_custo AS conectasus_centro_custo',
|
||||
'conectasus_centro_custo.id',
|
||||
'unidade.conectasus_centro_custo_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_setor AS conectasus_setor',
|
||||
'conectasus_setor.id',
|
||||
'conectasus_centro_custo.setor_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_infraestrutura AS conectasus_infraestrutura',
|
||||
'conectasus_infraestrutura.id',
|
||||
'conectasus_centro_custo.infraestrutura_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_unidade AS conectasus_unidade',
|
||||
'conectasus_unidade.id',
|
||||
'conectasus_infraestrutura.unidade_id'
|
||||
)
|
||||
->select([
|
||||
'unidade.id',
|
||||
'unidade.nome',
|
||||
'unidade.cnes',
|
||||
DB::raw("CONCAT(
|
||||
conectasus_unidade.nome_fantasia,
|
||||
IF(conectasus_infraestrutura.nome IS NOT NULL,
|
||||
CONCAT(' - ', conectasus_infraestrutura.nome),
|
||||
''
|
||||
),
|
||||
' - ',
|
||||
conectasus_setor.nome
|
||||
) AS conectasus_centro_custo_descricao"),
|
||||
DB::raw("IF(unidade.is_almoxarifado, 'SIM', 'NÃO') AS is_almoxarifado"),
|
||||
]);
|
||||
}
|
||||
|
||||
private static function validate($request)
|
||||
{
|
||||
$request->validate([
|
||||
'conectasus_centro_custo_id' => [
|
||||
'nullable',
|
||||
'present',
|
||||
'integer',
|
||||
Rule::exists(CadastroCentroCusto::class, 'id'),
|
||||
],
|
||||
'nome' => [
|
||||
'required',
|
||||
'string',
|
||||
'between:3,100',
|
||||
Rule::unique(Unidade::class, 'nome')->ignore($request->route('id')),
|
||||
],
|
||||
'cnes' => [
|
||||
'nullable',
|
||||
'present',
|
||||
'digits:7',
|
||||
],
|
||||
'is_almoxarifado' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
private static function getUnidadeModel($id)
|
||||
{
|
||||
$unidade = Unidade::find($id);
|
||||
|
||||
if (is_null($unidade)) {
|
||||
|
||||
throw new UnidadeNotFoundException();
|
||||
}
|
||||
|
||||
return $unidade;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user