diff --git a/Controller/ReportProducto.php b/Controller/ReportProducto.php index a117221..b1dbe57 100644 --- a/Controller/ReportProducto.php +++ b/Controller/ReportProducto.php @@ -49,7 +49,7 @@ public function getPageData(): array /** * Filtros comunes a todos los documentos */ - private function addCommonFilters(string $viewName, string $dateField, string $warehouseField): void + private function addCommonFilters(string $viewName, string $dateField, string $warehouseField, bool $showAgent = true): void { // periodo $this->addFilterPeriod($viewName, 'fecha', 'date', $dateField); @@ -60,10 +60,12 @@ private function addCommonFilters(string $viewName, string $dateField, string $w $this->addFilterSelect($viewName, 'nick', 'user', 'nick', $users); } - // agente - $agents = Agentes::codeModel(); - if (count($agents) > 1) { - $this->addFilterSelect($viewName, 'codagente', 'agent', 'codagente', $agents); + // agente (solo aplica a documentos de venta, que son los que tienen codagente) + if ($showAgent) { + $agents = Agentes::codeModel(); + if (count($agents) > 1) { + $this->addFilterSelect($viewName, 'codagente', 'agent', 'codagente', $agents); + } } // empresa @@ -187,7 +189,7 @@ protected function createViewsSupplierDeliveryNotes(string $viewName = 'FacturaP ->addOrderBy(['stockfis'], 'stock'); // filtros - $this->addCommonFilters($viewName, 'albaranesprov.fecha', 'albaranesprov.codalmacen'); + $this->addCommonFilters($viewName, 'albaranesprov.fecha', 'albaranesprov.codalmacen', false); // proveedor $this->addFilterAutocomplete($viewName, 'codproveedor', 'supplier', 'codproveedor', 'Proveedor', 'codproveedor', 'nombre'); @@ -203,7 +205,7 @@ protected function createViewsSupplierInvoices(string $viewName = 'FacturaProvee ->addOrderBy(['cantidad'], 'quantity', 2); // filtros - $this->addCommonFilters($viewName, 'facturasprov.fecha', 'facturasprov.codalmacen'); + $this->addCommonFilters($viewName, 'facturasprov.fecha', 'facturasprov.codalmacen', false); // proveedor $this->addFilterAutocomplete($viewName, 'codproveedor', 'supplier', 'codproveedor', 'Proveedor', 'codproveedor', 'nombre'); diff --git a/Model/Join/FacturaClienteProducto.php b/Model/Join/FacturaClienteProducto.php index 893ff02..d2ba4c1 100644 --- a/Model/Join/FacturaClienteProducto.php +++ b/Model/Join/FacturaClienteProducto.php @@ -20,6 +20,7 @@ namespace FacturaScripts\Plugins\Informes\Model\Join; use FacturaScripts\Core\Template\JoinModel; +use FacturaScripts\Core\Where; /** * Description of FacturaClienteProducto @@ -36,6 +37,37 @@ public function url(string $type = 'auto', string $list = 'List'): string return 'ReportProducto'; } + /** + * Carga la descripción aparte para que no entre en el GROUP BY (columna TEXT). + * + * @param Where[] $where + */ + public static function all(array $where = [], array $order = [], int $offset = 0, int $limit = 0): array + { + $result = parent::all($where, $order, $offset, $limit); + + $productIds = array_unique(array_filter( + array_map(fn($item) => $item->idproducto, $result), + fn($idproducto) => $idproducto !== null + )); + if (empty($productIds)) { + return $result; + } + + $descriptions = []; + $sql = 'SELECT idproducto, descripcion FROM productos WHERE idproducto IN (' + . implode(',', array_map('intval', $productIds)) . ')'; + foreach (self::db()->select($sql) as $row) { + $descriptions[$row['idproducto']] = $row['descripcion']; + } + + foreach ($result as $item) { + $item->descripcion = $descriptions[$item->idproducto] ?? null; + } + + return $result; + } + protected function getFields(): array { return [ @@ -46,7 +78,6 @@ protected function getFields(): array 'codfabricante' => 'productos.codfabricante', 'codfamilia' => 'productos.codfamilia', 'coste' => 'variantes.coste', - 'descripcion' => 'productos.descripcion', 'idproducto' => static::MAIN_TABLE . '.idproducto', 'precio' => 'variantes.precio', 'referencia' => static::MAIN_TABLE . '.referencia', @@ -58,7 +89,7 @@ protected function getGroupFields(): string { return static::DOC_TABLE . '.codalmacen, ' . static::MAIN_TABLE . '.idproducto, ' . static::MAIN_TABLE . '.referencia, productos.codfabricante, productos.codfamilia, variantes.coste, ' - . 'productos.descripcion, variantes.precio, stocks.cantidad'; + . 'variantes.precio, stocks.cantidad'; } protected function getSQLFrom(): string diff --git a/Model/Join/FacturaProveedorProducto.php b/Model/Join/FacturaProveedorProducto.php index 91f0385..a5ba3d8 100644 --- a/Model/Join/FacturaProveedorProducto.php +++ b/Model/Join/FacturaProveedorProducto.php @@ -20,6 +20,7 @@ namespace FacturaScripts\Plugins\Informes\Model\Join; use FacturaScripts\Core\Template\JoinModel; +use FacturaScripts\Core\Where; /** * Description of FacturaProveedorProducto @@ -36,6 +37,37 @@ public function url(string $type = 'auto', string $list = 'List'): string return 'ReportProducto'; } + /** + * Carga la descripción aparte para que no entre en el GROUP BY (columna TEXT). + * + * @param Where[] $where + */ + public static function all(array $where = [], array $order = [], int $offset = 0, int $limit = 0): array + { + $result = parent::all($where, $order, $offset, $limit); + + $productIds = array_unique(array_filter( + array_map(fn($item) => $item->idproducto, $result), + fn($idproducto) => $idproducto !== null + )); + if (empty($productIds)) { + return $result; + } + + $descriptions = []; + $sql = 'SELECT idproducto, descripcion FROM productos WHERE idproducto IN (' + . implode(',', array_map('intval', $productIds)) . ')'; + foreach (self::db()->select($sql) as $row) { + $descriptions[$row['idproducto']] = $row['descripcion']; + } + + foreach ($result as $item) { + $item->descripcion = $descriptions[$item->idproducto] ?? null; + } + + return $result; + } + protected function getFields(): array { return [ @@ -45,7 +77,6 @@ protected function getFields(): array 'codfabricante' => 'productos.codfabricante', 'codfamilia' => 'productos.codfamilia', 'coste' => 'variantes.coste', - 'descripcion' => 'productos.descripcion', 'idproducto' => static::MAIN_TABLE . '.idproducto', 'precio' => 'variantes.precio', 'referencia' => static::MAIN_TABLE . '.referencia', @@ -57,7 +88,7 @@ protected function getGroupFields(): string { return static::DOC_TABLE . '.codalmacen, ' . static::MAIN_TABLE . '.idproducto, ' . static::MAIN_TABLE . '.referencia, productos.codfabricante, productos.codfamilia, variantes.coste, ' - . 'productos.descripcion, variantes.precio, stocks.cantidad'; + . 'variantes.precio, stocks.cantidad'; } protected function getSQLFrom(): string