setTable('pie'); } public function create(?array $data = null): Model\Venta\Pie { $map = (new Implement\Repository\MapperParser(['valor', 'uf', 'cuotas'])) ->register('fecha', new Implement\Repository\Mapper\DateTime('fecha')) ->register('asociado', (new Implement\Repository\Mapper()) ->setFunction(function($data) { if ($data['asociado'] === null or $data['asociado'] === 0) { return null; } return $this->fetchById($data['asociado']); })) ->register('reajuste', (new Implement\Repository\Mapper()) ->setFunction(function($data) { if ($data['reajuste'] === null or $data['reajuste'] === 0) { return null; } return $this->pagoRepository->fetchById($data['reajuste']); })); return $this->parseData(new Model\Venta\Pie(), $data, $map); } public function save(Define\Model $model): Model\Venta\Pie { $model->id = $this->saveNew( ['fecha', 'valor', 'uf', 'cuotas', 'asociado', 'reajuste'], [$model->fecha->format('Y-m-d H:i:s'), $model->valor, $model->uf, $model->cuotas, $model->asociado?->id, $model->reajuste?->id] ); return $model; } public function edit(Define\Model $model, array $new_data): Model\Venta\Pie { return $this->update($model, ['fecha', 'valor', 'uf', 'cuotas', 'asociado', 'reajuste'], $new_data); } /** * @param int $pie_id * @return array * @throws Implement\Exception\EmptyResult */ public function fetchAsociados(int $pie_id): array { $query = $this->connection->getQueryBuilder() ->select() ->from($this->getTable()) ->where('asociado = ?'); return $this->fetchMany($query, [$pie_id]); } /** * @param float $value * @return array * @throws Implement\Exception\EmptyResult */ public function fetchByValue(float $value): array { $query = $this->connection->getQueryBuilder() ->select() ->from($this->getTable()) ->where('valor = ?'); return $this->fetchMany($query, [$value]); } public function fetchByReajuste(int $reajuste_id): Model\Venta\Pie { $query = $this->connection->getQueryBuilder() ->select() ->from($this->getTable()) ->where('reajuste = ?'); return $this->fetchOne($query, [$reajuste_id]); } public function fetchByVenta(int $venta_id): Model\Venta\Pie { $query = $this->connection->getQueryBuilder() ->select('a.*') ->from("{$this->getTable()} a") ->joined('JOIN venta ON venta.pie = a.id') ->where('venta.id = ?'); return $this->fetchOne($query, [$venta_id]); } public function filterData(array $data): array { return array_intersect_key($data, array_fill_keys(['fecha', 'valor', 'uf', 'cuotas', 'asociado', 'reajuste'], 0)); } }