diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 7063dd03..58bba4ba 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -659,6 +659,9 @@ $routes->group('presupuestoadmin', ['namespace' => 'App\Controllers\Presupuestos $routes->get('maquinas', 'Presupuestoadmin::getMaquinas'); $routes->post('getlinea', 'Presupuestoadmin::getLineaPresupuesto'); $routes->post('clone', 'Presupuestoadmin::datatable_2'); + + $routes->get('presupuestosCliente', 'Presupuestoadmin::tablaClienteForm'); + $routes->get('getSumCliente/(:num)', 'Presupuestoadmin::obtenerTotalPresupuestosCliente/$1'); }); $routes->resource('presupuestoadmin', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Presupuestoadmin', 'except' => 'show,new,create,update']); diff --git a/ci4/app/Controllers/Pedidos/Pedido.php b/ci4/app/Controllers/Pedidos/Pedido.php index 14c6defe..bf4ddc9d 100755 --- a/ci4/app/Controllers/Pedidos/Pedido.php +++ b/ci4/app/Controllers/Pedidos/Pedido.php @@ -10,7 +10,6 @@ use App\Services\PedidoXMLService; use App\Services\ProductionService; use Hermawan\DataTables\DataTable; use CodeIgniter\I18n\Time; -use Error; class Pedido extends \App\Controllers\BaseResourceController { @@ -382,13 +381,13 @@ class Pedido extends \App\Controllers\BaseResourceController $q = $this->model->getPedidosClienteForm($clienteId); - /*$searchValue = $this->request->getGet('fecha') ?? ''; + $searchValue = $this->request->getGet('fecha') ?? ''; if (!empty($searchValue)) { // Extraer las fechas del formato "YYYY-MM-DD|YYYY-MM-DD" $dates = explode('|', $searchValue); if (count($dates) == 2) { - $q->where('created_at >=', $dates[0] . ' 00:00:00') - ->where('created_at <=', $dates[1] . ' 23:59:59'); + $q->where('p.created_at >=', $dates[0] . ' 00:00:00') + ->where('p.created_at <=', $dates[1] . ' 23:59:59'); } } $searchValue = $this->request->getGet('fecha_entrega') ?? ''; @@ -396,10 +395,10 @@ class Pedido extends \App\Controllers\BaseResourceController // Extraer las fechas del formato "YYYY-MM-DD|YYYY-MM-DD" $dates = explode('|', $searchValue); if (count($dates) == 2) { - $q->where('fecha_entrega_real >=', $dates[0] . ' 00:00:00') - ->where('fecha_entrega_real <=', $dates[1] . ' 23:59:59'); + $q->where('p.fecha_entrega_real >=', $dates[0] . ' 00:00:00') + ->where('p.fecha_entrega_real <=', $dates[1] . ' 23:59:59'); } - }*/ + } $result = DataTable::of($q) diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php index 35b372c2..d056e955 100644 --- a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php @@ -20,6 +20,8 @@ use App\Models\Presupuestos\PresupuestoPreimpresionesModel; use App\Models\Presupuestos\PresupuestoServiciosExtraModel; use App\Services\PresupuestoService; use App\Services\PresupuestoClienteService; +use Hermawan\DataTables\DataTable; +use CodeIgniter\I18n\Time; use Exception; class Presupuestoadmin extends \App\Controllers\BaseResourceController @@ -1684,6 +1686,91 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController } + public function tablaClienteForm() + { + + $clienteId = $this->request->getGet('cliente_id') ?? -1; + + $q = $this->model->getPresupuestosClienteForm($clienteId); + + $searchValue = $this->request->getGet('fecha') ?? ''; + if (!empty($searchValue)) { + // Extraer las fechas del formato "YYYY-MM-DD|YYYY-MM-DD" + $dates = explode('|', $searchValue); + if (count($dates) == 2) { + $q->where('p.created_at >=', $dates[0] . ' 00:00:00') + ->where('p.created_at <=', $dates[1] . ' 23:59:59'); + } + } + + $result = DataTable::of($q) + ->edit( + 'fecha', + fn($q) => $q->fecha?Time::createFromFormat("Y-m-d H:i:s", $q->fecha)->format("d/m/Y"):"" + ) + ->edit( + 'estado', fn($q) => match ($q->estado) { + "1" => lang('Presupuestos.borrador'), + "2" => lang('Presupuestos.confirmado'), + default => '--' + } + )->add("action", callback: function ($q) { + return ' +
+ +
+ '; + + }); + + return $result->toJson(returnAsObject: true) ; + } + + public function obtenerTotalPresupuestosCliente($cliente_id){ + + $error = false; + $result = [ + 'total_impresion' => 0, + 'total_maquetacion' => 0, + ]; + $data = $this->model + ->where('presupuestos.cliente_id', $cliente_id) + ->select('SUM(presupuestos.total_aceptado) as total') + ->groupBy('presupuestos.cliente_id')->get()->getResultObject(); + if(count($data) > 0){ + $result['total_impresion'] = round(floatval($data[0]->total), 2); + } + else{ + $error = true; + } + $result['total'] = $result['total_impresion'] + $result['total_maquetacion']; + return $this->respond(['status' => $error?'error':'success', 'totales' => $result]); + } + + public function obtenerTotalPedidosCliente($cliente_id){ + + $error = false; + $result = [ + 'total_impresion' => 0, + 'total_maquetacion' => 0, + ]; + $data = $this->model + ->where('presupuestos.cliente_id', $cliente_id)->whereNotIn('pedidos.estado', ['cancelado']) + ->select('SUM(pedidos.total_precio) as total') + ->join('pedidos_linea', 'pedidos_linea.pedido_id = pedidos.id') + ->join('presupuestos', 'presupuestos.id = pedidos_linea.presupuesto_id') + ->groupBy('presupuestos.cliente_id')->get()->getResultObject(); + if(count($data) > 0){ + $result['total_impresion'] = round(floatval($data[0]->total), 2); + } + else{ + $error = true; + } + $result['total'] = $result['total_impresion'] + $result['total_maquetacion']; + return $this->respond(['status' => $error?'error':'success', 'totales' => $result]); + } + + protected function getClienteListItems($selId = null) { $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Clientes.cliente'))])]; diff --git a/ci4/app/Language/es/Pedidos.php b/ci4/app/Language/es/Pedidos.php index d5708bc8..6afcd3ef 100644 --- a/ci4/app/Language/es/Pedidos.php +++ b/ci4/app/Language/es/Pedidos.php @@ -16,6 +16,7 @@ return [ 'estado' => 'Estado', 'importePendiente' => 'Importe Pendiente', + 'todos' => 'Todos', 'validacion' => 'Validación', 'produccion' => 'Producción', 'finalizado' => 'Finalizado', diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index b347eebe..cd19b536 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -349,6 +349,16 @@ return [ 'cubiertaSinAcabado' => 'Cubierta sin acabado', 'cubiertaSinAcabadoText' => 'La falta de plastificado en la cubierta puede comprometer su calidad, ya que aumenta el riesgo de agrietamiento en los pliegues o hendidos, afectando su apariencia y resistencia', + + 'presupuestosImpresion' => 'Presupuestos impresión', + 'presupuestosMaquetacion' => 'Presupuestos maquetación', + 'presupuestosTotal' => 'Total presupuestos', + 'fecha' => 'Fecha', + 'estado' => 'Estado', + 'todos' => 'Todos', + 'borrador' => 'Borrador', + 'confirmado' => 'Confirmado', + 'files' => 'Ficheros', 'titulos' => [ 'libroFresadoTapaDura' => 'Rústica Fresado tapa dura', diff --git a/ci4/app/Models/Pedidos/PedidoModel.php b/ci4/app/Models/Pedidos/PedidoModel.php index 4ce4a16e..1ab7dea5 100644 --- a/ci4/app/Models/Pedidos/PedidoModel.php +++ b/ci4/app/Models/Pedidos/PedidoModel.php @@ -242,7 +242,6 @@ class PedidoModel extends \App\Models\BaseModel ->join('presupuestos pr', 'pr.id = pl.presupuesto_id', 'left') //->where('pr.deleted_at IS NULL') ->where('pr.cliente_id', $cliente_id) - ->orderBy('p.created_at', 'DESC') ->groupBy('p.id'); return $builder; } diff --git a/ci4/app/Models/Presupuestos/PresupuestoModel.php b/ci4/app/Models/Presupuestos/PresupuestoModel.php index de3a817b..38f9aada 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoModel.php @@ -713,6 +713,19 @@ class PresupuestoModel extends \App\Models\BaseModel $servicios['extra'] = $queryExtras->get()->getResultObject(); return $servicios; } + + public function getPresupuestosClienteForm($cliente_id = -1){ + $builder = $this->db + ->table($this->table . " pr") + ->select('pr.id, pr.created_at as fecha, CONCAT(u.first_name, " ", u.last_name) AS comercial, pr.titulo, + pr.paginas as paginas, pr.tirada, pr.total_aceptado as total, pr.estado_id as estado') + ->join ("clientes c", "pr.cliente_id = c.id", "left") + ->join("users u", "c.comercial_id= u.id", "left") + ->where('pr.cliente_id', $cliente_id) + ->groupBy('pr.id'); + return $builder; + } + private function generarConceptoLineasPresupuestoLibro($lineas, $presupuesto) { diff --git a/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php b/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php index 707661bb..56654f74 100644 --- a/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php +++ b/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php @@ -53,6 +53,18 @@ Domicilio de Entrega +