viewData['usingSweetAlert'] = true; $this->viewData = ['usingServerSideDataTable' => true]; // JJO // Breadcrumbs $this->viewData['breadcrumb'] = [ ['title' => 'Importador de presupuestos', 'route' => "javascript:void(0);", 'active' => false] ]; $this->messageService = service('messages'); parent::initController($request, $response, $logger); $this->model = new ImportadorModel(); } public function index() { $viewData = [ 'currentModule' => static::$controllerSlug, 'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('Presupuestos.moduleName')]), ]; $this->viewData['serviciosAutomaticos'] = [ 'ferro' => model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_ferro')->value, 'prototipo' => model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_prototipo')->value, 'ferro_digital' => model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_ferro_digital')->value, ]; $viewData = array_merge($this->viewData, $viewData); // merge any possible values from the parent controller class return view(static::$viewPath . 'viewImportadorPresupuestos', $viewData); } public function getClientList() { $search = ""; if ($this->request->getGet("q")) { $search = $this->request->getGet("q"); } $dataOld = (new ImportadorModel())->getClientList(); $dataNew = (new ClienteModel())->getIdName($search); $newKeys = array_map(fn($item) => $item->id . '_' . $item->name, $dataNew); // Filtrar $dataOld para obtener solo los elementos comunes $commonData = array_filter($dataOld, fn($item) => in_array($item->id . '_' . $item->name, $newKeys)); return $this->response->setJSON(array_values($commonData)); } public function getPresupuestosList() { $search = ""; if ($this->request->getGet("q")) { $search = $this->request->getGet("q"); } $clienteId = $this->request->getGet("clienteId"); $data = (new ImportadorModel())->getPresupuestosList($clienteId, $search); return $this->response->setJSON($data); } public function getEncuadernacionList() { $search = ""; if ($this->request->getGet("q")) { $search = $this->request->getGet("q"); } $model = model('App\Models\Configuracion\TipoPresupuestoModel'); $data = $model->getLibros($search); return $this->response->setJSON($data); } public function getPresupuesto() { if ($this->request->isAJAX()) { $id = $this->request->getGet("id") ?? 0; if ($id == 0) { return $this->failUnauthorized('Invalid request', 403); } $data = (new ImportadorModel())->getPresupuestoForImport($id); $model_papel_formato = model('App\Models\Configuracion\PapelFormatoModel'); $papel_formato = $model_papel_formato->where('is_deleted', 0)->where('ancho>', 0)->findAll(); $papel_formato_id = null; $papel_formato_texto = null; foreach ($papel_formato as $formato) { if ($data['datosGenerales']->papel_formato_personalizado) { if ($formato->ancho == $data['datosGenerales']->papel_formato_personalizado_ancho && $formato->alto == $data['datosGenerales']->papel_formato_personalizado_alto) { $papel_formato_id = $formato->id; $papel_formato_texto = $formato->ancho . 'x' . $formato->alto; break; } } else { if ($formato->ancho == $data['datosGenerales']->papel_formato_ancho && $formato->alto == $data['datosGenerales']->papel_formato_alto) { $papel_formato_id = $formato->id; $papel_formato_texto = $formato->ancho . 'x' . $formato->alto; break; } } } $datosGenerales = new \stdClass(); $datosGenerales->tirada = $data['datosGenerales']->tirada; $datosGenerales->paginas = $data['datosGenerales']->paginas; if ($papel_formato_id != null) { $datosGenerales->papel_formato_personalizado = 0; $datosGenerales->papel_formato_id = $papel_formato_id; $datosGenerales->papel_formato_texto = $papel_formato_texto; } else { $datosGenerales->papel_formato_personalizado = 1; if ($data['datosGenerales']->papel_formato_personalizado) { $datosGenerales->papel_formato_ancho = $data['datosGenerales']->papel_formato_personalizado_ancho; $datosGenerales->papel_formato_alto = $data['datosGenerales']->papel_formato_personalizado_alto; } else { $datosGenerales->papel_formato_ancho = $data['datosGenerales']->papel_formato_ancho; $datosGenerales->papel_formato_alto = $data['datosGenerales']->papel_formato_alto; } } $data['manipulados'] = array_map(fn($item) => $item->nombre, $data['manipulados']); $data['acabados'] = array_map(fn($item) => $item->nombre, $data['acabados']); $encuadernacion = $this->getEncuadernacion($data['manipulados']); $lineas = $this->getLineasPresupuesto($data['lineas']); $acabados = $this->getAcabados($data['acabados']); $returnData = [ 'success' => true, 'data' => [ 'datosGenerales' => $datosGenerales, 'encuadernacion' => $encuadernacion, 'lineas' => $lineas, 'acabados' => $acabados, 'servicios' => [ 'ferro' => $data['datosGenerales']->ferro, 'ferroDigital' => $data['datosGenerales']->ferro_digital, 'marcapaginas' => $data['datosGenerales']->marcapaginas, 'prototipo' => $data['datosGenerales']->prototipo ] ] ]; return $this->response->setJSON($returnData); } else { return $this->failUnauthorized('Invalid request', 403); } } private function getEncuadernacion($manipulados) { $encuadernacion_values = [ 'libroFresadoTapaDura' => 'Tapa Dura al Cromo Fresada', 'libroFresadoTapaBlanda' => 'RĂºstica Fresada', 'libroCosidoTapaDura' => 'Tapa Dura al Cromo Cosida Hilo', 'libroCosidoTapaBlanda' => 'RĂºstica Cosido Hilo vegetal', 'libroEspiralTapaDura' => 'Espiral', 'libroGrapado' => 'Cosido a caballete 2 grapas' ]; $encuadernacionOld = ""; $encuadernacion = new stdClass(); foreach ($manipulados as $manipulado) { // check if manipulado is like strlower encuadernacion_values values foreach ($encuadernacion_values as $valor) { if (strpos(strtolower($manipulado), strtolower($valor)) !== false) { $encuadernacionOld = $manipulado; $key = array_search(strtolower($valor), array_map('strtolower', $encuadernacion_values)); $model = model('App\Models\Configuracion\TipoPresupuestoModel'); $encuadernacion = $model->select('id, codigo, encuadernacion')->where('codigo', $key)->first(); break; } } } return [ 'encuadernacion' => $encuadernacion, 'encuadernacionOld' => $encuadernacionOld ]; } private function getLineasPresupuesto($lineas) { $isHq = false; foreach ($lineas as $linea) { if ($linea->tipo == 'bn' || $linea->tipo == 'color' || $linea->tipo == 'rotativa') { if ($linea->hq == 1) { $isHq = true; break; } } } $model_papelGenerico = model('App\Models\Configuracion\PapelGenericoModel'); $bn = new stdClass(); $color = new stdClass(); $cubierta = new stdClass(); $sobrecubierta = new stdClass(); foreach ($lineas as $linea) { $newPapel = $model_papelGenerico->where('code', $linea->papel_code)->where('deleted_at', NULL)->first(); if ($linea->tipo == 'bn') { $bn->papel_id = $linea->papel_id; $bn->papel_nombre = $linea->papel_nombre; $bn->papel_code = $linea->papel_code; $bn->gramaje = $linea->gramaje; $bn->paginas = $linea->paginas; $bn->new_papel_id = $newPapel->id; $bn->new_papel_nombre = $newPapel->nombre; } else if ($linea->tipo == 'color') { $color->papel_id = $linea->papel_id; $color->papel_nombre = $linea->papel_nombre; $color->papel_code = $linea->papel_code; $color->gramaje = $linea->gramaje; $color->paginas = $linea->paginas; $color->new_papel_id = $newPapel->id; $color->new_papel_nombre = $newPapel->nombre; } else if ($linea->tipo == 'portada') { $cubierta->papel_id = $linea->papel_id; $cubierta->papel_nombre = $linea->papel_nombre; $cubierta->papel_code = $linea->papel_code; $cubierta->gramaje = $linea->gramaje; $cubierta->paginas = $linea->paginas; $cubierta->new_papel_id = $newPapel->id; $cubierta->new_papel_nombre = $newPapel->nombre; $cubierta->solapas = $linea->solapas_ancho; } else if ($linea->tipo == 'cubierta') { $sobrecubierta->papel_id = $linea->papel_id; $sobrecubierta->papel_nombre = $linea->papel_nombre; $sobrecubierta->papel_code = $linea->papel_code; $sobrecubierta->gramaje = $linea->gramaje; $sobrecubierta->paginas = $linea->paginas; $sobrecubierta->new_papel_id = $newPapel->id; $sobrecubierta->new_papel_nombre = $newPapel->nombre; $sobrecubierta->solapas = $linea->solapas_ancho; } else if ($linea->tipo == 'rotativa') { if ($linea->rotativa_impresion == 'negro') { $bn->papel_id = $linea->papel_id; $bn->papel_nombre = $linea->papel_nombre; $bn->papel_code = $linea->papel_code; $bn->gramaje = $linea->gramaje; $bn->paginas = $linea->paginas; $bn->new_papel_id = $newPapel->id; $bn->new_papel_nombre = $newPapel->nombre; } else { if ($linea->paginas == $linea->rotativa_pag_color) { $color->papel_id = $linea->papel_id; $color->papel_nombre = $linea->papel_nombre; $color->papel_code = $linea->papel_code; $color->gramaje = $linea->gramaje; $color->paginas = $linea->paginas; $color->new_papel_id = $newPapel->id; $color->new_papel_nombre = $newPapel->nombre; } else { $bn->papel_id = $color->papel_id = $linea->papel_id; $bn->papel_nombre = $color->papel_nombre = $linea->papel_nombre; $bn->papel_code = $color->papel_code = $linea->papel_code; $bn->gramaje = $color->gramaje = $linea->gramaje; $color->paginas = $linea->rotativa_pag_color; $bn->paginas = intval($linea->paginas) - intval($linea->rotativa_pag_color); $bn->new_papel_id = $color->new_papel_id = $newPapel->id; $bn->new_papel_nombre = $color->new_papel_nombre = $newPapel->nombre; } } } } return [ 'bn' => $bn, 'color' => $color, 'cubierta' => $cubierta, 'sobrecubierta' => $sobrecubierta, 'isHq' => $isHq ]; } private function getAcabados($acabados){ $acabadoCubierta = ""; $reservaUVICubierta = false; $acabadoSobrecubierta = ""; $reservaUVISobrecubierta = false; $acabadoCubiertaOld = ""; $acabadoSobrecubiertaOld = ""; // por defecto, si pone portada o no pone ni portada ni cubierta, se asigna a la cubierta (portada en el antiguo) foreach ($acabados as $acabado) { if (strpos(strtolower($acabado), 'portada') !== false || (strpos(strtolower($acabado), 'portada') === false && strpos(strtolower($acabado), 'sobre cubierta') === false)) { // palabras clave: brillo, mate, gofrado, antirayado, antirrayado, sandy, uvi para buscar en acabado if(strpos(strtolower($acabado), 'brillo') !== false){ $acabadoCubierta = 1; $acabadoCubiertaOld = strlen($acabadoCubiertaOld)==0? $acabado: $acabadoCubiertaOld . ', ' . $acabado; } else if(strpos(strtolower($acabado), 'gofrado') !== false){ $acabadoCubierta = 6; $acabadoCubiertaOld = strlen($acabadoCubiertaOld)==0? $acabado: $acabadoCubiertaOld . ', ' . $acabado; } else if(strpos(strtolower($acabado), 'antirayado') !== false || strpos(strtolower($acabado), 'antirrayado') !== false){ $acabadoCubierta = 8; $acabadoCubiertaOld = strlen($acabadoCubiertaOld)==0? $acabado: $acabadoCubiertaOld . ', ' . $acabado; } else if(strpos(strtolower($acabado), 'sandy') !== false){ $acabadoCubierta = 9; $acabadoCubiertaOld = strlen($acabadoCubiertaOld)==0? $acabado: $acabadoCubiertaOld . ', ' . $acabado; } else if(strpos(strtolower($acabado), 'uvi') !== false){ $reservaUVICubierta = true; $acabadoCubiertaOld = strlen($acabadoCubiertaOld)==0? $acabado: $acabadoCubiertaOld . ', ' . $acabado; } else if(strpos(strtolower($acabado), 'mate') !== false){ $acabadoCubierta = 5; $acabadoCubiertaOld = strlen($acabadoCubiertaOld)==0? $acabado: $acabadoCubiertaOld . ', ' . $acabado; } } else if (strpos(strtolower($acabado), 'sobre cubierta') !== false) { // palabras clave: brillo, mate, gofrado, antirayado, antirrayado, sandy, uvi para buscar en acabado if(strpos(strtolower($acabado), 'brillo') !== false){ $acabadoSobrecubierta = 1; $acabadoSobrecubiertaOld = strlen($acabadoSobrecubiertaOld)==0? $acabado: $acabadoSobrecubiertaOld . ', ' . $acabado; } else if(strpos(strtolower($acabado), 'gofrado') !== false){ $acabadoSobrecubierta = 6; $acabadoSobrecubiertaOld = strlen($acabadoSobrecubiertaOld)==0? $acabado: $acabadoSobrecubiertaOld . ', ' . $acabado; } else if(strpos(strtolower($acabado), 'antirayado') !== false || strpos(strtolower($acabado), 'antirrayado') !== false){ $acabadoSobrecubierta = 8; $acabadoSobrecubiertaOld = strlen($acabadoSobrecubiertaOld)==0? $acabado: $acabadoSobrecubiertaOld . ', ' . $acabado; } else if(strpos(strtolower($acabado), 'sandy') !== false){ $acabadoSobrecubierta = 9; $acabadoSobrecubiertaOld = strlen($acabadoSobrecubiertaOld)==0? $acabado: $acabadoSobrecubiertaOld . ', ' . $acabado; } else if(strpos(strtolower($acabado), 'uvi') !== false){ $reservaUVISobrecubierta = true; $acabadoSobrecubiertaOld = strlen($acabadoSobrecubiertaOld)==0? $acabado: $acabadoSobrecubiertaOld . ', ' . $acabado; } else if(strpos(strtolower($acabado), 'mate') !== false){ $acabadoSobrecubierta = 5; $acabadoSobrecubiertaOld = strlen($acabadoSobrecubiertaOld)==0? $acabado: $acabadoSobrecubiertaOld . ', ' . $acabado; } } } // Si es mate y lleva UVI, se cambia al servicio correspondiente if($acabadoCubierta == 5 && $reservaUVICubierta){ $acabadoCubierta = 2; } if($acabadoSobrecubierta == 5 && $reservaUVISobrecubierta){ $acabadoSobrecubierta = 2; } $model = model('App\Models\Tarifas\Acabados\ServicioAcabadoModel'); $cubierta = new stdClass(); $cubierta->acabadoOld = $acabadoCubiertaOld; $cubierta->acabado = $model->select('id as id, nombre as name')->where('id', $acabadoCubierta)->first(); $sobrecubierta = new stdClass(); $sobrecubierta->acabadoOld = $acabadoSobrecubiertaOld; $sobrecubierta->acabado = $model->select('id as id, nombre as name')->where('id', $acabadoSobrecubierta)->first(); return [ 'cubierta' => $cubierta, 'sobrecubierta' => $sobrecubierta, ]; } public function importarPresupuesto(){ if($this->request->isAJAX()){ $presupuesto_id = $this->request->getPost('id'); $tipo_presupuesto_id = intval($this->request->getPost('encuadernacion') ?? 0); $papel_formato_id = $this->request->getPost('papel_formato_id'); $papel_formato_personalizado = intval($this->request->getPost('papel_formato_personalizado') ?? 0); $papel_formato_ancho = intval($this->request->getPost('papel_formato_ancho') ?? 0); $papel_formato_alto = intval($this->request->getPost('papel_formato_alto') ?? 0); if($papel_formato_personalizado){ $tamanio = array( "ancho" => $papel_formato_ancho, "alto" => $papel_formato_alto ); } else{ $medidas = model('App\Models\Configuracion\PapelFormatoModel')->select('ancho, alto')->where('id', $papel_formato_id)->first(); $tamanio = array( "ancho" => $medidas->ancho, "alto" => $medidas->alto ); } $isHq = intval($this->request->getPost('isHq') ?? 0); $paginas_bn = intval($this->request->getPost('paginas_bn') ?? 0); $paginas_color = intval($this->request->getPost('paginas_color') ?? 0); $gramaje_bn = intval($this->request->getPost('gramaje_bn') ?? 0); $gramaje_color = intval($this->request->getPost('gramaje_color') ?? 0); $papel_bn = intval($this->request->getPost('papel_bn') ?? 0); $papel_color = intval($this->request->getPost('papel_color') ?? 0); $papel_interior_diferente = false; if($papel_bn != $papel_color && $papel_bn != 0 && $papel_color != 0){ $papel_interior_diferente = true; $papel_interior = array( "negro" => $papel_bn, "color" => $papel_color ); $gramaje_interior = array( "negro" => $gramaje_bn, "color" => $gramaje_color ); } else{ $papel_interior = $papel_bn == 0 ? $papel_color : $papel_bn; $gramaje_interior = $gramaje_bn == 0 ? $gramaje_color : $gramaje_bn; } $interior = array( "papelInterior" => $papel_interior, "gramajeInterior" => $gramaje_interior ); $isColor = false; if(intval($paginas_color)>0){ $isColor = true; } // se recalcula isColor y isHq [$isColor, $isHq] = PresupuestoService::getCalidad( 'admin', null, $isColor, $isHq, intval($this->request->getPost('tirada') ?? 0)); $tapaCubierta = model('App\Models\Configuracion\TipoPresupuestoModel')-> select("is_tapa_dura")->where('id', $tipo_presupuesto_id)->first(); $tapaCubierta = $tapaCubierta->is_tapa_dura == 0 ? "tapaBlanda" : "tapaDura"; $cubierta = array( "carasImpresion" => intval($this->request->getPost('paginas_cubierta') ?? 0), "tipoCubierta" => $tapaCubierta, "papelCubierta" => intval($this->request->getPost('papel_cubierta') ?? 0), "gramajeCubierta" => intval($this->request->getPost('gramaje_cubierta') ?? 0), "acabado" => intval($this->request->getPost('acabado_cubierta') ?? 0), ); $solapas_cubierta = intval($this->request->getPost('solapas_cubierta') ?? 0); if($solapas_cubierta>0){ $cubierta["solapas"] = 1; $cubierta["tamanioSolapas"] = $solapas_cubierta; } else{ $cubierta["solapas"] = 0; } $sobrecubierta = intval($this->request->getPost('sobrecubierta') ?? 0); if($sobrecubierta>0){ $sobrecubierta = array( "papel" => intval($this->request->getPost('papel_sobrecubierta') ?? 0), "gramaje" => intval($this->request->getPost('gramaje_sobrecubierta') ?? 0), "solapas" => intval($this->request->getPost('solapas_sobrecubierta') ?? 0), "acabado" => intval($this->request->getPost('acabado_sobrecubierta') ?? 0), ); // para corregir el fallo de un presupuesto sin solapas en sobrecubierta if($sobrecubierta["solapas"] == 0){ $sobrecubierta["solapas"] = 80; } } else{ $sobrecubierta = false; } $datosSave = model('App\Models\Presupuestos\ImportadorModel')->getDatosGuardar($presupuesto_id); $direcciones = model('App\Models\Presupuestos\ImportadorModel')->getDirecciones($presupuesto_id); $direcciones = (array) $direcciones; $direcciones = array_map(fn($item) => (array) $item, $direcciones); $direccionesToSend = []; foreach($direcciones as $direccion){ $direccion['pais_id'] = model('App\Models\Configuracion\PaisModel')->select('id')->like('nombre', $direccion['pais'])->first()->id; $tempData = []; $tempData['direccion'] = $direccion; $tempData['entregaPalets'] = 0; $tempData['unidades'] = $direccion['unidades']; array_push($direccionesToSend, $tempData); } $datos = array( "tirada" => array(intval($this->request->getPost('tirada') ?? 0)), "selectedTirada" => intval($this->request->getPost('tirada') ?? 0), "paginas" => intval($this->request->getPost('paginas') ?? 0), "tamanio" => $tamanio, "tipo_presupuesto_id" => $tipo_presupuesto_id, "clienteId" => intval($this->request->getPost('cliente_id') ?? 0), "isColor" => $isColor, "isHq" => $isHq, "papelInteriorDiferente" => $papel_interior_diferente, "paginasColor" => $paginas_color, "paginasCuadernillo" => 32, "interior" => $interior, "cubierta" => $cubierta, "sobrecubierta" => $sobrecubierta, "guardas" => false, "faja" => 0, "servicios" => $this->request->getPost('servicios') ?? [], "datosCabecera" => [ "titulo" => $datosSave->titulo ?? "", "autor" => $datosSave->autor ?? "", "coleccion" => $datosSave->coleccion ?? "", "isbn" => $datosSave->isbn ?? "", "referenciaCliente" => $datosSave->referenciaCliente ?? "" ], 'entrega_taller' => $datosSave->entrega_taller, 'direcciones' => $direccionesToSend ); $value = (new Presupuestocliente())->guardar($datos); if(isset($value['sk_id'])){ $texto_comments = '[PRESUPUESTO IMPORTADO ' . $presupuesto_id . ' - ERP ANTIGUO]' . PHP_EOL . '------------------------------------------------------------------------------------------' . PHP_EOL; $presupuesto_model = model('App\Models\Presupuestos\PresupuestoModel'); $presupuesto_model->update($value['sk_id'], [ 'comentarios_cliente' => strlen($datosSave->comentarios_cliente)>0?$texto_comments . $datosSave->comentarios_cliente:"", 'comentarios_safekat' => strlen($datosSave->comentarios_safekat)>0? $texto_comments . $datosSave->comentarios_safekat:"", ]); $returnData = [ 'success' => true, 'id' => $value['sk_id'] ]; } else{ $returnData = [ 'success' =>false, ]; } return $this->response->setJSON($returnData); } else{ return $this->failUnauthorized('Invalid request', 403); } } }