Merge branch 'add/import_old_presupuestos' into 'main'

Add/import old presupuestos

See merge request jjimenez/safekat!597
This commit is contained in:
2025-03-18 19:22:17 +00:00
14 changed files with 1688 additions and 37 deletions

View File

@ -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();

View File

@ -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');

View File

@ -0,0 +1,607 @@
<?php
namespace App\Controllers\Presupuestos;
use App\Models\Presupuestos\ImportadorModel;
use App\Models\Clientes\ClienteModel;
use stdClass;
class Importadorpresupuestos extends \App\Controllers\BaseResourceController
{
protected $modelName = "ImportadorModel";
protected $format = 'json';
protected static $singularObjectName = 'Importadorpresupuesto';
protected static $singularObjectNameCc = 'Importadorpresupuesto';
protected static $pluralObjectName = 'ImportadorPresupuestos';
protected static $pluralObjectNameCc = 'Importadorpresupuestos';
protected static $controllerSlug = 'importadorpresupuestos';
protected static $viewPath = 'themes/vuexy/form/presupuestos/importador/';
protected $indexRoute = 'listaPresupuestos';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
$this->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);
}
}
}

View File

@ -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);

View File

@ -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,
"<input class=\"calcular-presupuesto form-check-input\" type=\"checkbox\" id=\"{$id}\"
array_push(
$servicios,
"<input class=\"calcular-presupuesto form-check-input\" type=\"checkbox\" id=\"{$id}\"
name=\"{$id}\" value=\"1\" data-tarifa-id=\"{$servicio->id}\" data-tarifa-tipo=\"extra\" data-tarifa-nombre=\"{$servicio->nombre}\">
<label class=\"form-check-label\" for=\"{$id}\">{$servicio->nombre}</label>");
<label class=\"form-check-label\" for=\"{$id}\">{$servicio->nombre}</label>"
);
}
return $servicios;
}
}

View File

@ -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 '<pre>';
echo 'OK';
echo '</pre>';*/
xdebug_info();
// (new Presupuestocliente())->testRemoteDB();
(new Importadorpresupuestos())->getClientList();

View File

@ -254,6 +254,7 @@ return [
'comentarios' => 'Comentarios',
'comentariosCliente' => 'Comentarios cliente',
'comentariosSafekat' => 'Comentarios Safekat',
'comentariosPresupuestoPDF' => 'Comentarios Presupuesto PDF',
'comentariosPresupuesto' => 'Comentarios Presupuesto',
'comentariosProduccion' => 'Comentarios Produccion',

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -0,0 +1,128 @@
<?php
namespace App\Models\Presupuestos;
class ImportadorModel extends \App\Models\BaseModel
{
protected $table = 'pedido_libro';
protected $primaryKey = 'id';
protected $DBGroup = 'old_erp';
public function getClientList(){
$db = \Config\Database::connect($this->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();
}
}

View File

@ -47,6 +47,23 @@
</span>
</button>
</li>
<li class="nav-item">
<button
type="button"
class="nav-link"
role="tab"
data-bs-toggle="tab"
data-bs-target="#comentarios-presupuesto-pdf"
aria-controls="comentarios-presupuesto-pdf"
aria-selected="false">
<?= lang("Presupuestos.comentariosPresupuestoPDF") ?>
<span
id="mostrar_comentarios_pdf"
class="badge rounded-pill badge-center h-px-20 w-px-20 bg-warning ms-1 d-none">
!
</span>
</button>
</li>
<li class="nav-item">
<button
type="button"
@ -58,7 +75,7 @@
aria-selected="false">
<?= lang("Presupuestos.comentariosPresupuesto") ?>
<span
id="mostrar_comentarios_pdf"
id="mostrar_comentarios_presupuesto"
class="badge rounded-pill badge-center h-px-20 w-px-20 bg-warning ms-1 d-none">
!
</span>
@ -114,7 +131,7 @@
</div>
<div class="tab-pane fade" id="comentarios-presupuesto" role="tabpanel">
<div class="tab-pane fade" id="comentarios-presupuesto-pdf" role="tabpanel">
<div class="row">
<div class="col-md-12 col-lg-12 px-4">
<div class="mb-3">
@ -130,6 +147,22 @@
</div>
<div class="tab-pane fade" id="comentarios-presupuesto" role="tabpanel">
<div class="row">
<div class="col-md-12 col-lg-12 px-4">
<div class="mb-3">
<textarea
rows="3"
id="comentariosPresupuesto"
name="comentarios_presupuesto"
style="height: 10em;"
class="form-control"><?=old('comentarios_presupuesto', $presupuestoEntity->comentarios_presupuesto) ?></textarea>
</div>
</div>
</div>
</div>
<div class="tab-pane fade" id="comentarios-produccion" role="tabpanel">
<div class="row">
<div class="col-md-12 col-lg-12 px-4">

View File

@ -0,0 +1,402 @@
<?= $this->include('themes/_commonPartialsBs/datatables') ?>
<?= $this->include("themes/_commonPartialsBs/select2bs5") ?>
<?= $this->include("themes/_commonPartialsBs/sweetalert") ?>
<?= $this->extend('themes/vuexy/main/defaultlayout') ?>
<?= $this->section("content") ?>
<div class="row">
<div class="col-md-12">
<div class="card card-info">
<div class="card-header">
<h3 class="card-title">Importador de Presupuestos desde el ERP antiguo</h3>
</div><!--//.card-header -->
<div class="card-body">
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
<div class="row align-items-end">
<div class="col-md-4">
<label id="label_clienteId" for="clienteId" class="form-label">
Cliente
</label>
<select id="clienteId" name="cliente_id" class="form-control select2bs2" style="width: 100%;">
</select>
</div>
<div class="col-md-4">
<label id="label_clienteId" for="clienteId" class="form-label">
Presupuesto
</label>
<select id="presupuesto" name="presupuesto" class="form-control select2bs2" style="width: 100%;"
disabled>
</select>
</div>
<div class="col-md-2 d-flex flex-column h-100">
<button id="openOld" class="btn btn-primary waves-effect waves-light mt-auto w-100" disabled>
Abrir original
</button>
</div>
<div class="col-md-2 d-flex flex-column h-100">
<button id="initImport" class="btn btn-primary waves-effect waves-light mt-auto w-100" disabled>
Obtener datos
</button>
</div>
</div>
<div class="card card-info mt-3 " id="cardImportador">
<div class="card-header">
<h3 class="card-title
">Detalle presupuesto</h3>
</div><!--//.card-header -->
<div class="card-body">
<div class="row">
<div class="col-md-2">
<label for="paginas" class="form-label">
Páginas
</label>
<input type="text" id="paginas" name="paginas" class="form-control" disabled>
</div>
<div class="col-md-2">
<label for="tirada" class="form-label">
Tirada
</label>
<input type="text" id="tirada" name="tirada" class="form-control" disabled>
</div>
<div class="col-md-3">
<label for="tamanio" class="form-label">
Tamaño
</label>
<select id="tamanio" name="tamanio" class="form-control select2bs2" disabled>
</select>
<div id="formatoPersonalizado" class="row justify-content-center d-none">
<div class="col-md-6 mb-1 ">
<input type="number" id="papelFormatoAncho" name="papel_formato_ancho" step="1"
class="form-control num-input" min="110" value="110" readonly>
</div>
<div class="col-md-6 mb-1 ">
<input type="number" id="papelFormatoAlto" name="papel_formato_alto" step="1"
class="form-control num-input" min="170" value="170" readonly>
</div>
</div>
<div class="form-check form-switch mt-2 mb-2">
<input class="form-check-input" type="checkbox" id="papelFormatoPersonalizado"
name="papel_formato_personalizado" value="1" disabled>
<label class="form-check-label"
for="papelFormatoPersonalizado"><?= lang('Presupuestos.papelFormatoPersonalizado') ?>
</label>
</div>
</div>
</div><!--//.row -->
<h5 class="mt-3">Encuadernación</h5>
<div class="row">
<div class="col-md-6">
<label for="encuadernacion_old" class="form-label">Encuadernación original</label>
<input type="text" id="encuadernacion_old" name="encuadernacion_old"
class="form-control" disabled>
</div>
<div class="col-md-6">
<label for="encuadernacion" class="form-label">Encuadernación propuesta</label>
<select id="encuadernacion" name="encuadernacion" class="form-control select2bs2"
style="width: 100%;">
</select>
</div>
</div><!--//.row -->
<h5 class="mt-5">Interior</h5>
<div class="row mb-3">
<div class="col-md-2">
<label for="interior_old" class="form-label">Calidad</label>
<select id="isHq" name="isHq" class="form-control">
<option value="0">Estándar</option>
<option value="1">HQ</option>
</select>
</div>
</div>
<div class="row">
<table class="table table-striped table-hover">
<thead>
<tr>
<th style="width: 10%;"></th>
<th style="width: 10%;"><?= lang("Presupuestos.numeroPaginas") ?></th>
<th style="width: 30%;">Papel Genérico original</th>
<th style="width: 30%;">Papel Genérico propuesto</th>
<th style="width: 10%;"><?= lang("Presupuestos.gramaje") ?></th>
</tr>
</thead>
<tbody>
<tr>
<td><?= lang('MaquinasTarifasImpresions.negro') ?></td>
<td>
<input type="text" id="compPaginasNegro" name="comp_paginas_negro"
placeholder="0" maxLength="5" class="form-control comp_negro_items"
value="" readonly>
</td>
<td>
<input id="compPapelNegroOrigen" name="comp_papel_negro_origen"
class="form-control comp_negro_items" value="" readonly>
</td>
<td>
<select id="compPapelNegroSelected" name="comp_papel_negro_selected"
class="form-control select2bs2 comp_negro_items" style="width: 100%;">
</select>
</td>
<td>
<input type="text" id="compGramajeNegro" name="comp_gramaje_negro"
class="form-control comp_negro_items" value="" readonly>
</td>
</tr>
<tr>
<td><?= lang('MaquinasTarifasImpresions.color') ?></td>
<td>
<input type="text" id="compPaginasColor" name="comp_paginas_color"
placeholder="0" maxLength="5" class="form-control comp_color_items"
value="">
</td>
<td>
<input type="text" id="compPapelColorOrigen" name="comp_papel_color_origen"
class="form-control comp_color_items" value="" readonly>
</td>
<td>
<select id="compPapelColorSelected" name="comp_papel_color_selected"
class="form-control select2bs2 comp_color_items" style="width: 100%;">
</select>
</td>
<td>
<input type="text" id="compGramajeColor" name="comp_gramaje_color"
class="form-control comp_color_items" value="" readonly>
</input>
</td>
</tr>
</tbody>
</table>
</div>
<h5 class="mt-5">Exteriores</h5>
<div class="row">
<table class="table table-striped table-hover">
<thead>
<tr>
<th style="width: 10%;"></th>
<th style="width: 10%;">Opciones</th>
<th style="width: 10%;">Solapas</th>
<th style="width: 25%;">Papel Genérico original</th>
<th style="width: 25%;">Papel Genérico propuesto</th>
<th style="width: 10%;"><?= lang("Presupuestos.gramaje") ?></th>
</tr>
</thead>
<tbody>
<tr>
<td>Cubierta</td>
<td>
<select id="compCarasCubierta" name="comp_paginas_cubierta"
class="form-control select2bs2 comp_cubierta_items" style="width: 100%;"
disabled>
<option value="2"><?= lang('Presupuestos.unaCara') ?></option>
<option value="4"><?= lang('Presupuestos.dosCaras') ?></option>
</select>
</td>
<td>
<input id="compSolapasCubierta" name="comp_solapas_cubierta"
class="form-control comp_cubierta_items" value="" readonly>
<td>
<input type="text" id="compPapelCubiertaOrigen"
name="comp_papel_cubierta_origen"
class="form-control comp_cubierta_items" style="width: 100%;" readonly>
</input>
</td>
<td>
<select id="compPapelCubiertaSelected" name="comp_papel_cubierta_selected"
class="form-control select2bs2 comp_cubierta_items"
style="width: 100%;">
</select>
</td>
<td>
<input type="text" id="compGramajeCubierta" name="comp_gramaje_cubierta"
class="form-control comp_cubierta_items" value="" readonly>
</td>
</tr>
<tr>
<td>Sobrecubierta</td>
<td>
<select id="compSobrecubierta" name="comp_sobrecubierta"
class="form-control select2bs2 comp_sobrecubierta_items"
style="width: 100%;" disabled>
<option value="0"><?= lang('Presupuestos.no') ?></option>
<option value="1"><?= lang('Presupuestos.si') ?></option>
</select>
</td>
<td>
<input id="compSolapasSobrecubierta" name="comp_solapas_sobrecubierta"
class="form-control comp_sobrecubierta_items" value="" readonly>
</td>
<td>
<input id="compPapelSobrecubiertaOrigen"
name="comp_papel_sobrecubierta_origen"
class="form-control comp_sobrecubierta_items" value="" readonly>
</td>
<td>
<select id="compPapelSobrecubiertaSelected"
name="comp_papel_sobrecubierta_selected"
class="form-control select2bs2 comp_sobrecubierta_items"
style="width: 100%;">
</select>
</td>
<td>
<input type="text" id="compGramajeSobrecubierta"
name="comp_gramaje_sobrecubierta"
class="form-control comp_sobrecubierta_items" value="" readonly>
</td>
</tr>
</tbody>
</table>
</div>
<h5 class="mt-5">Acabados</h5>
<div class="row">
<table class="table table-striped table-hover">
<thead>
<tr>
<th style="width: 10%;"></th>
<th style="width: 45%;">Acabado original</th>
<th style="width: 45%;">Acabado propuesto</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cubierta</td>
<td>
<input type="text" id="compAcabadoCubiertaOrigen"
name="comp_acabado_cubierta_origen"
class="form-control comp_cubierta_items" value="" readonly>
</td>
<td>
<select id="compAcabadoCubiertaSelected"
name="comp_acabado_cubierta_selected"
class="form-control select2bs2 comp_cubierta_items"
style="width: 100%;">
</select>
</td>
</tr>
<tr>
<td>Sobrecubierta</td>
<td>
<input id="compAcabadoSobrecubiertaOrigen"
name="comp_acabado_sobrecubierta_origen"
class="form-control comp_sobrecubierta_items" value="" readonly>
</td>
<td>
<select id="compAcabadoSobrecubiertaSelected"
name="comp_acabado_sobrecubierta_selected"
class="form-control select2bs2 comp_sobrecubierta_items"
style="width: 100%;">
</select>
</td>
</tr>
</tbody>
</table>
</div>
<h5 class="mt-5">Servicios</h5>
<div class="row">
<div class="col-md-3 mb-3">
<div class="form-check">
<label for="ferro" class="form-check-label">
<input type="checkbox" id="ferro" name="ferro" value="1"
class="form-check-input" service="extra"
service-id=<?= $serviciosAutomaticos['ferro'] ?>>
<?= lang('Presupuestos.ferro') ?>
</label>
</div><!--//.form-check -->
</div>
<div class="col-md-3 mb-3">
<div class="form-check">
<label for="ferroDigital" class="form-check-label">
<input type="checkbox" id="ferroDigital" name="ferro_digital" value="1"
service="extra" service-id=<?= $serviciosAutomaticos['ferro_digital'] ?>
class="form-check-input">
<?= lang('Presupuestos.ferroDigital') ?>
</label>
</div><!--//.form-check -->
</div>
<div class="col-md-3 mb-3">
<div class="form-check">
<label for="prototipo" class="form-check-label">
<input type="checkbox" id="prototipo" name="prototipo" value="1"
class="form-check-input" service="extra"
service-id=<?= $serviciosAutomaticos['prototipo'] ?>>
<?= lang('Presupuestos.prototipo') ?>
</label>
</div><!--//.form-check -->
</div>
<div class="col-md-3 mb-3">
<div class="form-check">
<label for="marcapaginas" class="form-check-label">
<input type="checkbox" id="marcapaginas" name="marcapaginas" value="1"
class="form-check-input">
<?= lang('Presupuestos.marcapaginas') ?>
</label>
</div><!--//.form-check -->
</div>
</div>
<div class="row">
<div class="col-md-3 mb-3">
<button id="makeImport" class="btn btn-primary waves-effect waves-light mt-auto w-100">
Importar presupuesto
</button>
</div>
</div>
</div><!--//.card -->
</div><!--//.card-body -->
<div class="card-footer">
</div><!--//.card-footer -->
</div><!--//.card -->
</div><!--//.col -->
</div><!--//.row -->
<?= $this->endSection() ?>
<?= $this->section('css') ?>
<?= $this->endSection() ?>
<?= $this->section('additionalExternalJs') ?>
<script type="module"
src="<?= site_url('assets/js/safekat/pages/importadorPresupuestos/importador.js') ?>"></script>
<?= $this->endSection() ?>

View File

@ -0,0 +1,399 @@
import ClassSelect from '../../components/select2.js';
import Ajax from '../../components/ajax.js';
class Importador {
constructor() {
this.cliente = new ClassSelect($("#clienteId"), '/importador/clientlist', "Seleccione un cliente");
this.presupuesto = new ClassSelect($("#presupuesto"), '/importador/presupuestoslist', "Seleccione un presupuesto", false, { clienteId: () => $("#clienteId").val() });
this.encuadernacion = new ClassSelect($("#encuadernacion"), '/importador/getencuadernacion', "Seleccione una encuadernación");
this.compPapelNegroSelected = new ClassSelect($("#compPapelNegroSelected"), '/presupuestoadmin/papelgenerico', "Seleccione un papel", false,
{
tipo_impresion: () => this.encuadernacion.getVal(),
tirada: () => $('#tirada').val(),
ancho: () => this.getDimensionLibro().ancho,
alto: () => this.getDimensionLibro().alto,
sopalas: 0,
lomo: 0,
tipo: () => $('#hq').val() ? 'negrohq' : 'negro',
});
this.compPapelColorSelected = new ClassSelect($("#compPapelColorSelected"), '/presupuestoadmin/papelgenerico', "Seleccione un papel", false,
{
tipo_impresion: () => this.encuadernacion.getVal(),
tirada: () => $('#tirada').val(),
ancho: () => this.getDimensionLibro().ancho,
alto: () => this.getDimensionLibro().alto,
sopalas: 0,
lomo: 0,
tipo: () => $('#hq').val() ? 'colorhq' : 'color',
});
this.compPapelCubiertaSelected = new ClassSelect($("#compPapelCubiertaSelected"), '/presupuestoadmin/papelgenerico', "Seleccione un papel", false,
{
tipo_impresion: this.encuadernacion.getVal(),
tirada: () => $('#tirada').val(),
ancho: () => this.getDimensionLibro().ancho,
alto: () => this.getDimensionLibro().alto,
sopalas: () => $('#compSolapasCubierta').val(),
lomo: () => 0,
tipo: 'colorhq',
uso: 'cubierta',
});
this.compSobrecubiertaSelected = new ClassSelect($("#compPapelSobrecubiertaSelected"), '/presupuestoadmin/papelgenerico', "Seleccione un papel", false,
{
tipo_impresion: this.encuadernacion.getVal(),
tirada: () => $('#tirada').val(),
ancho: () => this.getDimensionLibro().ancho,
alto: () => this.getDimensionLibro().alto,
sopalas: () => $('#compSolapasSobrecubierta').val(),
lomo: () => 0,
tipo: 'colorhq',
uso: 'sobrecubierta',
});
this.acabadoCubierta = new ClassSelect($("#compAcabadoCubiertaSelected"),
'/serviciosacabados/getacabados',
'',
false,
{
"cubierta": 1
}
);
this.acabadosSobrecubierta = new ClassSelect($("#compAcabadoSobrecubiertaSelected"),
'/serviciosacabados/getacabados',
'',
false,
{
"sobrecubierta": 1
}
);
this.openBtn = $('#openOld');
this.initImport = $('#initImport');
this.makeImport = $('#makeImport');
}
init() {
// Fuerza el foco en el campo de búsqueda de select2
$(document).on('select2:open', () => {
document.querySelector('.select2-search__field').focus();
});
this.cliente.init();
this.presupuesto.init();
this.encuadernacion.init();
this.compPapelNegroSelected.init();
this.compPapelColorSelected.init();
this.compPapelCubiertaSelected.init();
this.compSobrecubiertaSelected.init();
this.acabadoCubierta.init();
this.acabadosSobrecubierta.init();
this.cliente.item.on('change', () => {
this.presupuesto.item.val('').trigger('change');
this.presupuesto.item.prop('disabled', false);
this.openBtn.prop('disabled', true);
this.initImport.prop('disabled', true);
});
this.presupuesto.item.on('change', () => {
this.openBtn.prop('disabled', false);
this.initImport.prop('disabled', false);
});
this.openBtn.on('click', function () {
if ($("#clienteId").val() != '' && $("#presupuesto").val() != '') {
window.open('https://gestion.safekat.es/presupuesto/edit/' + $("#presupuesto").val());
}
});
this.initImport.on('click', () => {
if ($("#clienteId").val() != '' && $("#presupuesto").val() != '') {
this.getPresupuestoData.bind(this)();
}
});
this.makeImport.on('click', this.importPresupuesto.bind(this));
}
importPresupuesto(){
if ($("#clienteId").val() != '' && $("#presupuesto").val() != '') {
let data = this.collectData();
new Ajax(
'/importador/importar',
data,
{},
(response) => {
if (response.success) {
const urlObj = new URL(window.location.href);
window.open(`${urlObj.origin}` + '/presupuestoadmin/edit/' + response.id);
}
},
(error) => {
console.error(error);
}
).post();
}
}
collectData() {
let data = {};
data.id = $("#presupuesto").val();
data.cliente_id = $("#clienteId").val();
data.paginas = $('#paginas').val();
data.tirada = $('#tirada').val();
data.papel_formato_id = $('#tamanio').val();
data.papel_formato_personalizado = $('#papelFormatoPersonalizado').prop('checked')?1:0;
data.papel_formato_ancho = $('#papelFormatoAncho').val();
data.papel_formato_alto = $('#papelFormatoAlto').val();
data.encuadernacion = this.encuadernacion.getVal();
data.isHq = $('#hq').val();
data.paginas_bn = $('#compPaginasNegro').val();
data.papel_bn = this.compPapelNegroSelected.getVal();
data.gramaje_bn = $('#compGramajeNegro').val();
data.paginas_color = $('#compPaginasColor').val();
data.papel_color = this.compPapelColorSelected.getVal();
data.gramaje_color = $('#compGramajeColor').val();
data.paginas_cubierta = $('#compCarasCubierta').val();
data.papel_cubierta = this.compPapelCubiertaSelected.getVal();
data.gramaje_cubierta = $('#compGramajeCubierta').val();
data.solapas_cubierta = $('#compSolapasCubierta').val();
data.acabado_cubierta = this.acabadoCubierta.getVal();
data.sobrecubierta = $('#compSobrecubierta').val();
data.papel_sobrecubierta = this.compSobrecubiertaSelected.getVal();
data.gramaje_sobrecubierta = $('#compGramajeSobrecubierta').val();
data.solapas_sobrecubierta = $('#compSolapasSobrecubierta').val();
data.acabado_sobrecubierta = this.acabadosSobrecubierta.getVal();
data.servicios = {
marcapaginas: $('#marcapaginas').prop('checked')?1:0,
serviciosExtra: []
};
if($('#ferro').prop('checked')){
data.servicios.serviciosExtra.push(30);
}
if($('#ferroDigital').prop('checked')){
data.servicios.serviciosExtra.push(29);
}
if($('#prototipo').prop('checked')){
data.servicios.serviciosExtra.push(9);
}
return data;
}
getPresupuestoData() {
new Ajax(
'/importador/getpresupuestodata',
{ id: $("#presupuesto").val() },
{},
(response) => {
if (response.success) {
this.fillInitialData(response.data);
}
},
(error) => {
console.error(error);
}
).get();
}
getDimensionLibro() {
let ancho = 0;
let alto = 0;
if ($('#papelFormatoPersonalizado').prop('checked')) {
ancho = $('#papelFormatoAncho').val();
alto = $('#papelFormatoAlto').val();
}
else {
const text = $('#tamanio').text();
ancho = text.split('x')[0];
alto = text.split('x')[1];
}
return { ancho, alto };
}
fillInitialData(data) {
console.log(data);
$('#paginas').val(data.datosGenerales.paginas);
$('#tirada').val(data.datosGenerales.tirada);
if (data.datosGenerales.papel_formato_personalizado) {
$('#papelFormatoPersonalizado').prop('checked', true);
$('#tamanio').addClass('d-none');
$('#formatoPersonalizado').removeClass('d-none');
$('#papelFormatoAncho').val(data.datosGenerales.papel_formato_ancho);
$('#papelFormatoAlto').val(data.datosGenerales.papel_formato_alto);
}
else {
$('#tamanio').removeClass('d-none');
$('#formatoPersonalizado').addClass('d-none');
$('#papelFormatoPersonalizado').prop('checked', false);
$('#tamanio').append('<option value="' + data.datosGenerales.papel_formato_id + '" selected>' + data.datosGenerales.papel_formato_texto + '</option>');
$('#tamanio').val(data.datosGenerales.papel_formato_id).trigger('change');
}
if (data.encuadernacion) {
$('#encuadernacion_old').val(data.encuadernacion.encuadernacionOld);
// check if data.encuadernacion.encuadernacion exists and is not empty
if (data.encuadernacion.encuadernacion) {
this.encuadernacion.setOption(data.encuadernacion.encuadernacion.id, data.encuadernacion.encuadernacion.encuadernacion);
}
}
if (data.lineas) {
if (data.lineas.isHq) {
$('#hq').val(data.lineas.hq);
}
if (data.lineas.bn && data.lineas.bn.paginas) {
$('#compPaginasNegro').val(data.lineas.bn.paginas);
$('#compPapelNegroOrigen').val(data.lineas.bn.papel_nombre);
$('#compGramajeNegro').val(parseFloat(data.lineas.bn.gramaje).toFixed(0));
this.compPapelNegroSelected.item.prop('disabled', false);
this.compPapelNegroSelected.setOption(data.lineas.bn.new_papel_id, data.lineas.bn.new_papel_nombre);
}
else {
$('#compPaginasNegro').val(0);
$('#compPapelNegroOrigen').val("");
$('#compGramajeNegro').val("");
this.compPapelNegroSelected.empty();
this.compPapelNegroSelected.item.prop('disabled', true);
}
if (data.lineas.color && data.lineas.color.paginas) {
$('#compPaginasColor').val(data.lineas.color.paginas);
$('#compPapelColorOrigen').val(data.lineas.color.papel_nombre);
$('#compGramajeColor').val(parseFloat(data.lineas.color.gramaje).toFixed(0));
this.compPapelColorSelected.item.prop('disabled', false);
this.compPapelColorSelected.setOption(data.lineas.color.new_papel_id, data.lineas.color.new_papel_nombre);
}
else {
$('#compPaginasColor').val(0);
$('#compPapelColorOrigen').val("");
$('#compGramajeColor').val("");
this.compPapelColorSelected.empty();
this.compPapelColorSelected.item.prop('disabled', true);
}
if (data.lineas.cubierta && data.lineas.cubierta.paginas) {
$('#compPaginasCubierta').val(data.lineas.cubierta.paginas);
$('#compPapelCubiertaOrigen').val(data.lineas.cubierta.papel_nombre);
$('#compGramajeCubierta').val(parseFloat(data.lineas.cubierta.gramaje).toFixed(0));
$('#compSolapasCubierta').val(parseFloat(data.lineas.cubierta.solapas).toFixed(0));
this.compPapelCubiertaSelected.item.prop('disabled', false);
this.compPapelCubiertaSelected.setOption(data.lineas.cubierta.new_papel_id, data.lineas.cubierta.new_papel_nombre);
}
else {
$('#compPaginasCubierta').val(0);
$('#compPapelCubiertaOrigen').val("");
$('#compGramajeCubierta').val("");
$('#compSolapasCubierta').val("");
this.compPapelCubiertaSelected.empty();
this.compPapelCubiertaSelected.item.prop('disabled', true);
}
if (data.lineas.sobrecubierta && data.lineas.sobrecubierta.paginas) {
$('#compSobrecubierta').val(1);
$('#compPapelSobrecubiertaOrigen').val(data.lineas.sobrecubierta.papel_nombre);
$('#compGramajeSobrecubierta').val(parseFloat(data.lineas.sobrecubierta.gramaje).toFixed(0));
$('#compSolapasSobrecubierta').val(parseFloat(data.lineas.sobrecubierta.solapas).toFixed(0));
this.compSobrecubiertaSelected.item.prop('disabled', false);
this.compSobrecubiertaSelected.setOption(data.lineas.sobrecubierta.new_papel_id, data.lineas.sobrecubierta.new_papel_nombre);
}
else {
$('#compSobrecubierta').val(0);
$('#compPapelSobrecubiertaOrigen').val("");
$('#compGramajeSobrecubierta').val("");
$('#compSolapasSobrecubierta').val("");
this.compSobrecubiertaSelected.empty();
this.compSobrecubiertaSelected.item.prop('disabled', true);
}
if (data.acabados) {
if (data.acabados.cubierta && data.acabados.cubierta.acabadoOld) {
$('#compAcabadoCubiertaOrigen').val(data.acabados.cubierta.acabadoOld);
this.acabadoCubierta.setOption(data.acabados.cubierta.acabado.id, data.acabados.cubierta.acabado.name);
this.acabadoCubierta.item.prop('disabled', false);
}
else {
$('#compAcabadoCubiertaOrigen').val("");
this.acabadoCubierta.empty();
this.acabadoCubierta.item.prop('disabled', true);
}
if (data.acabados.sobrecubierta && data.acabados.sobrecubierta.acabadoOld) {
$('#compAcabadoSobrecubiertaOrigen').val(data.acabados.sobrecubierta.acabadoOld);
this.acabadosSobrecubierta.setOption(data.acabados.sobrecubierta.acabado.id, data.acabados.sobrecubierta.acabado.name);
this.acabadosSobrecubierta.item.prop('disabled', false);
}
else {
$('#compAcabadoSobrecubiertaOrigen').val("");
this.acabadosSobrecubierta.empty();
this.acabadosSobrecubierta.item.prop('disabled', true);
}
}
if (data.servicios.ferro == 1) {
$('#ferro').prop('checked', true);
}
else {
$('#ferro').prop('checked', false);
}
if (data.servicios.ferroDigital == 1) {
$('#ferroDigital').prop('checked', true);
}
else {
$('#ferroDigital').prop('checked', false);
}
if (data.servicios.marcapaginas == 1) {
$('#marcapaginas').prop('checked', true);
}
else {
$('#marcapaginas').prop('checked', false);
}
if (data.servicios.prototipo == 1) {
$('#prototipo').prop('checked', true);
}
else {
$('#prototipo').prop('checked', false);
}
}
}
}
document.addEventListener('DOMContentLoaded', function () {
let importador = new Importador();
importador.init();
});
export default Importador;

View File

@ -284,7 +284,8 @@ class PresupuestoAdminEdit {
datos.comentarios_cliente = $('#comentariosCliente').val();
datos.comentarios_safekat = $('#comentariosSafekat').val();
datos.comentarios_presupuesto = $('#comentariosPdf').val();
datos.comentarios_pdf = $('#comentariosPdf').val();
datos.comentarios_presupuesto = $('#comentariosPresupuesto').val();
datos.comentarios_produccion = $('#comentariosProduccion').val();
datos = { ...datos, ...this.resumen.getData() };
@ -383,7 +384,8 @@ class PresupuestoAdminEdit {
$('#comentariosCliente').val(response.data.comentarios_cliente);
$('#comentariosSafekat').val(response.data.comentarios_safekat);
$('#comentariosPdf').val(response.data.comentarios_presupuesto);
$('#comentariosPresupuesto').val(response.data.comentarios_presupuesto);
$('#comentariosPdf').val(response.data.comentarios_pdf);
$('#comentariosProduccion').val(response.data.comentarios_produccion);
$("textarea[name^='comentarios_']").trigger("input");