select([ 'material.id', 'material.conectasus_material_id', 'material.nome', ]) ->orderBy('material.nome') ->get(); } public static function create() { return [ 'form' => self::getFormData(), 'model' => [ 'conectasus_material_grupo_id' => null, 'conectasus_material' => null, 'nome' => null, ], ]; } public static function store($request) { self::validate($request); return Material::create(self::getMaterialData($request))->fresh(); } public static function show($id) { return self::getMaterialModel($id); } public static function edit($id) { $material = self::getMaterialModel($id); return [ 'form' => self::getFormData(), 'model' => [ 'conectasus_material_grupo_id' => $material->conectasusMaterial->grupo_id ?? null, 'conectasus_material' => $material->conectasusMaterial ? [ 'id' => $material->conectasusMaterial->id, 'descricao_completa' => $material->conectasusMaterial->descricao_completa, ] : null, 'nome' => $material->nome, ], ]; } private static function getFormData() { return [ 'conectasus_grupos' => CadastroGrupo::orderBy('nome')->get(['id', 'nome']), ]; } public static function update($request, $id) { $material = self::getMaterialModel($id); self::validate($request); return tap($material)->update(self::getMaterialData($request))->fresh(); } private static function getMaterialData($request) { return $request->only(['conectasus_material_id', 'nome']); } public static function destroy($id) { $material = self::getMaterialModel($id); if ($material->entradaItens()->exists()) { throw new CannotDeleteMaterialException(); } $material->delete(); } public static function datatable() { return DB::table('web_service_almoxarifado_cliente_material AS material') ->leftJoin( 'cadastro_material AS conectasus_material', 'conectasus_material.id', 'material.conectasus_material_id' ) ->leftJoin( 'cadastro_apresentacao AS conectasus_material_apresentacao', 'conectasus_material_apresentacao.id', 'conectasus_material.apresentacao_id' ) ->leftJoin( 'cadastro_unidade_medida as conectasus_material_apresentacao_unidade_medida', 'conectasus_material_apresentacao_unidade_medida.id', 'conectasus_material.apresentacao_unidade_medida_id' ) ->select([ 'material.id', 'material.nome', DB::raw(CadastroMaterialService::getDescricaoCompletaRaw( 'conectasus_material', 'conectasus_material_apresentacao', 'conectasus_material_apresentacao_unidade_medida' ) . " AS conectasus_material_descricao_completa"), ]); } private static function validate($request) { $request->validate([ 'conectasus_material_id' => [ 'nullable', 'present', 'integer', Rule::exists(CadastroMaterial::class, 'id'), ], 'nome' => [ 'required', 'string', 'between:3,100', Rule::unique(Material::class, 'nome')->ignore($request->route('id')), ], ]); } private static function getMaterialModel($id) { $material = Material::find($id); if (is_null($material)) { throw new MaterialNotFoundException(); } return $material; } }