diff --git a/ci4/app/Config/Database.php b/ci4/app/Config/Database.php index e2450ec1..fa411043 100755 --- a/ci4/app/Config/Database.php +++ b/ci4/app/Config/Database.php @@ -71,6 +71,32 @@ class Database extends Config 'busyTimeout' => 1000, ]; + public array $old_erp = [ + 'DSN' => '', + 'hostname' => 'localhost', + 'username' => '', + 'password' => '', + 'database' => '', + 'DBDriver' => 'MySQLi', + 'DBPrefix' => '', + 'pConnect' => false, + 'DBDebug' => true, + 'charset' => 'utf8mb4', + 'DBCollat' => 'utf8mb4_general_ci', + 'swapPre' => '', + 'encrypt' => false, + 'compress' => false, + 'strictOn' => false, + 'failover' => [], + 'port' => 3306, + 'numberNative' => false, + 'dateFormat' => [ + 'date' => 'Y-m-d', + 'datetime' => 'Y-m-d H:i:s', + 'time' => 'H:i:s', + ], + ]; + public function __construct() { parent::__construct(); diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index b4f6144b..77d018b3 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -675,6 +675,16 @@ $routes->group('presupuestocliente', ['namespace' => 'App\Controllers\Presupuest }); $routes->resource('presupuestocliente', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Presupuestocliente', 'except' => 'show,new,create,update']); +$routes->group('importador', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) { + $routes->get('', 'Importadorpresupuestos::index', ['as' => 'importadorPresupuestos']); + $routes->get('clientlist', 'Importadorpresupuestos::getClientList', ['as' => 'clientList']); + $routes->get('presupuestoslist', 'Importadorpresupuestos::getPresupuestosList', ['as' => 'presupuestosList']); + $routes->get('getencuadernacion', 'Importadorpresupuestos::getEncuadernacionList'); + $routes->get('getpresupuestodata', 'Importadorpresupuestos::getPresupuesto', ['as' => 'getPresupuesto']); + $routes->post('importar', 'Importadorpresupuestos::importarPresupuesto'); +}); +$routes->resource('presupuestocliente', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Presupuestocliente', 'except' => 'show,new,create,update']); + $routes->group('serviciosacabados', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) { $routes->get('getacabados', 'Presupuestoacabados::getAcabados'); $routes->post('getvalues', 'Presupuestoacabados::getRowValues'); diff --git a/ci4/app/Controllers/Presupuestos/Importadorpresupuestos.php b/ci4/app/Controllers/Presupuestos/Importadorpresupuestos.php new file mode 100644 index 00000000..e51f7437 --- /dev/null +++ b/ci4/app/Controllers/Presupuestos/Importadorpresupuestos.php @@ -0,0 +1,607 @@ +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 Cosida 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; + } + + $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, + "papelDiferente" => $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' => $texto_comments . $datosSave->comentarios_cliente, + 'comentarios_safekat' => $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); + } + } + +} \ No newline at end of file diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php index 01d79c6d..2fa7a3cf 100644 --- a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php @@ -583,8 +583,10 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $data['comentarios_cliente'] = $presupuesto->comentarios_cliente; $data['comentarios_safekat'] = $presupuesto->comentarios_safekat; + $data['comentarios_pdf'] = $presupuesto->comentarios_pdf; $data['comentarios_presupuesto'] = $presupuesto->comentarios_presupuesto; $data['comentarios_produccion'] = $presupuesto->comentarios_produccion; + $data['tiradasAlternativas'] = json_decode($presupuesto->tirada_alternativa_json_data); diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index d0403473..5200ba84 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -460,7 +460,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $tamanio = $reqData['tamanio']; $paginas = $reqData['paginas'] ?? 0; $paginas_color = $reqData['paginasColor'] ?? 0; - $tipo = $reqData['tipo']; + $tipo = $reqData['tipo'] ?? 'cosido'; $paginasCuadernillo = $reqData['paginasCuadernillo'] ?? null; $papelInteriorDiferente = intval($reqData['papelInteriorDiferente'] ?? null); @@ -478,7 +478,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $direcciones = $reqData['direcciones'] ?? []; - $tipo_impresion_id = $this->getTipoImpresion($tipo, $cubierta['tipoCubierta']); + $tipo_impresion_id = intval($reqData['tipo_presupuesto_id'] ?? 0) == 0? + $this->getTipoImpresion($tipo, $cubierta['tipoCubierta']) : intval($reqData['tipo_presupuesto_id']); $lomoRedondo = $cubierta['lomoRedondo'] ?? 0; if ($papelInteriorDiferente) { @@ -975,7 +976,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $paginasColorConsecutivas = $reqData['pagColorConsecutivas'] ?? 0; $papelInteriorDiferente = $reqData['papelInteriorDiferente'] ?? 0; - $tipo = $reqData['tipo']; + $tipo = $reqData['tipo'] ?? ""; $paginasCuadernillo = $reqData['paginasCuadernillo'] ?? 32; $papelInteriorDiferente = intval($reqData['papelInteriorDiferente'] ?? null); @@ -1001,7 +1002,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $direcciones = $reqData['direcciones'] ?? []; - $tipo_impresion_id = $this->getTipoImpresion($tipo, $cubierta['tipoCubierta']); + if($tipo != "") + $tipo_impresion_id = $this->getTipoImpresion($tipo, $cubierta['tipoCubierta']); + else + $tipo_impresion_id = $reqData['tipo_presupuesto_id'] ?? 0; if ($papelInteriorDiferente) { $papel['negro'] = $modelPapelGenerico->where('id', $interior['papelInterior']['negro'])->first()->toArray(); @@ -1262,16 +1266,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController ]; - if(isset($resultado_presupuesto['values']['servicios_extra'])) - { + if (isset($resultado_presupuesto['values']['servicios_extra'])) { foreach ($resultado_presupuesto['values']['servicios_extra'] as $servicio) { - if($servicio->tarifa_id == $servicio_ferro->id){ + if ($servicio->tarifa_id == $servicio_ferro->id) { $ferro = 1; - } - else if($servicio->tarifa_id == $servicio_ferro_digital->id){ + } else if ($servicio->tarifa_id == $servicio_ferro_digital->id) { $ferroDigital = 1; - } - else if($servicio->tarifa_id == $servicio_prototipo->id){ + } else if ($servicio->tarifa_id == $servicio_prototipo->id) { $prototipo = 1; } } @@ -1435,7 +1436,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } else if ($servicio->tarifa_id == $servicio_ferro->id || $servicio->tarifa_id == $servicio_prototipo->id) { // Servicios extra $this->guardarServicio($id, $servicio, 'extra'); - }else if ( + } else if ( $servicio->tarifa_id == $servicio_solapas_cubierta->id || $servicio->tarifa_id == $servicio_solapas_sobrecubierta->id || $servicio->tarifa_id == $servicio_solapas_faja->id || @@ -1764,7 +1765,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $direccion['direccion'], $peso_libro, $direccion['unidades'], - $direccion['entregaPalets'] == 'false' ? 0 : 1, + ($direccion['entregaPalets'] == 'false' || $direccion['entregaPalets'] == 0) ? 0 : 1, false ); @@ -1775,7 +1776,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController unset($data->id); $data->precio = $data->coste; unset($data->coste); - $data->entregaPieCalle = $direccion['entregaPalets'] == 'false' ? 0 : 1; + $data->entregaPieCalle = ($direccion['entregaPalets'] == 'false' || $direccion['entregaPalets'] == 0) ? 0 : 1; unset($data->tipo); $data->peso = $peso_envio; $data->cantidad = $unidades; @@ -1886,15 +1887,21 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $margen = $tarifas_envio[$i]->margen; } + $tarifa_envio_final = null; if (count($tarifas_envio) > 1) { - $tarifa_final = array_reduce($tarifas_envio, function ($previous, $current) { + $tarifa_envio_final = array_reduce($tarifas_envio, function ($previous, $current) { return $current->precio < $previous->precio ? $current : $previous; }); - $coste = $tarifa_final->precio; } else { - if (count($tarifas_envio) > 0) - $coste = $tarifas_envio[0]->precio; - $margen = $tarifas_envio[0]->margen; + if (count($tarifas_envio) > 0){ + $tarifa_envio_final = $tarifas_envio[0]; + } + } + $coste = $tarifa_envio_final->precio; + $margen = $tarifa_envio_final->margen; + + if(!isset($return_data['id'])){ + $return_data['id'] = $tarifa_envio_final->id; } $return_data['coste'] = $coste; @@ -2779,10 +2786,12 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $serviciosExtra = []; // funcionalidad para los servicios extra añadidos por el usuario - if($datos_entrada['servicios'] !== [] && isset($datos_entrada['servicios']['serviciosExtra']) && - $datos_entrada['servicios']['serviciosExtra'] !== []){ + if ( + $datos_entrada['servicios'] !== [] && isset($datos_entrada['servicios']['serviciosExtra']) && + $datos_entrada['servicios']['serviciosExtra'] !== [] + ) { - foreach($datos_entrada['servicios']['serviciosExtra'] as $servicio){ + foreach ($datos_entrada['servicios']['serviciosExtra'] as $servicio) { $resultado = PresupuestoCLienteService::getServiciosExtra([ 'tarifa_id' => intval($servicio), ]); @@ -3495,7 +3504,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController return [$paginasNegro, $paginasColor]; } - private function getServiciosExtra(){ + private function getServiciosExtra() + { $servicios = []; @@ -3504,12 +3514,15 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController foreach ($data as $servicio) { $id = "service_extra_" . $servicio->id; - array_push($servicios, - "id}\" data-tarifa-tipo=\"extra\" data-tarifa-nombre=\"{$servicio->nombre}\"> - "); + " + ); } return $servicios; } + } diff --git a/ci4/app/Controllers/Test.php b/ci4/app/Controllers/Test.php index 54de9694..9e73792d 100755 --- a/ci4/app/Controllers/Test.php +++ b/ci4/app/Controllers/Test.php @@ -3,9 +3,12 @@ namespace App\Controllers; use App\Controllers\BaseController; +use App\Controllers\Presupuestos\Importadorpresupuestos; +use App\Controllers\Presupuestos\Presupuestocliente; use App\Models\Configuracion\MaquinasTarifasImpresionModel; use App\Models\Configuracion\PapelGenericoModel; use App\Models\Configuracion\MaquinaModel; +use App\Models\Presupuestos\ImportadorModel; use App\Models\Presupuestos\PresupuestoModel; use App\Models\Usuarios\GroupModel; use App\Models\Usuarios\PermisosModel; @@ -26,13 +29,9 @@ class Test extends BaseController public function index() { - /*$model = model("\App\Models\Clientes\ClientePreciosModel"); - $model->debug_all_clientes_to_defecto(); - echo '
'; - echo 'OK'; - echo '';*/ - - xdebug_info(); + + // (new Presupuestocliente())->testRemoteDB(); + (new Importadorpresupuestos())->getClientList(); diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index b6b34004..d8e63cb1 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -254,6 +254,7 @@ return [ 'comentarios' => 'Comentarios', 'comentariosCliente' => 'Comentarios cliente', 'comentariosSafekat' => 'Comentarios Safekat', + 'comentariosPresupuestoPDF' => 'Comentarios Presupuesto PDF', 'comentariosPresupuesto' => 'Comentarios Presupuesto', 'comentariosProduccion' => 'Comentarios Produccion', diff --git a/ci4/app/Models/Clientes/ClienteModel.php b/ci4/app/Models/Clientes/ClienteModel.php index ccc7f509..79af78df 100755 --- a/ci4/app/Models/Clientes/ClienteModel.php +++ b/ci4/app/Models/Clientes/ClienteModel.php @@ -385,4 +385,21 @@ class ClienteModel extends \App\Models\BaseModel return null; } } + + public function getIdName($search = "") + { + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.id AS id, t1.nombre AS name" + ) + ->where("is_deleted", 0); + return empty($search) + ? $builder->get()->getResultObject() + : $builder + ->groupStart() + ->like("t1.nombre", $search) + ->groupEnd()->get()->getResultObject(); + + } } diff --git a/ci4/app/Models/Configuracion/TipoPresupuestoModel.php b/ci4/app/Models/Configuracion/TipoPresupuestoModel.php index 5b914f88..ca231603 100755 --- a/ci4/app/Models/Configuracion/TipoPresupuestoModel.php +++ b/ci4/app/Models/Configuracion/TipoPresupuestoModel.php @@ -49,6 +49,18 @@ class TipoPresupuestoModel extends \App\Models\BaseModel } + public function getLibros($search = ""){ + $builder = $this->db + ->table($this->table . " t1") + ->select("t1.id as id, t1.encuadernacion as name") + ->where('t1.codigo LIKE', 'libro%') + ->where('t1.is_deleted', 0); + return empty($search) ? + $builder->get()->getResultObject() : + $builder->groupStart()-> + like('t1.codigo', $search)-> + groupEnd()->get()->getResultObject(); + } } diff --git a/ci4/app/Models/Presupuestos/ImportadorModel.php b/ci4/app/Models/Presupuestos/ImportadorModel.php new file mode 100644 index 00000000..76d01904 --- /dev/null +++ b/ci4/app/Models/Presupuestos/ImportadorModel.php @@ -0,0 +1,128 @@ +DBGroup); // Conectar a olderp + $builder = $db->table('customers'); + $builder->select('id, name'); + $builder->where('deleted_at', NULL); + $query = $builder->get(); + return $query->getResultObject(); + } + + + public function getPresupuestosList($clienteId, $search = ""){ + + $db = \Config\Database::connect($this->DBGroup); // Conectar a olderp + $builder = $db->table('pedido_libro'); + $builder->select('id as id, CONCAT(id, " - ", titulo) as name'); + $builder->where('customer_id', $clienteId); + $builder->whereIn('estado', ['finalizado', 'validado']); + $builder->where('deleted_at', NULL); + $builder->orderBy('updated_at', 'DESC'); + + return empty($search) ? + $builder->get()->getResultObject() : + $builder->groupStart()-> + like('titulo', $search)-> + orLike('id', $search)-> + groupEnd()->get()->getResultObject(); + } + + public function getPresupuestoForImport($id){ + + $db = \Config\Database::connect($this->DBGroup); // Conectar a olderp + $builder = $db->table('pedido_libro t1') + ->select('t1.paginas, t1.tirada, t1.papel_formato_personalizado, + t1.papel_formato_ancho as papel_formato_personalizado_ancho, + t1.papel_formato_alto as papel_formato_personalizado_alto, + t2.ancho as papel_formato_ancho, t2.alto as papel_formato_alto, + t1.ferro as ferro,t1.ferro_digital as ferro_digital, t1.marcapaginas as marcapaginas') + ->join('papel_formato t2', 't1.papel_formato_id = t2.id', 'left') + ->where('t1.id', $id) + ->where('t1.deleted_at', NULL); + $query = $builder->get(); + $datosGenerales = $query->getRow(); + + $builder = $db->table('pedido_libro_manipulado') + ->select('nombre') + ->where('pedido_libro_id', $id); + $query = $builder->get(); + $manipulados = $query->getResultObject(); + + $builder = $db->table('pedido_libro_acabado') + ->select('nombre') + ->where('pedido_libro_id', $id); + $query = $builder->get(); + $acabados = $query->getResultObject(); + + $builder = $db->table('pedido_libro_preimpresion') + ->select('nombre') + ->where('pedido_libro_id', $id) + ->where('nombre', 'Prototipo'); + $query = $builder->countAllResults(); + if($query > 0){ + $datosGenerales->prototipo = 1; + } + else{ + $datosGenerales->prototipo = 0; + } + + $builder = $db->table('pedido_libro_linea t1') + ->select('t1.tipo as tipo, t1.hq as hq, t1.paginas as paginas, t1.papel_id as papel_id, + t2.nombre as papel_nombre, t2.code as papel_code, t1.gramaje as gramaje, t1.rotativa_pag_color as rotativa_pag_color, + t1.rotativa_impresion as rotativa_impresion, t1.solapas_ancho as solapas_ancho') + ->join('papel_generico t2', 't1.papel_id = t2.id', 'left') + ->where('pedido_libro_id', $id); + $query = $builder->get(); + $lineas = $query->getResultObject(); + + + return [ + 'datosGenerales' => $datosGenerales, + 'manipulados' => $manipulados, + 'acabados' => $acabados, + 'lineas' => $lineas + ]; + + } + + public function getDatosGuardar($id){ + + $db = \Config\Database::connect($this->DBGroup); // Conectar a olderp + $db = \Config\Database::connect($this->DBGroup); // Conectar a olderp + $builder = $db->table('pedido_libro t1') + ->select(' + t1.titulo, t1.autor, t1.coleccion, t1.isbn, t1.customer_reference as referencia_cliente, + t1.envios_recogecliente as entrega_taller, t1.comentarios as comentarios_cliente, t1.comentarios_safekat, t1.comentarios_pdf') + ->join('papel_formato t2', 't1.papel_formato_id = t2.id', 'left') + ->where('t1.id', $id) + ->where('t1.deleted_at', NULL); + $query = $builder->get(); + $datosGenerales = $query->getRow(); + return $query->getRow(); + } + + public function getDirecciones($id){ + + $db = \Config\Database::connect($this->DBGroup); // Conectar a olderp + $builder = $db->table('pedido_libro_envios t1') + ->select('t1.ejemplares as unidades, t1.att, t1.email, t1.direccion, t1.pais, + t2.nombre as provincia, t1.ciudad as municipio, t1.cp, t1.telefono') + ->join(('provincias t2'), 't1.provincia = t2.code', 'left') + ->where('t1.pedido_libro_id', $id); + $query = $builder->get(); + return $query->getResultObject(); + } + + + +} diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_comentariosItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_comentariosItems.php index 34bd8463..0250e1db 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_comentariosItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_comentariosItems.php @@ -47,6 +47,23 @@ +