self::getFormData(), 'model' => self::getModelData(), ]; } public static function store($request) { self::validate($request); return SalaVacinacao::create($request->all())->fresh(); } public static function show($id) { return SalaVacinacao::find($id); } public static function edit($id) { $salaVacinacao = self::show($id); return [ 'form' => self::getFormData($salaVacinacao), 'model' => self::getModelData($salaVacinacao), ]; } public static function update($request, $id) { self::validate($request); return self::show($id)->update($request->all()); } public static function destroy($id) { $salaVacinacao = self::show($id); return $salaVacinacao->update(['ativo' => !$salaVacinacao->ativo]); } public static function datatable() { return DB::table('imunizacao_sala_vacinacao') ->select([ 'imunizacao_sala_vacinacao.id', 'cadastro_unidade.nome_fantasia AS unidade_nome', DB::raw("CASE WHEN cadastro_infraestrutura.principal THEN cadastro_unidade.nome_fantasia ELSE cadastro_infraestrutura.nome END AS infraestrutura_nome"), DB::raw("CASE WHEN imunizacao_sala_vacinacao.responsavel THEN 'Sim' ELSE 'Não' END AS responsavel"), DB::raw("CASE WHEN imunizacao_sala_vacinacao.permite_aplicacao THEN 'Sim' ELSE 'Não' END AS permite_aplicacao"), DB::raw("CASE WHEN imunizacao_sala_vacinacao.permite_requisicao THEN 'Sim' ELSE 'Não' END AS permite_requisicao"), DB::raw("CASE WHEN imunizacao_sala_vacinacao.cria_ficha_ab THEN 'Sim' ELSE 'Não' END AS cria_ficha_ab"), 'imunizacao_sala_vacinacao.ativo', ]) ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'imunizacao_sala_vacinacao.infraestrutura_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id'); } public static function list() { switch (request()->get('listar')) { case 'infraestruturas': return self::getInfraestruturas(request()->get('unidade_id')); break; default: return []; break; } } private static function validate($request) { return $request->validate([ 'infraestrutura_id' => [ 'required', 'integer', 'exists:\App\Models\Cadastro\Estabelecimento\Infraestrutura,id', Rule::unique('imunizacao_sala_vacinacao')->ignore($request->sala_vacinacao), ], 'responsavel' => [ 'required', 'boolean', ], 'permite_aplicacao' => [ 'required', 'boolean', ], 'permite_requisicao' => [ 'required', 'boolean', ], 'cria_ficha_ab' => [ 'required', 'boolean', ], ]); } private static function getUnidades() { return DB::table('cadastro_unidade') ->select([ 'id', 'nome_fantasia', ]) ->orderBy('nome_fantasia') ->get(); } private static function getInfraestruturas($unidadeId) { return DB::table('cadastro_infraestrutura') ->select([ 'cadastro_infraestrutura.id', DB::raw("CASE WHEN cadastro_infraestrutura.principal THEN cadastro_unidade.nome_fantasia ELSE cadastro_infraestrutura.nome END AS nome"), ]) ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id') ->where('cadastro_infraestrutura.unidade_id', $unidadeId) ->orderByRaw('CASE WHEN cadastro_infraestrutura.principal THEN cadastro_unidade.nome_fantasia ELSE cadastro_infraestrutura.nome END') ->get(); } private static function getFormData($salaVacinacao = null) { return [ 'unidades' => self::getUnidades(), 'infraestruturas' => self::getInfraestruturas($salaVacinacao->infraestrutura->unidade_id ?? null), ]; } private static function getModelData($salaVacinacao = null) { return [ 'id' => $salaVacinacao->id ?? null, 'unidade_id' => $salaVacinacao->infraestrutura->unidade_id ?? null, 'infraestrutura_id' => $salaVacinacao->infraestrutura_id ?? null, 'responsavel' => $salaVacinacao->responsavel ?? false, 'permite_aplicacao' => $salaVacinacao->permite_aplicacao ?? false, 'permite_requisicao' => $salaVacinacao->permite_requisicao ?? false, 'cria_ficha_ab' => $salaVacinacao->cria_ficha_ab ?? false, ]; } }