select([ 'fornecedor.id', 'fornecedor.conectasus_fornecedor_id', 'fornecedor.nome', 'fornecedor.cnpj', ]) ->orderBy('fornecedor.nome') ->get(); } public static function create() { return [ 'form' => self::getFormData(), 'model' => [ 'conectasus_fornecedor_id' => null, 'nome' => null, 'cnpj' => null, ], ]; } public static function store($request) { self::validate($request); return Fornecedor::create(self::getFornecedorData($request))->fresh(); } public static function show($id) { return self::getFornecedorModel($id); } public static function edit($id) { $fornecedor = self::getFornecedorModel($id); return [ 'form' => self::getFormData(), 'model' => [ 'conectasus_fornecedor_id' => $fornecedor->conectasus_fornecedor_id, 'nome' => $fornecedor->nome, 'cnpj' => MaskUtil::getCnpjMasked($fornecedor->cnpj), ], ]; } private static function getFormData() { return [ 'conectasus_fornecedores' => CadastroFornecedor::orderBy('nome_fantasia') ->get(['id', 'nome_fantasia', 'cnpj']) ->map(fn ($fornecedor) => (object) [ 'id' => $fornecedor->id, 'descricao' => $fornecedor->nome_fantasia . ($fornecedor->cnpj ? (' - ' . MaskUtil::getCnpjMasked($fornecedor->cnpj)) : '') ]), ]; } public static function update($request, $id) { $fornecedor = self::getFornecedorModel($id); self::validate($request); return tap($fornecedor)->update(self::getFornecedorData($request))->fresh(); } private static function getFornecedorData($request) { return $request->only(['conectasus_fornecedor_id', 'nome', 'cnpj']); } public static function destroy($id) { $fornecedor = self::getFornecedorModel($id); if ($fornecedor->entradas()->exists()) { throw new CannotDeleteFornecedorException(); } $fornecedor->delete(); } public static function datatable() { return DB::table('web_service_almoxarifado_cliente_fornecedor AS fornecedor') ->leftJoin( 'cadastro_fornecedor as conectasus_fornecedor', 'conectasus_fornecedor.id', 'fornecedor.conectasus_fornecedor_id' ) ->select([ 'fornecedor.id', 'fornecedor.nome', 'fornecedor.cnpj', 'conectasus_fornecedor.nome_fantasia AS conectasus_fornecedor_nome_fantasia', ]); } private static function validate($request) { $request->validate([ 'conectasus_fornecedor_id' => [ 'nullable', 'present', 'integer', Rule::exists(CadastroFornecedor::class, 'id'), ], 'nome' => [ 'required', 'string', 'between:3,100', Rule::unique(Fornecedor::class, 'nome')->ignore($request->route('id')), ], 'cnpj' => [ 'nullable', 'present', 'digits:14', new Cnpj, ], ]); } private static function getFornecedorModel($id) { $fornecedor = Fornecedor::find($id); if (is_null($fornecedor)) { throw new FornecedorNotFoundException(); } return $fornecedor; } }