register('rut', (new Implement\Repository\Mapper()) ->setProperty('persona') ->setFunction(function($data) { $rut = (int) substr($data['rut'], 0, -1); return $this->personaService->getById($rut); }) ); return $this->parseData(new Model\Venta\MediosPago\Toku\Customer(), $data, $map); } public function save(Define\Model $model): Model\Venta\MediosPago\Toku\Customer { $model->id = $this->saveNew( ['rut', 'toku_id', 'created_at'], [implode('', [$model->persona->rut, $model->persona->digito]), $model->toku_id, (new DateTimeImmutable())->format('Y-m-d H:i:s')] ); return $model; } public function edit(Define\Model $model, array $new_data): Model\Venta\MediosPago\Toku\Customer { return $this->update($model, ['rut', 'toku_id', 'updated_at'], array_merge($new_data, ['updated_at' => (new DateTimeImmutable())->format('Y-m-d H:i:s')])); } /** * @param string $rut * @return Model\Venta\MediosPago\Toku\Customer * @throws Implement\Exception\EmptyResult */ public function fetchByRut(string $rut): Model\Venta\MediosPago\Toku\Customer { if (str_contains($rut, '-')) { $rut = str_replace('-', '', $rut); } if (str_contains($rut, '.')) { $rut = str_replace('.', '', $rut); } $rut = strtoupper($rut); $query = $this->connection->getQueryBuilder() ->select() ->from($this->getTable()) ->where('rut = :rut'); return $this->fetchOne($query, compact('rut')); } /** * @param string $toku_id * @return Model\Venta\MediosPago\Toku\Customer * @throws Implement\Exception\EmptyResult */ public function fetchByTokuId(string $toku_id): Model\Venta\MediosPago\Toku\Customer { $query = $this->connection->getQueryBuilder() ->select() ->from($this->getTable()) ->where('toku_id = :toku_id'); return $this->fetchOne($query, compact('toku_id')); } /** * @return array * @throws Implement\Exception\EmptyResult */ public function fetchAllTokuIds(): array { $query = $this->connection->getQueryBuilder() ->select('toku_id') ->from($this->getTable()); try { $statement = $this->connection->query($query); } catch (PDOException $exception) { throw new Implement\Exception\EmptyResult($query, $exception); } if ($statement->rowCount() === 0) { throw new Implement\Exception\EmptyResult($query); } return $statement->fetchAll(PDO::FETCH_COLUMN); } public function removeByTokuId(string $toku_id): void { $query = $this->connection->getQueryBuilder() ->delete() ->from($this->getTable()) ->where('toku_id = :toku_id'); $this->connection->execute($query, compact('toku_id')); } }