diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index adcad4bf..45970118 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -701,6 +701,15 @@ $routes->group( } ); +$routes->group( + 'print-factura', + ['namespace' => 'App\Controllers\Pdf'], + function ($routes) { + $routes->get('index/(:num)', 'PrintFacturas::index/$1', ['as' => 'viewFacturaPDF']); + $routes->get('generar/(:num)', 'PrintFacturas::generar/$1', ['as' => 'facturaToPdf']); + } +); + $routes->group( 'export-giros', ['namespace' => 'App\Controllers\Excel'], @@ -709,6 +718,14 @@ $routes->group( } ); +$routes->group( + 'export-lineas', + ['namespace' => 'App\Controllers\Excel'], + function ($routes) { + $routes->get('generar/(:num)', 'PrintLineas::generateExcel/$1', ['as' => 'lineasToExcel']); + } +); + $routes->group( 'buscadorpresupuestos', ['namespace' => 'App\Controllers\Presupuestos'], diff --git a/ci4/app/Controllers/Excel/PrintLineas.php b/ci4/app/Controllers/Excel/PrintLineas.php new file mode 100644 index 00000000..729c79ff --- /dev/null +++ b/ci4/app/Controllers/Excel/PrintLineas.php @@ -0,0 +1,70 @@ +getResourceForExcel($factura_id)->get()->getResultObject(); + + + // Crear un nuevo Spreadsheet + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + + // Especificar encabezados + $headers = [ + 'Factura', + 'ID Pedido', + 'Ref. Cliente', + 'Base' + ]; + + // Establecer los encabezados en la primera fila + $column = 'A'; + foreach ($headers as $header) { + $sheet->setCellValue($column . '1', $header); + $column++; + } + + // Rellenar las filas con datos + $rowNumber = 2; // Empezar en la segunda fila + foreach ($infoLineasFactura as $infoLineaFactura) { + $column = 'A'; + foreach ($infoLineaFactura as $cell) { + $sheet->setCellValue($column . $rowNumber, $cell); + $column++; + } + $rowNumber++; + } + + // Ajustar automáticamente el tamaño de las columnas + foreach (range('A', $column) as $col) { + $sheet->getColumnDimension($col)->setAutoSize(true); + } + + // Crear un escritor para guardar el archivo + $writer = new Xlsx($spreadsheet); + + // Configurar la respuesta para descarga + $fileName = 'lineas-pedido.xlsx'; + header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + header('Content-Disposition: attachment;filename="' . $fileName . '"'); + header('Cache-Control: max-age=0'); + + // Escribir el archivo a la salida + $writer->save('php://output'); + exit; + + } + +} \ No newline at end of file diff --git a/ci4/app/Controllers/Pdf/PrintFacturas.php b/ci4/app/Controllers/Pdf/PrintFacturas.php new file mode 100644 index 00000000..08e6e230 --- /dev/null +++ b/ci4/app/Controllers/Pdf/PrintFacturas.php @@ -0,0 +1,65 @@ +getResourceForPdf($id_factura)->get()->getRow(); + $data['lineas_factura'] = $lineasFacturaModel->getResourceForPdf($id_factura)->get()->getResultObject(); + $data['resumen_por_iva'] = $lineasFacturaModel->getResourceResumenIVAsForPdf($id_factura)->get()->getResultObject(); + + return view(getenv('theme.path') . 'pdfs/factura', $data); + } + + public function generar($id_factura) + { + + // Cargar modelos + $facturaModel = model('App\Models\Facturas\FacturaModel'); + $lineasFacturaModel = model('App\Models\Facturas\FacturaLineaModel'); + + // Informacion del presupuesto + $data['factura'] = $facturaModel->getResourceForPdf($id_factura)->get()->getRow(); + $data['lineas_factura'] = $lineasFacturaModel->getResourceForPdf($id_factura)->get()->getResultObject(); + $data['resumen_por_iva'] = $lineasFacturaModel->getResourceResumenIVAsForPdf($id_factura)->get()->getResultObject(); + + // Crear una instancia de Dompdf + $options = new \Dompdf\Options(); + $options->set('isHtml5ParserEnabled', true); + $options->set('isPhpEnabled', true); + $options->set('isRemoteEnabled', true); + $dompdf = new \Dompdf\Dompdf($options); + + // Contenido HTML del documento + $dompdf->loadHtml(view(getenv('theme.path').'pdfs/factura', $data)); + + // Establecer el tamaño del papel + $dompdf->setPaper('A4', 'portrait'); + + // Renderizar el PDF + $dompdf->render(); + + // Obtener el contenido generado + $output = $dompdf->output(); + + // Establecer las cabeceras para visualizar en lugar de descargar + $file_name = $data['factura']->numero . ".pdf"; + return $this->response + ->setStatusCode(200) + ->setHeader('Content-Type', 'application/pdf') + ->setHeader('Content-Disposition', 'inline; filename="' . $file_name . '"') + ->setHeader('Cache-Control', 'private, max-age=0, must-revalidate') + ->setHeader('Pragma', 'public') + ->setHeader('Content-Length', strlen($output)) + ->setBody($output); + } +} \ No newline at end of file diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index 03ff9410..cfd405ad 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -118,7 +118,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $datosPresupuesto->tapa = 'blanda'; $datosPresupuesto->clienteList = $this->getClienteListItems($clienteId ?? null); + $datosPresupuesto->paginasCuadernillo = [32, 28, 24, 20 , 16]; $presupuestoEntity->estado_id = 1; + $presupuestoEntity->paginas_por_cuadernillo = 32; $this->viewData['formAction'] = 'add'; @@ -185,6 +187,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if($presupuestoEntity->estado_id == 2){ $this->generarResumen($presupuestoEntity); } + + $datosPresupuesto->paginasCuadernillo = [32, 28, 24, 20 , 16]; + $presupuestoEntity->paginas_por_cuadernillo = $this->obtenerPaginasCuadernillo($presupuestoEntity); $this->viewData['formAction'] = 'edit'; @@ -371,6 +376,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $servicios = $reqData['servicios'] ?? []; + $paginasCuadernillo = $reqData['paginasCuadernillo'] ?? null; + $datos_presupuesto = array( 'tirada' => $tirada, 'tamanio' => $tamanio, @@ -378,6 +385,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'clienteId' => $cliente_id, 'isColor' => $isColor, 'isHq' => $isHq, + 'paginasCuadernillo' => $paginasCuadernillo, 'interior' => array( 'papel_generico' => $papel_generico, @@ -600,6 +608,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $cliente_id = $reqData['datos_libro']['clienteId'] ?? -1; $isColor = intval($reqData['datos_libro']['isColor']) ?? 0; $isHq = intval($reqData['datos_libro']['isHq']) ?? 0; + $paginasCuadernillo = $reqData['datos_libro']['paginasCuadernillo'] ?? null; // Interior $papel_generico = [ @@ -637,6 +646,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'clienteId' => $cliente_id, 'isColor' => $isColor, 'isHq' => $isHq, + 'paginasCuadernillo' => $paginasCuadernillo, 'interior' => array( 'papel_generico' => $papel_generico, @@ -983,6 +993,12 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'precio_unidad' => $servicio->precio_unidad, 'margen' => $servicio->margen, ]; + + // Se comprueba que $servicio tiene paginasCuadernillo + if (isset($servicio->paginas_por_cuadernillo)) { + $data['paginas_por_cuadernillo'] = $servicio->paginas_por_cuadernillo; + } + $model->insert($data); } else if ($tipo == 'extra') { $model = new PresupuestoServiciosExtraModel(); @@ -1086,6 +1102,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $cliente_id = $datos_entrada['clienteId'] ?? -1; $isColor = $datos_entrada['isColor']; $isHq = $datos_entrada['isHq']; + $paginasCuadernillo = $datos_entrada['paginasCuadernillo'] ?? null; // Interior $papel_generico = $datos_entrada['interior']['papel_generico']; @@ -1429,6 +1446,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'alto' => $datosPedido->alto, 'POD' => $POD, 'solapas' => intval($solapasCubierta) > 0 ? 1 : 0, + 'paginasCuadernillo' => $paginasCuadernillo, ]); $costeServiciosDefecto = 0.0; foreach ($servDefecto as $servicio) { @@ -1996,4 +2014,17 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $tipo = "" . ($isColor ? "Color" : "Negro") . " " . ($isHq ? "premium" : "estándar"); return $tipo; } + + protected function obtenerPaginasCuadernillo($presupuestoEntity){ + + $model = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel'); + $lineas = $model->getResource($presupuestoEntity->id)->get()->getResultObject(); + + foreach ($lineas as $linea){ + // check if exist + if($linea->paginas_por_cuadernillo != null) + return $linea->paginas_por_cuadernillo; + } + return 32; // valor por defecto + } } diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoencuadernaciones.php b/ci4/app/Controllers/Presupuestos/Presupuestoencuadernaciones.php index 323fd818..2a617768 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestoencuadernaciones.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestoencuadernaciones.php @@ -118,6 +118,7 @@ class Presupuestoencuadernaciones extends \App\Controllers\BaseResourceControlle $alto = $reqData['alto'] ?? 0; $POD = $reqData['POD'] ?? 0; + $paginas_cuadernillo = $reqData['paginas_por_cuadernillo'] ?? null; $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); @@ -125,7 +126,7 @@ class Presupuestoencuadernaciones extends \App\Controllers\BaseResourceControlle $tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel'); if(is_null($tipo)){ if($tarifaModel->isTarifaPorHoras($tarifa_encuadernacion_id)){ - $values = $this->model->getPrecioTarifaHoras($tarifa_encuadernacion_id, $paginas, $tirada, $proveedor_id, $POD); + $values = $this->model->getPrecioTarifaHoras($tarifa_encuadernacion_id, $paginas, $tirada, $proveedor_id, $POD, $paginas_cuadernillo); }else{ $values = $this->model->getPrecioTarifa($tarifa_encuadernacion_id, $paginas, $tirada, $ancho, $alto, $proveedor_id, $POD); } diff --git a/ci4/app/Entities/Presupuestos/PresupuestoEncuadernacionesEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoEncuadernacionesEntity.php index cb8e4ce4..560fa668 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoEncuadernacionesEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoEncuadernacionesEntity.php @@ -11,6 +11,7 @@ class PresupuestoEncuadernacionesEntity extends \CodeIgniter\Entity\Entity "tarifa_encuadernado_id" => null, "proveedor_id" => null, "precio_unidad" => null, + "paginas_por_cuadernillo" => null, "tiempo" => null, "precio_total" => null, "margen" => null, @@ -22,6 +23,7 @@ class PresupuestoEncuadernacionesEntity extends \CodeIgniter\Entity\Entity "tarifa_encuadernado_id" => "int", "proveedor_id" => "int", "precio_unidad" => "float", + "paginas_por_cuadernillo" => "int", "tiempo" => "float", "precio_total" => "float", "margen" => "float", diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index e61122b3..4904fd8d 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -247,6 +247,7 @@ return [ 'precio' => 'Precio', 'precioUnidad' => 'Precio unidad', 'tiempo' => 'Tiempo', + "paginasCuadernillo" => "Páginas/cuadernillo", 'precioTotal' => 'Precio total', 'serviciosDefault' => 'Servicios por defecto', 'tarifa' => 'Tarifa', diff --git a/ci4/app/Language/es/TarifaAcabadoLineas.php b/ci4/app/Language/es/TarifaAcabadoLineas.php index 6a671ac7..47b1b295 100755 --- a/ci4/app/Language/es/TarifaAcabadoLineas.php +++ b/ci4/app/Language/es/TarifaAcabadoLineas.php @@ -6,8 +6,8 @@ return [ 'id' => 'ID', 'moduleTitle' => 'Tarifa Acabado Líneas', 'deleteLine' => 'el registro seleccionado', - 'precioMax' => 'Precio Max', - 'precioMin' => 'Precio Min', + 'precioMax' => 'Precio T. Mín', + 'precioMin' => 'Precio T. Máx', 'precioUnidad' => 'Precio Unidad', 'tiradaMax' => 'Tirada Max', 'tiradaMin' => 'Tirada Min', diff --git a/ci4/app/Language/es/TarifaManipuladoLineas.php b/ci4/app/Language/es/TarifaManipuladoLineas.php index 93ac435b..9a5afebd 100755 --- a/ci4/app/Language/es/TarifaManipuladoLineas.php +++ b/ci4/app/Language/es/TarifaManipuladoLineas.php @@ -6,8 +6,8 @@ return [ 'id' => 'ID', 'moduleTitle' => 'Tarifa Manipulado Lineas', 'deleteLine' => 'el registro seleccionado', - 'precioMax' => 'Precio Max', - 'precioMin' => 'Precio Min', + 'precioMax' => 'Precio T. Mín', + 'precioMin' => 'Precio T. Máx', 'precioUnidad' => 'Precio Unidad', 'tiradaMax' => 'Tirada Max', 'tiradaMin' => 'Tirada Min', diff --git a/ci4/app/Language/es/Tarifaencuadernacion.php b/ci4/app/Language/es/Tarifaencuadernacion.php index ad8accb7..6627cc2d 100755 --- a/ci4/app/Language/es/Tarifaencuadernacion.php +++ b/ci4/app/Language/es/Tarifaencuadernacion.php @@ -10,8 +10,8 @@ return [ 'id' => 'ID', 'moduleTitle' => 'Tarifas Encuadernación', 'nombre' => 'Nombre', - 'precioMax' => 'Precio Max', - 'precioMin' => 'Precio Min', + 'precioMax' => 'Precio T. Mín', + 'precioMin' => 'Precio T. Máx', 'importeFijo' => 'Importe Fijo', 'tarifaencuadernacion' => 'Tarifa Encuadernación', 'tarifaencuadernacionList' => 'Lista Tarifas Encuadernación', diff --git a/ci4/app/Language/es/Tarifamanipulado.php b/ci4/app/Language/es/Tarifamanipulado.php index 3e1fc7c5..9e391d46 100755 --- a/ci4/app/Language/es/Tarifamanipulado.php +++ b/ci4/app/Language/es/Tarifamanipulado.php @@ -10,8 +10,8 @@ return [ 'id' => 'ID', 'moduleTitle' => 'Tarifas Manipulado', 'nombre' => 'Nombre', - 'precioMax' => 'Precio Max', - 'precioMin' => 'Precio Min', + 'precioMax' => 'Precio T. Mín', + 'precioMin' => 'Precio T. Máx', 'importeFijo' => 'Importe Fijo', 'mostrar_en_presupuesto' => 'Mostrar en presupuesto', 'tarifamanipulado' => 'Tarifa Manipulado', diff --git a/ci4/app/Models/Facturas/FacturaLineaModel.php b/ci4/app/Models/Facturas/FacturaLineaModel.php index b808ac8c..2abb52e2 100644 --- a/ci4/app/Models/Facturas/FacturaLineaModel.php +++ b/ci4/app/Models/Facturas/FacturaLineaModel.php @@ -54,6 +54,76 @@ class FacturaLineaModel extends \App\Models\BaseModel { return $builder; } + + public function getResourceResumenIVAsForPdf($factura_id = -1) + { + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.iva, + ROUND(SUM(t1.base), 2) AS base, + ROUND(SUM(t1.total_iva), 2) AS total_iva, + ROUND(SUM(t1.total), 2) AS total" + ) + ->where("t1.factura_id", $factura_id) + ->where("t1.deleted_at", null) + ->groupBy('t1.iva') + ->orderBy('t1.iva', 'ASC'); // Ordena por iva en forma ascendente + + return $builder; + } + + + /** + * Get resource data for creating PDFs. + * + * @param string $search + * + * @return \CodeIgniter\Database\BaseBuilder + */ + public function getResourceForPdf($factura_id = -1) + { + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.id AS id, t1.factura_id AS factura_id, + t1.pedido_linea_impresion_id AS pedido_linea_impresion_id, t1.pedido_maquetacion_id AS pedido_maquetacion_id, + t1.descripcion AS descripcion, t1.cantidad as cantidad, t1.precio_unidad AS precio_unidad, t1.iva AS iva, + t1.base AS base, t1.total_iva AS total_iva, t1.total AS total, t1.data AS data" + ) + ->where("t1.factura_id", $factura_id) + ->where("t1.deleted_at", null); + + return $builder; + } + + /** + * Get resource data for creating PDFs. + * + * @param string $search + * + * @return \CodeIgniter\Database\BaseBuilder + */ + public function getResourceForExcel($factura_id = -1) + { + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t2.numero AS ref_factura, + t3.pedido_id AS pedido_id, + t4.referencia_cliente AS referencia_cliente, + t1.base AS base" + ) + ->join("facturas t2", "t2.id = t1.factura_id", "left") + ->join("pedidos_linea t3", "t3.id = t1.pedido_linea_impresion_id", "left") + ->join("presupuestos t4", "t4.id = t3.presupuesto_id", "left") + ->where("t1.factura_id", $factura_id) + ->where("t1.deleted_at", null); + + return $builder; + } + + public function addFacturaPedidoLinea($factura_id, $pedido_linea_id, $cantidad) { $data = [ diff --git a/ci4/app/Models/Facturas/FacturaModel.php b/ci4/app/Models/Facturas/FacturaModel.php index ccdf7f43..f79d5044 100644 --- a/ci4/app/Models/Facturas/FacturaModel.php +++ b/ci4/app/Models/Facturas/FacturaModel.php @@ -102,6 +102,41 @@ class FacturaModel extends \App\Models\BaseModel { } + /** + * Get resource data for creating PDFs. + * + * @param string $search + * + * @return \CodeIgniter\Database\BaseBuilder + */ + public function getResourceForPdf($factura_id = -1) + { + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.id AS id, t1.numero AS numero, DATE_FORMAT(t1.fecha_factura_at, '%d/%m/%Y') AS fecha_factura_at, + t1.base AS base, t1.total AS total, t1.pendiente AS pendiente, + t1.creditoAsegurado AS creditoAsegurado, t1.estado AS estado, t1.estado_pago AS estado_pago, + t4.nombre AS forma_pago, + DATE_FORMAT(MIN(CASE WHEN t3.fecha_vencimiento_at != '0000-00-00 00:00:00' THEN t3.fecha_vencimiento_at ELSE NULL END), '%d/%m/%Y') AS vencimiento, + t2.nombre AS cliente, t2.direccion AS cliente_direccion, t2.ciudad AS cliente_ciudad, + t2.cp AS cliente_cp, t2.cif AS cliente_cif, t2.vencimiento AS dias_vencimiento, t2.ccc AS cliente_ccc, + t5.nombre AS cliente_pais" + ); + + $builder->join("clientes t2", "t2.id = t1.cliente_id", "left"); + $builder->join("facturas_pagos t3", "t3.factura_id = t1.id", "left"); + $builder->join("formas_pago t4", "t3.forma_pago_id = t4.id", "left"); + $builder->join("lg_paises t5", "t2.pais_id = t5.id", "left"); + + $builder->where("t1.id", $factura_id); + $builder->where("t1.deleted_at IS NULL"); + $builder->groupBy("t1.id"); // Agrupa por id de la factura + + return $builder; + } + + public function getResourcePedidos($pedido_id) { $builder = $this->db diff --git a/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php b/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php index 50b45fea..3958b2ec 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php @@ -21,7 +21,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel 4 => "t1.precio_total" ]; - protected $allowedFields = ["presupuesto_id", "tarifa_encuadernado_id", "proveedor_id", "nombre", "precio_total", "precio_unidad", "tiempo", "margen"]; + protected $allowedFields = ["presupuesto_id", "tarifa_encuadernado_id", "proveedor_id", "nombre", "precio_total", "precio_unidad", "paginas_por_cuadernillo", "tiempo", "margen"]; protected $returnType = "App\Entities\Presupuestos\PresupuestoEncuadernacionesEntity"; protected $useTimestamps = true; @@ -48,7 +48,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel - public function initPresupuesto($tipo_presupuesto, $solapas, $tirada, $paginas, $ancho, $alto, $POD){ + public function initPresupuesto($tipo_presupuesto, $solapas, $tirada, $paginas, $ancho, $alto, $POD, $paginasCuadernillo = 32){ $model = model('App\Models\Presupuestos\TipoPresupuestoServiciosDefectoModel'); $tarifas_procesar = $model->get_tarifas($tipo_presupuesto, $solapas, "encuadernacion"); @@ -60,7 +60,12 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel if($modelTarifa->isTarifaPorHoras($tarifa['tarifa_id'])){ - $tiempo = $this->calcularTiempo(16, $paginas, $tirada); // ID fija. Cambiar cuando se metan maquinas de corte. Velocidad en minutos + if($tarifa['tarifa_id'] == 2 || $tarifa['tarifa_id'] == 14){ // Rústica cosido hilo vegetal y Rústica cosido hilo vegetal solapas + $tiempo = $this->calcularTiempoCosido(16, $paginas, $tirada, $paginasCuadernillo); // ID fija. Cambiar cuando se metan maquinas de corte. Velocidad en minutos + } + else{ + $tiempo = $this->calcularTiempo(16, $paginas, $tirada); // ID fija. Cambiar cuando se metan maquinas de corte. Velocidad en minutos + } $tarifa_value = $modelTarifa->getTarifaPresupuestoEncuadernacionHoras($tarifa['tarifa_id'], $tiempo, $tirada); if (count($tarifa_value)>0) { @@ -76,8 +81,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel $result_data[1] = $precio_total; $result_data[2] = $tarifa_proveedor->margen ; // margen - array_push($result_array, - (object)[ + $datos = [ 'tarifa_id'=> $tarifa['tarifa_id'], 'tarifa_nombre'=> $tarifa_proveedor->tarifa_enc_nombre, 'precio_unidad'=> $result_data[0], @@ -86,7 +90,14 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel 'margen' => $result_data[2], 'proveedor' => $tarifa_proveedor->proveedor_nombre, 'proveedor_id' => $tarifa_proveedor->proveedor_id, - ]); + ]; + + if($tarifa['tarifa_id'] == 2 || $tarifa['tarifa_id'] == 14){ + $datos['paginas_por_cuadernillo'] = $paginasCuadernillo; + } + + array_push($result_array, + (object)$datos); } usort($result_array, function($a, $b) { @@ -237,11 +248,16 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel return []; } - public function getPrecioTarifaHoras($tarifa_encuadernacion_id, $paginas, $tirada, $proveedor_id, $POD){ + public function getPrecioTarifaHoras($tarifa_encuadernacion_id, $paginas, $tirada, $proveedor_id, $POD, $paginas_cuadernillo = null){ $modelTarifa = model('App\Models\Tarifas\TarifaEncuadernacionModel'); - $tiempo = $this->calcularTiempo(16, $paginas, $tirada); // ID fija. Cambiar cuando se metan maquinas de corte. Velocidad en minutos + if($tarifa_encuadernacion_id == 2 || $tarifa_encuadernacion_id == 14){ // Rústica cosido hilo vegetal y Rústica cosido hilo vegetal solapas + $tiempo = $this->calcularTiempoCosido(16, $paginas, $tirada, $paginas_cuadernillo); // ID fija. Cambiar cuando se metan maquinas de corte. Velocidad en minutos + } + else{ + $tiempo = $this->calcularTiempo(16, $paginas, $tirada); // ID fija. Cambiar cuando se metan maquinas de corte. Velocidad en minutos + } $tarifa_value = $modelTarifa->getTarifaPresupuestoEncuadernacionHoras($tarifa_encuadernacion_id, $tiempo, $tirada, $proveedor_id); if (count($tarifa_value)>0) { @@ -256,6 +272,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel $result_data[0] = floatval($precio_total / $tirada); // Precio/unidad $result_data[1] = $precio_total; $result_data[2] = $tarifa_proveedor->margen ; // margen + array_push($ret_array, (object)[ @@ -263,6 +280,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel 'tarifa_nombre'=> $tarifa_proveedor->tarifa_enc_nombre, 'precio_unidad'=> $result_data[0], 'tiempo' => $tiempo, + 'paginas_por_cuadernillo' => $paginas_cuadernillo, 'total'=> $result_data[1], 'margen' => $result_data[2], 'proveedor' => $tarifa_proveedor->proveedor_nombre, @@ -287,6 +305,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel 'proveedor' => lang('Presupuestos.no_disponible'), 'precio_unidad'=> 0, 'tiempo' => null, + 'paginas_por_cuadernillo' => null, 'total'=> 0, 'margen' => 0, ]; @@ -355,6 +374,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel $builder->where('presupuesto_id', $presupuesto_id); $builder->where('tarifa_encuadernado_id', $tarifa->tarifa_id); $result = $builder->get()->getResultObject(); + $paginas_cuadernillo = $tarifa->paginas_por_cuadernillo??null; if(count($result)>0){ $this->db ->table($this->table . " t1") @@ -365,6 +385,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel ->set('tiempo', $tarifa->tiempo) ->set('precio_total', $tarifa->precio_total) ->set('margen', $tarifa->margen) + ->set('paginas_por_cuadernillo', $paginas_cuadernillo) ->update(); @@ -397,7 +418,8 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel ->table($this->table . " t1") ->select( "t1.id AS id, t1.tarifa_encuadernado_id AS tarifa_encuadernado_id, t1.precio_unidad AS precio_unidad, t1.tiempo AS tiempo, - t1.precio_total AS precio_total, t1.margen AS margen, t2.nombre AS nombre, t1.proveedor_id AS proveedor_id, t3.nombre AS proveedor" + t1.precio_total AS precio_total, t1.margen AS margen, t2.nombre AS nombre, t1.proveedor_id AS proveedor_id, t3.nombre AS proveedor, + t1.paginas_por_cuadernillo AS paginas_por_cuadernillo" ); $builder->where('t1.presupuesto_id', $presupuesto_id); @@ -415,4 +437,13 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel $velocidad = $maquinaModel->getVelocidad($maquina_id); return round($cuadernillos_pedido/($velocidad*60.0), 2); } + + private function calcularTiempoCosido($maquina_id, $paginas, $tirada, $cuadernillos_por_pagina = 32){ + + $maquinaModel = model("App\Models\Configuracion\MaquinaModel"); + $velocidad = $maquinaModel->getVelocidad($maquina_id); // cuadernillos por minuto + $cuadernillos_libro = ceil($paginas/intval($cuadernillos_por_pagina)); + $cuadernillos_pedido = $cuadernillos_libro*$tirada; + return round($cuadernillos_pedido/($velocidad*60.0), 2); // tiempo en segundos + } } diff --git a/ci4/app/Services/PresupuestoClienteService.php b/ci4/app/Services/PresupuestoClienteService.php index d4e91877..ecb1f1ad 100644 --- a/ci4/app/Services/PresupuestoClienteService.php +++ b/ci4/app/Services/PresupuestoClienteService.php @@ -341,9 +341,10 @@ class PresupuestoClienteService extends BaseService $alto = $data['alto'] ?? -1; $POD = $data['POD'] ?? -1; $solapas = $data['solapas'] ?? -1; + $paginasCuadernillo = $data['paginasCuadernillo'] ?? null; $model = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel'); - $values = $model->initPresupuesto($tipo_impresion_id, $solapas, $tirada, $paginas, $ancho, $alto, $POD); + $values = $model->initPresupuesto($tipo_impresion_id, $solapas, $tirada, $paginas, $ancho, $alto, $POD, $paginasCuadernillo); return $values; } diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php index e7d4899e..0fe6e6f3 100755 --- a/ci4/app/Services/PresupuestoService.php +++ b/ci4/app/Services/PresupuestoService.php @@ -1421,12 +1421,14 @@ class PresupuestoService extends BaseService // Si es un presupuesto duplicado hay que buscar el proveedor más barato if($input_data['is_duplicado']){ if($tarifaModel->isTarifaPorHoras($servicio->tarifa_encuadernado_id)){ + $paginas_cuadernillo = $servicio->paginas_por_cuadernillo??null; $nueva_tarifa = $model->getPrecioTarifaHoras( $servicio->tarifa_encuadernado_id, $input_data['paginas'], $input_data['tirada'], -1, - $input_data['POD']); + $input_data['POD'], + $paginas_cuadernillo); }else{ $nueva_tarifa = $model->getPrecioTarifa( $servicio->tarifa_encuadernado_id, @@ -1443,12 +1445,14 @@ class PresupuestoService extends BaseService // con el mismo proveedor else{ if($tarifaModel->isTarifaPorHoras($servicio->tarifa_encuadernado_id)){ + $paginas_cuadernillo = $servicio->paginas_por_cuadernillo??null; $nueva_tarifa = $model->getPrecioTarifaHoras( $servicio->tarifa_encuadernado_id, $input_data['paginas'], $input_data['tirada'], $servicio->proveedor_id, - $input_data['POD']); + $input_data['POD'], + $paginas_cuadernillo); }else{ $nueva_tarifa = $model->getPrecioTarifa( $servicio->tarifa_encuadernado_id, diff --git a/ci4/app/Views/themes/vuexy/form/facturas/_facturaCabeceraItems.php b/ci4/app/Views/themes/vuexy/form/facturas/_facturaCabeceraItems.php index 4bba5e7f..06227a6f 100644 --- a/ci4/app/Views/themes/vuexy/form/facturas/_facturaCabeceraItems.php +++ b/ci4/app/Views/themes/vuexy/form/facturas/_facturaCabeceraItems.php @@ -191,15 +191,15 @@ - - + + id), + '' . + lang("Facturas.exportarLineas"), + [ + "class" => "btn btn-label-primary float-start me-sm-3 me-1", + ] + ) ?>