diff --git a/ci4/app/Controllers/Pedidos/Pedido.php b/ci4/app/Controllers/Pedidos/Pedido.php index bc8254dd..647ff134 100755 --- a/ci4/app/Controllers/Pedidos/Pedido.php +++ b/ci4/app/Controllers/Pedidos/Pedido.php @@ -245,13 +245,31 @@ class Pedido extends \App\Controllers\BaseResourceController $estado = $reqData['estado'] ?? 'todos'; if($estado == 'todos') $estado = ''; - $model_linea = model('\App\Models\Pedidos\PedidoLineaModel'); - $resourceData = $model_linea->getResource($search, $estado)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); + $showTotal = $reqData['showTotal'] ?? false; + $searchValues = get_filter_datatables_columns($reqData); + + $model_linea = model('\App\Models\Pedidos\PedidoLineaModel'); + $resourceData = $model_linea->getResource($searchValues, $estado)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); + $totalTirada = $model_linea->getSumOfTirada($searchValues, $estado, $start, $length); + $total = $model_linea->getSumOfTotalAceptado($searchValues, $estado, $start, $length); + $total2 = 0; + if($showTotal){ + $total2 = $model_linea->getTotalOfTotalAceptado(); + } + + if($total2 != 0){ + $total = "" . $total . " \n(" . $total2 . ")"; + } return $this->respond(Collection::datatable( $resourceData, $model_linea->getResource("", $estado)->countAllResults(), - $model_linea->getResource($search, $estado)->countAllResults() + $model_linea->getResource($searchValues, $estado)->countAllResults(), + "", + [ + 'total_tirada' => $totalTirada, + 'total' => $total + ] )); } else { return $this->failUnauthorized('Invalid request', 403); diff --git a/ci4/app/Controllers/Presupuestos/Buscador.php b/ci4/app/Controllers/Presupuestos/Buscador.php index 30b7b53e..edfe067d 100644 --- a/ci4/app/Controllers/Presupuestos/Buscador.php +++ b/ci4/app/Controllers/Presupuestos/Buscador.php @@ -111,7 +111,7 @@ class Buscador extends \App\Controllers\BaseResourceController return $this->respond(Collection::datatable( $resourceData, $this->model->getResource("")->countAllResults(), - $this->model->getResource($search)->countAllResults() + $this->model->getResource($searchValues)->countAllResults() )); } else { return $this->failUnauthorized('Invalid request', 403); diff --git a/ci4/app/Language/en/Pedidos.php b/ci4/app/Language/en/Pedidos.php index 69a30669..553a35c8 100644 --- a/ci4/app/Language/en/Pedidos.php +++ b/ci4/app/Language/en/Pedidos.php @@ -78,6 +78,8 @@ return [ 'facturas' => 'Invoices', + 'showTotal' => 'Show totals', + 'validation' => [ ], diff --git a/ci4/app/Language/es/Pedidos.php b/ci4/app/Language/es/Pedidos.php index f8556058..25de0a9c 100644 --- a/ci4/app/Language/es/Pedidos.php +++ b/ci4/app/Language/es/Pedidos.php @@ -78,6 +78,8 @@ return [ 'facturas' => 'Facturas', + 'showTotal' => 'Mostrar totales', + 'validation' => [ ], diff --git a/ci4/app/Models/Collection.php b/ci4/app/Models/Collection.php index 773ae680..af469083 100755 --- a/ci4/app/Models/Collection.php +++ b/ci4/app/Models/Collection.php @@ -15,7 +15,7 @@ class Collection * * @return array */ - public static function datatable(array $data, int $recordsTotal, int $recordsFiltered, string $error = null) + public static function datatable(array $data, int $recordsTotal, int $recordsFiltered, string $error = null, $extra_data = []) { $draw = 1; $req = service('request'); @@ -38,6 +38,10 @@ class Collection $response['error'] = $error; } + if (count($extra_data)>0) { + $response['extra'] = $extra_data; + } + return $response; } } \ No newline at end of file diff --git a/ci4/app/Models/Pedidos/PedidoLineaModel.php b/ci4/app/Models/Pedidos/PedidoLineaModel.php index d7eb4699..52284cb4 100644 --- a/ci4/app/Models/Pedidos/PedidoLineaModel.php +++ b/ci4/app/Models/Pedidos/PedidoLineaModel.php @@ -14,12 +14,20 @@ class PedidoLineaModel extends \App\Models\BaseModel protected $useAutoIncrement = true; const SORTABLE = [ - 0 => "t1.id", - 1 => "t1.estado", - 2 => "t1.total_precio", - 3 => "t1.total_tirada", + 0 => "t2.id", + 1 => "t2.updated_at", + 2 => "t2.fecha_entrega_real", + 3 => "t4.nombre", + 4 => "CONCAT(t5.first_name, ' ', t5.last_name)", + 5 => "t3.titulo", + 6 => "t6.nombre", + 7 => "t3.inc_rei", + 8 => "t3.paginas", + 9 => "t3.tirada", + 10 => "t3.total_aceptado", + 11 => "t2.estado" ]; - + protected $allowedFields = [ "pedido_id", "presupuesto_id", @@ -40,7 +48,7 @@ class PedidoLineaModel extends \App\Models\BaseModel public static $labelField = "id"; - public function getResource(string $search = "", $estado="") + public function getResource($search = [], $estado="") { $builder = $this->db ->table($this->table . " t1") @@ -67,16 +75,112 @@ class PedidoLineaModel extends \App\Models\BaseModel } } - // Falta implementar la busqueda por grupos - return empty($search) - ? $builder - : $builder - ->groupStart() - ->like("t1.id", $search) - ->orLike("t1.id", $search) - ->groupEnd(); + if (empty($search)) + return $builder; + else { + $builder->groupStart(); + foreach ($search as $col_search) { + if ($col_search[0] != 1 && $col_search[0] != 2) + $builder->like(self::SORTABLE[$col_search[0]], $col_search[2]); + else { + $dates = explode(" ", $col_search[2]); + $builder->where(self::SORTABLE[$col_search[0]] . ">=", $dates[0]); + $builder->where(self::SORTABLE[$col_search[0]] . "<=", $dates[1]); + } + } + $builder->groupEnd(); + return $builder; + } } + public function getSumOfTirada(array $search, $estado = '', $start = 0, $length = 5) + { + + $builder = $this->db + ->table($this->table . " t1") + ->selectSum('t3.tirada', 'total_tirada'); + + $builder->join("pedidos t2", "t2.id = t1.pedido_id", "left"); + $builder->join("presupuestos t3", "t1.presupuesto_id = t3.id", "left"); + + + + // Aplica los filtros de búsqueda y estado + if (!empty($search)) { + $builder->groupStart(); + foreach ($search as $col_search) { + if ($col_search[0] != 1 && $col_search[0] != 2) + $builder->like(self::SORTABLE[$col_search[0]], $col_search[2]); + else { + $dates = explode(" ", $col_search[2]); + $builder->where(self::SORTABLE[$col_search[0]] . ">=", $dates[0]); + $builder->where(self::SORTABLE[$col_search[0]] . "<=", $dates[1]); + } + } + $builder->groupEnd(); + } + + if ($estado !== '') { + $builder->where('estado', $estado); + } + + // Aplicar el orden y el límite + $builder->limit($length, $start); + + return $builder->get()->getRow()->total_tirada; + } + + public function getSumOfTotalAceptado(array $search, $estado = '', $start = 0, $length = 5) + { + + $builder = $this->db + ->table($this->table . " t1") + ->selectSum('t3.total_aceptado', 'total'); + + $builder->join("pedidos t2", "t2.id = t1.pedido_id", "left"); + $builder->join("presupuestos t3", "t1.presupuesto_id = t3.id", "left"); + + + + // Aplica los filtros de búsqueda y estado + if (!empty($search)) { + $builder->groupStart(); + foreach ($search as $col_search) { + if ($col_search[0] != 1 && $col_search[0] != 2) + $builder->like(self::SORTABLE[$col_search[0]], $col_search[2]); + else { + $dates = explode(" ", $col_search[2]); + $builder->where(self::SORTABLE[$col_search[0]] . ">=", $dates[0]); + $builder->where(self::SORTABLE[$col_search[0]] . "<=", $dates[1]); + } + } + $builder->groupEnd(); + } + + if ($estado !== '') { + $builder->where('estado', $estado); + } + + // Aplicar el orden y el límite + $builder + ->limit($length, $start); + + return $builder->get()->getRow()->total; + } + + public function getTotalOfTotalAceptado() + { + + $builder = $this->db + ->table($this->table . " t1") + ->selectSum('t3.total_aceptado', 'total'); + + $builder->join("pedidos t2", "t2.id = t1.pedido_id", "left"); + $builder->join("presupuestos t3", "t1.presupuesto_id = t3.id", "left"); + + + return $builder->get()->getRow()->total; + } public function obtenerLineasPedidoSinFacturar($cliente_id) { $resultaArray = []; diff --git a/ci4/app/Views/themes/vuexy/form/pedidos/viewPedidosList.php b/ci4/app/Views/themes/vuexy/form/pedidos/viewPedidosList.php index 1a169428..6a395ff5 100644 --- a/ci4/app/Views/themes/vuexy/form/pedidos/viewPedidosList.php +++ b/ci4/app/Views/themes/vuexy/form/pedidos/viewPedidosList.php @@ -11,6 +11,14 @@
+
+
+ + +
+
@@ -23,11 +31,11 @@ - - - + + + - + @@ -57,24 +65,130 @@ `; }; - theTable = $('#tableOfPedidos').DataTable({ +// Setup - add a text input to each footer cell +$('#tableOfPedidos thead tr').clone(true).appendTo('#tableOfPedidos thead'); +$('#tableOfPedidos thead tr:eq(1) th').each(function (i) { + if (!$(this).hasClass("noFilter")) { + var title = $(this).text(); + if($(this).hasClass("totalizador")){ + if(i==9){ + $(this).html('