From c9bae54c29143ebb7860ce1ab99ff17ada214d89 Mon Sep 17 00:00:00 2001 From: Jaime Jimenez Date: Tue, 10 Oct 2023 10:54:54 +0200 Subject: [PATCH] trabajando en presupuesto cubiertas --- .../Maquinaspapelesimpresion.php | 17 +- .../Presupuestos/Cosidotapablanda.php | 687 ++++++------------ ci4/app/Controllers/Test.php | 235 +++++- ci4/app/Entities/Configuracion/Maquina.php | 8 +- ci4/app/Language/en/Maquinas.php | 4 +- ci4/app/Language/en/Presupuestos.php | 28 + ci4/app/Language/es/Maquinas.php | 4 +- ci4/app/Language/es/Presupuestos.php | 9 + ci4/app/Models/Configuracion/MaquinaModel.php | 42 +- .../MaquinasPapelesImpresionModel.php | 5 + .../Configuracion/PapelGenericoModel.php | 15 +- .../PapelImpresionTipologiaModel.php | 9 +- ci4/app/Services/PresupuestoService.php | 327 +++++---- .../maquinas/_maquinaFormItems.php | 8 +- .../_datosPresupuestoClienteItems.php | 87 +-- .../cosidotapablanda/comparador.js | 371 +++++++++- .../viewCosidotapablandaForm.php | 654 +++++++++++------ 17 files changed, 1580 insertions(+), 930 deletions(-) diff --git a/ci4/app/Controllers/Configuracion/Maquinaspapelesimpresion.php b/ci4/app/Controllers/Configuracion/Maquinaspapelesimpresion.php index 5079aee9..15cfc882 100644 --- a/ci4/app/Controllers/Configuracion/Maquinaspapelesimpresion.php +++ b/ci4/app/Controllers/Configuracion/Maquinaspapelesimpresion.php @@ -125,14 +125,25 @@ class Maquinaspapelesimpresion extends \App\Controllers\GoBaseResourceController $start = $reqData['start'] ?? 0; $length = $reqData['length'] ?? 5; $search = $reqData['search']['value']; - $requestedOrder = $reqData['order']['0']['column'] ?? 1; - $order = MaquinasPapelesImpresionModel::SORTABLE_2[$requestedOrder >= 0 ? $requestedOrder : 1]; + $requestedOrder = $reqData['order']['0']['column'] ?? 0; + $requestedOrder2 = $reqData['order']['1']['column'] ?? $requestedOrder; + $requestedOrder3 = $reqData['order']['2']['column'] ?? $requestedOrder; + $requestedOrder4 = $reqData['order']['3']['column'] ?? $requestedOrder; + $order = MaquinasPapelesImpresionModel::SORTABLE_2[$requestedOrder >= 0 ? $requestedOrder : 0]; + $order2 = MaquinasPapelesImpresionModel::SORTABLE_2[$requestedOrder2 >= 0 ? $requestedOrder2 : $requestedOrder]; + $order3 = MaquinasPapelesImpresionModel::SORTABLE_2[$requestedOrder3 >= 0 ? $requestedOrder3 : $requestedOrder]; + $order4 = MaquinasPapelesImpresionModel::SORTABLE_2[$requestedOrder4 >= 0 ? $requestedOrder4 : $requestedOrder]; $dir = $reqData['order']['0']['dir'] ?? 'asc'; + $dir2 = $reqData['order']['1']['dir'] ?? $dir; + $dir3 = $reqData['order']['2']['dir'] ?? $dir; + $dir4= $reqData['order']['3']['dir'] ?? $dir; + $papel_id = $reqData['papel_id'] ?? -1; $isRotativa = $reqData['isRotativa'] ?? -1; - $resourceData = $this->model->getResource_maquinas($search, $papel_id, $isRotativa)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); + $resourceData = $this->model->getResource_maquinas($search, $papel_id, $isRotativa) + ->orderBy($order, $dir)->orderBy($order2, $dir2)->orderBy($order3, $dir3)->orderBy($order4, $dir4)->limit($length, $start)->get()->getResultObject(); return $this->respond(Collection::datatable( $resourceData, diff --git a/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php b/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php index ebf3773d..87db7ff6 100644 --- a/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php +++ b/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php @@ -146,41 +146,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController $this->viewData['papelGenericoColorList'] = $this->getPapelGenericoColor(); $this->viewData['papelGenericoColorHQList'] = $this->getPapelGenericoColorHQ(); $this->viewData['papelGenericoCubiertaList'] = $this->getPapelGenericoCubierta(); - $this->viewData['papelGenericoSobrecubiertaList'] = $this->getPapelGenericoSobreCubierta(); - - - - /* - $this->viewData['formaPagoList'] = $this->getFormaPagoListItems(); - $this->viewData['tiposImpresionList'] = $this->getTiposImpresionListItems($presupuestoEntity->tipo_impresion_id ?? null); - $this->viewData['tipologiasLibroList'] = $this->getTipologiasLibroListItems($presupuestoEntity->tipologia_id ?? null); - - $this->viewData['ubicacionLibroList'] = $this->getUbicacionLibroListItems($presupuestoEntity->ubicacion_id ?? null); - $this->viewData['presupuestoEstadoList'] = $this->getPresupuestoEstadoListItems($presupuestoEntity->estado_id ?? null); - - $this->viewData['papelGenericoList'] = $this->getPapelGenericoListItems($presupuestoEntity->paginas_negro_papel_id ?? null); - $this->viewData['papelImpresionList'] = $this->getPapelImpresionListItems($presupuestoEntity->paginas_negro_papel_impresion_id ?? null); - $this->viewData['maquinaList'] = $this->getMaquinaListItems($presupuestoEntity->paginas_negro_maquina_id ?? null); - $this->viewData['maquinasTarifasImpresionList'] = $this->getMaquinasTarifasImpresionListItems($presupuestoEntity->paginas_negro_tarifa_impresion_id ?? null); - $this->viewData['papelGenericoList2'] = $this->getPapelGenericoListItems2($presupuestoEntity->paginas_color_papel_id ?? null); - $this->viewData['papelImpresionList2'] = $this->getPapelImpresionListItems2($presupuestoEntity->paginas_color_papel_impresion_id ?? null); - $this->viewData['maquinaList2'] = $this->getMaquinaListItems2($presupuestoEntity->paginas_color_maquina_id ?? null); - $this->viewData['maquinasTarifasImpresionList2'] = $this->getMaquinasTarifasImpresionListItems2($presupuestoEntity->paginas_color_tarifa_impresion_id ?? null); - $this->viewData['papelGenericoList3'] = $this->getPapelGenericoListItems3($presupuestoEntity->paginas_portada_papel_id ?? null); - $this->viewData['papelImpresionList3'] = $this->getPapelImpresionListItems3($presupuestoEntity->paginas_portada_papel_impresion_id ?? null); - $this->viewData['maquinaList3'] = $this->getMaquinaListItems3($presupuestoEntity->paginas_portada_maquina_id ?? null); - $this->viewData['maquinasTarifasImpresionList3'] = $this->getMaquinasTarifasImpresionListItems3($presupuestoEntity->paginas_portada_tarifa_impresion_id ?? null); - $this->viewData['papelGenericoList4'] = $this->getPapelGenericoListItems4($presupuestoEntity->paginas_cubierta_papel_id ?? null); - $this->viewData['papelImpresionList4'] = $this->getPapelImpresionListItems4($presupuestoEntity->paginas_cubierta_papel_impresion_id ?? null); - $this->viewData['maquinaList4'] = $this->getMaquinaListItems4($presupuestoEntity->paginas_cubierta_maquina_id ?? null); - $this->viewData['maquinasTarifasImpresionList4'] = $this->getMaquinasTarifasImpresionListItems4($presupuestoEntity->paginas_cubierta_tarifa_impresion_id ?? null); - $this->viewData['userList'] = $this->getUserListItems($presupuestoEntity->total_confirmado_user_id ?? null); - $this->viewData['userList2'] = $this->getUserListItems2($presupuestoEntity->aprobado_user_id ?? null); - $this->viewData['userList3'] = $this->getUserListItems3($presupuestoEntity->pedido_espera_user_id ?? null); - $this->viewData['paginasCubiertaList'] = $this->getPaginasCubiertaOptions(); - $this->viewData['paginasPortadaList'] = $this->getPaginasPortadaOptions(); - */ $this->viewData['formAction'] = route_to('createCosidotapablanda'); $this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . lang('Presupuestos.moduleTitleCosidoTB') . ' ' . lang('Basic.global.addNewSuffix'); @@ -392,9 +358,9 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); - $table_type = $reqData['table_type'] ?? null; + $type = $reqData['type'] ?? null; - if (is_null($table_type)) { + if (is_null($type)) { if (!isset($reqData['draw']) || !isset($reqData['columns'])) { $errstr = 'No data available in response to this specific request.'; $response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr); @@ -412,7 +378,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController - if (is_null($table_type)) { + if (is_null($type)) { $resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); foreach ($resourceData as $item) : if (isset($item->comentarios_pdf) && strlen($item->comentarios_pdf) > 100) : @@ -451,40 +417,74 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController endforeach; } else { - switch ($table_type) { - case 'comp_int_bn': + $isColor = $reqData['color'] ?? false; + $isHq = $reqData['hq'] ?? false; + + $datosPedido = (object)array( + 'paginas' => intval($reqData['paginas']) ?? 0, + 'tirada' => intval($reqData['tirada']) ?? 0, + 'merma' => intval($reqData['merma']) ?? 0, + 'ancho' => intval($reqData['ancho']) ?? 100000, + 'alto' => intval($reqData['alto']) ?? 100000, + 'isCosido' => true, // JJO esto es custom por cada tipo de presupuesto + ); - $datosPedido = (object)array( - 'paginas' => intval($reqData['paginas']) ?? 0, - 'tirada' => intval($reqData['tirada']) ?? 0, - 'merma' => intval($reqData['merma']) ?? 0, - 'ancho' => intval($reqData['alto']) ?? 100000, - 'alto' => intval($reqData['ancho']) ?? 100000, - 'isCosido' => true, // JJO esto es custom por cada tipo de presupuesto - ); + $papel_generico = [ + 'id' => $reqData['papel_generico_id'] ?? 0, + 'nombre' => $reqData['papel_generico'] ?? "", + ]; + + $gramaje = $reqData['gramaje'] ?? 0; - $papel_generico = [ - 'id' => $reqData['papel_generico_id'] ?? 0, - 'nombre' => $reqData['papel_generico'] ?? "", - ]; - - $gramaje = $reqData['gramaje'] ?? 0; + if ($type=='interior') { - $resourceData = $this->getCompBnData($datosPedido, $papel_generico, $gramaje); - - $newTokenHash = csrf_hash(); - $csrfTokenName = csrf_token(); - $data = [ - 'lineas' => $resourceData, - $csrfTokenName => $newTokenHash - ]; - - return $this->respond($data); - break; - - default: - break; + $resourceData = $this->getCompIntData($type, $datosPedido, $papel_generico, $gramaje, $isColor, $isHq); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'lineas' => $resourceData, + $csrfTokenName => $newTokenHash + ]; + + return $this->respond($data); } + else if ($type=='interior_rot') { + + $paginas = (object)array( + 'negro' => intval($reqData['paginas_negro']) ?? 0, + 'color' => intval($reqData['paginas_color']) ?? 0, + ); + + $resourceData = $this->getCompIntRotData($datosPedido, $papel_generico, $gramaje, $paginas); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'lineas' => $resourceData, + $csrfTokenName => $newTokenHash + ]; + + return $this->respond($data); + } + else if ($type=='cubierta') { + + $datosPedido->solapas = $reqData['solapas']; + $datosPedido->solapas_ancho = $reqData['solapas_ancho']; + + $resourceData = $this->getCompIntData($type, $datosPedido, $papel_generico, $gramaje, $isColor, $isHq); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'lineas' => $resourceData, + $csrfTokenName => $newTokenHash + ]; + + return $this->respond($data); + } + + } return $this->respond(Collection::datatable( @@ -497,18 +497,37 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController } } - private function getCompBnData($datosPedido, $papel_generico, $gramaje) + public function getCompIntData($uso, $datosPedido, $papel_generico, $gramaje, $isColor, $isHq) { - $uso = 'interior'; - $tipo = 'negro'; + $tipo = $isColor? ($isHq?'colorhq':'color'): ($isHq?'negrohq':'negro'); - $opciones_papel = array( - 'bn' => 1, - 'cubierta' => 0, - 'sobrecubierta' => 0, - 'rotativa' => 0, - ); + if( $uso == 'cubierta' ){ + $opciones_papel = array( + 'cubierta' => 1, + 'rotativa' => 0, + ); + } + else if ( $uso == 'sobrecubierta' ){ + $opciones_papel = array( + 'sobrecubierta' => 1, + 'rotativa' => 0, + ); + } + else if( $isColor ){ + $opciones_papel = array( + 'color' => 1, + 'rotativa' => 0, + ); + } + else{ + $opciones_papel = array( + 'bn' => 1, + 'rotativa' => 0, + ); + } + + // Se obtienen los papeles disponibles $papelimpresionmodel = new PapelImpresionModel(); $papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto( @@ -517,13 +536,13 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController options: $opciones_papel ); - $lineas = array(); // Para cada papel, se obtienen las maquinas disponibles foreach ($papeles as $papel) { + $maquinamodel = new MaquinaModel(); $maquinas = $maquinamodel->getMaquinaImpresionForPresupuesto( - is_rotativa: $papel->rotativa, + is_rotativa: 0, tarifa_tipo: $tipo, tirada: $datosPedido->tirada + $datosPedido->merma, papel_impresion_id: $papel->id, @@ -531,8 +550,12 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController // Se recorren las máquinas y se calcula el coste de linea por cada una foreach ($maquinas as $maquina) { + $tarifamodel = new MaquinasTarifasImpresionModel(); $tarifa = $tarifamodel->getTarifa($maquina->maquina_id, $uso, $tipo); + if(!is_float($tarifa)){ + continue; + } $linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa); $linea['fields']['maquina'] = $maquina->maquina; $linea['fields']['maquina_id'] = $maquina->maquina_id; @@ -546,7 +569,123 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController array_push($lineas, $linea); } } + return $lineas; + } + public function getCompIntRotData($datosPedido, $papel_generico, $gramaje, $paginas) + { + + $uso = 'interior'; + + $tipo = $paginas->color>0? 'color': 'negro'; + + + $parametrosRotativa = (object)array( + 'a_favor_fibra' => 0, // este parametro se cambia para comprobar + // en las dos direcciones (menos en rustica fresada que es siempre 1) + 'bnPages' => $paginas->negro, + 'colorPages' => $paginas->color, + 'rotativa_gota_negro' => 0, + 'rotativa_gota_color' => 0, + ); + + $opciones_papel = array( + 'rotativa' => 1, + ); + + $tipo = array(); + if( $paginas->color > 0 ){ + $tipo[] = 'color'; + $opciones_papel['color'] = 1; + } + if( $paginas->negro > 0 ){ + $opciones_papel['bn'] = 1; + $tipo[] = 'negro'; + } + + // Se obtienen los papeles disponibles + $papelimpresionmodel = new PapelImpresionModel(); + $papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto( + papel_generico_id: $papel_generico['id'], + gramaje: $gramaje, + options: $opciones_papel + ); + + $lineas = array(); + // Para cada papel, se obtienen las maquinas disponibles + foreach ($papeles as $papel) { + + $papelImpresionTipologiaModel = new \App\Models\Configuracion\PapelImpresionTipologiaModel(); + $datosTipologias = $papelImpresionTipologiaModel + ->findTipologiasForPapelImpresion($papel->id, $parametrosRotativa->colorPages>0?'color':'negro') + ->get()->getResultObject(); + + $parametrosRotativa->rotativa_gota_negro = $datosTipologias[0]->gota_negro; + $parametrosRotativa->rotativa_gota_color = $datosTipologias[0]->gota_color; + $parametrosRotativa->rotativa_negro = $datosTipologias[0]->negro; + $parametrosRotativa->rotativa_cyan = $datosTipologias[0]->cyan; + $parametrosRotativa->rotativa_magenta = $datosTipologias[0]->magenta; + $parametrosRotativa->rotativa_amarillo = $datosTipologias[0]->amarillo; + + $maquinamodel = new MaquinaModel(); + + $maquinas = $maquinamodel->getMaquinaImpresionForPresupuesto( + is_rotativa: 1, + tarifa_tipo: $tipo, + tirada: $datosPedido->tirada + $datosPedido->merma, + papel_impresion_id: $papel->id, + ); + + // Se recorren las máquinas y se calcula el coste de linea por cada una + foreach ($maquinas as $maquina) { + + for ($i = 0; $i <= 1; $i++) { + + $parametrosRotativa->a_favor_fibra = $i; + + $tarifamodel = new MaquinasTarifasImpresionModel(); + $tarifa = $tarifamodel->getTarifa($maquina->maquina_id, $uso, is_array($tipo)?'color':$tipo); + if(!is_float($tarifa)){ + continue; + } + + // precio del pliego de impresion + $linea['fields'] = PresupuestoService::getCostesLineaRotativa($maquina, $papel, $datosPedido, $parametrosRotativa); + + $precio_pliego_impresion = PresupuestoService::getPrecioPliego($maquina, $papel, $datosPedido->paginas); + $linea['fields']['precios_pliegos'] = $precio_pliego_impresion; + + $linea['fields']['precio_libro'] = $linea['fields']['pliegos_libro'] * $precio_pliego_impresion; + // Precio papel pedido + $linea['fields']['precio_pedido'] = $linea['fields']['precio_libro'] * ($datosPedido->tirada + $datosPedido->merma); + + $linea['fields']['a_favor_fibra'] = $parametrosRotativa->a_favor_fibra; + $linea['fields']['maquina'] = $maquina->maquina; + $linea['fields']['maquina_id'] = $maquina->maquina_id; + $linea['fields']['papel_impresion'] = $papel->nombre; + $linea['fields']['papel_impresion_id'] = $papel->id; + $linea['fields']['paginas'] = $datosPedido->paginas; + $linea['fields']['gramaje'] = $gramaje; + $linea['fields']['papel_generico_id'] = $papel_generico['id']; + $linea['fields']['papel_generico'] = $papel_generico['nombre']; + + $linea['fields']['posicion_formas'] = $parametrosRotativa->a_favor_fibra ? 'h' : 'v'; + $linea['fields']['num_formas_horizontales'] = floor($linea['fields']['factor_anchura']); + $linea['fields']['num_formas_verticales'] = floor($linea['fields']['factor_altura']); + + // impresion + $linea['fields']['precio_click'] = $tarifa; + $linea['fields']['precio_click_pedido'] = $linea['fields']['clicks_pedido'] * $linea['fields']['precio_click']; + + + // total linea rotativa + $linea['fields']['total_impresion'] = $linea['fields']['precio_pedido'] + $linea['fields']['precio_click_pedido'] + $linea['fields']['precio_tinta'] + + $linea['fields']['total_corte']; + + array_push($lineas, $linea); + } + } + } return $lineas; } @@ -580,14 +719,15 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController $reqData = $this->request->getPost(); $tipo = $reqData['tipo'] ?? null; + $uso = $reqData['uso'] ?? null; $datos = $reqData['datos'] ?? null; - $searchStr = goSanitize($this->request->getPost('searchTerm'))[0]; + //$searchStr = goSanitize($this->request->getPost('searchTerm'))[0]; if ($tipo == 'gramaje') { // En este caso contiene el nombre del papel generico $model = new PapelGenericoModel(); - $menu = $model->getGramajeComparador($datos, $searchStr); + $menu = $model->getGramajeComparador($datos, $uso ); } @@ -700,391 +840,4 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController )); return $data; } - - /* - - - - - - protected function getUbicacionLibroListItems($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('LgUbicacionesLibros.ubicacionLibro'))])]; - if (!empty($selId)) : - $ubicacionesLibroModel = model('App\Models\Configuracion\UbicacionesLibroModel'); - - $selOption = $ubicacionesLibroModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getFormaPagoListItems() - { - $formasPagoModel = model('App\Models\Configuracion\FormasPagoModel'); - $onlyActiveOnes = true; - $data = $formasPagoModel->getAllForMenu('id, nombre', 'nombre', $onlyActiveOnes); - - return $data; - } - - - protected function getPapelImpresionListItems4($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('PapelImpresions.papelImpresion'))])]; - if (!empty($selId)) : - $papelImpresionModel = model('App\Models\Presupuestos\PapelImpresionModel'); - - $selOption = $papelImpresionModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getPresupuestoEstadoListItems($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('PresupuestoEstados.presupuestoEstado'))])]; - if (!empty($selId)) : - $presupuestoEstadoModel = model('App\Models\Presupuestos\PresupuestoEstadoModel'); - - $selOption = $presupuestoEstadoModel->where('id', $selId)->findColumn('estado'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getPapelGenericoListItems3($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('PapelGenericoes.papelGenerico'))])]; - if (!empty($selId)) : - $papelGenericoModel = model('App\Models\Presupuestos\PapelGenericoModel'); - - $selOption = $papelGenericoModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getPapelImpresionListItems2($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('PapelImpresions.papelImpresion'))])]; - if (!empty($selId)) : - $papelImpresionModel = model('App\Models\Presupuestos\PapelImpresionModel'); - - $selOption = $papelImpresionModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getMaquinaListItems3($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Maquinas.maquina'))])]; - if (!empty($selId)) : - $maquinaModel = model('App\Models\Presupuestos\MaquinaModel'); - - $selOption = $maquinaModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getMaquinasTarifasImpresionListItems2($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('MaquinasTarifasImpresions.maquinasTarifasImpresion'))])]; - if (!empty($selId)) : - $maquinasTarifasImpresionModel = model('App\Models\Presupuestos\MaquinasTarifasImpresionModel'); - - $selOption = $maquinasTarifasImpresionModel->where('id', $selId)->findColumn('precio'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getPapelGenericoListItems2($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('PapelGenericoes.papelGenerico'))])]; - if (!empty($selId)) : - $papelGenericoModel = model('App\Models\Presupuestos\PapelGenericoModel'); - - $selOption = $papelGenericoModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getMaquinaListItems($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Maquinas.maquina'))])]; - if (!empty($selId)) : - $maquinaModel = model('App\Models\Presupuestos\MaquinaModel'); - - $selOption = $maquinaModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - - - protected function getMaquinaListItems2($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Maquinas.maquina'))])]; - if (!empty($selId)) : - $maquinaModel = model('App\Models\Presupuestos\MaquinaModel'); - - $selOption = $maquinaModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getTipologiasLibroListItems($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('TipologiasLibros.tipologiasLibro'))])]; - if (!empty($selId)) : - $tipologiasLibroModel = model('App\Models\Presupuestos\TipologiasLibroModel'); - - $selOption = $tipologiasLibroModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getPapelImpresionListItems3($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('PapelImpresions.papelImpresion'))])]; - if (!empty($selId)) : - $papelImpresionModel = model('App\Models\Presupuestos\PapelImpresionModel'); - - $selOption = $papelImpresionModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getMaquinasTarifasImpresionListItems4($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('MaquinasTarifasImpresions.maquinasTarifasImpresion'))])]; - if (!empty($selId)) : - $maquinasTarifasImpresionModel = model('App\Models\Presupuestos\MaquinasTarifasImpresionModel'); - - $selOption = $maquinasTarifasImpresionModel->where('id', $selId)->findColumn('precio'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getUserListItems($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Users.user'))])]; - if (!empty($selId)) : - $userModel = model('App\Models\Presupuestos\UserModel'); - - $selOption = $userModel->where('id_user', $selId)->findColumn('first_name'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getMaquinasTarifasImpresionListItems3($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('MaquinasTarifasImpresions.maquinasTarifasImpresion'))])]; - if (!empty($selId)) : - $maquinasTarifasImpresionModel = model('App\Models\Presupuestos\MaquinasTarifasImpresionModel'); - - $selOption = $maquinasTarifasImpresionModel->where('id', $selId)->findColumn('id'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getUserListItems3($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Users.user'))])]; - if (!empty($selId)) : - $userModel = model('App\Models\Presupuestos\UserModel'); - - $selOption = $userModel->where('id_user', $selId)->findColumn('first_name'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getPapelImpresionListItems($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('PapelImpresions.papelImpresion'))])]; - if (!empty($selId)) : - $papelImpresionModel = model('App\Models\Presupuestos\PapelImpresionModel'); - - $selOption = $papelImpresionModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getTiposImpresionListItems($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('TiposImpresions.tiposImpresion'))])]; - if (!empty($selId)) : - $tiposImpresionModel = model('App\Models\Presupuestos\TiposImpresionModel'); - - $selOption = $tiposImpresionModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getMaquinasTarifasImpresionListItems($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('MaquinasTarifasImpresions.maquinasTarifasImpresion'))])]; - if (!empty($selId)) : - $maquinasTarifasImpresionModel = model('App\Models\Presupuestos\MaquinasTarifasImpresionModel'); - - $selOption = $maquinasTarifasImpresionModel->where('id', $selId)->findColumn('precio'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getPapelGenericoListItems4($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('PapelGenericoes.papelGenerico'))])]; - if (!empty($selId)) : - $papelGenericoModel = model('App\Models\Presupuestos\PapelGenericoModel'); - - $selOption = $papelGenericoModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - - protected function getMaquinaListItems4($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Maquinas.maquina'))])]; - if (!empty($selId)) : - $maquinaModel = model('App\Models\Presupuestos\MaquinaModel'); - - $selOption = $maquinaModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getUserListItems2($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Users.user'))])]; - if (!empty($selId)) : - $userModel = model('App\Models\Presupuestos\UserModel'); - - $selOption = $userModel->where('id_user', $selId)->findColumn('first_name'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getPapelGenericoListItems($selId = null) - { - $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('PapelGenericoes.papelGenerico'))])]; - if (!empty($selId)) : - $papelGenericoModel = model('App\Models\Presupuestos\PapelGenericoModel'); - - $selOption = $papelGenericoModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : - $data[$selId] = $selOption[0]; - endif; - endif; - return $data; - } - - - protected function getPaginasCubiertaOptions() - { - $paginasCubiertaOptions = [ - '' => lang('Basic.global.pleaseSelect'), - '4x0' => '4x0', - '4x4' => '4x4', - ]; - return $paginasCubiertaOptions; - } - - - - protected function getPaginasPortadaOptions() - { - $paginasPortadaOptions = [ - '' => lang('Basic.global.pleaseSelect'), - '4x0' => '4x0', - '4x4' => '4x4', - ]; - return $paginasPortadaOptions; - } - */ } diff --git a/ci4/app/Controllers/Test.php b/ci4/app/Controllers/Test.php index c6d7621a..758d560e 100644 --- a/ci4/app/Controllers/Test.php +++ b/ci4/app/Controllers/Test.php @@ -3,11 +3,12 @@ namespace App\Controllers; use App\Controllers\BaseController; +use App\Models\Configuracion\MaquinasTarifasImpresionModel; +use App\Models\Configuracion\MaquinaModel; +use App\Services\PresupuestoService; class Test extends BaseController { - - function __construct() { @@ -15,21 +16,237 @@ class Test extends BaseController public function index() { - //PresupuestoService::test(); - return view('themes/backend/vuexy/form/test_js/viewTest'); + $this->testLineasIntPlanaCubierta(); } - function test_js() + public function testGetPrecioPliegoRotativa() { - /*$this->response->setHeader('Content-Type', 'text/javascript'); - return view('themes/backend/vuexy/form/test_js/test_js.js');*/ + $paginas=240; + + $papel_impresion = (object)array( + 'id' => 198, + 'gramaje' => 90, + 'precio_tonelada'=> 1600 + ); + + $maquina = (object)array( + //'id' => 48, + 'alto' => 800, + 'ancho' => 520, + ); + + $precio = PresupuestoService::getPrecioPliego($maquina, $papel_impresion, $paginas); + + var_dump($precio); } - public function pruebaJJO() + public function testGetMaquinasFromTarifas() { - //PresupuestoService::test2(); + $maquinamodel = new MaquinaModel(); + + //$tarifa_tipo = ['negro', 'color']; + //$tarifa_tipo = 'color'; + $tarifa_tipo = 'negro'; + $papel_impresion_id = 5; + $maquina = $maquinamodel->getMaquinaImpresionForPresupuesto(1, $tarifa_tipo, 100, $papel_impresion_id); + echo '
';
+        var_dump($maquina);
+        echo '
'; + } + + public static function testLineasIntPlana() + { + $uso = 'negro'; + $tipo = 'color'; + $datosPedido = (object)array( + 'paginas' => 200, + 'tirada' => 500, + 'merma' => 10, + 'merma_portada' => 10, + 'ancho' => 165, + 'alto' => 148, + 'isCosido' => true, + ); + + $maquina_model = new \App\Models\Configuracion\MaquinaModel(); + + $opciones_papel = array( + 'bn' => 1, + 'cubierta' => 0, + 'sobrecubierta' => 0, + 'rotativa' => 0, + ); + $papelimpresionmodel = new \App\Models\Configuracion\PapelImpresionModel(); + $papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto( + papel_generico_id: 4, + gramaje: 90, + options: $opciones_papel + ); + foreach ($papeles as $papel) { + echo '-------------------------------'; + $maquinas = $maquina_model->getMaquinaImpresionForPresupuesto( + is_rotativa: $papel->rotativa, + tarifa_tipo: 'negro', + tirada: $datosPedido->tirada + $datosPedido->merma, + papel_impresion_id: $papel->id, + ); + + foreach ($maquinas as $maquina) { + + echo '----------------------------
'; + var_dump($maquina->maquina); + var_dump($papel->nombre); + $tarifa = (new \App\Models\Configuracion\MaquinasTarifasImpresionModel())->getTarifa($maquina->maquina_id, $uso, $tipo); + $linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa); + echo '
';
+                var_dump($linea);
+                echo '
'; + } + } + } + + + public static function testLineasIntPlanaCubierta() + { + echo '
';
+        $uso = 'cubierta';
+        $tipo = 'color';
+        $datosPedido = (object)array(
+            'paginas' => 200,
+            'tirada' => 500,
+            'merma' => 10,
+            'merma_portada' => 10,
+            'ancho' => 165,
+            'alto' => 148,
+            'isCosido' => true,
+            'solapas' => 0,
+            'solapas_ancho' => 0,
+        );
+
+        $maquina_model = new \App\Models\Configuracion\MaquinaModel();
+
+        $opciones_papel = array(
+            'color' => 1,
+            'cubierta' => 1,
+            'sobrecubierta' => 0,
+            'rotativa' => 0,
+        );
+        $papelimpresionmodel = new \App\Models\Configuracion\PapelImpresionModel();
+        $papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
+            papel_generico_id: 3,
+            gramaje: 100,
+            options: $opciones_papel
+        );
+        foreach ($papeles as $papel) {
+            echo '-------------------------------';
+            var_dump($papel);
+            $maquinas = $maquina_model->getMaquinaImpresionForPresupuesto(
+                is_rotativa: $papel->rotativa,
+                tarifa_tipo: 'color',
+                tirada: $datosPedido->tirada + $datosPedido->merma_portada,
+                papel_impresion_id: $papel->id,
+            );
+
+            foreach ($maquinas as $maquina) {
+
+                echo '----------------------------
'; + var_dump($maquina->maquina); + var_dump($papel->nombre); + $tarifa = (new \App\Models\Configuracion\MaquinasTarifasImpresionModel())->getTarifa($maquina->maquina_id, $uso, $tipo); + $linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa); + + var_dump($linea); + + } + } + echo '
'; + } + + + + public static function testLineasIntRotativa() + { + + $uso = 'interior'; + $tipo = 'negro'; + + + + $datosPedido = (object)array( + 'paginas' => 240, + 'tirada' => 100, + 'merma' => 10, + 'merma_portada' => 10, + 'ancho' => 150, + 'alto' => 210, + 'isCosido' => true, + ); + + $parametrosRotativa = (object)array( + 'a_favor_fibra' => 0, + 'bnPages' => 240, + 'colorPages' => 0, + 'rotativa_gota_negro' => 0, + 'rotativa_gota_color' => 0, + ); + + $maquina_model = new \App\Models\Configuracion\MaquinaModel(); + + $opciones_papel = array( + 'bn' => 1, + 'cubierta' => 0, + 'sobrecubierta' => 0, + 'rotativa' => 1, + ); + $papelimpresionmodel = new \App\Models\Configuracion\PapelImpresionModel(); + $papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto( + papel_generico_id: 4, + gramaje: 90, + options: $opciones_papel + ); + + + foreach ($papeles as $papel) { + + $papelImpresionTipologiaModel = new \App\Models\Configuracion\PapelImpresionTipologiaModel(); + $datosTipologias = $papelImpresionTipologiaModel + ->findTipologiasForPapelImpresion($papel->id, $parametrosRotativa->colorPages>0?'color':'negro') + ->get()->getResultObject(); + echo '
';
+            var_dump($papel->id);
+            var_dump($datosTipologias);
+            echo '
'; + $parametrosRotativa->rotativa_gota_negro = $datosTipologias[0]->gota_negro; + $parametrosRotativa->rotativa_gota_color = $datosTipologias[0]->gota_color; + $parametrosRotativa->rotativa_negro = $datosTipologias[0]->negro; + $parametrosRotativa->rotativa_cyan = $datosTipologias[0]->cyan; + $parametrosRotativa->rotativa_magenta = $datosTipologias[0]->magenta; + $parametrosRotativa->rotativa_amarillo = $datosTipologias[0]->amarillo; + + echo '-------------------------------'; + $maquinas = $maquina_model->getMaquinaImpresionForPresupuesto( + is_rotativa: $papel->rotativa, + tarifa_tipo: 'negro', + tirada: $datosPedido->tirada + $datosPedido->merma, + papel_impresion_id: $papel->id, + ); + + + + foreach ($maquinas as $maquina) { + + echo '----------------------------
'; + var_dump($maquina->maquina); + var_dump($papel->nombre); + + //$linea = PresupuestoService::getCostesLineaRotativa($maquina, $datosPedido, $parametrosRotativa); + echo '
';
+                var_dump($linea);
+                echo '
'; + } + } } } \ No newline at end of file diff --git a/ci4/app/Entities/Configuracion/Maquina.php b/ci4/app/Entities/Configuracion/Maquina.php index c88ba673..97b3674a 100644 --- a/ci4/app/Entities/Configuracion/Maquina.php +++ b/ci4/app/Entities/Configuracion/Maquina.php @@ -28,8 +28,8 @@ class Maquina extends \CodeIgniter\Entity\Entity "velocidad_corte" => 0.0, "precio_hora_corte" => 0.0, "metrosxminuto" => 0.0, - "forzar_num_formas_horizontales_portada" => null, - "forzar_num_formas_verticales_portada" => null, + "forzar_num_formas_horizontales_cubierta" => null, + "forzar_num_formas_verticales_cubierta" => null, "observaciones" => "", "is_deleted" => 0, "created_at" => null, @@ -56,8 +56,8 @@ class Maquina extends \CodeIgniter\Entity\Entity "precio_tinta_color" => "float", "velocidad_corte" => "float", "precio_hora_corte" => "float", - "forzar_num_formas_horizontales_portada" => "?int", - "forzar_num_formas_verticales_portada" => "?int", + "forzar_num_formas_horizontales_cubierta" => "?int", + "forzar_num_formas_verticales_cubierta" => "?int", "is_deleted" => "int", "user_created_id" => "int", "user_updated_id" => "int", diff --git a/ci4/app/Language/en/Maquinas.php b/ci4/app/Language/en/Maquinas.php index 443c0bdd..5445dfdf 100644 --- a/ci4/app/Language/en/Maquinas.php +++ b/ci4/app/Language/en/Maquinas.php @@ -54,12 +54,12 @@ return [ 'greater_than' => 'The field {field} must be greater than {param}', ], - 'forzar_num_formas_horizontales_portada' => [ + 'forzar_num_formas_horizontales_cubierta' => [ 'integer' => 'The {field} field must contain an integer.', ], - 'forzar_num_formas_verticales_portada' => [ + 'forzar_num_formas_verticales_cubierta' => [ 'integer' => 'The {field} field must contain an integer.', ], diff --git a/ci4/app/Language/en/Presupuestos.php b/ci4/app/Language/en/Presupuestos.php index c7869387..d1079af6 100644 --- a/ci4/app/Language/en/Presupuestos.php +++ b/ci4/app/Language/en/Presupuestos.php @@ -58,6 +58,27 @@ return [ 'retractilado5' => 'Shrink-wrapping in packs of 5', 'Guardas' => 'Endpapers', 'fajaColor' => 'Print color band ', + 'compInteriorPlana' => 'Interior in flat machine', + 'compInteriorRotativa' => 'Interior in rotary', + 'compCubiertaSobrecubierta' => 'Cover and dust jacket', + 'tipo' => 'Type', + 'marca' => 'Brand', + 'maquina' => 'Machine', + 'numeroPliegos' => 'Sheets No.', + 'pliegosPedido' => 'Sheets order', + 'precioPliego' => 'Sheets price', + 'libro' => 'Book', + 'totalPapelPedido' => 'Total paper order', + 'lomo' => 'Spine', + 'peso' => 'Weight', + 'click' => 'Click', + 'totalClicks' => 'Total clicks', + 'precioPagNegro' => 'Pages black price', + 'precioPagColor' => 'Pages color price', + 'totalTinta' => 'Total ink', + 'totalCorte' => 'Total cut', + 'total' => 'Total', + 'aFavorFibra' => 'In fiber direction', 'cubierta' => 'Cover', 'sobrecubierta' => 'Dust jacket', 'encuadernacion' => 'Binding', @@ -65,6 +86,13 @@ return [ 'solapasAnchoCubierta' => 'Cover dust jacket width', '1cara' => '1 side', '2caras' => '2 sides', + 'bn' => 'BW', + 'bnhq' => 'BWHQ', + 'color' => 'Colour', + 'colorhq' => 'ColourHQ', + 'rotativa' => 'Rotary', + 'si' => 'Yes', + 'no' => 'No', /* '4x0' => '4x0', '4x4' => '4x4', diff --git a/ci4/app/Language/es/Maquinas.php b/ci4/app/Language/es/Maquinas.php index 719665ad..34c932e9 100644 --- a/ci4/app/Language/es/Maquinas.php +++ b/ci4/app/Language/es/Maquinas.php @@ -54,12 +54,12 @@ return [ 'greater_than' => 'El campo {field} debe ser mayor que {param}', ], - 'forzar_num_formas_horizontales_portada' => [ + 'forzar_num_formas_horizontales_cubierta' => [ 'integer' => 'El campo {field} debe contener un número entero.', ], - 'forzar_num_formas_verticales_portada' => [ + 'forzar_num_formas_verticales_cubierta' => [ 'integer' => 'El campo {field} debe contener un número entero.', ], diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index e2a545bb..e6156182 100644 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -78,6 +78,7 @@ return [ 'totalTinta' => 'Total tinta', 'totalCorte' => 'Total corte', 'total' => 'Total', + 'aFavorFibra' => 'A favor fibra', 'cubierta' => 'Cubierta', 'sobrecubierta' => 'Sobrecubierta', 'encuadernacion' => 'Encuadernación', @@ -85,7 +86,15 @@ return [ 'solapasAnchoCubierta' => 'Ancho solapas cubierta', '1cara' => '1 cara', '2caras' => '2 caras', + 'bn' => 'BN', + 'bnhq' => 'BNHQ', + 'color' => 'Color', + 'colorhq' => 'ColorHQ', + 'rotativa' => 'Rotativa', + 'si' => 'Si', + 'no' => 'No', + /* '4x0' => '4x0', '4x4' => '4x4', 'aprobadoAt' => 'Aprobado At', diff --git a/ci4/app/Models/Configuracion/MaquinaModel.php b/ci4/app/Models/Configuracion/MaquinaModel.php index 3e85761c..fc88eea7 100644 --- a/ci4/app/Models/Configuracion/MaquinaModel.php +++ b/ci4/app/Models/Configuracion/MaquinaModel.php @@ -53,8 +53,8 @@ class MaquinaModel extends \App\Models\GoBaseModel "velocidad_corte", "precio_hora_corte", "metrosxminuto", - "forzar_num_formas_horizontales_portada", - "forzar_num_formas_verticales_portada", + "forzar_num_formas_horizontales_cubierta", + "forzar_num_formas_verticales_cubierta", "observaciones", "deleted_at", "is_deleted", @@ -95,11 +95,11 @@ class MaquinaModel extends \App\Models\GoBaseModel "label" => "Maquinas.duracionJornada", "rules" => "required|integer", ], - "forzar_num_formas_horizontales_portada" => [ + "forzar_num_formas_horizontales_cubierta" => [ "label" => "Maquinas.forzarNumFormasHorizontalesPortada", "rules" => "integer|permit_empty", ], - "forzar_num_formas_verticales_portada" => [ + "forzar_num_formas_verticales_cubierta" => [ "label" => "Maquinas.forzarNumFormasVerticalesPortada", "rules" => "integer|permit_empty", ], @@ -176,11 +176,11 @@ class MaquinaModel extends \App\Models\GoBaseModel "integer" => "Maquinas.validation.duracion_jornada.integer", "required" => "Maquinas.validation.duracion_jornada.required", ], - "forzar_num_formas_horizontales_portada" => [ - "integer" => "Maquinas.validation.forzar_num_formas_horizontales_portada.integer", + "forzar_num_formas_horizontales_cubierta" => [ + "integer" => "Maquinas.validation.forzar_num_formas_horizontales_cubierta.integer", ], - "forzar_num_formas_verticales_portada" => [ - "integer" => "Maquinas.validation.forzar_num_formas_verticales_portada.integer", + "forzar_num_formas_verticales_cubierta" => [ + "integer" => "Maquinas.validation.forzar_num_formas_verticales_cubierta.integer", ], "max" => [ "integer" => "Maquinas.validation.max.integer", @@ -277,7 +277,7 @@ class MaquinaModel extends \App\Models\GoBaseModel $builder = $this->db ->table($this->table . " t1") ->select( - "t1.id AS id, t1.nombre AS nombre, t1.is_padre AS is_padre, t1.tipo AS tipo, t1.velocidad AS velocidad, t1.ancho AS ancho, t1.alto AS alto, t1.ancho_impresion AS ancho_impresion, t1.alto_impresion AS alto_impresion, t1.alto_click AS alto_click, t1.min AS min, t1.max AS max, t1.duracion_jornada AS duracion_jornada, t1.orden_planning AS orden_planning, t1.is_rotativa AS is_rotativa, t1.precio_tinta_negro AS precio_tinta_negro, t1.is_tinta AS is_tinta, t1.precio_tinta_color AS precio_tinta_color, t1.velocidad_corte AS velocidad_corte, t1.precio_hora_corte AS precio_hora_corte, t1.metrosxminuto AS metrosxminuto, t1.forzar_num_formas_horizontales_portada AS forzar_num_formas_horizontales_portada, t1.forzar_num_formas_verticales_portada AS forzar_num_formas_verticales_portada, t1.observaciones AS observaciones, t2.nombre AS padre" + "t1.id AS id, t1.nombre AS nombre, t1.is_padre AS is_padre, t1.tipo AS tipo, t1.velocidad AS velocidad, t1.ancho AS ancho, t1.alto AS alto, t1.ancho_impresion AS ancho_impresion, t1.alto_impresion AS alto_impresion, t1.alto_click AS alto_click, t1.min AS min, t1.max AS max, t1.duracion_jornada AS duracion_jornada, t1.orden_planning AS orden_planning, t1.is_rotativa AS is_rotativa, t1.precio_tinta_negro AS precio_tinta_negro, t1.is_tinta AS is_tinta, t1.precio_tinta_color AS precio_tinta_color, t1.velocidad_corte AS velocidad_corte, t1.precio_hora_corte AS precio_hora_corte, t1.metrosxminuto AS metrosxminuto, t1.forzar_num_formas_horizontales_cubierta AS forzar_num_formas_horizontales_cubierta, t1.forzar_num_formas_verticales_cubierta AS forzar_num_formas_verticales_cubierta, t1.observaciones AS observaciones, t2.nombre AS padre" ); $builder->join("lg_maquinas t2", "t1.padre_id = t2.id", "left"); @@ -306,8 +306,8 @@ class MaquinaModel extends \App\Models\GoBaseModel ->orLike("t1.velocidad_corte", $search) ->orLike("t1.precio_hora_corte", $search) ->orLike("t1.metrosxminuto", $search) - ->orLike("t1.forzar_num_formas_horizontales_portada", $search) - ->orLike("t1.forzar_num_formas_verticales_portada", $search) + ->orLike("t1.forzar_num_formas_horizontales_cubierta", $search) + ->orLike("t1.forzar_num_formas_verticales_cubierta", $search) ->orLike("t1.observaciones", $search) ->orLike("t2.id", $search) ->orLike("t1.id", $search) @@ -329,8 +329,8 @@ class MaquinaModel extends \App\Models\GoBaseModel ->orLike("t1.velocidad_corte", $search) ->orLike("t1.precio_hora_corte", $search) ->orLike("t1.metrosxminuto", $search) - ->orLike("t1.forzar_num_formas_horizontales_portada", $search) - ->orLike("t1.forzar_num_formas_verticales_portada", $search) + ->orLike("t1.forzar_num_formas_horizontales_cubierta", $search) + ->orLike("t1.forzar_num_formas_verticales_cubierta", $search) ->orLike("t1.observaciones", $search) ->orLike("t2.nombre", $search) ->groupEnd(); @@ -350,7 +350,11 @@ class MaquinaModel extends \App\Models\GoBaseModel ->select( "t1.id AS maquina_id, t1.nombre AS maquina, t1.ancho_impresion AS ancho_impresion, t1.alto_impresion AS alto_impresion, t1.ancho AS ancho, t1.alto AS alto, - t1.is_rotativa AS is rotativa, t1.alto_click AS alto_click" + t1.is_rotativa AS is rotativa, t1.alto_click AS alto_click, + t1.precio_tinta_negro AS precio_tinta_negro, t1.precio_tinta_color AS precio_tinta_color, + t1.velocidad_corte AS velocidad_corte, t1.precio_hora_corte AS precio_hora_corte, + t1.forzar_num_formas_horizontales_cubierta AS forzar_num_formas_horizontales_cubierta, + t1.forzar_num_formas_verticales_cubierta AS forzar_num_formas_verticales_cubierta" ) ->join("lg_maquinas_tarifas_impresion t2", "t1.id = t2.maquina_id", "left") ->join("lg_maquina_papel_impresion t3", "t1.id = t3.maquina_id", "left") @@ -360,12 +364,20 @@ class MaquinaModel extends \App\Models\GoBaseModel ->where("t1.tipo", "impresion") ->where("t1.is_rotativa", $is_rotativa) ->where("t2.is_deleted", 0) - ->where("t2.tipo", $tarifa_tipo) ->where("t3.papel_impresion_id", $papel_impresion_id) ->where("t3.active", 1) ->where("t1.min <=", $tirada) ->where("t1.max >=", $tirada); + if(is_array($tarifa_tipo)){ + foreach($tarifa_tipo as $tarifa){ + $builder->where("EXISTS (SELECT * FROM lg_maquinas_tarifas_impresion t2 WHERE t1.id=t2.maquina_id AND t2.tipo='{$tarifa}' AND t2.is_deleted=0)"); + } + } + else{ + $builder->where("t2.tipo", $tarifa_tipo); + } + return $builder->orderBy("t1.id", "asc")->get()->getResultObject(); } } diff --git a/ci4/app/Models/Configuracion/MaquinasPapelesImpresionModel.php b/ci4/app/Models/Configuracion/MaquinasPapelesImpresionModel.php index f9d7a36e..f75dd5dd 100644 --- a/ci4/app/Models/Configuracion/MaquinasPapelesImpresionModel.php +++ b/ci4/app/Models/Configuracion/MaquinasPapelesImpresionModel.php @@ -29,6 +29,11 @@ class MaquinasPapelesImpresionModel extends \App\Models\GoBaseModel const SORTABLE_2 = [ 0 => "t1.active", 1 => "t2.nombre", + 2 => "t2.ancho", + 3 => "t2.alto", + 4 => "t2.ancho_impresion", + 5 => "t2.alto_impresion", + ]; diff --git a/ci4/app/Models/Configuracion/PapelGenericoModel.php b/ci4/app/Models/Configuracion/PapelGenericoModel.php index a956cfe4..33bdbefb 100644 --- a/ci4/app/Models/Configuracion/PapelGenericoModel.php +++ b/ci4/app/Models/Configuracion/PapelGenericoModel.php @@ -130,7 +130,7 @@ class PapelGenericoModel extends \App\Models\GoBaseModel return $builder->orderBy("t1.nombre", "asc")->get()->getResultObject(); } - public function getGramajeComparador(string $papel_generico_nombre="") + public function getGramajeComparador(string $papel_generico_nombre="", $uso="") { $builder = $this->db ->table($this->table . " t1") @@ -141,8 +141,21 @@ class PapelGenericoModel extends \App\Models\GoBaseModel ->where("t1.is_deleted", 0) ->where("t2.is_deleted", 0) + ->where("t2.isActivo", 1) ->where("t1.nombre", $papel_generico_nombre); + if($uso == 'bn') + $builder->where("t2.bn", 1); + else if ($uso == 'color') + $builder->where("t2.color", 1); + else if ($uso == 'cubierta') + $builder->where("t2.cubierta", 1); + else if ($uso == 'sobrecubierta') + $builder->where("t2.sobrecubierta", 1); + + + + $values = $builder->orderBy("t2.gramaje", "asc")->get()->getResultObject(); $id = 1; foreach ($values as $value){ diff --git a/ci4/app/Models/Configuracion/PapelImpresionTipologiaModel.php b/ci4/app/Models/Configuracion/PapelImpresionTipologiaModel.php index 356c4d9f..f5e47534 100644 --- a/ci4/app/Models/Configuracion/PapelImpresionTipologiaModel.php +++ b/ci4/app/Models/Configuracion/PapelImpresionTipologiaModel.php @@ -109,18 +109,21 @@ class PapelImpresionTipologiaModel extends \App\Models\GoBaseModel return $result; } - public function findTipologiasForPapelImpresion(int $papelImpresionID){ + public function findTipologiasForPapelImpresion(int $papelImpresionID, $tipo=null){ $builder = $this->db ->table($this->table ) ->select("*") ->where("papel_impresion_id", $papelImpresionID); - + + if(!is_null($tipo)){ + $builder->where("tipo", $tipo); + } return $builder; - } + public function removeForPapelImpresion($papel_impresion_id){ $builder = $this->db ->table($this->table . " t1") diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php index 28438760..e428beed 100644 --- a/ci4/app/Services/PresupuestoService.php +++ b/ci4/app/Services/PresupuestoService.php @@ -9,68 +9,11 @@ use CodeIgniter\Config\BaseService; class PresupuestoService extends BaseService { + /** + * CONSTANTES USADAS PARA LOS CALCULOS + */ - public static function test() - { - $tarifa = (new \App\Models\Configuracion\MaquinasTarifasImpresionModel())->getTarifa(8, "interior", "negro"); - var_dump($tarifa); - } - - - public static function test2() - { - - $uso = 'interior'; - $tipo = 'negro'; - $datosPedido = (object)array( - 'paginas' => 200, - 'tirada' => 500, - 'merma' => 10, - 'merma_portada' => 10, - 'ancho' => 165, - 'alto' => 148, - 'isCosido' => true, - ); - - - $maquina_model = new \App\Models\Configuracion\MaquinaModel(); - - - $opciones_papel = array( - 'bn' => 1, - 'cubierta' => 0, - 'sobrecubierta' => 0, - 'rotativa' => 0, - ); - $papelimpresionmodel = new \App\Models\Configuracion\PapelImpresionModel(); - $papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto( - papel_generico_id: 4, - gramaje: 90, - options: $opciones_papel - ); - foreach ($papeles as $papel) { - echo '-------------------------------'; - $maquinas = $maquina_model->getMaquinaImpresionForPresupuesto( - is_rotativa: $papel->rotativa, - tarifa_tipo: 'negro', - tirada: $datosPedido->tirada + $datosPedido->merma, - papel_impresion_id: $papel->id, - ); - - foreach ($maquinas as $maquina) { - - echo '----------------------------
'; - var_dump($maquina->maquina); - var_dump($papel->nombre); - $tarifa = (new \App\Models\Configuracion\MaquinasTarifasImpresionModel())->getTarifa($maquina->maquina_id, $uso, $tipo); - $linea = PresupuestoService::getCostesLinea($uso, $tipo, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa); - echo '
';
-                var_dump($linea);
-                echo '
'; - } - } - } - + const MARGEN_PAGINAS_ROTATIVA = 15.0; /** @@ -83,7 +26,7 @@ class PresupuestoService extends BaseService * -> paginas: numero de paginas por libro * -> tirada: numero de unidades a imprimir * -> merma: unidades que se añaden a la tirada - * -> merma_portada: unidades de merma para la portada + * * @param mixed $maquina * objeto con la siguiente estructura: * -> id: el id de la maquina @@ -99,19 +42,9 @@ class PresupuestoService extends BaseService { $response['fields'] = []; - switch ($uso) { - case 'interior': - $formas = PresupuestoService::getNumFormasPlanaInterior($maquina, $datosPedido->ancho, $datosPedido->alto, $datosPedido->isCosido); - $response['fields'] = $formas; - break; - - case 'cubierta': - case 'sobrecubierta': - break; - - case 'rotativa': - default: - break; + if ($uso!='rotativa') { + $formas = PresupuestoService::getNumFormasPlana($uso, $maquina, $datosPedido->ancho, $datosPedido->alto, $datosPedido->isCosido); + $response['fields'] = $formas; } if ($response['fields']['num_formas']['posicion_formas'] == 'n/a') { @@ -155,9 +88,23 @@ class PresupuestoService extends BaseService } // cubierta o sobrecubierta (siempre a color) else if (($cubierta == 1 || $sobrecubierta == 1) && $rotativa == 0) { - } - // rotativa - else if ($rotativa == 1) { + // precio papel + $pliegos_libro = 1.0 / $response['fields']['num_formas']['value']; + $pliegos_pedido = $pliegos_libro * ($datosPedido->tirada + $datosPedido->merma); + $precio_libro = $pliegos_libro * $precio_pliego_impresion; + $precio_pedido = $precio_libro * ($datosPedido->tirada + $datosPedido->merma); + + $mano = PresupuestoService::computeLomoPortada($papel_impresion->espesor); + + // peso + $ancho_total = $datosPedido->solapas? $datosPedido->ancho + $datosPedido->solapas_ancho:$datosPedido->ancho; + $peso = PresupuestoService::computePeso($ancho_total, $datosPedido->alto, $papel_impresion->gramaje); + + // impresion + if ($tarifa) { + $precio_click = $tarifa; + $precio_click_pedido = $pliegos_pedido * $precio_click; + } } @@ -183,55 +130,179 @@ class PresupuestoService extends BaseService } - private static function getNumFormasPlanaInterior($maquina, $ancho, $alto, $isCosido) + /** + * Devuelve los calculos para la linea de rotativa. + */ + public static function getCostesLineaRotativa($maquina, $papel_impresion, $datosPedido, $parametrosRotativa) { - $anchoForCalculo = $isCosido ? $ancho * 2 : $ancho; + $data = []; - // horizontales - $h1 = floor($maquina->ancho_impresion / $anchoForCalculo); - $v1 = floor($maquina->alto_impresion / $alto); - $formas_h = $h1 * $v1; //p1 + $data['resolucion'] = 600; + $data['pulgada'] = 1 / 1000000000000.0; + $data['superficie'] = round((($datosPedido->ancho / 2.54) / 10) * (($datosPedido->alto / 2.54) / 10), 2); - // verticales - $h2 = floor($maquina->ancho_impresion / $alto); - $v2 = floor($maquina->alto_impresion / $anchoForCalculo); - $formas_v = $h2 * $v2; //p2 + // posicionamos paginas en función de a favor de fibra o no + + $anchoLibro = $datosPedido->ancho; + $altoLibro = $datosPedido->alto; + if (!$parametrosRotativa->a_favor_fibra) { + $anchoLibro = $datosPedido->alto; + $altoLibro = $datosPedido->ancho; + } + + $data['ancho'] = $anchoLibro; + $data['alto'] = $altoLibro; + + // si es cosido ancho x 2 + + if ($datosPedido->isCosido) { + if (!$parametrosRotativa->a_favor_fibra) { + $data['alto'] = $data['alto'] * 2; + } else { + $data['ancho'] = $data['ancho'] * 2; + } + } + + // calculo de papel y clicks + $factor_anchura = round($maquina->ancho_impresion / $data['ancho'], 2); + $factor_altura = round($maquina->alto_impresion / ($data['alto'] + self::MARGEN_PAGINAS_ROTATIVA), 2); + $factor_altura_click = round($maquina->alto_click / ($data['alto'] + self::MARGEN_PAGINAS_ROTATIVA), 2); + + $multiplicador_pliego = $datosPedido->isCosido ? 4 : 2; + $paginas_por_pliego = round(floor($factor_anchura) * $factor_altura * $multiplicador_pliego, 2); + $pliegos_libro = round($paginas_por_pliego ? $datosPedido->paginas / $paginas_por_pliego : 0, 2); + $metros_papel_libro = round($pliegos_libro * ($maquina->alto_impresion / 1000.0), 2); + $metros_papel_total = round($metros_papel_libro * ($datosPedido->tirada + $datosPedido->merma), 2); + + $paginas_por_pliego_click = round(floor($factor_anchura) * $factor_altura_click * $multiplicador_pliego, 2); + $pliegos_libro_click = round($paginas_por_pliego_click ? $datosPedido->paginas / $paginas_por_pliego_click : 0, 2); + $clicks_libro = round(ceil($pliegos_libro_click) * 2, 2); + $clicks_pedido = round($clicks_libro * ($datosPedido->tirada + $datosPedido->merma), 2); + + $data['factor_altura'] = $factor_altura; + $data['factor_anchura'] = $factor_anchura; + $data['paginas_por_pliego'] = $paginas_por_pliego; + $data['pliegos_libro'] = $pliegos_libro; + $data['pliegos_pedido'] = $pliegos_libro * ($datosPedido->tirada + $datosPedido->merma); + $data['metros_papel_libro'] = $metros_papel_libro; + $data['metros_papel_total'] = $metros_papel_total; + $data['clicks_libro'] = $clicks_libro; + $data['clicks_pedido'] = $clicks_pedido; + + // calculo de tintas + $data['num_gotas_negro'] = round($data['superficie'] * $data['resolucion'] * $data['resolucion'] * ($parametrosRotativa->rotativa_negro / 100.0), 0); + $data['num_gotas_cyan'] = round($data['superficie'] * $data['resolucion'] * $data['resolucion'] * ($parametrosRotativa->rotativa_cyan / 100.0), 0); + $data['num_gotas_magenta'] = round($data['superficie'] * $data['resolucion'] * $data['resolucion'] * ($parametrosRotativa->rotativa_magenta / 100.0), 0); + $data['num_gotas_amarillo'] = round($data['superficie'] * $data['resolucion'] * $data['resolucion'] * ($parametrosRotativa->rotativa_amarillo / 100.0), 0); + + $pag_negro = $parametrosRotativa->bnPages; + $pag_color = 0; + if ($parametrosRotativa->colorPages>0) { + $pag_color = $parametrosRotativa->colorPages; + } + + // peso tintas + $data['peso_gotas_negro'] = round((($data['num_gotas_negro'] * $parametrosRotativa->rotativa_gota_negro * $data['pulgada']) / (17.91 / 20.0)) * $pag_negro * 1000, 6); + $data['peso_gotas_cyan'] = round((($data['num_gotas_cyan'] * $parametrosRotativa->rotativa_gota_color * $data['pulgada']) / (17.65 / 20.0)) * $pag_color * 1000, 6); + $data['peso_gotas_magenta'] = round((($data['num_gotas_magenta'] * $parametrosRotativa->rotativa_gota_color * $data['pulgada']) / (17.65 / 20.0)) * $pag_color * 1000, 6); + $data['peso_gotas_amarillo'] = round((($data['num_gotas_amarillo'] * $parametrosRotativa->rotativa_gota_color * $data['pulgada']) / (17.65 / 20.0)) * $pag_color * 1000, 6); + + // costes de tintas + $data['peso_gotas_negro_pedido'] = round($data['peso_gotas_negro'], 2) * ($datosPedido->tirada + $datosPedido->merma); + $data['peso_gotas_cyan_pedido'] = round($data['peso_gotas_cyan'], 2) * ($datosPedido->tirada + $datosPedido->merma); + $data['peso_gotas_magenta_pedido'] = round($data['peso_gotas_magenta'], 2) * ($datosPedido->tirada + $datosPedido->merma); + $data['peso_gotas_amarillo_pedido'] = round($data['peso_gotas_amarillo'], 2) * ($datosPedido->tirada + $datosPedido->merma); + + // precio tinta + $data['precio_tinta'] = round( + round(($data['peso_gotas_negro_pedido'] / 1000.0) * $maquina->precio_tinta_negro, 2) + + round(($data['peso_gotas_cyan_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) + + round(($data['peso_gotas_magenta_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) + + round(($data['peso_gotas_amarillo_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) + , 2); + + // precio pagina + $data['precio_pagina_negro'] = round($pag_negro ? $data['precio_tinta'] / ($pag_negro * ($datosPedido->tirada + $datosPedido->merma)) : 0, 6); + $data['precio_pagina_color'] = round($pag_color ? $data['precio_tinta'] / ($pag_color * ($datosPedido->tirada + $datosPedido->merma)) : 0, 6); + + // calculo de corte + $data['tiempo_corte'] = $maquina->velocidad_corte > 0 ? round($metros_papel_total / $maquina->velocidad_corte, 2) : 0; + $data['total_corte'] = round(($data['tiempo_corte'] / 60.0) * $maquina->precio_hora_corte, 2); + + $data['mano'] = PresupuestoService::computeLomoInterior($datosPedido->paginas, $papel_impresion->espesor); + // ($paginas / 2.0) * (($gramaje / 1000.0) * $papel_compra->mano); + + // peso + $data['peso'] = PresupuestoService::computePeso( + ancho: $datosPedido->isCosido ? $datosPedido->ancho / 2.0 : $datosPedido->ancho, + alto: $datosPedido->alto, + gramaje: $papel_impresion->gramaje, + paginas: $datosPedido->paginas + ); + + return $data; + } + + + private static function getNumFormasPlana($uso, $maquina, $ancho, $alto, $isCosido) + { + if($uso == 'cubierta' || $uso == 'sobrecubierta') { + if(property_exists($maquina, 'forzar_num_formas_horizontales_cubierta') && + property_exists($maquina, 'forzar_num_formas_horizontales_cubierta')){ + + if($maquina->forzar_num_formas_horizontales_cubierta > 0 && + $maquina->forzar_num_formas_horizontales_cubierta > 0){ + + $h1 = $maquina->forzar_num_formas_horizontales_cubierta; + $h2 = $maquina->forzar_num_formas_verticales_cubierta; + $num_formas = $h1 * $h2; + } + else{ + $num_formas == 0; + } + } + else{ + $num_formas == 0; + } + } + else{ + + if($uso != 'cubierta' && $uso != 'sobrecubierta'){ + $anchoForCalculo = $isCosido ? $ancho * 2 : $ancho; + } + else{ + $anchoForCalculo = $ancho; + } + + + // horizontales + $h1_temp = floor($maquina->ancho_impresion / $anchoForCalculo); + $calles = (new \App\Models\Configuracion\MaquinasCallesModel())->getCallesForMaquina($maquina->maquina_id, $h1_temp); + // Si son mas de 2 formas + if(count($calles)>0) + $h1 = ($h1_temp * $anchoForCalculo + 2 * $calles[0]->externas + ($h1_temp - 1) * $calles[0]->internas < ($maquina->ancho)) ? $h1_temp : $h1_temp - 1; + else + $h1 = $h1_temp; + + $v1 = floor($maquina->alto_impresion / $alto); + $formas_h = $h1 * $v1; //p1 + + // verticales + + $h2_temp = floor($maquina->ancho_impresion / $alto); + $calles = (new \App\Models\Configuracion\MaquinasCallesModel())->getCallesForMaquina($maquina->maquina_id, $h2_temp); + if(count($calles)>0) + $h2 = ($h2_temp * $anchoForCalculo + 2 * $calles[0]->externas + ($h2_temp - 1) * $calles[0]->internas < ($maquina->ancho)) ? $h2_temp : $h2_temp - 1; + else + $h2 = $h2_temp; + $v2 = floor($maquina->alto_impresion / $anchoForCalculo); + $formas_v = $h2 * $v2; //p2 - // hay que iterar hasta que las formas entren o el num_formas sean ==0 - // se checkea que entran en el numero de calles - // se obtiene la configuracion de las calles para esa maquina - $good_configuration = false; - do { $num_formas = ($formas_h > $formas_v) ? $formas_h : $formas_v; - $num_formas = $isCosido ? $num_formas * 2 : $num_formas; - - // solo hay calles para 2 formas o mas - if ((($formas_h > $formas_v) ? $h1 : $h2) > 1) { - - $calles = (new \App\Models\Configuracion\MaquinasCallesModel())->getCallesForMaquina($maquina->maquina_id, ($formas_h > $formas_v) ? $h1 : $h2)[0]; - // se calcula el tamaño necesario para el numero de formas + el numero de calles internas - $size_needed = (($formas_h > $formas_v) ? $anchoForCalculo : $alto) * (($formas_h > $formas_v) ? $h1 : $h2) + - ((($formas_h > $formas_v) ? $h1 : $h2) - 1) * $calles->internas; - - // si el tamaño calculado entra en el area de impresion - if ($size_needed <= $maquina->ancho_impresion) - $good_configuration = true; - // en caso contrario se resta una forma donde corresponda para iterar otra vez - else { - if ($formas_h > $formas_v) { - $formas_h = ($formas_h - 1 > 0) ? $formas_h - 1 : 0; - } else { - $formas_v = ($formas_v - 1 > 0) ? $formas_v - 1 : 0; - } - } + if($uso != 'cubierta' && $uso != 'sobrecubierta'){ + $num_formas = $isCosido ? $num_formas * 2 : $num_formas; } - // Si solo hay una forma, tiene que entrar en el ancho de impresion - else if ((($formas_h > $formas_v) ? $h1 : $h2) == 1) { - if ((($formas_h > $formas_v) ? $h1 : $h2) < $maquina->ancho_impresion) { - $good_configuration = true; - } - } - } while ($num_formas != 0 && !$good_configuration); + } // si no hay formas se devuelve n/a if ($num_formas == 0) { @@ -252,14 +323,14 @@ class PresupuestoService extends BaseService } - private static function getPrecioPliego($maquina, $papel_impresion, $paginas) + public static function getPrecioPliego($maquina, $papel_impresion, $paginas) { $margen = (new \App\Models\Configuracion\PapelImpresionMargenModel())->getMargenFormPags($papel_impresion->id, $paginas); if (count($margen) > 0) { $peso_por_pliego = $maquina->alto * $maquina->ancho * $papel_impresion->gramaje / 1000000; - $precio_pliego = $papel_impresion->precio_tonelada * (1 + (floatval($margen[0]['margen']) / 100.0)) / 1000000 * $peso_por_pliego; + $precio_pliego = ($peso_por_pliego * $papel_impresion->precio_tonelada / 1000000.0) * (1 + (floatval($margen[0]['margen']) / 100.0)); - return round($precio_pliego*1.04, 6); // quitar el factor de 1.04 despues de los test + return round($precio_pliego, 6); } return -1; } @@ -279,6 +350,14 @@ class PresupuestoService extends BaseService return $lomo; } + /** + * Calcula la dimensión del lomo para portada y cubierta + */ + private static function computeLomoPortada($espesor) + { + return ($espesor * 2.0) / 1000.0; + } + /** * Devuelve el peso de un pedido. */ diff --git a/ci4/app/Views/themes/backend/vuexy/form/configuracion/maquinas/_maquinaFormItems.php b/ci4/app/Views/themes/backend/vuexy/form/configuracion/maquinas/_maquinaFormItems.php index 62e8bedd..292c590a 100644 --- a/ci4/app/Views/themes/backend/vuexy/form/configuracion/maquinas/_maquinaFormItems.php +++ b/ci4/app/Views/themes/backend/vuexy/form/configuracion/maquinas/_maquinaFormItems.php @@ -101,16 +101,16 @@ + name="forzar_num_formas_horizontales_cubierta" maxLength="11" class="form-control" + value="forzar_num_formas_horizontales_cubierta) ?>">
+ name="forzar_num_formas_verticales_cubierta" maxLength="11" class="form-control" + value="forzar_num_formas_verticales_cubierta) ?>">
- +
- $v) : ?> -
-
@@ -97,21 +97,21 @@

- +
- $v) : ?> -
-
@@ -125,21 +125,21 @@

- +
- $v) : ?> -
-
@@ -153,21 +153,21 @@

- +
- $v) : ?> -
-
@@ -179,30 +179,30 @@

-
+
- + -
- + $v) : ?> +
-
@@ -247,7 +247,7 @@

@@ -274,10 +274,6 @@ - - - - @@ -285,8 +281,8 @@ - : - 0.00 + : + 0.00 @@ -301,7 +297,7 @@

@@ -317,6 +313,7 @@ + @@ -338,8 +335,8 @@ - : - 0.00 + : + 0.00 @@ -378,10 +375,6 @@ - - - - @@ -389,13 +382,13 @@ - : - 0.00 + : + 0.00 - +
diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/comparador.js b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/comparador.js index c98b8770..b1a30ed1 100644 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/comparador.js +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/comparador.js @@ -1,6 +1,81 @@ /******************************* * Eventos asociados a elementos HTML *******************************/ +$('#compPaginasNegro').on("change", function () { + var negro = parseInt(document.getElementById('compPaginasNegro').value); + const paginas = parseInt(document.getElementById('paginas').value); + if (paginas < negro) { + document.getElementById('compPaginasNegro').value = paginas; + negro = paginas; + } + var color = parseInt(document.getElementById('compPaginasColor').value); + if ($('#tipoImpresion').select2('data')[0].id == 'color') { + + var newValue = paginas - negro; + if (newValue != color) { + document.getElementById('compPaginasColor').value = newValue >= 0 ? newValue : 0; + $('#compPaginasColor').change(); + } + + } +}); + +$('#compPaginasColor').on("change", function () { + const paginas = parseInt(document.getElementById('paginas').value); + var color = parseInt(document.getElementById('compPaginasColor').value); + var negro = parseInt(document.getElementById('compPaginasNegro').value); + + if (paginas < color) { + document.getElementById('compPaginasColor').value = paginas; + color = paginas + } + var newValue = paginas - color; + if (newValue != negro) { + document.getElementById('compPaginasNegro').value = newValue >= 0 ? newValue : 0; + $('#compPaginasNegro').change(); + } +}); + +$('#compPaginasNegrohq').on("change", function () { + if (document.getElementById('paginas').value < document.getElementById('compPaginasNegrohq').value) { + document.getElementById('compPaginasNegrohq').value = document.getElementById('paginas').value; + } + + if ($('#tipoImpresion').select2('data')[0].id == 'color') { + if (document.getElementById('compPaginasNegrohq').value + document.getElementById('compPaginasColorhq').value > document.getElementById('paginas').value) { + var newValue = document.getElementById('paginas').value - document.getElementById('compPaginasNegrohq').value; + document.getElementById('compPaginasColorhq').value = newValue >= 0 ? newValue : 0; + } + } +}); + +$('#compPaginasColorhq').on("change", function () { + if (document.getElementById('paginas').value < document.getElementById('compPaginasColorhq').value) { + document.getElementById('compPaginasColorhq').value = document.getElementById('paginas').value; + } + + if (document.getElementById('compPaginasNegrohq').value + document.getElementById('compPaginasColorhq').value > document.getElementById('paginas').value) { + var newValue = document.getElementById('paginas').value - document.getElementById('compPaginasColorhq').value; + document.getElementById('compPaginasNegrohq').value = newValue >= 0 ? newValue : 0; + } + +}); + +$('#paginas').on("change", function () { + // Si es negro o color + if ($('#tipoImpresion').select2('data')[0].id == 'negro' || + $('#tipoImpresion').select2('data')[0].id == 'color') { + document.getElementById('compPaginasNegro').value = document.getElementById('paginas').value; + document.getElementById('compPaginasColor').value = 0; + } + // Si es negrohq o colorhq + if ($('#tipoImpresion').select2('data')[0].id == 'negrohq' || + $('#tipoImpresion').select2('data')[0].id == 'colorhq') { + document.getElementById('compPaginasNegrohq').value = document.getElementById('paginas').value; + document.getElementById('compPaginasColorhq').value = 0; + } +}); + $("#solapas").on("click", function () { var e = document.getElementById('div_solapas_ancho'); if (document.getElementById('solapas').checked) { @@ -13,11 +88,38 @@ $("#solapas").on("click", function () { $('#tipoImpresion').on("change", function () { updatePapelesComparador(); + $('#paginas').change(); + + + if (($('#tipoImpresion').select2('data')[0].id == 'negro' || + $('#tipoImpresion').select2('data')[0].id == 'color')){ + + $('#tableCompIntRotativa').DataTable().clear().draw(); + $('#total_comp_rot').html("0.00"); + + if( $('#tableCompIntPlana').DataTable().rows().count() > 0 && + $('#tableCompIntPlana').DataTable().cell(0, 0).data().includes('hq')) { + + $('#tableCompIntPlana').DataTable().clear().draw(); + $('#total_comp_plana').html("0.00"); + } + + } + else if (($('#tipoImpresion').select2('data')[0].id == 'negrohq' || + $('#tipoImpresion').select2('data')[0].id == 'colorhq')){ + + $('#tableCompIntRotativa').DataTable().clear().draw(); + $('#total_comp_rot').html("0.00"); + + if($('#tableCompIntPlana').DataTable().rows().count() > 0 && + !$('#tableCompIntPlana').DataTable().cell(0, 0).data().includes('hq')) { + + $('#tableCompIntPlana').DataTable().clear().draw(); + $('#total_comp_plana').html("0.00"); + } + } }); -$('#tipoImpresion').on("change", function () { - updatePapelesComparador(); -}); $('#compRetractilado').on("change", function () { checkRetractiladoComparador(this); @@ -61,38 +163,62 @@ $('.accordion-button').on('click', function (e) { /******************************* * Metodos *******************************/ -function getRowFromLinea(tipo, linea){ +function getRowFromLineaInt(tipo, linea) { + return { 'tipo': tipo, 'paginas': linea.fields.paginas, - 'papel': linea.fields.papel_generico_id, + 'papel': linea.fields.papel_generico, 'gramaje': linea.fields.gramaje, 'marca': linea.fields.papel_impresion, 'maquina': linea.fields.maquina, - 'numeroPliegos': isNaN(parseFloat(linea.fields.pliegos_libro).toFixed(2)) ? "" : parseFloat(linea.fields.pliegos_libro).toFixed(2), - 'pliegosPedido': isNaN(parseFloat(linea.fields.pliegos_pedido).toFixed(2)) ? "" : parseFloat(linea.fields.pliegos_pedido).toFixed(2), - 'precioPliego': isNaN(parseFloat(linea.fields.precios_pliegos).toFixed(6)) ? "" : parseFloat(linea.fields.precios_pliegos).toFixed(6), - 'libro': isNaN(parseFloat(linea.fields.precio_libro).toFixed(2)) ? "" : parseFloat(linea.fields.precio_libro).toFixed(2), - 'totalPapelPedido': isNaN(parseFloat(linea.fields.precio_pedido).toFixed(2)) ? "" : parseFloat(linea.fields.precio_pedido).toFixed(2), - 'lomo': isNaN(parseFloat(linea.fields.mano).toFixed(2)) ? "" : parseFloat(linea.fields.mano).toFixed(2), - 'peso': isNaN(parseFloat(linea.fields.peso).toFixed(2)) ? "" : parseFloat(linea.fields.peso).toFixed(2), - 'click': isNaN(parseFloat(linea.fields.precio_click).toFixed(6)) ? "" : parseFloat(linea.fields.precio_click).toFixed(6), - 'totalClicks': isNaN(parseFloat(linea.fields.precio_click_pedido).toFixed(2)) ? "" : parseFloat(linea.fields.precio_click_pedido).toFixed(2), - 'precioPagNegro': isNaN(parseFloat(linea.fields.precioPagNegro).toFixed(6)) ? "" : parseFloat(linea.fields.precioPagNegro).toFixed(6), - 'precioPagColor': isNaN(parseFloat(linea.fields.precioPagColor).toFixed(6)) ? "" : parseFloat(linea.fields.precioPagColor).toFixed(6), - 'totalTinta': isNaN(parseFloat(linea.fields.totalTinta).toFixed(6)) ? "" : parseFloat(linea.fields.totalTinta).toFixed(6), - 'totalCorte': isNaN(parseFloat(linea.fields.totalCorte).toFixed(6)) ? "" : parseFloat(linea.fields.totalCorte).toFixed(6), - 'total': isNaN(parseFloat(linea.fields.precio_pedido+linea.fields.precio_click_pedido).toFixed(2)) ? - "" : parseFloat(linea.fields.precio_pedido+linea.fields.precio_click_pedido).toFixed(2), + 'numeroPliegos': isNaN(parseFloat(linea.fields.pliegos_libro)) ? "" : parseFloat(linea.fields.pliegos_libro).toFixed(2), + 'pliegosPedido': isNaN(parseFloat(linea.fields.pliegos_pedido)) ? "" : parseFloat(linea.fields.pliegos_pedido).toFixed(2), + 'precioPliego': isNaN(parseFloat(linea.fields.precios_pliegos)) ? "" : parseFloat(linea.fields.precios_pliegos).toFixed(6), + 'libro': isNaN(parseFloat(linea.fields.precio_libro)) ? "" : parseFloat(linea.fields.precio_libro).toFixed(2), + 'totalPapelPedido': isNaN(parseFloat(linea.fields.precio_pedido)) ? "" : parseFloat(linea.fields.precio_pedido).toFixed(2), + 'lomo': isNaN(parseFloat(linea.fields.mano)) ? "" : parseFloat(linea.fields.mano).toFixed(2), + 'peso': isNaN(parseFloat(linea.fields.peso)) ? "" : parseFloat(linea.fields.peso).toFixed(2), + 'click': isNaN(parseFloat(linea.fields.precio_click)) ? "" : parseFloat(linea.fields.precio_click).toFixed(6), + 'totalClicks': isNaN(parseFloat(linea.fields.precio_click_pedido)) ? "" : parseFloat(linea.fields.precio_click_pedido).toFixed(2), + 'total': isNaN(parseFloat(linea.fields.precio_pedido) + parseFloat(linea.fields.precio_click_pedido)) ? + "" : (parseFloat(linea.fields.precio_pedido) + parseFloat(linea.fields.precio_click_pedido)).toFixed(2), + } +} + +function getRowFromLineaRot(linea) { + + return { + 'tipo': 'rotativa', + 'paginas': linea.fields.paginas, + 'papel': linea.fields.papel_generico, + 'gramaje': linea.fields.gramaje, + 'marca': linea.fields.papel_impresion, + 'aFavorFibra':linea.fields.a_favor_fibra==1?'si':'no', + 'maquina': linea.fields.maquina, + 'numeroPliegos': isNaN(parseFloat(linea.fields.pliegos_libro)) ? "" : parseFloat(linea.fields.pliegos_libro).toFixed(2), + 'pliegosPedido': isNaN(parseFloat(linea.fields.pliegos_pedido)) ? "" : parseFloat(linea.fields.pliegos_pedido).toFixed(2), + 'precioPliego': isNaN(parseFloat(linea.fields.precios_pliegos)) ? "" : parseFloat(linea.fields.precios_pliegos).toFixed(6), + 'libro': isNaN(parseFloat(linea.fields.precio_libro)) ? "" : parseFloat(linea.fields.precio_libro).toFixed(2), + 'totalPapelPedido': isNaN(parseFloat(linea.fields.precio_pedido)) ? "" : parseFloat(linea.fields.precio_pedido).toFixed(2), + 'lomo': isNaN(parseFloat(linea.fields.mano)) ? "" : parseFloat(linea.fields.mano).toFixed(2), + 'peso': isNaN(parseFloat(linea.fields.peso)) ? "" : parseFloat(linea.fields.peso).toFixed(2), + 'click': isNaN(parseFloat(linea.fields.precio_click)) ? "" : parseFloat(linea.fields.precio_click).toFixed(6), + 'totalClicks': isNaN(parseFloat(linea.fields.precio_click_pedido)) ? "" : parseFloat(linea.fields.precio_click_pedido).toFixed(2), + 'precioPagNegro': isNaN(parseFloat(linea.fields.precio_pagina_negro)) ? "" : parseFloat(linea.fields.precio_pagina_negro).toFixed(6), + 'precioPagColor': isNaN(parseFloat(linea.fields.precio_pagina_color)) ? "" : parseFloat(linea.fields.precio_pagina_color).toFixed(6), + 'totalTinta':isNaN(parseFloat(linea.fields.precio_tinta)) ? "" : parseFloat(linea.fields.precio_tinta).toFixed(2), + 'totalCorte':isNaN(parseFloat(linea.fields.total_corte)) ? "" : parseFloat(linea.fields.total_corte).toFixed(2), + 'total': isNaN(parseFloat(linea.fields.total_impresion)) ? "" : (parseFloat(linea.fields.total_impresion)).toFixed(2), } } function checkDatosPedidoForComp() { - if (parseInt(document.getElementById('paginas').value) > 0 && - parseInt(document.getElementById('tirada').value) > 0 && + if (parseInt($('#paginas').val()) > 0 && + parseInt($('#tirada').val()) > 0 && ($('#papelFormatoId').select2('data').length > 0 || - (parseInt(document.getElementById('papelFormatoAncho').value) > 0 && parseInt(document.getElementById('papelFormatoAlto').value) > 0))) + (parseInt($('#papelFormatoAncho').val()) > 0 && parseInt($('#papelFormatoAlto').val()) > 0))) return true; return false; } @@ -177,11 +303,13 @@ function updatePapelesComparador() { Array.from(elements_colorhq).forEach(element => { element.style.display = "none"; }); + clearNegro(); break; case "negrohq": Array.from(elements_color).forEach(element => { element.style.display = "none"; + }); Array.from(elements_negro).forEach(element => { element.style.display = "none"; @@ -227,8 +355,197 @@ function updatePapelesComparador() { default: break; } - - - - +} + +function clearNegro() { + document.getElementById('compPaginasNegro').value = 0; + $('#compGramajeNegro').val('').change(); + $('#compGramajeNegro').prop('disabled', true); + $('#compPapelNegro').val('data', { id: '0' }); +} + +function clearIntLineas(is_color){ + $("#tableCompIntPlana").DataTable().rows( '.selected' ).deselect(); + var tabla = $('#tableCompIntPlana').DataTable(); + tabla + .rows( function ( idx, data, node ) { + return data['tipo'].includes(is_color?'color':'bn'); + } ) + .remove() + .draw(); +} + +function clearCubierta(){ + + $('#tableCompCubierta').DataTable().clear().draw(); +} + +function clearIntRot(){ + + $('#tableCompIntRotativa').DataTable().clear().draw(); +} + + +function selectIntLineas(){ + var negro_selected = false; + var color_selected = false; + $("#tableCompIntPlana").DataTable().rows( '.selected' ).deselect(); + $("#tableCompIntPlana").DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) { + if( !negro_selected && $('#tableCompIntPlana').DataTable().cell(rowIdx, 0).data().includes('bn') ){ + $("#tableCompIntPlana").DataTable().row( rowIdx ).nodes().to$().toggleClass( 'selected' ); + negro_selected = true; + } + if( !color_selected && $('#tableCompIntPlana').DataTable().cell(rowIdx, 0).data().includes('color') ){ + $("#tableCompIntPlana").DataTable().row( rowIdx ).nodes().to$().toggleClass( 'selected' ); + color_selected = true; + } + }); + + var table = $("#tableCompIntPlana").DataTable(); + var rows = table.rows( '.selected' ).indexes(); + var data = table.rows( rows ).data(); + + var value_total = 0.00; + + for (let i = 0; i < data.length ; i++) { + + value_total += parseFloat(data[i]['total']) + } + + $('#total_comp_plana').html(value_total.toFixed(2)); +} + +function selectIntRotLineas(){ + + $("#tableCompIntRotativa").DataTable().rows( '.selected' ).deselect(); + + let value_total = 0.00; + + if($("#tableCompIntRotativa").DataTable().rows().count()>0) { + + $("#tableCompIntRotativa").DataTable().row( 0 ).nodes().to$().toggleClass( 'selected' ); + value_total = parseFloat($("#tableCompIntRotativa").DataTable().rows( 0 ).data()[0]['total']) + }; + + + $('#total_comp_rot').html(value_total.toFixed(2)); +} + + +function getIDsComparador(is_color, is_hq){ + + if(!is_color){ + if(is_hq){ + var papel = '#compPapelNegrohq'; + var gramaje = '#compGramajeNegrohq'; + var paginas = '#compPaginasNegrohq'; + } + else{ + var papel = '#compPapelNegro'; + var gramaje = '#compGramajeNegro'; + var paginas = '#compPaginasNegro'; + } + } + else{ + if(is_hq){ + var papel = '#compPapelColorhq'; + var gramaje = '#compGramajeColorhq'; + var paginas = '#compPaginasColorhq'; + } + else{ + var papel = '#compPapelColor'; + var gramaje = '#compGramajeColor'; + var paginas = '#compPaginasColor'; + } + } + return{ + papel: papel, + gramaje: gramaje, + paginas: paginas, + } +} + +function getDimensionLibro(){ + var ancho = 0; + var alto = 0; + + if($('#papelFormatoId').select2('data').length > 0){ + ancho = parseFloat($('#papelFormatoId').select2('data')[0].text.trim().split(" x ")[0]); + alto = parseFloat($('#papelFormatoId').select2('data')[0].text.trim().split(" x ")[1]); + } + else{ + ancho = parseFloat(document.getElementById('papelFormatoAncho').value); + alto = parseFloat(document.getElementById('papelFormatoAlto').value); + } + return { + ancho: ancho, + alto: alto + } +} + +function checkInputsForRotativa(){ + + // Si es color, el gramaje y el papel tiene que ser el mismo + try{ + + if ($('#tipoImpresion').select2('data')[0].id == 'color') { + if($('#compPapelNegro').select2('data')[0].id == $('#compPapelColor').select2('data')[0].id && + $('#compGramajeNegro').select2('data')[0].text.trim() == $('#compGramajeColor').select2('data')[0].text.trim() ){ + + return true; + } + } + else if ($('#tipoImpresion').select2('data')[0].id == 'negro') { + if($('#compPapelNegro').select2('data')[0].id.length>0 && + $('#compGramajeNegro').select2('data')[0].text.length>0){ + return true; + } + } + + + } + catch(error){ + + return false; + } + + return false; +} + + +function fillIntPlana(data, is_color, is_hq){ + let sorted = data.lineas.sort( + (p1, p2) => ((p1.fields.precio_pedido+p1.fields.precio_click_pedido) < (p2.fields.precio_pedido+p2.fields.precio_click_pedido)) ? + -1 : ((p1.fields.precio_pedido+p1.fields.precio_click_pedido) > (p2.fields.precio_pedido+p2.fields.precio_click_pedido)) ? 1 : 0); + sorted.forEach(function(linea) { + if(typeof linea.error == "undefined") + $('#tableCompIntPlana').DataTable().row + .add(getRowFromLineaInt(is_color?(is_hq?'colorhq':'color'):(is_hq?'bnhq':'bn'), linea)) + .draw() + }) +} + +function fillIntRot(data){ + let sorted = data.lineas.sort( + (p1, p2) => ((p1.fields.precio_pedido+p1.fields.precio_click_pedido) < (p2.fields.precio_pedido+p2.fields.precio_click_pedido)) ? + -1 : ((p1.fields.precio_pedido+p1.fields.precio_click_pedido) > (p2.fields.precio_pedido+p2.fields.precio_click_pedido)) ? 1 : 0); + sorted.forEach(function(linea) { + if(typeof linea.error == "undefined"){ + $('#tableCompIntRotativa').DataTable().row + .add(getRowFromLineaRot(linea)) + .draw() + } + }) +} + +function fillCubierta(data, is_color, is_hq){ + let sorted = data.lineas.sort( + (p1, p2) => ((p1.fields.precio_pedido+p1.fields.precio_click_pedido) < (p2.fields.precio_pedido+p2.fields.precio_click_pedido)) ? + -1 : ((p1.fields.precio_pedido+p1.fields.precio_click_pedido) > (p2.fields.precio_pedido+p2.fields.precio_click_pedido)) ? 1 : 0); + sorted.forEach(function(linea) { + if(typeof linea.error == "undefined") + $('#tableCompCubierta').DataTable().row + .add(getRowFromLineaInt('cubierta', linea)) + .draw() + }) } diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php index d935982a..1fc7d275 100644 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/viewCosidotapablandaForm.php @@ -63,6 +63,9 @@ } }); + /******************************* + * Inicialización de los Select2 + *******************************/ $('#incRei').select2({ allowClear: false, }); @@ -94,7 +97,7 @@ $('#compGramajeNegrohq').select2({ allowClear: false, }); - + $('#compPapelColor').select2({ allowClear: false, }); @@ -102,7 +105,7 @@ $('#compPapelColorhq').select2({ allowClear: false, }); - + $('#compGramajeColor').select2({ allowClear: false, }); @@ -119,14 +122,11 @@ allowClear: false, }); - $('#compPaginasCubierta').select2({ + $('#compCarasCubierta').select2({ allowClear: false, minimumResultsForSearch: Infinity, }); - - - endSection() ?> @@ -137,8 +137,6 @@ autosize($('#compCalPaginasColor')); - - $('#papelFormatoPersonalizado').on("click",function(){ var checkbox = document.getElementById('papelFormatoPersonalizado'); if(checkbox.checked == true){ @@ -172,15 +170,23 @@ info: false, ordering: false, responsive: true, + select: true, language: { url: "//cdn.datatables.net/plug-ins/1.13.4/i18n/i18n ?>.json" }, - order: [[19, 'asc']], - "columnDefs": [ - {targets: 19, type: "num"} - ], columns: [ - { 'data': 'tipo' }, + { 'data': 'tipo', + 'render': function ( data, type, row, meta ) { + if(data=='bn') + return ''; + else if(data=='bnhq') + return ''; + else if(data=='color') + return ''; + else if(data=='colorhq') + return ''; + } + }, { 'data': 'paginas' }, { 'data': 'papel' }, { 'data': 'gramaje' }, @@ -195,114 +201,223 @@ { 'data': 'peso' }, { 'data': 'click' }, { 'data': 'totalClicks' }, + { 'data': 'total' }, + ], + }); + + + var tableCompIntRotativa = new DataTable('#tableCompIntRotativa',{ + scrollX: true, + searching: false, + paging: false, + info: false, + ordering: false, + responsive: true, + select: true, + language: { + url: "//cdn.datatables.net/plug-ins/1.13.4/i18n/i18n ?>.json" + }, + columns: [ + { 'data': 'tipo', + 'render': function ( data, type, row, meta ) { + if(data=='rotativa') + return ''; + } + }, + { 'data': 'paginas' }, + { 'data': 'papel' }, + { 'data': 'gramaje' }, + { 'data': 'marca' }, + { 'data': 'aFavorFibra', + 'render': function(data, type, row, meta){ + if(data=='si') + return ''; + else if(data=='no') + return ''; + } + }, + { 'data': 'maquina' }, + { 'data': 'numeroPliegos' }, + { 'data': 'pliegosPedido' }, + { 'data': 'precioPliego' }, + { 'data': 'libro' }, + { 'data': 'totalPapelPedido' }, + { 'data': 'lomo' }, + { 'data': 'peso' }, + { 'data': 'click' }, + { 'data': 'totalClicks' }, { 'data': 'precioPagNegro' }, { 'data': 'precioPagColor' }, { 'data': 'totalTinta' }, { 'data': 'totalCorte' }, { 'data': 'total' }, - - ] + ], }); - - var tableCompIntRotativa = new DataTable('#tableCompIntRotativa',{ + var tableCompCubierta = new DataTable('#tableCompCubierta',{ scrollX: true, searching: false, paging: false, info: false, ordering: false, responsive: true, + select: true, language: { url: "//cdn.datatables.net/plug-ins/1.13.4/i18n/i18n ?>.json" }, + columns: [ + { 'data': 'tipo', + 'render': function ( data, type, row, meta ) { + if(data=='bn') + return ''; + else if(data=='bnhq') + return ''; + else if(data=='color') + return ''; + else if(data=='colorhq') + return ''; + } + }, + { 'data': 'paginas' }, + { 'data': 'papel' }, + { 'data': 'gramaje' }, + { 'data': 'marca' }, + { 'data': 'maquina' }, + { 'data': 'numeroPliegos' }, + { 'data': 'pliegosPedido' }, + { 'data': 'precioPliego' }, + { 'data': 'libro' }, + { 'data': 'totalPapelPedido' }, + { 'data': 'lomo' }, + { 'data': 'peso' }, + { 'data': 'click' }, + { 'data': 'totalClicks' }, + { 'data': 'total' }, + ], }); - var tableCompIntCubierta = new DataTable('#tableCompCubierta',{ - scrollX: true, - searching: false, - paging: false, - info: false, - ordering: false, - responsive: true, - language: { - url: "//cdn.datatables.net/plug-ins/1.13.4/i18n/i18n ?>.json" - }, - }); - - var tableCompIntSobrecubierta = new DataTable('#tableCompSobrecubierta',{ - scrollX: true, - searching: false, - paging: false, - info: false, - ordering: false, - responsive: true, - language: { - url: "//cdn.datatables.net/plug-ins/1.13.4/i18n/i18n ?>.json" - }, - }); - - - $('#compPapelNegro').on('select2:select', function (e){ - $('#compGramajeNegro').val(null).trigger('change') - $('#compGramajeNegro').prop('disabled', false); - $('#compPapelNegro').find('option[value="0"]').remove(); - $('#compGramajeNegro').select2({ - allowClear: true, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', + if($('#compPapelNegro').select2('data')[0].id=='0'){ + $('#compGramajeNegro').val('').change(); + $('#compGramajeNegro').prop('disabled', true); + } - data: function (params) { - return { - tipo: 'gramaje', - datos: $('#compPapelNegro').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); + else{ + $('#compGramajeNegro').val('').change(); + $('#compGramajeNegro').empty().trigger("change"); + $('#compGramajeNegro').prop('disabled', false); + $('#compGramajeNegro').select2({ + allowClear: true, + minimumResultsForSearch: Infinity, + ajax: { + url: '', + type: 'post', + dataType: 'json', + + data: function (params) { + return { + tipo: 'gramaje', + uso: 'bn', + datos: $('#compPapelNegro').select2('data')[0].text.trim() , + : v + }; + }, + delay: 60, + processResults: function (response) { + yeniden(response.); + return { + results: response.menu + }; + }, + cache: true + } + }); + } }); $('.comp_negro_items').on('change', function (e) { - checkComparadorNegro(); + checkComparadorInt(false,false); }); - function checkComparadorNegro() { - if (document.getElementById('compPaginasNegro').value && - $('#compPapelNegro').select2('data').length > 0 && - $('#compGramajeNegro').select2('data').length > 0) { + $('.comp_negrohq_items').on('change', function (e) { + + checkComparadorInt(false, true); + }); - if (parseInt(document.getElementById('compPaginasNegro').value) > 0 && checkDatosPedidoForComp()) { + $('.comp_color_items').on('change', function (e) { + + checkComparadorInt(true, false); + }); - if($('#papelFormatoId').select2('data').length > 0){ - ancho = parseFloat($('#papelFormatoId').select2('data')[0].text.trim().split(" x ")[0]); - alto = parseFloat($('#papelFormatoId').select2('data')[0].text.trim().split(" x ")[1]); - } - else{ - ancho = parseFloat(document.getElementById('papelFormatoAncho').value); - alto = parseFloat(document.getElementById('papelFormatoAlto').value); + $('.comp_colorhq_items').on('change', function (e) { + checkComparadorInt(true, true); + }); + + async function getLineasIntPlana(is_color, is_hq){ + + const dimension = getDimensionLibro(); + + let datos = { + type: 'interior', + color: is_color?1:0, + hq: is_hq?1:0, + paginas: parseInt($(''+ elementos.paginas).val()), + tirada: parseInt($('#tirada').val()), + merma: parseInt($('#merma').val()), + ancho: dimension.ancho, + alto: dimension.alto, + papel_generico_id: $(''+ elementos.papel).select2('data')[0].id, + papel_generico: $(''+ elementos.papel).select2('data')[0].text.trim(), + gramaje: $(''+ elementos.gramaje).select2('data')[0].text.trim() , + : v + }; + + $.ajax({ + type: "POST", + url: "/cosidotapablanda/datatable", + data: datos, + success: function (data) { + + clearIntLineas(is_color); + + if(data.lineas.length >0){ + + fillIntPlana(data, is_color, is_hq); + selectIntLineas(); + $('#title_int_plana').html('' + ' (' + tableCompIntPlana.rows().count() + ')'); } + yeniden(data.); + return true; + }, + error: function(e){ + return false; + } + }) + return false; + } + + async function getLineasIntRot(is_hq){ + + const dimension = getDimensionLibro(); + + // Rotativa solo negro o color (no hq) + if ( is_hq==false){ + console.log('hola'); + if(checkInputsForRotativa()){ + let datos = { - table_type: 'comp_int_bn', - paginas: parseInt(document.getElementById('compPaginasNegro').value), - tirada: parseInt(document.getElementById('tirada').value), - merma: parseInt(document.getElementById('merma').value), - ancho: ancho, - alto: alto, + type: 'interior_rot', + paginas: parseInt($('#paginas').val()), + paginas_negro: parseInt($('#compPaginasNegro').val()), + paginas_color: parseInt($('#compPaginasColor').val()), + tirada: parseInt($('#tirada').val()), + merma: parseInt($('#merma').val()), + ancho: dimension.ancho, + alto: dimension.alto, + // el papel y el gramaje se coge del negro (siempre estará) papel_generico_id: $('#compPapelNegro').select2('data')[0].id, papel_generico: $('#compPapelNegro').select2('data')[0].text.trim(), gramaje: $('#compGramajeNegro').select2('data')[0].text.trim() , @@ -314,163 +429,258 @@ url: "/cosidotapablanda/datatable", data: datos, success: function (data) { + + clearIntRot(); + if(data.lineas.length >0){ - let sorted = data.lineas.sort( - (p1, p2) => ((p1.fields.precio_pedido+p1.fields.precio_click_pedido) < (p2.fields.precio_pedido+p2.fields.precio_click_pedido)) ? - -1 : ((p1.fields.precio_pedido+p1.fields.precio_click_pedido) > (p2.fields.precio_pedido+p2.fields.precio_click_pedido)) ? 1 : 0); - sorted.forEach(function(linea) { - console.log(linea); - tableCompIntPlana.row - .add(getRowFromLinea('BN', linea)) - .draw() - }) - - $('#total_comp_negro').html( - isNaN(parseFloat(data.lineas[0].fields.precio_pedido).toFixed(2)) ? - "0.00" : parseFloat(data.lineas[0].fields.precio_pedido).toFixed(2)) - $("#tableCompIntPlana").DataTable().row( 0 ).nodes().to$().toggleClass( 'selected' ); + + fillIntRot(data); + selectIntRotLineas(); + $('#title_int_rot').html('' + ' (' + tableCompIntRotativa.rows().count() + ')'); } yeniden(data.); + return true; }, + error: function(e){ + return false; + } }) - } + } } + return false; } + $('.comp_cubierta_items').on('change', function (){ + + if ($('#compCarasCubierta').select2('data').length > 0 && + $('#compPapelCubierta').select2('data').length > 0 && + $('#compGramajeCubierta').select2('data').length > 0 ){ + + const dimension = getDimensionLibro(); + + let datos = { + type: 'cubierta', + paginas: parseInt($('#compCarasCubierta').select2('data')[0].id), + tirada: parseInt($('#tirada').val()), + merma: parseInt($('#mermacubierta').val()), + color: 1, + ancho: dimension.ancho, + alto: dimension.alto, + solapas: $('#solapas').is(':checked')?1:0, + solapas_ancho: parseInt($('#solapas_ancho').val()), + papel_generico_id: $('#compPapelCubierta').select2('data')[0].id, + papel_generico: $('#compPapelCubierta').select2('data')[0].text.trim(), + gramaje: $('#compGramajeCubierta').select2('data')[0].text.trim() , + : v + }; + + $.ajax({ + type: "POST", + url: "/cosidotapablanda/datatable", + data: datos, + success: function (data) { + + clearCubierta(); + + if(data.lineas.length >0){ + console.log(data.lineas); + + fillCubierta(data); + //selectIntLineas(); + //$('#title_int_plana').html('' + ' (' + tableCompIntPlana.rows().count() + ')'); + } + yeniden(data.); + return true; + }, + error: function(e){ + return false; + } + }) + } + + else{ + clearCubierta(); + } + }); + + + function checkComparadorInt(is_color, is_hq) { + + elementos = getIDsComparador(is_color, is_hq) + + if ($('#compPaginasNegro').val() && + $(''+ elementos.papel).select2('data').length > 0 && + $(''+ elementos.gramaje).select2('data').length > 0 && + parseInt($(''+ elementos.paginas).val()) > 0 && + checkDatosPedidoForComp()) { + + getLineasIntPlana(is_color, is_hq).then((result) =>{ + getLineasIntRot(is_hq); + }); + } + else{ + clearIntLineas(is_color); + } + } + + + $('#compPapelNegrohq').on('select2:select', function (e){ - $('#compGramajeNegrohq').val(null).trigger('change'); - $('#compGramajeNegrohq').prop('disabled', false); - $('#compPapelNegrohq').find('option[value="0"]').remove(); - $('#compGramajeNegrohq').select2({ - allowClear: true, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', + if($('#compPapelNegrohq').select2('data')[0].id=='0'){ + $('#compGramajeNegrohq').val('').change(); + $('#compGramajeNegrohq').prop('disabled', true); + } + else{ + $('#compGramajeNegrohq').empty().trigger("change"); + $('#compGramajeNegrohq').prop('disabled', false); + $('#compGramajeNegrohq').select2({ + allowClear: true, + minimumResultsForSearch: Infinity, + ajax: { + url: '', + type: 'post', + dataType: 'json', - data: function (params) { - return { - tipo: 'gramaje', - datos: $('#compPapelNegrohq').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); + data: function (params) { + return { + tipo: 'gramaje', + uso: 'bn', + datos: $('#compPapelNegrohq').select2('data')[0].text.trim() , + : v + }; + }, + delay: 60, + processResults: function (response) { + yeniden(response.); + return { + results: response.menu + }; + }, + cache: true + } + }); + } }); $('#compPapelColor').on('select2:select', function (e){ - $('#compGramajeColor').val(null).trigger('change'); - $('#compGramajeColor').prop('disabled', false); - $('#compPapelColor').find('option[value="0"]').remove(); - $('#compGramajeColor').select2({ - allowClear: true, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', + if($('#compPapelColor').select2('data')[0].id=='0'){ + $('#compGramajeColor').val('').change(); + $('#compGramajeColor').prop('disabled', true); + } + else{ + $('#compGramajeColor').empty().trigger("change"); + $('#compGramajeColor').prop('disabled', false); + $('#compPapelColor').find('option[value="0"]').remove(); + $('#compGramajeColor').select2({ + allowClear: true, + minimumResultsForSearch: Infinity, + ajax: { + url: '', + type: 'post', + dataType: 'json', - data: function (params) { - return { - tipo: 'gramaje', - datos: $('#compPapelColor').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); + data: function (params) { + return { + tipo: 'gramaje', + uso: 'color', + datos: $('#compPapelColor').select2('data')[0].text.trim() , + : v + }; + }, + delay: 60, + processResults: function (response) { + yeniden(response.); + return { + results: response.menu + }; + }, + cache: true + } + }); + } }); $('#compPapelColorhq').on('select2:select', function (e){ - $('#compGramajeColorhq').val(null).trigger('change'); - $('#compGramajeColorhq').prop('disabled', false); - $('#compPapelColorhq').find('option[value="0"]').remove(); - $('#compGramajeColorhq').select2({ - allowClear: true, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', + if($('#compPapelColorhq').select2('data')[0].id=='0'){ + $('#compGramajeColorhq').val('').change(); + $('#compGramajeColorhq').prop('disabled', true); + } + else{ + $('#compGramajeColorhq').empty().trigger("change"); + $('#compGramajeColorhq').prop('disabled', false); + $('#compPapelColorhq').find('option[value="0"]').remove(); + $('#compGramajeColorhq').select2({ + allowClear: true, + minimumResultsForSearch: Infinity, + ajax: { + url: '', + type: 'post', + dataType: 'json', - data: function (params) { - return { - tipo: 'gramaje', - datos: $('#compPapelColorhq').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); + data: function (params) { + return { + tipo: 'gramaje', + uso: 'color', + datos: $('#compPapelColorhq').select2('data')[0].text.trim() , + : v + }; + }, + delay: 60, + processResults: function (response) { + yeniden(response.); + return { + results: response.menu + }; + }, + cache: true + } + }); + } }); $('#compPapelCubierta').on('select2:select', function (e){ + if($('#compPapelCubierta').select2('data')[0].id=='0'){ + $('#compGramajeCubierta').val('').change(); + $('#compGramajeCubierta').prop('disabled', true); + } + else{ + $('#compGramajeCubierta').val('').trigger('change'); + $('#compGramajeCubierta').prop('disabled', false); + $('#compPapelCubierta').find('option[value="0"]').remove(); + $('#compGramajeCubierta').select2({ + allowClear: true, + minimumResultsForSearch: Infinity, + ajax: { + url: '', + type: 'post', + dataType: 'json', - $('#compGramajeCubierta').val(null).trigger('change'); - $('#compGramajeCubierta').prop('disabled', false); - $('#compPapelCubierta').find('option[value="0"]').remove(); - $('#compGramajeCubierta').select2({ - allowClear: true, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', - - data: function (params) { - return { - tipo: 'gramaje', - datos: $('#compPapelCubierta').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); + data: function (params) { + return { + tipo: 'gramaje', + datos: $('#compPapelCubierta').select2('data')[0].text.trim() , + : v + }; + }, + delay: 60, + processResults: function (response) { + yeniden(response.); + return { + results: response.menu + }; + }, + cache: true + } + }); + } }); - - - endSection() ?> section('css') ?> @@ -481,15 +691,15 @@ endSection() ?> -section('additionalExternalJs') ?> - - -endSection() ?> - section('additionalExternalJs') ?> -endSection() ?> \ No newline at end of file + + + + + +endSection() ?>