[ 'data_atual' => Carbon::now()->format('d/m/Y'), ], 'model' => [ 'cidadao_id' => null, 'cid_id' => null, 'usuario_id' => null, 'obito_em' => null, 'hora_obito' => null, 'declaracao' => null, 'causa' => null, ], ]; } public static function store() { self::validate(); $obito = Obito::create(request()->all())->fresh(); $paciente = Cidadao::where('id', request()->cidadao_id) ->first(); self::saveHistorico($paciente->paciente->id); return $obito; } public static function show($id) { return Obito::find($id); } public static function edit($id) { $obito = self::show($id); return [ 'additionals' => [ 'data_atual' => Carbon::now()->format('d/m/Y'), ], 'model' => [ 'cidadao' => [ 'id' => $obito->cidadao->id ?? null, 'cns' => $obito->cidadao->cns ?? null, 'nome' => $obito->cidadao->nome ?? null, ], 'cid' => [ 'id' => $obito->cid->id ?? null, 'codigo' => $obito->cid->codigo ?? null, 'nome' => $obito->cid->nome ?? null, ], 'usuario' => [ 'id' => $obito->usuario->id ?? null, 'cns' => $obito->usuario->cidadao->cns ?? null, 'nome' => $obito->usuario->cidadao->nome ?? null, ], 'obito_em' => $obito->obito_em->format('Y-m-d'), 'hora_obito' => $obito->obito_em->format('H:i:s'), 'obito_declaracao' => $paciente->cidadao->obito->declaracao ?? null, 'declaracao' => $obito->declaracao, 'causa' => $obito->causa, ], ]; } public static function update($id) { self::validate(); return (tap(self::show($id))->update(request()->all()))->fresh(); } public static function destroy($id) { DB::transaction(function () use ($id) { $obito = Obito::with('cidadao.paciente')->findOrFail($id); $paciente = $obito->cidadao->paciente ?? null; if ($paciente) { $paciente->cadastroIndividual()->update(['saida_cidadao_id' => null]); $paciente->informacaoSocial()->update(['saida_cidadao_id' => null]); } $obito->delete(); }); } public static function datatable() { return DB::table('cadastro_obito') ->select([ 'cadastro_obito.id', 'cadastro_cidadao.nome', 'cadastro_cidadao.cns', DB::raw("DATE_FORMAT(cadastro_obito.obito_em, '%d/%m/%Y') AS obito_em"), 'cadastro_obito.declaracao', ]) ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_obito.cidadao_id') ->whereNull('cadastro_obito.deleted_at'); } public static function autocompleteCidadao() { return DB::table('cadastro_cidadao') ->select([ 'cadastro_cidadao.id', 'cadastro_cidadao.nome', 'cadastro_cidadao.cns', ]) ->whereNotExists(fn ($q) => $q ->select(DB::raw(1)) ->from('cadastro_obito') ->whereNull('cadastro_obito.deleted_at') ->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id') ) ->whereNull('cadastro_cidadao.deleted_at') ->orderBy('cadastro_cidadao.nome'); } public static function autocompleteCid() { return DB::table('sigtap.cid') ->select([ 'id', 'codigo', 'nome', ]) ->where('is_ativo', true) ->orderBy('nome'); } public static function autocompleteUsuario() { return DB::table('cadastro_usuario') ->select([ 'cadastro_usuario.id', 'cadastro_cidadao.nome', 'cadastro_cidadao.cns', ]) ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id') ->whereNull('cadastro_usuario.deleted_at') ->orderBy('cadastro_cidadao.nome'); } public static function saveHistorico($pacienteId) { $historico = new PacienteHistorico; $historico->paciente_id = $pacienteId; $historico->save(); } private static function validate() { $rules = [ 'cidadao_id' => [ 'required', 'integer', Rule::exists(Cidadao::class, 'id'), ], 'cid_id' => [ 'nullable', 'integer', Rule::exists(Cid::class, 'id'), ], 'usuario_id' => [ 'nullable', 'integer', Rule::exists(Usuario::class, 'id'), ], 'obito_em' => [ 'required', 'date', ], 'declaracao' => [ 'nullable', 'string', 'between:1,13', ], 'causa' => [ 'nullable', 'string', 'between:1,255', ], ]; request()->validate($rules); } }