From b9f28c5ee8312a7b30832427191299636be04a46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Jim=C3=A9nez?= Date: Fri, 23 Aug 2024 13:44:24 +0200 Subject: [PATCH] =?UTF-8?q?paginas=20por=20cuadernillo=20a=C3=B1adido=20a?= =?UTF-8?q?=20presupuesto=20comercial?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Presupuestoencuadernaciones.php | 3 +- .../PresupuestoEncuadernacionesEntity.php | 2 + ci4/app/Language/es/Presupuestos.php | 1 + .../PresupuestoEncuadernacionesModel.php | 47 ++++++++-- ci4/app/Services/PresupuestoService.php | 8 +- .../buscador/viewBuscadorList.php | 2 +- .../cosidotapablanda/_datosServiciosItems.js | 94 +++++++++++++++---- .../cosidotapablanda/_datosServiciosItems.php | 1 + 8 files changed, 129 insertions(+), 29 deletions(-) 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/Models/Presupuestos/PresupuestoEncuadernacionesModel.php b/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php index 50b45fea..0a3d21df 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; @@ -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); // 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'] = 32; // valor por defecto + } + + 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/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/presupuestos/buscador/viewBuscadorList.php b/ci4/app/Views/themes/vuexy/form/presupuestos/buscador/viewBuscadorList.php index 3615d2e6..f98cf37b 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/buscador/viewBuscadorList.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/buscador/viewBuscadorList.php @@ -173,7 +173,7 @@ theTable = $('#tableOfPresupuestos').DataTable({ } ], stateSave: false, - order: [[1, 'asc']], + order: [[1, 'desc']], language: { url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" }, diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.js b/ci4/app/Views/themes/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.js index 3a83be01..9ecd91ec 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.js +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.js @@ -518,7 +518,7 @@ function init_servicio_encuadernado(){ const tarifa_id = element.tarifa_encuadernado_id var proveedor_nombre = element.proveedor===null? window.Presupuestos.no_disponible: element.proveedor - tableServiciosEnc.row.add([ + var linea = [ element.tarifa_encuadernado_id, element.nombre, '', '' + parseFloat(element.precio_unidad).toFixed(2) + '', + (element.hasOwnProperty('paginas_por_cuadernillo') && element.paginas_por_cuadernillo!=null)?selectForCuadernillos(element.tarifa_encuadernado_id, element.paginas_por_cuadernillo):'', '' + convertirTiempo(element.tiempo) + '', '', '', '' - ]).draw(false) + ] + + tableServiciosEnc.row.add(linea).draw(false) $('#precio_total_encuadernado_' + element.tarifa_encuadernado_id).on('change', function(){ updatePresupuesto({ @@ -583,12 +586,38 @@ function init_servicio_encuadernado(){ cache: true } }); - $('#proveedor_enc_' + element.tarifa_encuadernado_id).on('change', proveedor_enc_event) + $('#proveedor_enc_' + element.tarifa_encuadernado_id).on('change', select_enc_event) + + if(element.hasOwnProperty('paginas_por_cuadernillo') && element.paginas_por_cuadernillo!=null){ + + $('#cuadernillos_' + element.tarifa_encuadernado_id).select2({ + allowClear: false, + minimumResultsForSearch: -1, + }); + + $('#cuadernillos_' + element.tarifa_encuadernado_id).on('change', select_enc_event) + } + }); check_serv_enc_error() } +function selectForCuadernillos(tarifa_id, select_value){ + const value_list = [32, 28, 24, 20, 16]; + var string = + ''; + return string; +} + function convertirTiempo(horas){ if(horas != null){ if(parseFloat(horas)>0){ @@ -602,28 +631,45 @@ function convertirTiempo(horas){ else{ return ""; } + } else{ return ""; } } -function proveedor_enc_event(){ +function select_enc_event(){ + const dimension = getDimensionLibro(); + if(parseInt($('#tirada').val())>0){ - var tirada = parseInt($('#tirada').val()) + var tirada = parseInt($('#tirada').val()) + parseInt($('#merma').val()) } else{ var tirada = 0 } + var tarifa_id = null; + if(this.id.includes('proveedor_enc')){ + tarifa_id = this.id.split('_')[2]; + } + else{ + tarifa_id = this.id.split('_')[1]; + } + // se checkea si el elemento #cuadernillos_ + tarifa_id existe + var paginas_por_cuadernillo = null; + if($('#cuadernillos_' + tarifa_id).length){ + paginas_por_cuadernillo = parseInt($('#cuadernillos_' + tarifa_id).select2('data')[0].id); + } + var datos = { - tarifa_encuadernacion_id: this.id.split('_')[2], + tarifa_encuadernacion_id: tarifa_id, paginas: parseInt($('#paginas').val())>0?parseInt($('#paginas').val()):0, tirada: tirada, ancho: dimension.ancho, alto: dimension.alto, - proveedor_id: parseInt($('#' + this.id).select2('data')[0].id), + paginas_por_cuadernillo: paginas_por_cuadernillo, + proveedor_id: parseInt($('#proveedor_enc_' + tarifa_id).select2('data')[0].id), POD: parseInt($('#POD').val()) }; datos = Object.assign(datos, window.token_ajax); @@ -677,7 +723,7 @@ async function get_tarifas_enc(tipo=null, tarifa_id = -1){ const dimension = getDimensionLibro(); if(parseInt($('#tirada').val())>0){ - var tirada = parseInt($('#tirada').val()) + var tirada = parseInt($('#tirada').val()) + parseInt($('#merma').val()) } else{ var tirada = 0 @@ -719,6 +765,7 @@ async function get_tarifas_enc(tipo=null, tarifa_id = -1){ '' + '', '' + parseFloat(row.precio_unidad).toFixed(2) + '', + (row.hasOwnProperty('paginas_por_cuadernillo') && row.paginas_por_cuadernillo!=null)?selectForCuadernillos(row.tarifa_id, 32):'', '' + convertirTiempo(row.tiempo) + '', '', '', @@ -745,7 +792,7 @@ async function get_tarifas_enc(tipo=null, tarifa_id = -1){ data: function (params) { if( parseInt( $('#tirada').val() )>0){ - var tirada = parseInt($('#tirada').val()) + var tirada = parseInt($('#tirada').val()) + parseInt($('#merma').val()) } else{ var tirada = 0 @@ -755,8 +802,8 @@ async function get_tarifas_enc(tipo=null, tarifa_id = -1){ tarifa_id: row.tarifa_id, paginas: parseInt($('#paginas').val())>0?parseInt($('#paginas').val()):0, tirada: tirada, - ancho: ancho_libro, - alto: alto_libro, + ancho: dimension.ancho, + alto: dimension.alto, searchtxt: params.term, // search term } return_data = Object.assign(return_data, window.token_ajax); @@ -773,9 +820,17 @@ async function get_tarifas_enc(tipo=null, tarifa_id = -1){ } }); - $('#proveedor_enc_' + row.tarifa_id).on('change', proveedor_enc_event) - + $('#proveedor_enc_' + row.tarifa_id).on('change', select_enc_event) + + if(row.hasOwnProperty('paginas_por_cuadernillo') && row.paginas_por_cuadernillo!=null){ + $('#cuadernillos_' + row.tarifa_id).select2({ + allowClear: false, + minimumResultsForSearch: -1, + }); + + $('#cuadernillos_' + row.tarifa_id).on('change', select_enc_event) + } }); check_serv_enc_error() yeniden(data[window.csrf_token]); @@ -821,16 +876,21 @@ function get_datos_encuadernacion(){ case 3: values['precio_unidad'] = $(this).text() break - case 4: + case 4: + values['paginas_por_cuadernillo'] = $(this).children(":first").val() + // Si el valor es "undefined" se pone a null + if(values['paginas_por_cuadernillo'] == "undefined") + values['paginas_por_cuadernillo'] = null + case 5: values['tiempo'] = $(this).text() // se pasa el string hh:mm:ss a horas if(values['tiempo'] != null) values['tiempo'] = parseInt(values['tiempo'].split(':')[0]) + parseInt(values['tiempo'].split(':')[1])/60 + parseInt(values['tiempo'].split(':')[2])/3600 break - case 5: + case 6: values['precio_total'] = $(this).children(":first").val() break - case 6: + case 7: values['margen'] = $(this).text() break } @@ -1709,7 +1769,7 @@ async function actualizar_servicios(update_preimpresion=false){ $('#precio_unidad_encuadernado_' + line[0].tarifa_id).text(parseFloat(line[0].precio_unidad).toFixed(2)) $('#precio_total_encuadernado_' + line[0].tarifa_id).val(parseFloat(line[0].total).toFixed(2)) $('#enc_margen_' + line[0].tarifa_id).val(parseFloat(line[0].margen).toFixed(2)) - $('#proveedor_enc_' + line[0].tarifa_id).on('change', proveedor_enc_event) + $('#proveedor_enc_' + line[0].tarifa_id).on('change', select_enc_event) }); check_serv_enc_error() yeniden(data[window.csrf_token]); diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.php index 09eb3fef..498fd0eb 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cosidotapablanda/_datosServiciosItems.php @@ -167,6 +167,7 @@ +