diff --git a/ci4/app/Config/RBAC/permissionMatrix.php b/ci4/app/Config/RBAC/permissionMatrix.php index cb1c244e..73df04d0 100644 --- a/ci4/app/Config/RBAC/permissionMatrix.php +++ b/ci4/app/Config/RBAC/permissionMatrix.php @@ -9,10 +9,10 @@ const SK_PERMISSION_MATRIX = [ "plantilla-tarifa.edit", "plantilla-tarifa.delete", "plantilla-tarifa.menu", - "perfil.create", - "perfil.edit", - "perfil.delete", - "perfil.menu", + "direcciones.create", + "direcciones.edit", + "direcciones.delete", + "direcciones.menu", "presupuesto.create", "presupuesto.edit", "presupuesto.delete", @@ -21,6 +21,14 @@ const SK_PERMISSION_MATRIX = [ "presupuesto-cliente.edit", "presupuesto-cliente.delete", "presupuesto-cliente.menu", + "pedidos-activos.view", + "pedidos-activos.menu", + "pedidos-finalizados.view", + "pedidos-finalizados.menu", + "pedidos-cancelados.view", + "pedidos-cancelados.menu", + "pedidos-todos.view", + "pedidos-todos.menu", "tarifa-preimpresion.create", "tarifa-preimpresion.edit", "tarifa-preimpresion.delete", @@ -41,10 +49,6 @@ const SK_PERMISSION_MATRIX = [ "tarifa-envio.edit", "tarifa-envio.delete", "tarifa-envio.menu", - "tarifa-extra.create", - "tarifa-extra.edit", - "tarifa-extra.delete", - "tarifa-extra.menu", "proveedores.create", "proveedores.edit", "proveedores.delete", @@ -61,10 +65,6 @@ const SK_PERMISSION_MATRIX = [ "paises.edit", "paises.delete", "paises.menu", - "formas-pago.create", - "formas-pago.edit", - "formas-pago.delete", - "formas-pago.menu", "maquinas.create", "maquinas.edit", "maquinas.delete", @@ -89,48 +89,48 @@ const SK_PERMISSION_MATRIX = [ "roles-permisos.edit", "roles-permisos.delete", "roles-permisos.menu", - "ubicaciones.create", - "ubicaciones.edit", - "ubicaciones.delete", - "ubicaciones.menu", - "series-facturas.create", - "series-facturas.edit", - "series-facturas.delete", - "series-facturas.menu", ], "cliente-admin" => [ - "perfil.edit", - "perfil.menu", - "direcciones.create", - "direcciones.edit", - "direcciones.delete", - "direcciones.menu", "presupuesto-cliente.create", "presupuesto-cliente.edit", "presupuesto-cliente.delete", "presupuesto-cliente.menu", + "pedidos-activos.view", + "pedidos-activos.menu", + "pedidos-finalizados.view", + "pedidos-finalizados.menu", + "pedidos-cancelados.view", + "pedidos-cancelados.menu", + "pedidos-todos.view", + "pedidos-todos.menu", ], "cliente-editor" => [ - "perfil.create", - "perfil.edit", - "perfil.delete", - "perfil.menu", - "direcciones.create", - "direcciones.edit", - "direcciones.delete", - "direcciones.menu", "presupuesto-cliente.create", "presupuesto-cliente.edit", - "presupuesto-cliente.delete", "presupuesto-cliente.menu", + "pedidos-activos.view", + "pedidos-activos.menu", + "pedidos-finalizados.view", + "pedidos-finalizados.menu", + "pedidos-cancelados.view", + "pedidos-cancelados.menu", + "pedidos-todos.view", + "pedidos-todos.menu", ], "comercial" => [ "token.token", "token.menu", ], "produccion" => [ - "token.token", - "token.menu", + "clientes.create", + "clientes.edit", + "clientes.menu", + "direcciones.create", + "direcciones.edit", + "direcciones.menu", + "presupuesto.create", + "presupuesto.edit", + "presupuesto.menu", ], "maquina" => [ "token.token", @@ -163,10 +163,10 @@ const SK_PERMISSION_MATRIX = [ "plantilla-tarifa.edit", "plantilla-tarifa.delete", "plantilla-tarifa.menu", - "perfil.create", - "perfil.edit", - "perfil.delete", - "perfil.menu", + "direcciones.create", + "direcciones.edit", + "direcciones.delete", + "direcciones.menu", "presupuesto.create", "presupuesto.edit", "presupuesto.delete", @@ -175,6 +175,14 @@ const SK_PERMISSION_MATRIX = [ "presupuesto-cliente.edit", "presupuesto-cliente.delete", "presupuesto-cliente.menu", + "pedidos-activos.view", + "pedidos-activos.menu", + "pedidos-finalizados.view", + "pedidos-finalizados.menu", + "pedidos-cancelados.view", + "pedidos-cancelados.menu", + "pedidos-todos.view", + "pedidos-todos.menu", "tarifa-preimpresion.create", "tarifa-preimpresion.edit", "tarifa-preimpresion.delete", @@ -195,10 +203,6 @@ const SK_PERMISSION_MATRIX = [ "tarifa-envio.edit", "tarifa-envio.delete", "tarifa-envio.menu", - "tarifa-extra.create", - "tarifa-extra.edit", - "tarifa-extra.delete", - "tarifa-extra.menu", "proveedores.create", "proveedores.edit", "proveedores.delete", @@ -239,13 +243,5 @@ const SK_PERMISSION_MATRIX = [ "roles-permisos.edit", "roles-permisos.delete", "roles-permisos.menu", - "ubicaciones.create", - "ubicaciones.edit", - "ubicaciones.delete", - "ubicaciones.menu", - "series-facturas.create", - "series-facturas.edit", - "series-facturas.delete", - "series-facturas.menu", ], ]; diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index a974f2ad..14aa7581 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -76,6 +76,8 @@ $routes->group('tarifas', ['namespace' => 'App\Controllers\Tarifas'], function ( $routes->get('delete/(:num)', 'TarifaAcabados::delete/$1', ['as' => 'tarifaAcabadoDelete']); $routes->post('datatable', 'TarifaAcabados::datatable', ['as' => 'tarifaAcabadoDT']); $routes->get('select', 'TarifaAcabados::show_select', ["as" => "showSelectTarifaAcabado"]); + $routes->get('gettarifas', 'TarifaAcabados::getSelect2'); + $routes->group('lineas', ['namespace' => 'App\Controllers\Tarifas\Acabados'], function ($routes) { $routes->post('datatable', 'TarifaAcabadosLineas::datatable', ['as' => 'tarifaAcabadoLineasDT']); $routes->post('datatable_editor', 'TarifaAcabadosLineas::datatable_editor', ['as' => 'tarifaAcabadoLineasDTE']); @@ -171,6 +173,7 @@ $routes->group('tarifapreimpresion', ['namespace' => 'App\Controllers\Tarifas'], $routes->get('delete/(:num)', 'Tarifapreimpresion::delete/$1', ['as' => 'deleteTarifapreimpresion']); $routes->post('allmenuitems', 'Tarifapreimpresion::allItemsSelect', ['as' => 'select2ItemsOfTarifaspreimpresion']); $routes->post('menuitems', 'Tarifapreimpresion::menuItems', ['as' => 'menuItemsOfTarifaspreimpresion']); + $routes->get('gettarifas', 'Tarifapreimpresion::getSelect2'); }); @@ -185,6 +188,7 @@ $routes->group('tarifaextra', ['namespace' => 'App\Controllers\Tarifas'], functi $routes->get('delete/(:num)', 'Tarifaextra::delete/$1', ['as' => 'deleteTarifaextra']); $routes->post('allmenuitems', 'Tarifaextra::allItemsSelect', ['as' => 'select2ItemsOfTarifasextra']); $routes->post('menuitems', 'Tarifaextra::menuItems', ['as' => 'menuItemsOfTarifasextra']); + $routes->get('gettarifas', 'Tarifaextra::getSelect2'); }); @@ -200,6 +204,7 @@ $routes->group('tarifasmanipulado', ['namespace' => 'App\Controllers\Tarifas'], $routes->post('allmenuitems', 'Tarifasmanipulado::allItemsSelect', ['as' => 'select2ItemsOfTarifasManipulado']); $routes->post('menuitems', 'Tarifasmanipulado::menuItems', ['as' => 'menuItemsOfTarifasManipulado']); $routes->get('select', 'Tarifasmanipulado::show_select', ["as" => "showSelectTarifaManipulado"]); + $routes->get('gettarifas', 'Tarifasmanipulado::getSelect2'); }); $routes->resource('tarifasmanipulado', ['namespace' => 'App\Controllers\Tarifas', 'controller' => 'Tarifasmanipulado', 'except' => 'show,new,create,update']); @@ -495,6 +500,7 @@ $routes->group('tarifasencuadernacion', ['namespace' => 'App\Controllers\Tarifas $routes->post('datatable', 'Tarifasencuadernacion::datatable', ['as' => 'dataTableOfTarifasEncuadernacion']); $routes->post('allmenuitems', 'Tarifasencuadernacion::allItemsSelect', ['as' => 'select2ItemsOfTarifasEncuadernacion']); $routes->post('menuitems', 'Tarifasencuadernacion::menuItems', ['as' => 'menuItemsOfTarifasEncuadernacion']); + $routes->get('gettarifas', 'Tarifasencuadernacion::getSelect2'); }); $routes->resource('tarifasencuadernacion', ['namespace' => 'App\Controllers\Tarifas', 'controller' => 'Tarifasencuadernacion', 'except' => 'show,new,create,update']); @@ -619,6 +625,16 @@ $routes->group('presupuestoadmin', ['namespace' => 'App\Controllers\Presupuestos $routes->post('datatable_2', 'Presupuestoadmin::datatable_2', ['as' => 'updateDataOfPresupuestoAdmin']); $routes->post('allmenuitems', 'Presupuestoadmin::allItemsSelect', ['as' => 'select2ItemsOfPresupuestoAdmin']); $routes->post('menuitems', 'Presupuestoadmin::menuItems', ['as' => 'menuItemsOfPresupuestoAdmin']); + + $routes->get('cargar/(:any)', 'Presupuestoadmin::cargar/$1'); + $routes->post('comparadorinterior', 'Presupuestoadmin::obtenerComparadorInterior'); + $routes->post('comparadorexteriores', 'Presupuestoadmin::obtenerComparadorExteriores'); + $routes->post('comparadorguardas', 'Presupuestoadmin::obtenerComparadorGuardas'); + $routes->get('papelgenerico', 'Presupuestoadmin::getPapelGenerico'); + $routes->get('papelgramaje', 'Presupuestoadmin::getGramaje'); + $routes->get('papelimpresion', 'Presupuestoadmin::getPapelImpresion'); + $routes->get('maquinas', 'Presupuestoadmin::getMaquinas'); + $routes->post('getlinea', 'Presupuestoadmin::getLineaPresupuesto'); }); $routes->resource('presupuestoadmin', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Presupuestoadmin', 'except' => 'show,new,create,update']); @@ -643,32 +659,43 @@ $routes->group('presupuestocliente', ['namespace' => 'App\Controllers\Presupuest $routes->resource('presupuestocliente', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Presupuestocliente', 'except' => 'show,new,create,update']); $routes->group('serviciosacabados', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) { - $routes->post('datatable', 'Presupuestoacabados::datatable', ['as' => 'dataTableOfPresupuestoAcabados']); + $routes->get('getacabados', 'Presupuestoacabados::getAcabados'); + $routes->post('getvalues', 'Presupuestoacabados::getRowValues'); $routes->post('menuitems', 'Presupuestoacabados::menuItems', ['as' => 'menuItemsOfPresupuestoAcabados']); $routes->post('edit/(:num)', 'Presupuestoacabados::edit/$1', ['as' => 'updatePresupuestoacabados']); - $routes->get('getacabados', 'Presupuestoacabados::getAcabados'); + $routes->get('cargar', 'Presupuestoacabados::cargar'); + $routes->post('update/(:num)', 'Presupuestoacabados::update/$1'); }); + $routes->group('serviciosencuadernaciones', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) { $routes->post('datatable', 'Presupuestoencuadernaciones::datatable', ['as' => 'dataTableOfPresupuestoEncuadernaciones']); + $routes->post('getvalues', 'Presupuestoencuadernaciones::getRowValues'); $routes->post('menuitems', 'Presupuestoencuadernaciones::menuItems', ['as' => 'menuItemsOfPresupuestoEncuadernaciones']); $routes->get('delete/(:num)', 'Presupuestoencuadernaciones::delete/$1', ['as' => 'deletePresupuestoencuadernaciones']); $routes->post('edit/(:num)', 'Presupuestoencuadernaciones::edit/$1', ['as' => 'updatePresupuestoencuadernaciones']); + $routes->post('update/(:num)', 'Presupuestoencuadernaciones::update/$1'); }); $routes->group('serviciosmanipulados', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) { + $routes->post('getvalues', 'Presupuestomanipulados::getRowValues'); $routes->post('datatable', 'Presupuestomanipulados::datatable', ['as' => 'dataTableOfPresupuestoManipulados']); $routes->post('edit/(:num)', 'Presupuestomanipulados::edit/$1', ['as' => 'updatePresupuestomanipulados']); + $routes->post('update/(:num)', 'Presupuestomanipulados::update/$1'); + $routes->get('serviciosolapas', 'Presupuestomanipulados::getServicioSolapas'); }); $routes->group('serviciospreimpresiones', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) { + $routes->post('getvalues', 'Presupuestopreimpresiones::getRowValues'); $routes->post('datatable', 'Presupuestopreimpresiones::datatable', ['as' => 'dataTableOfPresupuestoPreimpresiones']); $routes->post('edit/(:num)', 'Presupuestopreimpresiones::edit/$1', ['as' => 'updatePresupuestopreimpresiones']); + $routes->get('cargar', 'Presupuestopreimpresiones::getSelect2'); }); $routes->group('serviciosextra', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) { $routes->post('datatable', 'Presupuestoserviciosextra::datatable', ['as' => 'dataTableOfPresupuestoServiciosExtra']); $routes->post('edit/(:num)', 'Presupuestoserviciosextra::edit/$1', ['as' => 'updatePresupuestoServiciosExtra']); + $routes->post('getvalues', 'Presupuestoserviciosextra::getRowValues'); }); $routes->group('presupuestodirecciones', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) { diff --git a/ci4/app/Controllers/Configuracion/Users.php b/ci4/app/Controllers/Configuracion/Users.php index 8fcc153e..c537dd57 100755 --- a/ci4/app/Controllers/Configuracion/Users.php +++ b/ci4/app/Controllers/Configuracion/Users.php @@ -89,6 +89,8 @@ class Users extends \App\Controllers\GoBaseController // Marcar el username como NULL $sanitizedData = $this->sanitized($postData, true); + $email = $sanitizedData['email']; + unset($sanitizedData['email']); $noException = true; @@ -100,7 +102,7 @@ class Users extends \App\Controllers\GoBaseController try { // The Email is unique - if ($this->user_model->isEmailUnique($sanitizedData['email'])) { + if ($this->user_model->isEmailUnique($email)) { // Crear el usuario si pasa la validación $user = new \CodeIgniter\Shield\Entities\User([ @@ -109,8 +111,6 @@ class Users extends \App\Controllers\GoBaseController 'last_name' => $sanitizedData['last_name'], 'cliente_id' => $sanitizedData['cliente_id'], 'comments' => $sanitizedData['comments'], - 'email' => $sanitizedData['email'], - 'password' => $sanitizedData['password'], 'status' => $sanitizedData['status'] ?? 0, 'active' => $sanitizedData['active'] ?? 0, ]); diff --git a/ci4/app/Controllers/Js_loader.php b/ci4/app/Controllers/Js_loader.php index e402c125..c2c056ce 100755 --- a/ci4/app/Controllers/Js_loader.php +++ b/ci4/app/Controllers/Js_loader.php @@ -33,13 +33,6 @@ class Js_loader extends BaseController } - - function datosLibro_js() - { - $this->response->setHeader('Content-Type', 'text/javascript'); - return view('themes/vuexy/form/presupuestos/admin/_datosLibroItems.js'); - } - function previsualizador_js() { $this->response->setHeader('Content-Type', 'text/javascript'); diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoacabados.php b/ci4/app/Controllers/Presupuestos/Presupuestoacabados.php index 18dc5743..39f80e0f 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestoacabados.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestoacabados.php @@ -69,30 +69,61 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController return; endif; - $postData = $this->request->getJSON(); - $tarifas = array_column($postData->datos, 'tarifa_id'); - $tirada = $postData->tirada ?? 0; - $POD = $postData->POD ?? 0; - $result = []; - - if (count($tarifas) > 0) { - foreach ($tarifas as $tarifa) { - $values = $this->model->getPrecioTarifa($tarifa, $tirada, $POD); - array_push($result, $values); - } - } + $postData = $this->request->getPost(); + $datos_tarifas = $postData['datos'] ?? []; + $tirada = $postData['tirada'] ?? 0; + $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value; + + $result = $this->getServiciosAcabados($datos_tarifas, $tirada, $POD); $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); $data = [ - 'lines' => $result, + 'lineas' => $result, $csrfTokenName => $newTokenHash ]; return $this->respond($data); } - public function datatable() + public function getServiciosAcabados($datos_tarifas, $tirada, $POD){ + + $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); + $result = []; + if (count($datos_tarifas) > 0) { + foreach ($datos_tarifas as $tarifa) { + $proveedor = $tarifa['proveedor_id'] == '' ? -1 : $tarifa['proveedor_id']; + + $values = $model->getPrecioTarifa($tarifa['tarifa_id'], $tirada, $proveedor, $POD); + $values[0]->cubierta = $tarifa['cubierta'] ?? 0; + $values[0]->sobrecubierta = $tarifa['sobrecubierta'] ?? 0; + array_push($result, $values[0]); + } + } + return $result; + } + + public function cargar() + { + if($this->request->isAJAX()) { + $presupuesto_id = $this->request->getGet('presupuesto_id') ?? null; + + $rows = $this->model->getResource($presupuesto_id)->get()->getResultObject(); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'rows' => $rows, + $csrfTokenName => $newTokenHash + ]; + + return $this->respond($data); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function getRowValues() { if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); @@ -100,7 +131,7 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController $tarifa_acabado_id = $reqData['tarifa_acabado_id'] ?? 0; $tirada = $reqData['tirada'] ?? 0; $proveedor_id = $reqData['proveedor_id'] ?? -1; - $POD = $reqData['POD'] ?? 0; + $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value; $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); @@ -195,4 +226,6 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController return $this->failUnauthorized('Invalid request', 403); } } + + } diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php index a302751f..f0e9a459 100644 --- a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php @@ -6,6 +6,8 @@ use App\Entities\Presupuestos\PresupuestoEntity; use App\Models\Collection; use App\Models\Configuracion\MaquinaModel; use App\Models\Configuracion\PapelGenericoModel; +use App\Models\Configuracion\PapelFormatoModel; +use App\Models\Clientes\ClienteModel; use App\Models\Configuracion\PapelImpresionModel; use App\Models\Configuracion\TipoPresupuestoModel; use App\Models\Presupuestos\PresupuestoAcabadosModel; @@ -17,6 +19,7 @@ use App\Models\Presupuestos\PresupuestoModel; use App\Models\Presupuestos\PresupuestoPreimpresionesModel; use App\Models\Presupuestos\PresupuestoServiciosExtraModel; use App\Services\PresupuestoService; +use App\Services\PresupuestoClienteService; use Exception; class Presupuestoadmin extends \App\Controllers\BaseResourceController @@ -78,12 +81,9 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController public function add($tipo_impresion_id = null) { + if ($this->request->getPost()): - - - if ($this->request->getPost()) : - - $nullIfEmpty = true; // !(phpversion() >= '8.1'); + $nullIfEmpty = false; // !(phpversion() >= '8.1'); $postData = $this->request->getPost(); @@ -101,36 +101,36 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController } $noException = true; - if ($successfulResult = $this->canValidate($this->model->validationRulesAdd, $this->model->validationMessagesAdd)) : // if ($successfulResult = $this->validate($this->formValidationRules) ) : + if ($successfulResult = $this->canValidate($this->model->validationRulesAdd, $this->model->validationMessagesAdd)): // if ($successfulResult = $this->validate($this->formValidationRules) ) : - if ($this->canValidate($this->model->validationRulesAdd, $this->model->validationMessagesAdd)) : + if ($this->canValidate($this->model->validationRulesAdd, $this->model->validationMessagesAdd)): try { $successfulResult = $this->model->skipValidation(true)->save($sanitizedData); } catch (\Exception $e) { $noException = false; $this->dealWithException($e); } - else : + else: $this->viewData['errorMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Presupuestos.presupuesto'))]); $this->session->setFlashdata('formErrors', $this->model->errors()); endif; $thenRedirect = true; // Change this to false if you want your user to stay on the form after submission endif; - if ($noException && $successfulResult) : + if ($noException && $successfulResult): $id = $this->model->db->insertID(); $message = lang('Basic.global.saveSuccess', [lang('Basic.global.record')]) . '.'; - if ($thenRedirect) : - if (!empty($this->indexRoute)) : + if ($thenRedirect): + if (!empty($this->indexRoute)): //return redirect()->to(route_to( $this->indexRoute ) )->with('sweet-success', $message); return redirect()->to(site_url('presupuestoadmin/edit/' . $id))->with('sweet-success', $message); - else : + else: return $this->redirect2listView('sweet-success', $message); endif; - else : + else: $this->session->setFlashData('sweet-success', $message); endif; @@ -146,8 +146,6 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $this->viewData['clienteList'] = $this->getClienteListItems($presupuestoEntity->cliente_id ?? null); $this->viewData['incReiList'] = array('incidencia' => lang('Presupuestos.incidencia'), 'reimpresion' => lang('Presupuestos.reimpresion'), 'sin_cargo' => lang('Presupuestos.sinCargo')); - $this->viewData['paisList'] = $this->getPaisListItems(); - $this->viewData['papelFormatoList'] = $this->getPapelFormatoListItems($presupuestoEntity->papel_formato_id ?? null); $this->viewData['POD'] = $this->getPOD(); @@ -164,20 +162,20 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController public function edit($requestedId = null) { - if ($requestedId == null) : + if ($requestedId == null): return $this->redirect2listView(); endif; $id = filter_var($requestedId, FILTER_SANITIZE_URL); $presupuestoEntity = $this->model->find($id); - if ($presupuestoEntity == false) : + if ($presupuestoEntity == false): $message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Presupuestos.presupuesto')), $id]); return $this->redirect2listView('sweet-error', $message); endif; - - if ($this->request->getPost()) : + + if ($this->request->getPost()): $nullIfEmpty = true; // !(phpversion() >= '8.1'); @@ -249,16 +247,16 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $successfulResult = false; } else { - if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) + if ($successfulResult = $this->canValidate()): // if ($successfulResult = $this->validate($this->formValidationRules) ) - if ($this->canValidate()) : + if ($this->canValidate()): try { $successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData); } catch (\Exception $e) { $noException = false; $this->dealWithException($e); } - else : + else: $this->viewData['warningMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Presupuestos.presupuesto'))]); $this->session->setFlashdata('formErrors', $this->model->errors()); @@ -270,16 +268,16 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController endif; } - if ($noException && $successfulResult) : + if ($noException && $successfulResult): $id = $presupuestoEntity->id ?? $id; $message = lang('Basic.global.updateSuccess', [mb_strtolower(lang('Presupuestos.presupuesto'))]) . '.'; // $message .= anchor("admin/presupuestos/{$id}/edit", lang('Basic.global.continueEditing') . '?'); //$message = ucfirst(str_replace("'", "\'", $message)); - if ($thenRedirect) : - if (!empty($this->indexRoute)) : + if ($thenRedirect): + if (!empty($this->indexRoute)): return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message); - else : + else: if ($this->request->isAJAX()) { $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); @@ -293,14 +291,14 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController } endif; - else : + else: if ($this->request->isAJAX()) { - if($presupuestoEntity->estado_id==1 && $presupuestoEntity->confirmar==1){ + if ($presupuestoEntity->estado_id == 1 && $presupuestoEntity->confirmar == 1) { $this->model->confirmarPresupuesto($id); PresupuestoService::crearPedido($id); } - + $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); $data = [ @@ -327,51 +325,6 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController else $this->viewData['comp_data'] = ""; - $this->viewData['clienteList'] = $this->getClienteListItems($presupuestoEntity->cliente_id ?? null); - $this->viewData['paisList'] = $this->getPaisListItems(); - $this->viewData['ccaaList'] = $this->getCcaaListItems(); - - $this->viewData['clienteList'] = $this->getClienteListItems($presupuestoEntity->cliente_id ?? null); - $this->viewData['incReiList'] = array('incidencia' => lang('Presupuestos.incidencia'), 'reimpresion' => lang('Presupuestos.reimpresion'), 'sin_cargo' => lang('Presupuestos.sinCargo')); - $this->viewData['papelFormatoList'] = $this->getPapelFormatoListItems($presupuestoEntity->papel_formato_id ?? null); - $this->viewData['papelGenericoNegroList'] = $this->getPapelGenericoNegro(); - $this->viewData['papelGenericoNegroHQList'] = $this->getPapelGenericoNegroHQ(); - $this->viewData['papelGenericoColorList'] = $this->getPapelGenericoColor(); - $this->viewData['papelGenericoColorHQList'] = $this->getPapelGenericoColorHQ(); - $this->viewData['papelGenericoCubiertaList'] = $this->getPapelGenericoCubierta(); - $this->viewData['papelGenericoGuardasList'] = $this->getPapelGenericoGuardas(); - $this->viewData['papelGenericoSobrecubiertaList'] = $this->getPapelGenericoSobreCubierta(); - $this->viewData['papelGenericoRotativaNegroList'] = $this->getPapelGenericoRotativaNegro(); - $this->viewData['papelGenericoRotativaColorList'] = $this->getPapelGenericoRotativaColor(); - - // Acabados exteriores - $this->viewData['acabadosCubierta'] = $this->getAcabadosCubierta(); - $this->viewData['acabadosSobrecubierta'] = $this->getAcabadosSobrecubierta(); - - // Lineas Presupuesto - [$cambios_lineas, $this->viewData['lineasPresupuesto']] = $this->getLineasPresupuesto($presupuestoEntity); - $this->viewData['presupuestoEntity']->cambios_lineas=$cambios_lineas; - - // Servicios - $this->viewData['serviciosPreimpresion'] = $this->getServiciosPreimpresion(); - $this->viewData['serviciosEncuadernacion'] = $this->getServiciosEncuadernacion(); - $this->viewData['serviciosManipulado'] = $this->getServiciosManipulado(); - $this->viewData['serviciosAcabado'] = $this->getServiciosAcabado(); - $this->viewData['serviciosExtra'] = $this->getServiciosExtra(); - - [$cambios_en_servicios, $servicios] = $this->getLineasServicios($presupuestoEntity); - $this->viewData['presupuestoEntity']->cambios_servicios=$cambios_en_servicios; - - $this->viewData['serviciosEncuadernacionList'] = $servicios->serviciosEncuadernacion; - $this->viewData['serviciosAcabadosList'] = $servicios->serviciosAcabado; - $this->viewData['serviciosManipuladoList'] = $servicios->serviciosManipulado; - $this->viewData['serviciosPreimpresionList'] = $servicios->serviciosPreimpresion; - $this->viewData['serviciosExtraList'] = $servicios->serviciosExtra; - - // Direciones presupuesto - [$cambios_en_direcciones, $this->viewData['direccionesList']] = $this->getLineasDirecciones($presupuestoEntity); - $this->viewData['presupuestoEntity']->cambios_direcciones=$cambios_en_direcciones; - $this->viewData['POD'] = $this->getPOD(); $this->viewData['serviciosAutomaticos'] = [ @@ -391,7 +344,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController // Si se ha llamado a esta funcion porque se ha duplicado el presupuesto // se actualiza la bbdd para que sólo ejecute algunas funciones una vez - if($presupuestoEntity->is_duplicado){ + if ($presupuestoEntity->is_duplicado) { $this->model->removeIsDuplicado($presupuestoEntity->id); } @@ -411,22 +364,23 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController public function delete($id = null) { if (!empty(static::$pluralObjectNameCc) && !empty(static::$singularObjectNameCc)) { - $objName = mb_strtolower(lang(ucfirst(static::$pluralObjectNameCc).'.'.static::$singularObjectNameCc)); + $objName = mb_strtolower(lang(ucfirst(static::$pluralObjectNameCc) . '.' . static::$singularObjectNameCc)); } else { $objName = lang('Basic.global.record'); } - - if (!$this->soft_delete){ + + if (!$this->soft_delete) { if (!$this->model->delete($id)) { return $this->failNotFound(lang('Basic.global.deleteError', [$objName])); } - } - else{ + } else { $datetime = (new \CodeIgniter\I18n\Time("now")); - $rawResult = $this->model->where('id',$id) - ->set(['deleted_at' => $datetime->format('Y-m-d H:i:s'), - 'is_deleted' => $this->delete_flag]) + $rawResult = $this->model->where('id', $id) + ->set([ + 'deleted_at' => $datetime->format('Y-m-d H:i:s'), + 'is_deleted' => $this->delete_flag + ]) ->update(); if (!$rawResult) { return $this->failNotFound(lang('Basic.global.deleteError', [$objName])); @@ -468,6 +422,321 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController return $response; } + public function cargar($id) + { + if ($this->request->isAJAX()) { + + $modelPapelFormato = new PapelFormatoModel(); + $modelCliente = new ClienteModel(); + $modelPapelGenerico = new PapelGenericoModel(); + + + $presupuesto = $this->model->find($id); + $data = []; + if ($presupuesto) { + + $data['lc'] = $presupuesto->lomo_cubierta; + $data['lsc'] = $presupuesto->lomo_sobrecubierta; + $data['tipo_impresion'] = $presupuesto->tipo_impresion_id; + $data['cosido'] = $presupuesto->cosido; + $data['POD'] = $this->getPOD(); + + $data['datosGenerales']['id'] = $presupuesto->id; + $data['datosGenerales']['state'] = intval($presupuesto->estado_id); + $data['datosGenerales']['updated_at'] = date('d/m/Y', strtotime($presupuesto->updated_at)); + $data['datosGenerales']['created_at'] = date('d/m/Y', strtotime($presupuesto->created_at)); + $data['datosGenerales']['inc_rei'] = $presupuesto->inc_rei == null ? 0 : $presupuesto->inc_rei; + $data['datosGenerales']['titulo'] = $presupuesto->titulo; + $data['datosGenerales']['autor'] = $presupuesto->autor; + $data['datosGenerales']['coleccion'] = $presupuesto->coleccion; + $data['datosGenerales']['numero_edicion'] = $presupuesto->numero_edicion; + $data['datosGenerales']['isbn'] = $presupuesto->isbn; + $data['datosGenerales']['pais'] = $presupuesto->pais_id; + $data['datosGenerales']['pais_nombre'] = model('App\Models\Configuracion\PaisModel')->find($presupuesto->pais_id)->nombre; + $data['datosGenerales']['cliente']['id'] = $presupuesto->cliente_id; + $data['datosGenerales']['cliente']['nombre'] = $modelCliente->getNombre($presupuesto->cliente_id); + $data['datosGenerales']['referenciaCliente'] = $presupuesto->referencia_cliente; + + + $data['datosLibro']['papelFormatoId'] = $presupuesto->papel_formato_id; + $data['datosLibro']['papelFormatoNombre'] = $modelPapelFormato->getNombre($presupuesto->papel_formato_id); + $data['datosLibro']['papelFormatoPersonalizado'] = $presupuesto->papel_formato_personalizado; + $data['datosLibro']['papelFormatoAncho'] = $presupuesto->papel_formato_ancho; + $data['datosLibro']['papelFormatoAlto'] = $presupuesto->papel_formato_alto; + $data['datosLibro']['paginas'] = $presupuesto->paginas; + $data['datosLibro']['tirada'] = $presupuesto->tirada; + $data['datosLibro']['merma'] = $presupuesto->merma; + $data['datosLibro']['mermaCubierta'] = $presupuesto->merma_cubierta; + $data['datosLibro']['solapasCubierta'] = $presupuesto->solapas; + $data['datosLibro']['solapasSobrecubierta'] = $presupuesto->solapas_sobrecubierta; + $data['datosLibro']['solapasCubiertaAncho'] = $presupuesto->solapas_ancho; + $data['datosLibro']['solapasSobrecubiertaAncho'] = $presupuesto->solapas_ancho_sobrecubierta; + $modelAcabado = model("App\Models\Tarifas\Acabados\TarifaAcabadoModel"); + $data['datosLibro']['acabadoCubierta']['id'] = $presupuesto->acabado_cubierta_id; + if ($presupuesto->acabado_cubierta_id == 0) { + $data['datosLibro']['acabadoCubierta']['text'] = "Ninguno"; + } else { + $data['datosLibro']['acabadoCubierta']['text'] = $modelAcabado->find($presupuesto->acabado_cubierta_id)->nombre; + } + $data['datosLibro']['acabadoSobrecubierta']['id'] = $presupuesto->acabado_sobrecubierta_id; + if ($presupuesto->acabado_sobrecubierta_id == 0) { + $data['datosLibro']['acabadoSobrecubierta']['text'] = "Ninguno"; + } else { + $data['datosLibro']['acabadoSobrecubierta']['text'] = $modelAcabado->find($presupuesto->acabado_sobrecubierta_id)->nombre; + } + $data['datosLibro']['prototipo'] = $presupuesto->prototipo; + $data['datosLibro']['ferro'] = $presupuesto->ferro; + $data['datosLibro']['ferroDigital'] = $presupuesto->ferro_digital; + $data['datosLibro']['marcapaginas'] = $presupuesto->marcapaginas; + $data['datosLibro']['retractilado'] = $presupuesto->retractilado; + $data['datosLibro']['retractilado5'] = $presupuesto->retractilado5; + $data['datosLibro']['fajaColor'] = $presupuesto->faja_color; + + $data['comparador']['tipo_impresion'] = $presupuesto->comp_tipo_impresion; + $data['comparador']['json_data'] = json_decode($presupuesto->comparador_json_data, true); + if ($data['comparador']['json_data'] != null) { + foreach ($data['comparador']['json_data'] as &$item) { + $item['papel_nombre'] = $modelPapelGenerico->getNombre($item['papel_id'])['nombre']; + } + } + $data['comparador']['posPagColor'] = $presupuesto->comp_pos_paginas_color; + $data['comparador']['lomoRedondo'] = $presupuesto->lomo_redondo; + $data['comparador']['cabezada'] = $presupuesto->cabezada; + + $data['lineasPresupuesto'] = $this->loadLineasPresupuesto($presupuesto); + + $data['servicios'] = $this->getLineasServicios($presupuesto)[1]; + + if (intval($presupuesto->envios_recoge_cliente) == 1) { + $data['direcciones']['entrega_taller'] = 1; + } else { + $data['direcciones']['entrega_taller'] = 0; + $data['direcciones'] = $this->obtenerDireccionesEnvio($id, $presupuesto->cliente_id); + } + + $data['comentarios_cliente'] = $presupuesto->comentarios_cliente; + $data['comentarios_safekat'] = $presupuesto->comentarios_safekat; + $data['comentarios_presupuesto'] = $presupuesto->comentarios_presupuesto; + $data['comentarios_produccion'] = $presupuesto->comentarios_produccion; + + $data['tiradasAlternativas'] = json_decode($presupuesto->tirada_alternativa_json_data); + + $data['resumen']['total_coste_papel'] = $presupuesto->total_coste_papel; + $data['resumen']['total_margenPercent_papel'] = $presupuesto->total_margenPercent_papel; + $data['resumen']['total_margen_papel'] = $presupuesto->total_margen_papel; + $data['resumen']['total_coste_impresion'] = $presupuesto->total_coste_impresion; + $data['resumen']['total_margenPercent_impresion'] = $presupuesto->total_margenPercent_impresion; + $data['resumen']['total_margen_impresion'] = $presupuesto->total_margen_impresion; + $data['resumen']['total_coste_servicios'] = $presupuesto->total_coste_servicios; + $data['resumen']['total_margenPercent_servicios'] = $presupuesto->total_margenPercent_servicios; + $data['resumen']['total_margen_servicios'] = $presupuesto->total_margen_servicios; + $data['resumen']['total_coste_envios'] = $presupuesto->total_coste_envios; + $data['resumen']['total_margen_envios'] = $presupuesto->total_margen_envios; + $data['resumen']['total_costes'] = $presupuesto->total_costes; + $data['resumen']['porcentajeMargen'] = + round(($presupuesto->total_costes + $presupuesto->total_margenes) > 0 ? + 100 * $presupuesto->total_margenes / ($presupuesto->total_costes + $presupuesto->total_margenes) : + 0, 0); + $data['resumen']['total_margenes'] = $presupuesto->total_margenes; + $data['resumen']['total_antes_descuento'] = $presupuesto->total_antes_descuento; + $data['resumen']['total_descuentoPercent'] = $presupuesto->total_descuentoPercent; + $data['resumen']['total_descuento'] = $presupuesto->total_descuento; + $data['resumen']['total_presupuesto'] = $presupuesto->total_presupuesto; + $data['resumen']['total_precio_unidad'] = $presupuesto->total_precio_unidad; + $data['resumen']['total_factor'] = is_numeric($presupuesto->total_factor) ? $presupuesto->total_factor : 0; + $data['resumen']['total_factor_ponderado'] = is_numeric($presupuesto->total_factor_ponderado) ? $presupuesto->total_factor_ponderado : 0; + if ($presupuesto->estado_id == 2) { + $data['resumen']['total_aceptado'] = $presupuesto->total_aceptado; + } + return $this->respond([ + 'status' => 1, + 'data' => $data + ]); + } + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + + public function obtenerComparadorInterior() + { + + if ($this->request->isAJAX()) { + + $cliente_id = $this->request->getPost('cliente_id'); + $datosPedido = $this->request->getPost('datosPedido'); + $papel_generico = $this->request->getPost('papel_generico'); + $gramaje = $this->request->getPost('gramaje'); + $paginas_color = $this->request->getPost('paginas_color'); + $isColor = $this->request->getPost('isColor') ? 1 : 0; + $isHq = $this->request->getPost('isHq') ? 1 : 0; + $tipo_impresion_id = $this->request->getPost('tipo_impresion_id'); + $uso = $this->request->getPost('uso'); + + $tipo_maquina = $this->request->getPost('tipo_maquina'); + + $data = array( + 'cliente_id' => $cliente_id, + 'datosPedido' => (object) $datosPedido, + 'papel_generico' => $papel_generico, + 'gramaje' => $gramaje, + 'papelInteriorDiferente' => true, + 'paginas_color' => $paginas_color, + 'isColor' => $isColor, + 'isHq' => $isHq, + 'tipo_impresion_id' => $tipo_impresion_id, + 'uso' => $uso + ); + + if ($tipo_maquina == 'rotativa') { + $data['papelInteriorDiferente'] = false; + $lineas = PresupuestoClienteService::obtenerPresupuestoClienteInteriorRotativa($data, true); + } else + $lineas = PresupuestoClienteService::obtenerPresupuestoClienteInterior($data, true); + return $this->respond( + [ + 'status' => 1, + 'data' => $lineas + ] + ); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + + public function obtenerComparadorExteriores() + { + + $lineasCubierta = null; + $lineasSobrecubierta = null; + + if ($this->request->isAJAX()) { + + $cubierta = $this->request->getPost('cubierta') ?? false; + $sobrecubierta = $this->request->getPost('sobrecubierta') ?? false; + + // cubierta y sobrecubierta siempre colorhq + $isColor = true; + $isHq = true; + + if ($cubierta) { + + $cliente_id = $cubierta['cliente_id']; + $datosPedido = $cubierta['datosPedido']; + $papel_generico = $cubierta['papel_generico']; + $gramaje = $cubierta['gramaje']; + $paginas_color = $cubierta['datosPedido']['paginas'] ?? 0; + $tipo_impresion_id = $cubierta['tipo_impresion_id']; + $uso = $cubierta['uso']; + $lomoRedondo = $cubierta['lomoRedondo'] ?? false; + + $data = array( + 'cliente_id' => $cliente_id, + 'datosPedido' => (object) $datosPedido, + 'papel_generico' => $papel_generico, + 'gramaje' => $gramaje, + 'paginas_color' => $paginas_color, + 'isColor' => 1, // cubierta y sobre cubierta colorhq + 'isHq' => 1, // cubierta y sobre cubierta colorhq + 'tipo_impresion_id' => $tipo_impresion_id, + 'uso' => $uso, + 'lomoRedondo' => $lomoRedondo + ); + $lineasCubierta = PresupuestoClienteService::obtenerCubierta($data, true); + } + + if ($sobrecubierta) { + + $cliente_id = $sobrecubierta['cliente_id']; + $datosPedido = $sobrecubierta['datosPedido']; + $papel_generico = $sobrecubierta['papel_generico']; + $gramaje = $sobrecubierta['gramaje']; + $paginas_color = $sobrecubierta['datosPedido']['paginas'] ?? 0; + $tipo_impresion_id = $sobrecubierta['tipo_impresion_id']; + $uso = $sobrecubierta['uso']; + + $data = array( + 'cliente_id' => $cliente_id, + 'datosPedido' => (object) $datosPedido, + 'papel_generico' => $papel_generico, + 'gramaje' => $gramaje, + 'paginas_color' => $paginas_color, + 'isColor' => 1, // cubierta y sobre cubierta colorhq + 'isHq' => 1, // cubierta y sobre cubierta colorhq + 'tipo_impresion_id' => $tipo_impresion_id, + 'uso' => $uso + ); + $lineasSobrecubierta = PresupuestoClienteService::obtenerSobrecubierta($data, true); + } + + return $this->respond( + [ + 'status' => 1, + 'data' => (object) array( + 'cubierta' => $lineasCubierta, + 'sobrecubierta' => $lineasSobrecubierta + ) + ] + ); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + + public function obtenerComparadorGuardas() + { + + if ($this->request->isAJAX()) { + + $cliente_id = $this->request->getPost('cliente_id'); + $datosPedido = $this->request->getPost('datosPedido'); + $papel_generico = $this->request->getPost('papel_generico'); + $gramaje = $this->request->getPost('gramaje'); + $paginas_color = $this->request->getPost('paginas_color'); + $isColor = $this->request->getPost('isColor'); + $isHq = $this->request->getPost('isHq'); + $tipo_impresion_id = $this->request->getPost('tipo_impresion_id'); + $uso = $this->request->getPost('uso'); + + // Para el caso de Fresado y Cosido tapa dura, las guardas son un diptico + // y hay que imprimirlas como "cosido" (dos hojas pegadas). En el caso de espiral + // o wire-o tapa dura, las guardas se imprimen como hojas sueltas + if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) { + $datosPedido['isCosido'] = true; + } else if ($tipo_impresion_id == 5 || $tipo_impresion_id == 7) { + $datosPedido['isCosido'] = false; + } + + $datosPedido['paginas_impresion'] = $datosPedido['paginas']; + + $data = array( + 'cliente_id' => $cliente_id, + 'datosPedido' => (object) $datosPedido, + 'papel_generico' => $papel_generico, + 'gramaje' => $gramaje, + 'papelInteriorDiferente' => true, + 'paginas_color' => $paginas_color, + 'isColor' => $isColor, + 'isHq' => $isHq, + 'tipo_impresion_id' => $tipo_impresion_id, + 'uso' => $uso + ); + + $lineas = PresupuestoClienteService::obtenerGuardas($data, true); + return $this->respond( + [ + 'status' => 1, + 'data' => $lineas + ] + ); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + public function datatable() { @@ -506,178 +775,45 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $resourceData = $this->model->getResource($searchValues, $tipo_impresion_id)->orderBy($order1, $dir1)->orderBy($order2, $dir2) ->orderBy($order3, $dir3)->limit($length, $start)->get()->getResultObject(); - foreach ($resourceData as $item) : - if (isset($item->comentarios_pdf) && strlen($item->comentarios_pdf) > 100) : + foreach ($resourceData as $item): + if (isset($item->comentarios_pdf) && strlen($item->comentarios_pdf) > 100): $item->comentarios_pdf = character_limiter($item->comentarios_pdf, 100); endif; - if (isset($item->causa_cancelacion) && strlen($item->causa_cancelacion) > 100) : + if (isset($item->causa_cancelacion) && strlen($item->causa_cancelacion) > 100): $item->causa_cancelacion = character_limiter($item->causa_cancelacion, 100); endif; - if (isset($item->comentarios_cliente) && strlen($item->comentarios_cliente) > 100) : + if (isset($item->comentarios_cliente) && strlen($item->comentarios_cliente) > 100): $item->comentarios_cliente = character_limiter($item->comentarios_cliente, 100); endif; - if (isset($item->comentarios_safekat) && strlen($item->comentarios_safekat) > 100) : + if (isset($item->comentarios_safekat) && strlen($item->comentarios_safekat) > 100): $item->comentarios_safekat = character_limiter($item->comentarios_safekat, 100); endif; - if (isset($item->comentarios_tarifa) && strlen($item->comentarios_tarifa) > 100) : + if (isset($item->comentarios_tarifa) && strlen($item->comentarios_tarifa) > 100): $item->comentarios_tarifa = character_limiter($item->comentarios_tarifa, 100); endif; - if (isset($item->comentarios_produccion) && strlen($item->comentarios_produccion) > 100) : + if (isset($item->comentarios_produccion) && strlen($item->comentarios_produccion) > 100): $item->comentarios_produccion = character_limiter($item->comentarios_produccion, 100); endif; - if (isset($item->tirada_alternativa_json_data) && strlen($item->tirada_alternativa_json_data) > 100) : + if (isset($item->tirada_alternativa_json_data) && strlen($item->tirada_alternativa_json_data) > 100): $item->tirada_alternativa_json_data = character_limiter($item->tirada_alternativa_json_data, 100); endif; - if (isset($item->titulo) && strlen($item->titulo) > 100) : + if (isset($item->titulo) && strlen($item->titulo) > 100): $item->titulo = character_limiter($item->titulo, 100); endif; - if (isset($item->paginas_color_posicion) && strlen($item->paginas_color_posicion) > 100) : + if (isset($item->paginas_color_posicion) && strlen($item->paginas_color_posicion) > 100): $item->paginas_color_posicion = character_limiter($item->paginas_color_posicion, 100); endif; - if (isset($item->aprobado_json_data) && strlen($item->aprobado_json_data) > 100) : + if (isset($item->aprobado_json_data) && strlen($item->aprobado_json_data) > 100): $item->aprobado_json_data = character_limiter($item->aprobado_json_data, 100); endif; - if (isset($item->comparador_json_data) && strlen($item->comparador_json_data) > 100) : + if (isset($item->comparador_json_data) && strlen($item->comparador_json_data) > 100): $item->comparador_json_data = character_limiter($item->comparador_json_data, 100); endif; - if (isset($item->ws_externo_json_data) && strlen($item->ws_externo_json_data) > 100) : + if (isset($item->ws_externo_json_data) && strlen($item->ws_externo_json_data) > 100): $item->ws_externo_json_data = character_limiter($item->ws_externo_json_data, 100); endif; endforeach; - } else { - - $isColor = $reqData['color'] ?? false; - $isHq = $reqData['hq'] ?? false; - - $datosPedido = (object)array( - 'paginas' => intval($reqData['paginas']) ?? 0, - 'tirada' => intval($reqData['tirada']) ?? 0, - 'merma' => intval($reqData['merma']) ?? 0, - 'ancho' => intval($reqData['ancho']) ?? 100000, - 'alto' => intval($reqData['alto']) ?? 100000, - 'a_favor_fibra' => $reqData['a_favor_fibra'] ?? 1, - 'isCosido' => (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id), // JJO esto es custom por cada tipo de presupuesto - ); - - $papel_generico = [ - 'id' => $reqData['papel_generico_id'] ?? 0, - 'nombre' => $reqData['papel_generico'] ?? "", - ]; - - $gramaje = $reqData['gramaje'] ?? 0; - - $cliente_id = $reqData['cliente_id'] ?? -1; - - $resourceData = []; - - if ($type == 'interior' || $type == 'guardas') { - - $datosTipolog = $reqData['negro'] ?? null; - if (!is_null($datosTipolog)) { - $datosTipolog = []; - $data = (object)array( - 'negro' => floatval($reqData['negro']) ?? 0, - 'cyan' => floatval($reqData['cyan']) ?? 0, - 'magenta' => floatval($reqData['magenta']) ?? 0, - 'amarillo' => floatval($reqData['amarillo']) ?? 0, - 'cg' => floatval($reqData['cg']) ?? 0, - 'gota_negro' => floatval($reqData['gota_negro']) ?? 0, - 'gota_color' => floatval($reqData['gota_color']) ?? 0, - ); - array_push($datosTipolog, $data); - } - - if ($type == 'guardas') { - - $datosPedido->paginas_impresion = intval($reqData['paginas_impresion']) ?? 0; - // Para el caso de Fresado y Cosido tapa dura, las guardas son un diptico - // y hay que imprimirlas como "cosido" (dos hojas pegadas). En el caso de espiral - // o wire-o tapa dura, las guardas se imprimen como hojas sueltas - if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) { - $datosPedido->isCosido = true; - } else if ($tipo_impresion_id == 5 || $tipo_impresion_id == 7) { - $datosPedido->isCosido = false; - } - } - - $a_favor_fibra = $reqData['a_favor_fibra'] ?? false; - - $input_data = array( - 'uso' => $type, - 'tipo_impresion_id' => $tipo_impresion_id, - 'datosPedido' => $datosPedido, - 'papel_generico' => $papel_generico, - 'gramaje' => $gramaje, - 'isColor' => $isColor, - 'isHq' => $isHq, - 'cliente_id' => $cliente_id, - 'datosTipolog' => $datosTipolog, - 'a_favor_fibra' => $a_favor_fibra - ); - - $resourceData = PresupuestoService::obtenerComparadorPlana($input_data); - - } else if ($type == 'interior_rot') { - - $paginas = (object)array( - 'negro' => intval($reqData['paginas_negro'] ?? 0), - 'color' => intval($reqData['paginas_color'] ?? 0), - ); - - $datosTipolog = $reqData['negro'] ?? null; - if (!is_null($datosTipolog)) { - $datosTipolog = []; - $data = (object)array( - 'negro' => floatval($reqData['negro']) ?? 0, - 'cyan' => floatval($reqData['cyan']) ?? 0, - 'magenta' => floatval($reqData['magenta']) ?? 0, - 'amarillo' => floatval($reqData['amarillo']) ?? 0, - 'gota_negro' => floatval($reqData['gota_negro']) ?? 0, - 'gota_color' => floatval($reqData['gota_color']) ?? 0, - ); - array_push($datosTipolog, $data); - } - - $input_data = [ - 'datosPedido' => $datosPedido, - 'papel_generico' => $papel_generico, - 'gramaje' => $gramaje, - 'paginas' => $paginas, - 'cliente_id' => $cliente_id, - 'datosTipolog' => $datosTipolog - ]; - - $resourceData = PresupuestoService::obtenerComparadorRotativa($input_data); - - } else if ($type == 'cubierta' || $type == 'sobrecubierta') { - - $datosPedido->solapas = $reqData['solapas']; - $datosPedido->solapas_ancho = $reqData['solapas_ancho']; - $datosPedido->lomo = $reqData['lomo']; - - $input_data = array( - 'uso' => $type, - 'tipo_impresion_id' => $tipo_impresion_id, - 'datosPedido' => $datosPedido, - 'papel_generico' => $papel_generico, - 'gramaje' => $gramaje, - 'isColor' => 1, // Cubierta y sobrecubierta siempre color HQ - 'isHq' => 1, - 'cliente_id' => $cliente_id, - ); - - $resourceData = PresupuestoService::obtenerComparadorPlana($input_data); - } - - $newTokenHash = csrf_hash(); - $csrfTokenName = csrf_token(); - $data = [ - 'lineas' => $resourceData, - $csrfTokenName => $newTokenHash - ]; - - return $this->respond($data); } return $this->respond(Collection::datatable( @@ -691,6 +827,159 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController } + public function getLineaPresupuesto() + { + if ($this->request->isAJAX()) { + + $reqData = $this->request->getPost(); + + $type = $reqData['type'] ?? null; + // por defecto, se deja cosido tapa blanda por ahora JJO + $tipo_impresion_id = $reqData['tipo_impresion_id'] ?? 4; + + $isColor = $reqData['color'] ?? false; + $isHq = $reqData['hq'] ?? false; + + $datosPedido = (object) array( + 'paginas' => intval($reqData['paginas']) ?? 0, + 'tirada' => intval($reqData['tirada']) ?? 0, + 'merma' => intval($reqData['merma']) ?? 0, + 'ancho' => intval($reqData['ancho']) ?? 100000, + 'alto' => intval($reqData['alto']) ?? 100000, + 'a_favor_fibra' => $reqData['a_favor_fibra'] ?? 1, + 'isCosido' => (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id), // JJO esto es custom por cada tipo de presupuesto + ); + + $papel_generico = [ + 'id' => $reqData['papel_generico_id'] ?? 0, + 'nombre' => $reqData['papel_generico'] ?? "", + ]; + + if ($papel_generico['id'] != 0 && $papel_generico['nombre'] == "") { + $modelPapelGenerico = new PapelGenericoModel(); + $papel_generico['nombre'] = $modelPapelGenerico->getNombre($papel_generico['id'])['nombre']; + } + + $gramaje = $reqData['gramaje'] ?? 0; + + $cliente_id = $reqData['cliente_id'] ?? -1; + + $resourceData = []; + + if ($type == 'interior' || $type == 'guardas') { + + $datosTipolog = $reqData['negro'] ?? null; + if (!is_null($datosTipolog)) { + $datosTipolog = []; + $data = (object) array( + 'negro' => floatval($reqData['negro']) ?? 0, + 'cyan' => floatval($reqData['cyan']) ?? 0, + 'magenta' => floatval($reqData['magenta']) ?? 0, + 'amarillo' => floatval($reqData['amarillo']) ?? 0, + 'cg' => floatval($reqData['cg']) ?? 0, + 'gota_negro' => floatval($reqData['gota_negro']) ?? 0, + 'gota_color' => floatval($reqData['gota_color']) ?? 0, + ); + array_push($datosTipolog, $data); + } + + if ($type == 'guardas') { + + $datosPedido->paginas_impresion = intval($reqData['paginas_impresion']) ?? 0; + // Para el caso de Fresado y Cosido tapa dura, las guardas son un diptico + // y hay que imprimirlas como "cosido" (dos hojas pegadas). En el caso de espiral + // o wire-o tapa dura, las guardas se imprimen como hojas sueltas + if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) { + $datosPedido->isCosido = true; + } else if ($tipo_impresion_id == 5 || $tipo_impresion_id == 7) { + $datosPedido->isCosido = false; + } + } + + $a_favor_fibra = $reqData['a_favor_fibra'] ?? false; + + $input_data = array( + 'uso' => $type, + 'tipo_impresion_id' => $tipo_impresion_id, + 'datosPedido' => $datosPedido, + 'papel_generico' => $papel_generico, + 'gramaje' => $gramaje, + 'isColor' => $isColor, + 'isHq' => $isHq, + 'cliente_id' => $cliente_id, + 'datosTipolog' => $datosTipolog, + 'a_favor_fibra' => $a_favor_fibra + ); + + $resourceData = PresupuestoService::obtenerComparadorPlana($input_data); + + } else if ($type == 'interior_rot') { + + $paginas = (object) array( + 'negro' => intval($reqData['paginas_negro'] ?? 0), + 'color' => intval($reqData['paginas_color'] ?? 0), + ); + + $datosTipolog = $reqData['negro'] ?? null; + if (!is_null($datosTipolog)) { + $datosTipolog = []; + $data = (object) array( + 'negro' => floatval($reqData['negro']) ?? 0, + 'cyan' => floatval($reqData['cyan']) ?? 0, + 'magenta' => floatval($reqData['magenta']) ?? 0, + 'amarillo' => floatval($reqData['amarillo']) ?? 0, + 'gota_negro' => floatval($reqData['gota_negro']) ?? 0, + 'gota_color' => floatval($reqData['gota_color']) ?? 0, + ); + array_push($datosTipolog, $data); + } + + $input_data = [ + 'datosPedido' => $datosPedido, + 'papel_generico' => $papel_generico, + 'gramaje' => $gramaje, + 'paginas' => $paginas, + 'cliente_id' => $cliente_id, + 'datosTipolog' => $datosTipolog + ]; + + $resourceData = PresupuestoService::obtenerComparadorRotativa($input_data); + + } else if ($type == 'cubierta' || $type == 'sobrecubierta') { + + $datosPedido->solapas = $reqData['solapas']; + $datosPedido->solapas_ancho = $reqData['solapas_ancho']; + $datosPedido->lomo = $reqData['lomo']; + + $input_data = array( + 'uso' => $type, + 'tipo_impresion_id' => $tipo_impresion_id, + 'datosPedido' => $datosPedido, + 'papel_generico' => $papel_generico, + 'gramaje' => $gramaje, + 'isColor' => 1, // Cubierta y sobrecubierta siempre color HQ + 'isHq' => 1, + 'cliente_id' => $cliente_id, + ); + + $resourceData = PresupuestoService::obtenerComparadorPlana($input_data); + } + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'lineas' => $resourceData, + $csrfTokenName => $newTokenHash + ]; + + return $this->respond($data); + + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function datatable_2() { if ($this->request->isAJAX()) { @@ -719,25 +1008,22 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController ]; return $this->respond($data); - } - - else if ($tipo == 'duplicar'){ + } else if ($tipo == 'duplicar') { $presupuesto_id = $reqData['presupuesto_id'] ?? -1; $result = $this->duplicarPresupuesto($presupuesto_id); $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); - if($result['success']){ + if ($result['success']) { $data = [ 'id' => $result['id'], $csrfTokenName => $newTokenHash - ]; + ]; return $this->respond($data); - } - else{ + } else { $data = [ 'error' => $result['message'], $csrfTokenName => $newTokenHash - ]; + ]; return $this->respond($data); } } @@ -754,6 +1040,226 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController } } + public function getPapelGenerico() + { + + if ($this->request->isAJAX()) { + + $POD_value = $this->getPOD(); + $tirada = $this->request->getGet("tirada"); + $isPOD = intval($tirada) <= intval($POD_value); + + $tipo_impresion_id = $this->request->getGet("tipo_impresion"); + $tapa_dura = model('App\Models\Configuracion\TipoPresupuestoModel')->get_isTapaDura(intval($tipo_impresion_id)); + + $tipo = $this->request->getGet("tipo"); + + $uso = $this->request->getGet("uso") ?? 'interior'; + $cubierta = false; + if ($uso == 'cubierta') { + $cubierta = true; + } + $sobrecubierta = false; + if ($uso == 'sobrecubierta') { + $sobrecubierta = true; + } + $guardas = false; + if ($uso == 'guardas') { + $guardas = true; + } + $rotativa = false; + if ($uso == 'rotativa') { + $rotativa = true; + } + + $model = model('App\Models\Configuracion\PapelGenericoModel'); + $query = $model->getPapelForComparador($tipo, $cubierta, $sobrecubierta, $rotativa, $guardas, $tapa_dura, $isPOD); + if ($this->request->getGet("q")) { + $query->groupStart() + ->orLike("lg_papel_generico.nombre", $this->request->getGet("q")) + ->groupEnd(); + } + + return $this->response->setJSON($query->orderBy("t1.nombre", "asc")->get()->getResultObject()); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function getGramaje() + { + if ($this->request->isAJAX()) { + + $papel_generico_id = $this->request->getGet("papel_generico"); + + $POD_value = $this->getPOD(); + $tirada = $this->request->getGet("tirada"); + $isPOD = intval($tirada) <= intval($POD_value); + + $tipo_impresion_id = $this->request->getGet("tipo_impresion"); + $tapa_dura = model('App\Models\Configuracion\TipoPresupuestoModel')->get_isTapaDura(intval($tipo_impresion_id)); + + $tipo = $this->request->getGet("tipo"); + + $uso = $this->request->getGet("uso") ?? 'interior'; + $cubierta = false; + if ($uso == 'cubierta') { + $cubierta = true; + } + $sobrecubierta = false; + if ($uso == 'sobrecubierta') { + $sobrecubierta = true; + } + $guardas = false; + if ($uso == 'guardas') { + $guardas = true; + } + $rotativa = false; + if ($uso == 'rotativa') { + $rotativa = true; + } + + $model = model('App\Models\Configuracion\PapelGenericoModel'); + $query = $model->getGramajeForComparador($tipo, $papel_generico_id, $cubierta, $sobrecubierta, $rotativa, $guardas, $tapa_dura, $isPOD); + if ($this->request->getGet("q")) { + $query->groupStart() + ->orLike("lg_papel_impresion.gramaje", $this->request->getGet("q")) + ->groupEnd(); + } + + return $this->response->setJSON($query->orderBy("t2.gramaje", "asc")->get()->getResultObject()); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + + public function getPapelImpresion() + { + + if ($this->request->isAJAX()) { + + $papel_generico_id = $this->request->getGet('papel_generico'); + $gramaje = $this->request->getGet('gramaje'); + + $tipo_impresion_id = $this->request->getGet("tipo_impresion"); + $tapa_dura = model('App\Models\Configuracion\TipoPresupuestoModel')->get_isTapaDura(intval($tipo_impresion_id)); + + $tipo = $this->request->getGet("tipo"); + + $uso = $this->request->getGet("uso") ?? 'interior'; + + $model = model('App\Models\Configuracion\PapelImpresionModel'); + $query = $model->getPapelesImpresionForMenu( + $papel_generico_id, + $gramaje, + $tipo, + $uso, + $tapa_dura, + false + ); + if ($this->request->getGet("q")) { + $query->groupStart() + ->orLike("lg_papel_impresion.nombre", $this->request->getGet("q")) + ->groupEnd(); + } + + return $this->response->setJSON($query->orderBy("t1.nombre", "asc")->get()->getResultObject()); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + + public function getMaquinas() + { + + if ($this->request->isAJAX()) { + + $ancho = $this->request->getGet('ancho'); + $alto = $this->request->getGet('alto'); + $tirada = $this->request->getGet('tirada'); + $merma = $this->request->getGet('merma'); + $tipo_impresion_id = $this->request->getGet('tipo_impresion'); + $isCosido = (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id); + $papel_impresion_id = $this->request->getGet('papel_impresion'); + $tarifa_tipo = $this->request->getGet("tarifa_tipo"); // negro, color, negrohq, colorhq + $uso_tarifa = $this->request->getGet("uso_tarifa") ?? 'interior'; // interior, cubierta, sobrecubierta + $is_rotativa = $this->request->getGet('is_rotativa') ?? 0; + $lomo_redondo = $this->request->getGet('lomo_redondo'); + $lomo = $this->request->getGet('lomo'); + $solapas = $this->request->getGet('solapas'); + $solapas_ancho = $this->request->getGet('solapas_ancho'); + + $model = model('App\Models\Configuracion\MaquinaModel'); + $query = $model->getMaquinaImpresionForPresupuesto( + $is_rotativa, + $tarifa_tipo, + $uso_tarifa, + intval($tirada) + intval($merma), + $papel_impresion_id + ); + if ($this->request->getGet("q")) { + $query->groupStart() + ->orLike("lg_maquinas.nombre", $this->request->getGet("q")) + ->groupEnd(); + } + $data = $query->orderBy("t1.nombre", "asc")->get()->getResultObject(); + + $query = $model->db->getLastQuery(); + $datosPedido = ((object) array( + 'ancho' => $ancho, + 'alto' => $alto, + 'isCosido' => $isCosido, + 'lomo' => $lomo, + 'solapas' => $solapas, + 'solapas_ancho' => $solapas_ancho, + )); + + for ($i = 0; $i < count($data); $i++) { + + if ($is_rotativa) { + + $has_error = true; + for ($f = 0; $f < 2; $f++) { + + $parametrosRotativa = (object) array( + 'a_favor_fibra' => $f, + ); + $values = []; + [$values['ancho'], $values['alto']] = PresupuestoService::calculoDimForma($datosPedido, $parametrosRotativa); + + $factor_anchura = round($data[$i]->ancho_impresion / $values['ancho'], 2); + + if (floor($factor_anchura) != 0) { + $has_error = false; + } + } + if ($has_error) { + unset($data[$i]); + } + } else { + + if ($uso_tarifa != 'interior') { + $datosPedido->anchoExteriores = PresupuestoService::getAnchoTotalExteriores($uso_tarifa, $tipo_impresion_id, $datosPedido, $data[$i]->maquina_id, $lomo_redondo); + $datosPedido->altoExteriores = PresupuestoService::getAltoTotalExteriores($uso_tarifa, $tipo_impresion_id, $datosPedido); + } + + $ancho_calculo = ($uso_tarifa == 'cubierta' || $uso_tarifa == 'sobrecubierta') ? $datosPedido->anchoExteriores : $datosPedido->ancho; + $alto_calculo = ($uso_tarifa == 'cubierta' || $uso_tarifa == 'sobrecubierta') ? $datosPedido->altoExteriores : $datosPedido->alto; + $formas = PresupuestoService::getNumFormasPlana($uso_tarifa, $data[$i], $ancho_calculo, $alto_calculo, $datosPedido->isCosido); + if ($formas['num_formas']['posicion_formas'] == 'n/a') { + unset($data[$i]); + } + } + } + + return $this->response->setJSON($data); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + private function getStringsFromTipoImpresion($tipo_impresion_id) { @@ -761,7 +1267,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController switch ($tipo_impresion_id) { - // Fresado tapa dura + // Fresado tapa dura case 1: $viewData['pageTitle'] = lang('Presupuestos.moduleTitleFresadoTD'); $viewData['isCosido'] = 0; @@ -769,7 +1275,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $breadcrumbTitle = lang("App.menu_libros_fresasdo_tapa_dura"); break; - // Fresado tapa blanda + // Fresado tapa blanda case 2: $viewData['pageTitle'] = lang('Presupuestos.moduleTitleFresadoTB'); $viewData['isCosido'] = 0; @@ -777,7 +1283,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $breadcrumbTitle = lang("App.menu_libros_fresasdo_tapa_blanda"); break; - // Cosido tapa dura + // Cosido tapa dura case 3: $viewData['pageTitle'] = lang('Presupuestos.moduleTitleCosidoTD'); $viewData['isCosido'] = 1; @@ -785,7 +1291,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $breadcrumbTitle = lang("App.menu_libros_cosido_tapa_dura"); break; - // Cosido tapa blanda + // Cosido tapa blanda case 4: $viewData['pageTitle'] = lang('Presupuestos.moduleTitleCosidoTB'); $viewData['isCosido'] = 1; @@ -793,7 +1299,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $breadcrumbTitle = lang("App.menu_libros_cosido_tapa_blanda"); break; - // Espiral tapa dura + // Espiral tapa dura case 5: $viewData['pageTitle'] = lang('Presupuestos.moduleTitleEspiralTD'); $viewData['isCosido'] = 0; @@ -801,7 +1307,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $breadcrumbTitle = lang("App.menu_libros_espiral_tapa_dura"); break; - // Espiral tapa blanda + // Espiral tapa blanda case 6: $viewData['pageTitle'] = lang('Presupuestos.moduleTitleEspiralTB'); $viewData['isCosido'] = 0; @@ -809,7 +1315,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $breadcrumbTitle = lang("App.menu_libros_espiral_tapa_blanda"); break; - // Wire-o tapa dura + // Wire-o tapa dura case 7: $viewData['pageTitle'] = lang('Presupuestos.moduleTitleWireoTD'); $viewData['isCosido'] = 0; @@ -817,7 +1323,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $breadcrumbTitle = lang("App.menu_libros_wireo_tapa_dura"); break; - // Wire-o tapa blanda + // Wire-o tapa blanda case 8: $viewData['pageTitle'] = lang('Presupuestos.moduleTitleWireoTB'); $viewData['isCosido'] = 0; @@ -825,7 +1331,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $breadcrumbTitle = lang("App.menu_libros_wireo_tapa_blanda"); break; - // Grapado + // Grapado case 21: $viewData['pageTitle'] = lang('Presupuestos.moduleTitleGrapado'); $viewData['isCosido'] = 0; @@ -845,7 +1351,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController return $viewData; } - + /** * Duplica un presupuesto dado por su ID. @@ -860,67 +1366,68 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController * Si ocurre una excepción, la clave 'success' será false y una clave 'message' contendrá el mensaje de la excepción. * @throws \Exception Si ocurre un error durante la operación. */ - private function duplicarPresupuesto($id){ + private function duplicarPresupuesto($id) + { - try{ - - $presupuesto = $this->model->find($id); - $presupuesto->titulo = $presupuesto->titulo .' - ' . lang('Presupuestos.duplicado'); - $presupuesto->is_duplicado = 1; - $presupuesto->estado_id = 1; - $new_id = $this->model->insert($presupuesto); - - $presupuestoAcabadosModel = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); - foreach ($presupuestoAcabadosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $acabado) { - $acabado->presupuesto_id = $new_id; - $presupuestoAcabadosModel->insert($acabado); - } - - $presupuestoEncuadernacionesModel = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel'); - foreach ($presupuestoEncuadernacionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $encuadernacion) { - $encuadernacion->presupuesto_id = $new_id; - $presupuestoEncuadernacionesModel->insert($encuadernacion); - } - - $presupuestoManipuladosModel = model('App\Models\Presupuestos\PresupuestoManipuladosModel'); - foreach ($presupuestoManipuladosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $manipulado) { - $manipulado->presupuesto_id = $new_id; - $presupuestoManipuladosModel->insert($manipulado); - } - - $presupuestoPreimpresionesModel = model('App\Models\Presupuestos\PresupuestoPreimpresionesModel'); - foreach ($presupuestoPreimpresionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $preimpresion) { - $preimpresion->presupuesto_id = $new_id; - $presupuestoPreimpresionesModel->insert($preimpresion); - } + try { - $presupuestoServiciosExtraModel = model('App\Models\Presupuestos\PresupuestoServiciosExtraModel'); - foreach ($presupuestoServiciosExtraModel->where('presupuesto_id', $presupuesto->id)->findAll() as $servicioExtra) { - $servicioExtra->presupuesto_id = $new_id; - $presupuestoServiciosExtraModel->insert($preimpresion); - } - - $presupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); - foreach ($presupuestoDireccionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $direccion) { - $direccion->presupuesto_id = $new_id; - $presupuestoDireccionesModel->insert($direccion); - } - - $presupuestoLineaModel = model('App\Models\Presupuestos\PresupuestoLineaModel'); - $presupuestoLineaModel->duplicateLineasPresupuesto($presupuesto->id, $new_id); - - return [ - 'success' => true, - 'id' => $new_id - ]; - - }catch(\Exception $e){ - return [ - 'success' => false, - 'message' => $e->getMessage() - ]; - } - } + $presupuesto = $this->model->find($id); + $presupuesto->titulo = $presupuesto->titulo . ' - ' . lang('Presupuestos.duplicado'); + $presupuesto->is_duplicado = 1; + $presupuesto->estado_id = 1; + $new_id = $this->model->insert($presupuesto); + + $presupuestoAcabadosModel = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); + foreach ($presupuestoAcabadosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $acabado) { + $acabado->presupuesto_id = $new_id; + $presupuestoAcabadosModel->insert($acabado); + } + + $presupuestoEncuadernacionesModel = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel'); + foreach ($presupuestoEncuadernacionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $encuadernacion) { + $encuadernacion->presupuesto_id = $new_id; + $presupuestoEncuadernacionesModel->insert($encuadernacion); + } + + $presupuestoManipuladosModel = model('App\Models\Presupuestos\PresupuestoManipuladosModel'); + foreach ($presupuestoManipuladosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $manipulado) { + $manipulado->presupuesto_id = $new_id; + $presupuestoManipuladosModel->insert($manipulado); + } + + $presupuestoPreimpresionesModel = model('App\Models\Presupuestos\PresupuestoPreimpresionesModel'); + foreach ($presupuestoPreimpresionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $preimpresion) { + $preimpresion->presupuesto_id = $new_id; + $presupuestoPreimpresionesModel->insert($preimpresion); + } + + $presupuestoServiciosExtraModel = model('App\Models\Presupuestos\PresupuestoServiciosExtraModel'); + foreach ($presupuestoServiciosExtraModel->where('presupuesto_id', $presupuesto->id)->findAll() as $servicioExtra) { + $servicioExtra->presupuesto_id = $new_id; + $presupuestoServiciosExtraModel->insert($preimpresion); + } + + $presupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); + foreach ($presupuestoDireccionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $direccion) { + $direccion->presupuesto_id = $new_id; + $presupuestoDireccionesModel->insert($direccion); + } + + $presupuestoLineaModel = model('App\Models\Presupuestos\PresupuestoLineaModel'); + $presupuestoLineaModel->duplicateLineasPresupuesto($presupuesto->id, $new_id); + + return [ + 'success' => true, + 'id' => $new_id + ]; + + } catch (\Exception $e) { + return [ + 'success' => false, + 'message' => $e->getMessage() + ]; + } + } public function allItemsSelect() { @@ -1042,232 +1549,43 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController protected function getClienteListItems($selId = null) { $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Clientes.cliente'))])]; - if (!empty($selId)) : + if (!empty($selId)): $clienteModel = model('App\Models\Clientes\ClienteModel'); $selOption = $clienteModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : + if (!empty($selOption)): $data[$selId] = $selOption[0]; endif; endif; return $data; } - protected function getPaisListItems() - { - $paisModel = model('App\Models\Configuracion\PaisModel'); - $onlyActiveOnes = true; - $data = $paisModel->getAllForMenu('id, nombre', 'nombre', $onlyActiveOnes); - - return $data; - } - - protected function getCcaaListItems($selId = null) - { - $ccaaModel = model('App\Models\Configuracion\ComunidadAutonomaModel'); - $onlyActiveOnes = true; - $data = $ccaaModel->getAllForMenu('id, nombre', 'nombre', $onlyActiveOnes); - - return $data; - } - - - protected function getAcabadosCubierta() - { - $model = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel'); - $data = $model->getServiciosAcabadoCubierta(); - array_unshift($data, (object)['id' => '', 'label' => lang('Basic.global.None')]); - return $data; - } - - protected function getAcabadosSobrecubierta() - { - $model = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel'); - $data = $model->getServiciosAcabadoSobrecubierta(); - array_unshift($data, (object)['id' => '', 'label' => lang('Basic.global.None')]); - return $data; - } - - - protected function getPapelGenericoRotativaNegro() - { - $model = model('App\Models\Configuracion\PapelGenericoModel'); - $data = $model->getPapelForComparador('negro', false, false, true); - array_unshift($data, (object)array( - "id" => 0, - "nombre" => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.papel'))]) - )); - return $data; - } - - protected function getPapelGenericoRotativaColor() - { - $model = model('App\Models\Configuracion\PapelGenericoModel'); - $data = $model->getPapelForComparador('color', false, false, true); - array_unshift($data, (object)array( - "id" => 0, - "nombre" => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.papel'))]) - )); - return $data; - } - - protected function getPapelGenericoNegro() - { - $model = model('App\Models\Configuracion\PapelGenericoModel'); - $data = $model->getPapelForComparador('negro', false, false); - array_unshift($data, (object)array( - "id" => 0, - "nombre" => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.papel'))]) - )); - return $data; - } - - protected function getPapelGenericoNegroHQ() - { - $model = model('App\Models\Configuracion\PapelGenericoModel'); - $data = $model->getPapelForComparador('negrohq', false, false); - array_unshift($data, (object)array( - "id" => 0, - "nombre" => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.papel'))]) - )); - return $data; - } - - protected function getPapelGenericoColor() - { - $model = model('App\Models\Configuracion\PapelGenericoModel'); - $data = $model->getPapelForComparador('color', false, false); - array_unshift($data, (object)array( - "id" => 0, - "nombre" => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.papel'))]) - )); - return $data; - } - - protected function getPapelGenericoColorHQ() - { - $model = model('App\Models\Configuracion\PapelGenericoModel'); - $data = $model->getPapelForComparador('colorhq', false, false); - array_unshift($data, (object)array( - "id" => 0, - "nombre" => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.papel'))]) - )); - return $data; - } - - protected function getPapelGenericoCubierta() - { - $model = model('App\Models\Configuracion\PapelGenericoModel'); - $data = $model->getPapelForComparador('colorhq', true, false); - array_unshift($data, (object)array( - "id" => 0, - "nombre" => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.papel'))]) - )); - return $data; - } - - protected function getPapelGenericoGuardas() - { - $model = model('App\Models\Configuracion\PapelGenericoModel'); - $data = $model->getPapelForComparador('colorhq', false, false, false, true); - array_unshift($data, (object)array( - "id" => 0, - "nombre" => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.papel'))]) - )); - return $data; - } - - protected function getPapelGenericoSobreCubierta() - { - $model = model('App\Models\Configuracion\PapelGenericoModel'); - $data = $model->getPapelForComparador('colorhq', false, true); - array_unshift($data, (object)array( - "id" => 0, - "nombre" => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.papel'))]) - )); - return $data; - } - - protected function getServiciosPreimpresion() - { - $model = model('App\Models\Tarifas\TarifapreimpresionModel'); - $data = $model->getServiciosPreimpresionSelector(); - array_unshift($data, (object)array( - "value" => 0, - "label" => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.servicioPreimpresion'))]) - )); - return $data; - } - - protected function getServiciosExtra() - { - $model = model('App\Models\Tarifas\TarifaextraModel'); - $data = $model->getServiciosExtraSelector(); - array_unshift($data, (object)array( - "value" => 0, - "label" => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.servicioExtra'))]) - )); - return $data; - } - - protected function getServiciosEncuadernacion() - { - $model = model('App\Models\Tarifas\TarifaEncuadernacionModel'); - $data = $model->getServiciosEncuadernacionSelector(); - return $data; - } - - protected function getPapelFormatoListItems($selId = null) - { - $papelFormatoModel = model('App\Models\Configuracion\PapelFormatoModel'); - $data = $papelFormatoModel->getElementsForMenu(); - array_shift($data); - array_unshift($data, (object)['id' => '', 'tamanio' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.papelFormatoId'))])]); - return $data; - } - - protected function getServiciosAcabado() - { - $model = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel'); - $data = $model->getServiciosAcabadoSelector(); - return $data; - } - - protected function getServiciosManipulado() - { - $model = model('App\Models\Tarifas\TarifaManipuladoModel'); - $data = $model->getServiciosManipuladoSelector(); - array_unshift($data, (object)array( - "value" => 0, - "label" => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Presupuestos.servicioManipulado'))]) - )); - return $data; - } - protected function getPOD() { return model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value; } - protected function getLineasPresupuesto($presupuestoEntity){ + protected function loadLineasPresupuesto($presupuestoEntity) + { $lineas = (new PresupuestoLineaModel())->getLineasPresupuesto($presupuestoEntity->id); - + $input_data = []; $input_data['presupuesto'] = $presupuestoEntity; - - return PresupuestoService::checkLineasPresupuesto($input_data, $lineas); + + return [false, $lineas]; } - protected function getLineasServicios($presupuestoEntity){ - - $serviciosPresupuesto = (object)array(); + protected function getLineasServicios($presupuestoEntity) + { + + $serviciosPresupuesto = (object) array(); $serviciosPresupuesto->serviciosAcabado = (new PresupuestoAcabadosModel())->getResource($presupuestoEntity->id)->get()->getResultObject(); $serviciosPresupuesto->serviciosPreimpresion = (new PresupuestoPreimpresionesModel())->getResource($presupuestoEntity->id)->get()->getResultObject(); $serviciosPresupuesto->serviciosEncuadernacion = (new PresupuestoEncuadernacionesModel())->getResource($presupuestoEntity->id)->get()->getResultObject(); $serviciosPresupuesto->serviciosManipulado = (new PresupuestoManipuladosModel())->getResource($presupuestoEntity->id)->get()->getResultObject(); $serviciosPresupuesto->serviciosExtra = (new PresupuestoServiciosExtraModel())->getResource($presupuestoEntity->id)->get()->getResultObject(); - + $input_data = []; $input_data['presupuesto_id'] = $presupuestoEntity->id; $input_data['tipo_impresion_id'] = $presupuestoEntity->tipo_impresion_id; @@ -1275,19 +1593,17 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController $input_data['POD'] = $this->getPOD(); $input_data['paginas'] = $presupuestoEntity->paginas; $input_data['is_duplicado'] = $presupuestoEntity->is_duplicado; - - if($presupuestoEntity->papel_formato_personalizado){ - $input_data['ancho'] = $presupuestoEntity->papel_formato_ancho ; - $input_data['alto'] = $presupuestoEntity->papel_formato_alto ; - } - else{ + + if ($presupuestoEntity->papel_formato_personalizado) { + $input_data['ancho'] = $presupuestoEntity->papel_formato_ancho; + $input_data['alto'] = $presupuestoEntity->papel_formato_alto; + } else { $model = model("App\Models\Configuracion\PapelFormatoModel"); $papel = $model->find($presupuestoEntity->papel_formato_id); - if($papel){ + if ($papel) { $input_data['ancho'] = $papel->ancho; $input_data['alto'] = $papel->alto; - } - else{ + } else { $input_data['ancho'] = 0; $input_data['alto'] = 0; } @@ -1296,11 +1612,25 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController return PresupuestoService::checkLineasServicios($input_data, $serviciosPresupuesto); } - protected function getLineasDirecciones($presupuestoEntity){ + protected function getLineasDirecciones($presupuestoEntity) + { $model = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); $direccionesEnvio = $model->where('presupuesto_id', $presupuestoEntity->id)->findAll(); - + return PresupuestoService::checkLineasEnvios($direccionesEnvio); } + + protected function obtenerDireccionesEnvio($id, $cliente_id) + { + $model = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); + $model_direcciones = model('App\Models\Clientes\ClienteDireccionesModel'); + $direcciones = $model + ->join('lg_proveedores', 'presupuesto_direcciones.proveedor_id = lg_proveedores.id') + ->join('lg_paises', 'presupuesto_direcciones.pais_id = lg_paises.id') + ->select('presupuesto_direcciones.*, lg_proveedores.nombre AS proveedor, lg_paises.nombre AS pais') + ->where('presupuesto_id', $id)->findAll(); + + return $direcciones; + } } diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index 3effc193..4b8ee670 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -126,6 +126,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $this->viewData['POD'] = $POD; $this->viewData['lomo_maximo'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo')->value; $this->viewData['lomo_minimo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value; + $this->viewData['eb'] = 0; $this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . $this->viewData['pageTitle'] . ' ' . lang('Basic.global.addNewSuffix'); @@ -166,6 +167,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $this->viewData['POD'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value; $this->viewData['lomo_maximo'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo')->value; $this->viewData['lomo_minimo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value; + $this->viewData['eb'] = $presupuestoEntity->envio_base; + // Si se ha llamado a esta funcion porque se ha duplicado el presupuesto // se actualiza la bbdd para que sólo ejecute algunas funciones una vez if ($presupuestoEntity->is_duplicado) { @@ -308,7 +311,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $datosPedido = (object) array( 'paginas' => $paginas, 'tirada' => $tirada[0], - 'merma' => $tirada[0] > $POD ? $this->calcular_merma($tirada[0], $POD) : 0, + 'merma' => $this->calcular_merma($tirada[0], $POD), 'ancho' => intval($tamanio['ancho']) ?? 100000, 'alto' => intval($tamanio['alto']) ?? 100000, 'isCosido' => $is_cosido, @@ -345,6 +348,51 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $lomo += floatval($linea['mano']); } } + + //Guardas + $guardas = $reqData['guardas'] ?? []; + if ($guardas != "false" && $guardas != null) { + $datos_guardas = [ + 'papel' => $modelPapelGenerico->getIdFromCode($guardas['papel']), + 'gramaje' => intval($guardas['gramaje']), + 'caras' => intval($guardas['caras']), + ]; + } else + $datos_guardas = false; + $guardas = []; + $peso_guardas = 0.0; + $coste_guardas = 0.0; + if ($datos_guardas != 0) { + if (count($datos_guardas) != 0 && $datos_guardas) { + + $guardas = $datos_guardas; + $input_data['papel_generico'] = $datos_guardas['papel'] ?? 0; + $input_data['gramaje'] = $datos_guardas['gramaje'] ?? 0; + $input_data['datosPedido']->paginas = 8; + $input_data['paginas_color'] = 8; + $input_data['datosPedido']->paginas_impresion = $datos_guardas['caras'] ?? 0; + $input_data['datosPedido']->solapas_ancho = 0; + $input_data['datosPedido']->solapas = 0; + $input_data['isColor'] = 1; + $input_data['isHq'] = 1; + $input_data['uso'] = 'guardas'; + + // Para el caso de Fresado y Cosido tapa dura, las guardas son un diptico + // y hay que imprimirlas como "cosido" (dos hojas pegadas). En el caso de espiral + // o wire-o tapa dura, las guardas se imprimen como hojas sueltas + if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) { + $input_data['datosPedido']->isCosido = true; + } else if ($tipo_impresion_id == 5 || $tipo_impresion_id == 7) { + $input_data['datosPedido']->isCosido = false; + } + + $guardas = PresupuestoClienteService::obtenerGuardas($input_data); + + if ($guardas != null && count($guardas) > 0) { + $lomo += floatval($guardas['mano']); + } + } + } $lomo = round($lomo, 2); $errors = [ 'status' => 0, @@ -356,20 +404,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if ($tipo == 'cosido' || $tipo == 'fresado') { if ($lomo < $lomo_minimo_fresado_cosido) { $errors['status'] = 1; - $errors['value'] = 'No se pueden encuadernar libros cosidos o fresados con lomo inferior a ' - . $lomo_minimo_fresado_cosido . ' mm. El lomo actual es de ' . $lomo . ' mm. ' . - "Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable."; + $errors['value'] = 'No se pueden encuadernar libros cosidos o fresados con lomo inferior a ' + . $lomo_minimo_fresado_cosido . ' mm. El lomo actual es de ' . $lomo . ' mm. ' . + "Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable."; } if ($lomo > $lomo_maximo) { $errors['status'] = 1; - $errors['value'] = 'No se pueden encuadernar con un lomo superior a ' - . $lomo_maximo . ' mm. El lomo actual es de ' . $lomo . ' mm. ' . - "Por favor, disminuya el número de páginas o el gramaje del papel para que sea encuadernable."; + $errors['value'] = 'No se pueden encuadernar con un lomo superior a ' + . $lomo_maximo . ' mm. El lomo actual es de ' . $lomo . ' mm. ' . + "Por favor, disminuya el número de páginas o el gramaje del papel para que sea encuadernable."; } } - $data = (object) array('lomo' => $lomo, - 'errors' => $errors); + $data = (object) array( + 'lomo' => $lomo, + 'errors' => $errors + ); return $this->respond($data); } else { @@ -377,185 +427,209 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - public function calcular() + public function calcular($data = -1) { - if ($this->request->isAJAX()) { - - try { - + if ($this->request) { + if ($this->request->isAJAX()) $reqData = $this->request->getPost(); - $modelPapelGenerico = new PapelGenericoModel(); + } else { + if ($data == -1) { + return "Error: sin datos"; + } + $reqData = $data; + } + + try { + + $reqData = $this->request->getPost(); + $modelPapelGenerico = new PapelGenericoModel(); - $id = $reqData['id'] ?? 0; + $id = $reqData['id'] ?? 0; - $cliente_id = $reqData['clienteId'] ?? -1; + $cliente_id = $reqData['clienteId'] ?? -1; - $tirada = $reqData['tirada'] ?? 0; - $tamanio = $reqData['tamanio']; - $paginas = $reqData['paginas'] ?? 0; - $paginas_color = $reqData['paginasColor'] ?? 0; - $tipo = $reqData['tipo']; + $tirada = $reqData['tirada'] ?? 0; + $selectedTirada = $reqData['selectedTirada'] ?? -1; + $tamanio = $reqData['tamanio']; + $paginas = $reqData['paginas'] ?? 0; + $paginas_color = $reqData['paginasColor'] ?? 0; + $tipo = $reqData['tipo']; - $paginasCuadernillo = $reqData['paginasCuadernillo'] ?? null; - $papelInteriorDiferente = intval($reqData['papelInteriorDiferente']) ?? null; + $paginasCuadernillo = $reqData['paginasCuadernillo'] ?? null; + $papelInteriorDiferente = intval($reqData['papelInteriorDiferente']) ?? null; - $isColor = intval($reqData['isColor']) ?? 0; - $isHq = intval($reqData['isHq']) ?? 0; + $isColor = intval($reqData['isColor']) ?? 0; + $isHq = intval($reqData['isHq']) ?? 0; - $interior = $reqData['interior'] ?? []; - $cubierta = $reqData['cubierta'] ?? []; - $sobrecubierta = $reqData['sobrecubierta'] ?? []; - $guardas = $reqData['guardas'] ?? []; - $faja = $reqData['faja'] ?? []; - $excluirRotativa = $reqData['excluirRotativa'] ?? 0; - $excluirRotativa = intval($excluirRotativa); + $interior = $reqData['interior'] ?? []; + $cubierta = $reqData['cubierta'] ?? []; + $sobrecubierta = $reqData['sobrecubierta'] ?? []; + $guardas = $reqData['guardas'] ?? []; + $faja = $reqData['faja'] ?? []; + $excluirRotativa = $reqData['excluirRotativa'] ?? 0; + $excluirRotativa = intval($excluirRotativa); - $direcciones = $reqData['direcciones'] ?? []; + $direcciones = $reqData['direcciones'] ?? []; - $tipo_impresion_id = $this->getTipoImpresion($tipo, $cubierta['tipoCubierta']); - $lomoRedondo = $cubierta['lomoRedondo'] ?? 0; + $tipo_impresion_id = $this->getTipoImpresion($tipo, $cubierta['tipoCubierta']); + $lomoRedondo = $cubierta['lomoRedondo'] ?? 0; - if ($papelInteriorDiferente) { - $papel['negro'] = $modelPapelGenerico->where('id', $interior['papelInterior']['negro'])->first()->toArray(); - $papel['color'] = $modelPapelGenerico->where('id', $interior['papelInterior']['color'])->first()->toArray(); - $gramaje['negro'] = intval($interior['gramajeInterior']['negro']); - $gramaje['color'] = intval($interior['gramajeInterior']['color']); - } else { - $papel = $modelPapelGenerico->where('id', $interior['papelInterior'])->first()->toArray(); - $gramaje = intval($interior['gramajeInterior']); + if ($papelInteriorDiferente) { + $papel['negro'] = $modelPapelGenerico->where('id', $interior['papelInterior']['negro'])->first()->toArray(); + $papel['color'] = $modelPapelGenerico->where('id', $interior['papelInterior']['color'])->first()->toArray(); + $gramaje['negro'] = intval($interior['gramajeInterior']['negro']); + $gramaje['color'] = intval($interior['gramajeInterior']['color']); + } else { + $papel = $modelPapelGenerico->where('id', $interior['papelInterior'])->first()->toArray(); + $gramaje = intval($interior['gramajeInterior']); + } + // Interior + $interior = [ + 'papel_generico' => $papel, + 'gramaje' => $gramaje, + 'excluirRotativa' => $excluirRotativa, + 'paginas' => $paginas, + 'paginas_color' => $paginas_color, + 'papelInteriorDiferente' => $papelInteriorDiferente + ]; + + + // Cubierta + $cubierta = [ + 'papel_generico_cubierta' => $modelPapelGenerico->where('id', $cubierta['papelCubierta'])->first()->toArray(), + 'gramajeCubierta' => intval($cubierta['gramajeCubierta']), + 'carasCubierta' => intval($cubierta['carasImpresion'] ?? 0), + 'solapasCubierta' => intval($cubierta['solapas'] ?? 0) == 1 ? intval($cubierta['tamanioSolapas']) : 0, + 'acabado' => $cubierta['acabado'] ?? 0, + 'lomoRedondo' => $lomoRedondo, + ]; + + // Sobrecubierta + if ($sobrecubierta != "false" && $sobrecubierta != null) { + $sobrecubierta = [ + 'papel' => $modelPapelGenerico->getIdFromCode($sobrecubierta['papel']), + 'gramaje' => intval($sobrecubierta['gramaje']), + 'solapas' => intval($sobrecubierta['solapas'] ?? 0), + 'acabado' => $sobrecubierta['acabado'] ?? 0, + ]; + } else + $sobrecubierta = false; + + // Guardas + if ($guardas != "false" && $guardas != null) { + $datos_guardas = [ + 'papel' => $modelPapelGenerico->getIdFromCode($guardas['papel']), + 'gramaje' => intval($guardas['gramaje']), + 'caras' => intval($guardas['caras']), + ]; + } else + $datos_guardas = false; + + $datos_presupuesto = array( + 'id' => $id, + 'tirada' => $tirada, + 'tamanio' => $tamanio, + 'tipo_impresion_id' => $tipo_impresion_id, + 'clienteId' => $cliente_id, + 'isColor' => $isColor, + 'isHq' => $isHq, + 'paginasCuadernillo' => $paginasCuadernillo, + + 'interior' => $interior, + 'cubierta' => $cubierta, + 'sobrecubierta' => $sobrecubierta, + 'datos_guardas' => $datos_guardas, + + 'servicios' => $reqData['servicios'] ?? [], + ); + + $return_data = $this->calcular_presupuesto($datos_presupuesto, 0, false); //TRUE FOR DEBUG + if (array_key_exists('errors', $return_data)) { + if ($return_data['errors']->status == 1) { + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; } - // Interior - $interior = [ - 'papel_generico' => $papel, - 'gramaje' => $gramaje, - 'excluirRotativa' => $excluirRotativa, - 'paginas' => $paginas, - 'paginas_color' => $paginas_color, - 'papelInteriorDiferente' => $papelInteriorDiferente - ]; + } + if (array_key_exists('exception', $return_data)) { + return $this->failServerError( + $return_data['exception'] . ' - ' . + $return_data['file'] . ' - ' . $return_data['line'] + ); + } - // Cubierta - $cubierta = [ - 'papel_generico_cubierta' => $modelPapelGenerico->where('id', $cubierta['papelCubierta'])->first()->toArray(), - 'gramajeCubierta' => intval($cubierta['gramajeCubierta']), - 'carasCubierta' => intval($cubierta['carasImpresion'] ?? 0), - 'solapasCubierta' => intval($cubierta['solapas'] ?? 0) == 1 ? intval($cubierta['tamanioSolapas']) : 0, - 'acabado' => $cubierta['acabado'] ?? 0, - 'lomoRedondo' => $lomoRedondo, - ]; - - // Sobrecubierta - if ($sobrecubierta != "false" && $sobrecubierta != null) { - $sobrecubierta = [ - 'papel' => $modelPapelGenerico->getIdFromCode($sobrecubierta['papel']), - 'gramaje' => intval($sobrecubierta['gramaje']), - 'solapas' => intval($sobrecubierta['solapas'] ?? 0), - 'acabado' => $sobrecubierta['acabado'] ?? 0, - ]; - } else - $sobrecubierta = false; - - // Guardas - if ($guardas != "false" && $guardas != null) { - $datos_guardas = [ - 'papel' => $modelPapelGenerico->getIdFromCode($guardas['papel']), - 'gramaje' => intval($guardas['gramaje']), - 'caras' => intval($guardas['caras']), - ]; - } else - $datos_guardas = false; - - $datos_presupuesto = array( - 'id' => $id, - 'tirada' => $tirada, - 'tamanio' => $tamanio, - 'tipo_impresion_id' => $tipo_impresion_id, - 'clienteId' => $cliente_id, - 'isColor' => $isColor, - 'isHq' => $isHq, - 'paginasCuadernillo' => $paginasCuadernillo, - - 'interior' => $interior, - 'cubierta' => $cubierta, - 'sobrecubierta' => $sobrecubierta, - 'datos_guardas' => $datos_guardas, - - 'servicios' => $reqData['servicios'] ?? [], + // calculo del envio base (tirada_maxima) + $return_data['eb'] = []; + for ($i = 0; $i < count($tirada); $i++) { + $direccion = []; + $coste_direccion = $this->getCosteEnvio( + $direccion, + $return_data['peso'][$i], + $tirada[$i], + false, + true ); - $return_data = $this->calcular_presupuesto($datos_presupuesto, 0, false); //TRUE FOR DEBUG - if (array_key_exists('errors', $return_data)) { - if ($return_data['errors']->status == 1) { - $return_data = [ - 'errors' => (object) ([ - 'status' => 1 - ]), - ]; - return $return_data; - } - } - - if (array_key_exists('exception', $return_data)) { - return $this->failServerError( - $return_data['exception'] . ' - ' . - $return_data['file'] . ' - ' . $return_data['line'] + if (!property_exists($coste_direccion, 'coste')) { + $errorModel = new ErrorPresupuesto(); + $data['direccion'] = 'Sin direccion'; + $data['peso'] = $return_data['peso'][$i]; + $data['palets'] = 'Sin direccion'; + $errorModel->insertError( + $id, + auth()->user()->id, + 'No se ha podido calcular el coste de envío', + $data ); - } - - if (count($direcciones) > 1) { - - for ($i = 0; $i < count($tirada); $i++) { - - $coste_envio = 0.0; - $primer_envio = false; - foreach ($direcciones as $direccion) { - $coste_direccion = $this->getCosteEnvio( - $direccion['id'], - $return_data['peso'][$i], - !$primer_envio ? intval($tirada[$i]) : $direccion['unidades'], - $direccion['entregaPalets'] == 'true' ? 1 : 0 - )[0]; - - $primer_envio = true; - - if (!property_exists($coste_direccion, 'coste')) { - - $errorModel = new ErrorPresupuesto(); - $data['direccion'] = $direccion; - $data['peso'] = $return_data['peso'][$i]; - $data['palets'] = $direccion['entregaPalets'] == 'true' ? 1 : 0; - $errorModel->insertError( - $id, - auth()->user()->id, - 'No se ha podido calcular el coste de envío', - $data - ); - $return_data = [ - 'errors' => (object) ([ - 'status' => 1 - ]), - ]; - return $return_data; - } else { - $coste_envio += $coste_direccion->coste; - } - } - $return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio / $tirada[$i], 4); - } + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; } else { + $return_data['eb'][$i] = round($coste_direccion->coste, 2); + } + } - for ($i = 0; $i < count($tirada); $i++) { - $coste_envio = 0.0; - $coste_direccion = $this->getCosteEnvio(null, $return_data['peso'][$i], $tirada[$i], false)[0]; + $envio_base = true; + if (count($direcciones) > 0) { + + for ($i = 0; $i < count($tirada); $i++) { + $coste_envio = 0.0; + foreach ($direcciones as $direccion) { + // El primer envio no se calcula ya que se añade el base + if ($envio_base) { + //aporte del envio al precio unidad + $coste_envio += ($return_data['eb'][$i] / $tirada[$i]); + $envio_base = false; + continue; + } + if ($selectedTirada > 0) { + $unidades = floor($direccion['unidades'] * $tirada[$i] / $selectedTirada); + } else { + $unidades = $direccion['unidades']; + } + $coste_direccion = $this->getCosteEnvio( + $direccion['direccion'], + $return_data['peso'][$i], + $unidades, + $direccion['entregaPalets'] == 'true' ? 1 : 0, + false, + ); if (!property_exists($coste_direccion, 'coste')) { + $errorModel = new ErrorPresupuesto(); - $data['direccion'] = 'Sin direccion'; + $data['direccion'] = $direccion; $data['peso'] = $return_data['peso'][$i]; - $data['palets'] = 'Sin direccion'; + $data['palets'] = $direccion['entregaPalets'] == 'true' ? 1 : 0; $errorModel->insertError( $id, auth()->user()->id, @@ -569,20 +643,35 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController ]; return $return_data; } else { - $coste_envio += $coste_direccion->coste; + //aporte del envio al precio unidad + $coste_envio += ($coste_direccion->coste / $tirada[$i]); } - - $return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio / $tirada[$i], 4); } + $return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio, 4); + } + } else { + for ($i = 0; $i < count($tirada); $i++) { + $coste_envio = 0.0; + $coste_envio += ($return_data['eb'][$i] / $tirada[$i]); + $return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio, 4); } - - return $this->respond($return_data); - } catch (Exception $e) { - return $this->failServerError($e->getMessage() . ' - ' . $e->getFile() . ' - ' . $e->getLine()); } - } else { - return $this->failUnauthorized('Invalid request', 403); + if ($this->request) { + if ($this->request->isAJAX()) + return $this->respond($return_data); + } else { + return $return_data; + } + + } catch (Exception $e) { + if ($this->request) { + if ($this->request->isAJAX()) + return $this->failServerError($e->getMessage() . ' - ' . $e->getFile() . ' - ' . $e->getLine()); + } else { + return "Error: " . $e->getMessage(); + } } + } @@ -659,7 +748,20 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if ($interior == null) { return $this->failServerError('Error al calcular el interior'); } - $anchoTotal = $interior[0]['mano']; + + $anchoTotal = 0; + if (count($interior) == 2) { + + if (count($interior[0]) > 0) + $anchoTotal += $interior[0]['mano']; + if (count($interior[1]) > 0) + $anchoTotal += $interior[1]['mano']; + } else { + if (count($interior) > 0) + $anchoTotal += $interior['mano']; + } + + // le añadimos 2*ancho libro $anchoTotal += 2 * $datosPedido->ancho; // le añadimos los dobleces de las solapas @@ -839,17 +941,20 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $datosCabecera = $reqData['datosCabecera'] ?? []; + $confirmar = $reqData['confirmar'] ?? 0; $confirmar = intval($confirmar); $cliente_id = $reqData['clienteId'] ?? -1; - $tirada = $reqData['tirada'] ?? 0; + $tirada = $reqData['tirada'] ?? []; $selected_tirada = $reqData['selectedTirada'] ?? 0; $tamanio = $reqData['tamanio']; $paginas = $reqData['paginas'] ?? 0; $paginas_color = $reqData['paginasColor'] ?? 0; + $envio_base = $reqData['eb'] ?? 0; + $posPaginasColor = $reqData['posPaginasColor'] ?? ""; $paginasColorConsecutivas = $reqData['pagColorConsecutivas'] ?? 0; $papelInteriorDiferente = $reqData['papelInteriorDiferente'] ?? 0; @@ -977,43 +1082,119 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController // seleccionamos el peso de la tirada seleccionada $peso_libro = $resultado_presupuesto['peso'][array_search($selected_tirada, $tirada)]; + // calculo del envio base (tirada_maxima) + $resultado_presupuesto['eb'] = []; + $datos_presupuesto['envio_base'] = 0; + for ($i = 0; $i < count($tirada); $i++) { + $direccion = []; + $coste_direccion = $this->getCosteEnvio( + $direccion, + $resultado_presupuesto['peso'][$i], + $tirada[$i], + false, + true + ); - if (count($direcciones) > 1) { - - for ($i = 0; $i < count($tirada); $i++) { - - $resultado_presupuesto['info']['totales'][$i]['coste_envio'] = 0.0; - $resultado_presupuesto['info']['totales'][$i]['margen_envio'] = 0.0; - - $coste_envio = 0.0; - foreach ($direcciones as $direccion) { - $precio_envio = $this->getCosteEnvio( - $direccion['id'], - $resultado_presupuesto['peso'][$i], - $direccion['unidades'], - $direccion['entregaPalets'] == 'true' ? 1 : 0 - )[0]; - $coste_envio += $precio_envio->coste; - $margen_envio = $precio_envio->margen; - $resultado_presupuesto['info']['totales'][$i]['coste_envio'] += $coste_envio - $margen_envio; - $resultado_presupuesto['info']['totales'][$i]['margen_envio'] += $margen_envio; - } - $resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio / $tirada[$i], 4); + if (intval($selected_tirada) == intval($tirada[$i])) { + $datos_presupuesto['envio_base'] = round($coste_direccion->coste * (1 + $coste_direccion->margen / 100.0), 2); } - } else { - for ($i = 0; $i < count($tirada); $i++) { - $coste_envio = 0.0; - $precio_envio = $this->getCosteEnvio(null, $resultado_presupuesto['peso'][$i], $tirada[$i], false)[0]; - $coste_envio += $precio_envio->coste; - $margen_envio = $precio_envio->margen; - $resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio / $tirada[$i], 4); - - $resultado_presupuesto['info']['totales'][$i]['coste_envio'] = $coste_envio - $margen_envio; - $resultado_presupuesto['info']['totales'][$i]['margen_envio'] = $margen_envio; + if (!property_exists($coste_direccion, 'coste')) { + $errorModel = new ErrorPresupuesto(); + $data['direccion'] = 'Sin direccion'; + $data['peso'] = $resultado_presupuesto['peso'][$i]; + $data['palets'] = 'Sin direccion'; + $errorModel->insertError( + $id, + auth()->user()->id, + 'No se ha podido calcular el coste de envío', + $data + ); + $resultado_presupuesto = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $resultado_presupuesto; + } else { + $resultado_presupuesto['eb'][$i] = round($coste_direccion->coste, 2); + $resultado_presupuesto['eb_margen'][$i] = round($coste_direccion->margen, 2); } } + + for ($i = 0; $i < count($tirada); $i++) { + + $resultado_presupuesto['info']['totales'][$i]['coste_envio'] = 0.0; + $resultado_presupuesto['info']['totales'][$i]['margen_envio'] = 0.0; + } + if (count($direcciones) > 0) { + + for ($i = 0; $i < count($tirada); $i++) { + + $envio_base = true; + $coste_envio = 0.0; + $margen_envio = 0.0; + foreach ($direcciones as $direccion) { + // El primer envio no se calcula ya que se añade el base + if ($envio_base) { + //aporte del envio al precio unidad + $coste_envio += ($resultado_presupuesto['eb'][$i] / $tirada[$i]); + $margen_envio += ($resultado_presupuesto['eb_margen'][$i] / $tirada[$i]); + $resultado_presupuesto['info']['totales'][$i]['coste_envio'] += $resultado_presupuesto['eb'][$i] - $resultado_presupuesto['eb_margen'][$i]; + $resultado_presupuesto['info']['totales'][$i]['margen_envio'] += $resultado_presupuesto['eb_margen'][$i]; + $envio_base = false; + continue; + } + + $unidades = floor($direccion['unidades'] * $tirada[$i] / $selected_tirada); + $coste_direccion = $this->getCosteEnvio( + $direccion['direccion'], + $resultado_presupuesto['peso'][$i], + $unidades, + $direccion['entregaPalets'] == 'true' ? 1 : 0, + false, + ); + + if (!property_exists($coste_direccion, 'coste')) { + + $errorModel = new ErrorPresupuesto(); + $data['direccion'] = $direccion; + $data['peso'] = $resultado_presupuesto['peso'][$i]; + $data['palets'] = $direccion['entregaPalets'] == 'true' ? 1 : 0; + $errorModel->insertError( + $id, + auth()->user()->id, + 'No se ha podido calcular el coste de envío', + $data + ); + $resultado_presupuesto = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $resultado_presupuesto; + } else { + //aporte del envio al precio unidad + $coste_envio += ($coste_direccion->coste / $tirada[$i]); + $resultado_presupuesto['info']['totales'][$i]['coste_envio'] += $coste_direccion->coste - $coste_direccion->margen; + $resultado_presupuesto['info']['totales'][$i]['margen_envio'] += $coste_direccion->margen; + + } + } + $resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio, 4); + } + } else { + for ($i = 0; $i < count($tirada); $i++) { + $coste_envio = 0.0; + $coste_envio += ($resultado_presupuesto['eb'][$i] / $tirada[$i]); + $resultado_presupuesto['info']['totales'][$i]['coste_envio'] = $resultado_presupuesto['eb'][$i] - $resultado_presupuesto['eb_margen'][$i]; + $resultado_presupuesto['info']['totales'][$i]['margen_envio'] = $resultado_presupuesto['eb_margen'][$i]; + $resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio, 4); + } + } + + $model_presupuesto = new PresupuestoModel(); $tiradas_alternativas = []; $resumen_totales = []; @@ -1057,6 +1238,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $datos_presupuesto['retractilado5'] = $retractilado5; $datos_presupuesto['entrega_taller'] = $reqData['entrega_taller'] ?? 0; + + $resultado_presupuesto['info']['merma'] = $this->calcular_merma($selected_tirada, $POD); + $id = $model_presupuesto->insertarPresupuestoCliente( $id, $selected_tirada, @@ -1074,17 +1258,17 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $this->borrarRelacionesPresupuesto($id); } - foreach ($resultado_presupuesto['info']['interior'] as $linea) { + foreach ($resultado_presupuesto['values']['interior'] as $linea) { if (count($linea) > 0) $this->guardarLineaPresupuesto($id, $linea); } - if (count($resultado_presupuesto['info']['cubierta']) > 0) - $this->guardarLineaPresupuesto($id, $resultado_presupuesto['info']['cubierta']); - if (count($resultado_presupuesto['info']['sobrecubierta']) > 0) - $this->guardarLineaPresupuesto($id, $resultado_presupuesto['info']['sobrecubierta']); - if (count($resultado_presupuesto['info']['guardas']) > 0) - $this->guardarLineaPresupuesto($id, $resultado_presupuesto['info']['guardas']); + if (count($resultado_presupuesto['values']['cubierta']) > 0) + $this->guardarLineaPresupuesto($id, $resultado_presupuesto['values']['cubierta']); + if (count($resultado_presupuesto['values']['sobrecubierta']) > 0) + $this->guardarLineaPresupuesto($id, $resultado_presupuesto['values']['sobrecubierta']); + if (count($resultado_presupuesto['values']['guardas']) > 0) + $this->guardarLineaPresupuesto($id, $resultado_presupuesto['values']['guardas']); // Servicios if ($sobrecubierta) { @@ -1110,13 +1294,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - foreach ($resultado_presupuesto['info']['serviciosDefecto']['encuadernacion'] as $servicio) { + foreach ($resultado_presupuesto['values']['serviciosDefecto']['encuadernacion'] as $servicio) { $this->guardarServicio($id, $servicio, 'encuadernacion'); } - foreach ($resultado_presupuesto['info']['serviciosDefecto']['manipulado'] as $servicio) { + foreach ($resultado_presupuesto['values']['serviciosDefecto']['manipulado'] as $servicio) { $this->guardarServicio($id, $servicio, 'manipulado'); } - foreach ($resultado_presupuesto['info']['servicios_automaticos'] as $servicio) { + foreach ($resultado_presupuesto['values']['servicios_automaticos'] as $servicio) { if ($servicio->tarifa_id == 3 || $servicio->tarifa_id == 5 || $servicio->tarifa_id == 16) { // Servicios acabado $this->guardarServicio($id, $servicio, 'acabado'); @@ -1171,6 +1355,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if ($presupuesto) { $data['lc'] = $presupuesto->lomo_cubierta; $data['lsc'] = $presupuesto->lomo_sobrecubierta; + $data['eb'] = $presupuesto->envio_base; $data['state'] = intval($presupuesto->estado_id); $data['datosGenerales']['titulo'] = $presupuesto->titulo; $data['datosGenerales']['autor'] = $presupuesto->autor; @@ -1180,6 +1365,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $data['datosGenerales']['paginas'] = $presupuesto->paginas; $data['datosGenerales']['paginasCuadernillo'] = $presupuesto->paginasCuadernillo; $data['datosGenerales']['tirada'] = $presupuesto->tirada; + $data['datosGenerales']['selectedTirada'] = $presupuesto->tirada; $data['datosGenerales']['ivaReducido'] = $presupuesto->iva_reducido; $data['datosGenerales']['excluirRotativa'] = $presupuesto->excluir_rotativa; $data['datosGenerales']['clienteId'] = $presupuesto->cliente_id; @@ -1205,9 +1391,17 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $data['datosGenerales']['retractilado5'] = $presupuesto->retractilado5; $datos_papel = $this->obtenerDatosPapel($presupuesto->id); - $data['interior'] = $datos_papel['interior'] ? $datos_papel['interior'] : []; + if (array_key_exists('interior', $datos_papel)) { + $data['interior'] = $datos_papel['interior']; + } else { + $data['interior'] = []; + } - $data['cubierta'] = $datos_papel['cubierta'] ? $datos_papel['cubierta'] : []; + if (array_key_exists('cubierta', $datos_papel)) { + $data['cubierta'] = $datos_papel['cubierta']; + } else { + $data['cubierta'] = []; + } $data['cubierta']['tapa'] = $this->obtenerTipoTapa($presupuesto->tipo_impresion_id ?? null); $data['cubierta']['lomoRedondo'] = $presupuesto->lomo_redondo ? 1 : 0; $data['cubierta']['solapas'] = $presupuesto->solapas ? 1 : 0; @@ -1243,7 +1437,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if (intval($presupuesto->recoger_en_taller) == 1) { $data['direcciones']['entrega_taller'] = 1; } else { - $data['direcciones']['entrega_taller'] = 0; $data['direcciones'] = $this->obtenerDireccionesEnvio($id, $presupuesto->cliente_id); } @@ -1410,26 +1603,27 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $peso_envio = $peso_libro * $unidades / 1000.0; $data = $this->getCosteEnvio( - $direccion['id'], + $direccion['direccion'], $peso_libro, $direccion['unidades'], - $direccion['entregaPalets'] == 'false' ? 0 : 1 + $direccion['entregaPalets'] == 'false' ? 0 : 1, + false ); - if (count($data) > 0) { + if (isset($data->coste)) { - $data[0]->presupuesto_id = $presupuestoId; - $data[0]->tarifa_id = $data[0]->id; - unset($data[0]->id); - $data[0]->precio = $data[0]->coste; - unset($data[0]->coste); - $data[0]->entregaPieCalle = $direccion['entregaPalets'] == 'false' ? 0 : 1; - unset($data[0]->tipo); - $data[0]->peso = $peso_envio; - $data[0]->cantidad = $unidades; + $data->presupuesto_id = $presupuestoId; + $data->tarifa_id = $data->id; + unset($data->id); + $data->precio = $data->coste; + unset($data->coste); + $data->entregaPieCalle = $direccion['entregaPalets'] == 'false' ? 0 : 1; + unset($data->tipo); + $data->peso = $peso_envio; + $data->cantidad = $unidades; $model = new PresupuestoDireccionesModel(); - $model->insert($data[0]); + $model->insert($data); } } @@ -1495,18 +1689,17 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } - protected function getCosteEnvio($direccionId = null, $peso, $unidades, $entregaPieCalle) + protected function getCosteEnvio($direccion, $peso, $unidades, $entregaPieCalle, $calcular_envio_base) { + $return_data = $direccion; - if ($direccionId != null) { - $model = model('App\Models\Clientes\ClienteDireccionesModel'); - $data = $model->getDireccion($direccionId); + if ($calcular_envio_base) { + + $pais_id = 1; // españa + $cp = 18000; // envio nacional } else { - $data = []; - array_push($data, (object) [ - 'pais_id' => 1, // españa - 'cp' => 18000, // envio nacional - ]); + $pais_id = $direccion['pais_id']; + $cp = $direccion['cp']; } @@ -1514,41 +1707,40 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $coste = 0; $margen = 0; - if (count($data) > 0) { - $peso_envio = round(floatval($peso * $unidades / 1000.0)); // peso libro * unidades y se pasa a kilogramos - $tarifas_envio = $modelTarifaEnvio->getTarifaEnvio($data[0]->pais_id, $data[0]->cp, $peso_envio, $entregaPieCalle ? 'palets' : 'cajas'); - for ($i = 0; $i < count($tarifas_envio); $i++) { - if ($peso_envio > $tarifas_envio[$i]->peso_max || floatval($tarifas_envio[$i]->precio_max) == 0) { - $tarifas_envio[$i]->precio = number_format(floatval($tarifas_envio[$i]->precio_min) + ($peso_envio - floatval($tarifas_envio[$i]->peso_min)) * floatval($tarifas_envio[$i]->precio_adicional), 2); - } - // si no se calcula linealmente - else { - $m = (($tarifas_envio[$i]->precio_max - $tarifas_envio[$i]->precio_min) / ($tarifas_envio[$i]->peso_max - $tarifas_envio[$i]->peso_min)); - $b = $tarifas_envio[$i]->precio_max - $m * $tarifas_envio[$i]->peso_max; - $tarifas_envio[$i]->precio = number_format($m * $peso_envio + $b, 2); - } - $margen = $tarifas_envio[$i]->margen; - } - if (count($tarifas_envio) > 1) { - $tarifa_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; + $peso_envio = round(floatval(floatval($peso) * floatval($unidades) / 1000.0)); // peso libro * unidades y se pasa a kilogramos + $tarifas_envio = $modelTarifaEnvio->getTarifaEnvio($pais_id, $cp, $peso_envio, $entregaPieCalle ? 'palets' : 'cajas'); + for ($i = 0; $i < count($tarifas_envio); $i++) { + if ($peso_envio > $tarifas_envio[$i]->peso_max || floatval($tarifas_envio[$i]->precio_max) == 0) { + $tarifas_envio[$i]->precio = number_format(floatval($tarifas_envio[$i]->precio_min) + ($peso_envio - floatval($tarifas_envio[$i]->peso_min)) * floatval($tarifas_envio[$i]->precio_adicional), 2); } - } - if (count($data) > 0 && count($tarifas_envio) > 0) { - $data[0]->coste = $coste; - $data[0]->tipo = $entregaPieCalle ? 'palets' : 'cajas'; - $data[0]->margen = $margen; - $data[0]->proveedor = $tarifas_envio[0]->proveedor; - $data[0]->proveedor_id = $tarifas_envio[0]->proveedor_id; + // si no se calcula linealmente + else { + $m = (($tarifas_envio[$i]->precio_max - $tarifas_envio[$i]->precio_min) / ($tarifas_envio[$i]->peso_max - $tarifas_envio[$i]->peso_min)); + $b = $tarifas_envio[$i]->precio_max - $m * $tarifas_envio[$i]->peso_max; + $tarifas_envio[$i]->precio = number_format($m * $peso_envio + $b, 2); + } + $margen = $tarifas_envio[$i]->margen; } - return $data; + if (count($tarifas_envio) > 1) { + $tarifa_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; + } + + $return_data['coste'] = $coste; + $return_data['tipo'] = $entregaPieCalle ? 'palets' : 'cajas'; + $return_data['margen'] = $margen; + $return_data['proveedor'] = $tarifas_envio[0]->proveedor; + $return_data['proveedor_id'] = $tarifas_envio[0]->proveedor_id; + + return (object) $return_data; } protected function calcular_presupuesto($datos_entrada, $selected_tirada, $extra_info = false) @@ -1630,7 +1822,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $datosPedido = (object) array( 'paginas' => $paginas, 'tirada' => $tirada[$t], - 'merma' => $tirada[$t] > $POD ? $this->calcular_merma($tirada[$t], $POD) : 0, + 'merma' => $this->calcular_merma($tirada[$t], $POD), 'ancho' => intval($tamanio['ancho']) ?? 100000, 'alto' => intval($tamanio['alto']) ?? 100000, 'isCosido' => $is_cosido, @@ -2261,15 +2453,15 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $return_data['info'] = $info; - if ($extra_info) { // && $tirada[$t] == $selected_tirada) { + if ($extra_info && ($tirada[$t] == $selected_tirada)) { - $return_data['info']['interior'] = $interior; - $return_data['info']['cubierta'] = $cubierta; - $return_data['info']['sobrecubierta'] = $linea_sobrecubierta; - $return_data['info']['guardas'] = $guardas; - $return_data['info']['serviciosDefecto']['encuadernacion'] = $servDefectoEnc; - $return_data['info']['serviciosDefecto']['manipulado'] = $servDefectoMan; - $return_data['info']['servicios_automaticos'] = $serviciosAutomaticos; + $return_data['values']['interior'] = $interior; + $return_data['values']['cubierta'] = $cubierta; + $return_data['values']['sobrecubierta'] = $linea_sobrecubierta; + $return_data['values']['guardas'] = $guardas; + $return_data['values']['serviciosDefecto']['encuadernacion'] = $servDefectoEnc; + $return_data['values']['serviciosDefecto']['manipulado'] = $servDefectoMan; + $return_data['values']['servicios_automaticos'] = $serviciosAutomaticos; } } @@ -2384,7 +2576,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $merma = 0; if ($tirada > $POD) { - $merma = $tirada * 0.1 <= 30 ? $tirada * 0.1 : 30; + $merma = $tirada * 0.1; } else { $merma_lineas = []; foreach ($formas_lineas_interior as $formas_linea) { @@ -2547,7 +2739,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController { $model = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); $model_direcciones = model('App\Models\Clientes\ClienteDireccionesModel'); - $direcciones = $model->where('presupuesto_id', $id)->findAll(); + $direcciones = $model->where('presupuesto_id', $id)->asArray()->findAll(); + + return $direcciones; $result = []; $temp = []; diff --git a/ci4/app/Controllers/Presupuestos/Presupuestodirecciones.php b/ci4/app/Controllers/Presupuestos/Presupuestodirecciones.php index d99d9fd3..ddbe042a 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestodirecciones.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestodirecciones.php @@ -44,7 +44,7 @@ class Presupuestodirecciones extends \App\Controllers\BaseResourceController $att = $reqData['att'] ?? ""; $email = $reqData['email'] ?? ""; $direccion = $reqData['direccion'] ?? ""; - $pais_id = $reqData['paisId'] ?? -1; + $pais_id = $reqData['pais_id'] ?? -1; $provincia = $reqData['provincia'] ?? ""; $municipio = $reqData['municipio'] ?? ""; $cp = $reqData['cp'] ?? ""; @@ -145,6 +145,7 @@ class Presupuestodirecciones extends \App\Controllers\BaseResourceController $reqData = $this->request->getJSON(); if($reqData->tipo=='get_tarifa'){ + $peso = $reqData->peso ?? 0; $paisId = $reqData->paisId ?? 0; $cp = $reqData->cp ?? 0; diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoencuadernaciones.php b/ci4/app/Controllers/Presupuestos/Presupuestoencuadernaciones.php index 69198d50..c66085b1 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestoencuadernaciones.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestoencuadernaciones.php @@ -1,4 +1,5 @@ -request->getJSON(); $tarifas = array_column($postData->datos, 'tarifa_id'); - if(count($tarifas)>0){ + if (count($tarifas) > 0) { $this->model->deleteServiciosNotInArray($requestedId, $tarifas); - } - else{ + } else { $this->model->deleteAllServicios($requestedId); } - if(count($tarifas)>0){ + if (count($tarifas) > 0) { $this->model->updateTarifas($requestedId, $postData->datos); } @@ -57,7 +57,7 @@ class Presupuestoencuadernaciones extends \App\Controllers\BaseResourceControlle $data = [ $csrfTokenName => $newTokenHash ]; - + return $this->respond($data); } @@ -65,136 +65,177 @@ class Presupuestoencuadernaciones extends \App\Controllers\BaseResourceControlle { $tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel'); - if ($requestedId == null) : + if ($requestedId == null): return; endif; - $postData = $this->request->getJSON(); - $tarifas = array_column($postData->datos, 'tarifa_id'); - $tirada = $postData->tirada ?? 0; - $paginas = $postData->paginas ?? 0; - $POD = $postData->POD ?? 0; - $ancho = $postData->ancho ?? 0; - $alto = $postData->alto ?? 0; - $result = []; - - if(count($tarifas)>0){ - foreach ($tarifas as $tarifa){ - if($tarifaModel->isTarifaPorHoras($tarifa)){ - $values = $this->model->getPrecioTarifaHoras($tarifa, $paginas, $tirada, -1, $POD); - }else{ - $values = $this->model->getPrecioTarifa($tarifa, $paginas, $tirada, $ancho, $alto, -1, $POD); - } - array_push($result, $values); - } - } + $postData = $this->request->getPost(); + $datos_tarifas = $postData['datos'] ?? []; + $tirada = $postData['tirada'] ?? 0; + $paginas = $postData['paginas'] ?? 0; + $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value; + $ancho = $postData['ancho'] ?? 0; + $alto = $postData['alto'] ?? 0; + $result = $this->getServiciosEncuadernacion($datos_tarifas, $tirada, $paginas, $ancho, $alto, $POD); + $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); $data = [ - 'lines' => $result, + 'lineas' => $result, $csrfTokenName => $newTokenHash ]; - + return $this->respond($data); } + public function getServiciosEncuadernacion($datos_tarifas, $tirada, $paginas, $ancho, $alto, $POD) + { + $result = []; + $tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel'); + $model = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel'); + + + if (count($datos_tarifas) > 0) { + foreach ($datos_tarifas as $tarifa) { + if ($tarifaModel->isTarifaPorHoras($tarifa['tarifa_id'])) { + $values = $model->getPrecioTarifaHoras($tarifa['tarifa_id'], $paginas, $tirada, -1, $POD); + } else { + $values = $model->getPrecioTarifa($tarifa['tarifa_id'], $paginas, $tirada, $ancho, $alto, -1, $POD); + } + array_push($result, $values[0]); + } + } + return $result; + } + public function datatable() { if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); $tipo = $reqData['tipo'] ?? null; - if(is_null($tipo) || $tipo=='tarifa'){ + if (is_null($tipo) || $tipo == 'tarifa') { $tarifa_encuadernacion_id = $reqData['tarifa_encuadernacion_id'] ?? 0; $proveedor_id = $reqData['proveedor_id'] ?? 0; - } - else{ + } else { $solapas = $reqData['solapas'] ?? 0; } $paginas = $reqData['paginas'] ?? 0; $tirada = $reqData['tirada'] ?? 0; $ancho = $reqData['ancho'] ?? 0; $alto = $reqData['alto'] ?? 0; - + $POD = $reqData['POD'] ?? 0; $paginas_cuadernillo = $reqData['paginas_por_cuadernillo'] ?? null; - + $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); - + $tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel'); - if(is_null($tipo)){ - if($tarifaModel->isTarifaPorHoras($tarifa_encuadernacion_id)){ + if (is_null($tipo)) { + if ($tarifaModel->isTarifaPorHoras($tarifa_encuadernacion_id)) { $values = $this->model->getPrecioTarifaHoras($tarifa_encuadernacion_id, $paginas, $tirada, $proveedor_id, $POD, $paginas_cuadernillo); - }else{ + } else { $values = $this->model->getPrecioTarifa($tarifa_encuadernacion_id, $paginas, $tirada, $ancho, $alto, $proveedor_id, $POD); } - } - - else if($tipo=='tarifa'){ - if($tarifaModel->isTarifaPorHoras($tarifa_encuadernacion_id)){ + } else if ($tipo == 'tarifa') { + if ($tarifaModel->isTarifaPorHoras($tarifa_encuadernacion_id)) { $values = $this->model->getPrecioTarifaHoras($tarifa_encuadernacion_id, $paginas, $tirada, -1, $POD); - } - else{ + } else { $values = $this->model->getPrecioTarifa($tarifa_encuadernacion_id, $paginas, $tirada, $ancho, $alto, -1, $POD); } - } - - else{ + } else { $tipo_impresion_id = $reqData['tipo_impresion_id'] ?? 4; $values = $this->model->initPresupuesto($tipo_impresion_id, $solapas, $tirada, $paginas, $ancho, $alto, $POD); } - + $data = [ 'values' => $values, $csrfTokenName => $newTokenHash ]; - + return $this->respond($data); - + } else { return $this->failUnauthorized('Invalid request', 403); } } - + + public function getRowValues() + { + if ($this->request->isAJAX()) { + + $tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel'); + + $reqData = $this->request->getPost(); + + $tarifa_enc_id = $reqData['tarifa_enc_id'] ?? 0; + $tirada = $reqData['tirada'] ?? 0; + $paginas = $reqData['paginas'] ?? 0; + $ancho = $reqData['ancho'] ?? 0; + $alto = $reqData['alto'] ?? 0; + $proveedor_id = $reqData['proveedor_id'] ?? -1; + $paginas_cuadernillo = $reqData['paginas_por_cuadernillo'] ?? 32; + $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value; + + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + + if ($tarifaModel->isTarifaPorHoras($tarifa_enc_id)) { + $values = $this->model->getPrecioTarifaHoras($tarifa_enc_id, $paginas, $tirada, $proveedor_id, $POD, $paginas_cuadernillo); + } else { + $values = $this->model->getPrecioTarifa($tarifa_enc_id, $paginas, $tirada, $ancho, $alto, $proveedor_id, $POD); + } + + $data = [ + 'values' => $values, + $csrfTokenName => $newTokenHash + ]; + + return $this->respond($data); + + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + public function menuItems() { if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); - try{ + try { $tarifa_id = $reqData['tarifa_id'] ?? -1; $paginas = $reqData['paginas'] ?? 0; $tirada = $reqData['tirada'] ?? 0; $ancho = $reqData['ancho'] ?? 0; $alto = $reqData['alto'] ?? 0; - //$searchStr = goSanitize($this->request->getPost('searchTerm'))[0]; + $paginas_cuadernillo = $reqData['paginas_por_cuadernillo'] ?? 32; $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); - $menu = $this->model->getProveedoresForSelector($tarifa_id, $paginas, $tirada, $ancho, $alto); + $menu = $this->model->getProveedoresForSelector($tarifa_id, $paginas, $tirada, $ancho, $alto, $paginas_cuadernillo); $data = [ 'menu' => $menu, $csrfTokenName => $newTokenHash ]; - } - catch(Exception $e){ + } catch (Exception $e) { $data = [ 'error' => $e, $csrfTokenName => $newTokenHash ]; - } - finally{ + } finally { return $this->respond($data); } - + } else { return $this->failUnauthorized('Invalid request', 403); } diff --git a/ci4/app/Controllers/Presupuestos/Presupuestomanipulados.php b/ci4/app/Controllers/Presupuestos/Presupuestomanipulados.php index 0423bb19..f5844851 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestomanipulados.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestomanipulados.php @@ -63,6 +63,27 @@ class Presupuestomanipulados extends \App\Controllers\BaseResourceController return $this->respond($data); } + public function getServicioSolapas(){ + + if($this->request->isAJAX()){ + + $servicio = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('servicio_solapas')->value; + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + + $data = [ + 'service' => $servicio, + $csrfTokenName => $newTokenHash + ]; + + return $this->respond($data); + } + else{ + return $this->failUnauthorized('Invalid request', 403); + } + } + public function update($requestedId = null) { @@ -70,28 +91,38 @@ class Presupuestomanipulados extends \App\Controllers\BaseResourceController return; endif; - $postData = $this->request->getJSON(); - $tarifas = array_column($postData->datos, 'tarifa_id'); - $tirada = $postData->tirada ?? 0; - $POD = $postData->POD ?? 0; - $result = []; - - if(count($tarifas)>0){ - foreach ($tarifas as $tarifa){ - $values = $this->model->getPrecioTarifa($tarifa, $tirada, $POD); - array_push($result, $values); - } - } + $postData = $this->request->getPost(); + $tarifas = $postData['datos'] ?? []; + $tirada = $postData['tirada'] ?? 0; + $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value; + + $result = $this->getServiciosManipulado($tarifas, $tirada, $POD); $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); $data = [ - 'lines' => $result, + 'lineas' => $result, $csrfTokenName => $newTokenHash ]; return $this->respond($data); } + + public function getServiciosManipulado($datos_tarifas, $tirada, $POD) + { + $result = []; + $model = model('App\Models\Presupuestos\PresupuestoManipuladosModel'); + + if (count($datos_tarifas) > 0) { + foreach ($datos_tarifas as $tarifa) { + $values = $model->getPrecioTarifa($tarifa['tarifa_id'], $tirada, $POD); + $values[0]->cubierta = $tarifa['cubierta'] ?? 0; + $values[0]->sobrecubierta = $tarifa['sobrecubierta'] ?? 0; + array_push($result, $values[0]); + } + } + return $result; + } public function datatable() @@ -101,7 +132,7 @@ class Presupuestomanipulados extends \App\Controllers\BaseResourceController $tarifa_manipulado_id = $reqData['tarifa_manipulado_id'] ?? 0; $tirada = $reqData['tirada'] ?? 0; - $POD = $reqData['POD'] ?? 0; + $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value; $tipo = $reqData['tipo'] ?? null; @@ -129,4 +160,29 @@ class Presupuestomanipulados extends \App\Controllers\BaseResourceController } } + public function getRowValues() + { + if ($this->request->isAJAX()) { + $reqData = $this->request->getPost(); + + $tarifa_manipulado_id = $reqData['tarifa_manipulado_id'] ?? 0; + $tirada = $reqData['tirada'] ?? 0; + $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value; + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + + $values = $this->model->getPrecioTarifa($tarifa_manipulado_id, $tirada, $POD); + + $data = [ + 'values' => $values, + $csrfTokenName => $newTokenHash + ]; + + return $this->respond($data); + + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } } diff --git a/ci4/app/Controllers/Presupuestos/Presupuestopreimpresiones.php b/ci4/app/Controllers/Presupuestos/Presupuestopreimpresiones.php index 465ad7be..06e99718 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestopreimpresiones.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestopreimpresiones.php @@ -110,4 +110,47 @@ class Presupuestopreimpresiones extends \App\Controllers\BaseResourceController } } + public function getRowValues() + { + if ($this->request->isAJAX()) { + $reqData = $this->request->getPost(); + + $tarifa_preimpresion_id = $reqData['tarifa_preimpresion_id'] ?? 0; + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + + $values = $this->model->getPrecioTarifa($tarifa_preimpresion_id); + + $data = [ + 'values' => $values, + $csrfTokenName => $newTokenHash + ]; + + return $this->respond($data); + + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function cargar() + { + if($this->request->isAJAX()) { + $presupuesto_id = $this->request->getGet('presupuesto_id') ?? null; + + $rows = $this->model->getResource($presupuesto_id)->get()->getResultObject(); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'rows' => $rows, + $csrfTokenName => $newTokenHash + ]; + + return $this->respond($data); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } } diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoserviciosextra.php b/ci4/app/Controllers/Presupuestos/Presupuestoserviciosextra.php index 09497d14..0e5bc23b 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestoserviciosextra.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestoserviciosextra.php @@ -110,4 +110,28 @@ class Presupuestoserviciosextra extends \App\Controllers\BaseResourceController } } + public function getRowValues() + { + if ($this->request->isAJAX()) { + $reqData = $this->request->getPost(); + + $tarifa_extra_id = $reqData['tarifa_extra_id'] ?? 0; + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + + $values = $this->model->getPrecioTarifa($tarifa_extra_id); + + $data = [ + 'values' => $values, + $csrfTokenName => $newTokenHash + ]; + + return $this->respond($data); + + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + } diff --git a/ci4/app/Controllers/Presupuestos/Presupuestotiradasalternativas.php b/ci4/app/Controllers/Presupuestos/Presupuestotiradasalternativas.php index 05702a7e..60b5e12f 100644 --- a/ci4/app/Controllers/Presupuestos/Presupuestotiradasalternativas.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestotiradasalternativas.php @@ -82,7 +82,12 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); + $id = $reqData['id'] ?? 0; + $json_data = $reqData['json_tiradas'] ?? null; + $json_data_acabados = $reqData['json_acabados'] ?? null; + $json_data_encuadernacion = $reqData['json_encuadernaciones'] ?? null; + $json_data_manipulado = $reqData['json_manipulado'] ?? null; $cliente_id = $reqData['cliente_id'] ?? 0; $tipo_impresion_id = $reqData['tipo_impresion_id'] ?? 4; @@ -95,7 +100,7 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro foreach ($data as $linea) { // Se obtienen los valores de cada linea para el calculo del precio - $datosPedido = (object)array( + $datosPedido = (object) array( 'paginas' => intval($linea['paginas']) ?? 0, 'tirada' => intval($reqData['tirada']) ?? 0, 'merma' => intval($reqData['merma']) ?? 0, @@ -144,24 +149,24 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro $uso = 'interior'; $tipo = strpos($linea['row_id'], "_bn") !== false ? 'negro' : 'color'; $paginas_negro = isset($linea['numPagColor']) ? intval($datosPedido->paginas) - intval($linea['numPagColor']) : 0; - $paginas_color = $linea['numPagColor'] ?? 0; - $paginas = (object)array( + $paginas_color = $linea['numPagColor'] ?? 0; + $paginas = (object) array( 'negro' => $paginas_negro, 'color' => $paginas_color, ); - $parametrosRotativa = (object)array( + $parametrosRotativa = (object) array( 'a_favor_fibra' => $datosPedido->a_favor_fibra, - 'bnPages' => $paginas->negro, - 'colorPages' => $paginas->color, + 'bnPages' => $paginas->negro, + 'colorPages' => $paginas->color, 'rotativa_gota_negro' => 0, 'rotativa_gota_color' => 0, ); - $parametrosRotativa->rotativa_gota_negro = floatval($linea['gotaNegro']?? 0); - $parametrosRotativa->rotativa_gota_color = floatval($linea['gotaColor']?? 0); - $parametrosRotativa->rotativa_negro = floatval($linea['cobNegro'] ?? 0); - $parametrosRotativa->rotativa_cyan = floatval($linea['cobCyan'] ?? 0); - $parametrosRotativa->rotativa_magenta = floatval($linea['cobMagenta']?? 0); - $parametrosRotativa->rotativa_amarillo = floatval($linea['cobAmarillo']?? 0); + $parametrosRotativa->rotativa_gota_negro = floatval($linea['gotaNegro'] ?? 0); + $parametrosRotativa->rotativa_gota_color = floatval($linea['gotaColor'] ?? 0); + $parametrosRotativa->rotativa_negro = floatval($linea['cobNegro'] ?? 0); + $parametrosRotativa->rotativa_cyan = floatval($linea['cobCyan'] ?? 0); + $parametrosRotativa->rotativa_magenta = floatval($linea['cobMagenta'] ?? 0); + $parametrosRotativa->rotativa_amarillo = floatval($linea['cobAmarillo'] ?? 0); break; case 'lp_cubierta': $uso = 'cubierta'; @@ -194,14 +199,14 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro $datosTipolog = $linea['gotaNegro'] ?? null; if (!is_null($datosTipolog)) { $datosTipolog = []; - $data_temp = (object)array( + $data_temp = (object) array( 'negro' => floatval($linea['cobNegro'] ?? 0), 'cyan' => floatval($linea['cobCyan'] ?? 0), - 'magenta' => floatval($linea['cobMagenta']?? 0), - 'amarillo' => floatval($linea['cobAmarillo']?? 0), + 'magenta' => floatval($linea['cobMagenta'] ?? 0), + 'amarillo' => floatval($linea['cobAmarillo'] ?? 0), 'cg' => floatval($linea['cobCG'] ?? 0), - 'gota_negro' => floatval($linea['gotaNegro']?? 0), - 'gota_color' => floatval($linea['gotaColor']?? 0), + 'gota_negro' => floatval($linea['gotaNegro'] ?? 0), + 'gota_color' => floatval($linea['gotaColor'] ?? 0), ); array_push($datosTipolog, $data_temp); } @@ -213,13 +218,13 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro $datosLinea['datosPedido'] = $datosPedido; $datosLinea['cliente_id'] = $cliente_id; $datosLinea['papel'] = $papel; - if(isset($isColor)) - $datosLinea['isColor'] = $isColor; - if(isset($opciones_papel)) + if (isset($isColor)) + $datosLinea['isColor'] = $isColor; + if (isset($opciones_papel)) $datosLinea['opciones_papel'] = $opciones_papel; - if(isset($parametrosRotativa)) + if (isset($parametrosRotativa)) $datosLinea['parametrosRotativa'] = $parametrosRotativa; - if(isset($paginas)) + if (isset($paginas)) $datosLinea['paginas'] = $paginas; $datosLinea['maquina'] = $maquina; $datosLinea['papel_generico'] = $papel_generico; @@ -257,19 +262,113 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro $linea_coste['total_coste'] += $linea_coste['fields']['precio_tinta']; if (strpos($linea['row_id'], 'lp_rot') === 0) { - $linea_coste['total_coste'] += - $linea_coste['fields']['total_corte']; - } + $linea_coste['total_coste'] += + $linea_coste['fields']['total_corte']; + } } - + $linea_coste['total_margen'] = $linea_coste['fields']['margen_papel_pedido'] + $linea_coste['fields']['margen_impresion_horas'] + $linea_coste['fields']['margen_click_pedido']; - + unset($linea_coste['fields']); array_push($values, $linea_coste); } + + // Calculo de los servicios (presimpresion y extra no dependen de nada) + $servicios = (object) (['coste' => 0.0, 'margen' => 0.0]); + + if ($json_data_acabados) { + $json_data_acabados = json_decode($json_data_acabados, true); + if (count($json_data_acabados) > 0) { + + $acabados = new Presupuestoacabados(); + $POD = (new \App\Models\Configuracion\ConfigVariableModel())->getVariable('POD')->value; + $result = $acabados->getServiciosAcabados($json_data_acabados, $reqData['tirada'], $POD); + if (count($result) > 0) { + foreach ($result as $servicio) { + $coste = round($servicio->total / (1 + $servicio->margen / 100), 2); + $margen = round($servicio->total - $coste, 2); + $servicios->coste += $coste; + $servicios->margen += $margen; + } + } + } + } + + if ($json_data_encuadernacion) { + $json_data_encuadernacion = json_decode($json_data_encuadernacion, true); + if (count($json_data_encuadernacion) > 0) { + + $encuadernacion = new Presupuestoencuadernaciones(); + $POD = (new \App\Models\Configuracion\ConfigVariableModel())->getVariable('POD')->value; + $result = $encuadernacion->getServiciosEncuadernacion($json_data_encuadernacion, $reqData['tirada'], $reqData['paginas'], $reqData['ancho'], $reqData['alto'], $POD); + if (count($result) > 0) { + foreach ($result as $servicio) { + $coste = round($servicio->total / (1 + $servicio->margen / 100), 2); + $margen = round($servicio->total - $coste, 2); + $servicios->coste += $coste; + $servicios->margen += $margen; + } + } + } + } + + if ($json_data_manipulado) { + $json_data_manipulado = json_decode($json_data_manipulado, true); + if (count($json_data_manipulado) > 0) { + $manipulados = new Presupuestomanipulados(); + $POD = (new \App\Models\Configuracion\ConfigVariableModel())->getVariable('POD')->value; + $result = $manipulados->getServiciosManipulado($json_data_manipulado, $reqData['tirada'], $POD); + if (count($result) > 0) { + foreach ($result as $servicio) { + $coste = round($servicio->total / (1 + $servicio->margen / 100), 2); + $margen = round($servicio->total - $coste, 2); + $servicios->coste += $coste; + $servicios->margen += $margen; + } + } + } + } + + $json_envios = $reqData['json_envios'] ?? null; + $coste_envio = 0.0; + $margen_envio = 0.0; + $tirada_base = floatval($reqData['tirada_base']); + $peso_libro = floatval($reqData['peso_libro']); + // el primer envio con la tirada base + $model = model('App\Models\Tarifas\TarifaEnvioModel'); + $envios = $model->getTarifaEnvio(1, 18000, $tirada_base * $peso_libro/1000.0, "cajas"); + $resultado = $this->calcular_envio($envios, $tirada_base * $peso_libro/1000.0); + $coste_envio += $resultado->coste; + $margen_envio += $resultado->margen; + + if ($json_envios) { + $json_envios = json_decode($json_envios, true); + if (count($json_envios) > 0) { + //la primera linea es el envio base + for($i = 1; $i < count($json_envios); $i++) { + + $porcentaje = ($json_envios[$i]['cantidad']) / $tirada_base * 100.0; + $cantidad = floor($reqData['tirada'] * $porcentaje / 100.0); + $peso_envio = $cantidad * $peso_libro / 1000.0; + + $paisId = $json_envios[$i]['pais_id']; + $cp = $json_envios[$i]['cp']; + $tipo_envio = $json_envios[$i]['entregaPieCalle'] == 1 ? 'palets' : 'cajas'; + + $model = model('App\Models\Tarifas\TarifaEnvioModel'); + $envios = $model->getTarifaEnvio($paisId, $cp, $peso_envio, $tipo_envio); + + $resultado = $this->calcular_envio($envios, $peso_envio); + $coste_envio += $resultado->coste; + $margen_envio += $resultado->margen; + } + } + } + + } else { $values = []; } @@ -279,8 +378,36 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro $response[$csrfTokenName] = $newTokenHash; $response['lineas'] = $values; + $response['servicios'] = $servicios; + $response['envios'] = (object) (['coste' => $coste_envio, 'margen' => $margen_envio]); return $this->respond($response); - + + } + + private function calcular_envio($envio, $peso_envio) + { + $coste_envio = 0.0; + $margen_envio = 0.0; + if (count(value: $envio) > 0) { + $envio = $envio[0]; + if ($envio->id != null) { + + if ($peso_envio > $envio->peso_max || floatval($envio->precio_max) == 0) { + $coste_envio += number_format(floatval($envio->precio_min) + ($peso_envio - floatval($envio->peso_min)) * floatval($envio->precio_adicional), 2); + } + // si no se calcula linealmente + else { + $m = (($envio->precio_max - $envio->precio_min) / ($envio->peso_max - $envio->peso_min)); + $b = $envio->precio_max - $m * $envio->peso_max; + $coste_envio = number_format($m * $peso_envio + $b, 2); + + } + + $margen_envio += $coste_envio * $envio->margen / 100.0; + } + } + + return (object) (['coste' => $coste_envio, 'margen' => $margen_envio]); } } diff --git a/ci4/app/Controllers/Tarifas/Acabados/TarifaAcabados.php b/ci4/app/Controllers/Tarifas/Acabados/TarifaAcabados.php index 7c4d4c54..e2553235 100644 --- a/ci4/app/Controllers/Tarifas/Acabados/TarifaAcabados.php +++ b/ci4/app/Controllers/Tarifas/Acabados/TarifaAcabados.php @@ -336,4 +336,25 @@ class TarifaAcabados extends BaseResourceController } return $this->response->setJSON($query->get()->getResultObject()); } + + public function getSelect2() + { + if ($this->request->isAJAX()) { + $query = $this->model->builder()->select( + [ + "id", + "nombre as name" + ] + )->where("deleted_at", null); + if ($this->request->getGet("q")) { + $query->groupStart() + ->orLike("lg_tarifas_acabado.nombre", $this->request->getGet("q")) + ->groupEnd(); + } + + return $this->response->setJSON($query->get()->getResultObject()); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } } diff --git a/ci4/app/Controllers/Tarifas/Tarifaextra.php b/ci4/app/Controllers/Tarifas/Tarifaextra.php index 1b5591a4..28ea2f1b 100755 --- a/ci4/app/Controllers/Tarifas/Tarifaextra.php +++ b/ci4/app/Controllers/Tarifas/Tarifaextra.php @@ -239,4 +239,25 @@ class Tarifaextra extends \App\Controllers\GoBaseController } } + public function getSelect2() + { + if ($this->request->isAJAX()) { + $query = $this->model->builder()->select( + [ + "id", + "nombre as name" + ] + )->where("deleted_at", null) + ->where("mostrar_en_presupuesto", 1); + if ($this->request->getGet("q")) { + $query->groupStart() + ->orLike("tarifa_extra.nombre", $this->request->getGet("q")) + ->groupEnd(); + } + + return $this->response->setJSON($query->get()->getResultObject()); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } } diff --git a/ci4/app/Controllers/Tarifas/Tarifapreimpresion.php b/ci4/app/Controllers/Tarifas/Tarifapreimpresion.php index 5b6ada95..6d26178e 100755 --- a/ci4/app/Controllers/Tarifas/Tarifapreimpresion.php +++ b/ci4/app/Controllers/Tarifas/Tarifapreimpresion.php @@ -242,4 +242,25 @@ class Tarifapreimpresion extends \App\Controllers\GoBaseController } } + public function getSelect2() + { + if ($this->request->isAJAX()) { + $query = $this->model->builder()->select( + [ + "id", + "nombre as name" + ] + )->where("deleted_at", null) + ->where("mostrar_en_presupuesto", 1); + if ($this->request->getGet("q")) { + $query->groupStart() + ->orLike("lg_tarifa_preimpresion.nombre", $this->request->getGet("q")) + ->groupEnd(); + } + + return $this->response->setJSON($query->get()->getResultObject()); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } } diff --git a/ci4/app/Controllers/Tarifas/Tarifasencuadernacion.php b/ci4/app/Controllers/Tarifas/Tarifasencuadernacion.php index 4fea5fe3..11d8b273 100755 --- a/ci4/app/Controllers/Tarifas/Tarifasencuadernacion.php +++ b/ci4/app/Controllers/Tarifas/Tarifasencuadernacion.php @@ -356,4 +356,26 @@ class Tarifasencuadernacion extends \App\Controllers\BaseResourceController } return $dimensiones; } + + public function getSelect2() + { + if ($this->request->isAJAX()) { + $query = $this->model->builder()->select( + [ + "id", + "nombre as name" + ] + )->where("deleted_at", null) + ->where("mostrar_en_presupuesto", 1); + if ($this->request->getGet("q")) { + $query->groupStart() + ->orLike("tarifa_encuadernacion.nombre", $this->request->getGet("q")) + ->groupEnd(); + } + + return $this->response->setJSON($query->get()->getResultObject()); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } } diff --git a/ci4/app/Controllers/Tarifas/Tarifasmanipulado.php b/ci4/app/Controllers/Tarifas/Tarifasmanipulado.php index ce497cd4..a55c900b 100755 --- a/ci4/app/Controllers/Tarifas/Tarifasmanipulado.php +++ b/ci4/app/Controllers/Tarifas/Tarifasmanipulado.php @@ -310,4 +310,26 @@ class Tarifasmanipulado extends \App\Controllers\BaseResourceController } return $this->response->setJSON($query->get()->getResultObject()); } + + public function getSelect2() + { + if ($this->request->isAJAX()) { + $query = $this->model->builder()->select( + [ + "id", + "nombre as name" + ] + )->where("deleted_at", null) + ->where("mostrar_en_presupuesto", 1); + if ($this->request->getGet("q")) { + $query->groupStart() + ->orLike("lg_tarifa_manipulado.nombre", $this->request->getGet("q")) + ->groupEnd(); + } + + return $this->response->setJSON($query->get()->getResultObject()); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } } diff --git a/ci4/app/Entities/Presupuestos/PresupuestoEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoEntity.php index 660beb08..7d736a94 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoEntity.php @@ -63,6 +63,7 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity "comentarios_pdf" => null, "comentarios_tarifa" => null, "comentarios_produccion" => null, + "comentarios_presupuesto" => null, "lomo_cubierta" => null, "lomo_sobrecubierta" => null, "total_presupuesto" => null, @@ -107,6 +108,7 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity 'paginasCuadernillo' => null, 'lomo_redondo' => null, 'cabezada' => null, + 'envio_base' => null, ]; protected $casts = [ "cliente_id" => "int", @@ -116,7 +118,6 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity "tipologia_id" => "?int", "pais_id" => "int", "estado_id" => "int", - "inc_rei" => "?int", "retractilado" => "boolean", "retractilado5" => "boolean", "guardas" => "boolean", diff --git a/ci4/app/Entities/Usuarios/UserEntity.php b/ci4/app/Entities/Usuarios/UserEntity.php index 61f750ce..34206cad 100755 --- a/ci4/app/Entities/Usuarios/UserEntity.php +++ b/ci4/app/Entities/Usuarios/UserEntity.php @@ -13,6 +13,7 @@ class UserEntity extends \CodeIgniter\Entity\Entity "status" => null, "status_message" => null, 'active' => null, + "comments" => null, "last_active" => null, "created_at" => null, "updated_at" => null, diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index b9bcfc34..3404b63a 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -143,6 +143,7 @@ return [ 'libro' => 'Libro', 'totalPapelPedido' => 'Papel pedido', 'lomo' => 'Lomo', + 'lomoRedondo' => 'Lomo redondo', 'peso' => 'Peso', 'click' => 'Click', 'totalClicks' => 'Total clicks', @@ -195,6 +196,7 @@ return [ 'totalLinea' => 'TOTAL LÍNEA', 'verCalculos' => 'Cálculos', 'metrosMinuto' => 'Metros x min.', + 'clicksMinuto' => 'Clicks x min.', 'resolucion' => 'Resolución (dpi)', 'areaPaginas' => 'Área páginas (in)', 'gotasNegro' => 'Nº gotas negro', @@ -313,7 +315,7 @@ return [ 'tiradasAlternativas' => 'Tiradas alternativas', 'tiradasInfoIVA' => 'Los precios mostrados no incluyen IVA', 'tiradaMargen' => 'Margen', - 'tiradaEnvio' => 'Coste Envío', + 'tiradaEnvio' => 'Precio Envío', 'tiradaImpresion' => 'Coste Impresión', 'duplicado' => 'DUPLICADO', @@ -369,6 +371,9 @@ return [ 'paginas' => 'El campo páginas tiene que ser mayor que cero', 'paginasLP' => 'El número de páginas no coincide con el total', 'tiradas' => 'El campo tiradas tiene que ser mayor que cero', + 'seleccionePapel' => 'Seleccione un papel', + 'seleccioneGramaje' => 'Seleccione un gramaje', + 'seleccioneCliente' => 'Seleccione un cliente', 'dimension' => 'La dimensión del libro tiene que ser mayor que 60mm', 'lineaDuplicada' => 'Ya existe ese tipo de linea en el presupuesto', 'errorRotColor' => 'Papeles y gramajes deben ser iguales en color y BN', diff --git a/ci4/app/Language/es/Tarifaacabado.php b/ci4/app/Language/es/Tarifaacabado.php index 3c6622ff..5bdd61e9 100755 --- a/ci4/app/Language/es/Tarifaacabado.php +++ b/ci4/app/Language/es/Tarifaacabado.php @@ -9,6 +9,7 @@ return [ 'id' => 'ID', 'moduleTitle' => 'Tarifas Acabado', 'nombre' => 'Nombre', + 'margen' => 'Margen', 'precioMin' => 'Precio Mínimo', 'importeFijo' => 'Importe Fijo', 'mostrar_en_presupuesto' => 'Mostrar en presupuesto', diff --git a/ci4/app/Models/Clientes/ClienteDireccionesModel.php b/ci4/app/Models/Clientes/ClienteDireccionesModel.php index e60eab05..7f2c96a6 100755 --- a/ci4/app/Models/Clientes/ClienteDireccionesModel.php +++ b/ci4/app/Models/Clientes/ClienteDireccionesModel.php @@ -99,7 +99,7 @@ class ClienteDireccionesModel extends \App\Models\BaseModel ->table($this->table . " t1") ->select( "t1.id AS id, t1.cliente_id AS cliente_id, t2.nombre as cliente_nombre, t1.att AS att, t1.alias AS alias, - t1.email AS email, t1.direccion AS direccion, t1.pais_id AS pais_id, t3.nombre AS pais, + t1.email AS email, t1.direccion AS direccion, t1.pais_id AS pais_id, t3.nombre AS pais, t3.nombre AS pais, t1.municipio AS municipio, t1.provincia AS provincia, t1.cp AS cp, t1.telefono AS telefono" ); diff --git a/ci4/app/Models/Configuracion/MaquinaModel.php b/ci4/app/Models/Configuracion/MaquinaModel.php index c1f5424b..159d5e02 100755 --- a/ci4/app/Models/Configuracion/MaquinaModel.php +++ b/ci4/app/Models/Configuracion/MaquinaModel.php @@ -330,7 +330,7 @@ class MaquinaModel extends \App\Models\BaseModel ->table($this->table . " t1") ->distinct('t1.id') ->select( - "t1.id AS maquina_id, t1.nombre AS maquina, t1.ancho_impresion AS ancho_impresion, + "t1.id AS id, t1.id AS maquina_id, t1.nombre AS maquina, t1.nombre AS nombre, t1.ancho_impresion AS ancho_impresion, t1.alto_impresion AS alto_impresion, t1.ancho AS ancho, t1.alto AS alto, t1.is_rotativa AS is_rotativa, t1.is_inkjet AS is_inkjet, t1.alto_click AS alto_click, t1.velocidad AS velocidad, t1.precio_tinta_negro AS precio_tinta_negro, t1.precio_tinta_color AS precio_tinta_color, t1.precio_tinta_cg AS precio_tinta_cg, @@ -361,7 +361,7 @@ class MaquinaModel extends \App\Models\BaseModel $builder->where("t2.uso", $uso_tarifa); } - return $builder->orderBy("t1.id", "asc")->get()->getResultObject(); + return $builder; } diff --git a/ci4/app/Models/Configuracion/PapelGenericoModel.php b/ci4/app/Models/Configuracion/PapelGenericoModel.php index 4f2d8cf9..739ccf6d 100755 --- a/ci4/app/Models/Configuracion/PapelGenericoModel.php +++ b/ci4/app/Models/Configuracion/PapelGenericoModel.php @@ -129,141 +129,185 @@ class PapelGenericoModel extends \App\Models\BaseModel return empty($search) ? $builder : $builder - ->groupStart() - ->like("t1.id", $search) - ->orLike("t1.nombre", $search) - ->orLike("t1.code", $search) - ->orLike("t1.code_ot", $search) - ->orLike("t1.id", $search) - ->orLike("t1.nombre", $search) - ->orLike("t1.code", $search) - ->orLike("t1.code_ot", $search) - ->groupEnd(); + ->groupStart() + ->like("t1.id", $search) + ->orLike("t1.nombre", $search) + ->orLike("t1.code", $search) + ->orLike("t1.code_ot", $search) + ->orLike("t1.id", $search) + ->orLike("t1.nombre", $search) + ->orLike("t1.code", $search) + ->orLike("t1.code_ot", $search) + ->groupEnd(); } - public function getPapelForComparador($tipo, $is_cubierta = false, $is_sobrecubierta = false, $rotativa = false, $is_guardas = false, $mostrar_cliente = null) - { + public function getPapelForComparador( + $tipo, + $is_cubierta = false, + $is_sobrecubierta = false, + $rotativa = false, + $is_guardas = false, + $tapa_dura = false, + $POD = false + ) { /* 1.-> Tipo impresion 2.-> Maquina 3.-> Papeles impresion asociados a esa maquina 4.-> papeles genericos que aparecen en esos papeles impresion */ + + if ($POD == true && ($tipo == 'color' || $tipo == 'negro')) { + if ($tipo == 'color') + $tipo = 'colorhq'; + else if ($tipo == 'negro') + $tipo = 'negrohq'; + } + $builder = $this->db ->table($this->table . " t1") ->select( - "t1.id as id, t1.nombre AS nombre" + "t1.id as id, t1.nombre AS nombre", // for debug, t2.nombre AS nombre_papel_impresion, t4.nombre AS maquina_nombre, t5.uso AS tarifa_uso, t5.tipo AS tarifa_tipo" ) - ->distinct('t1.id') - ->join("lg_papel_impresion t2", "t2.papel_generico_id = t1.id", "left") - ->join("lg_maquina_papel_impresion t3", "t3.papel_impresion_id = t2.id", "left") - ->join("lg_maquinas t4", "t3.maquina_id = t4.id", "left") - ->join("lg_maquinas_tarifas_impresion t5", "t5.maquina_id = t4.id", "left") + ->join("lg_papel_impresion t2", "t2.papel_generico_id = t1.id", "inner") + ->join("lg_maquina_papel_impresion t3", "t3.papel_impresion_id = t2.id", "inner") + ->join("lg_maquinas t4", "t3.maquina_id = t4.id", "inner") + ->join("lg_maquinas_tarifas_impresion t5", "t5.maquina_id = t4.id", "inner") ->where("t1.is_deleted", 0) + ->where("t1.show_in_client", 1) ->where("t2.is_deleted", 0) ->where("t2.isActivo", 1) ->where("t3.active", 1) ->where("t4.is_deleted", 0) ->where("t4.tipo", "impresion") ->where("t5.is_deleted", 0) - ->where("t5.tipo", $tipo); + ->where("t5.tipo", $tipo) + ->distinct('t1.id'); + + // Validación adicional para asegurar que t1.id esté presente en las combinaciones con t3.active = 1 + $builder->whereIn("t1.id", function ($subQuery) { + $subQuery->select("t1_inner.id") + ->from("lg_papel_generico t1_inner") + ->join("lg_papel_impresion t2_inner", "t2_inner.papel_generico_id = t1_inner.id", "inner") + ->join("lg_maquina_papel_impresion t3_inner", "t3_inner.papel_impresion_id = t2_inner.id", "inner") + ->where("t3_inner.active", 1); + }); if ($is_cubierta == true) { - $builder->where("t2.cubierta", 1); $builder->where("t5.uso", 'cubierta'); - } - - if ($is_sobrecubierta == true) { + if ($tapa_dura == true) { + $builder->where("t2.use_for_tapa_dura", 1); + } + } else if ($is_sobrecubierta == true) { $builder->where("t2.sobrecubierta", 1); $builder->where("t5.uso", 'sobrecubierta'); - } - - if ($is_cubierta == false && $is_sobrecubierta == false) { - $builder->where("t5.uso", 'interior'); - } - - if ($is_guardas == true) { + } else if ($is_guardas == true) { $builder->where("t2.guardas", 1); + } else { + $builder->where("t2.interior", 1); + $builder->where("t5.uso", 'interior'); + if ($tipo == 'negro' || $tipo == 'negrohq') + $builder->where("t2.bn", 1); + else if ($tipo == 'color' || $tipo == 'colorhq') + $builder->where("t2.color", 1); } - if ($rotativa == true) { + if ($tipo == 'colorhq' || $tipo == 'negrohq') { + $builder->where("t2.rotativa", 0); + } else if ($rotativa && $POD == false) { $builder->where("t2.rotativa", 1); + } else if ($POD) { + $builder->where("t2.rotativa", 0); } - if ($mostrar_cliente != null) { - $builder->where("t1.show_in_client", $mostrar_cliente); - } - - $data = $builder->orderBy("t1.nombre", "asc")->get()->getResultObject(); - //var_dump($this->db->getLastQuery()); - return $data; + //$query = $this->db->getLastQuery(); + return $builder; } - public function getGramajeComparador(string $papel_generico_nombre = "", $uso = "", $ejemplares = 0) - { - if ($uso == 'cubierta' || $uso == 'sobrecubierta') - $tipo = 'colorhq'; - else - $tipo = $uso; // color y colorhq valen para los dos - if ($uso == 'bn') - $tipo = "negro"; - if ($uso == 'bnhq') - $tipo = "negrohq"; + public function getGramajeForComparador( + $tipo, + $selected_papel_id, + $is_cubierta = false, + $is_sobrecubierta = false, + $rotativa = false, + $is_guardas = false, + $tapa_dura = false, + $POD = false + ) { + if ($POD == true && ($tipo == 'color' || $tipo == 'negro')) { + if ($tipo == 'color') + $tipo = 'colorhq'; + else if ($tipo == 'negro') + $tipo = 'negrohq'; + } + $builder = $this->db ->table($this->table . " t1") ->select( - "t2.gramaje AS text" + "t2.gramaje as id, t2.gramaje as nombre", + // for debug, t2.nombre AS nombre_papel_impresion, t4.nombre AS maquina_nombre, t5.uso AS tarifa_uso, t5.tipo AS tarifa_tipo" ) - ->join("lg_papel_impresion t2", "t2.papel_generico_id = t1.id", "left") - ->join("lg_maquina_papel_impresion t3", "t3.papel_impresion_id = t2.id", "left") - ->join("lg_maquinas t4", "t3.maquina_id = t4.id", "left") - ->join("lg_maquinas_tarifas_impresion t5", "t5.maquina_id = t4.id", "left") + ->join("lg_papel_impresion t2", "t2.papel_generico_id = t1.id", "inner") + ->join("lg_maquina_papel_impresion t3", "t3.papel_impresion_id = t2.id", "inner") + ->join("lg_maquinas t4", "t3.maquina_id = t4.id", "inner") + ->join("lg_maquinas_tarifas_impresion t5", "t5.maquina_id = t4.id", "inner") + ->where("t1.id", $selected_papel_id) ->where("t1.is_deleted", 0) + ->where("t1.show_in_client", 1) ->where("t2.is_deleted", 0) ->where("t2.isActivo", 1) ->where("t3.active", 1) ->where("t4.is_deleted", 0) ->where("t4.tipo", "impresion") + ->where("t5.is_deleted", 0) ->where("t5.tipo", $tipo) - ->where("t1.nombre", $papel_generico_nombre); + ->distinct('t2.gramaje'); - $uso_tarifa = 'interior'; + // Validación adicional para asegurar que t1.id esté presente en las combinaciones con t3.active = 1 + $builder->whereIn("t1.id", function ($subQuery) { + $subQuery->select("t1_inner.id") + ->from("lg_papel_generico t1_inner") + ->join("lg_papel_impresion t2_inner", "t2_inner.papel_generico_id = t1_inner.id", "inner") + ->join("lg_maquina_papel_impresion t3_inner", "t3_inner.papel_impresion_id = t2_inner.id", "inner") + ->where("t3_inner.active", 1); + }); - if ($uso == 'bn' || $uso == 'bnhq') - $builder->where("t2.bn", 1); - else if ($uso == 'color' || $uso == 'colorhq') - $builder->where("t2.color", 1); - else if ($uso == 'cubierta') { - $uso_tarifa = 'cubierta'; + if ($is_cubierta == true) { $builder->where("t2.cubierta", 1); - } else if ($uso == 'sobrecubierta') { - $uso_tarifa = 'sobrecubierta'; + $builder->where("t5.uso", 'cubierta'); + if ($tapa_dura == true) { + $builder->where("t2.use_for_tapa_dura", 1); + } + } else if ($is_sobrecubierta == true) { $builder->where("t2.sobrecubierta", 1); + $builder->where("t5.uso", 'sobrecubierta'); + } else if ($is_guardas == true) { + $builder->where("t2.guardas", 1); + } else { + $builder->where("t2.interior", 1); + $builder->where("t5.uso", 'interior'); + if ($tipo == 'negro' || $tipo == 'negrohq') + $builder->where("t2.bn", 1); + else if ($tipo == 'color' || $tipo == 'colorhq') + $builder->where("t2.color", 1); } - $builder->where("t5.uso", $uso_tarifa); - - $builder->where("t4.min <=", $ejemplares); - $builder->where("t4.max >=", $ejemplares); - - $values = $builder->orderBy("t2.gramaje", "asc")->get()->getResultObject(); - $id = 1; - foreach ($values as $value) { - $value->id = $id; - $id++; + if ($tipo == 'colorhq' || $tipo == 'negrohq') { + $builder->where("t2.rotativa", 0); + } else if ($rotativa && $POD == false) { + $builder->where("t2.rotativa", 1); + } else if ($POD) { + $builder->where("t2.rotativa", 0); } - $values_array = array_map(function ($value) { - return $value->text; - }, $values); - $unique_values = array_unique($values_array); - return array_values(array_intersect_key($values, $unique_values)); + //$query = $this->db->getLastQuery(); + return $builder; } //tipo: negro, negrohq, color, colorhq @@ -323,7 +367,6 @@ class PapelGenericoModel extends \App\Models\BaseModel }, $values); $unique_values = array_unique($values_array); return array_values(array_intersect_key($values, $unique_values)); - } @@ -337,9 +380,9 @@ class PapelGenericoModel extends \App\Models\BaseModel */ if ($POD == true && ($tipo == 'color' || $tipo == 'negro')) { - if($tipo == 'color') + if ($tipo == 'color') $tipo = 'colorhq'; - else if($tipo == 'negro') + else if ($tipo == 'negro') $tipo = 'negrohq'; } @@ -403,7 +446,7 @@ class PapelGenericoModel extends \App\Models\BaseModel if ($is_cubierta == true) { $builder->where("t2.cubierta", 1); $builder->where("t5.uso", 'cubierta'); - if($tapa_dura == true){ + if ($tapa_dura == true) { $builder->where("t2.use_for_tapa_dura", 1); } } else { @@ -417,19 +460,16 @@ class PapelGenericoModel extends \App\Models\BaseModel if ($papel_especial == true) { $builder->where("t1.show_in_client_special", 1); - } - else{ + } else { $builder->where("t1.show_in_client_special", 0); } if ($tipo == 'colorhq' || $tipo == 'negrohq') { $builder->where("t2.rotativa", 0); - } - else{ - if($POD == false){ + } else { + if ($POD == false) { $builder->where("t2.rotativa", 1); - } - else if ($POD == true){ + } else if ($POD == true) { $builder->where("t2.rotativa", 0); } } diff --git a/ci4/app/Models/Configuracion/PapelImpresionModel.php b/ci4/app/Models/Configuracion/PapelImpresionModel.php index de9473b9..3625daa7 100755 --- a/ci4/app/Models/Configuracion/PapelImpresionModel.php +++ b/ci4/app/Models/Configuracion/PapelImpresionModel.php @@ -279,8 +279,15 @@ class PapelImpresionModel extends \App\Models\BaseModel //tipo: negro, negrohq, color, colorhq //uso: interior, rotativa, cubierta, sobrecubierta - public function getPapelesImpresionForMenu($papel_generico = null, $gramaje = null, $tipo = null, $uso = "") - { + public function getPapelesImpresionForMenu( + $papel_generico = null, + $gramaje = null, + $tipo = null, + $uso = "", + $tapaDura = false, + $forInkjet = false + ) { + $builder = $this->db ->table($this->table . " t1") ->distinct("t1.id") @@ -289,7 +296,7 @@ class PapelImpresionModel extends \App\Models\BaseModel ->join("lg_maquinas t4", "t3.maquina_id = t4.id", "left") ->join("lg_maquinas_tarifas_impresion t5", "t4.id = t5.maquina_id", "left") ->select( - "t1.id AS id, t1.nombre AS text" + "t1.id AS id, t1.nombre AS nombre" ); $builder->where("t1.is_deleted", 0); @@ -304,24 +311,31 @@ class PapelImpresionModel extends \App\Models\BaseModel $builder->where("t2.id", $papel_generico); $builder->where("t1.gramaje", $gramaje); - if ($uso == 'cubierta') + if ($uso == 'cubierta') { + if ($tapaDura) + $builder->where("t1.use_for_tapa_dura", 1); $builder->where("t1.cubierta", 1); - else if ($uso == 'sobrecubierta') + } else if ($uso == 'sobrecubierta') $builder->where("t1.sobrecubierta", 1); else if ($uso == 'guardas') $builder->where("t1.guardas", 1); else { + $builder->where("t1.interior", 1); if ($tipo == 'negro' || $tipo == 'negrohq') $builder->where("t1.bn", 1); else if ($tipo == 'color' || $tipo == 'colorhq') $builder->where("t1.color", 1); } - if ($uso == 'rotativa') + if ($uso == 'rotativa') { $builder->where("t1.rotativa", 1); - else + $builder->where("t4.is_rotativa", 1); + } else $builder->where("t1.rotativa", 0); - return $builder->orderBy("t1.id", "asc")->get()->getResultObject(); + if ($forInkjet) + $builder->where("t1.inkjet", 1); + + return $builder; } public function getNombre($id) @@ -355,5 +369,5 @@ class PapelImpresionModel extends \App\Models\BaseModel return ""; } - + } diff --git a/ci4/app/Models/Presupuestos/PresupuestoAcabadosModel.php b/ci4/app/Models/Presupuestos/PresupuestoAcabadosModel.php index c0dcf401..410f3117 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoAcabadosModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoAcabadosModel.php @@ -72,25 +72,37 @@ class PresupuestoAcabadosModel extends \App\Models\BaseModel $tarifa_value = $modelTarifa->getTarifaPresupuestoAcabado($tarifa_acabado_id, $tirada, $proveedor_id); if (count($tarifa_value)>0) { - $result_data = $this->calcularTarifa($tarifa_value[0], $tirada, $POD<$tirada?false:true); - $ret_array[] = (object)[ - 'tarifa_id'=> $tarifa_value[0]->tarifa_acabado_id, - 'tarifa_nombre'=> $tarifa_value[0]->tarifa_acabado_nombre, - 'precio_unidad'=> $result_data[0], - 'total'=> $result_data[1], - 'margen'=> $result_data[2], - 'proveedor' => $tarifa_value[0]->proveedor_nombre, - 'proveedor_id' => $tarifa_value[0]->proveedor_id, - ]; + $ret_array = []; + foreach ($tarifa_value as $tarifa) { + $result_data = $this->calcularTarifa($tarifa, $tirada, $POD<$tirada?false:true); + array_push($ret_array, (object)[ + 'tarifa_id'=> $tarifa->tarifa_acabado_id, + 'tarifa_nombre'=> $tarifa->tarifa_acabado_nombre, + 'nombre'=> $tarifa->tarifa_acabado_nombre, + 'precio_unidad'=> round($result_data[0], 2), + 'total'=> round($result_data[1], 2), + 'precio_total'=> round($result_data[1], 2), + 'margen'=> $result_data[2], + 'proveedor' => $tarifa->proveedor_nombre, + 'proveedor_id' => $tarifa->proveedor_id, + ]); + } + usort($ret_array, function($a, $b) { + return $a->precio_total <=> $b->precio_total; + }); return $ret_array; } else{ $ret_array[] = (object)[ 'tarifa_id'=> $tarifa_acabado_id, 'tarifa_nombre'=> $modelTarifa->getNombreTarifaAcabado($tarifa_acabado_id)[0]->nombre, + 'nombre'=> $modelTarifa->getNombreTarifaAcabado($tarifa_acabado_id)[0]->nombre, 'precio_unidad' => 0, + 'total' => 0, + 'precio_total' => 0, 'margen' => 0, - 'total'=> 0, + 'proveedor' => '', + 'proveedor_id' => 0, ]; return $ret_array; } @@ -194,7 +206,7 @@ class PresupuestoAcabadosModel extends \App\Models\BaseModel $builder = $this->db ->table($this->table . " t1") ->select( - "t1.id AS id, t1.tarifa_acabado_id AS tarifa_acabado_id, t1.precio_unidad AS precio_unidad, + "t1.id AS id, t1.tarifa_acabado_id AS tarifa_acabado_id, t1.tarifa_acabado_id AS tarifa_id, t1.precio_unidad AS precio_unidad, t1.precio_total AS precio_total, t1.margen AS margen, t2.nombre AS nombre, t1.cubierta AS cubierta, t1.sobrecubierta AS sobrecubierta, t1.proveedor_id AS proveedor_id, t3.nombre AS proveedor," ); diff --git a/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php b/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php index 7ce6c1c4..b4360ea1 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php @@ -84,9 +84,11 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel $datos = [ 'tarifa_id'=> $tarifa['tarifa_id'], 'tarifa_nombre'=> $tarifa_proveedor->tarifa_enc_nombre, + 'nombre'=> $tarifa_proveedor->tarifa_enc_nombre, 'precio_unidad'=> $result_data[0], 'tiempo' => $tiempo, 'total'=> $result_data[1], + 'precio_total'=> $result_data[1], 'margen' => $result_data[2], 'proveedor' => $tarifa_proveedor->proveedor_nombre, 'proveedor_id' => $tarifa_proveedor->proveedor_id, @@ -117,10 +119,12 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel (object)[ 'tarifa_id'=> $tarifa['tarifa_id'], 'tarifa_nombre'=> $tarifa['tarifa_nombre'], + 'nombre'=> $tarifa['tarifa_nombre'], 'proveedor' => lang('Presupuestos.no_disponible'), 'precio_unidad'=> 0, 'tiempo' => null, 'total'=> 0, + 'precio_total'=> 0, 'margen' => 0, ]); } @@ -135,9 +139,11 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel array_push($result_array, (object)[ 'tarifa_id'=> $tarifa_proveedor->tarifa_enc_id, 'tarifa_nombre'=> $tarifa_proveedor->tarifa_enc_nombre, + 'nombre'=> $tarifa_proveedor->tarifa_enc_nombre, 'precio_unidad'=> $result_data[0], 'tiempo' => null, 'total'=> $result_data[1], + 'precio_total'=> $result_data[1], 'margen'=> $result_data[2], 'proveedor' => $tarifa_proveedor->proveedor_nombre, 'proveedor_id' => $tarifa_proveedor->proveedor_id, @@ -159,10 +165,12 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel (object)[ 'tarifa_id'=> $tarifa['tarifa_id'] , 'tarifa_nombre'=> $tarifa['tarifa_nombre'], + 'nombre'=> $tarifa['tarifa_nombre'], 'proveedor' => lang('Presupuestos.no_disponible'), 'precio_unidad'=> 0, 'tiempo' => null, 'total'=> 0, + 'precio_total'=> 0, 'margen' => 0, ]); } @@ -173,17 +181,17 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel } - public function getProveedoresForSelector($tarifa_encuadernacion_id, $paginas, $tirada, $ancho, $alto){ + public function getProveedoresForSelector($tarifa_encuadernacion_id, $paginas, $tirada, $ancho, $alto, $paginasCuadernillo = 32){ $proveedores = []; $modelTarifa = model('App\Models\Tarifas\TarifaEncuadernacionModel'); - $tiempo = $this->calcularTiempo(16, $paginas, $tirada); // ID fija. Cambiar cuando se metan maquinas de corte. Velocidad en minutos - if($modelTarifa->isTarifaPorHoras($tarifa_encuadernacion_id)){ + $tiempo = $this->calcularTiempoCosido(16, $paginas, $tirada, $paginasCuadernillo); // ID fija. Cambiar cuando se metan maquinas de corte. Velocidad en minutos $tarifa_value = $modelTarifa->getTarifaPresupuestoEncuadernacionHoras($tarifa_encuadernacion_id, $tiempo, $tirada); } else{ + $tiempo = $this->calcularTiempo(16, $paginas, $tirada); // ID fija. Cambiar cuando se metan maquinas de corte. Velocidad en minutos $tarifa_value = $modelTarifa->getTarifaPresupuestoEncuadernacion($tarifa_encuadernacion_id, $paginas, $tirada, $ancho, $alto); } if (count($tarifa_value)>0) { @@ -215,9 +223,11 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel array_push($ret_array, (object)[ 'tarifa_id'=> $tarifa->tarifa_enc_id, 'tarifa_nombre'=> $tarifa->tarifa_enc_nombre, + 'nombre'=> $tarifa->tarifa_enc_nombre, 'precio_unidad'=> $result_data[0], 'tiempo' => null, 'total'=> $result_data[1], + 'precio_total'=> $result_data[1], 'margen'=> $result_data[2], 'proveedor' => $tarifa->proveedor_nombre, 'proveedor_id' => $tarifa->proveedor_id, @@ -237,10 +247,12 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel $ret_array[] = (object)[ 'tarifa_id'=> $tarifa_encuadernacion_id, 'tarifa_nombre'=> $modelTarifa->getNombreTarifaEncuadernacion($tarifa_encuadernacion_id)[0]->nombre, + 'nombre'=> $modelTarifa->getNombreTarifaEncuadernacion($tarifa_encuadernacion_id)[0]->nombre, 'proveedor' => lang('Presupuestos.no_disponible'), 'precio_unidad'=> 0, 'tiempo' => null, 'total'=> 0, + 'precio_total'=> 0, 'margen'=> 0, ]; return $ret_array; @@ -286,9 +298,11 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel (object)[ 'tarifa_id'=> $tarifa_proveedor->tarifa_enc_id, 'tarifa_nombre'=> $tarifa_proveedor->tarifa_enc_nombre, + 'nombre'=> $tarifa_proveedor->tarifa_enc_nombre, 'precio_unidad'=> $result_data[0], 'tiempo' => $tiempo, 'paginas_por_cuadernillo' => $paginas_cuadernillo, + 'precio_total'=> $result_data[1], 'total'=> $result_data[1], 'margen' => $result_data[2], 'proveedor' => $tarifa_proveedor->proveedor_nombre, @@ -310,11 +324,13 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel $ret_array[] = (object)[ 'tarifa_id'=> $tarifa_encuadernacion_id, 'tarifa_nombre'=> $modelTarifa->getNombreTarifaEncuadernacion($tarifa_encuadernacion_id)[0]->nombre, + 'nombre'=> $modelTarifa->getNombreTarifaEncuadernacion($tarifa_encuadernacion_id)[0]->nombre, 'proveedor' => lang('Presupuestos.no_disponible'), 'precio_unidad'=> 0, 'tiempo' => null, 'paginas_por_cuadernillo' => null, 'total'=> 0, + 'precio_total'=> 0, 'margen' => 0, ]; return $ret_array; diff --git a/ci4/app/Models/Presupuestos/PresupuestoLineaModel.php b/ci4/app/Models/Presupuestos/PresupuestoLineaModel.php index 6a34a602..47e6ec82 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoLineaModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoLineaModel.php @@ -330,8 +330,9 @@ class PresupuestoLineaModel extends \App\Models\BaseModel $builder = $this->db ->table($this->table . " t1") ->select( - "*" + "*, t2.nombre AS papel_generico" ) + ->join("lg_papel_generico t2", "t1.papel_id = t2.id", "left") ->where("t1.presupuesto_id", $presupuesto_id); return $builder->orderBy("t1.id", "asc")->get()->getResultObject(); diff --git a/ci4/app/Models/Presupuestos/PresupuestoManipuladosModel.php b/ci4/app/Models/Presupuestos/PresupuestoManipuladosModel.php index 8612e8a4..72211db4 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoManipuladosModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoManipuladosModel.php @@ -50,28 +50,37 @@ class PresupuestoManipuladosModel extends \App\Models\BaseModel $modelTarifa = model('App\Models\Tarifas\TarifaManipuladoModel'); $tarifa_value = $modelTarifa->getTarifaPresupuestoManipulado($tarifa_manipulado_id, $tirada); if (count($tarifa_value)>0) { + $ret_array = []; + foreach($tarifa_value as $tarifa){ + $result_data = $this->calcularTarifa($tarifa, $tirada, $POD<$tirada?false:true); + array_push($ret_array, (object)[ + 'tarifa_id'=> $tarifa->tarifa_manipulado_id, + 'tarifa_nombre'=> $tarifa->tarifa_manipulado_nombre, + 'nombre'=> $tarifa->tarifa_manipulado_nombre, + 'precio_unidad'=> $result_data[0], + 'total'=> $result_data[1], + 'precio_total'=> $result_data[1], + 'margen' => $result_data[2], + ]); + } + + usort($ret_array, function($a, $b) { + return $a->precio_total <=> $b->precio_total; + }); - $result_data = $this->calcularTarifa($tarifa_value[0], $tirada, $POD<$tirada?false:true); - $ret_array[] = (object)[ - 'tarifa_id'=> $tarifa_value[0]->tarifa_manipulado_id, - 'tarifa_nombre'=> $tarifa_value[0]->tarifa_manipulado_nombre, - 'precio_unidad'=> $result_data[0], - 'total'=> $result_data[1], - 'margen' => $result_data[2], - ]; return $ret_array; } else{ $ret_array[] = (object)[ 'tarifa_id'=> $tarifa_manipulado_id, 'tarifa_nombre'=> $modelTarifa->getNombreTarifaManipulado($tarifa_manipulado_id)[0]->nombre, + 'nombre'=> $modelTarifa->getNombreTarifaManipulado($tarifa_manipulado_id)[0]->nombre, 'precio_unidad' => 0, 'total'=> 0, 'margen' => 0, ]; return $ret_array; } - return []; } private function calcularTarifa($tarifa, $tirada, $is_POD=false){ @@ -170,8 +179,10 @@ class PresupuestoManipuladosModel extends \App\Models\BaseModel array_push($tarifas, (object)[ 'tarifa_id'=> $tarifa_value[0]->tarifa_manipulado_id, 'tarifa_nombre'=> $tarifa_value[0]->tarifa_manipulado_nombre, + 'nombre'=> $tarifa_value[0]->tarifa_manipulado_nombre, 'precio_unidad'=> $result_data[0], 'total'=> $result_data[1], + 'precio_total'=> $result_data[1], 'margen'=> $result_data[2], ]); } @@ -180,8 +191,10 @@ class PresupuestoManipuladosModel extends \App\Models\BaseModel (object)[ 'tarifa_id'=> $tarifa['tarifa_id'] , 'tarifa_nombre'=> $tarifa['tarifa_nombre'], + 'nombre'=> $tarifa['tarifa_nombre'], 'precio_unidad' => 0, 'total'=> 0, + 'precio_total'=> 0, 'margen' => 0, ]); } diff --git a/ci4/app/Models/Presupuestos/PresupuestoModel.php b/ci4/app/Models/Presupuestos/PresupuestoModel.php index 135efbc2..4a80cd50 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoModel.php @@ -85,6 +85,7 @@ class PresupuestoModel extends \App\Models\BaseModel "comentarios_safekat", "comentarios_pdf", "comentarios_tarifa", + "comentarios_presupuesto", "comentarios_produccion", "lomo_cubierta", "lomo_sobrecubierta", @@ -132,6 +133,7 @@ class PresupuestoModel extends \App\Models\BaseModel 'paginasCuadernillo', 'lomo_redondo', 'cabezada', + 'envio_base', ]; protected $returnType = "App\Entities\Presupuestos\PresupuestoEntity"; @@ -412,6 +414,7 @@ class PresupuestoModel extends \App\Models\BaseModel 'ferro_digital' => $data['ferro_digital'] ? 1 : 0, 'marcapaginas' => $data['marcapaginas'] ? 1 : 0, 'prototipo' => $data['prototipo'] ? 1 : 0, + 'envio_base' => $data['envio_base'], 'papel_formato_id' => is_null($papel_formato_id) ? 0 : $papel_formato_id->id, 'papel_formato_personalizado' => !$papel_formato_id ? 1 : 0, 'papel_formato_ancho' => !$papel_formato_id ? $data['tamanio']['ancho'] : null, @@ -557,7 +560,7 @@ class PresupuestoModel extends \App\Models\BaseModel // -- SOBRECUBIERTA -- if ($data['sobrecubierta']) { $values['sobrecubierta'] = array( - 'papel_id' => intval($data['sobrecubierta']['papel']), + 'papel_id' => intval($data['sobrecubierta']['papel']['id']), 'gramaje' => intval($data['sobrecubierta']['gramaje']), 'imprimir' => 1, ); diff --git a/ci4/app/Models/Presupuestos/PresupuestoPreimpresionesModel.php b/ci4/app/Models/Presupuestos/PresupuestoPreimpresionesModel.php index a2828855..f59520ea 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoPreimpresionesModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoPreimpresionesModel.php @@ -51,19 +51,30 @@ class PresupuestoPreimpresionesModel extends \App\Models\BaseModel $tarifa_value = $modelTarifa->getTarifaPresupuestoPreimpresion($tarifa_preimpresion_id); if (count($tarifa_value)>0) { - $result_data = $this->calcularTarifa($tarifa_value[0]); - $ret_array[] = (object)[ - 'tarifa_id'=> $tarifa_value[0]->tarifa_preimpresion_id, - 'tarifa_nombre'=> $tarifa_value[0]->tarifa_preimpresion_nombre, - 'precio'=> $result_data[0], - 'margen'=> $result_data[1], - ]; + + $ret_array = []; + foreach ($tarifa_value as $tarifa) { + $result_data = $this->calcularTarifa($tarifa); + array_push($ret_array, (object)[ + 'tarifa_id'=> $tarifa->tarifa_preimpresion_id, + 'tarifa_nombre'=> $tarifa->tarifa_preimpresion_nombre, + 'nombre'=> $tarifa->tarifa_preimpresion_nombre, + 'precio'=> $result_data[0], + 'margen'=> $result_data[1], + ]); + } + + usort($ret_array, function($a, $b) { + return $a->precio <=> $b->precio; + }); + return $ret_array; } else{ $ret_array[] = (object)[ 'tarifa_id'=> $tarifa_preimpresion_id, 'tarifa_nombre'=> $modelTarifa->getNombreTarifaPreimpresion($tarifa_preimpresion_id)[0]->nombre, + 'nombre'=> $modelTarifa->getNombreTarifaPreimpresion($tarifa_preimpresion_id)[0]->nombre, 'precio' => 0, 'margen' => 0, ]; @@ -146,7 +157,7 @@ class PresupuestoPreimpresionesModel extends \App\Models\BaseModel $builder = $this->db ->table($this->table . " t1") ->select( - "t1.id AS id, t1.tarifa_preimpresion_id AS tarifa_preimpresion_id, t1.precio AS precio, t1.margen AS margen, t2.nombre AS nombre" + "t1.id AS id, t1.tarifa_preimpresion_id AS tarifa_preimpresion_id, t1.tarifa_preimpresion_id AS tarifa_id, t1.precio AS precio, t1.margen AS margen, t2.nombre AS nombre" ); $builder->where('t1.presupuesto_id', $presupuesto_id); diff --git a/ci4/app/Models/Presupuestos/PresupuestoServiciosExtraModel.php b/ci4/app/Models/Presupuestos/PresupuestoServiciosExtraModel.php index 75e9b1ef..f7141ebb 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoServiciosExtraModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoServiciosExtraModel.php @@ -50,19 +50,27 @@ class PresupuestoServiciosExtraModel extends \App\Models\BaseModel $tarifa_value = $modelTarifa->getTarifaPresupuestoExtra($tarifa_extra_id); if (count($tarifa_value)>0) { - $result_data = $this->calcularTarifa($tarifa_value[0]); - $ret_array[] = (object)[ - 'tarifa_id'=> $tarifa_value[0]->tarifa_extra_id, - 'tarifa_nombre'=> $tarifa_value[0]->tarifa_extra_nombre, - 'precio'=> $result_data[0], - 'margen'=> $result_data[1], - ]; + $ret_array = []; + foreach($tarifa_value as $tarifa){ + $result_data = $this->calcularTarifa($tarifa); + array_push($ret_array, (object)[ + 'tarifa_id'=> $tarifa->tarifa_extra_id, + 'tarifa_nombre'=> $tarifa->tarifa_extra_nombre, + 'nombre'=> $tarifa->tarifa_extra_nombre, + 'precio'=> $result_data[0], + 'margen'=> $result_data[1], + ]); + } + usort($ret_array, function($a, $b) { + return $a->precio <=> $b->precio; + }); return $ret_array; } else{ $ret_array[] = (object)[ 'tarifa_id'=> $tarifa_extra_id, 'tarifa_nombre'=> $modelTarifa->getNombreTarifaExtra($tarifa_extra_id)[0]->nombre, + 'tarifa'=> $modelTarifa->getNombreTarifaExtra($tarifa_extra_id)[0]->nombre, 'precio' => 0, 'margen' => 0, ]; diff --git a/ci4/app/Models/Tarifas/TarifaEnvioModel.php b/ci4/app/Models/Tarifas/TarifaEnvioModel.php index c5348c6e..c73aff07 100755 --- a/ci4/app/Models/Tarifas/TarifaEnvioModel.php +++ b/ci4/app/Models/Tarifas/TarifaEnvioModel.php @@ -98,11 +98,13 @@ class TarifaEnvioModel extends \App\Models\BaseModel // Si el pais es españa se tienen que tener en cuenta los postales // Se busca primero la tarifa a la que corresponde $builder = $this->db->table($this->table . " t1") - ->select("t1.id AS tarifa_envio_id, t2.importe_fijo as importe_fijo") + ->select("t1.id AS tarifa_envio_id, t2.importe_fijo as importe_fijo, t3.nombre as pais") ->join("tarifas_envios_zonas t2", "t1.id = t2.tarifa_envio_id") + ->join("lg_paises t3", "t1.pais_id = t3.id") ->where("t1.pais_id", $paisId) ->where("t1.is_deleted", 0) ->where("t2.is_deleted", 0); + if ($paisId == 1) { // España $builder->where("CAST(t2.cp_inicial AS UNSIGNED)<=", intval($cp)) @@ -117,10 +119,12 @@ class TarifaEnvioModel extends \App\Models\BaseModel $precio_tarifas = $model->getEnvioPrecio($tarifa->tarifa_envio_id, $peso, $tipo_envio); foreach ($precio_tarifas as $precio_tarifa) { $precio_tarifa->importe_fijo = $tarifa->importe_fijo; + $precio_tarifa->pais = $tarifa->pais; array_push($resultado, $precio_tarifa); } } + return $resultado; } } diff --git a/ci4/app/Models/Usuarios/UserModel.php b/ci4/app/Models/Usuarios/UserModel.php index a4748d14..d4e2d993 100755 --- a/ci4/app/Models/Usuarios/UserModel.php +++ b/ci4/app/Models/Usuarios/UserModel.php @@ -20,14 +20,13 @@ class UserModel extends \App\Models\BaseModel protected $allowedFields = [ "username", - "email", "first_name", "last_name", "client_id", "status", "status_message", "active", - "country", + "comments", "last_active", "created_at", "updated_at", @@ -39,143 +38,25 @@ class UserModel extends \App\Models\BaseModel protected $validationRules = [ - "address" => [ - "label" => "Users.address", - "rules" => "trim|max_length[255]", - ], - "blocked" => [ - "label" => "Users.blocked", - "rules" => "required|permit_empty", - ], - "city" => [ - "label" => "Users.city", - "rules" => "trim|max_length[255]", - ], - "country" => [ - "label" => "Users.country", - "rules" => "trim|max_length[2]", - ], - "date_birth" => [ - "label" => "Users.dateBirth", - "rules" => "valid_date|permit_empty", - ], - "email" => [ - "label" => "Users.email", - "rules" => "trim|required|max_length[150]|valid_email", - ], - "email_confirmed" => [ - "label" => "Users.emailConfirmed", - "rules" => "required|integer", - ], "first_name" => [ "label" => "Users.firstName", "rules" => "trim|max_length[150]", ], - "language" => [ - "label" => "Users.language", - "rules" => "trim|max_length[10]", - ],/* - "last_access" => [ - "label" => "Users.lastAccess", - "rules" => "valid_date", - ],*/ - "last_ip" => [ - "label" => "Users.lastIp", - "rules" => "max_length[50]", - ], "last_name" => [ "label" => "Users.lastName", "rules" => "trim|max_length[150]", ], - "mobile" => [ - "label" => "Users.mobile", - "rules" => "trim|max_length[50]", - ], - "password" => [ - "label" => "Users.password", - "rules" => "required|max_length[35]", - ], - "picture" => [ - "label" => "Users.picture", - "rules" => "trim|max_length[150]", - ], - "state" => [ - "label" => "Users.state", - "rules" => "trim|max_length[255]", - ], - "zip_code" => [ - "label" => "Users.zipCode", - "rules" => "trim|max_length[50]", - ], ]; protected $validationMessages = [ - "address" => [ - "max_length" => "Users.validation.address.max_length", - ], - - "blocked" => [ - "required" => "Users.validation.email_confirmed.required", - ], - "city" => [ - "max_length" => "Users.validation.city.max_length", - ], - "country" => [ - "max_length" => "Users.validation.country.max_length", - "required" => "Users.validation.country.required", - ], - "date_birth" => [ - "valid_date" => "Users.validation.date_birth.valid_date", - ], - "email" => [ - "max_length" => "Users.validation.email.max_length", - "required" => "Users.validation.email.required", - "valid_email" => "Users.validation.email.valid_email", - ], - "email_confirmed" => [ - "integer" => "Users.validation.email_confirmed.integer", - "required" => "Users.validation.email_confirmed.required", - ], "first_name" => [ "max_length" => "Users.validation.first_name.max_length", "required" => "Users.validation.first_name.required", ], - - "language" => [ - "max_length" => "Users.validation.language.max_length", - "required" => "Users.validation.language.required", - ], - "last_access" => [ - "required" => "Users.validation.last_access.required", - "valid_date" => "Users.validation.last_access.valid_date", - ], - "last_ip" => [ - "max_length" => "Users.validation.last_ip.max_length", - "required" => "Users.validation.last_ip.required", - ], "last_name" => [ "max_length" => "Users.validation.last_name.max_length", "required" => "Users.validation.last_name.required", - ], - "mobile" => [ - "max_length" => "Users.validation.mobile.max_length", - "required" => "Users.validation.mobile.required", - ], - "password" => [ - "max_length" => "Users.validation.password.max_length", - "required" => "Users.validation.password.required", - ], - "picture" => [ - "max_length" => "Users.validation.picture.max_length", - "required" => "Users.validation.picture.required", - ], - "state" => [ - "max_length" => "Users.validation.state.max_length", - "required" => "Users.validation.state.required", - ], - "zip_code" => [ - "max_length" => "Users.validation.zip_code.max_length", - ], + ], ]; public function getGroupsTitles($user_token){ diff --git a/ci4/app/Services/PresupuestoClienteService.php b/ci4/app/Services/PresupuestoClienteService.php index 2868f4bf..17c4acc8 100644 --- a/ci4/app/Services/PresupuestoClienteService.php +++ b/ci4/app/Services/PresupuestoClienteService.php @@ -65,7 +65,7 @@ class PresupuestoClienteService extends BaseService } } - public static function obtenerCubierta($data) + public static function obtenerCubierta($data, $return_raw=false) { $uso = $data['uso']; @@ -76,7 +76,6 @@ class PresupuestoClienteService extends BaseService $isColor = $data['isColor']; $isHq = $data['isHq']; $cliente_id = $data['cliente_id']; - $paginas_color = $data['paginas_color']; $lomoRedondo = $data['lomoRedondo']; $lineas_cubierta = []; @@ -102,6 +101,14 @@ class PresupuestoClienteService extends BaseService } if (count($lineas_cubierta) > 0) { + if($return_raw){ + $lineas_cubierta = array_values(array_unique($lineas_cubierta, SORT_REGULAR)); + + return[ + 'cubierta' => $lineas_cubierta + ]; + } + usort( $lineas_cubierta, function ($a, $b) { @@ -119,7 +126,7 @@ class PresupuestoClienteService extends BaseService return $lineas_cubierta; } - public static function obtenerSobrecubierta($data) + public static function obtenerSobrecubierta($data, $return_raw=false) { $uso = $data['uso']; @@ -154,6 +161,14 @@ class PresupuestoClienteService extends BaseService } if (count($lineas_sobrecubierta) > 0) { + if($return_raw){ + $lineas_sobrecubierta = array_values(array_unique($lineas_sobrecubierta, SORT_REGULAR)); + + return[ + 'sobrecubierta' => $lineas_sobrecubierta + ]; + } + usort( $lineas_sobrecubierta, function ($a, $b) { @@ -171,7 +186,7 @@ class PresupuestoClienteService extends BaseService return $lineas_sobrecubierta; } - public static function obtenerGuardas($data) + public static function obtenerGuardas($data, $return_raw=false) { $uso = $data['uso']; @@ -205,6 +220,14 @@ class PresupuestoClienteService extends BaseService } if (count($lineas_guardas) > 0) { + if($return_raw){ + $lineas_guardas = array_values(array_unique($lineas_guardas, SORT_REGULAR)); + + return[ + 'guardas' => $lineas_guardas + ]; + } + usort( $lineas_guardas, function ($a, $b) { @@ -241,28 +264,31 @@ class PresupuestoClienteService extends BaseService * - isHq: si es alta calidad * - paginas_color: número de páginas a color */ - private static function obtenerPresupuestoClienteInterior($data) + public static function obtenerPresupuestoClienteInterior($data, $return_raw = false) { $uso = $data['uso']; $tipo_impresion_id = $data['tipo_impresion_id']; $datosPedido = $data['datosPedido']; + $paginas_color = $data['paginas_color']; if ($data['papelInteriorDiferente'] == false) $papel_generico = $data['papel_generico']; else { $papel_generico = $data['papel_generico']['negro']; - $papel_generico_color = $data['papel_generico']['color']; + if($paginas_color>0) + $papel_generico_color = $data['papel_generico']['color']; } if ($data['papelInteriorDiferente'] == false) $gramaje = $data['gramaje']; else { $gramaje = $data['gramaje']['negro']; - $gramaje_color = $data['gramaje']['color']; + if($paginas_color>0) + $gramaje_color = $data['gramaje']['color']; } $isColor = $data['isColor']; $isHq = $data['isHq']; $cliente_id = $data['cliente_id']; - $paginas_color = $data['paginas_color']; + $paginas_negro = $datosPedido->paginas - $paginas_color; @@ -293,6 +319,14 @@ class PresupuestoClienteService extends BaseService } if (count($linea_negro_plana) > 0) { + /*if($return_raw){ + $linea_negro_plana = array_values(array_unique($linea_color_plana, SORT_REGULAR)); + + return[ + 'negro' => $linea_negro_plana + ]; + }*/ + usort( $linea_negro_plana, function ($a, $b) { @@ -335,6 +369,14 @@ class PresupuestoClienteService extends BaseService } if (count($linea_color_plana) > 0) { + /*if($return_raw){ + $linea_color_plana = array_values(array_unique($linea_color_plana, SORT_REGULAR)); + + return[ + 'color' => $linea_color_plana + ]; + }*/ + usort( $linea_color_plana, function ($a, $b) { @@ -349,6 +391,16 @@ class PresupuestoClienteService extends BaseService } } + + if($return_raw){ + $linea_negro_plana = array_values(array_unique($linea_negro_plana, SORT_REGULAR)); + $linea_color_plana = array_values(array_unique($linea_color_plana, SORT_REGULAR)); + + return[ + 'negro' => $linea_negro_plana, + 'color' => $linea_color_plana + ]; + } // Si hay negro y color, y se hace con el mismo papel, hay que buscar la combinación // más económica con la misma máquna if ( @@ -493,7 +545,7 @@ class PresupuestoClienteService extends BaseService * - isHq: si es alta calidad * - paginas_color: número de páginas a color */ - private static function obtenerPresupuestoClienteInteriorRotativa($data) + public static function obtenerPresupuestoClienteInteriorRotativa($data, $return_raw = false) { $datosPedido = $data['datosPedido']; $papel_generico = $data['papel_generico']; @@ -532,6 +584,14 @@ class PresupuestoClienteService extends BaseService if (count($linea_rotativa) > 0) { + if($return_raw){ + $linea_rotativa = array_values(array_unique($linea_rotativa, SORT_REGULAR)); + + return[ + 'rotativa' => $linea_rotativa, + ]; + } + usort( $linea_rotativa, function ($a, $b) { diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php index a9495780..153813ea 100755 --- a/ci4/app/Services/PresupuestoService.php +++ b/ci4/app/Services/PresupuestoService.php @@ -462,7 +462,7 @@ class PresupuestoService extends BaseService [$data['ancho'], $data['alto']] = PresupuestoService::calculoDimForma($datosPedido, $parametrosRotativa); // calculo de papel y clicks - $factor_anchura = round($maquina->ancho_impresion / $data['ancho'], 2); + $factor_anchura = floor($maquina->ancho_impresion / $data['ancho']); $factor_altura = round($maquina->alto_impresion / ($data['alto'] + self::MARGEN_PAGINAS_ROTATIVA), 2); $factor_altura_click = round($maquina->alto_click / ($data['alto'] + self::MARGEN_PAGINAS_ROTATIVA), 2); @@ -470,13 +470,13 @@ class PresupuestoService extends BaseService return []; } - $multiplicador_pliego = $datosPedido->isCosido ? 4 : 2; - $paginas_por_pliego = round(floor($factor_anchura) * $factor_altura * $multiplicador_pliego, 2); + //$multiplicador_pliego = $datosPedido->isCosido ? 4 : 2; + $paginas_por_pliego = round($factor_anchura * $factor_altura * 2 /** $multiplicador_pliego*/, 2); $pliegos_libro = round($paginas_por_pliego ? $datosPedido->paginas / $paginas_por_pliego : 0, 2); $metros_papel_libro = round($pliegos_libro * ($maquina->alto_impresion / 1000.0), 2); $metros_papel_total = round($metros_papel_libro * ($datosPedido->tirada + $datosPedido->merma), 2); - $paginas_por_pliego_click = round(floor($factor_anchura) * $factor_altura_click * $multiplicador_pliego, 2); + $paginas_por_pliego_click = round($factor_anchura * $factor_altura_click * 2/** $multiplicador_pliego*/, 2); $pliegos_libro_click = round($paginas_por_pliego_click ? $datosPedido->paginas / $paginas_por_pliego_click : 0, 2); $clicks_libro = round(ceil($pliegos_libro_click) * 2, 2); $clicks_pedido = round($clicks_libro * ($datosPedido->tirada + $datosPedido->merma), 2); @@ -843,7 +843,7 @@ class PresupuestoService extends BaseService $ancho_total = 0; $sangre_cubierta = self::SANGRE_FORMAS_CUBIERTA; if ($datosPedido->ancho >= 210) { - $sangre_cubierta = 15; + $sangre_cubierta = 10; } if ($datosPedido) { @@ -925,7 +925,7 @@ class PresupuestoService extends BaseService $alto_total = floatval($datosPedido->alto); $sangre_cubierta = self::SANGRE_FORMAS_CUBIERTA; if ($datosPedido->alto >= 297) { - $sangre_cubierta = 15; + $sangre_cubierta = 10; } // Tapa dura (cosido y fresado) if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) { @@ -1687,7 +1687,7 @@ class PresupuestoService extends BaseService uso_tarifa: $uso, tirada: $datosPedido->tirada + $datosPedido->merma, papel_impresion_id: $papel->id, - ); + )->orderBy("t1.id", "asc")->get()->getResultObject(); $data['uso'] = $uso; $data['tipo'] = $tipo; @@ -1775,7 +1775,7 @@ class PresupuestoService extends BaseService uso_tarifa: ($uso == 'guardas') ? 'interior' : $uso, tirada: $datosPedido->tirada + $datosPedido->merma, papel_impresion_id: $papel->id, - ); + )->orderBy("t1.id", "asc")->get()->getResultObject(); // Se recorren las máquinas y se calcula el coste de linea por cada una foreach ($maquinas as $maquina) { 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 64c4289c..f5b3c691 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_comentariosItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_comentariosItems.php @@ -158,7 +158,7 @@ section("additionalInlineJs") ?> - +/* $("textarea[name*='comentarios_']").each(function(){ if (!$.trim($(this).val())) { // textarea is empty or contains only white-space @@ -167,7 +167,7 @@ $("textarea[name*='comentarios_']").each(function(){ $("#mostrar_" + $(this).attr('name')).show(); } }); - +*/ endSection() ?> diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.js b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.js deleted file mode 100644 index dcfde390..00000000 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.js +++ /dev/null @@ -1,423 +0,0 @@ -const actionBtns_direcciones = function(data) { - return ` - - - `; -}; - -// Funcion para obtener el peso total del libro -function get_peso_libro(){ - - var peso_total_libro = 0.0 - $('#tableLineasPresupuesto').DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) { - var rowData = this.data(); - peso_total_libro += parseFloat(rowData.peso) - }) - return peso_total_libro; -} - - -async function get_precio_envio(peso, paisId, cp, tipo_envio){ - - data = { - tipo: 'get_tarifa', - peso: peso, - paisId: paisId, - cp: cp, - tipo_envio: tipo_envio, - } - data = Object.assign(data, window.token_ajax); - - const response = await fetch(window.location.origin + window.url_get_precio_envio , { - method: "POST", - body: JSON.stringify(data), - headers: { - "Content-type": "application/json; charset=UTF-8", - } - }); - - const values = await response.json(); - yeniden(values[window.csrf_token]); - return values.data; -} - - -async function get_coste_envio_tiradasAlternativas(tirada){ - - var peso_libro = get_peso_libro(); - var tirada_inicial = parseInt($('#tirada').val()); - var coste = 0.0; - var margen = 0.0; - - const table = $('#tableOfDireccionesEnvio').DataTable(); - const rows = table.rows().nodes(); - - for (let i = 0; i < rows.length; i++) { - const rowData = table.row(rows[i]).data(); - const porcentaje = parseInt(rowData.cantidad)/tirada_inicial*100.0; - const cantidad = Math.floor(tirada*porcentaje/100.0); - const peso_envio = cantidad*peso_libro/1000.0; - const datos_tarifa = await get_precio_envio(peso_envio, rowData.paisId, rowData.cp, parseInt(rowData.entregaPieCalle)==1?'palets':'cajas'); - - if(datos_tarifa.id!=null){ - - if(peso_envio>parseFloat(datos_tarifa.peso_max)){ - coste += (parseFloat(datos_tarifa.precio_min) + (peso_envio-parseFloat(datos_tarifa.peso_min)) * parseFloat(datos_tarifa.precio_adicional)).toFixed(2); - } - // si no se calcula linealmente - else{ - m=((parseFloat(datos_tarifa.precio_max)-parseFloat(datos_tarifa.precio_min))/(parseFloat(datos_tarifa.peso_max)-parseFloat(datos_tarifa.peso_min))); - b=parseFloat(datos_tarifa.precio_max)-m*parseFloat(datos_tarifa.peso_max); - coste += parseFloat(m*peso_envio+b); - } - } - margen += coste*datos_tarifa.margen/100.0; - } - - return {coste, margen}; -} - - -function checkInsertar(){ - - var cantidad_total = 0 - $('#tableOfDireccionesEnvio').DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) { - var data = this.data(); - cantidad_total += parseInt(data.cantidad ) - } ); - var htmlString = '' - if(cantidad_total < parseInt($('#tirada').val())){ - $('#rowInsertar').css('display', 'flex') - } - else{ - $('#rowInsertar').css('display', 'none') - } - - if(cantidad_total != parseInt($('#tirada').val())){ - htmlString = ` - `; - } - $('#alert-envios').html(htmlString) -} - - -async function updateTablaEnvios(tirada_inicial = null, tirada = null){ - - var peso_total_libro = get_peso_libro(); - - $('#tableOfDireccionesEnvio').DataTable().rows().every(async function ( rowIdx, tableLoop, rowLoop ) { - - var rowData = this.data(); - - if(tirada_inicial!=null && tirada!=null){ - const porcentaje = parseInt(rowData.cantidad)/tirada_inicial*100.0; - const cantidad = Math.floor(tirada*porcentaje/100.0); - rowData.cantidad = cantidad - } - const peso_envio = peso_total_libro*parseInt(rowData.cantidad)/1000.0; - - var datos_tarifa = await get_precio_envio(peso_envio, rowData.paisId, rowData.cp, parseInt(rowData.entregaPieCalle)==1?'palets':'cajas'); - - - if(datos_tarifa.id!=null){ - - if(peso_envio>parseFloat(datos_tarifa.peso_max) || parseFloat(datos_tarifa.peso_max) == 0){ - datos_tarifa.precio = parseFloat(datos_tarifa.peso_min) + (peso_envio-parseFloat(datos_tarifa.peso_min))*parseFloat(datos_tarifa.precio_adicional); - } - // si no se calcula linealmente - else{ - m=((parseFloat(datos_tarifa.precio_max)-parseFloat(datos_tarifa.precio_min))/(parseFloat(datos_tarifa.peso_max)-parseFloat(datos_tarifa.peso_min))); - b=parseFloat(datos_tarifa.precio_max)-m*parseFloat(datos_tarifa.peso_max); - datos_tarifa.precio = parseFloat(m*peso_envio+b); - } - - - datos_tarifa.cantidad = parseInt($('#add_cantidad').val()); - datos_tarifa.peso = peso_envio; - - $('#tableOfDireccionesEnvio').DataTable().row(rowIdx) - .data({ - 'tarifa_id': datos_tarifa.id, - 'cantidad': rowData.cantidad, - 'peso': datos_tarifa.peso.toFixed(3), - 'att': rowData.att, - 'email': rowData.email, - 'direccion': rowData.direccion, - 'cp': rowData.cp, - 'municipio': rowData.municipio, - 'provincia': rowData.provincia, - 'paisId': rowData.paisId, - 'telefono': rowData.telefono, - 'proveedor': datos_tarifa.proveedor, - 'proveedor_id': datos_tarifa.proveedor_id, - 'precio': datos_tarifa.precio.toFixed(2), - 'margen': datos_tarifa.margen, - 'entregaPieCalle': rowData.entregaPieCalle, - 'actionBtns_direcciones': actionBtns_direcciones, - }) - .draw(); - - checkInsertar() - //updateTotales(false, false, true) - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true - }) - } - else{ - popErrorAlert(window.error_no_tarifa_envio, 'error-tarifa') - } - }) -} - -$('#insertar_direccion').on('click', function(){ - - $("#addressForm").attr('action','create') - var $newAddDialog = $("#addressForm") - var maximaCantidad = parseInt($('#tirada').val()) - $("#add_cantidad").attr("max" , maximaCantidad); - $("#add_cantidad").val( maximaCantidad); - $("#add_cantidad").on('change', function(){ - $("#add_cantidad").val(parseInt($("#add_cantidad").val())>maximaCantidad ? maximaCantidad : $("#add_cantidad").val()) - }) - - cantidad_total = 0 - tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) { - var data = this.data(); - cantidad_total += parseInt(data.cantidad) - } ); - $('#add_cantidad').attr('max-value', parseInt($('#tirada').val())-cantidad_total) - $('#add_cantidad').val(parseInt($('#tirada').val())-cantidad_total) - $newAddDialog.modal('show') -}) - -const lastColNr_direcciones = $('#tableOfDireccionesEnvio').find("tr:first th").length - 1; - - -$(document).on('click', '.delete-add-row', function(e) { - const row = $(this).closest('tr'); - tableEnvios.row( row ) - .remove() - .draw(); - checkInsertar() - //updateTotales(false, false, true) - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true - }) - showBreadCrumbSaveButton(true); - -}) - -$(document).on('click', '.btn-edit-add', function(e) { - const row = $(this).closest('tr'); - var data = tableEnvios.row( row ).data() - - $("#addressForm").attr('action','edit') - $("#addressForm").attr('row', row[0]._DT_RowIndex) - $("#addressForm").attr('presupuestodireccion_id', $(this).attr('data-id')) - var $newAddDialog = $("#addressForm") - var maximaCantidad = parseInt($('#tirada').val()) - $("#add_cantidad").attr("max" , maximaCantidad); - $("#add_cantidad").val( maximaCantidad); - $("#add_cantidad").on('change', function(){ - $("#add_cantidad").val(parseInt($("#add_cantidad").val())>maximaCantidad ? maximaCantidad : $("#add_cantidad").val()) - }) - - cantidad_total = 0 - tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) { - var data2 = this.data(); - cantidad_total += parseInt(data2.cantidad) - } ); - cantidad_total -= parseInt(data.cantidad) // Si es editar tienes que restar los de la linea actual - $('#add_cantidad').attr('max-value', parseInt($('#tirada').val())-cantidad_total) - $('#add_cantidad').val(parseInt($('#tirada').val())-cantidad_total) - - $('#add_att').val(data.att) - $('#add_direccion').val(data.direccion) - $('#add_email').val(data.email) - $('#add_cp').val(data.cp) - $('#add_municipio').val(data.municipio) - $('#add_provincia').val(data.provincia) - $('#add_pais_id').val(data.paisId) - $('#add_telefono').val(data.telefono) - $('#add_cantidad').val(data.cantidad) - $('#add_entregaPieCalle').prop('checked', data.entregaPieCalle==1?true:false) - - $newAddDialog.modal('show') -}) - - - - - -$('#recoger_en_taller').change(function(){ - if(this.checked) { - $('#rowTable').css('display', 'none') - $('#rowInsertar').css('display', 'none') - tableEnvios.clear().draw() - } - else{ - $('#rowTable').css('display', 'flex') - $('#rowInsertar').css('display', 'flex') - tableEnvios.columns.adjust(); - } -}) - - -let tableEnvios = $('#tableOfDireccionesEnvio').DataTable( { - draw:5, - serverSide: false, - processing: true, - autoWidth: true, - responsive: true, - order: [[ 0, "asc" ]], - pageLength: 20, - lengthChange: false, - searching: false, - paging: false, - info: false, - scrollX: true, - - columns: [ - { 'data': 'tarifa_id' }, - { 'data': 'cantidad' }, - { 'data': 'peso' }, - { 'data': 'att' }, - { 'data': 'email' }, - { 'data': 'direccion' }, - { 'data': 'cp' }, - { 'data': 'municipio' }, - { 'data': 'paisId' , - render: function(data, type, row, meta) { - var pais = window.paisList.find(element => element.id == data); - return pais['nombre']; - }, - }, - { 'data': 'telefono' }, - { 'data': 'proveedor'}, - { 'data': 'proveedor_id'}, - { 'data': 'precio' }, - { 'data': 'margen' }, - { 'data': 'entregaPieCalle' }, - { - data: actionBtns_direcciones, - className: 'row-edit dt-center' - } - ], - columnDefs: [ - { - orderable: false, - searchable: false, - targets: [lastColNr_direcciones] - }, - {"orderData": [ 0], "targets": 0 }, - - ], - columnDefs: [ - { - target: [0,11,13,14], - visible: false, - searchable: false - }, - ], - language: { - url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" - }, - - } ); - - - - - -function save_datos_envios(){ - - var id = $('#presupuesto_id').val() - - $.post( window.routes_envios.dataTableOfPresupuestoDirecciones, - Object.assign({tipo: "clear_lineas", presupuesto_id: id}, window.token_ajax)) - .done(function( data ) { - - $('#tableOfDireccionesEnvio').DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) { - var data = this.data(); - $.post( '/presupuestos/presupuestodirecciones/add', - Object.assign({ - presupuesto_id : id, - tarifa_id : data.tarifa_id, - cantidad : data.cantidad, - peso : data.peso, - att : data.att, - email : data.email, - direccion : data.direccion, - paisId : data.paisId, - provincia : data.provincia, - municipio : data.municipio, - cp : data.cp, - telefono : data.telefono, - precio : data.precio, - margen : data.margen, - proveedor : data.proveedor, - proveedor_id : data.proveedor_id, - entregaPieCalle : data.entregaPieCalle}, window.token_ajax)) - }); - - }) - -} - - -function load_datos_envios(){ - - window.direccionesList.forEach((linea) => { - tableEnvios.row - .add({ - 'tarifa_id': linea.tarifa_id, - 'cantidad': linea.cantidad, - 'peso': linea.peso, - 'att': linea.att, - 'email': linea.email, - 'direccion': linea.direccion, - 'cp': linea.cp, - 'municipio': linea.municipio, - 'provincia': linea.provincia, - 'paisId': linea.pais_id, - 'telefono': linea.telefono, - 'proveedor': linea.proveedor, - 'proveedor_id': linea.proveedor_id, - 'precio': linea.precio, - 'margen': linea.margen, - 'entregaPieCalle': linea.entregaPieCalle, - 'actionBtns_direcciones': actionBtns_direcciones, - }) - .draw(); - checkInsertar() - - - }); - - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: false - }) - -} - diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.php index 26a0f0b7..9d3b89e7 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosEnvios.php @@ -10,11 +10,20 @@
+
+
+ + +
+ +
- +
- + @@ -23,12 +32,13 @@ + - + - - + + @@ -55,24 +65,3 @@ - - - -section("additionalInlineJs") ?> - -window.paisList = ; -window.direccionesList = ; - -window.routes_envios = { - dataTableOfPresupuestoDirecciones: '' -} - -window.url_get_precio_envio = ''; -window.error_no_tarifa_envio = '' -window.token_ajax= {: v}; - -$( document ).ready(function() { - load_datos_envios(); -}); - -endSection() ?> \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosLibroItems.js b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosLibroItems.js deleted file mode 100644 index 2e974ab5..00000000 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosLibroItems.js +++ /dev/null @@ -1,144 +0,0 @@ -$('#paginas').on("change", function () { - - const url2 = window.location.href; - const url_parts2 = url2.split('/'); - - if($('#tipo_impresion_id').val() == 21){ - if(parseInt($('#paginas').val()) > 80){ - $('#paginas').val(80) - } - } - - if(url_parts2[url_parts2.length-2] == 'edit'){ - - checkPaginasPresupuesto() - - // Si es negro o color - if ($('#tipoImpresion').select2('data')[0].id == 'negro' || - $('#tipoImpresion').select2('data')[0].id == 'color') { - $('#compPaginasNegro').val(parseInt($('#paginas').val())-parseInt($('#compPaginasColor').val())); - $('#compPaginasNegro').trigger('change') - } - // Si es negrohq o colorhq - if ($('#tipoImpresion').select2('data')[0].id == 'negrohq' || - $('#tipoImpresion').select2('data')[0].id == 'colorhq') { - $('#compPaginasNegrohq').val(parseInt($('#paginas').val())-parseInt($('#compPaginasColorhq').val())); - $('#compPaginasNegrohq').trigger('change'); - } - - //update_servicios(false) - //updateLineasPresupuesto() - updatePresupuesto({ - update_lineas: true, - update_servicios: true, - update_envios: true, - update_resumen: true, - update_tiradas_alternativas: true - }) - } -}); - - -$('#tirada').on("change", function (update_tiradas_alternativas = true) { - - calcular_mermas() - - const url2 = window.location.href; - const url_parts2 = url2.split('/'); - - if(url_parts2[url_parts2.length-2] == 'edit'){ - //update_servicios(false) - //updateLineasPresupuesto() - if(update_tiradas_alternativas) - updatePresupuesto({ - update_lineas: true, - update_servicios: false, - update_envios: false, - update_resumen: false, - update_tiradas_alternativas: false - }) - else - updatePresupuesto({ - update_lineas: true, - update_servicios: false, - update_envios: false, - update_resumen: false, - update_tiradas_alternativas: false - }) - checkInsertar() - } -}) - -function calcular_mermas(){ - - const tirada = parseInt($('#tirada').val()) - var merma = 0 - htmlString = '' - - if(tirada> parseInt($('#POD').val())){ - merma = tirada*0.1<=30 ? tirada*0.1 : 30 - } - else{ - merma_lineas = [] - tableLineasPresupuesto.rows().every( function ( rowIdx, tableLoop, rowLoop ) { - var rowData = this.data(); - if(rowData.row_id != 'lp_guardas' && rowData.row_id != 'lp_cubierta' && rowData.row_id != 'lp_sobrecubierta'){ - const formas_linea = parseInt($('#isCosido').val())==0?parseInt(rowData.formas):parseInt(rowData.formas)/2 - if(formas_linea > tirada) - merma_lineas.push(formas_linea-tirada) - else - merma_lineas.push(tirada%formas_linea) - } - - }) - - - if(merma_lineas.length>0) - merma = Math.max(...merma_lineas) - else{ - htmlString = ` - `; - - - merma = 0 - - } - - } - $('#mermacubierta').val(parseInt(merma)) - $('#merma').val(parseInt(merma)) - $('#alert-datosLibro').html(htmlString) -} - - -$('#papelFormatoPersonalizado').on("click",function(){ - - if($('#papelFormatoPersonalizado').is(':checked')){ - document.getElementById("papelFormatoAncho").style.display = "block"; - document.getElementById("papelFormatoAlto").style.display = "block"; - $('#papelFormatoId').hide(); - $('#papelFormatoId').val(0).change(); - document.getElementById("label_papelFormatoId").innerHTML = - window.Presupuestos.papelFormatoId + " (" + - window.Presupuestos.papelFormatoAncho + " x " + window.Presupuestos.papelFormatoAncho + ")*"; - } - else{ - document.getElementById("papelFormatoAncho").value= ""; - document.getElementById("papelFormatoAlto").value= ""; - document.getElementById("papelFormatoAncho").style.display = "none"; - document.getElementById("papelFormatoAlto").style.display = "none"; - $('#papelFormatoId').show(); - document.getElementById("label_papelFormatoId").innerHTML = - window.Presupuestos.papelFormatoId + '*'; - } -}); - diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosLibroItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosLibroItems.php index bd524b58..6adb6fc9 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosLibroItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosLibroItems.php @@ -19,7 +19,7 @@ - > + > @@ -30,7 +30,7 @@ - + @@ -41,28 +41,22 @@ - - + +
-
+
- papel_formato_personalizado == true ? '' : 'style="display: none"'; ?> type="number" id="papelFormatoAncho" name="papel_formato_ancho" maxLength="8" step="0.01" class="form-control formato_libro" value="papel_formato_ancho) ?>"> +
-
+
- papel_formato_personalizado == true ? '' : 'style="display: none"'; ?> type="number" id="papelFormatoAlto" name="papel_formato_alto" maxLength="8" step="0.01" class="form-control formato_libro" value="papel_formato_alto) ?>"> +
@@ -76,7 +70,7 @@ - +
@@ -85,7 +79,7 @@ - + @@ -96,37 +90,33 @@
- -
+
- solapas == true ? 'checked' : ''; ?>> +
-
- -
-
-
- solapas_sobrecubierta == true ? 'checked' : ''; ?>> - -
-
-
- +
+
+
+ + +
+
+
- papel_formato_personalizado == true ? 'checked' : ''; ?>> +
@@ -136,35 +126,24 @@
-
- - solapas == true): ?> -
- - - -
- - solapas_sobrecubierta == true): ?> -
- - - +
+ + +
+
+ +
+
+ + +
+
@@ -187,44 +166,24 @@ *
- -
-
- - -
+
+
+ +
- -
- - - +
+
+
- -
@@ -237,7 +196,7 @@
@@ -248,30 +207,18 @@
- -
-
-
- -
-
-
-
@@ -291,7 +238,7 @@
@@ -303,7 +250,7 @@
@@ -314,7 +261,7 @@
@@ -330,114 +277,4 @@
- - - -section("additionalInlineJs") ?> -$('#papelFormatoId').select2({ - allowClear: false, -}); - - - var ancho_libro = getDimensionLibro().ancho; - var alto_libro = getDimensionLibro().alto; - - $('#retractilado').on("change", function () { - checkRetractiladoComparador(this); - servicioRetractilado() - }); - - - $('#retractilado5').on("change", function () { - checkRetractiladoComparador(this); - servicioRetractilado5() - }); - - $('#fajaColor').on("change", function () { - servicioFajaColor() - }); - - $('#ferro').on("change", function () { - servicioFerro() - }); - - $('#prototipo').on("change", function () { - servicioPrototipo() - servicioFerro() - }); - - -$('#papelFormatoId').on('select2:select', event_change_formato) -$('.formato_libro').on('change', event_change_formato) - -function event_change_formato(){ - ancho_libro = getDimensionLibro().ancho; - alto_libro = getDimensionLibro().alto; - - - // Si es negro o color - if ($('#tipoImpresion').select2('data')[0].id == 'negro' || - $('#tipoImpresion').select2('data')[0].id == 'color') { - $('#compPaginasNegro').trigger('change') - } - // Si es negrohq o colorhq - if ($('#tipoImpresion').select2('data')[0].id == 'negrohq' || - $('#tipoImpresion').select2('data')[0].id == 'colorhq') { - $('#compPaginasNegrohq').trigger('change'); - } - - $('.solapas_cubierta').trigger('change') - $('.solapas_sobrecubierta').trigger('change') - - checkPaginasPresupuesto() - - updatePresupuesto({ - update_lineas: true, - update_servicios: true, - update_envios: true, - update_resumen: true, - update_tiradas_alternativas: true - }) - //updateLineasPresupuesto() - //update_servicios(false) -} - - - - - -$("#solapas").on("click", function () { - var e = document.getElementById('div_solapas_ancho'); - if (document.getElementById('solapas').checked) { - e.style.display = "block"; - } - else { - e.style.display = "none"; - $('#solapas_ancho').val(0) - } - - $('#serv_default').click() -}); - - -$("#solapas_sobrecubierta").on("click", function () { - var e = document.getElementById('div_solapas_ancho_sobrecubierta'); - if (document.getElementById('solapas_sobrecubierta').checked) { - e.style.display = "block"; - } - else { - e.style.display = "none"; - $('#solapas_ancho_sobrecubierta').val(0) - } - - $('#serv_default').click() -}); - -let initTamanioPersonalizado = papel_formato_personalizado==true?1:0); ?>; -if(initTamanioPersonalizado != null){ - if ( initTamanioPersonalizado){ - $('#papelFormatoId').next(".select2-container").hide(); - } -} -endSection() ?> diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosPresupuestoClienteItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosPresupuestoClienteItems.php index bf952469..eb45cbe1 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosPresupuestoClienteItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosPresupuestoClienteItems.php @@ -1,38 +1,45 @@

-

-
+
- +
-
+
+ +
- + - - - @@ -45,7 +52,9 @@
-
+
+ +
@@ -54,13 +63,19 @@

-

+

+ +

-

+

+ +

-

+

+ +


@@ -71,24 +86,22 @@
-

+

+ +

- +
-
-
@@ -99,24 +112,22 @@
-

+

+ +

- +
-
-
@@ -127,24 +138,22 @@
-

+

+ +

- +
-
-
@@ -155,24 +164,22 @@
-

+

+ +

- +
-
-
@@ -183,129 +190,187 @@
-

-
+

+ +

+
-
- + +
+ +
+ +
+ + +
+
+ +
+ + +
+
+ + +
+ +
+
+
+
+ + +
+
+

+ +

+
+
+ +
+
+
-

- - -
-
-

-
-
- -
-
- -
-
- -
-
-
-
-
- -
-
-

-
-
- -
-
- -
-
- -
-
-
-
+ +
+
+

+ +

+
+ +
+
+ +
+
+ +
+ +
+
+
+
-
+
-
+
+ +
-
+
- +
@@ -313,12 +378,15 @@ - +
-

+

+ +

@@ -327,52 +395,93 @@

-

-
+
-
Tarifa_idTARIFA ID pais_id Proveedor_idProveedor_id MargenEntrega a piePallets?
+
- - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
: 0.00 + + : + + 0.00
-
- - +
@@ -384,39 +493,87 @@

-

-
+
- +
- - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -424,17 +581,20 @@ - - + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:0.00 + + : + 0.00 +
-
-
@@ -446,50 +606,91 @@

-

-
+
- +
- - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
: 0.00 + + : + + 0.00
-
@@ -499,1396 +700,109 @@
- -
-
-

- -

+ +
+
+

+ +

-
-
+
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: 0.00
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + : + + 0.00
-
- - -
+
+
+
- - +
+ +
-
- - - - - -section("additionalInlineJs") ?> - - autosize($('#compCalPaginasColor')); - - function init_comparador() { - $('#tipoImpresion').select2({ - allowClear: false, - }); - - $('#compPapelNegro').select2({ - allowClear: false, - }); - - $('#compGramajeNegro').select2({ - - allowClear: false, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', - - data: function (params) { - return { - tipo: 'gramaje', - uso: 'bn', - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#mermacubierta').val()), - datos: $('#compPapelNegro').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); - - $('#compPapelNegrohq').select2({ - allowClear: false, - }); - - $('#compGramajeNegrohq').select2({ - allowClear: false, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', - - data: function (params) { - return { - tipo: 'gramaje', - uso: 'bnhq', - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#mermacubierta').val()), - datos: $('#compPapelNegrohq').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - - }); - - $('#compPapelColor').select2({ - allowClear: false, - }); - - $('#compPapelColorhq').select2({ - allowClear: false, - }); - - $('#compGramajeColor').select2({ - allowClear: false, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', - - data: function (params) { - return { - tipo: 'gramaje', - uso: 'color', - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#mermacubierta').val()), - datos: $('#compPapelColor').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); - - $('#compGramajeColorhq').select2({ - allowClear: false, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - - data: function (params) { - return { - tipo: 'gramaje', - uso: 'colorhq', - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#mermacubierta').val()), - datos: $('#compPapelColorhq').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); - - $('#compPapelCubierta').select2({ - allowClear: false, - }); - - $('#compGramajeCubierta').select2({ - allowClear: false, - }); - - $('#compPapelSobrecubierta').select2({ - allowClear: false, - }); - - $('#compGramajeSobrecubierta').select2({ - allowClear: false, - minimumResultsForSearch: Infinity, - }); - - $('#encuadernacion').select2({ - allowClear: false, - }); - - - - $('#compCarasCubierta').select2({ - allowClear: false, - minimumResultsForSearch: Infinity, - }); - - $('#compPapelGuardas').select2({ - allowClear: false, - }); - - $('#compCarasGuardas').select2({ - allowClear: false, - minimumResultsForSearch: Infinity, - }); - - - updatePapelesComparador(); - const paginasColor = document.getElementById('compCalPaginasColor'); - if (paginasColor.value.length > 0) { - computarPaginasColor(paginasColor.value); - } - - computarPaginasColor($('#compPosPaginasColor').val()); - } - - $('#compSobrecubierta').on('change', function(){ - if ($('#compSobrecubierta').val()==1){ - value = false - } - else{ - value = 'disabled' - $('#compPapelSobrecubierta').val(0) - $('#compGramajeSobrecubierta').val('') - $('#compGramajeSobrecubierta').select2("destroy") - $('#compGramajeSobrecubierta').select2({allowClear: false, minimumResultsForSearch: Infinity}) - - } - $('#compPapelSobrecubierta').prop('disabled', value); - $('#compGramajeSobrecubierta').prop('disabled', value); - }) - - function init_lineas_comparador(){ - var comp_data = - - try{ - $("#compPapelNegro").val(parseInt(comp_data.bn.papel_id)).trigger('change'); - - try{ - var newState = new Option(comp_data.bn.gramaje, comp_data.bn.gramaje, true, true); - // Append it to the select - $("#compGramajeNegro").append(newState).trigger('change'); - $('#compGramajeNegro').prop('disabled', false); - }catch(e){} - }catch(e){} - - try{ - $("#compPapelNegrohq").val(parseInt(comp_data.bnhq.papel_id)).trigger('change'); - - try{ - var newState = new Option(comp_data.bnhq.gramaje, comp_data.bnhq.gramaje, true, true); - // Append it to the select - $("#compGramajeNegrohq").append(newState).trigger('change'); - $('#compGramajeNegrohq').prop('disabled', false); - }catch(e){} - }catch(e){} - - try{ - $("#compPapelColor").val(parseInt(comp_data.color.papel_id)).trigger('change'); - - try{ - var newState = new Option(comp_data.color.gramaje, comp_data.color.gramaje, true, true); - // Append it to the select - $("#compGramajeColor").append(newState).trigger('change'); - $('#compGramajeColor').prop('disabled', false); - }catch(e){} - }catch(e){} - - try{ - $("#compPapelColorhq").val(parseInt(comp_data.colorhq.papel_id)).trigger('change'); - - try{ - var newState = new Option(comp_data.colorhq.gramaje, comp_data.colorhq.gramaje, true, true); - // Append it to the select - $("#compGramajeColorhq").append(newState).trigger('change'); - $('#compGramajeColorhq').prop('disabled', false); - }catch(e){} - }catch(e){} - - try{ - $("#compCarasCubierta").val(parseInt(comp_data.cubierta.paginas)).change(); - try{ - $("#compPapelCubierta").val(parseInt(comp_data.cubierta.papel_id)).trigger('select2:select'); - - try{ - var newState = new Option(comp_data.cubierta.gramaje, comp_data.cubierta.gramaje, true, true); - // Append it to the select - $("#compGramajeCubierta").append(newState).trigger('change'); - $('#compGramajeCubierta').prop('disabled', false); - }catch(e){} - }catch(e){} - }catch(e){} - - try{ - $("#compSobrecubierta").val(parseInt(comp_data.sobrecubierta.imprimir)).change(); - try{ - $("#compPapelSobrecubierta").val(parseInt(comp_data.sobrecubierta.papel_id)).trigger('select2:select'); - - try{ - var newState = new Option(comp_data.sobrecubierta.gramaje, comp_data.sobrecubierta.gramaje, true, true); - // Append it to the select - $("#compGramajeSobrecubierta").append(newState).trigger('change'); - $('#compGramajeSobrecubierta').prop('disabled', false); - }catch(e){} - }catch(e){} - }catch(e){} - - try{ - $("#compCarasGuardas").val(parseInt(comp_data.guardas.paginas_impresion)).change(); - $("#compPapelGuardas").val(parseInt(comp_data.guardas.papel_id)).trigger('change'); - }catch(e){} - - } - - var tableCompIntPlana = new DataTable('#tableCompIntPlana',{ - scrollX: true, - searching: false, - paging: false, - info: false, - ordering: false, - responsive: true, - select: false, - language: { - url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" - }, - columns: [ - { 'data': 'tipo', - 'render': function ( data, type, row, meta ) { - if(data=='bn') - return ''; - else if(data=='bnhq') - return ''; - else if(data=='color') - return ''; - else if(data=='colorhq') - return ''; - } - }, - { 'data': 'paginas' }, - { 'data': 'papel' }, - { 'data': 'gramaje' }, - { 'data': 'marca' }, - { 'data': 'maquina' }, - { 'data': 'numeroPliegos' }, - { 'data': 'pliegosPedido' }, - { 'data': 'precioPliego' }, - { 'data': 'libro' }, - { 'data': 'totalPapelPedido' }, - { 'data': 'lomo' }, - { 'data': 'peso' }, - { 'data': 'horasMaquina' }, - { 'data': 'precioImpresion' }, - { 'data': 'total' }, - { 'data': 'maquinaId'}, - { 'data': 'maquinaVelocidad'}, - { 'data': 'tiempoMaquina'}, - { 'data': 'papelGenericoId'}, - { 'data': 'papelImpresionId'}, - { 'data': 'tarifa_impresion_id'} - ], - columnDefs: [ - { - target: [16,17,18,19,20,21], - visible: false, - searchable: false - }, - ] - }); - - - var tableCompIntRotativa = new DataTable('#tableCompIntRotativa',{ - scrollX: true, - searching: false, - paging: false, - info: false, - ordering: false, - responsive: true, - select: false, - language: { - url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" - }, - columns: [ - { 'data': 'tipo', - 'render': function ( data, type, row, meta ) { - if(data=='rotativa') - return ''; - } - }, - { 'data': 'paginas' }, - { 'data': 'papel' }, - { 'data': 'gramaje' }, - { 'data': 'marca' }, - { 'data': 'aFavorFibra', - 'render': function(data, type, row, meta){ - if(data=='si') - return ''; - else if(data=='no') - return ''; - } - }, - { 'data': 'maquina' }, - { 'data': 'numeroPliegos' }, - { 'data': 'pliegosPedido' }, - { 'data': 'precioPliego' }, - { 'data': 'libro' }, - { 'data': 'totalPapelPedido' }, - { 'data': 'lomo' }, - { 'data': 'peso' }, - { 'data': 'horasMaquina' }, - { 'data': 'precioImpresion' }, - { 'data': 'precioPagNegro' }, - { 'data': 'precioPagColor' }, - { 'data': 'totalTinta' }, - { 'data': 'totalCorte' }, - { 'data': 'total' }, - { 'data': 'maquinaId'}, - { 'data': 'maquinaVelocidad'}, - { 'data': 'tiempoMaquina'}, - { 'data': 'papelGenericoId'}, - { 'data': 'papelImpresionId'}, - { 'data': 'paginasColor'}, - { 'data': 'tarifa_impresion_id'} - ], - columnDefs: [ - { - target: [21,22,23,24,25,26,27], - visible: false, - searchable: false - }, - ] - }); - - var tableCompCubierta = new DataTable('#tableCompCubierta',{ - scrollX: true, - searching: false, - paging: false, - info: false, - ordering: true, - responsive: true, - select: false, - language: { - url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" - }, - columns: [ - { 'data': 'tipo', - 'render': function ( data, type, row, meta ) { - if(data=='cubierta') - return ''; - else if(data=='sobrecubierta') - return ''; - } - }, - { 'data': 'paginas' }, - { 'data': 'papel' }, - { 'data': 'gramaje' }, - { 'data': 'marca' }, - { 'data': 'maquina' }, - { 'data': 'numeroPliegos' }, - { 'data': 'pliegosPedido' }, - { 'data': 'precioPliego' }, - { 'data': 'libro' }, - { 'data': 'totalPapelPedido' }, - { 'data': 'lomo' }, - { 'data': 'peso' }, - { 'data': 'horasMaquina' }, - { 'data': 'precioImpresion' }, - { 'data': 'total' }, - { 'data': 'maquinaId'}, - { 'data': 'maquinaVelocidad'}, - { 'data': 'tiempoMaquina'}, - { 'data': 'papelGenericoId'}, - { 'data': 'papelImpresionId'}, - { 'data': 'tarifa_impresion_id'} - ], - columnDefs: [ - { - target: [16,17,18,19,20,21], - visible: false, - searchable: false - }, - ], - "order": [ [0, 'asc'],[15, 'asc'] ] - }); - - - var tableCompGuardas = new DataTable('#tableCompGuardas',{ - scrollX: true, - searching: false, - paging: false, - info: false, - ordering: false, - responsive: true, - select: false, - language: { - url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" - }, - columns: [ - { 'data': 'tipo', - 'render': function ( data, type, row, meta ) { - - return ''; - } - - }, - { 'data': 'paginas' }, - { 'data': 'papel' }, - { 'data': 'gramaje' }, - { 'data': 'marca' }, - { 'data': 'maquina' }, - { 'data': 'numeroPliegos' }, - { 'data': 'pliegosPedido' }, - { 'data': 'precioPliego' }, - { 'data': 'libro' }, - { 'data': 'totalPapelPedido' }, - { 'data': 'lomo' }, - { 'data': 'peso' }, - { 'data': 'horasMaquina' }, - { 'data': 'precioImpresion' }, - { 'data': 'total' }, - { 'data': 'maquinaId'}, - { 'data': 'maquinaVelocidad'}, - { 'data': 'tiempoMaquina'}, - { 'data': 'papelGenericoId'}, - { 'data': 'papelImpresionId'}, - { 'data': 'tarifa_impresion_id'}, - { 'data': 'paginas_impresion'}, - ], - columnDefs: [ - { - target: [16,17,18,19,20,21,22], - visible: false, - searchable: false - }, - ] - }); - - function checkComparadorGuardas(actualizarLinea = false){ - - if ($('#compPapelGuardas').select2('data')[0].id > 0 ){ - - const dimension = getDimensionLibro(); - - let datos = { - tipo_impresion_id: , - type: 'guardas', - paginas: 8, - paginas_impresion: parseInt($('#compCarasGuardas').select2('data')[0].id), - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#mermacubierta').val()), - color: 1, - hq: 1, - ancho: dimension.ancho, - alto: dimension.alto, - papel_generico_id: $('#compPapelGuardas').select2('data')[0].id, - papel_generico: $('#compPapelGuardas').select2('data')[0].text.trim(), - gramaje: parseInt($('#compGramajeGuardas').val()), - cliente_id: $('#clienteId').find(":selected").val(), - : v - }; - - $.ajax({ - type: "POST", - url: "/presupuestoadmin/datatable", - data: datos, - success: function (data) { - - clearGuardas(); - - if(data.lineas.length >0){ - fillGuardas(data); - selectGuardasLineas(); - $('#title_guardas').html('' + ' (' + tableCompGuardas.rows().count() + ')'); - $('#insertarGuardasBtn').removeClass('d-none') - if(actualizarLinea){ - var rows = $("#tableCompCubierta").DataTable().rows( '.selected' ).data().toArray(); - for(row of rows){ - fill_lp_guardas(row, true); - } - } - } - else{ - $('#title_guardas').html(''); - $('#insertarGuardasBtn').addClass('d-none') - $('#total_comp_guardas').html('0.00') - - } - yeniden(data.); - return true; - }, - error: function(e){ - return false; - } - }) - } - - else{ - clearGuardas(); - } - } - - - $('.comp_guardas_items').on('change', function (e) { - - checkComparadorGuardas(false); - }); - - - - async function getLineasIntPlana(is_color, is_hq, actualizarLinea){ - - const dimension = getDimensionLibro(); - - let datos = { - tipo_impresion_id: , - type: 'interior', - color: is_color?1:0, - hq: is_hq?1:0, - paginas: parseInt($(''+ elementos.paginas).val()), - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#merma').val()), - ancho: dimension.ancho, - alto: dimension.alto, - papel_generico_id: $(''+ elementos.papel).select2('data')[0].id, - papel_generico: $(''+ elementos.papel).select2('data')[0].text.trim(), - gramaje: $(''+ elementos.gramaje).select2('data')[0].text.trim() , - cliente_id: $('#clienteId').find(":selected").val(), - : v - }; - - $.ajax({ - type: "POST", - url: "/presupuestoadmin/datatable", - data: datos, - success: function (data) { - - clearIntLineas(is_color); - - if(data.lineas.length >0){ - - fillIntPlana(data, is_color, is_hq); - selectIntLineas(); - $('#title_int_plana').html('' + ' (' + tableCompIntPlana.rows().count() + ')'); - $('#insertarPlanaBtn').removeClass('d-none') - if(actualizarLinea){ - var rows = $("#tableCompIntPlana").DataTable().rows( '.selected' ).data().toArray(); - for(row of rows){ - - if(row['tipo'] =='bn' && !is_color && !is_hq){ - if($('#lp_bn').css('display')!='none') - fill_lp_bn(row, true); - } - else if(row['tipo'] =='bnhq' && !is_color && is_hq){ - if($('#lp_bnhq').css('display')!='none') - fill_lp_bnhq(row, true); - } - else if(row['tipo'] =='color' && is_color && !is_hq){ - if($('#lp_color').css('display')!='none') - fill_lp_color(row, true); - } - else if(row['tipo'] =='colorhq' && is_color && is_hq){ - if($('#lp_colorhq').css('display')!='none') - fill_lp_colorhq(row, true); - } - } - } - } - else{ - $('#title_int_plana').html(''); - $('#insertarPlanaBtn').addClass('d-none') - $('#total_comp_plana').html('0.00'); - } - yeniden(data.); - return true; - }, - error: function(e){ - return false; - } - }) - return false; - } - - async function getLineasIntRot(is_hq, actualizarLinea=false){ - - const dimension = getDimensionLibro(); - - // Rotativa solo negro o color (no hq) - if ( is_hq==false){ - - if(checkInputsForRotativa()){ - - let datos = { - tipo_impresion_id: , - type: 'interior_rot', - paginas: parseInt($('#paginas').val()), - paginas_negro: parseInt($('#compPaginasNegro').val()), - paginas_color: parseInt($('#compPaginasColor').val()), - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#merma').val()), - ancho: dimension.ancho, - alto: dimension.alto, - // el papel y el gramaje se coge del negro (siempre estará) - papel_generico_id: $('#compPapelNegro').select2('data')[0].id, - papel_generico: $('#compPapelNegro').select2('data')[0].text.trim(), - gramaje: $('#compGramajeNegro').select2('data')[0].text.trim() , - cliente_id: $('#clienteId').find(":selected").val(), - : v - }; - - $.ajax({ - type: "POST", - url: "/presupuestoadmin/datatable", - data: datos, - success: function (data) { - - clearIntRot(); - - if(data.lineas.length >0){ - - fillIntRot(data); - selectIntRotLineas(); - $('#title_int_rot').html('' + ' (' + tableCompIntRotativa.rows().count() + ')'); - $('#insertarRotativaBtn').removeClass('d-none') - if(actualizarLinea){ - var rows = $("#tableCompIntRotativa").DataTable().rows( '.selected' ).data().toArray(); - for(row of rows){ - if(row['paginasColor'] ==0){ - if($('#lp_rot_bn').css('display')!='none') - fill_lp_rot_bn(row, true); - } - else if(row['paginasColor'] >0){ - if($('#lp_rot_color').css('display')!='none') - fill_lp_rot_color(row, true); - } - } - } - } - else{ - $('#title_int_rot').html(''); - $('#insertarRotativaBtn').addClass('d-none') - $('#total_comp_rot').html('0.00') - - } - yeniden(data.); - return true; - }, - error: function(e){ - return false; - } - }) - } - } - return false; - } - - $('.comp_cubierta_items').on('change', function (){ - - checkComparadorCubierta() - }); - - - function checkComparadorCubierta(actualizarLinea = false){ - - if ($('#compCarasCubierta option:selected').val().length > 0 && - $('#compPapelCubierta').select2('data').length > 0 && - $('#compGramajeCubierta').select2('data').length > 0 ){ - - const dimension = getDimensionLibro(); - - let datos = { - tipo_impresion_id: , - type: 'cubierta', - paginas: parseInt($('#compCarasCubierta option:selected').val()), - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#mermacubierta').val()), - color: 1, - ancho: dimension.ancho, - alto: dimension.alto, - lomo: getLomoLineasPresupuesto(), - solapas: $('#solapas').is(':checked')?1:0, - solapas_ancho: $('#solapas').is(':checked')?parseInt($('#solapas_ancho').val()):0, - papel_generico_id: $('#compPapelCubierta').select2('data')[0].id, - papel_generico: $('#compPapelCubierta').select2('data')[0].text.trim(), - gramaje: $('#compGramajeCubierta').select2('data')[0].text.trim() , - cliente_id: $('#clienteId').find(":selected").val(), - : v - }; - - $.ajax({ - type: "POST", - url: "/presupuestoadmin/datatable", - data: datos, - success: function (data) { - - clearCubierta(); - - if(data.lineas.length >0){ - fillCubierta(data); - selectCubiertaLineas(); - tableCompCubierta.order([0, 'asc']).draw() - $('#title_cubierta').html('' + (tableCompCubierta.rows().count()>0 ?(' (' + tableCompCubierta.rows().count() + ')'):'')); - $('#insertarCubiertaBtn').removeClass('d-none') - if(actualizarLinea){ - var rows = $("#tableCompCubierta").DataTable().rows( '.selected' ).data().toArray(); - for(row of rows){ - if (row.tipo=='cubierta') - fill_lp_cubierta(row, true); - } - } - } - else{ - $('#title_cubierta').html('' + (tableCompCubierta.rows().count()>0 ?(' (' + tableCompCubierta.rows().count() + ')'):'')); - if(tableCompCubierta.rows().count()==0){ - $('#insertarCubiertaBtn').addClass('d-none') - $('#total_comp_cubierta').html('0.00') - } - else{ - selectCubiertaLineas(); - } - - } - yeniden(data.); - return true; - }, - error: function(e){ - return false; - } - }) - } - - else{ - clearCubierta(); - } - } - - $('.comp_sobrecubierta_items').on('change', function (){ - - checkComparadorSobrecubierta() - }); - - - function checkComparadorSobrecubierta(actualizarLinea = false){ - - if ($('#compSobrecubierta option:selected').val() == 1 && - $('#compPapelSobrecubierta').select2('data').length > 0 && - $('#compGramajeSobrecubierta').select2('data').length > 0 ){ - - - const dimension = getDimensionLibro(); - - let datos = { - tipo_impresion_id: , - type: 'sobrecubierta', - paginas: 4, - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#mermacubierta').val()), - color: 1, - ancho: dimension.ancho, - alto: dimension.alto, - lomo: getLomoLineasPresupuesto() + getLomoCubiertaLineasPresupuesto(), - solapas: $('#solapas_sobrecubierta').is(':checked')?1:0, - solapas_ancho: $('#solapas_sobrecubierta').is(':checked')?parseInt($('#solapas_ancho_sobrecubierta').val()):0, - papel_generico_id: $('#compPapelSobrecubierta').select2('data')[0].id, - papel_generico: $('#compPapelSobrecubierta').select2('data')[0].text.trim(), - gramaje: $('#compGramajeSobrecubierta').select2('data')[0].text.trim() , - cliente_id: $('#clienteId').find(":selected").val(), - : v - }; - - $.ajax({ - type: "POST", - url: "/presupuestoadmin/datatable", - data: datos, - success: function (data) { - - clearSobrecubierta(); - - if(data.lineas.length >0){ - - fillSobrecubierta(data); - selectCubiertaLineas(); - tableCompCubierta.order([ [0, 'asc'],[15, 'asc'] ]).draw() - $('#title_cubierta').html('' + (tableCompCubierta.rows().count()>0 ?(' (' + tableCompCubierta.rows().count() + ')'):'')); - $('#insertarCubiertaBtn').removeClass('d-none') - if(actualizarLinea){ - var rows = $("#tableCompCubierta").DataTable().rows( '.selected' ).data().toArray(); - for(row of rows){ - if (row.tipo=='sobrecubierta') - fill_lp_sobrecubierta(row, true); - } - } - } - else{ - $('#title_cubierta').html('' + (tableCompCubierta.rows().count()>0 ?(' (' + tableCompCubierta.rows().count() + ')'):'')); - if(tableCompCubierta.rows().count()==0){ - $('#insertarCubiertaBtn').addClass('d-none') - $('#total_comp_cubierta').html('0.00') - } - else{ - selectCubiertaLineas(); - } - - } - yeniden(data.); - return true; - }, - error: function(e){ - return false; - } - }) - } - - else{ - clearSobrecubierta(); - } - } - - - - $('.comp_negro_items').on('change', function (e) { - - checkComparadorInt(false,false); - }); - - $('.comp_negrohq_items').on('change', function (e) { - - checkComparadorInt(false, true); - }); - - $('.comp_color_items').on('change', function (e) { - - checkComparadorInt(true, false); - }); - - $('.comp_colorhq_items').on('change', function (e) { - checkComparadorInt(true, true); - }); - - - - $('#tipoImpresion').on("change.select2", function () { - updatePapelesComparador(); - $('#title_int_rot').html(''); - $('#title_int_plana').html(''); - if (($('#tipoImpresion').select2('data')[0].id == 'negro' || - $('#tipoImpresion').select2('data')[0].id == 'color')){ - - $('#tableCompIntRotativa').DataTable().clear().draw(); - $('#total_comp_rot').html("0.00"); - - - $('#compPaginasColor').val('0') - $('#compPaginasColorhq').val('0') - $('#compPaginasNegrohq').val('0'); - $('#compPaginasNegro').val($('#paginas').val()) - - if($('#tipoImpresion').select2('data')[0].id == 'negro'){ - $('#compGramajeColor').val('').trigger('change') - $('#compPapelColor').val(0).trigger('change') - } - - if( $('#tableCompIntPlana').DataTable().rows().count() > 0 && - $('#tableCompIntPlana').DataTable().cell(0, 0).data().includes('hq')) { - - $('#tableCompIntPlana').DataTable().clear().draw(); - $('#total_comp_plana').html("0.00"); - } - - } - else if (($('#tipoImpresion').select2('data')[0].id == 'negrohq' || - $('#tipoImpresion').select2('data')[0].id == 'colorhq')){ - - $('#tableCompIntRotativa').DataTable().clear().draw(); - $('#total_comp_rot').html("0.00"); - - $('#compPaginasColorhq').val('0') - $('#compPaginasColor').val('0') - $('#compPaginasNegro').val('0') - $('#compPaginasNegrohq').val($('#paginas').val()) - - if($('#tipoImpresion').select2('data')[0].id == 'negrohq'){ - $('#compGramajeColorhq').val('').trigger('change') - $('#compPapelColorhq').val(0).trigger('change') - } - - if($('#tableCompIntPlana').DataTable().rows().count() > 0 && - !$('#tableCompIntPlana').DataTable().cell(0, 0).data().includes('hq')) { - - $('#tableCompIntPlana').DataTable().clear().draw(); - $('#total_comp_plana').html("0.00"); - } - } - }); - - $('#tipoImpresion').on("select2:close", function () { - - $('#paginas').change() - }) - - - function checkComparadorInt(is_color, is_hq, actualizarLineaPlana=false, actualizarLineaRot=false) { - - try{ - - clearIntLineas(is_color); - clearIntRot(); - $('#title_int_rot').html(''); - $('#title_int_plana').html(''); - - elementos = getIDsComparador(is_color, is_hq) - - if ($(''+ elementos.papel).select2('data').length > 0 && - $(''+ elementos.gramaje).select2('data').length > 0 && - parseInt($(''+ elementos.paginas).val()) >= 0 && - checkDatosPedidoForComp()) { - - - getLineasIntPlana(is_color, is_hq, actualizarLineaPlana).then((result) =>{ - // Para rotativa, si es color el papel y el gramaje tiene que ser igual - if(!is_color) - { - getLineasIntRot(is_hq, actualizarLineaRot); - } - else - { - if(!is_hq){ - if ($('#compPapelNegro').select2('data').length>0 && $('#compPapelColor').select2('data').length>0 && - $('#compGramajeNegro').select2('data').length>0 && $('#compGramajeColor').select2('data').length>0) - { - if(($('#compPapelNegro').select2('data')[0].id == $('#compPapelColor').select2('data')[0].id && - $('#compGramajeNegro').select2('data')[0].text.trim() == $('#compGramajeColor').select2('data')[0].text.trim())) - { - getLineasIntRot(is_hq, actualizarLineaRot); - } - else - { - $('#errorComRot').html(''); - } - } - } - } - }); - } - }catch(e){ - console.log(e) - } - } - - - $('#compPapelNegro').on('select2:select', function (e){ - - if($('#compPapelNegro').select2('data')[0].id=='0'){ - $('#compGramajeNegro').val('').change(); - $('#compGramajeNegro').prop('disabled', true); - } - - else{ - $('#insertarPlanaBtn').addClass('d-none') - $('#insertarRotativaBtn').addClass('d-none') - $('#total_comp_plana').html('0.00') - $('#total_comp_rot').html('0.00') - $('#compGramajeNegro').val('').change(); - $('#compGramajeNegro').empty().trigger("change"); - $('#compGramajeNegro').prop('disabled', false); - $('#compGramajeNegro').select2({ - allowClear: false, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', - - data: function (params) { - return { - tipo: 'gramaje', - uso: 'bn', - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#mermacubierta').val()), - datos: $('#compPapelNegro').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); - } - }); - - $('#compPapelNegrohq').on('select2:select', function (e){ - - if($('#compPapelNegrohq').select2('data')[0].id=='0'){ - $('#compGramajeNegrohq').val('').change(); - $('#compGramajeNegrohq').prop('disabled', true); - } - else{ - $('#insertarPlanaBtn').addClass('d-none') - $('#insertarRotativaBtn').addClass('d-none') - $('#total_comp_plana').html('0.00') - $('#total_comp_rot').html('0.00') - $('#compGramajeNegrohq').empty().trigger("change"); - $('#compGramajeNegrohq').prop('disabled', false); - $('#compGramajeNegrohq').select2({ - allowClear: false, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', - - data: function (params) { - return { - tipo: 'gramaje', - uso: 'bnhq', - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#mermacubierta').val()), - datos: $('#compPapelNegrohq').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); - } - }); - - - $('#compPapelColor').on('select2:select', function (e){ - - if($('#compPapelColor').select2('data')[0].id=='0'){ - $('#compGramajeColor').val('').change(); - $('#compGramajeColor').prop('disabled', true); - } - else{ - $('#insertarPlanaBtn').addClass('d-none') - $('#insertarRotativaBtn').addClass('d-none') - $('#total_comp_plana').html('0.00') - $('#total_comp_rot').html('0.00') - $('#compGramajeColor').empty().trigger("change"); - $('#compGramajeColor').prop('disabled', false); - $('#compPapelColor').find('option[value="0"]').remove(); - $('#compGramajeColor').select2({ - allowClear: false, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', - - data: function (params) { - return { - tipo: 'gramaje', - uso: 'color', - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#mermacubierta').val()), - datos: $('#compPapelColor').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); - } - }); - - - $('#compPapelColorhq').on('select2:select', function (e){ - - if($('#compPapelColorhq').select2('data')[0].id=='0'){ - $('#compGramajeColorhq').val('').change(); - $('#compGramajeColorhq').prop('disabled', true); - } - else{ - $('#insertarPlanaBtn').addClass('d-none') - $('#insertarRotativaBtn').addClass('d-none') - $('#total_comp_plana').html('0.00') - $('#total_comp_rot').html('0.00') - $('#compGramajeColorhq').empty().trigger("change"); - $('#compGramajeColorhq').prop('disabled', false); - $('#compPapelColorhq').find('option[value="0"]').remove(); - $('#compGramajeColorhq').select2({ - allowClear: false, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', - - data: function (params) { - return { - tipo: 'gramaje', - uso: 'colorhq', - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#mermacubierta').val()), - datos: $('#compPapelColorhq').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); - } - }); - - $('#compPapelCubierta').on('select2:select', function (e){ - if($('#compPapelCubierta').select2('data')[0].id=='0'){ - $('#compGramajeCubierta').val('').change(); - $('#compGramajeCubierta').prop('disabled', true); - } - else{ - clearCubierta(); - $('#compGramajeCubierta').empty().trigger("change"); - $('#compGramajeCubierta').val('').trigger('change'); - $('#compGramajeCubierta').prop('disabled', false); - $('#compPapelCubierta').find('option[value="0"]').remove(); - $('#compGramajeCubierta').select2({ - allowClear: false, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', - - data: function (params) { - return { - tipo: 'gramaje', - uso: 'cubierta', - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#mermacubierta').val()), - datos: $('#compPapelCubierta').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); - } - }); - - $('#compPapelSobrecubierta').on('select2:open', function (e){ - $('#compGramajeSobrecubierta').val(0).trigger('change'); - $('#compGramajeSobrecubierta').select2("destroy") - $('#compGramajeSobrecubierta').select2({allowClear: false, minimumResultsForSearch: Infinity}) - }) - - - $('#compPapelSobrecubierta').on('select2:select', function (e){ - if($('#compPapelSobrecubierta').select2('data')[0].id=='0'){ - - $('#compGramajeSobrecubierta').prop('disabled', true); - } - else{ - clearSobrecubierta(); - $('#compGramajeSobrecubierta').prop('disabled', false); - $('#compPapelSobrecubierta').find('option[value="0"]').remove(); - $('#compGramajeSobrecubierta').select2({ - allowClear: false, - minimumResultsForSearch: Infinity, - ajax: { - url: '', - type: 'post', - dataType: 'json', - - data: function (params) { - return { - tipo: 'gramaje', - uso: 'sobrecubierta', - tirada: parseInt($('#tirada').val()), - merma: parseInt($('#mermacubierta').val()), - datos: $('#compPapelSobrecubierta').select2('data')[0].text.trim() , - : v - }; - }, - delay: 60, - processResults: function (response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); - } - }); - - - function checkDatosPedidoForComp() { - - const dimension = getDimensionLibro(); - - if (parseInt($('#paginas').val()) <= 0){ - popErrorAlert('', 'divAlarmasComparador'); - return false; - } - if (parseInt($('#tirada').val()) <= 0){ - popErrorAlert('', 'divAlarmasComparador'); - return false; - } - if('ancho' in dimension && 'alto' in dimension){ - - if(dimension.alto < 60 || dimension.ancho < 60 || isNaN(dimension.alto) || isNaN(dimension.ancho) ){ - popErrorAlert('', 'divAlarmasComparador'); - return false; - } - } - else{ - popErrorAlert('', 'divAlarmasComparador'); - return false; - } - return true; - } - - init_comparador() - init_lineas_comparador() - -endSection() ?> \ No newline at end of file +
\ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosPresupuestoItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosPresupuestoItems.php index f4410468..f044e4f9 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosPresupuestoItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosPresupuestoItems.php @@ -16,7 +16,7 @@ - +
@@ -26,9 +26,9 @@ - "> + - "> +
@@ -38,11 +38,11 @@ - + - @@ -54,15 +54,11 @@ - + + + +
@@ -77,7 +73,7 @@ - +
@@ -87,7 +83,7 @@ - +
@@ -101,7 +97,7 @@ - + @@ -110,7 +106,7 @@ - + @@ -119,7 +115,7 @@ - + @@ -129,12 +125,6 @@ @@ -150,14 +140,6 @@ * @@ -167,7 +149,7 @@ - + diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.js b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.js deleted file mode 100644 index f1871aef..00000000 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.js +++ /dev/null @@ -1,2079 +0,0 @@ -/**************************************************************************************** - * Seccion para las funciones generales de la pagina - ***************************************************************************************/ - -$('.nav-servicios button').on('shown.bs.tab', function(){ - $("#tableOfServiciosEncuadernacion").DataTable().columns.adjust(); - $("#tableOfServiciosPreimpresion").DataTable().columns.adjust(); - $("#tableOfServiciosManipulado").DataTable().columns.adjust(); - $("#tableOfServiciosAcabado").DataTable().columns.adjust(); - $("#tableOfServiciosExtra").DataTable().columns.adjust(); -}) - - -$('#serv_default').on('click', function(){ - get_tarifas_enc('default').then( - get_tarifas_manipulado('default') - ) - showBreadCrumbSaveButton(true); -}) - -// Delete row -$(document).on('click', '.btn-delete-serv', function(e) { - const dataId = $(this).attr('data-id'); - const rowId = $(this).closest('td').parent()[0].sectionRowIndex; - var dataText = null; - - var table = ""; - if($(this).closest('table').attr('id').includes('tableOfServiciosEncuadernacion')){ - table = "tableOfServiciosEncuadernacion"; - } - else if($(this).closest('table').attr('id').includes('tableOfServiciosAcabado')){ - table = "tableOfServiciosAcabado"; - dataText = $(this).attr('data-text'); - } - else if($(this).closest('table').attr('id').includes('tableOfServiciosManipulado')){ - table = "tableOfServiciosManipulado"; - } - else if($(this).closest('table').attr('id').includes('tableOfServiciosPreimpresion')){ - table = "tableOfServiciosPreimpresion"; - } - else if($(this).closest('table').attr('id').includes('tableOfServiciosExtra')){ - table = "tableOfServiciosExtra"; - } - else{ - table = ""; - } - - if(table != ""){ - if(dataText==null){ - $('#' + table).DataTable().rows( function ( idx, data, node ) { - return data[0] === dataId; - } ) - .remove() - .draw(); - } - $('#' + table).DataTable().rows( function ( idx, data, node ) { - return ((data[0] === dataId) && (data[1]=== dataText)); - } ) - .remove() - .draw(); - } - - check_serv_enc_error() - check_serv_acabado_error() - check_serv_preimpresion_error() - check_serv_manipulado_error() - check_serv_extra_error() - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true - }) - //updateTotales(false, true, false) - showBreadCrumbSaveButton(true); - -}); - -function save_servicios(){ - - var datosAcabado = get_datos_acabado() - var datosEnc = get_datos_encuadernacion() - var datosManipulado = get_datos_manipulado() - var datosPreimpresion = get_datos_preimpresion() - var datosServiciosExtra = get_datos_serviciosextra() - - const domain = window.location.origin - - const url = window.location.href; - const url_parts = url.split('/'); - var id = -1; - if(url_parts[url_parts.length-2] == 'edit'){ - id = url_parts[url_parts.length-1]; - } - - fetch(domain + "/presupuestos/presupuestoencuadernaciones/edit/" + id , { - method: "POST", - body: JSON.stringify(Object.assign({datos: datosEnc}, window.token_ajax)), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - yeniden(data[window.csrf_token]); - }) - .then( - fetch(domain + "/presupuestos/presupuestomanipulados/edit/" + id , { - method: "POST", - body: JSON.stringify(Object.assign({datos: datosManipulado}, window.token_ajax)), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - yeniden(data[window.csrf_token]); - }) - ) - .then( - fetch(domain + "/presupuestos/presupuestoacabados/edit/" + id , { - method: "POST", - body: JSON.stringify(Object.assign({datos: datosAcabado}, window.token_ajax)), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - yeniden(data[window.csrf_token]); - }) - ) - .then( - fetch(domain + "/presupuestos/presupuestopreimpresiones/edit/" + id , { - method: "POST", - body: JSON.stringify(Object.assign({datos: datosPreimpresion}, window.token_ajax)), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - yeniden(data[window.csrf_token]); - }) - ) - - .then( - fetch(domain + "/presupuestos/presupuestoserviciosextra/edit/" + id , { - method: "POST", - body: JSON.stringify(Object.assign({datos: datosServiciosExtra}, window.token_ajax)), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - yeniden(data[window.csrf_token]); - }) - ) -} - - -/**************************************************************************************** - * Seccion para los servicios de acabado - ***************************************************************************************/ -var tableServiciosAcabado = new DataTable('#tableOfServiciosAcabado',{ - scrollX: true, - searching: false, - paging: false, - info: false, - ordering: false, - responsive: true, - select: false, - language: { - url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" - }, -}); - -tableServiciosAcabado.on('draw', function(){ - - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) -}) - -function init_servicio_acabado(){ - - $('#add_servicio_acabado_list').select2({ - allowClear: false, - minimumResultsForSearch: -1, - placeholder: window.Presupuestos.servicioAcabadoList - }) - - window.serviciosacabadosList.forEach((element) =>{ - - nombre_completo = element.nombre - if (element.cubierta == 1){ - nombre_completo += ' (' + window.Presupuestos.cubierta + ')' - } - else if (element.sobrecubierta == 1){ - nombre_completo += ' (' + window.Presupuestos.sobrecubierta + ')' - } - - var precio_unidad = parseFloat(element.precio_unidad).toFixed(2) - var margen = parseFloat(element.margen).toFixed(2) - var precio_unidad_coste = (precio_unidad/(1+margen/100)).toFixed(2) - - tableServiciosAcabado.row.add([ - element.tarifa_acabado_id, - nombre_completo, - '', - '' + precio_unidad_coste + ' / ' + precio_unidad + '', - '', - '', - '' - ]).draw(false) - - $('#proveedor_acabado_' + element.tarifa_acabado_id).select2({ - allowClear: false, - minimumResultsForSearch: -1, - ajax: { - url: window.routes_servicios.menuItemsOfPresupuestoAcabados, - type: 'post', - dataType: 'json', - - data: function (params) { - - if(parseInt($('#tirada').val())>0){ - var tirada = parseInt($('#tirada').val()) - } - else{ - var tirada = 0 - } - - var return_data = { - tarifa_id: element.tarifa_acabado_id, - tirada: tirada, - }; - return_data = Object.assign(return_data, window.token_ajax); - - return return_data; - }, - delay: 60, - processResults: function (response) { - yeniden(response[window.csrf_token]); - return { - results: response.menu - }; - }, - cache: true - } - }); - $('#proveedor_acabado_' + element.tarifa_acabado_id).on('change', select_acabado_event) - - - $('#precio_total_acabado_' + element.tarifa_acabado_id).on('change', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) - }) - - }) - - check_serv_acabado_error() -} - -function select_acabado_event(){ - - if(parseInt($('#tirada').val())>0){ - var tirada = parseInt($('#tirada').val()) - } - else{ - var tirada = 0 - } - - var tarifa_id = null; - if(this.id.includes('proveedor_acabado')){ - tarifa_id = this.id.split('_')[2]; - } - else{ - tarifa_id = this.id.split('_')[1]; - } - - var datos = { - tarifa_acabado_id: tarifa_id, - tirada: tirada, - proveedor_id: parseInt($('#proveedor_acabado_' + tarifa_id).select2('data')[0].id), - POD: parseInt($('#POD').val()) - }; - datos = Object.assign(datos, window.token_ajax); - - $.ajax({ - type: "POST", - url: window.routes_servicios.dataTableOfPresupuestoAcabados, - data: datos, - success: function (data) { - - var precio_unidad = parseFloat(data.values[0].precio_unidad).toFixed(2) - var margen = parseFloat(data.values[0].margen).toFixed(2) - var precio_unidad_coste = (precio_unidad/(1+margen/100)).toFixed(2) - - $('#precio_unidad_acabado_' + datos.tarifa_acabado_id).text(precio_unidad_coste + ' / ' + precio_unidad) - $('#precio_total_acabado_' + datos.tarifa_acabado_id).val(parseFloat(data.values[0].total).toFixed(2)) - $('#acabado_margen_' + datos.tarifa_acabado_id).val(margen) - - yeniden(data[window.csrf_token]); - return true; - }, - error: function(e){ - return false; - } - }) - return false; -} - -function check_serv_acabado_error(){ - - var htmlString = ''; - - $('#tableOfServiciosAcabado tr').each(function(){ - if($(this).find('td').eq(2).text() == '0.00'){ - htmlString = ` - `; - } - }) - $('#serv-acabado-error').html(htmlString) -} - -function get_tarifas_acabado(tarifa_id = -1, uso=null){ - - if(parseInt($('#tirada').val())>0){ - var tirada = parseInt($('#tirada').val()) - } - else{ - var tirada = 0 - } - - var datos = { - tarifa_acabado_id : tarifa_id, - tirada: tirada, - POD: parseInt($('#POD').val()) - }; - datos = Object.assign(datos, window.token_ajax) - - - $.ajax({ - type: "POST", - url: window.routes_servicios.dataTableOfPresupuestoAcabados, - data: datos, - success: function (data) { - - data.values.forEach((row) => { - - nombre = row.tarifa_nombre - if(uso!= null) - nombre += ' (' + uso + ')' - - var precio_unidad = parseFloat(row.precio_unidad).toFixed(2) - var margen = parseFloat(row.margen).toFixed(2) - var precio_unidad_coste = (precio_unidad/(1+margen/100)).toFixed(2) - - tableServiciosAcabado.row.add([ - row.tarifa_id, - nombre, - '', - '' + precio_unidad_coste + ' / ' + precio_unidad + '', - '', - '', - '' - ]).draw(false) - - $('#precio_total_acabado_' + row.tarifa_id).on('change', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) - }) - - - - $('#proveedor_acabado_' + row.tarifa_id).select2({ - allowClear: false, - minimumResultsForSearch: -1, - ajax: { - url: window.routes_servicios.menuItemsOfPresupuestoAcabados, - type: 'post', - dataType: 'json', - - data: function (params) { - - if(parseInt($('#tirada').val())>0){ - var tirada = parseInt($('#tirada').val()) - } - else{ - var tirada = 0 - } - - var return_data = { - tarifa_id: row.tarifa_id, - tirada: tirada, - }; - return_data = Object.assign(return_data, window.token_ajax); - - return return_data; - }, - delay: 60, - processResults: function (response) { - yeniden(response[window.csrf_token]); - return { - results: response.menu - }; - }, - cache: true - } - }); - $('#proveedor_acabado_' + row.tarifa_id).on('change', select_acabado_event) - }); - - check_serv_acabado_error() - yeniden(data[window.csrf_token]); - return true; - }, - error: function(e){ - return false; - } - }) - return false; -} - -function servicioRetractilado(){ - if($('#retractilado').prop('checked')){ - $('#add_servicio_acabado_list').val(window.serviciosAutomaticos.retractilado) - $('#insertar_serv_acabado').click() - } - else{ - var row_indexes = tableServiciosAcabado.rows().eq( 0 ).filter( function (rowIdx) { - return tableServiciosAcabado.cell( rowIdx, 0 ).data() == window.serviciosAutomaticos.retractilado ? true : false; - } ); - if(row_indexes.length > 0){ - tableServiciosAcabado.row(row_indexes[0]).remove().draw() - check_serv_acabado_error() - } - } -} - -function servicioRetractilado5(){ - if($('#retractilado5').prop('checked')){ - $('#add_servicio_acabado_list').val(window.serviciosAutomaticos.retractilado5) - $('#insertar_serv_acabado').click() - } - else{ - var row_indexes = tableServiciosAcabado.rows().eq( 0 ).filter( function (rowIdx) { - return tableServiciosAcabado.cell( rowIdx, 0 ).data() == window.serviciosAutomaticos.retractilado5 ? true : false; - } ); - if(row_indexes.length > 0){ - tableServiciosAcabado.row(row_indexes[0]).remove().draw() - check_serv_acabado_error() - } - } -} - -function servicioFajaColor(){ - if($('#fajaColor').prop('checked')){ - $('#add_servicio_acabado_list').val(window.serviciosAutomaticos.fajaColor) - $('#insertar_serv_acabado').click() - } - else{ - var row_indexes = tableServiciosAcabado.rows().eq( 0 ).filter( function (rowIdx) { - return tableServiciosAcabado.cell( rowIdx, 0 ).data() == window.serviciosAutomaticos.fajaColor ? true : false; - } ); - if(row_indexes.length > 0){ - tableServiciosAcabado.row(row_indexes[0]).remove().draw() - check_serv_acabado_error() - } - } -} - -$('#insertar_serv_acabado').on('click', function(){ - const tarifa_text = $('#add_servicio_acabado_list').select2('data')[0].text.trim(); - - if(tarifa_text.length > 0){ - var table = $("#tableOfServiciosAcabado").DataTable(); - var rows = table.rows().data().toArray(); - var found = rows.some(row => row[1] === tarifa_text); - - if(!found) - get_tarifas_acabado($('#add_servicio_acabado_list').select2('data')[0].id); - else - popErrorAlert(window.Presupuestos.errores.error_servicios_duplicados, 'serv-acabado-alert'); - } - check_serv_acabado_error(); - showBreadCrumbSaveButton(true); - -}) - - -function insertar_acabado_exterior($servicio_id, $uso=""){ - - const tarifa_text = '(' +$uso + ')' - - var tablaAcabados = $("#tableOfServiciosAcabado").DataTable() - tablaAcabados.rows().every(function () { - var data = this.data(); - if(data[1].includes(tarifa_text)){ - this.remove().draw(false); - } - }) - - get_tarifas_acabado($servicio_id, $uso); - tablaAcabados.draw(); - check_serv_acabado_error() -} - -function get_datos_acabado(){ - - var datosAcabado = [] - if($('#tableOfServiciosAcabado').DataTable().rows().count()>0){ - $("#tableOfServiciosAcabado tr").each(function (index,tr) { - var values = {} - $(this).find("td").each(function (index2) { - - switch (index2) { - case 0: - values['tarifa_id'] = $(this).text() - break - case 1: - if($(this).text().includes(window.Presupuestos.cubierta)) - values['cubierta'] = 1 - else - values['cubierta'] = 0 - if($(this).text().includes(window.Presupuestos.sobrecubierta)) - values['sobrecubierta'] = 1 - else - values['sobrecubierta'] = 0 - break - case 2: - values['proveedor_id'] = $(this).children(":first").select2('data')[0].id - break - case 3: - values['precio_unidad'] = $(this).text().split('/')[1].trim() - break - case 4: - values['precio_total'] = $(this).children(":first").val() - break - case 5: - values['margen'] = $(this).text() - break - } - }) - if(Object.keys(values).length>0) - datosAcabado.push(values) - }) - } - return datosAcabado -} - - -async function get_servAcabados_tiradasAlternativas(tirada){ - - const url = window.location.href; - const url_parts = url.split('/'); - var id = -1; - if(url_parts[url_parts.length-2] == 'edit'){ - id = url_parts[url_parts.length-1]; - } - - var serviciosAcabados ={ - coste: 0.0, - margen: 0.0, - } - var json_data = { - datos: get_datos_acabado(), - tirada: parseInt(tirada), - POD: $('#POD').val() - } - if(json_data.datos.length>0){ - - json_data = Object.assign(json_data, window.token_ajax); - - await fetch(window.location.origin + "/presupuestos/presupuestoacabados/update/" + id , { - method: "POST", - body: JSON.stringify(json_data), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - - //const values = await response.json(); - yeniden(data[window.csrf_token]); - data.lines.forEach((line) => { - serviciosAcabados.coste += parseFloat(line[0].total); - serviciosAcabados.margen += parseFloat(line[0].total)*parseFloat(line[0].margen)/100.0; - }); - - }); - } - return serviciosAcabados; -} - - -/**************************************************************************************** - * Seccion para los servicios de encuadernación - ***************************************************************************************/ -var tableServiciosEnc = new DataTable('#tableOfServiciosEncuadernacion',{ - scrollX: true, - searching: false, - paging: false, - info: false, - ordering: false, - responsive: true, - select: false, - language: { - url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" - }, - -}); - -tableServiciosEnc.on('draw', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) -}) - -function init_servicio_encuadernado(){ - - - $('#add_servicio_enc_list').select2({ - allowClear: false, - minimumResultsForSearch: -1, - placeholder: window.Presupuestos.servicioEncuadernadoList - }) - - window.serviciosencuadernadosList.forEach((element) =>{ - - const tarifa_id = element.tarifa_encuadernado_id - var proveedor_nombre = element.proveedor===null? window.Presupuestos.no_disponible: element.proveedor - - var precio_unidad = parseFloat(element.precio_unidad).toFixed(2) - var margen = parseFloat(element.margen).toFixed(0) - var precio_unidad_coste = (precio_unidad/(1+margen/100)).toFixed(2) - - var linea = [ - element.tarifa_encuadernado_id, - element.nombre, - '', - '' + precio_unidad_coste + ' / ' + precio_unidad + '', - (element.hasOwnProperty('paginas_por_cuadernillo') && element.paginas_por_cuadernillo!=null)?selectForCuadernillos(element.tarifa_encuadernado_id, element.paginas_por_cuadernillo):'', - '' + convertirTiempo(element.tiempo) + '', - '', - '', - '' - ] - - tableServiciosEnc.row.add(linea).draw(false) - - $('#precio_total_encuadernado_' + element.tarifa_encuadernado_id).on('change', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) - }) - - $('#proveedor_enc_' + element.tarifa_encuadernado_id).select2({ - allowClear: false, - minimumResultsForSearch: -1, - ajax: { - url: window.routes_servicios.menuItemsOfPresupuestoEncuadernaciones, - type: 'post', - dataType: 'json', - - data: function (params) { - - const dimension = getDimensionLibro(); - - if(parseInt($('#tirada').val())>0){ - var tirada = parseInt($('#tirada').val()) - } - else{ - var tirada = 0 - } - - var return_data = { - tarifa_id: tarifa_id, - paginas: parseInt($('#paginas').val())>0?parseInt($('#paginas').val()):0, - tirada: tirada, - ancho: dimension.ancho, - alto: dimension.alto, - searchtxt: params.term, // search term - }; - return_data = Object.assign(return_data, window.token_ajax); - - return return_data; - }, - delay: 60, - processResults: function (response) { - yeniden(response[window.csrf_token]); - return { - results: response.menu - }; - }, - cache: true - } - }); - $('#proveedor_enc_' + element.tarifa_encuadernado_id).on('change', select_enc_event) - - if(element.hasOwnProperty('paginas_por_cuadernillo') && element.paginas_por_cuadernillo!=null){ - - $('#cuadernillos_' + element.tarifa_encuadernado_id).select2({ - allowClear: false, - minimumResultsForSearch: -1, - }); - - $('#cuadernillos_' + element.tarifa_encuadernado_id).on('change', select_enc_event) - } - - }); - check_serv_enc_error() - -} - -function selectForCuadernillos(tarifa_id, select_value){ - const value_list = [32, 28, 24, 20, 16]; - var string = - ''; - return string; -} - -function convertirTiempo(horas){ - if(horas != null){ - if(parseFloat(horas)>0){ - const seconds = parseFloat(horas) * 3600; - // se convierte a formato hh:mm:ss - const h = Math.floor(seconds / 3600); - const minutos = Math.floor((seconds % 3600) / 60); - const segundos = Math.round(seconds % 60, 0); - return h + ':' + minutos + ':' + segundos; - } - else{ - return ""; - } - - } - else{ - return ""; - } -} - -function select_enc_event(){ - - const dimension = getDimensionLibro(); - - if(parseInt($('#tirada').val())>0){ - var tirada = parseInt($('#tirada').val()) - } - else{ - var tirada = 0 - } - - var tarifa_id = null; - if(this.id.includes('proveedor_enc')){ - tarifa_id = this.id.split('_')[2]; - } - else{ - tarifa_id = this.id.split('_')[1]; - } - // se checkea si el elemento #cuadernillos_ + tarifa_id existe - var paginas_por_cuadernillo = null; - if($('#cuadernillos_' + tarifa_id).length){ - paginas_por_cuadernillo = parseInt($('#cuadernillos_' + tarifa_id).select2('data')[0].id); - } - - var datos = { - tarifa_encuadernacion_id: tarifa_id, - paginas: parseInt($('#paginas').val())>0?parseInt($('#paginas').val()):0, - tirada: tirada, - ancho: dimension.ancho, - alto: dimension.alto, - paginas_por_cuadernillo: paginas_por_cuadernillo, - proveedor_id: parseInt($('#proveedor_enc_' + tarifa_id).select2('data')[0].id), - POD: parseInt($('#POD').val()) - }; - datos = Object.assign(datos, window.token_ajax); - - $.ajax({ - type: "POST", - url: window.routes_servicios.dataTableOfPresupuestoEncuadernaciones, - data: datos, - success: function (data) { - - var precio_unidad = parseFloat(data.values[0].precio_unidad).toFixed(2) - var margen = parseFloat(data.values[0].margen).toFixed(0) - var precio_unidad_coste = (precio_unidad/(1+margen/100)).toFixed(2) - - $('#precio_unidad_encuadernado_' + datos.tarifa_encuadernacion_id).text(precio_unidad_coste + ' / ' + precio_unidad) - $('#tiempo_encuadernado_' + datos.tarifa_encuadernacion_id).text(convertirTiempo(data.values[0].tiempo)) - $('#precio_total_encuadernado_' + datos.tarifa_encuadernacion_id).val(parseFloat(data.values[0].total).toFixed(2)) - $('#enc_margen_' + datos.tarifa_encuadernacion_id).val(margen) - - yeniden(data[window.csrf_token]); - return true; - }, - error: function(e){ - return false; - } - }) - return false; -} - - -function check_serv_enc_error(){ - - var htmlString = ''; - - $('#tableOfServiciosEncuadernacion tr').each(function(){ - if($(this).find('td').eq(3).text() == '0.00'){ - htmlString = ` - `; - } - }) - $('#serv-enc-error').html(htmlString) -} - - -async function get_tarifas_enc(tipo=null, tarifa_id = -1){ - const dimension = getDimensionLibro(); - - if(parseInt($('#tirada').val())>0){ - var tirada = parseInt($('#tirada').val()) - } - else{ - var tirada = 0 - } - - var datos = { - tarifa_encuadernacion_id : tarifa_id, - tirada: tirada, - paginas: parseInt($('#paginas').val())>0?parseInt($('#paginas').val()):0, - ancho: dimension.ancho, - alto: dimension.alto, - POD: parseInt($('#POD').val()) - }; - datos = Object.assign(datos, window.token_ajax) - - if(tipo != null){ - datos['tipo'] = tipo; - datos['tipo_impresion_id'] = parseInt($('#tipo_impresion_id').val()) - } - - $.ajax({ - type: "POST", - url: window.routes_servicios.dataTableOfPresupuestoEncuadernaciones, - data: datos, - success: function (data) { - - if(tipo=='default') - tableServiciosEnc.clear().draw() - - data.values.forEach((row) => { - - var precio_unidad = parseFloat(row.precio_unidad).toFixed(2) - var margen = parseFloat(row.margen).toFixed(0) - var precio_unidad_coste = (precio_unidad/(1+margen/100)).toFixed(2) - - tableServiciosEnc.row.add([ - row.tarifa_id, - row.tarifa_nombre, - '', - '' + precio_unidad_coste + ' / ' + precio_unidad + '', - (row.hasOwnProperty('paginas_por_cuadernillo') && row.paginas_por_cuadernillo!=null)?selectForCuadernillos(row.tarifa_id, 32):'', - '' + convertirTiempo(row.tiempo) + '', - '', - '', - '' - ]).draw(false) - - $('#precio_total_encuadernado_' + row.tarifa_id).on('change', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) - }) - - $('#proveedor_enc_' + row.tarifa_id).select2({ - allowClear: false, - minimumResultsForSearch: -1, - ajax: { - url: window.routes_servicios.menuItemsOfPresupuestoEncuadernaciones, - type: 'post', - dataType: 'json', - - data: function (params) { - - if( parseInt( $('#tirada').val() )>0){ - var tirada = parseInt($('#tirada').val()) - } - else{ - var tirada = 0 - } - - var return_data = { - tarifa_id: row.tarifa_id, - paginas: parseInt($('#paginas').val())>0?parseInt($('#paginas').val()):0, - tirada: tirada, - ancho: dimension.ancho, - alto: dimension.alto, - searchtxt: params.term, // search term - } - return_data = Object.assign(return_data, window.token_ajax); - return return_data; - }, - delay: 60, - processResults: function (response) { - yeniden(response[window.csrf_token]); - return { - results: response.menu - }; - }, - cache: true - } - }); - - $('#proveedor_enc_' + row.tarifa_id).on('change', select_enc_event) - - - if(row.hasOwnProperty('paginas_por_cuadernillo') && row.paginas_por_cuadernillo!=null){ - $('#cuadernillos_' + row.tarifa_id).select2({ - allowClear: false, - minimumResultsForSearch: -1, - }); - - $('#cuadernillos_' + row.tarifa_id).on('change', select_enc_event) - } - }); - check_serv_enc_error() - yeniden(data[window.csrf_token]); - return true; - }, - error: function(e){ - return false; - } - }) - return false; -} - - -$('#insertar_serv_enc').on('click', function(){ - const tarifa_text = $('#add_servicio_enc_list').select2('data')[0].text.trim() - - if( $('#add_servicio_enc_list').select2('data')[0].text.trim().length > 0){ - if($('#tableOfServiciosEncuadernacion tr > td:contains(' + tarifa_text + ')').length == 0) - get_tarifas_enc('tarifa', $('#add_servicio_enc_list').select2('data')[0].id); - else{ - popErrorAlert(window.Presupuestos.errores.error_servicios_duplicados, 'serv-enc-alert') - } - } - check_serv_enc_error() -}) - - -function get_datos_encuadernacion(){ - - var datosEnc = [] - if($("#tableOfServiciosEncuadernacion").DataTable().rows().count()>0){ - $("#tableOfServiciosEncuadernacion tr").each(function (index,tr) { - var values = {} - $(this).find("td").each(function (index2) { - - switch (index2) { - case 0: - values['tarifa_id'] = $(this).text() - break - case 2: - values['proveedor_id'] = $(this).children(":first").select2('data')[0].id - break - case 3: - values['precio_unidad'] = $(this).text().split('/')[1].trim() - break - case 4: - values['paginas_por_cuadernillo'] = $(this).children(":first").val() - // Si el valor es "undefined" se pone a null - if(values['paginas_por_cuadernillo'] == "undefined") - values['paginas_por_cuadernillo'] = null - case 5: - values['tiempo'] = $(this).text() - // se pasa el string hh:mm:ss a horas - if(values['tiempo'] != null) - values['tiempo'] = parseInt(values['tiempo'].split(':')[0]) + parseInt(values['tiempo'].split(':')[1])/60 + parseInt(values['tiempo'].split(':')[2])/3600 - break - case 6: - values['precio_total'] = $(this).children(":first").val() - break - case 7: - values['margen'] = $(this).text() - break - } - }) - if(Object.keys(values).length>0) - datosEnc.push(values) - }) - } - - return datosEnc -} - - -async function get_servEncuadernacion_tiradasAlternativas(tirada, paginas, ancho, alto){ - - const url = window.location.href; - const url_parts = url.split('/'); - var id = -1; - if(url_parts[url_parts.length-2] == 'edit'){ - id = url_parts[url_parts.length-1]; - } - - var serviciosEncuadernacion ={ - coste: 0.0, - margen: 0.0, - } - - var json_data = { - datos: get_datos_encuadernacion(), - tirada: parseInt(tirada), - paginas: parseInt(paginas), - ancho: ancho, - alto: alto, - POD: $('#POD').val() - } - - if(json_data.datos.length>0){ - json_data = Object.assign(json_data, window.token_ajax); - - await fetch(window.location.origin + "/presupuestos/presupuestoencuadernaciones/update/" + id , { - method: "POST", - body: JSON.stringify(json_data), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - - //const values = await response.json(); - yeniden(data[window.csrf_token]); - data.lines.forEach((line) => { - serviciosEncuadernacion.coste += parseFloat(line[0].total); - serviciosEncuadernacion.margen += parseFloat(line[0].total)*parseFloat(line[0].margen)/100.0; - }); - - }); - } - return serviciosEncuadernacion; - -} - - -/**************************************************************************************** - * Seccion para los servicios de manipulado - ***************************************************************************************/ -var tableServiciosManipulado = new DataTable('#tableOfServiciosManipulado',{ - scrollX: true, - searching: false, - paging: false, - info: false, - ordering: false, - responsive: true, - select: false, - language: { - url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" - }, -}); - -tableServiciosManipulado.on('draw', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) -}) - -function init_servicio_manipulado(){ - - $('#add_servicio_manipulado_list').select2({ - allowClear: false, - minimumResultsForSearch: -1, - placeholder: window.Presupuestos.servicioManipuladoList - }) - - window.serviciosmanipuladoList.forEach((element) =>{ - - var precio_unidad = parseFloat(element.precio_unidad).toFixed(2) - var margen = parseFloat(element.margen).toFixed(0) - var precio_unidad_coste = (precio_unidad/(1+margen/100)).toFixed(2) - - tableServiciosManipulado.row.add([ - element.tarifa_manipulado_id, - element.nombre, - '' + precio_unidad_coste + ' / ' + precio_unidad + '', - '', - '', - '' - ]).draw(false) - - $('#precio_total_manipulado_' + element.tarifa_manipulado_id).on('change', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) - }) - - }) - check_serv_manipulado_error() -} - -function check_serv_manipulado_error(){ - - var htmlString = ''; - - $('#tableOfServiciosManipulado tr').each(function(){ - if($(this).find('td').eq(2).text() == '0.00'){ - htmlString = ` - `; - } - }) - $('#serv-manipulado-error').html(htmlString) -} - -async function get_tarifas_manipulado(tipo=null, tarifa_id = -1){ - - if(parseInt($('#tirada').val())>0){ - var tirada = parseInt($('#tirada').val()) - } - else{ - var tirada = 0 - } - - var datos = { - tarifa_manipulado_id : tarifa_id, - tirada: tirada, - POD: parseInt($('#POD').val()) - }; - datos = Object.assign(datos, window.token_ajax) - - if(tipo != null){ - datos['tipo'] = tipo; - datos['solapas'] = $('#solapas').is(':checked')?1:0; - datos['tipo_impresion_id'] = parseInt($('#tipo_impresion_id').val()); - } - - - - $.ajax({ - type: "POST", - url: window.routes_servicios.dataTableOfPresupuestoManipulados, - data: datos, - success: function (data) { - - if(tipo=='default') - tableServiciosManipulado.clear().draw() - - data.values.forEach((row) => { - - var precio_unidad = parseFloat(row.precio_unidad).toFixed(2) - var margen = parseFloat(row.margen).toFixed(0) - var precio_unidad_coste = (precio_unidad/(1+margen/100)).toFixed(2) - - tableServiciosManipulado.row.add([ - row.tarifa_id, - row.tarifa_nombre, - '' + precio_unidad_coste + ' / ' + precio_unidad + '', - '', - '', - '' - ]).draw(false) - - $('#precio_total_manipulado_' + row.tarifa_id).on('change', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) - }) - }); - check_serv_manipulado_error() - yeniden(data[window.csrf_token]); - return true; - }, - error: function(e){ - return false; - } - }) - return false; -} - -$('#insertar_serv_manipulado').on('click', function(){ - const tarifa_text = $('#add_servicio_manipulado_list').select2('data')[0].text.trim() - - if( $('#add_servicio_manipulado_list').select2('data')[0].text.trim().length > 0){ - if($('#tableOfServiciosManipulado tr > td:contains(' + tarifa_text + ')').length == 0){ - get_tarifas_manipulado(null, $('#add_servicio_manipulado_list').select2('data')[0].id); - } - else{ - popErrorAlert(window.Presupuestos.errores.error_servicios_duplicados, 'serv-manipulado-alert') - } - } - check_serv_manipulado_error() -}) - - -function servicioGuardas(add_service = false){ - if(add_service){ - $('#add_servicio_manipulado_list').val(window.serviciosAutomaticos.plegadoGuardas) - $('#insertar_serv_manipulado').click() - } - else{ - var row_indexes = tableServiciosManipulado.rows().eq( 0 ).filter( function (rowIdx) { - return tableServiciosManipulado.cell( rowIdx, 0 ).data() == window.serviciosAutomaticos.plegadoGuardas ? true : false; - } ); - if(row_indexes.length > 0){ - tableServiciosManipulado.row(row_indexes[0]).remove().draw() - check_serv_manipulado_error() - } - } -} - -function get_datos_manipulado(){ - - var datosManipulado = [] - if($("#tableOfServiciosManipulado").DataTable().rows().count()>0){ - - $("#tableOfServiciosManipulado tr").each(function (index,tr) { - var values = {} - $(this).find("td").each(function (index2) { - - switch (index2) { - case 0: - values['tarifa_id'] = $(this).text() - break - case 2: - values['precio_unidad'] = $(this).text().split('/')[1].trim() - break - case 3: - values['precio_total'] = $(this).children(":first").val() - break - case 4: - values['margen'] = $(this).text() - break - } - }) - if(Object.keys(values).length>0) - datosManipulado.push(values) - }) - } - - return datosManipulado -} - - -async function get_servManipulado_tiradasAlternativas(tirada){ - - const url = window.location.href; - const url_parts = url.split('/'); - var id = -1; - if(url_parts[url_parts.length-2] == 'edit'){ - id = url_parts[url_parts.length-1]; - } - - var serviciosManipulado ={ - coste: 0.0, - margen: 0.0, - } - var json_data = { - datos: get_datos_manipulado(), - tirada: parseInt(tirada), - POD: $('#POD').val() - } - if(json_data.datos.length>0){ - json_data = Object.assign(json_data, window.token_ajax); - - await fetch(window.location.origin + "/presupuestos/presupuestomanipulados/update/" + id , { - method: "POST", - body: JSON.stringify(json_data), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - //const values = await response.json(); - yeniden(data[window.csrf_token]); - data.lines.forEach((line) => { - serviciosManipulado.coste += parseFloat(line[0].total); - serviciosManipulado.margen += parseFloat(line[0].total)*parseFloat(line[0].margen)/100.0; - }); - - }); - } - return serviciosManipulado; -} - -/**************************************************************************************** - * Seccion para los servicios de preimpresión - ***************************************************************************************/ -var tableServiciosPreimpresion = new DataTable('#tableOfServiciosPreimpresion',{ - scrollX: true, - searching: false, - paging: false, - info: false, - ordering: false, - responsive: true, - select: false, - language: { - url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" - } -}); - -tableServiciosPreimpresion.on('draw', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) -}) - - -function init_servicio_preimpresion(){ - - - $('#add_servicio_preimpresion_list').select2({ - allowClear: false, - minimumResultsForSearch: -1, - placeholder: window.Presupuestos.servicioPreimpresionList - }) - - window.serviciospreimpresionList.forEach((element) =>{ - - var precio = parseFloat(element.precio).toFixed(2) - var margen = parseFloat(element.margen).toFixed(2) - var coste = (precio/(1+margen/100)).toFixed(2) - - tableServiciosPreimpresion.row.add([ - element.tarifa_preimpresion_id, - element.nombre, - '' + coste + '', - '', - '', - '' - ]).draw(false) - - $('#precio_preimpresion_' + element.tarifa_preimpresion_id).on('change', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) - }) - - }) - check_serv_preimpresion_error() -} - -function check_serv_preimpresion_error(){ - - var htmlString = ''; - - $('#tableOfServiciosPreimpresion tr').each(function(){ - - if(parseFloat($(this).find('td:eq(2) input').val()) == '0'){ - htmlString = ` - `; - } - }) - $('#serv-preimpresion-error').html(htmlString) -} - -function get_tarifas_preimpresion(tarifa_id = -1){ - - var datos = { - tarifa_preimpresion_id : tarifa_id, - }; - datos = Object.assign(datos, window.token_ajax) - - - $.ajax({ - type: "POST", - url: window.routes_servicios.dataTableOfPresupuestoPreimpresion, - data: datos, - success: function (data) { - - data.values.forEach((row) => { - - var precio = parseFloat(row.precio).toFixed(2) - var margen = parseFloat(row.margen).toFixed(2) - var coste = (precio/(1+margen/100)).toFixed(2) - - tableServiciosPreimpresion.row.add([ - row.tarifa_id, - row.tarifa_nombre, - '' + coste + '', - '', - '', - '' - ]).draw(false) - - $('#precio_preimpresion_' + row.tarifa_id).on('change', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) - }) - - }); - check_serv_preimpresion_error() - yeniden(data[window.csrf_token]); - return true; - }, - error: function(e){ - return false; - } - }) - return false; -} - - -function servicioPrototipo(){ - if($('#prototipo').prop('checked')){ - $('#add_servicio_extra_list').val(serviciosAutomaticos.prototipo) - $('#insertar_serv_extra').click() - } - else{ - var row_indexes = tableServiciosExtra.rows().eq( 0 ).filter( function (rowIdx) { - return tableServiciosExtra.cell( rowIdx, 0 ).data() == serviciosAutomaticos.prototipo ? true : false; - } ); - if(row_indexes.length > 0){ - tableServiciosExtra.row(row_indexes[0]).remove().draw() - check_serv_preimpresion_error() - } - } -} - -function servicioFerro(){ - var row_indexes = tableServiciosExtra.rows().eq( 0 ).filter( function (rowIdx) { - return tableServiciosExtra.cell( rowIdx, 0 ).data() == serviciosAutomaticos.ferro ? true : false; - } ); - if($('#ferro').prop('checked')){ - if(row_indexes.length == 0){ - $('#add_servicio_extra_list').val(serviciosAutomaticos.ferro) - $('#insertar_serv_extra').click() - } - } - else{ - if(row_indexes.length > 0){ - tableServiciosExtra.row(row_indexes[0]).remove().draw() - check_serv_extra_error() - } - } -} - -$('#insertar_serv_preimpresion').on('click', function(){ - - let data = $('#add_servicio_preimpresion_list').select2('data'); - if (data.length > 0) { - const tarifa_text = data[0].text.trim(); - if (tarifa_text.length > 0) { - if ($('#tableOfServiciosPreimpresion tr > td:contains(' + tarifa_text + ')').length == 0) - get_tarifas_preimpresion(data[0].id); - else { - popErrorAlert(window.Presupuestos.errores.error_servicios_duplicados, 'serv-preimpresion-alert'); - } - } - } - check_serv_preimpresion_error() -}) - - -function get_datos_preimpresion(){ - - var datosPreimpresion = [] - if($("#tableOfServiciosPreimpresion").DataTable().rows().count()>0){ - - $("#tableOfServiciosPreimpresion tr").each(function (index,tr) { - var values = {} - $(this).find("td").each(function (index2) { - - switch (index2) { - case 0: - values['tarifa_id'] = $(this).text() - break - case 3: - values['precio'] = $(this).children(":first").val() - break - case 4: - values['margen'] = $(this).text() - break - } - }) - if(Object.keys(values).length>0) - datosPreimpresion.push(values) - }) - } - - return datosPreimpresion -} - - -async function get_servPreimpresion_tiradasAlternativas(){ - - const url = window.location.href; - const url_parts = url.split('/'); - var id = -1; - if(url_parts[url_parts.length-2] == 'edit'){ - id = url_parts[url_parts.length-1]; - } - - var serviciosPreimpresion ={ - coste: 0.0, - margen: 0.0, - } - var json_data = { - datos: get_datos_preimpresion(), - POD: $('#POD').val() - } - if(json_data.datos.length>0){ - - json_data = Object.assign(json_data, window.token_ajax); - - await fetch(window.location.origin + "/presupuestos/presupuestopreimpresiones/update/" + id , { - method: "POST", - body: JSON.stringify(json_data), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - //const values = await response.json(); - yeniden(data[window.csrf_token]); - data.lines.forEach((line) => { - serviciosPreimpresion.coste += parseFloat(line[0].precio); - serviciosPreimpresion.margen += parseFloat(line[0].precio)*parseFloat(line[0].margen)/100.0; - }); - - }); - } - return serviciosPreimpresion; -} - - - - - -/**************************************************************************************** - * Seccion para los servicios extra - ***************************************************************************************/ -var tableServiciosExtra = new DataTable('#tableOfServiciosExtra',{ - scrollX: true, - searching: false, - paging: false, - info: false, - ordering: false, - responsive: true, - select: false, - language: { - url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" - } -}); - -tableServiciosExtra.on('draw', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) -}) - -function init_servicio_extra(){ - - - $('#add_servicio_extra_list').select2({ - allowClear: false, - minimumResultsForSearch: -1, - placeholder: window.Presupuestos.servicioextraList - }) - - window.serviciosextraList.forEach((element) =>{ - - var precio = parseFloat(element.precio).toFixed(2) - var margen = parseFloat(element.margen).toFixed(2) - var coste = (precio/(1+margen/100)).toFixed(2) - - tableServiciosExtra.row.add([ - element.tarifa_extra_id, - element.nombre, - '' + coste + '', - '', - '', - '' - ]).draw(false) - - $('#precio_servicioextra_' + element.tarifa_extra_id).on('change', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) - }) - - }) - check_serv_extra_error() -} - -function check_serv_extra_error(){ - - var htmlString = ''; - - $('#tableOfServiciosExtra tr').each(function(){ - - if(parseFloat($(this).find('td:eq(2) input').val()) == '0'){ - htmlString = ` - `; - } - }) - $('#serv-preimpresion-error').html(htmlString) -} - -function get_tarifas_extra(tarifa_id = -1){ - - var datos = { - tarifa_extra_id : tarifa_id, - }; - datos = Object.assign(datos, window.token_ajax) - - - $.ajax({ - type: "POST", - url: window.routes_servicios.dataTableOfPresupuestoServiciosExtra, - data: datos, - success: function (data) { - - data.values.forEach((row) => { - - var precio = parseFloat(row.precio).toFixed(2) - var margen = parseFloat(row.margen).toFixed(2) - var coste = (precio/(1+margen/100)).toFixed(2) - - tableServiciosExtra.row.add([ - row.tarifa_id, - row.tarifa_nombre, - '' + coste + '', - '', - '', - '' - ]).draw(false) - - $('#precio_servicioextra_' + row.tarifa_id).on('change', function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) - }) - - }); - check_serv_extra_error() - yeniden(data[window.csrf_token]); - return true; - }, - error: function(e){ - return false; - } - }) - return false; -} - - -$('#insertar_serv_extra').on('click', function(){ - const tarifa_text = $('#add_servicio_extra_list').select2('data')[0].text.trim() - - if( $('#add_servicio_extra_list').select2('data')[0].text.trim().length > 0){ - if($('#tableOfServiciosExtra tr > td:contains(' + tarifa_text + ')').length == 0) - get_tarifas_extra($('#add_servicio_extra_list').select2('data')[0].id); - else{ - popErrorAlert(window.Presupuestos.errores.error_servicios_duplicados, 'serv-extra-alert') - } - } - check_serv_extra_error() -}) - - -function get_datos_serviciosextra(){ - - var datosServiciosExtra = [] - if($("#tableOfServiciosExtra").DataTable().rows().count()>0){ - - $("#tableOfServiciosExtra tr").each(function (index,tr) { - var values = {} - $(this).find("td").each(function (index2) { - - switch (index2) { - case 0: - values['tarifa_id'] = $(this).text() - break - case 3: - values['precio'] = $(this).children(":first").val() - break - case 4: - values['margen'] = $(this).text() - break - } - }) - if(Object.keys(values).length>0) - datosServiciosExtra.push(values) - }) - } - - return datosServiciosExtra; -} - - -async function get_servExtra_tiradasAlternativas(){ - - const url = window.location.href; - const url_parts = url.split('/'); - var id = -1; - if(url_parts[url_parts.length-2] == 'edit'){ - id = url_parts[url_parts.length-1]; - } - - var serviciosExtra ={ - coste: 0.0, - margen: 0.0, - } - var json_data = { - datos: get_datos_serviciosextra(), - POD: $('#POD').val() - } - if(json_data.datos.length>0){ - - json_data = Object.assign(json_data, window.token_ajax); - - await fetch(window.location.origin + "/presupuestos/presupuestoserviciosextra/update/" + id , { - method: "POST", - body: JSON.stringify(json_data), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - //const values = await response.json(); - yeniden(data[window.csrf_token]); - data.lines.forEach((line) => { - serviciosExtra.coste += parseFloat(line[0].precio); - serviciosExtra.margen += parseFloat(line[0].precio)*parseFloat(line[0].margen)/100.0; - }); - - }); - } - return serviciosExtra; -} - - -/**************************************************************************************** - * Seccion para "otros" - ***************************************************************************************/ -async function actualizar_servicios(update_preimpresion=false){ - - const domain = window.location.origin - const url = window.location.href; - const url_parts = url.split('/'); - var id = -1; - if(url_parts[url_parts.length-2] == 'edit'){ - id = url_parts[url_parts.length-1]; - } - - const dimension = getDimensionLibro(); - - if(parseInt($('#tirada').val())>0){ - var tirada = parseInt($('#tirada').val()) - } - else{ - var tirada = 0 - } - var paginas = parseInt($('#paginas').val())>0?parseInt($('#paginas').val()):0 - - var datos_json_acabados = { - datos: get_datos_acabado(), - tirada: tirada, - POD: parseInt($('#POD').val()), - } - datos_json_acabados = Object.assign(datos_json_acabados, window.token_ajax); - - var datos_json_encuadernacion = { - datos: get_datos_encuadernacion(), - tirada: tirada, - paginas: paginas, - ancho: dimension.ancho, - alto: dimension.alto, - POD: parseInt($('#POD').val()), - } - datos_json_encuadernacion = Object.assign(datos_json_encuadernacion, window.token_ajax); - - var datos_json_manipulado = { - datos: get_datos_manipulado(), - tirada: tirada, - POD: parseInt($('#POD').val()), - } - datos_json_manipulado = Object.assign(datos_json_manipulado, window.token_ajax); - - var datos_json_preimpresion = { - datos: get_datos_preimpresion(), - } - datos_json_preimpresion = Object.assign(datos_json_preimpresion, window.token_ajax); - - - var datos_json_serviciosextra = { - datos: get_datos_serviciosextra(), - } - datos_json_preimpresion = Object.assign(datos_json_preimpresion, window.token_ajax); - - fetch(domain + "/presupuestos/presupuestoacabados/update/" + id , { - method: "POST", - body: JSON.stringify(datos_json_acabados), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - data.lines.forEach((line) => { - - var precio_unidad = parseFloat(line[0].precio_unidad).toFixed(2) - var margen = parseFloat(line[0].margen).toFixed(0) - var precio_unidad_coste = (precio_unidad/(1+margen/100)).toFixed(2) - - $('#proveedor_acabado_' + line[0].tarifa_id).off('change') - if(line[0].hasOwnProperty('proveedor_id')){ - $('#proveedor_acabado_' + line[0].tarifa_id) - .append('') - } - else{ - $('#proveedor_acabado_' + line[0].tarifa_id).empty() - .append('') - } - $('#precio_unidad_acabado_' + line[0].tarifa_id).text(precio_unidad_coste + " / " + precio_unidad) - $('#precio_total_acabado_' + line[0].tarifa_id).val(parseFloat(line[0].total).toFixed(2)) - $('#acabado_margen_' + line[0].tarifa_id).text(margen) - $('#proveedor_acabado_' + line[0].tarifa_id).on('change', select_enc_event) - }); - check_serv_acabado_error() - yeniden(data[window.csrf_token]); - }).then( - - fetch(domain + "/presupuestos/presupuestoencuadernaciones/update/" + id , { - method: "POST", - body: JSON.stringify(datos_json_encuadernacion), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - data.lines.forEach((line) => { - - var precio_unidad = parseFloat(line[0].precio_unidad).toFixed(2) - var margen = parseFloat(line[0].margen).toFixed(0) - var precio_unidad_coste = (precio_unidad/(1+margen/100)).toFixed(2) - - $('#proveedor_enc_' + line[0].tarifa_id).off('change') - if(line[0].hasOwnProperty('proveedor_id')){ - $('#proveedor_enc_' + line[0].tarifa_id) - .append('') - } - else{ - $('#proveedor_enc_' + line[0].tarifa_id).empty() - .append('') - } - $('#precio_unidad_encuadernado_' + line[0].tarifa_id).text(precio_unidad_coste + " / " + precio_unidad) - $('#precio_total_encuadernado_' + line[0].tarifa_id).val(parseFloat(line[0].total).toFixed(2)) - $('#enc_margen_' + line[0].tarifa_id).val(margen) - $('#proveedor_enc_' + line[0].tarifa_id).on('change', select_enc_event) - }); - check_serv_enc_error() - yeniden(data[window.csrf_token]); - }).then( - fetch(domain + "/presupuestos/presupuestomanipulados/update/" + id , { - method: "POST", - body: JSON.stringify(datos_json_manipulado), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - data.lines.forEach((line) => { - - var precio_unidad = parseFloat(line[0].precio_unidad).toFixed(2) - var margen = parseFloat(line[0].margen).toFixed(0) - var precio_unidad_coste = (precio_unidad/(1+margen/100)).toFixed(2) - - $('#precio_unidad_manipulado_' + line[0].tarifa_id).text(precio_unidad_coste + " / " + precio_unidad) - $('#precio_total_manipulado_' + line[0].tarifa_id).val(parseFloat(line[0].total).toFixed(2)) - $('#manipulado_margen_' + line[0].tarifa_id).val(margen) - }); - check_serv_manipulado_error() - yeniden(data[window.csrf_token]); - }).then(function(){ - if(update_preimpresion){ - fetch(domain + "/presupuestos/presupuestopreimpresiones/update/" + id , { - method: "POST", - body: JSON.stringify(datos_json_preimpresion), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - - data.lines.forEach((line) => { - - var precio = parseFloat(line[0].total).toFixed(2) - var margen = parseFloat(line[0].margen).toFixed(2) - var coste = (precio/(1+margen/100)).toFixed(2) - - $('#coste_preimprecion_' + line[0].tarifa_id).text(coste) - $('#precio_preimpresion_' + line[0].tarifa_id).val(precio) - $('#preimpresion_margen_' + line[0].tarifa_id).val(margen) - }); - check_serv_preimpresion_error() - yeniden(data[window.csrf_token]); - }) - } - }).then(function(){ - if(update_preimpresion){ - fetch(domain + "/presupuestos/presupuestoserviciosextra/update/" + id , { - method: "POST", - body: JSON.stringify(datos_json_serviciosextra), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - .then(response => response.json()) - .then(data => { - - var precio = parseFloat(data[0].total).toFixed(2) - var margen = parseFloat(data[0].margen).toFixed(2) - var coste = (precio/(1+margen/100)).toFixed(2) - - data.lines.forEach((line) => { - $('#coste_servicioextra_' + line[0].tarifa_id).text(coste) - $('#precio_serviciosextra_' + line[0].tarifa_id).val(precio) - $('#serviciosextra_margen_' + line[0].tarifa_id).val(margen) - }); - check_serv_preimpresion_error(); - yeniden(data[window.csrf_token]); - }) - } - }) - ) - ) - -} - -function popAlert(message, alertClass, alertIcon, containerId = 'sk-alert'){ - var htmlString = ` - `; - if(containerId == 'sk-alert'){ - $(window).scrollTop(0); - } - $('#' + containerId).hide().empty().html(htmlString).fadeIn("slow", function(){ - setTimeout(function(){ - $('#' + containerId).fadeOut("slow"); - }, 5000); - }); -} diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.php index d6fbe850..aa8b93f3 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.php @@ -93,6 +93,8 @@ + + @@ -103,12 +105,6 @@
@@ -131,7 +127,7 @@ - + @@ -141,12 +137,6 @@
@@ -168,11 +158,11 @@ - + - + @@ -183,12 +173,6 @@
@@ -211,7 +195,7 @@ - + @@ -221,12 +205,6 @@
@@ -249,7 +227,7 @@ - + @@ -259,12 +237,6 @@
@@ -280,90 +252,3 @@
- - - -section("additionalInlineJs") ?> - - // Generación de la lista de servicios de acabado (id, nombre) - window.acabadosList = ; - window.serviciosacabadosList = ; - window.serviciosAutomaticos = ; - - window.serviciosencuadernadosList = ; - - window.serviciosmanipuladoList = ; - - window.serviciospreimpresionList = ; - - window.serviciosextraList = ; - - window.routes_servicios = { - dataTableOfPresupuestoAcabados: "", - menuItemsOfPresupuestoAcabados: '', - dataTableOfPresupuestoPreimpresion: "", - dataTableOfPresupuestoEncuadernaciones: "", - dataTableOfPresupuestoManipulados: "", - menuItemsOfPresupuestoEncuadernaciones: '', - dataTableOfPresupuestoServiciosExtra: "", - } - - init_servicio_acabado() - - init_servicio_encuadernado() - - init_servicio_manipulado() - - init_servicio_preimpresion() - - init_servicio_extra() - - /* ELIMINADO PARA COMPROBAR EL MAXIMO DE SOLAPAS DESDE EL BACKEND - PENDIENTE - $('.solapas_cubierta').on('change', function(){ - - const ancho_libro = getDimensionLibro().ancho; - - // ancho_libro*2 + lomo + solapas*2 <= 630 - const limite_1 = ((630 - ancho_libro*2 - getLomoLineasPresupuesto()) / 2.0).toFixed(1); - // solapas <= ancho_libro - 10 - const limite_2 = ancho_libro - 10; - const limite = Math.min(limite_1, limite_2); - - if(parseInt($('#solapas_ancho').val()) > limite){ - $('#solapas_ancho').val(limite) - asyncMessageDialog( - window.Presupuestos.advertencia, - window.Presupuestos.actualizacionSolapasCubierta, - function(){}); - } - - $('#compGramajeCubierta').trigger('change') - - }) - - - $('.solapas_sobrecubierta').on('change', function(){ - - const ancho_libro = getDimensionLibro().ancho; - - // ancho_libro*2 + lomo + solapas*2 <= 630 - const limite_1 = ((630 - ancho_libro*2 - getLomoLineasPresupuesto()) / 2.0).toFixed(1); - // solapas <= ancho_libro - 10 - const limite_2 = ancho_libro - 10; - const limite = Math.min(limite_1, limite_2); - - if(parseInt($('#solapas_ancho_sobrecubierta').val()) > limite){ - $('#solapas_ancho_sobrecubierta').val(limite) - asyncMessageDialog( - window.Presupuestos.advertencia, - window.Presupuestos.actualizacionSolapasSobrecubierta, - function(){}); - } - - $('#compGramajeSobrecubierta').trigger('change') - }) - - */ - -endSection() ?> diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_lineasPresupuestoItems.js b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_lineasPresupuestoItems.js deleted file mode 100644 index 185aacd1..00000000 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_lineasPresupuestoItems.js +++ /dev/null @@ -1,4660 +0,0 @@ -/*********************** - * Funcionamiento general de la página - ************************/ -function fill_lp_from_bbdd(){ - - window.lineasPresupuestoList.forEach(function(lp) { - - const formas = JSON.parse(lp.formas) - lp.dimensiones_maquina = [formas.maquina_ancho, formas.maquina_alto] - lp.dimensiones_maquina_impresion = [formas.maquina_impresion_ancho, formas.maquina_impresion_alto] - lp.num_formas = { - value : formas.formas, - num_formas_verticales : formas.formas_v, - num_formas_horizontales : formas.formas_h, - posicion_formas : formas.formas_orientacion - } - lp['tipo_maquina'] = lp['maquina_tipo'] - lp['precio_impresion_horas'] = lp['precio_impresion'] - lp['margen_impresion_horas'] = lp['margen_impresion'] - lp['precio_libro'] = lp['libro'] - lp['precio_pedido'] = lp['total_papel_pedido'] - lp['total_impresion'] = lp['total_linea'] - lp['precios_pliegos'] = lp['pliegos_precio'] - lp['papel_generico_id'] = lp['papel_id'] - - dateObj = new Date(lp['tiempo_maquina'] * 1000); - hours = dateObj.getUTCHours(); - minutes = dateObj.getUTCMinutes(); - seconds = dateObj.getSeconds(); - lp['tiempo_maquina'] = hours.toString().padStart(2, '0') + ':' + - minutes.toString().padStart(2, '0') + ':' + - seconds.toString().padStart(2, '0'); - - if(lp.maquina_tipo=='inkjet'){ - - lp.datosTipologias = { - negro: lp.rotativa_negro, - cyan: lp.rotativa_cyan, - magenta: lp.rotativa_magenta, - amarillo: lp.rotativa_amarillo, - cg: lp.rotativa_cg, - gota_negro: lp.rotativa_gota_negro, - gota_color: lp.rotativa_gota_color, - } - - lp['paginas_color'] = lp['rotativa_pag_color'] - - lp['totalImpresion'] = lp['rotativa_total_impresion'] - lp['a_favor_fibra'] = lp['rotativa_a_favor_fibra'] - - lp['resolucion'] = lp['rotativa_resolucion'] - lp['superficie'] = lp['rotativa_area_paginas'] - - lp['num_gotas_negro'] = lp['rotativa_num_gotas_negro'] - lp['num_gotas_cyan'] = lp['rotativa_num_gotas_cyan'] - lp['num_gotas_magenta'] = lp['rotativa_num_gotas_magenta'] - lp['num_gotas_amarillo'] = lp['rotativa_num_gotas_amarillo'] - lp['num_gotas_cg'] = lp['rotativa_num_gotas_cg'] - - lp['precio_pagina_negro'] = lp['rotativa_precio_pag_negro'] - lp['precio_pagina_color'] = lp['rotativa_precio_pag_color'] - lp['factor_altura'] = lp['rotativa_factor_altura'] - lp['factor_anchura'] = lp['rotativa_factor_anchura'] - lp['paginas_por_pliego'] = lp['rotativa_pag_por_pliego'] - - lp['clicks_libro'] = lp['rotativa_clicks_libro'] - lp['peso_gotas_negro'] = lp['rotativa_peso_gotas_negro'] - lp['peso_gotas_cyan'] = lp['rotativa_peso_gotas_cyan'] - lp['peso_gotas_magenta'] = lp['rotativa_peso_gotas_magenta'] - lp['peso_gotas_amarillo'] = lp['rotativa_peso_gotas_amarillo'] - lp['peso_gotas_cg'] = lp['rotativa_peso_gotas_cg'] - lp['clicks_pedido'] = lp['rotativa_clicks_total'] - lp['precio_click_pedido'] = lp['precio_click_pedido'] - lp['margen_click_pedido'] = lp['margen_click_pedido'] - lp['precio_tinta'] = lp['rotativa_precio_tinta'] - - - lp['peso_gotas_negro_pedido'] = lp['rotativa_peso_gotas_negro_pedido'] - lp['peso_gotas_cyan_pedido'] = lp['rotativa_peso_gotas_cyan_pedido'] - lp['peso_gotas_magenta_pedido'] = lp['rotativa_peso_gotas_magenta_pedido'] - lp['peso_gotas_amarillo_pedido'] = lp['rotativa_peso_gotas_amarillo_pedido'] - lp['peso_gotas_cg_pedido'] = lp['rotativa_peso_gotas_cg_pedido'] - - } - if(lp.tipo.includes('rot')){ - - lp['maquina_velocidad'] = lp['rotativa_mxm'] - lp['metros_papel_libro'] = lp['rotativa_metros_libro'] - lp['metros_papel_total'] = lp['rotativa_metros_total'] - lp['velocidad_corte'] = lp['rotativa_velocidad_corte'] - lp['precio_hora_corte'] = lp['rotativa_precio_hora_corte'] - lp['tiempo_corte'] = lp['rotativa_tiempo_corte'] - lp['total_corte'] = lp['rotativa_total_corte'] - } - - lp['areaPaginas'] = lp['rotativa_superficie'] - - - data = processRowData(lp, lp.tipo, lp.tipo.replace(/_/g, '-')); - - var row = tableLineasPresupuesto.row("#" + lp.tipo); - - tableLineasPresupuesto.row.add(data).draw() - row = tableLineasPresupuesto.row("#" + lp.tipo); - - row.child(format(row.data())).show(); - - switch(lp.tipo){ - case 'lp_bn': - eventos_lp_bn(lp.maquina_tipo=='inkjet'?true:false) - break - case 'lp_bnhq': - eventos_lp_bnhq(lp.maquina_tipo=='inkjet'?true:false) - break - case 'lp_color': - eventos_lp_color(lp.maquina_tipo=='inkjet'?true:false) - break - case 'lp_colorhq': - eventos_lp_colorhq(lp.maquina_tipo=='inkjet'?true:false) - break - case 'lp_rot_bn': - eventos_lp_rot_bn() - break - case 'lp_rot_color': - eventos_lp_rot_color() - break - case 'lp_cubierta': - eventos_lp_cubierta() - break - case 'lp_sobrecubierta': - eventos_lp_sobrecubierta() - break - case 'lp_guardas': - eventos_lp_guardas() - lp['paginas_impresion'] = lp.paginas_impresion - break - } - - }) - -} - - -async function fill_bbdd_from_lp(presupuesto_id){ - - data=[]; - - tableLineasPresupuesto.rows().every( function ( rowIdx, tableLoop, rowLoop ) { - var rowData = this.data(); - const formas = { - maquina_ancho: rowData.maquina_ancho, - maquina_alto: rowData.maquina_alto, - maquina_impresion_ancho: rowData.maquina_impresion_ancho, - maquina_impresion_alto: rowData.maquina_impresion_alto, - formas: rowData.formas, - formas_v: rowData.formas_v, - formas_h: rowData.formas_h, - formas_orientacion: rowData.formas_orientacion, - } - - var t_maq_str = rowData.tiempo.split(':'); // split it at the colons - var t_maq = 0 - - if(t_maq_str.length == 3) - t_maq = (+t_maq_str[0]) * 3600 + (+t_maq_str[1]) * 60 + (+t_maq_str[2]); - - linea_data = { - presupuesto_id: presupuesto_id, - tipo: rowData.row_id, - paginas: (rowData.row_id=='lp_guardas')?(($('#tipo_impresion_id').val() == 1 || $('#tipo_impresion_id').val() == 3)?8:4):rowData.paginas, - papel_id: rowData.papel, - gramaje: rowData.gramaje, - papel_impresion_id: rowData.papel_impresion_id, - papel_impresion: rowData.papel_impresion, - maquina_id: rowData.maquina_id, - maquina: rowData.maquina, - maquina_tipo: rowData.maquinaTipo, - tiempo_maquina: t_maq, - pliegos_libro: rowData.numeroPliegos, - pliegos_pedido: rowData.pliegosPedido, - pliegos_precio: rowData.precioPliego, - libro: rowData.libro, - total_papel_pedido: rowData.totalPapelPedido, - margen_papel_pedido: rowData.margenPapelPedido, - mano: rowData.lomo, - peso: rowData.peso, - precio_click: rowData.click, - precio_click_pedido: rowData.totalClicks, - margen_click_pedido: rowData.margenClicks, - check_papel_total: $('#' + rowData.row_id + '_checkPapel').is(":checked")?1:0, - check_impresion_total: $('#' + rowData.row_id + '_checkClicks').is(":checked")?1:0, - tarifa_impresion_id: rowData.tarifa_impresion_id, - formas: JSON.stringify(formas), - - horas_maquina: rowData.horasMaquina, - precio_hora: rowData.precioHora, - precio_impresion: rowData.precioImpresion, - margen_impresion: rowData.margenImpresion, - total_linea: rowData.total_linea, - } - - if(rowData.row_id=='lp_guardas') - linea_data.paginas_impresion = rowData.paginas_impresion - - // maquina rotativa o inkjet - if(linea_data.maquina_tipo=='inkjet'){ - - linea_data.rotativa_pag_color = rowData.numPagColor - - linea_data.rotativa_total_impresion = rowData.totalImpresion - linea_data.rotativa_a_favor_fibra = rowData.aFavorFibra, - linea_data.rotativa_negro = rowData.cobNegro - linea_data.rotativa_cyan = rowData.cobCyan - linea_data.rotativa_magenta = rowData.cobMagenta - linea_data.rotativa_amarillo = rowData.cobAmarillo - linea_data.rotativa_cg = rowData.cobCG - linea_data.rotativa_gota_negro = rowData.gotaNegro - linea_data.rotativa_gota_color = rowData.gotaColor - - - linea_data.rotativa_resolucion = rowData.resolucion - linea_data.rotativa_area_paginas = rowData.areaPaginas - - linea_data.rotativa_num_gotas_negro = rowData.gotaNegro - linea_data.rotativa_num_gotas_cyan = rowData.gotasCyan - linea_data.rotativa_num_gotas_magenta = rowData.gotasMagenta - linea_data.rotativa_num_gotas_amarillo = rowData.gotasAmarillo - linea_data.rotativa_num_gotas_cg = rowData.gotasCG - - linea_data.rotativa_precio_pag_negro = rowData.precioPagNegro - linea_data.rotativa_precio_pag_color = rowData.precioPagColor - linea_data.rotativa_factor_altura = rowData.factorAltura - linea_data.rotativa_factor_anchura = rowData.factorAnchura - linea_data.rotativa_pag_por_pliego = rowData.paginasPliego - - linea_data.rotativa_clicks_libro = rowData.clicksLibro - linea_data.rotativa_peso_gotas_negro = rowData.gTintaNegro - linea_data.rotativa_peso_gotas_cyan = rowData.gTintaCyan - linea_data.rotativa_peso_gotas_magenta = rowData.gTintaMagenta - linea_data.rotativa_peso_gotas_amarillo = rowData.gTintaAmarillo - linea_data.rotativa_peso_gotas_cg = rowData.gTintaCG - linea_data.rotativa_clicks_total = rowData.clicksPedido - linea_data.precio_click_pedido = rowData.totalClicksPedido - linea_data.rotativa_precio_tinta = rowData.totalTinta - - - linea_data.rotativa_peso_gotas_negro_pedido = rowData.gTintaNegroPed - linea_data.rotativa_peso_gotas_cyan_pedido = rowData.gTintaCyanPed - linea_data.rotativa_peso_gotas_magenta_pedido = rowData.gTintaMagentaPed - linea_data.rotativa_peso_gotas_amarillo_pedido = rowData.gTintaAmarilloPed - linea_data.rotativa_peso_gotas_cg_pedido = rowData.gTintaCGPed - - } - if(linea_data.tipo.includes('rot')){ - - linea_data.rotativa_mxm = rowData.metrosMinuto - linea_data.rotativa_metros_libro = rowData.metrosPapelLibro - linea_data.rotativa_metros_total = rowData.metrosPapelTotal - linea_data.rotativa_velocidad_corte = rowData.velocidadCorte - linea_data.rotativa_precio_hora_corte = rowData.precioHoraCorte - linea_data.rotativa_tiempo_corte = rowData.tiempoCorte - linea_data.rotativa_total_corte = rowData.totalCorte - linea_data.rotativa_a_favor_fibra = rowData.aFavorFibra==true?1:0 - } - - data.push(linea_data) - } ); - - var datos = { - tipo: 'lineasPresupuesto', - datos: data, - presupuesto_id: presupuesto_id, - } - datos = Object.assign(datos, window.token_ajax); - - await $.ajax({ - type: 'post', - url: window.routes_lp.updateDataOfPresupuestoAdmin, - - data: datos, - dataType: 'json', - success:function(response){ - - token=response[window.csrf_token]; - yeniden(token); - } - }).fail(function (jqXHR, textStatus, error) { - // Handle error here - console.log(jqXHR) - }); - -} - -function checkPaginasPresupuesto(){ - - cantidad_total = 0 - - tableLineasPresupuesto.rows().every( function ( rowIdx, tableLoop, rowLoop ) { - var rowData = this.data(); - if(rowData.row_id != 'lp_cubierta' && rowData.row_id != 'lp_sobrecubierta' && rowData.row_id != 'lp_guardas') - cantidad_total += parseInt(rowData.paginas) - }) - htmlString = '' - - if(cantidad_total != parseInt($('#paginas').val())){ - htmlString = ` - `; - } - $('#divAlarmasLineasPresupuesto').html(htmlString) -} - -// variable para controlar el foco en los inputs -let focused = 0; - -function change_focus(){ - // se comprueba que el elemento es un input - if($('#'+focused).is('input')){ - if(focused){ - $('#'+focused).focus(); - $('#'+focused).select(); - focused = 0; - } - } -} - - -// Formatting function for row details - modify as you need -function format(d) { - - var value = ''+ - ''+ - ''+ - ''+ - '
' + - '
' + - window.Presupuestos.numeroPliegos + - ''+ - '
'+ - '
' + - window.Presupuestos.pliegosPedido + - ''+ - '
'+ - '
' + - window.Presupuestos.precioPliego + - ''+ - '
'+ - '
' + - window.Presupuestos.libro + - ''+ - '
'+ - '
' + - window.Presupuestos.totalPapelPedido + - ''+ - '
'+ - '' + - '
' + - '' + - '
'+ - '
' + - window.Presupuestos.click + - ''+ - '
'+ - '
' + - window.Presupuestos.totalClicks + - ''+ - '
'+ - '
' + - window.Presupuestos.horas + - ''+ - '
'+ - '
' + - window.Presupuestos.precioHora + - ''+ - '
'+ - '
' + - window.Presupuestos.precioImpresion + - ''+ - '
'+ - '
' + - '' + - '
'+ - '' + - '' + - '
' + - '' - - - - - value += '' - - if(d.maquinaTipo=='inkjet'){ - value += - ''+ - ''+ - ''+ - ''+ - '
' + - '
' + - '' + - '
'+ - '
' + - window.Presupuestos.numPagColor + - '' + - '
' + - ((d.row_id.includes('rot'))?'
' + - window.Presupuestos.saturacion + - '' + - '
':'') + - '
' + - window.Presupuestos.cobNegro + - '' + - '
' + - '
' + - window.Presupuestos.cobCyan + - '' + - '
' + - '
' + - window.Presupuestos.cobMagenta + - '' + - '
' + - '
' + - window.Presupuestos.cobAmarillo + - '' + - '
' + - ((!d.row_id.includes('rot'))? - '
' + - window.Presupuestos.cobCG + - '' + - '
':'') + - '
' + - window.Presupuestos.gotaNegro + - '' + - '
' + - '
' + - window.Presupuestos.gotaColor + - '' + - '
' + - '
' + - window.Presupuestos.aFavorFibra + - '' + - '
' + - '
' + - '' + - '
' + - '
' + - - '' + - '' + - ''+ - ''+ - ''+ - ''+ - '
' + - ((!d.row_id.includes('rot'))? - '
' + - window.Presupuestos.factorAltura + - '' + - '
' + - '
' + - window.Presupuestos.factorAnchura + - '' + - '
':'') + - (d.row_id.includes('rot')?'
': '' + - - (d.row_id.includes('rot')?'
' + - window.Presupuestos.resolucion + - '' + - '
':'') + - (d.row_id.includes('rot')?'
' + - window.Presupuestos.areaPaginas + - '' + - '
':'') + - '
' + - window.Presupuestos.gotasNegro + - '' + - '
' + - '
' + - window.Presupuestos.gotasCyan + - '' + - '
' + - '
' + - window.Presupuestos.gotasMagenta + - '' + - '
' + - '
' + - window.Presupuestos.gotasAmarillo + - '' + - '
' + - (!(d.row_id.includes('rot'))?'
' + - window.Presupuestos.gotasCG + - '' + - '
':'') + - '
' + - window.Presupuestos.precioPagNegro + - '' + - '
' + - '
' + - window.Presupuestos.precioPagColor + - '' + - '
' + - (d.row_id.includes('rot')? - '
' + - window.Presupuestos.factorAltura + - '' + - '
' + - '
' + - window.Presupuestos.factorAnchura + - '' + - '
':'') + - (d.row_id.includes('rot')?'
' + - window.Presupuestos.paginasPliego + - '' + - '
':'') + - '
' + - '' + - '' + - ''+ - ''+ - ''+ - ''+ - '
' + - (d.row_id.includes('rot')?'
': '' + - (d.row_id.includes('rot')?'
': '' + - (d.row_id.includes('rot')?'
' + - window.Presupuestos.clicksLibro + - '' + - '
':'') + - ((!d.row_id.includes('rot'))?'
' + - window.Presupuestos.saturacion + - '' + - '
':'') + - ((!d.row_id.includes('rot'))?'
' + - window.Presupuestos.paginasPliego + - '' + - '
':'') + - '
' + - window.Presupuestos.gTintaNegro + - '' + - '
' + - '
' + - window.Presupuestos.gTintaCyan + - '' + - '
' + - '
' + - window.Presupuestos.gTintaMagenta + - '' + - '
' + - '
' + - window.Presupuestos.gTintaAmarillo + - '' + - '
' + - (!(d.row_id.includes('rot'))?'
' + - window.Presupuestos.gTintaCG + - '' + - '
':'') + - ((!d.row_id.includes('rot'))?'
' + - window.Presupuestos.clicksLibro + - '' + - '
':'') + - '
' + - window.Presupuestos.clicksPedido + - '' + - '
' + - '
' + - window.Presupuestos.totalClicks + - '' + - '
' + - '
' + - window.Presupuestos.totalTinta + - '' + - '
' + - (d.row_id.includes('rot')?'
': '' + - '
' + - window.Presupuestos.totalImpresion + - '' + - '
' + - '
' + - '' + - '' + - ''+ - ''+ - ''+ - ''+ - '
' + - ((!d.row_id.includes('rot'))?'
' + - window.Presupuestos.resolucion + - '' + - '
':'') + - ((!d.row_id.includes('rot'))?'
' + - window.Presupuestos.areaPaginas + - '' + - '
':'') + - (d.row_id.includes('rot')?'
': '' + - (d.row_id.includes('rot')?'
': '' + - (d.row_id.includes('rot')?'
': '' + - '
' + - window.Presupuestos.gTintaNegroPed + - '' + - '
' + - '
' + - window.Presupuestos.gTintaCyanPed + - '' + - '
' + - '
' + - window.Presupuestos.gTintaMagentaPed + - '' + - '
' + - '
' + - window.Presupuestos.gTintaAmarilloPed + - ''+ - '
' + - (!(d.row_id.includes('rot'))?'
' + - window.Presupuestos.gTintaCGPed + - ''+ - '
':'') + - '
' + - '' + - '' - } - - return $(value).toArray(); -} - -const lastColNr_lp = $('#tableLineasPresupuesto').find("tr:first th").length - 1; - -const actionBtns_lp = function(data) { - return ` - - `; -}; - -var tableLineasPresupuesto = new DataTable('#tableLineasPresupuesto',{ - scrollX: true, - searching: false, - paging: false, - info: false, - ordering: true, - responsive: true, - select: false, - rowId: 'row_id', - language: { - url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" - }, - columnDefs: [ - { - targets: 0, - className: 'dt-control', - orderable: false, - data: null, - defaultContent: '' - }, - { - targets: [1,2,3,4,5,6,7,8,9], - orderable: false, - visible: false, - }, - { - targets: [11,12,13,14,15,16,17,18,19,20], - orderable: false, - }, - { - targets: [10], - orderable: true, - visible: false, - }, - { - orderable: false, - searchable: false, - targets: [lastColNr_lp] - }, - ], - columns: [ - {data: null}, - {data: 'tarifa_impresion_id'}, - {data: 'maquina_ancho'}, - {data: 'maquina_alto'}, - {data: 'maquina_impresion_ancho'}, - {data: 'maquina_impresion_alto'}, - {data: 'formas'}, - {data: 'formas_v'}, - {data: 'formas_h'}, - {data: 'formas_orientacion'}, - {data: 'position', - type: "num" , - render: function (data, type, row, meta){ - if(row.row_id.includes('_bn')){ - return 0; - } - else if(row.row_id.includes('_color')){ - return 1; - } - else if(row.row_id.includes('_cubierta')){ - return 2; - } - else if(row.row_id.includes('_sobrecubierta')){ - return 3; - } - else if(row.row_id.includes('_guardas')){ - return 4; - } - } - }, - {data: 'icon', - render: function ( data, type, row, meta ){ - return '' - } - }, - {data: 'paginas', - render: function ( data, type, row, meta ) { - if(row.row_id != "lp_cubierta" && row.row_id != "lp_sobrecubierta" && row.row_id != "lp_guardas") - return ''; - else if(row.row_id == "lp_cubierta"){ - select = '' - - return select; - } - else if(row.row_id == "lp_guardas"){ - select = '' - - return select; - - } - else{ - return ''; - } - } - }, - {data: 'papel', - render: function ( data, type, row, meta ) { - var select = $('') - .attr('id', row.row_id + '_gramaje') - .attr('name', row.row_id + '_gramaje') - .addClass('form-control form-select-sm lp-cell lp-select ' )//+ row.row_class + '-select') - .css('min-width', '40px') - - var option = ''; - select.append(option); - - return select[0].outerHTML - } - }, - {data: 'papel_impresion', - render: function ( data, type, row, meta ) { - var select = $('') - .attr('id', row.row_id + '_maquina') - .attr('name', row.row_id + '_maquina') - .addClass('form-control form-select-sm lp-cell lp-select ' + row.row_class + '-select') - .css('min-width', '110px') - - var option = ''; - select.append(option); - - return select[0].outerHTML - } - }, - {data: 'tiempo', - render: function ( data, type, row, meta ) { - return ''; - } - }, - {data: 'lomo', - render: function ( data, type, row, meta ) { - return ''; - } - }, - {data: 'peso', - render: function ( data, type, row, meta ) { - return ''; - } - }, - {data: 'total_linea', - render: function ( data, type, row, meta ) { - return ''; - } - }, - { - data: actionBtns_lp, - className: 'row-edit dt-center' - } - ], - "order": [ 10, 'asc' ] -}); - -tableLineasPresupuesto.on( 'draw.dt', function () { - checkPaginasPresupuesto() - getVisibleTabs() -} ); - - -$(document).on('click', '.btn-delete-lp', function(e) { - - const row = $(this).closest('tr'); - data = tableLineasPresupuesto.row( row ).data() - tableLineasPresupuesto.row( row ) - .remove() - .draw(); - - //updateTablaEnvios() - updatePresupuesto({ - update_lineas: false, - update_servicios: true, - update_envios: true, - update_resumen: true, - update_tiradas_alternativas: true - }) - - if(data.row_id == 'lp_guardas') - servicioGuardas(false) - - // Si existe cubierta, hay que actualizar con el valor del lomo - check_update_cubierta() -}) - - - -// Add event listener for opening and closing details -tableLineasPresupuesto.on('click', 'td.dt-control', function (e) { - let tr = e.target.closest('tr'); - let row = tableLineasPresupuesto.row(tr); - - if (row.child.isShown()) { - // This row is already open - close it - row.child.hide(); - } - else { - // Open this row - row.child(format(row.data())).show(); - } -}); - -function processRowData(row, rowId, rowClass){ - - var icon = "" - if(rowId=='lp_bn'){ - if(row.tipo_maquina=='toner') - icon = '' - else - icon = '' - } - - else if(rowId=='lp_bnhq'){ - if(row.tipo_maquina=='toner') - icon = '' - else - icon = '' - } - else if(rowId=='lp_color'){ - if(row.tipo_maquina=='toner') - icon = '' - else - icon = '' - } - else if(rowId=='lp_colorhq'){ - if(row.tipo_maquina=='toner') - icon = '' - else - icon = '' - } - - else if(rowId=='lp_cubierta') - icon = '' - else if(rowId=='lp_sobrecubierta') - icon = '' - else if(rowId=='lp_guardas') - icon = '' - else if(rowId=='lp_rot_bn') - icon = '' - else if(rowId=='lp_rot_color') - icon = '' - - const blank_line = (typeof row.tarifa_impresion_id === 'undefined')?1:0; - var data = { - 'row_id': rowId, - 'row_class': rowClass, - - 'tarifa_impresion_id': blank_line?0:isNaN(parseInt(row.tarifa_impresion_id)) ? "" : parseInt(row.tarifa_impresion_id), - 'maquina_ancho': blank_line?0:isNaN(parseFloat(row.dimensiones_maquina[0])) ? "" : parseFloat(row.dimensiones_maquina[0]), - 'maquina_alto': blank_line?0:isNaN(parseFloat(row.dimensiones_maquina[1])) ? "" : parseFloat(row.dimensiones_maquina[1]), - 'maquina_impresion_ancho': blank_line?0:isNaN(parseFloat(row.dimensiones_maquina_impresion[0])) ? "" : parseFloat(row.dimensiones_maquina_impresion[0]), - 'maquina_impresion_alto': blank_line?0:isNaN(parseFloat(row.dimensiones_maquina_impresion[1])) ? "" : parseFloat(row.dimensiones_maquina_impresion[1]), - 'formas': blank_line?0:isNaN(parseInt(row.num_formas.value)) ? 0 : parseInt(row.num_formas.value), - 'formas_v': blank_line?0:isNaN(parseInt(row.num_formas.num_formas_verticales)) ? 0 : parseInt(row.num_formas.num_formas_verticales), - 'formas_h': blank_line?0:isNaN(parseInt(row.num_formas.num_formas_horizontales)) ? 0 : parseInt(row.num_formas.num_formas_horizontales), - 'formas_orientacion': blank_line?0:row.num_formas.posicion_formas, - - 'icon': icon, - 'paginas': blank_line?0:row.paginas, - 'paginas_impresion': rowId=='lp_guardas'?row.paginas_impresion:0, - 'papel': blank_line?"":row.papel_generico_id, - 'gramaje': blank_line?"":row.gramaje, - 'papel_impresion': blank_line?"":row.papel_impresion, - 'papel_impresion_id': blank_line?"":row.papel_impresion_id, - 'maquina': blank_line?"":row.maquina, - 'maquina_id': blank_line?"":row.maquina_id, - - 'tiempo': blank_line?"":row.tiempo_maquina, - 'lomo': isNaN(parseFloat(row.mano)) ? "" : parseFloat(row.mano).toFixed(2), - 'peso': isNaN(parseFloat(row.peso)) ? "" : parseFloat(row.peso).toFixed(2), - - 'total_linea': isNaN(parseFloat(row.total_impresion)) ? "" : parseFloat(row.total_impresion).toFixed(2), - - 'numeroPliegos':isNaN(parseFloat(row.pliegos_libro)) ? "" : parseFloat(row.pliegos_libro).toFixed(0), - 'pliegosPedido': isNaN(parseFloat(row.pliegos_pedido)) ? "" : parseFloat(row.pliegos_pedido).toFixed(0), - 'precioPliego': isNaN(parseFloat(row.precios_pliegos)) ? "" : parseFloat(row.precios_pliegos).toFixed(6), - 'libro': isNaN(parseFloat(row.precio_libro)) ? "" : parseFloat(row.precio_libro).toFixed(2), - 'totalPapelPedido': isNaN(parseFloat(row.precio_pedido)) ? "" : parseFloat(row.precio_pedido).toFixed(2), - 'margenPapelPedido': isNaN(parseFloat(row.margen_papel_pedido)) ? "": parseFloat(row.margen_papel_pedido).toFixed(2), - 'click': isNaN(parseFloat(row.precio_click)) ? "" : parseFloat(row.precio_click).toFixed(6), - 'totalClicks': isNaN(parseFloat(row.precio_click_pedido)) ? "" : parseFloat(row.precio_click_pedido).toFixed(2), - 'margenClicks': isNaN(parseFloat(row.margen_click_pedido)) ? "" : parseFloat(row.margen_click_pedido).toFixed(2), - 'horasMaquina': isNaN(parseFloat(row.horas_maquina)) ? "" : parseFloat(row.horas_maquina).toFixed(4), - 'precioHora': isNaN(parseFloat(row.precio_hora)) ? "" : parseFloat(row.precio_hora).toFixed(2), - 'precioImpresion': isNaN(parseFloat(row.precio_impresion_horas)) ? "" : parseFloat(row.precio_impresion_horas).toFixed(2), - 'margenImpresion': isNaN(parseFloat(row.margen_impresion_horas)) ? "" : parseFloat(row.margen_impresion_horas).toFixed(2), - 'maquinaTipo': row.tipo_maquina, - 'check_papel_total': row.check_papel_total, - 'check_impresion_total': row.check_impresion_total, - } - - if(row.tipo_maquina=='inkjet'){ - - data.numPagColor = row.paginas_color - data.aFavorFibra = row.a_favor_fibra - data.cobNegro = isNaN(parseFloat(row.datosTipologias.negro)) ? "" : parseFloat(row.datosTipologias.negro).toFixed(2) - data.cobCyan = isNaN(parseFloat(row.datosTipologias.cyan)) ? "" : parseFloat(row.datosTipologias.cyan).toFixed(2) - data.cobMagenta = isNaN(parseFloat(row.datosTipologias.magenta)) ? "" : parseFloat(row.datosTipologias.magenta).toFixed(2) - data.cobAmarillo = isNaN(parseFloat(row.datosTipologias.amarillo)) ? "" : parseFloat(row.datosTipologias.amarillo).toFixed(2) - data.gotaNegro = isNaN(parseFloat(row.datosTipologias.gota_negro)) ? "" : parseFloat(row.datosTipologias.gota_negro).toFixed(2) - data.gotaColor = isNaN(parseFloat(row.datosTipologias.gota_color)) ? "" : parseFloat(row.datosTipologias.gota_color).toFixed(2) - - data.resolucion = isNaN(parseFloat(row.resolucion)) ? "" : parseFloat(row.resolucion).toFixed(0) - data.areaPaginas = isNaN(parseFloat(row.superficie)) ? "" : parseFloat(row.superficie).toFixed(2) - - data.gotasNegro = isNaN(parseFloat(row.num_gotas_negro)) ? "" : parseFloat(row.num_gotas_negro).toFixed(0) - data.gotasCyan = isNaN(parseFloat(row.num_gotas_cyan)) ? "" : parseFloat(row.num_gotas_cyan).toFixed(0) - data.gotasMagenta = isNaN(parseFloat(row.num_gotas_magenta)) ? "" : parseFloat(row.num_gotas_magenta).toFixed(0) - data.gotasAmarillo = isNaN(parseFloat(row.num_gotas_amarillo)) ? "" : parseFloat(row.num_gotas_amarillo).toFixed(0) - data.precioPagNegro = isNaN(parseFloat(row.precio_pagina_negro)) ? "" : parseFloat(row.precio_pagina_negro).toFixed(6) - data.precioPagColor = isNaN(parseFloat(row.precio_pagina_color)) ? "" : parseFloat(row.precio_pagina_color).toFixed(6) - data.factorAltura = isNaN(parseFloat(row.factor_altura)) ? "" : parseFloat(row.factor_altura).toFixed(2) - data.factorAnchura = isNaN(parseFloat(row.factor_anchura)) ? "" : parseFloat(row.factor_anchura).toFixed(2) - data.paginasPliego = isNaN(parseFloat(row.paginas_por_pliego)) ? "" : parseFloat(row.paginas_por_pliego).toFixed(2) - - if(rowId.includes('rot')){ - data.metrosMinuto = isNaN(parseFloat(row.maquina_velocidad)) ? "" : parseFloat(row.maquina_velocidad).toFixed(2) - data.metrosPapelLibro = isNaN(parseFloat(row.metros_papel_libro)) ? "" : parseFloat(row.metros_papel_libro).toFixed(2) - data.metrosPapelTotal = isNaN(parseFloat(row.metros_papel_total)) ? "" : parseFloat(row.metros_papel_total).toFixed(2) - data.velocidadCorte = isNaN(parseFloat(row.velocidad_corte)) ? "" : parseFloat(row.velocidad_corte).toFixed(2) - data.precioHoraCorte = isNaN(parseFloat(row.precio_hora_corte)) ? "" : parseFloat(row.precio_hora_corte).toFixed(2) - data.tiempoCorte = isNaN(parseFloat(row.tiempo_corte)) ? "" : parseFloat(row.tiempo_corte).toFixed(2) - data.totalCorte = isNaN(parseFloat(row.total_corte)) ? "" : parseFloat(row.total_corte).toFixed(2) - } - else{ - data.totalCorte = 0 - } - - data.clicksLibro = isNaN(parseFloat(row.clicks_libro)) ? "" : parseFloat(row.clicks_libro).toFixed(0) - data.gTintaNegro = isNaN(parseFloat(row.peso_gotas_negro)) ? "" : parseFloat(row.peso_gotas_negro).toFixed(2) - data.gTintaCyan = isNaN(parseFloat(row.peso_gotas_cyan)) ? "" : parseFloat(row.peso_gotas_cyan).toFixed(2) - data.gTintaMagenta = isNaN(parseFloat(row.peso_gotas_magenta)) ? "" : parseFloat(row.peso_gotas_magenta).toFixed(2) - data.gTintaAmarillo = isNaN(parseFloat(row.peso_gotas_amarillo)) ? "" : parseFloat(row.peso_gotas_amarillo).toFixed(2) - data.clicksPedido = isNaN(parseFloat(row.clicks_pedido)) ? "" : parseFloat(row.clicks_pedido).toFixed(0) - data.totalClicksPedido = isNaN(parseFloat(row.precio_click_pedido)) ? "" : parseFloat(row.precio_click_pedido).toFixed(2) - data.totalTinta = isNaN(parseFloat(row.precio_tinta)) ? "" : parseFloat(row.precio_tinta).toFixed(2) - - data.totalImpresion = isNaN(parseFloat(row.precio_click_pedido+row.precio_tinta+data.totalCorte)) ? "" : parseFloat(row.precio_click_pedido+row.precio_tinta+data.totalCorte).toFixed(2) - - data.gTintaNegroPed = isNaN(parseFloat(row.peso_gotas_negro_pedido)) ? "" : parseFloat(row.peso_gotas_negro_pedido).toFixed(2) - data.gTintaCyanPed = isNaN(parseFloat(row.peso_gotas_cyan_pedido)) ? "" : parseFloat(row.peso_gotas_cyan_pedido).toFixed(2) - data.gTintaMagentaPed = isNaN(parseFloat(row.peso_gotas_magenta_pedido)) ? "" : parseFloat(row.peso_gotas_magenta_pedido).toFixed(2) - data.gTintaAmarilloPed = isNaN(parseFloat(row.peso_gotas_amarillo_pedido)) ? "" : parseFloat(row.peso_gotas_amarillo_pedido).toFixed(2) - - if(!rowId.includes('rot')){ - data.cobCG = isNaN(parseFloat(row.datosTipologias.cg)) ? "" : parseFloat(row.datosTipologias.cg).toFixed(2) - data.gotasCG = isNaN(parseFloat(row.num_gotas_cg)) ? "" : parseFloat(row.num_gotas_cg).toFixed(2) - data.gTintaCG = isNaN(parseFloat(row.peso_gotas_cg)) ? "" : parseFloat(row.peso_gotas_cg).toFixed(2) - data.gTintaCGPed = isNaN(parseFloat(row.peso_gotas_cg_pedido)) ? "" : parseFloat(row.peso_gotas_cg_pedido).toFixed(2) - } - - - data.alto_click = row.alto_click - } - - return data -} - - - -$('.paginas-lp').on('change', function(){ - checkPaginasPresupuesto() -}) - - -function verCalculosInkjet(e){ - if($( ".calculos_" + e.data.rowId ).css('display') == 'none') - $( ".calculos_" + e.data.rowId ).css('display', 'table-row') - else{ - $( ".calculos_" + e.data.rowId ).css('display', 'none') - } -}; - - - -function clear_interior(row_id = ''){ - switch(row_id) { - case 'lp_bn': - clear_lp_bn(true); - break; - case 'lp_color': - clear_lp_color(true); - break; - case 'lp_bnhq': - clear_lp_bnhq(true); - break; - case 'lp_colorhq': - clear_lp_colorhq(true); - break; - default: - clear_lp_bn(true); - clear_lp_color(true); - clear_lp_bnhq(true); - clear_lp_colorhq(true); - break; - } - if(row_id.length>0) - tableLineasPresupuesto.row( row_id ) - .remove() - .draw(); - else{ - tableLineasPresupuesto.row( '#lp_bn' ) - .remove().draw() - tableLineasPresupuesto.row( '#lp_bnhq' ) - .remove().draw() - tableLineasPresupuesto.row( '#lp_color' ) - .remove().draw() - tableLineasPresupuesto.row( '#lp_colorhq' ) - .remove().draw() - } -} - - -function clear_rotativa(row_id = ''){ - switch(row_id) { - case 'lp_rot_bn': - clear_lp_rot_bn(true); - break; - case 'lp_rot_color': - clear_lp_rot_color(true); - break; - default: - clear_lp_rot_bn(true); - clear_lp_rot_color(true); - break; - } - if(row_id.length>0) - tableLineasPresupuesto.row( row_id ) - .remove() - .draw(); - else{ - tableLineasPresupuesto.row( '#lp_rot_bn' ) - .remove().draw() - tableLineasPresupuesto.row( '#lp_rot_color' ) - .remove().draw() - } -} - - -function clear_cubierta(){ - clear_lp_cubierta(true); -} - -function clear_sobrecubierta(){ - clear_lp_sobrecubierta(true); -} - - -$('.insertarLinea').on("click", function (e) { - - if(e.target.id.includes("Plana")){ - - clear_interior(); - clear_rotativa(); - - var rows = $("#tableCompIntPlana").DataTable().rows( '.selected' ).data().toArray(); - - for(row of rows){ - if(row['tipo'] =='bn'){ - fill_lp_bn(row, true); - } - else if(row['tipo'] =='bnhq'){ - fill_lp_bnhq(row, true); - } - else if(row['tipo'] =='color'){ - fill_lp_color(row, true); - } - else if(row['tipo'] =='colorhq'){ - fill_lp_colorhq(row, true); - } - } - } - if(e.target.id.includes("Rotativa")){ - - clear_rotativa(); - clear_interior(); - - var rows = $("#tableCompIntRotativa").DataTable().rows( '.selected' ).data().toArray(); - for(row of rows){ - if(row['paginasColor'] ==0){ - fill_lp_rot_bn(row, true); - } - else if(row['paginasColor'] >0){ - fill_lp_rot_color(row, true); - } - } - } - - if(e.target.id.includes("Cubierta")){ - - clear_cubierta(); - - var rows = $("#tableCompCubierta").DataTable().rows( '.selected' ).data().toArray(); - for(row of rows){ - if(row.tipo == 'cubierta'){ - fill_lp_cubierta(row, true); - if($('#acabado_cubierta_id').val() > 0) - insertar_acabado_exterior($('#acabado_cubierta_id').val(), window.Presupuestos.cubierta) - } - } - - clear_sobrecubierta(); - - for(row of rows){ - if(row.tipo == 'sobrecubierta'){ - fill_lp_sobrecubierta(row, true); - if($('#acabado_sobrecubierta_id').val() > 0) - insertar_acabado_exterior($('#acabado_sobrecubierta_id').val(), window.Presupuestos.sobrecubierta) - } - } - } - - if(e.target.id.includes("Guardas")){ - - clear_guardas(); - - var rows = $("#tableCompGuardas").DataTable().rows( '.selected' ).data().toArray(); - for(row of rows){ - fill_lp_guardas(row, true); - } - servicioGuardas(true) - } - - - updatePresupuesto({ - update_lineas: false, - update_servicios: true, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: true}) - - -}); - - -$('#btn_addLinea').on("click", function (e) { - - var dataRows = tableLineasPresupuesto - .rows() - .data(); - - switch($('#addLineasPresupuesto').val()){ - // Se chequean todas las lineas de negro y todas las de color - // (solo una de cada en interior) - - case 'lp_bn': - var hayLinea = false - for(let number=0;number', {'value':data.menu[item].id, 'text':data.menu[item].text}) - $('#lp_bn_gramaje').append(option); - }); - if(mantenerSeleccion){ - $('#lp_bn_gramaje option').filter(function() { - return $(this).html() == previous; - }).prop('selected', true); - } - else{ - $('#lp_bn_gramaje').val('') - } - - } - }); -} - - - -async function set_lp_bn_papelImpresion(){ - - var datos = { - tipo: 'papelImpresion', - uso: 'negro', - datos: $('#lp_bn_papel option:selected').val() , - gramaje: $('#lp_bn_gramaje option:selected').text().trim() , - tipoLinea: "negro", - }; - datos = Object.assign(datos, window.token_ajax); - - await $.ajax({ - type: 'post', - url: window.routes_lp.menuItemsOfPresupuestoAdmin, - beforeSend: function() { - $('#lp_bn_papelImpresion').empty() - $('#lp_bn_maquina').empty() - clear_lp_bn(false) - }, - data: datos, - dataType: 'json', - success: function (data) { - yeniden(data[window.csrf_token]); - $.each(data.menu, function(item){ - var option = $('
- - - -section("additionalInlineJs") ?> -window.papelGenericoNegroList = ; -window.papelGenericoNegroHQList = ; -window.papelGenericoColorList = ; -window.papelGenericoColorHQList = ; -window.papelGenericoCubiertaList = ; -window.papelGenericoSobrecubiertaList = ; -window.papelGenericoRotativaNegroList = ; -window.papelGenericoRotativaColorList = ; - - - window.papelGenericoGuardasList = ; - - -window.lineasPresupuestoList = ; - -window.routes_lp = { - menuItemsOfPresupuestoAdmin: '', - updateDataOfPresupuestoAdmin: '', - -} - -fill_lp_from_bbdd() - -checkPaginasPresupuesto() - -endSection() ?> \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_presupuestoDireccionesForm.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_presupuestoDireccionesForm.php index 601eeca8..18e014fd 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_presupuestoDireccionesForm.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_presupuestoDireccionesForm.php @@ -2,20 +2,21 @@
-
+
@@ -752,6 +774,9 @@
+
+ +
@@ -795,7 +820,7 @@
-
+
@@ -817,6 +842,9 @@
+
+ +
@@ -860,7 +888,7 @@
-
+
@@ -918,69 +946,68 @@ section("additionalInlineJs") ?> - +/* $('#tab-pv-bn').on( "click", function() { - previewInteriorPlana('bn', , ); +previewInteriorPlana('bn', , ); } ); $('#tab-pv-bnhq').on( "click", function() { - previewInteriorPlana('bnhq', , ); +previewInteriorPlana('bnhq', , ); } ); $('#tab-pv-color').on( "click", function() { - previewInteriorPlana('color', , ); +previewInteriorPlana('color', , ); } ); $('#tab-pv-colorhq').on( "click", function() { - previewInteriorPlana('colorhq', , ); +previewInteriorPlana('colorhq', , ); } ); $('#tab-pv-rot-bn').on( "click", function() { - previewRotativa('rot_bn', , ); +previewRotativa('rot_bn', , ); } ); $('#tab-pv-rot-color').on( "click", function() { - previewRotativa('rot_color', , ); +previewRotativa('rot_color', , ); } ); $('#tab-pv-guardas').on( "click", function() { - previewInteriorPlana('guardas', , ); +previewInteriorPlana('guardas', , ); } ); $('#tab-pv-cubierta').on( "click", function() { - previewInteriorPlana('cubierta', , ); +previewInteriorPlana('cubierta', , ); } ); $('#tab-pv-esquema-cubierta').on( "click", function() { - previewEsquemaCubierta('ec', , ); +previewEsquemaCubierta('ec', , ); } ); $('#tab-pv-sobrecubierta').on( "click", function() { - previewInteriorPlana('sobrecubierta', , ); +previewInteriorPlana('sobrecubierta', , ); } ); +*/ -endSection() ?> - - +endSection() ?> \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_resumenPresupuestoItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_resumenPresupuestoItems.php index 2dcd7588..1ecd5e1f 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_resumenPresupuestoItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_resumenPresupuestoItems.php @@ -18,55 +18,57 @@
Coste papel
-
total_coste_papel) ?>€
+
Margen papel
-
total_margenPercent_papel) ?>%
-
total_margen_papel) ?>€
+
+
Coste impresión
-
total_coste_impresion) ?>€
+
Margen impresión
-
total_margenPercent_impresion) ?>%
-
total_margen_impresion) ?>€
+
+
Coste servicios
-
total_coste_servicios) ?>€
+
Margen servicios
-
total_margenPercent_servicios) ?>%
-
total_margen_servicios) ?>€
+
+
Coste de envío
-
total_coste_envios) ?>€
+
+
Precio de envío
+
Margen envío
-
total_margen_envios) ?>€
+

Total Costes
-
total_costes) ?>€
+
Total Margen
-
total_costes+$presupuestoEntity->total_margenes)>0? 100*$presupuestoEntity->total_margenes/($presupuestoEntity->total_costes+$presupuestoEntity->total_margenes) : 0,0)) ?>%
-
total_margenes) ?>€
+
+

Total
-
total_antes_descuento) ?>€
-
Descuento
-
-
total_descuento) ?>€
+
+
Descuento (%)
+
+
Total presupuesto
-
total_presupuesto) ?>€
+
Precio unidad
-
total_precio_unidad) ?>€
+
Factor
-
total_factor) ? $presupuestoEntity->total_factor : 0) ?>
+
Factor Ponderado
-
total_factor_ponderado) ? $presupuestoEntity->total_factor_ponderado : 0) ?>
+
@@ -83,7 +85,7 @@ - > + >
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_resumenPresupuestos.js b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_resumenPresupuestos.js deleted file mode 100644 index 4e3c8088..00000000 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_resumenPresupuestos.js +++ /dev/null @@ -1,299 +0,0 @@ -function updateTotales(updateLP=true, updateServicios=true, updateEnvio=true){ - - var totalPapel = 0 - var margenPapel = 0 - - var totalImpresion = 0 - var totalImpresionforMargen = 0 - var margenImpresion = 0 - - var totalServicios = 0 - var margenServicios = 0 - - var totalEnvios = 0 - var margenEnvios = 0 - - var sumForFactor = 0.0 - var sumForFactorPonderado = 0.0 - - - var margenPorHoras = 0.0; - - if(updateLP){ - - if(typeof $("#tableLineasPresupuesto").DataTable() !== 'undefined'){ - $("#tableLineasPresupuesto").DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) { - var rowData = this.data(); - - if(rowData.check_papel_total){ - totalPapel += parseFloat($('#' + rowData.row_id + '_totalPapelPedido').val()) - margenPapel += parseFloat($('#' + rowData.row_id + '_margenPapelPedido').val()) - - sumForFactor += parseFloat($('#' + rowData.row_id + '_totalPapelPedido').val()) - sumForFactor -= parseFloat($('#' + rowData.row_id + '_margenPapelPedido').val()) - - } - if(rowData.check_impresion_total){ - //totalImpresion += parseFloat($('#' + rowData.row_id + '_precioImpresion').val()) - margenPorHoras += parseFloat($('#' + rowData.row_id + '_precioImpresion').val()) - totalImpresion += parseFloat($('#' + rowData.row_id + '_totalClicks').val()) - - sumForFactor += parseFloat($('#' + rowData.row_id + '_totalClicks').val()) - - if(rowData.maquinaTipo=='inkjet'){ - totalImpresion += parseFloat(rowData.totalTinta) - totalImpresion += parseFloat(rowData.totalCorte) - - sumForFactor += (parseFloat(rowData.totalTinta) + parseFloat(rowData.totalCorte)) - } - //margenImpresion += parseFloat($('#' + rowData.row_id + '_margenImpresion').val()) - //margenPorHoras += parseFloat($('#' + rowData.row_id + '_margenImpresion').val()) - margenImpresion += parseFloat($('#' + rowData.row_id + '_margenClicks').val()) - - - sumForFactor -= parseFloat($('#' + rowData.row_id + '_margenClicks').val()) - - if(!isNaN(parseFloat($('#' + rowData.row_id + 'lp_bn_totalTinta').val()))){ - totalImpresion += parseFloat($('#' + rowData.row_id + 'lp_bn_totalTinta').val()) - sumForFactor += parseFloat($('#' + rowData.row_id + 'lp_bn_totalTinta').val()) - } - } - }) - } - - totalImpresion -= margenImpresion - totalPapel -= margenPapel - - margenImpresion += margenPorHoras - - var porcentajeMargenPapel = isNaN(margenPapel/(totalPapel)*100.0)?0:margenPapel/(totalPapel)*100.0 - $('#porcentajeMargenPapel').text(porcentajeMargenPapel.toFixed(0) + '%') - $('#totalCostePapel').text((addSeparatorsNF(totalPapel.toFixed(2), ".", ",", ".")) + "€") - $('#margenPapel').text((addSeparatorsNF(margenPapel.toFixed(2), ".", ",", ".")) + "€") - $('#totalCostePapel').attr('val',totalPapel.toFixed(2)) - $('#margenPapel').attr('val',margenPapel.toFixed(2)) - - var porcentajeMargenImpresion = isNaN(margenImpresion/(totalImpresion)*100.0)?0:margenImpresion/(totalImpresion)*100.0 - $('#porcentajeMargenImpresion').text(porcentajeMargenImpresion.toFixed(0) + '%') - $('#totalCosteImpresion').text((addSeparatorsNF(totalImpresion.toFixed(2), ".", ",", ".")) + "€") - $('#margenImpresion').text((addSeparatorsNF(margenImpresion.toFixed(2), ".", ",", ".")) + "€") - $('#totalCosteImpresion').attr('val',totalImpresion.toFixed(2)) - $('#margenImpresion').attr('val',margenImpresion.toFixed(2)) - - } - else{ - totalPapel = parseFloat($('#totalCostePapel').attr('val')) - margenPapel = parseFloat($('#margenPapel').attr('val')) - totalImpresion = parseFloat($('#totalCosteImpresion').attr('val')) - margenImpresion = parseFloat($('#margenImpresion').attr('val')) - } - - sumForFactorPonderado = sumForFactor; - - if(updateServicios){ - - if ( typeof $("#tableOfServiciosEncuadernacion").DataTable() !== 'undefined' && $("#tableOfServiciosEncuadernacion").DataTable().rows().count() > 0){ - $('#tableOfServiciosEncuadernacion tbody tr').each(function(){ - var currentRow = $(this).closest("tr"); - var subId = $('#tableOfServiciosEncuadernacion').DataTable().cell(currentRow,0).node().innerHTML; - var total = parseFloat($('#precio_total_encuadernado_' + subId)[0].value) - totalServicios += total - var base = parseFloat($('#precio_total_encuadernado_' + subId)[0].value)/(1+parseFloat($('#enc_margen_' + subId)[0].innerHTML)/100.0); - var margen = total - base; - margenServicios += margen; - }) - } - - if ( typeof $("#tableOfServiciosAcabado").DataTable() !== 'undefined' && $("#tableOfServiciosAcabado").DataTable().rows().count() > 0){ - $('#tableOfServiciosAcabado tbody tr').each(function(){ - var currentRow = $(this).closest("tr"); - var subId = $('#tableOfServiciosAcabado').DataTable().cell(currentRow,0).node().innerHTML; - var total = parseFloat($('#precio_total_acabado_' + subId)[0].value) - totalServicios += total - var base = parseFloat($('#precio_total_acabado_' + subId)[0].value)/(1+parseFloat($('#acabado_margen_' + subId)[0].innerHTML)/100.0); - var margen = total - base; - margenServicios += margen; - }) - } - - if ( typeof $("#tableOfServiciosPreimpresion").DataTable() !== 'undefined' && $("#tableOfServiciosPreimpresion").DataTable().rows().count() > 0){ - - $('#tableOfServiciosPreimpresion tbody tr').each(function(){ - var currentRow = $(this).closest("tr"); - var subId = $('#tableOfServiciosPreimpresion').DataTable().cell(currentRow,0).node().innerHTML; - var total = parseFloat($('#precio_preimpresion_' + subId)[0].value) - totalServicios += total - var base = parseFloat($('#precio_preimpresion_' + subId)[0].value)/(1+parseFloat($('#preimpresion_margen_' + subId)[0].innerHTML)/100.0); - var margen = total - base; - margenServicios += margen; - }) - } - - if ( typeof $("#tableOfServiciosExtra").DataTable() !== 'undefined' && $("#tableOfServiciosExtra").DataTable().rows().count() > 0){ - - $('#tableOfServiciosExtra tbody tr').each(function(){ - var currentRow = $(this).closest("tr"); - var subId = $('#tableOfServiciosExtra').DataTable().cell(currentRow,0).node().innerHTML; - var total = parseFloat($('#precio_servicioextra_' + subId)[0].value) - totalServicios += total - var base = parseFloat($('#precio_servicioextra_' + subId)[0].value)/(1+parseFloat($('#servicioextra_margen_' + subId)[0].innerHTML)/100.0); - var margen = total - base; - margenServicios += margen; - }) - } - - if ( typeof $("#tableOfServiciosManipulado").DataTable() !== 'undefined' && $("#tableOfServiciosManipulado").DataTable().rows().count() > 0){ - - $('#tableOfServiciosManipulado tbody tr').each(function(){ - var currentRow = $(this).closest("tr"); - var subId = $('#tableOfServiciosManipulado').DataTable().cell(currentRow,0).node().innerHTML; - var total = parseFloat($('#precio_total_manipulado_' + subId)[0].value) - totalServicios += total - var base = parseFloat($('#precio_total_manipulado_' + subId)[0].value)/(1+parseFloat($('#manipulado_margen_' + subId)[0].innerHTML)/100.0); - var margen = total - base; - margenServicios += margen; - }) - } - - totalServicios -= margenServicios; - - sumForFactorPonderado += totalServicios; - - var porcentajeMargenServicios = margenServicios/(totalServicios)*100 - $('#porcentajeMargenServicios').text(isNaN(porcentajeMargenServicios.toFixed(0))?0:porcentajeMargenServicios.toFixed(0) + '%') - $('#totalServicios').text((addSeparatorsNF(totalServicios.toFixed(2), ".", ",", ".")) + "€") - $('#margenServicios').text((addSeparatorsNF(margenServicios.toFixed(2), ".", ",", ".")) + "€") - $('#totalServicios').attr('val',totalServicios.toFixed(2) + '€') - $('#margenServicios').attr('val',margenServicios.toFixed(2) + '€') - - } - else{ - - totalServicios = parseFloat($('#totalServicios').attr('val')) - margenServicios = parseFloat($('#margenServicios').attr('val')) - - sumForFactorPonderado += totalServicios; - } - - if(updateEnvio){ - - if ( typeof $('#tableOfDireccionesEnvio').DataTable() !== 'undefined' && $('#tableOfDireccionesEnvio').DataTable().rows().count() > 0){ - $('#tableOfDireccionesEnvio').DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) { - var data = this.data() - totalEnvios += parseFloat(data.precio) - margenEnvios += parseFloat((data.precio)*data.margen/100) - } ); - } - - totalEnvios -= margenEnvios - $('#totalEnvios').text((addSeparatorsNF(totalEnvios.toFixed(2), ".", ",", ".")) + "€") - $('#margenEnvios').text((addSeparatorsNF(margenEnvios.toFixed(2), ".", ",", ".")) + "€") - $('#totalEnvios').attr('val',totalEnvios.toFixed(2) + '€') - $('#margenEnvios').attr('val',margenEnvios.toFixed(2) + '€') - } - else{ - totalEnvios = parseFloat($('#totalEnvios').attr('val')) - margenEnvios = parseFloat($('#margenEnvios').attr('val')) - } - - var totalCostes = parseFloat(totalPapel.toFixed(2)) + parseFloat(totalImpresion.toFixed(2)) + parseFloat(totalServicios.toFixed(2)) + parseFloat(totalEnvios.toFixed(2)) - var totalMargenes = parseFloat(margenPapel.toFixed(2)) + parseFloat(margenImpresion.toFixed(2)) + parseFloat(margenServicios.toFixed(2)) + parseFloat(margenEnvios.toFixed(2)) - var porcentajeMargen = totalCostes+totalMargenes>0? (100*totalMargenes/(totalCostes+totalMargenes)).toFixed(0) : 0 - $('#totalCostes').text((addSeparatorsNF(totalCostes.toFixed(2), ".", ",", ".")) + "€") - $('#totalMargenes').text((addSeparatorsNF(totalMargenes.toFixed(2), ".", ",", ".")) + "€") - $('#totalCostes').attr('val',(totalCostes).toFixed(2) + '€') - $('#totalMargenes').attr('val',(totalMargenes).toFixed(2) + '€') - $('#porcentajeMargen').text(porcentajeMargen + '%') - $('#porcentajeMargen').attr('val',porcentajeMargen) - - if($('#total_descuentoPercent').val()<0){ - $('#total_descuentoPercent').val(0) - } - var totalAntesDescuento = totalCostes + totalMargenes - var totalDescuento = totalAntesDescuento * parseInt($('#total_descuentoPercent').val())/100 - var totalPresupuesto = totalAntesDescuento - totalDescuento - var precioUnidad = totalPresupuesto/parseInt($('#tirada').val()) - - $('#totalAntesDescuento').text((addSeparatorsNF(totalAntesDescuento.toFixed(2), ".", ",", ".")) + "€") - $('#descuentoTotal').text((addSeparatorsNF(totalDescuento.toFixed(2), ".", ",", ".")) + "€") - $('#totalDespuesDecuento').text((addSeparatorsNF(totalPresupuesto.toFixed(2), ".", ",", ".")) + "€") - $('#precioUnidadPresupuesto').text((addSeparatorsNF(precioUnidad.toFixed(4), ".", ",", ".")) + "€") - $('#totalAntesDescuento').attr('val',(totalAntesDescuento).toFixed(2)) - $('#descuentoTotal').attr('val',(totalDescuento).toFixed(2)) - $('#totalDespuesDecuento').attr('val',(totalPresupuesto).toFixed(2)) - $('#precioUnidadPresupuesto').attr('val',(precioUnidad).toFixed(4)) - - - $('#factor').text(addSeparatorsNF(((totalPresupuesto-totalEnvios-margenEnvios)/sumForFactor).toFixed(2), ".", ",", ".")) - $('#factor').attr('val', ((totalPresupuesto-totalEnvios-margenEnvios)/sumForFactor).toFixed(2)) - $('#factor_ponderado').text(addSeparatorsNF(((totalPresupuesto-totalEnvios-margenEnvios)/sumForFactorPonderado).toFixed(2), ".", ",", ".")) - $('#factor_ponderado').attr('val',((totalPresupuesto-totalEnvios-margenEnvios)/sumForFactorPonderado).toFixed(2)) -} - - -function addSeparatorsNF(nStr, inD, outD, sep) -{ - nStr += ''; - var dpos = nStr.indexOf(inD); - var nStrEnd = ''; - if (dpos != -1) { - nStrEnd = outD + nStr.substring(dpos + 1, nStr.length); - nStr = nStr.substring(0, dpos); - } - var rgx = /(\d+)(\d{3})/; - while (rgx.test(nStr)) { - nStr = nStr.replace(rgx, '$1' + sep + '$2'); - } - return nStr + nStrEnd; -} - -function getValuesResumenForm(){ - var formResumen = ""; - formResumen += '&total_coste_papel=' + $('#totalCostePapel').attr('val'); - formResumen += '&total_margen_papel=' + $('#margenPapel').attr('val'); - formResumen += '&total_margenPercent_papel=' + $('#porcentajeMargenPapel').text().replace('%', ''); - - formResumen += '&total_coste_impresion=' + $('#totalCosteImpresion').attr('val'); - formResumen += '&total_margen_impresion=' + $('#margenImpresion').attr('val'); - formResumen += '&total_margenPercent_impresion=' + $('#porcentajeMargenImpresion').text().replace('%', ''); - - formResumen += '&total_coste_servicios=' + $('#totalServicios').attr('val'); - formResumen += '&total_margen_servicios=' + $('#margenServicios').attr('val'); - formResumen += '&total_margenPercent_servicios=' + $('#porcentajeMargenServicios').text().replace('%', ''); - - formResumen += '&total_coste_envios=' + $('#totalEnvios').attr('val'); - formResumen += '&total_margen_envios=' + $('#margenEnvios').attr('val'); - - formResumen += '&total_costes=' + $('#totalCostes').attr('val'); - formResumen += '&total_margenes=' + $('#totalMargenes').attr('val'); - - formResumen += '&total_antes_descuento=' + $('#totalAntesDescuento').attr('val'); - formResumen += '&total_descuento=' + $('#descuentoTotal').attr('val'); - formResumen += '&total_descuentoPercent=' + $('#total_descuentoPercent').val(); - formResumen += '&total_presupuesto=' + $('#totalDespuesDecuento').attr('val'); - formResumen += '&total_precio_unidad=' + $('#precioUnidadPresupuesto').attr('val'); - - // replace , for . in the values - formResumen += '&total_factor=' + $('#factor').text().replace(/,/g, '.'); - formResumen += '&total_factor_ponderado=' + $('#factor_ponderado').text().replace(/,/g, '.'); - - if($('#confirmar_presupuesto').prop('checked')){ - formResumen += '&confirmar=1'; - formResumen += '&total_aceptado=' + $('#totalDespuesDecuento').attr('val'); - } - - return formResumen -} - - - - -$(".update-totales").on("change", function(){ - updatePresupuesto({ - update_lineas: false, - update_servicios: false, - update_envios: false, - update_resumen: true, - update_tiradas_alternativas: false - }) -}) \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_tiradasAlternativasItems.js b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_tiradasAlternativasItems.js deleted file mode 100644 index 912bbd85..00000000 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_tiradasAlternativasItems.js +++ /dev/null @@ -1,397 +0,0 @@ -// Selección de la última columna de la tabla de tiradas -const lastColNr_tiradasAlt = $('#tableTiradas').find("tr:first th").length - 1; - - -// Función para generar los botones de acción de la tabla de tiradas -const actionBtns_tiradasAlt = function (data) { - return ` - - - `; -}; - - -// Inicializaciones de la tabla de tiradas -var tableTiradas; - - -// Espera a que todas las variables necesarias estén definidas -(async () => { - - while (!window.hasOwnProperty("datatable_lang_url") && !window.hasOwnProperty("datatable_TA_url")) - await new Promise(resolve => setTimeout(resolve, 200)); - initTableTiradas(); - fill_tiradas_alternativas(); - - /*$('.tiradas-alternativas').each(function() { - if ($(this).is('input')) { - $(this).bind('change', update_tiradas_alternativas); - } else if ($(this).is('button')) { - $(this).bind('click', update_tiradas_alternativas); - } else if ($(this).is('table')) { - $(this).bind('draw.dt', update_tiradas_alternativas); - } - else{ - // para los botones de borrar - $(this).bind('click', update_tiradas_alternativas); - } - });*/ - -})(); - - -async function actualizar_tiradas_alternativas(){ - if(tableTiradas !== undefined && tableTiradas.rows().count() > 0){ - // se obtiene la primera columna de la tabla de tiradas - const data = tableTiradas.rows().data().toArray(); - // se borra la tabla de tiradas - tableTiradas.clear().draw(); - const tiradas = data.map(row => row.tirada); - // por cada tirada, se añade una fila a la tabla de tiradas - await tiradas.forEach(async function(tirada){ - await add_tirada_alternativa(tirada); - }); - } - -} - - -// Evento de añadir una tirada alternativa -$('#add_tirada_alt').on('click', function () { - - const tirada_alt = parseInt($('#tirada_alt').val()); - add_tirada_alternativa(tirada_alt); - showBreadCrumbSaveButton(true); -}); - - -// Funcion para añadir una tirada alternativa -async function add_tirada_alternativa(tirada_alt) { - - // se comprueba que la tirada no existe ya en la tabla - const exists = tableTiradas.rows().data().toArray().some(row => row.tirada == tirada_alt); - const isPOD = parseInt($('#tirada').val())<= parseInt($('#POD').val()); - - const typeIsOk = tirada_alt <= parseInt($('#POD').val()) && isPOD || tirada_alt > parseInt($('#POD').val()) && !isPOD; - - if (!exists && typeIsOk) { - - const dimension = getDimensionLibro(); - - let datos = { - tirada: tirada_alt, - merma: get_merma_tirada_alternativa(tirada_alt), - tipo_impresion_id: $('#tipo_impresion_id').val(), - json_tiradas: generate_json_tiradas(), - ancho: dimension.ancho, - alto: dimension.alto, - cliente_id: $('#clienteId').find(":selected").val(), - solapas_cubierta: $('#solapas').is(':checked')?1:0, - solapas_cubierta_ancho: $('#solapas').is(':checked')?parseInt($('#solapas_ancho').val()):0, - solapas_sobrecubierta: $('#solapas_sobrecubierta').is(':checked')?1:0, - solapas_sobrecubierta_ancho: $('#solapas_sobrecubierta').is(':checked')?parseInt($('#solapas_ancho_sobrecubierta').val()):0, - lomo: getLomoExterior(), - }; - - datos = Object.assign(datos, window.token_ajax); - - // Se realiza la petición AJAX - await $.ajax({ - type: "POST", - url: window.get_tirada_url, - data: datos, - success: async function (data) { - - var coste_total = 0.0; - var margen_total = 0.0; - - var costes_servicios = 0.0; - var margen_servicios = 0.0; - - var coste_envio = 0.0; - var margen_envio = 0.0; - - if(data.lineas.length >0){ - // Se cogen los valores de la linea con los datos correspondientes - data.lineas.forEach(function(value) { - coste_total += value.total_coste; - margen_total += value.total_margen; - }); - - //console.log(datos.tirada); - - // Se obtiene el precio de los servicios - const valueAcabados = await get_servAcabados_tiradasAlternativas(parseInt(datos.tirada)); - costes_servicios += parseFloat(valueAcabados.coste); - margen_servicios += parseFloat(valueAcabados.margen); - - //console.log('coste acabados ('+ datos.tirada +'): ' + valueAcabados.coste); - - const valueEncuadernacion = await get_servEncuadernacion_tiradasAlternativas( - parseInt(datos.tirada), parseInt( $('#paginas').val()), parseInt(dimension.ancho), parseInt(dimension.alto)); - costes_servicios += parseFloat(valueEncuadernacion.coste); - margen_servicios += parseFloat(valueEncuadernacion.margen); - - //console.log('coste encuadernacion ('+ datos.tirada +'): ' + valueEncuadernacion.coste); - - const valueManipulado = await get_servManipulado_tiradasAlternativas(parseInt(datos.tirada)); - costes_servicios += parseFloat(valueManipulado.coste); - margen_servicios += parseFloat(valueManipulado.margen); - - //console.log('coste manipulado ('+ datos.tirada +'): ' + valueManipulado.coste); - - const valuePreimpresion = await get_servPreimpresion_tiradasAlternativas(parseInt(datos.tirada)); - costes_servicios += parseFloat(valuePreimpresion.coste); - margen_servicios += parseFloat(valuePreimpresion.margen); - - const valueServiciosExtra = await get_servExtra_tiradasAlternativas(parseInt(datos.tirada)); - costes_servicios += parseFloat(valueServiciosExtra.coste); - margen_servicios += parseFloat(valueServiciosExtra.margen); - - //console.log('coste preimpresion ('+ datos.tirada +'): ' + valuePreimpresion.coste); - - const valueTransporte = await get_coste_envio_tiradasAlternativas(parseInt(datos.tirada)); - coste_envio = valueTransporte.coste; - margen_envio = valueTransporte.margen; - - - // Se añade la fila a la tabla de tiradas - tableTiradas.row.add({ - tirada: datos.tirada, - coste_impresion: coste_total.toFixed(2), - coste_envio: coste_envio.toFixed(2), - margen: ((margen_total + margen_servicios + margen_envio)/(coste_total+coste_envio)*100.0).toFixed(2), - total_pedido: (coste_total + costes_servicios + coste_envio).toFixed(2), - precio_unidad: ((coste_total + costes_servicios + coste_envio) / datos.tirada).toFixed(4), - - }).draw(false); - } - - yeniden(data[window.csrf_token]); - - }, - error: function(e){} - }); - } - else { - var htmlString = ''; - if(typeIsOk){ - htmlString = ` - `; - } - - else{ - htmlString = ` - `; - } - $('#alert-tiradas_alt').hide().empty().html(htmlString).fadeIn("slow", function(){ - setTimeout(function(){ - $('#alert-tiradas_alt').fadeOut("slow"); - }, 5000); - }); - } - - -} - -// Función para obtener el lomo exterior -function getLomoExterior(){ - let lomoTotal = 0 - try{ - $('#tableLineasPresupuesto').DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) { - var rowData = this.data(); - if(rowData.row_id != 'lp_cubierta' && rowData.tipo != 'lp_sobrecubierta') - lomoTotal += parseFloat(rowData.lomo) - }) - } - catch(error){ - lomoTotal = 0 - } - return lomoTotal -} - - -// Inicialización de la tabla de tiradas -function initTableTiradas() { - tableTiradas = $('#tableTiradas').DataTable({ - "language": { - "url": window.datatable_lang_url - }, - "paging": false, - "info": false, - "searching": false, - "ordering": true, - "autoWidth": false, - "responsive": true, - "columnDefs": [ - { - orderable: false, - searchable: false, - targets: [lastColNr_tiradasAlt] - }, - ], - "columns": [ - { data: "tirada" }, - { data: 'coste_impresion' }, - { data: 'coste_envio' }, - { data: 'margen' , - render: function ( data, type, row ) { - return data + '%'; - } - }, - { data: 'total_pedido' }, - { data: 'precio_unidad' }, - { - data: actionBtns_tiradasAlt, - className: 'row-edit dt-center' - } - ], - order: [[0, 'asc']] - }); -} - -// Evento de borrado de una fila de la tabla de tiradas -$(document).on('click', '.btn-delete-tirada', function (e) { - - const row = $(this).closest('tr'); - tableTiradas.row(row) - .remove() - .draw(); - showBreadCrumbSaveButton(true); -}) - - -// Función para usar la tirada alternativa como tirada principal -$(document).on('click', '.comfirm-tirada-alt', function (e) { - - const row = $(this).closest('tr'); - const data = tableTiradas.row(row).data(); - - updateTablaEnvios($('#tirada').val(), data.tirada).then(function(){ - $('#tirada').val(data.tirada); - $('#tirada').trigger('change', [false]); - }) -}) - - -// Función para generar el JSON de las lineas de presupuesto para calcular las tiradas -function generate_json_tiradas() { - - const data = $('#tableLineasPresupuesto').DataTable().data().toArray(); - - //return data; // For debugging purposes - json = filterData(data, - ['paginas', - 'numPagColor', - 'paginas_impresion', - 'papel', // papel generico - 'papel_impresion_id', - 'gramaje', - 'maquina_id', - 'aFavorFibra', - 'row_id', - 'check_papel_total', - 'check_impresion_total', - 'cobAmarillo', // tipologia de papel - 'cobCyan', - 'cobMagenta', - 'cobNegro', - 'cobCG', - 'gotaColor', - 'gotaNegro']); - - json.forEach(element => { - element['check_papel_total'] = $('#' + element['row_id'] + '_checkPapel').is(':checked') ? 1 : 0; - element['check_impresion_total'] = $('#' + element['row_id'] + '_checkClicks').is(':checked') ? 1 : 0; - }); - return JSON.stringify(json); -} - - -// Función para filtrar las columnas de la tabla de tiradas -function filterData(data, keys) { - return data.map(obj => { - const newObj = {}; - keys.forEach(key => { - if (obj.hasOwnProperty(key)) { - newObj[key] = obj[key]; - } - }); - return newObj; - }); -} - - -// Función para obtener la merma de la tirada alternativa -function get_merma_tirada_alternativa(tirada){ - - var merma = 0 - - if(tirada>parseInt($('#POD').val())){ - - merma = tirada*0.1<=30 ? tirada*0.1 : 30 - } - else{ - merma_lineas = [] - $('#tableLineasPresupuesto').DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) { - var rowData = this.data(); - if(rowData.row_id != 'lp_guardas' && rowData.row_id != 'lp_cubierta' && rowData.row_id != 'lp_sobrecubierta'){ - const formas_linea = $('#isCosido').val()==0?parseInt(rowData.formas):parseInt(rowData.formas)/2 - if(formas_linea > tirada) - merma_lineas.push(formas_linea-tirada) - else - merma_lineas.push(tirada%formas_linea) - } - }) - - if(merma_lineas.length>0) - merma = Math.max(...merma_lineas) - else - merma = 0 - } - return merma; -} - - -function fill_tiradas_alternativas(){ - tableTiradas.clear().draw(); - const text = $('#tirada_alternativa_json_data').val() - if(text.length>0){ - - const data = JSON.parse(text); - if(data.length>0){ - $.each(data, function(key, value) { - tableTiradas.row.add({ - tirada: value.tirada, - coste_impresion: value.coste_impresion, - coste_envio: value.coste_envio, - margen: value.margen, - total_pedido: value.total_pedido, - precio_unidad: value.precio_unidad, - }).draw(false); - }); - } - } -} - - - - \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_tiradasAlternativasItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_tiradasAlternativasItems.php index ecb7af82..8e1baa2e 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_tiradasAlternativasItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_tiradasAlternativasItems.php @@ -30,7 +30,7 @@ - + @@ -48,21 +48,6 @@
- - - -section("additionalInlineJs") ?> - window.datatable_lang_url = "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"; - - window.datatable_TA_url = ""; - window.get_tirada_url = ""; - - window.error_lang_tirada_alt_duplicada = ""; - window.error_lang_tirada_alt_tipo = ""; - -endSection() ?> - - diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/comparador.js b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/comparador.js deleted file mode 100644 index fef4b8da..00000000 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/comparador.js +++ /dev/null @@ -1,747 +0,0 @@ -/******************************* - * Eventos asociados a elementos HTML - *******************************/ -$('#compPaginasNegro').on("change", function () { - var negro = parseInt(document.getElementById('compPaginasNegro').value); - const paginas = parseInt(document.getElementById('paginas').value); - if (paginas < negro) { - document.getElementById('compPaginasNegro').value = paginas; - negro = paginas; - } - var color = parseInt(document.getElementById('compPaginasColor').value); - if ($('#tipoImpresion').select2('data')[0].id == 'color') { - - var newValue = paginas - negro; - if (newValue != color) { - document.getElementById('compPaginasColor').value = newValue >= 0 ? newValue : 0; - $('#compPaginasColor').change(); - } - } -}); - -$('#compPaginasColor').on("change", function () { - const paginas = parseInt(document.getElementById('paginas').value); - var color = parseInt(document.getElementById('compPaginasColor').value); - var negro = parseInt(document.getElementById('compPaginasNegro').value); - - if (paginas < color) { - document.getElementById('compPaginasColor').value = paginas; - color = paginas - } - var newValue = paginas - color; - if (newValue != negro) { - document.getElementById('compPaginasNegro').value = newValue >= 0 ? newValue : 0; - $('#compPaginasNegro').change(); - } -}); - -$('#compPaginasNegrohq').on("change", function () { - - var negro = parseInt(document.getElementById('compPaginasNegrohq').value); - const paginas = parseInt(document.getElementById('paginas').value); - if (paginas < negro) { - document.getElementById('compPaginasNegrogq').value = paginas; - negro = paginas; - } - var color = parseInt(document.getElementById('compPaginasColorhq').value); - if ($('#tipoImpresion').select2('data')[0].id == 'colorhq') { - - var newValue = paginas - negro; - if (newValue != color) { - document.getElementById('compPaginasColorhq').value = newValue >= 0 ? newValue : 0; - $('#compPaginasColorhq').change(); - } - } - -}); - -$('#compPaginasColorhq').on("change", function () { - const paginas = parseInt(document.getElementById('paginas').value); - var color = parseInt(document.getElementById('compPaginasColorhq').value); - var negro = parseInt(document.getElementById('compPaginasNegrohq').value); - - if (paginas < color) { - document.getElementById('compPaginasColorhq').value = paginas; - color = paginas - } - var newValue = paginas - color; - if (newValue != negro) { - document.getElementById('compPaginasNegrohq').value = newValue >= 0 ? newValue : 0; - $('#compPaginasNegrohq').change(); - } -}); - - - -$('#prototipo').on("change", function () { - $('#ferro').prop('checked', true) -}); - - - -$('#compPosPaginasColor').on("keyup", function () { - computarPaginasColor(this.value); -}); - - -// Este evento recoloca los headers de las tablas cuando se pulsa el -// boton del acordeon -$('.accordion-button').on('click', function (e) { - - if (e.target.id.includes("plana")) { - $("#tableCompIntPlana").DataTable().columns.adjust(); - } - else if (e.target.id.includes("rotativa")) { - $("#tableCompIntRotativa").DataTable().columns.adjust(); - } - else if (e.target.id.includes("cubierta")) { - $("#tableCompCubierta").DataTable().columns.adjust(); - } - else if (e.target.id.includes("guardas")) { - $("#tableCompGuardas").DataTable().columns.adjust(); - } - else if (e.target.id.includes("LineasPresupuesto")) { - $("#tableLineasPresupuesto").DataTable().columns.adjust(); - } - - -}); - - - - -/******************************* - * Metodos - *******************************/ -function getRowFromLineaInt(tipo, linea) { - - $precio_impresion = isNaN(parseFloat(linea.fields.precio_impresion_horas + linea.fields.margen_impresion_horas + linea.fields.precio_click_pedido)) ? "" : - parseFloat(linea.fields.precio_impresion_horas + linea.fields.margen_impresion_horas + linea.fields.precio_click_pedido).toFixed(2); - - - data = { - 'tipo': tipo, - 'paginas': linea.fields.paginas, - 'papel': linea.fields.papel_generico, - 'gramaje': linea.fields.gramaje, - 'marca': linea.fields.papel_impresion, - 'maquina': linea.fields.maquina, - 'numeroPliegos': isNaN(parseFloat(linea.fields.pliegos_libro)) ? "" : parseFloat(linea.fields.pliegos_libro).toFixed(2), - 'pliegosPedido': isNaN(parseFloat(linea.fields.pliegos_pedido)) ? "" : parseFloat(linea.fields.pliegos_pedido).toFixed(2), - 'precioPliego': isNaN(parseFloat(linea.fields.precios_pliegos)) ? "" : parseFloat(linea.fields.precios_pliegos).toFixed(6), - 'libro': isNaN(parseFloat(linea.fields.precio_libro)) ? "" : parseFloat(linea.fields.precio_libro).toFixed(2), - 'totalPapelPedido': isNaN(parseFloat(linea.fields.precio_pedido)) ? "" : parseFloat(linea.fields.precio_pedido).toFixed(2), - 'lomo': isNaN(parseFloat(linea.fields.mano)) ? "" : parseFloat(linea.fields.mano).toFixed(2), - 'peso': isNaN(parseFloat(linea.fields.peso)) ? "" : parseFloat(linea.fields.peso).toFixed(2), - 'horasMaquina': isNaN(parseFloat(linea.fields.horas_maquina)) ? "" : parseFloat(linea.fields.horas_maquina).toFixed(2), - 'precioImpresion': $precio_impresion, - 'total': isNaN(parseFloat(linea.fields.total_impresion).toFixed(2)) ? "" : parseFloat(linea.fields.total_impresion).toFixed(2), - 'maquinaId': linea.fields.maquina_id, - 'maquinaVelocidad': linea.fields.maquina_velocidad, - 'tiempoMaquina': linea.fields.tiempo_maquina, - 'papelGenericoId': linea.fields.papel_generico_id, - 'papelImpresionId': linea.fields.papel_impresion_id, - 'tarifa_impresion_id': linea.fields.tarifa_impresion_id, - } - if(data['tipo']=='guardas') - data['paginas_impresion'] = linea.fields.paginas_impresion; - return data; -} - -function getRowFromLineaRot(linea) { - - $precio_impresion = isNaN(parseFloat(linea.fields.precio_impresion_horas + linea.fields.precio_click_pedido)) ? "" : - parseFloat(linea.fields.precio_impresion_horas + linea.fields.precio_click_pedido).toFixed(2); - - return { - 'tipo': 'rotativa', - 'paginas': linea.fields.paginas, - 'papel': linea.fields.papel_generico, - 'gramaje': linea.fields.gramaje, - 'marca': linea.fields.papel_impresion, - 'aFavorFibra': linea.fields.a_favor_fibra == 1 ? 'si' : 'no', - 'maquina': linea.fields.maquina, - 'numeroPliegos': isNaN(parseFloat(linea.fields.pliegos_libro)) ? "" : parseFloat(linea.fields.pliegos_libro).toFixed(2), - 'pliegosPedido': isNaN(parseFloat(linea.fields.pliegos_pedido)) ? "" : parseFloat(linea.fields.pliegos_pedido).toFixed(2), - 'precioPliego': isNaN(parseFloat(linea.fields.precios_pliegos)) ? "" : parseFloat(linea.fields.precios_pliegos).toFixed(6), - 'libro': isNaN(parseFloat(linea.fields.precio_libro)) ? "" : parseFloat(linea.fields.precio_libro).toFixed(2), - 'totalPapelPedido': isNaN(parseFloat(linea.fields.precio_pedido)) ? "" : parseFloat(linea.fields.precio_pedido).toFixed(2), - 'lomo': isNaN(parseFloat(linea.fields.mano)) ? "" : parseFloat(linea.fields.mano).toFixed(2), - 'peso': isNaN(parseFloat(linea.fields.peso)) ? "" : parseFloat(linea.fields.peso).toFixed(2), - 'horasMaquina': isNaN(parseFloat(linea.fields.horas_maquina)) ? "" : parseFloat(linea.fields.horas_maquina).toFixed(2), - 'precioImpresion': $precio_impresion, - 'precioPagNegro': isNaN(parseFloat(linea.fields.precio_pagina_negro)) ? "" : parseFloat(linea.fields.precio_pagina_negro).toFixed(6), - 'precioPagColor': isNaN(parseFloat(linea.fields.precio_pagina_color)) ? "" : parseFloat(linea.fields.precio_pagina_color).toFixed(6), - 'totalTinta': isNaN(parseFloat(linea.fields.precio_tinta)) ? "" : parseFloat(linea.fields.precio_tinta).toFixed(2), - 'totalCorte': isNaN(parseFloat(linea.fields.total_corte)) ? "" : parseFloat(linea.fields.total_corte).toFixed(2), - 'total': isNaN(parseFloat(linea.fields.total_impresion)) ? "" : (parseFloat(linea.fields.total_impresion)).toFixed(2), - 'maquinaId': linea.fields.maquina_id, - 'maquinaVelocidad': linea.fields.maquina_velocidad, - 'tiempoMaquina': linea.fields.tiempo_maquina, - 'papelGenericoId': linea.fields.papel_generico_id, - 'papelImpresionId': linea.fields.papel_impresion_id, - 'paginasColor': linea.fields.paginas_color, - 'tarifa_impresion_id': linea.fields.tarifa_impresion_id, - } -} - - - - - -function computarPaginasColor(string) { - - var numbers = []; - for (const [, beginStr, endStr] of string.matchAll(/(\d+)(?:-(\d+))?/g)) { - const [begin, end] = [beginStr, endStr].map(Number); - numbers.push(begin); - if (endStr !== undefined) { - for (let num = begin + 1; num <= end; num++) { - numbers.push(num); - } - } - } - var numbers2 = []; - numbers.forEach(function (value, i) { - // Si es impar y no está el siguiente par hay que añadirlo - if (value % 2 != 0 && numbers[i + 1] != value + 1) { - numbers2.push(value + 1); - } - }); - numbers = numbers.concat(numbers2); - numbers.sort(function (a, b) { - return a - b; - }); - calPagesTextarea = document.getElementById('compCalPaginasColor'); - calPagesTextarea.value = numbers; - autosize.update(calPagesTextarea); -} - - -function checkRetractiladoComparador(element) { - - switch (element.id) { - case 'retractilado': - if ($('#' + element.id).prop('checked')) { - $('#retractilado5').prop('checked', false); - } - break; - case 'retractilado5': - if ($('#' + element.id).prop('checked')) { - $('#retractilado').prop('checked', false); - } - break; - default: - break; - } - -} - -function updatePapelesComparador() { - - var e = document.getElementById("tipoImpresion"); - elements_negro = document.getElementsByClassName('comp-negro-selected'); - elements_negrohq = document.getElementsByClassName('comp-negrohq-selected'); - elements_color = document.getElementsByClassName('comp-color-selected'); - elements_colorhq = document.getElementsByClassName('comp-colorhq-selected'); - switch (e.value) { - case "negro": - Array.from(elements_color).forEach(element => { - element.style.display = "none"; - }); - Array.from(elements_negro).forEach(element => { - element.style.display = "flex"; - }); - Array.from(elements_negrohq).forEach(element => { - element.style.display = "none"; - }); - Array.from(elements_colorhq).forEach(element => { - element.style.display = "none"; - }); - break; - - case "negrohq": - Array.from(elements_color).forEach(element => { - element.style.display = "none"; - - }); - Array.from(elements_negro).forEach(element => { - element.style.display = "none"; - }); - Array.from(elements_negrohq).forEach(element => { - element.style.display = "flex"; - }); - Array.from(elements_colorhq).forEach(element => { - element.style.display = "none"; - }); - break; - - case "color": - Array.from(elements_negro).forEach(element => { - element.style.display = "flex"; - }); - Array.from(elements_negrohq).forEach(element => { - element.style.display = "none"; - }); - Array.from(elements_color).forEach(element => { - element.style.display = "flex"; - }); - Array.from(elements_colorhq).forEach(element => { - element.style.display = "none"; - }); - break; - - case "colorhq": - Array.from(elements_negro).forEach(element => { - element.style.display = "none"; - }); - Array.from(elements_negrohq).forEach(element => { - element.style.display = "flex"; - }); - Array.from(elements_color).forEach(element => { - element.style.display = "none"; - }); - Array.from(elements_colorhq).forEach(element => { - element.style.display = "flex"; - }); - break; - - default: - break; - } -} - - - -function clearIntLineas(is_color) { - //$("#tableCompIntPlana").DataTable().rows( '.selected' ).deselect(); - var tabla = $('#tableCompIntPlana').DataTable(); - tabla - .rows(function (idx, data, node) { - return data['tipo'].includes(is_color ? 'color' : 'bn'); - }) - .remove() - .draw(); - //$('#tableCompIntPlana').DataTable().clear().draw(); - $('#insertarPlanaBtn').css('display', 'none'); -} - - -function clearCubierta() { - - var tabla = $('#tableCompCubierta').DataTable(); - tabla - .rows(function (idx, data, node) { - return data['tipo'] === 'cubierta'; - }) - .remove() - .draw(); - if(tabla.rows().count()==0) - $('#insertarCubiertaBtn').css('display', 'none'); -} - -function clearSobrecubierta() { - - - var tabla = $('#tableCompCubierta').DataTable(); - tabla - .rows(function (idx, data, node) { - return data['tipo'] === 'sobrecubierta'; - }) - .remove() - .draw(); - if(tabla.rows().count()==0) - $('#insertarCubiertaBtn').css('display', 'none'); -} - -function clearGuardas() { - - $('#tableCompGuardas').DataTable().clear().draw(); - $('#insertarGuardasBtn').css('display', 'none'); -} - -function clearIntRot() { - - $('#errorComRot').html(''); - $('#tableCompIntRotativa').DataTable().clear().draw(); - $('#insertarRotativaBtn').css('display', 'none'); -} - - -function selectIntLineas() { - var negro_selected = false; - var color_selected = false; - $("#tableCompIntPlana").DataTable().rows('.selected').deselect(); - $("#tableCompIntPlana").DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { - if (!negro_selected && $('#tableCompIntPlana').DataTable().cell(rowIdx, 0).data().includes('bn')) { - $("#tableCompIntPlana").DataTable().row(rowIdx).nodes().to$().toggleClass('selected'); - negro_selected = true; - } - if (!color_selected && $('#tableCompIntPlana').DataTable().cell(rowIdx, 0).data().includes('color')) { - $("#tableCompIntPlana").DataTable().row(rowIdx).nodes().to$().toggleClass('selected'); - color_selected = true; - } - }); - - var table = $("#tableCompIntPlana").DataTable(); - var rows = table.rows('.selected').indexes(); - var data = table.rows(rows).data(); - - var value_total = 0.00; - - for (let i = 0; i < data.length; i++) { - - value_total += parseFloat(data[i]['total']) - } - - $('#total_comp_plana').html(value_total.toFixed(2)); -} - -function selectIntRotLineas() { - - $("#tableCompIntRotativa").DataTable().rows('.selected').deselect(); - - let value_total = 0.00; - - if ($("#tableCompIntRotativa").DataTable().rows().count() > 0) { - - $("#tableCompIntRotativa").DataTable().row(0).nodes().to$().toggleClass('selected'); - value_total = parseFloat($("#tableCompIntRotativa").DataTable().rows(0).data()[0]['total']) - }; - - - $('#total_comp_rot').html(value_total.toFixed(2)); -} - -function selectCubiertaLineas() { - - $("#tableCompCubierta").DataTable().rows('.selected').deselect(); - - cubierta_selected = false; - sobrecubierta_selected = false; - - if ($("#tableCompCubierta").DataTable().rows().count() > 0) { - - $("#tableCompCubierta").DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { - if (!cubierta_selected && $('#tableCompCubierta').DataTable().cell(rowIdx, 0).data() === 'cubierta') { - $("#tableCompCubierta").DataTable().row(rowIdx).nodes().to$().toggleClass('selected'); - cubierta_selected = true; - } - if (!sobrecubierta_selected && $('#tableCompCubierta').DataTable().cell(rowIdx, 0).data() === 'sobrecubierta') { - $("#tableCompCubierta").DataTable().row(rowIdx).nodes().to$().toggleClass('selected'); - sobrecubierta_selected = true; - } - }); - } - - var table = $("#tableCompCubierta").DataTable(); - var rows = table.rows('.selected').indexes(); - var data = table.rows(rows).data(); - - var value_total = 0.00; - - for (let i = 0; i < data.length; i++) { - - value_total += parseFloat(data[i]['total']) - } - - - $('#total_comp_cubierta').html(value_total.toFixed(2)); -} - -function selectGuardasLineas() { - - $("#tableCompGuardas").DataTable().rows('.selected').deselect(); - - let value_total = 0.00; - - if ($("#tableCompGuardas").DataTable().rows().count() > 0) { - - $("#tableCompGuardas").DataTable().row(0).nodes().to$().toggleClass('selected'); - value_total = parseFloat($("#tableCompGuardas").DataTable().rows(0).data()[0]['total']) - }; - - - $('#total_comp_guardas').html(value_total.toFixed(2)); -} - -function getIDsComparador(is_color, is_hq) { - - if (!is_color) { - if (is_hq) { - var papel = '#compPapelNegrohq'; - var gramaje = '#compGramajeNegrohq'; - var paginas = '#compPaginasNegrohq'; - } - else { - var papel = '#compPapelNegro'; - var gramaje = '#compGramajeNegro'; - var paginas = '#compPaginasNegro'; - } - } - else { - if (is_hq) { - var papel = '#compPapelColorhq'; - var gramaje = '#compGramajeColorhq'; - var paginas = '#compPaginasColorhq'; - } - else { - var papel = '#compPapelColor'; - var gramaje = '#compGramajeColor'; - var paginas = '#compPaginasColor'; - } - } - return { - papel: papel, - gramaje: gramaje, - paginas: paginas, - } -} - -function getDimensionLibro() { - var ancho = 0; - var alto = 0; - - - if ($('#papelFormatoId').select2('data').length > 0) { - if ($('#papelFormatoId').select2('data')[0].id.length > 0) { - ancho = parseFloat($('#papelFormatoId').select2('data')[0].text.trim().split(" x ")[0]); - alto = parseFloat($('#papelFormatoId').select2('data')[0].text.trim().split(" x ")[1]); - } - else if (document.getElementById('papelFormatoPersonalizado').checked) { - ancho = parseFloat(document.getElementById('papelFormatoAncho').value); - alto = parseFloat(document.getElementById('papelFormatoAlto').value); - } - } - - else if (document.getElementById('papelFormatoPersonalizado').checked) { - ancho = parseFloat(document.getElementById('papelFormatoAncho').value); - alto = parseFloat(document.getElementById('papelFormatoAlto').value); - } - return { - ancho: ancho, - alto: alto - } -} - -function checkInputsForRotativa() { - - // Si es color, el gramaje y el papel tiene que ser el mismo - try { - - if ($('#tipoImpresion').select2('data')[0].id == 'color') { - if ($('#compPapelNegro').select2('data')[0].id == $('#compPapelColor').select2('data')[0].id && - $('#compGramajeNegro').select2('data')[0].text.trim() == $('#compGramajeColor').select2('data')[0].text.trim()) { - - return true; - } - } - else if ($('#tipoImpresion').select2('data')[0].id == 'negro') { - if ($('#compPapelNegro').select2('data')[0].id.length > 0 && - $('#compGramajeNegro').select2('data')[0].text.length > 0) { - return true; - } - } - - - } - catch (error) { - - return false; - } - - return false; -} - - -function fillIntPlana(data, is_color, is_hq) { - let sorted = data.lineas.sort( - (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? - -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0); - sorted.forEach(function (linea) { - if (typeof linea.error == "undefined") - $('#tableCompIntPlana').DataTable().row - .add(getRowFromLineaInt(is_color ? (is_hq ? 'colorhq' : 'color') : (is_hq ? 'bnhq' : 'bn'), linea)) - .draw() - }) -} - -function fillIntRot(data) { - let sorted = data.lineas.sort( - (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? - -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0); - sorted.forEach(function (linea) { - if (typeof linea.error == "undefined") { - $('#tableCompIntRotativa').DataTable().row - .add(getRowFromLineaRot(linea)) - .draw() - } - }) -} - -function fillCubierta(data) { - - let sorted = data.lineas.sort( - (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? - -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0); - sorted.forEach(function (linea) { - if (typeof linea.error == "undefined") - $('#tableCompCubierta').DataTable().row - .add(getRowFromLineaInt('cubierta', linea)) - .draw() - }) -} - -function fillSobrecubierta(data) { - - let sorted = data.lineas.sort( - (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? - -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0); - sorted.forEach(function (linea) { - if (typeof linea.error == "undefined") - $('#tableCompCubierta').DataTable().row - .add(getRowFromLineaInt('sobrecubierta', linea)) - .draw() - }) -} - -function fillGuardas(data) { - - let sorted = data.lineas.sort( - (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? - -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0); - sorted.forEach(function (linea) { - if (typeof linea.error == "undefined") - $('#tableCompGuardas').DataTable().row - .add(getRowFromLineaInt('guardas', linea)) - .draw() - }) -} - -function clearCompTable() { - - $('#insertarPlanaBtn').addClass('d-none') - $('#insertarRotativaBtn').addClass('d-none') - $('#total_comp_plana').html('0.00') - $('#total_comp_rot').html('0.00') -} - -function generateCompJSON() { - - data = {} - - if ($('#tipoImpresion').select2('data')[0].id == 'negro' || $('#tipoImpresion').select2('data')[0].id == 'color') { - try { - bn_obj = { - "bn": { - 'paginas': $('#compPaginasNegro').val(), - 'papel_id': $('#compPapelNegro').select2('data')[0].id, - 'gramaje': $('#compGramajeNegro').select2('data')[0].text.trim(), - } - } - } - catch (e) { - bn_obj = {} - } - $.extend(data, bn_obj); - } - - if ($('#tipoImpresion').select2('data')[0].id == 'negrohq' || $('#tipoImpresion').select2('data')[0].id == 'colorhq') { - try { - bnhq_obj = { - "bnhq": { - 'paginas': $('#compPaginasNegrohq').val(), - 'papel_id': $('#compPapelNegrohq').select2('data')[0].id, - 'gramaje': $('#compGramajeNegrohq').select2('data')[0].text.trim(), - } - } - } - catch (e) { - bnhq_obj = {} - } - $.extend(data, bnhq_obj); - } - - if ($('#tipoImpresion').select2('data')[0].id == 'color') { - try { - color_obj = { - "color": { - 'paginas': $('#compPaginasColor').val(), - 'papel_id': $('#compPapelColor').select2('data')[0].id, - 'gramaje': $('#compGramajeColor').select2('data')[0].text.trim(), - }, - } - } - catch (e) { - color_obj = {} - } - $.extend(data, color_obj); - - } - - - if ($('#tipoImpresion').select2('data')[0].id == 'colorhq') { - try { - colorhq_obj = { - "colorhq": { - 'paginas': $('#compPaginasColorhq').val(), - 'papel_id': $('#compPapelColorhq').select2('data')[0].id, - 'gramaje': $('#compGramajeColorhq').select2('data')[0].text.trim(), - }, - } - } - catch (e) { - colorhq_obj = {} - } - $.extend(data, colorhq_obj); - } - - - try { - cubierta_obj = { - "cubierta": { - 'paginas': $('#compCarasCubierta option:selected').val(), - 'papel_id': $('#compPapelCubierta').select2('data')[0].id, - 'gramaje': $('#compGramajeCubierta').select2('data')[0].text.trim(), - }, - } - } - catch (e) { - cubierta_obj = {} - } - $.extend(data, cubierta_obj); - - try { - sobrecubierta_obj = { - "sobrecubierta": { - 'imprimir': $('#compSobrecubierta option:selected').val(), - 'papel_id': $('#compPapelSobrecubierta').select2('data')[0].id, - 'gramaje': $('#compGramajeSobrecubierta').select2('data')[0].text.trim(), - }, - } - } - catch (e) { - sobrecubierta_obj = {} - } - $.extend(data, sobrecubierta_obj); - - if($('#compCarasGuardas').length>0){ - try { - guardas_obj = { - "guardas": { - 'paginas_impresion': $('#compCarasGuardas option:selected').val(), - 'papel_id': $('#compPapelGuardas').select2('data')[0].id, - }, - } - } - catch (e) { - guardas_obj = {} - } - $.extend(data, guardas_obj); - - } - - data_str = JSON.stringify(data) - $('#comparador_json_data').val(data_str) -} - diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/previews.js b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/previews.js deleted file mode 100644 index b083774c..00000000 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/previews.js +++ /dev/null @@ -1,1107 +0,0 @@ -// Global parameters -var pvObj; - -function previewInteriorPlana(lpTagName, isCosido, isTapaDura) { - - // Local parameters - let guardaV = 0; - let guardaH = 0; - let styleText = {size: 12, family: 'Public Sans'}; - - // Get the preview Object parameters - getObjetoLP(lpTagName, isCosido, isTapaDura); - - // Configuracion de las guardas - // Guarda vertical - if (pvObj.nFormasV > 1) { - guardaV = 3; - } - // Guarda horizontal - if (pvObj.nFormasH > 1) { - guardaH = 3; - } - // Constantes relativas a las dimnesiones de la forma - let LVo = pvObj.altoForma / 2; - let LHo = pvObj.anchoForma / 2; - - // Clear the canvas element - $('#pv_' + pvObj.idIndex + '_shape').empty(); - // Get the element for placing the graphical elements - var divPlana = document.getElementById('pv_' + pvObj.idIndex + '_shape'); - var _pvPlana = new Two({fitted: true}).appendTo(divPlana); - // Calculate the center of the canvas element - var origenPlana = new Two.Vector(_pvPlana.width / 2, _pvPlana.height / 2); - - var areaMaquinaPlana = _pvPlana.makeRectangle( - origenPlana.x, - origenPlana.y, - pvObj.anchoMaquina, - pvObj.altoMaquina); - areaMaquinaPlana.stroke = 'black'; - areaMaquinaPlana.fill = '#E69F6E'; - areaMaquinaPlana.linewidth = 1; - - var areaImpresionPlana = _pvPlana.makeRectangle( - origenPlana.x, - origenPlana.y, - pvObj.anchoImpresion, - pvObj.altoImpresion); - areaImpresionPlana.stroke = 'red'; - areaImpresionPlana.fill = '#FCEAF1'; - areaImpresionPlana.linewidth = 1; - - var formas = []; - - for (let iV = 0; iV < pvObj.nFormasV; iV++) { - - for (let iH = 0; iH < pvObj.nFormasH; iH++) { - - let _offsetX = ((((pvObj.nFormasH - 1) - 2 * iH) * LHo) + (((pvObj.nFormasH - 1) / 2 - iH) * guardaH)); - let _offsetY = ((((pvObj.nFormasV - 1) - 2 * iV) * LVo) + (((pvObj.nFormasV - 1) / 2 - iV) * guardaV)); - - formas[iV + iH] = _pvPlana.makeRectangle( - origenPlana.x + _offsetX, - origenPlana.y + _offsetY, - pvObj.anchoForma, - pvObj.altoForma); - formas[iV + iH].stroke = 'grey'; - formas[iV + iH].fill = '#F4F8F2'; - formas[iV + iH].linewidth = 1; - - // Texts - _pvPlana.makeText(pvObj.altoForma, (origenPlana.x + _offsetX) + (pvObj.anchoForma / 2 - 25), (origenPlana.y + _offsetY), styleText); - _pvPlana.makeText(pvObj.anchoForma, (origenPlana.x + _offsetX), (origenPlana.y + _offsetY) + (pvObj.altoForma / 2 - 15), styleText); - - } - } - _pvPlana.update(); -} - -function previewRotativa(lpTagName, isCosido, isTapaDura) { - - // Local parameters - let styleText = {size: 12, family: 'Public Sans'}; - let margenTop = 3; - let guardaV = 0; - let guardaH = 0; - - // Get the preview Object parameters - getObjetoLP(lpTagName, isCosido, isTapaDura); - - // Calculos - // Configuracion de las guardas - // Guarda vertical - if (pvObj.nFormasV > 1) { - guardaV = 3; - } - // Guarda horizontal - if (pvObj.nFormasH > 1) { - guardaH = 3; - } - // Constantes relativas al libro - let LVo = pvObj.altoForma / 2; - let LHo = pvObj.anchoForma / 2; - - // offset Y - let nTopForms = (pvObj.altoImpresion / 2.0 - margenTop) / (LVo + guardaV); - let yOffset = LVo * getDecimalPart(nTopForms); - - //console.log(yOffset); - - // Clear the canvas element - $('#pv_' + pvObj.idIndex + '_shape').empty(); - // Get the element for placing the graphical elements - var divRotativa = document.getElementById('pv_' + pvObj.idIndex + '_shape'); - var _pvRotativa = new Two({fitted: true}).appendTo(divRotativa); - // Calculate the center of the canvas element - var origenRotativa = new Two.Vector(_pvRotativa.width / 2, _pvRotativa.height / 2); - - var areaMaquinaRotativa = _pvRotativa.makeRectangle( - origenRotativa.x, - origenRotativa.y, - pvObj.anchoMaquina, - pvObj.altoMaquina); - areaMaquinaRotativa.stroke = 'black'; - areaMaquinaRotativa.fill = '#E69F6E'; - areaMaquinaRotativa.linewidth = 1; - - var areaImpresionRotativa = _pvRotativa.makeRectangle( - origenRotativa.x, - origenRotativa.y, - pvObj.anchoImpresion, - pvObj.altoImpresion); - areaImpresionRotativa.stroke = 'red'; - areaImpresionRotativa.fill = '#FCEAF1'; - areaImpresionRotativa.linewidth = 1; - - var areaClickRotativa = _pvRotativa.makeRectangle( - origenRotativa.x, - origenRotativa.y - (pvObj.altoImpresion / 2 - pvObj.altoClick / 2), - pvObj.anchoImpresion - 10, - pvObj.altoClick); - areaClickRotativa.stroke = 'blue'; - //areaClickRotativa.fill = '#FCEAF1'; - areaClickRotativa.linewidth = 2; - - var formas = []; - - for (let iV = 0; iV < pvObj.nFormasV; iV++) { - - for (let iH = 0; iH < pvObj.nFormasH; iH++) { - - let _offsetX = ((((pvObj.nFormasH - 1) - 2 * iH) * LHo) + (((pvObj.nFormasH - 1) / 2 - iH) * guardaH)); - let _offsetY = ((((pvObj.nFormasV - 1) - 2 * iV) * LVo) + (((pvObj.nFormasV - 1) / 2 - iV) * guardaV)); - - formas[iV + iH] = _pvRotativa.makeRectangle( - origenRotativa.x + _offsetX, - (origenRotativa.y - yOffset) + _offsetY, - pvObj.anchoForma, - pvObj.altoForma); - formas[iV + iH].stroke = 'grey'; - formas[iV + iH].fill = '#F4F8F2'; - formas[iV + iH].linewidth = 1; - - // Texts - _pvRotativa.makeText(pvObj.altoForma, (origenRotativa.x + _offsetX) + (pvObj.anchoForma / 2 - 25), ((origenRotativa.y - yOffset) + _offsetY), styleText); - _pvRotativa.makeText(pvObj.anchoForma, (origenRotativa.x + _offsetX), ((origenRotativa.y - yOffset) + _offsetY) + (pvObj.altoForma / 2 - 15), styleText); - - } - - } - - _pvRotativa.update(); - -} - -function getDecimalPart(floatNumber) { - let int_part = Math.trunc(floatNumber); - let float_part = Number((floatNumber - int_part).toFixed(2)); - return float_part; -} - - -function previewEsquemaCubierta(_lpTagName, _isCosido, _isTapaDura) { - - let tipoImpresion = parseInt($('#tipo_impresion_id').val()); - - // Fresado TD y Cosido TD - if (tipoImpresion === 1 || tipoImpresion === 3) { - portadaTapaDura(_lpTagName, _isCosido, _isTapaDura); - } - // Fresado TB y Cosido TB - else if (tipoImpresion === 2 || tipoImpresion === 4) { - portadaTapaBlanda(_lpTagName, _isCosido, _isTapaDura); - } - // Espiral TD y TB, Wire-o TD y TB - else if (tipoImpresion === 5 || tipoImpresion === 6 || - tipoImpresion === 7 || tipoImpresion === 8) { - portadaEspiral(_lpTagName, _isCosido, _isTapaDura); - } - else if (tipoImpresion === 21) { - portadaGrapado(_lpTagName, _isCosido, _isTapaDura); - } - else { - // ? - } - -} - -function portadaTapaDura(lpTagName, isCosido, isTapaDura) { - - // Variables locales - let altoLibro, anchoLibro, lomoLibro, anchoCubierta, altoSangrado, anchoSangrado; - let styleCotas = {size: 12, family: 'Public Sans'}; - let sangradoTexto = "Sangrado 20 mm"; - let sangradoValor = parseFloat(20); // mm - let anchoPliegue = parseFloat(7); // mm - let altoPliegue = parseFloat(7); // mm - let anchoCarton = parseFloat(7); // mm - - // Get the preview Object parameters - getObjetoLP(lpTagName, isCosido, isTapaDura); - - // Definicion de los parametros del Esquema de Cubierta (EC) - - anchoSangrado = 600; // px - altoSangrado = (anchoSangrado * 0.647 > 350) ? anchoSangrado * 0.647 : 350; // px - altoLibro = altoSangrado * 0.88; - anchoLibro = anchoSangrado * 0.39; - lomoLibro = anchoSangrado * 0.133; - anchoCubierta = (2 * anchoLibro) + lomoLibro; - - // Clear the canvas element - $('#pv_ec_shape').empty(); - // Get the element for placing the graphical elements - var divEC = document.getElementById('pv_ec_shape'); - var previewEC = new Two({fitted: true}).appendTo(divEC); - // Calculate the center of the canvas element - var origenEC = new Two.Vector(previewEC.width / 2, previewEC.height / 2); - - var sangrado = previewEC.makeRectangle( - origenEC.x, - origenEC.y, - anchoSangrado, - altoSangrado - ); - sangrado.stroke = 'black'; - sangrado.dashes = [5, 5]; - sangrado.fill = '#FCEAF1'; - sangrado.linewidth = 1; - - var libro = previewEC.makeRectangle( - origenEC.x, - origenEC.y, - ((2 * anchoLibro) + lomoLibro), - altoLibro); - libro.stroke = 'black'; - libro.linewidth = 1; - - var lomo = previewEC.makeRectangle( - origenEC.x, - origenEC.y, - lomoLibro, - altoLibro); - lomo.stroke = 'black'; - lomo.fill = '#F4F8F2'; - lomo.linewidth = 1; - - // Cotas - var cotaAnchoCubierta = previewEC.makeDobleArrow( - origenEC.x - (anchoSangrado / 2), - origenEC.y + (altoLibro / 2) + 35, - origenEC.x + (anchoSangrado / 2), - origenEC.y + (altoLibro / 2) + 35, - 10); - cotaAnchoCubierta.linewidth = 2; - var cotaAltoCubierta = previewEC.makeDobleArrow( - origenEC.x + (anchoCubierta / 2) + 35, - origenEC.y + (altoSangrado / 2), - origenEC.x + (anchoCubierta / 2) + 35, - origenEC.y - (altoSangrado / 2), - 10); - cotaAltoCubierta.linewidth = 2; - var cotaAltoLibro = previewEC.makeDobleArrow( - origenEC.x + (lomoLibro / 2) + 35, - origenEC.y + (altoLibro / 2), - origenEC.x + (lomoLibro / 2) + 35, - origenEC.y - (altoLibro / 2), - 10); - cotaAltoLibro.linewidth = 2; - var cotaLomo = previewEC.makeDobleArrow( - origenEC.x - (lomoLibro / 2), - origenEC.y + (altoLibro / 3), - origenEC.x + (lomoLibro / 2), - origenEC.y + (altoLibro / 3), - 10); - cotaLomo.linewidth = 2; - var cotaContraportada = previewEC.makeDobleArrow( - origenEC.x - (lomoLibro / 2 + anchoLibro), - origenEC.y - (altoLibro / 3), - origenEC.x - (lomoLibro / 2), - origenEC.y - (altoLibro / 3), - 10); - cotaContraportada.linewidth = 2; - var cotaPortada = previewEC.makeDobleArrow( - origenEC.x + (lomoLibro / 2), - origenEC.y - (altoLibro / 3), - origenEC.x + (lomoLibro / 2 + anchoLibro), - origenEC.y - (altoLibro / 3), - 10); - cotaPortada.linewidth = 2; - - - // Textos: - // Titulos generales - let stylesEC = {size: 22, weight: 'bold', family: 'Public Sans'}; - previewEC.makeText("Portada", origenEC.x + (lomoLibro + anchoLibro) / 2, origenEC.y, stylesEC); - previewEC.makeText("Contraportada", origenEC.x - (lomoLibro + anchoLibro) / 2, origenEC.y, stylesEC); - previewEC.makeText("Lomo", origenEC.x, origenEC.y, stylesEC).rotation = -Math.PI / 2; - // Sangrados - let styleSangrado = {size: 10, family: 'Public Sans', style: 'italic', fill: 'red'}; - previewEC.makeText(sangradoTexto, origenEC.x, origenEC.y + (altoLibro / 2 + 13), styleSangrado); - previewEC.makeText(sangradoTexto, origenEC.x, origenEC.y - (altoLibro / 2 + 13), styleSangrado); - previewEC.makeText(sangradoTexto, origenEC.x + (lomoLibro / 2 + anchoLibro + 13), origenEC.y, styleSangrado).rotation = -Math.PI / 2; - previewEC.makeText(sangradoTexto, origenEC.x - (lomoLibro / 2 + anchoLibro + 13), origenEC.y, styleSangrado).rotation = -Math.PI / 2; - // Cotas - previewEC.makeText(pvObj.lomoLibro + anchoCarton + " mm", origenEC.x, origenEC.y + (altoLibro / 3) + 15, styleCotas); - previewEC.makeText(pvObj.anchoLibro + anchoPliegue + " mm", origenEC.x - (lomoLibro / 2 + anchoLibro / 2), origenEC.y - (altoLibro / 3) + 15, styleCotas); - previewEC.makeText(pvObj.anchoLibro + anchoPliegue + " mm", origenEC.x + (lomoLibro / 2 + anchoLibro / 2), origenEC.y - (altoLibro / 3) + 15, styleCotas); - previewEC.makeText(pvObj.altoLibro + altoPliegue + " mm", origenEC.x + (lomoLibro / 2) + 50, origenEC.y, styleCotas).rotation = -Math.PI / 2; - previewEC.makeText(pvObj.altoLibro + (2 * sangradoValor) + altoPliegue + " mm", origenEC.x + (lomoLibro / 2 + anchoLibro) + 50, origenEC.y, styleCotas).rotation = -Math.PI / 2; - previewEC.makeText((2 * pvObj.anchoLibro) + pvObj.lomoLibro + (2 * sangradoValor) + +(2 * anchoPliegue) + anchoCarton + " mm", - origenEC.x, - origenEC.y + (altoLibro / 2) + 50, - styleCotas); - - previewEC.update(); - -} - -function portadaTapaBlanda(lpTagName, isCosido, isTapaDura) { - - // Variables locales - let altoLibro, anchoLibro, lomoLibro, anchoSolapa, anchoCubierta, altoSangrado, anchoSangrado; - let styleCotas = {size: 12, family: 'Public Sans'}; - let sangradoTexto = "Sangrado 5 mm"; - let sangradoValor = parseFloat(5); // mm - - // Get the preview Object parameters - getObjetoLP(lpTagName, isCosido, isTapaDura); - - // Definicion de los parametros del Esquema de Cubierta (EC) - if (pvObj.anchoSolapa == 0) { - anchoSangrado = 600; // px - altoSangrado = (anchoSangrado * 0.647 > 350) ? anchoSangrado * 0.647 : 350; // px - altoLibro = altoSangrado * 0.97; - anchoLibro = anchoSangrado * 0.419; - anchoSolapa = 0; - lomoLibro = anchoSangrado * 0.133; - anchoCubierta = (2 * anchoLibro) + (2 * anchoSolapa) + lomoLibro; - - } else { - anchoSangrado = 600; // px - altoSangrado = (anchoSangrado * 0.418 > 350) ? anchoSangrado * 0.418 : 350; // px - altoLibro = altoSangrado * 0.95; - anchoLibro = anchoSangrado * 0.28; - anchoSolapa = anchoSangrado * 0.163; - lomoLibro = anchoSangrado * 0.09; - anchoCubierta = (2 * anchoLibro) + (2 * anchoSolapa) + lomoLibro; - } - - // Clear the canvas element - $('#pv_ec_shape').empty(); - // Get the element for placing the graphical elements - var divEC = document.getElementById('pv_ec_shape'); - var previewEC = new Two({fitted: true}).appendTo(divEC); - // Calculate the center of the canvas element - var origenEC = new Two.Vector(previewEC.width / 2, previewEC.height / 2); - - var sangrado = previewEC.makeRectangle( - origenEC.x, - origenEC.y, - anchoSangrado, - altoSangrado - ); - sangrado.stroke = 'black'; - sangrado.dashes = [5, 5]; - sangrado.fill = '#FCEAF1'; - sangrado.linewidth = 1; - - if (pvObj.anchoSolapa != 0) { - var solapas = previewEC.makeRectangle( - origenEC.x, - origenEC.y, - anchoCubierta, - altoLibro); - solapas.stroke = 'black'; - solapas.linewidth = 1; - - // Cotas Solapas - var cotaSolapa2 = previewEC.makeDobleArrow( - origenEC.x - anchoCubierta / 2, - origenEC.y - (altoLibro / 3), - origenEC.x - anchoLibro - lomoLibro / 2, - origenEC.y - (altoLibro / 3), - 10); - cotaSolapa2.linewidth = 2; - var cotaSolapa1 = previewEC.makeDobleArrow( - origenEC.x + anchoCubierta / 2, - origenEC.y - (altoLibro / 3), - origenEC.x + anchoLibro + lomoLibro / 2, - origenEC.y - (altoLibro / 3), - 10); - cotaSolapa1.linewidth = 2; - - // Textos Solapas - let stylesSolapa = {size: 18, family: 'Public Sans'}; - previewEC.makeText("Solapa 1", origenEC.x + anchoLibro + (lomoLibro + anchoSolapa) / 2, origenEC.y, stylesSolapa); - previewEC.makeText("Solapa 2", origenEC.x - anchoLibro - (lomoLibro + anchoSolapa) / 2, origenEC.y, stylesSolapa); - // Textos Cotas Solapas - previewEC.makeText(pvObj.anchoSolapa + " mm", origenEC.x - anchoLibro - (lomoLibro + anchoSolapa) / 2, origenEC.y - (altoLibro / 3) + 15, styleCotas); - previewEC.makeText(pvObj.anchoSolapa + " mm", origenEC.x + anchoLibro + (lomoLibro + anchoSolapa) / 2, origenEC.y - (altoLibro / 3) + 15, styleCotas); - - } - - var libro = previewEC.makeRectangle( - origenEC.x, - origenEC.y, - ((2 * anchoLibro) + lomoLibro), - altoLibro); - libro.stroke = 'black'; - libro.linewidth = 1; - - var lomo = previewEC.makeRectangle( - origenEC.x, - origenEC.y, - lomoLibro, - altoLibro); - lomo.stroke = 'black'; - lomo.fill = '#F4F8F2'; - lomo.linewidth = 1; - - // Cotas - var cotaAnchoCubierta = previewEC.makeDobleArrow( - origenEC.x - (anchoSangrado / 2), - origenEC.y + (altoLibro / 2) + 35, - origenEC.x + (anchoSangrado / 2), - origenEC.y + (altoLibro / 2) + 35, - 10); - cotaAnchoCubierta.linewidth = 2; - var cotaAltoCubierta = previewEC.makeDobleArrow( - origenEC.x + (anchoCubierta / 2) + 35, - origenEC.y + (altoSangrado / 2), - origenEC.x + (anchoCubierta / 2) + 35, - origenEC.y - (altoSangrado / 2), - 10); - cotaAltoCubierta.linewidth = 2; - var cotaAltoLibro = previewEC.makeDobleArrow( - origenEC.x + (lomoLibro / 2) + 35, - origenEC.y + (altoLibro / 2), - origenEC.x + (lomoLibro / 2) + 35, - origenEC.y - (altoLibro / 2), - 10); - cotaAltoLibro.linewidth = 2; - var cotaLomo = previewEC.makeDobleArrow( - origenEC.x - (lomoLibro / 2), - origenEC.y + (altoLibro / 3), - origenEC.x + (lomoLibro / 2), - origenEC.y + (altoLibro / 3), - 10); - cotaLomo.linewidth = 2; - var cotaContraportada = previewEC.makeDobleArrow( - origenEC.x - (lomoLibro / 2 + anchoLibro), - origenEC.y - (altoLibro / 3), - origenEC.x - (lomoLibro / 2), - origenEC.y - (altoLibro / 3), - 10); - cotaContraportada.linewidth = 2; - var cotaPortada = previewEC.makeDobleArrow( - origenEC.x + (lomoLibro / 2), - origenEC.y - (altoLibro / 3), - origenEC.x + (lomoLibro / 2 + anchoLibro), - origenEC.y - (altoLibro / 3), - 10); - cotaPortada.linewidth = 2; - - - // Textos: - // Titulos generales - let stylesEC = {size: 22, weight: 'bold', family: 'Public Sans'}; - previewEC.makeText("Portada", origenEC.x + (lomoLibro + anchoLibro) / 2, origenEC.y, stylesEC); - previewEC.makeText("Contraportada", origenEC.x - (lomoLibro + anchoLibro) / 2, origenEC.y, stylesEC); - let a = previewEC.makeText("Lomo", origenEC.x, origenEC.y, stylesEC).rotation = -Math.PI / 2; - // Sangrados - let styleSangrado = {size: 10, family: 'Public Sans', style: 'italic', fill: 'red'}; - previewEC.makeText(sangradoTexto, origenEC.x, origenEC.y + (altoLibro / 2 + 20), styleSangrado); - previewEC.makeText(sangradoTexto, origenEC.x, origenEC.y - (altoLibro / 2 + 20), styleSangrado); - previewEC.makeText(sangradoTexto, origenEC.x + (lomoLibro / 2 + anchoLibro + anchoSolapa + 20), origenEC.y, styleSangrado).rotation = -Math.PI / 2; - previewEC.makeText(sangradoTexto, origenEC.x - (lomoLibro / 2 + anchoLibro + anchoSolapa + 20), origenEC.y, styleSangrado).rotation = -Math.PI / 2; - // Cotas - previewEC.makeText(pvObj.lomoLibro + " mm", origenEC.x, origenEC.y + (altoLibro / 3) + 15, styleCotas); - previewEC.makeText(pvObj.anchoLibro + " mm", origenEC.x - (lomoLibro / 2 + anchoLibro / 2), origenEC.y - (altoLibro / 3) + 15, styleCotas); - previewEC.makeText(pvObj.anchoLibro + " mm", origenEC.x + (lomoLibro / 2 + anchoLibro / 2), origenEC.y - (altoLibro / 3) + 15, styleCotas); - previewEC.makeText(pvObj.altoLibro + " mm", origenEC.x + (lomoLibro / 2) + 25, origenEC.y, styleCotas).rotation = -Math.PI / 2; - previewEC.makeText(pvObj.altoLibro + (2 * sangradoValor) + " mm", origenEC.x + (lomoLibro / 2 + anchoLibro + anchoSolapa) + 50, origenEC.y, styleCotas).rotation = -Math.PI / 2; - previewEC.makeText((2 * pvObj.anchoLibro) + (2 * (pvObj.anchoSolapa + pvObj.offsetSolapa)) + pvObj.lomoLibro + (2 * sangradoValor) + " mm", - origenEC.x, - origenEC.y + (altoLibro / 2) + 50, - styleCotas); - - previewEC.update(); - -} - -function portadaEspiral(lpTagName, isCosido, isTapaDura) { - - // Variables locales - let altoLibro, anchoLibro, anchoCalle, anchoCubierta, altoSangrado, anchoSangrado, anchoSolapa, offsetCubierta; - let styleCotas = {size: 12, family: 'Public Sans'}; - let sangradoTexto = (isTapaDura) ? "Sangrado 20 mm" : "Sangrado 5 mm"; - let sangradoValor = (isTapaDura) ? parseFloat(20) : parseFloat(5); // mm - - // Get the preview Object parameters - getObjetoLP(lpTagName, isCosido, isTapaDura); - - // Definicion de los parametros del Esquema de Cubierta (EC) - anchoSangrado = 600; // px - - if((pvObj.anchoSolapa !== 0) && (isTapaDura === 0)){ - altoSangrado = (anchoSangrado * 0.418 > 350) ? anchoSangrado * 0.418 : 350; // px - altoLibro = altoSangrado * 0.95; - anchoLibro = anchoSangrado * 0.28; - anchoCalle = anchoSangrado * 0.02; - anchoSolapa = anchoSangrado * 0.163; - sangrado = anchoSangrado * 0.03; - anchoCubierta = 2 * (anchoLibro + anchoSolapa+ sangrado) + anchoCalle; - offsetCubierta = anchoLibro/2 + anchoCalle/2 + anchoSolapa/2 + sangrado; - } - else { - altoSangrado = (anchoSangrado * 0.647 > 350) ? anchoSangrado * 0.647 : 350; // px - altoLibro = (isTapaDura) ? altoSangrado * 0.88 : altoSangrado * 0.97; - anchoLibro = (isTapaDura) ? anchoSangrado * 0.39 : anchoSangrado * 0.419; - anchoCalle = anchoSangrado * 0.02; - anchoSolapa = 0; - anchoCubierta = (2 * anchoLibro) + (2 * anchoSolapa) + anchoCalle; - offsetCubierta = anchoLibro/2 + anchoCalle/2 + anchoSolapa + sangradoValor; - } - - // Clear the canvas element - $('#pv_ec_shape').empty(); - // Get the element for placing the graphical elements - var divEC = document.getElementById('pv_ec_shape'); - var previewEC = new Two({fitted: true}).appendTo(divEC); - // Calculate the center of the canvas element - var origenEC = new Two.Vector(previewEC.width / 2, previewEC.height / 2); - - var sangrado = previewEC.makeRectangle( - origenEC.x, - origenEC.y, - anchoSangrado, - altoSangrado - ); - sangrado.stroke = 'black'; - sangrado.dashes = [5, 5]; - sangrado.fill = '#FCEAF1'; - sangrado.linewidth = 1; - - if (pvObj.anchoSolapa != 0) { - var solapa1 = previewEC.makeRectangle( - origenEC.x + (anchoLibro + anchoCalle/2 + anchoSolapa/2 + sangradoValor), - origenEC.y, - anchoSolapa, - altoLibro); - solapa1.stroke = 'black'; - solapa1.linewidth = 1; - - var solapa2 = previewEC.makeRectangle( - origenEC.x - (anchoLibro + anchoCalle/2 + anchoSolapa/2 + sangradoValor), - origenEC.y, - anchoSolapa, - altoLibro); - solapa2.stroke = 'black'; - solapa2.linewidth = 1; - - // Cotas Solapas - var cotaSolapa2 = previewEC.makeDobleArrow( - origenEC.x - (anchoCalle/2 + sangradoValor + anchoLibro + anchoSolapa), - origenEC.y - (altoLibro / 3), - origenEC.x - (anchoLibro + sangradoValor + anchoCalle / 2), - origenEC.y - (altoLibro / 3), - 10); - cotaSolapa2.linewidth = 2; - var cotaSolapa1 = previewEC.makeDobleArrow( - origenEC.x + (anchoCalle/2 + sangradoValor + anchoLibro + anchoSolapa), - origenEC.y - (altoLibro / 3), - origenEC.x + (anchoLibro + sangradoValor + anchoCalle / 2), - origenEC.y - (altoLibro / 3), - 10); - cotaSolapa1.linewidth = 2; - - // Textos Solapas - let stylesSolapa = {size: 18, family: 'Public Sans'}; - previewEC.makeText("Solapa 1", origenEC.x + anchoLibro + (anchoCalle + anchoSolapa) / 2, origenEC.y, stylesSolapa); - previewEC.makeText("Solapa 2", origenEC.x - anchoLibro - (anchoCalle + anchoSolapa) / 2, origenEC.y, stylesSolapa); - // Textos Cotas Solapas - previewEC.makeText(pvObj.anchoSolapa + " mm", origenEC.x - anchoLibro - (anchoCalle + anchoSolapa) / 2, origenEC.y - (altoLibro / 3) + 15, styleCotas); - previewEC.makeText(pvObj.anchoSolapa + " mm", origenEC.x + anchoLibro + (anchoCalle + anchoSolapa) / 2, origenEC.y - (altoLibro / 3) + 15, styleCotas); - - } - - var portada = previewEC.makeRectangle( - origenEC.x + (anchoLibro/2 + anchoCalle/2 + sangradoValor), - origenEC.y, - anchoLibro, - altoLibro); - portada.stroke = 'black'; - portada.linewidth = 1; - - var contraportada = previewEC.makeRectangle( - origenEC.x - (anchoLibro/2 + anchoCalle/2 + sangradoValor), - origenEC.y, - anchoLibro, - altoLibro); - contraportada.stroke = 'black'; - contraportada.linewidth = 1; - - var calle = previewEC.makeRectangle( - origenEC.x, - origenEC.y, - anchoCalle, - altoSangrado); - calle.stroke = 'black'; - calle.dashes = [2, 5]; - calle.fill = '#F4F8F2'; - calle.linewidth = 1; - - // Cotas - var cotaAnchoCubierta = previewEC.makeDobleArrow( - origenEC.x - (anchoSangrado / 2), - origenEC.y + (altoLibro / 2) + 35, - origenEC.x + (anchoSangrado / 2), - origenEC.y + (altoLibro / 2) + 35, - 10); - cotaAnchoCubierta.linewidth = 2; - var cotaAltoCubierta = previewEC.makeDobleArrow( - origenEC.x + (anchoSangrado / 2) + 15, - origenEC.y + (altoSangrado / 2), - origenEC.x + (anchoSangrado / 2) + 15, - origenEC.y - (altoSangrado / 2), - 10); - cotaAltoCubierta.linewidth = 2; - var cotaAltoLibro = previewEC.makeDobleArrow( - origenEC.x + (anchoCalle / 2) + 35, - origenEC.y + (altoLibro / 2), - origenEC.x + (anchoCalle / 2) + 35, - origenEC.y - (altoLibro / 2), - 10); - cotaAltoLibro.linewidth = 2; - var cotaContraportada = previewEC.makeDobleArrow( - origenEC.x - (anchoCalle / 2 + anchoLibro + sangradoValor), - origenEC.y - (altoLibro / 3), - origenEC.x - ((anchoCalle / 2) + sangradoValor), - origenEC.y - (altoLibro / 3), - 10); - cotaContraportada.linewidth = 2; - var cotaPortada = previewEC.makeDobleArrow( - origenEC.x + ((anchoCalle / 2) + sangradoValor), - origenEC.y - (altoLibro / 3), - origenEC.x + (anchoCalle / 2 + anchoLibro + sangradoValor), - origenEC.y - (altoLibro / 3), - 10); - cotaPortada.linewidth = 2; - - - // Textos: - // Titulos generales - let stylesEC = {size: 22, weight: 'bold', family: 'Public Sans'}; - previewEC.makeText("Portada", - origenEC.x + anchoLibro/2 + anchoCalle/2 + sangradoValor + 15, - origenEC.y, - stylesEC - ); - previewEC.makeText("Contraportada", - origenEC.x - (anchoLibro/2 + anchoCalle/2 + sangradoValor), - origenEC.y, - stylesEC - ); - // Sangrados - let styleSangrado = {size: 10, family: 'Public Sans', style: 'italic', fill: 'red'}; - previewEC.makeText(sangradoTexto, origenEC.x + offsetCubierta, origenEC.y + (altoLibro / 2 + 13), styleSangrado); - previewEC.makeText(sangradoTexto, origenEC.x + offsetCubierta, origenEC.y - (altoLibro / 2 + 13), styleSangrado); - previewEC.makeText(sangradoTexto, origenEC.x - offsetCubierta, origenEC.y + (altoLibro / 2 + 13), styleSangrado); - previewEC.makeText(sangradoTexto, origenEC.x - offsetCubierta, origenEC.y - (altoLibro / 2 + 13), styleSangrado); - previewEC.makeText(sangradoTexto, origenEC.x + (anchoSangrado / 2) - 20, origenEC.y, styleSangrado).rotation = -Math.PI / 2; - previewEC.makeText(sangradoTexto, origenEC.x - (anchoSangrado / 2) + 20, origenEC.y, styleSangrado).rotation = -Math.PI / 2; - // Cotas - previewEC.makeText(pvObj.anchoLibro + " mm", origenEC.x - (offsetCubierta - anchoSolapa/2), origenEC.y - (altoLibro / 3) + 15, styleCotas); - previewEC.makeText(pvObj.anchoLibro + " mm", origenEC.x + (offsetCubierta - anchoSolapa/2), origenEC.y - (altoLibro / 3) + 15, styleCotas); - previewEC.makeText(pvObj.altoLibro + " mm", origenEC.x + (anchoCalle / 2) + 50, origenEC.y, styleCotas).rotation = -Math.PI / 2; - previewEC.makeText(pvObj.altoLibro + (2 * sangradoValor) + " mm", - origenEC.x + (anchoSangrado / 2) + 30, - origenEC.y, - styleCotas - ).rotation = -Math.PI / 2; - previewEC.makeText((2 * pvObj.anchoLibro) + pvObj.lomoLibro + (2 * sangradoValor) + " mm", - origenEC.x, - origenEC.y + (altoLibro / 2) + 50, - styleCotas); - - previewEC.update(); - -} - -function portadaGrapado(lpTagName, isCosido, isTapaDura) { - - // Variables locales - let altoLibro, anchoLibro, lomoLibro, anchoSolapa, anchoCubierta, altoSangrado, anchoSangrado; - let styleCotas = {size: 12, family: 'Public Sans'}; - let sangradoTexto = "Sangrado 5 mm"; - let sangradoValor = parseFloat(5); // mm - - // Get the preview Object parameters - getObjetoLP(lpTagName, isCosido, isTapaDura); - - // Definicion de los parametros del Esquema de Cubierta (EC) - if (pvObj.anchoSolapa == 0) { - anchoSangrado = 600; // px - altoSangrado = (anchoSangrado * 0.647 > 350) ? anchoSangrado * 0.647 : 350; // px - altoLibro = altoSangrado * 0.97; - anchoLibro = anchoSangrado * 0.48; - anchoSolapa = 0; - lomoLibro = 0; // ESTA ES LA DIFERENCIA PARA GRAPADO - anchoCubierta = (2 * anchoLibro) + (2 * anchoSolapa) + lomoLibro; - - } else { - anchoSangrado = 600; // px - altoSangrado = (anchoSangrado * 0.418 > 350) ? anchoSangrado * 0.418 : 350; // px - altoLibro = altoSangrado * 0.95; - anchoLibro = anchoSangrado * 0.3; - anchoSolapa = anchoSangrado * 0.18; - lomoLibro = 0; // ESTA ES LA DIFERENCIA PARA GRAPADO - anchoCubierta = (2 * anchoLibro) + (2 * anchoSolapa) + lomoLibro; - } - - // Clear the canvas element - $('#pv_ec_shape').empty(); - // Get the element for placing the graphical elements - var divEC = document.getElementById('pv_ec_shape'); - var previewEC = new Two({fitted: true}).appendTo(divEC); - // Calculate the center of the canvas element - var origenEC = new Two.Vector(previewEC.width / 2, previewEC.height / 2); - - var sangrado = previewEC.makeRectangle( - origenEC.x, - origenEC.y, - anchoSangrado, - altoSangrado - ); - sangrado.stroke = 'black'; - sangrado.dashes = [5, 5]; - sangrado.fill = '#FCEAF1'; - sangrado.linewidth = 1; - - if (pvObj.anchoSolapa != 0) { - var solapas = previewEC.makeRectangle( - origenEC.x, - origenEC.y, - anchoCubierta, - altoLibro); - solapas.stroke = 'black'; - solapas.linewidth = 1; - - // Cotas Solapas - var cotaSolapa2 = previewEC.makeDobleArrow( - origenEC.x - anchoCubierta / 2, - origenEC.y - (altoLibro / 3), - origenEC.x - anchoLibro - lomoLibro / 2, - origenEC.y - (altoLibro / 3), - 10); - cotaSolapa2.linewidth = 2; - var cotaSolapa1 = previewEC.makeDobleArrow( - origenEC.x + anchoCubierta / 2, - origenEC.y - (altoLibro / 3), - origenEC.x + anchoLibro + lomoLibro / 2, - origenEC.y - (altoLibro / 3), - 10); - cotaSolapa1.linewidth = 2; - - // Textos Solapas - let stylesSolapa = {size: 18, family: 'Public Sans'}; - previewEC.makeText("Solapa 1", origenEC.x + anchoLibro + (lomoLibro + anchoSolapa) / 2, origenEC.y, stylesSolapa); - previewEC.makeText("Solapa 2", origenEC.x - anchoLibro - (lomoLibro + anchoSolapa) / 2, origenEC.y, stylesSolapa); - // Textos Cotas Solapas - previewEC.makeText(pvObj.anchoSolapa + " mm", origenEC.x - anchoLibro - (lomoLibro + anchoSolapa) / 2, origenEC.y - (altoLibro / 3) + 15, styleCotas); - previewEC.makeText(pvObj.anchoSolapa + " mm", origenEC.x + anchoLibro + (lomoLibro + anchoSolapa) / 2, origenEC.y - (altoLibro / 3) + 15, styleCotas); - - } - - var libro = previewEC.makeRectangle( - origenEC.x, - origenEC.y, - ((2 * anchoLibro) + lomoLibro), - altoLibro); - libro.stroke = 'black'; - libro.linewidth = 1; - - var lomo = previewEC.makeRectangle( - origenEC.x, - origenEC.y, - lomoLibro, - altoLibro); - lomo.stroke = 'black'; - lomo.fill = '#F4F8F2'; - lomo.linewidth = 1; - - // Cotas - var cotaAnchoCubierta = previewEC.makeDobleArrow( - origenEC.x - (anchoSangrado / 2), - origenEC.y + (altoLibro / 2) + 35, - origenEC.x + (anchoSangrado / 2), - origenEC.y + (altoLibro / 2) + 35, - 10); - cotaAnchoCubierta.linewidth = 2; - var cotaAltoCubierta = previewEC.makeDobleArrow( - origenEC.x + (anchoCubierta / 2) + 35, - origenEC.y + (altoSangrado / 2), - origenEC.x + (anchoCubierta / 2) + 35, - origenEC.y - (altoSangrado / 2), - 10); - cotaAltoCubierta.linewidth = 2; - var cotaAltoLibro = previewEC.makeDobleArrow( - origenEC.x + (lomoLibro / 2) + 35, - origenEC.y + (altoLibro / 2), - origenEC.x + (lomoLibro / 2) + 35, - origenEC.y - (altoLibro / 2), - 10); - cotaAltoLibro.linewidth = 2; - var cotaContraportada = previewEC.makeDobleArrow( - origenEC.x - (lomoLibro / 2 + anchoLibro), - origenEC.y - (altoLibro / 3), - origenEC.x - (lomoLibro / 2), - origenEC.y - (altoLibro / 3), - 10); - cotaContraportada.linewidth = 2; - var cotaPortada = previewEC.makeDobleArrow( - origenEC.x + (lomoLibro / 2), - origenEC.y - (altoLibro / 3), - origenEC.x + (lomoLibro / 2 + anchoLibro), - origenEC.y - (altoLibro / 3), - 10); - cotaPortada.linewidth = 2; - - - // Textos: - // Titulos generales - let stylesEC = {size: 22, weight: 'bold', family: 'Public Sans'}; - previewEC.makeText("Portada", origenEC.x + (lomoLibro + anchoLibro) / 2, origenEC.y, stylesEC); - previewEC.makeText("Contraportada", origenEC.x - (lomoLibro + anchoLibro) / 2, origenEC.y, stylesEC); - // Sangrados - let styleSangrado = {size: 10, family: 'Public Sans', style: 'italic', fill: 'red'}; - previewEC.makeText(sangradoTexto, origenEC.x, origenEC.y + (altoLibro / 2 + 20), styleSangrado); - previewEC.makeText(sangradoTexto, origenEC.x, origenEC.y - (altoLibro / 2 + 20), styleSangrado); - previewEC.makeText(sangradoTexto, origenEC.x + (lomoLibro / 2 + anchoLibro + anchoSolapa + 20), origenEC.y, styleSangrado).rotation = -Math.PI / 2; - previewEC.makeText(sangradoTexto, origenEC.x - (lomoLibro / 2 + anchoLibro + anchoSolapa + 20), origenEC.y, styleSangrado).rotation = -Math.PI / 2; - // Cotas - previewEC.makeText(pvObj.anchoLibro + " mm", origenEC.x - (lomoLibro / 2 + anchoLibro / 2), origenEC.y - (altoLibro / 3) + 15, styleCotas); - previewEC.makeText(pvObj.anchoLibro + " mm", origenEC.x + (lomoLibro / 2 + anchoLibro / 2), origenEC.y - (altoLibro / 3) + 15, styleCotas); - previewEC.makeText(pvObj.altoLibro + " mm", origenEC.x + (lomoLibro / 2) + 25, origenEC.y, styleCotas).rotation = -Math.PI / 2; - previewEC.makeText(pvObj.altoLibro + (2 * sangradoValor) + " mm", origenEC.x + (lomoLibro / 2 + anchoLibro + anchoSolapa) + 50, origenEC.y, styleCotas).rotation = -Math.PI / 2; - previewEC.makeText((2 * pvObj.anchoLibro) + (2 * (pvObj.anchoSolapa + pvObj.offsetSolapa)) + pvObj.lomoLibro + (2 * sangradoValor) + " mm", - origenEC.x, - origenEC.y + (altoLibro / 2) + 50, - styleCotas); - - previewEC.update(); - -} - -function getLomoLibro() { - const anchoLomoInputs = $("#tableLineasPresupuesto tbody tr:visible td input[id*='_lomo']"); - const anchoLomo = Array.from(anchoLomoInputs).reduce((sum, input) => sum + parseFloat($(input).val()), 0); - - return parseFloat(anchoLomo.toFixed(2)); -} - - -function getObjetoLP(lpName, _isCosido, _isTapaDura) { - - let rowData = null; - - $('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { - - let lineaPresupuestoId = this.data().row_id.replace('lp_', ''); - - switch (lpName) { - case 'bn': - case 'bnhq': - case 'color': - case 'colorhq': - case 'cubierta': - case 'rot_bn': - case 'rot_color': - case 'guardas': - case 'sobrecubierta': - if (lineaPresupuestoId === lpName) { - rowData = this.data(); - } - break; - case 'ec': - if (lineaPresupuestoId === 'cubierta') { - rowData = this.data(); - } - break; - default: - //console.log(lineaPresupuestoId); - break; - } - - }); - - - pvObj = { - idIndex: lpName, - tipoImpresion: parseInt($('#tipo_impresion_id').val()), - gramajeLibro: parseInt(rowData.gramaje), - manoLP: parseFloat(rowData.lomo), - lomoLibro: getLomoLibro(), - anchoSolapa: $('#solapas').is(':checked') ? parseFloat($('#solapas_ancho').val()) : parseFloat(0), - nFormas: parseInt(rowData.formas), - nFormasH: parseInt(rowData.formas_h), - nFormasV: parseInt(rowData.formas_v), - orientacionFormas: rowData.formas_orientacion, - altoMaquina: parseFloat(rowData.maquina_alto), - anchoMaquina: parseFloat(rowData.maquina_ancho), - altoImpresion: parseFloat(rowData.maquina_impresion_alto), - anchoImpresion: parseFloat(rowData.maquina_impresion_ancho), - altoLibro: getDimensionLibro().alto, - anchoLibro: getDimensionLibro().ancho, - offsetSolapa: 0 - }; - - //console.log(pvObj); - - // Printing shape definition - pvObj.anchoForma = (_isCosido) ? 2 * pvObj.anchoLibro : pvObj.anchoLibro; - pvObj.altoForma = pvObj.altoLibro; - - - // Update preview info fields - let pvName = '#pv_' + lpName; - $(pvName + '_pg').attr("href", $(pvName + '_pg').attr('sk-url') + rowData.papel); - $(pvName + '_pi').attr("href", $(pvName + '_pi').attr('sk-url') + rowData.papel_impresion_id); - $(pvName + '_mi').attr("href", $(pvName + '_mi').attr('sk-url') + rowData.maquina_id); - - $(pvName + '_gramaje').text(pvObj.gramajeLibro); - $(pvName + '_mano').text(pvObj.manoLP); - $(pvName + '_solapas').text(pvObj.anchoSolapa); - $(pvName + '_maquina').text(pvObj.anchoMaquina + "x" + pvObj.altoMaquina); - $(pvName + '_maquina_impresion').text(pvObj.anchoImpresion + "x" + pvObj.altoImpresion); - $(pvName + '_libro').text(pvObj.anchoLibro + "x" + pvObj.altoLibro); - $(pvName + '_forma').text(pvObj.anchoForma + "x" + pvObj.altoForma); - $(pvName + '_nFormas').text(pvObj.nFormas); - - if (pvObj.anchoSolapa != 0) { - $('.pv-solapas').show(); - pvObj.offsetSolapa = parseFloat(3); // 3mm - - } - - // Custom overwrites - switch (pvObj.idIndex) { - case 'cubierta': - // Fresado TD or Cosido TD - if (pvObj.tipoImpresion === 1 || pvObj.tipoImpresion === 3) { - let anchoPliegue = parseFloat(7); // mm - let altoPliegue = parseFloat(7); // mm - let sangre = parseFloat(20); // mm - pvObj.anchoForma = ((2 * pvObj.anchoLibro) + (2 * anchoPliegue) + (2 * sangre) + pvObj.lomoLibro); - pvObj.altoForma += altoPliegue + (2 * sangre); - } - // Fresado TB y Cosido TB - else if (pvObj.tipoImpresion === 2 || pvObj.tipoImpresion === 4) { - let sangre = parseFloat(5); // mm - pvObj.anchoForma = ((2 * pvObj.anchoLibro) + (2 * (pvObj.anchoSolapa + pvObj.offsetSolapa)) + (2 * sangre) + pvObj.lomoLibro); - pvObj.altoForma += (2 * sangre); - } - // Grapado - else if (pvObj.tipoImpresion === 21) { - let sangre = parseFloat(5); // mm - pvObj.anchoForma = ((2 * pvObj.anchoLibro) + (2 * (pvObj.anchoSolapa + pvObj.offsetSolapa)) + (2 * sangre)); - pvObj.altoForma += (2 * sangre); - } - // Espiral TD y TB, Wire-o TD y TB - else if (pvObj.tipoImpresion === 5 || pvObj.tipoImpresion === 6 || - pvObj.tipoImpresion === 7 || pvObj.tipoImpresion === 8) { - let sangre = parseFloat(20); // mm - pvObj.anchoForma = pvObj.anchoLibro; - } else { - // ? - } - - // Update labels - $(pvName + '_forma').text(pvObj.anchoForma + "x" + pvObj.altoForma); - break; - - case 'sobrecubierta': - sangre = parseFloat(5); // mm - let anchoSolapaSobrecubierta = $('#solapas_sobrecubierta').is(':checked') ? parseFloat($('#solapas_ancho_sobrecubierta').val()) : parseFloat(0); // mm - if (_isTapaDura) { - let anchoPliegue = parseFloat(7); // mm - let altoPliegue = parseFloat(7); // mm - pvObj.anchoForma = ((2 * pvObj.anchoLibro) + (2 * anchoPliegue) + (2 * (anchoSolapaSobrecubierta + pvObj.offsetSolapa)) + (2 * sangre) + pvObj.lomoLibro); - pvObj.altoForma += altoPliegue + (2 * sangre); - } else { - pvObj.anchoForma = ((2 * pvObj.anchoLibro) + (2 * (anchoSolapaSobrecubierta + pvObj.offsetSolapa)) + (2 * sangre) + pvObj.lomoLibro); - pvObj.altoForma += (2 * sangre); - } - - // Update labels - $(pvName + '_solapas').text(anchoSolapaSobrecubierta); - anchoSolapaSobrecubierta != 0 ? $('.pv-solapas').show() : $('.pv-solapas').hide(); - $(pvName + '_forma').text(pvObj.anchoForma + "x" + pvObj.altoForma); - break; - case 'ec': - $(pvName + '_pg').attr("href", $(pvName + '_pg').attr('sk-url') + rowData.papel); - $(pvName + '_pi').attr("href", $(pvName + '_pi').attr('sk-url') + rowData.papel_impresion_id); - $(pvName + '_mi').attr("href", $(pvName + '_mi').attr('sk-url') + rowData.maquina_id); - $('#pv_ec_lomo').text(pvObj.lomoLibro); - break; - - case 'rot_bn': - case 'rot_color': - // Conditional assignements depending on rotation of the printing shape - if (pvObj.orientacionFormas == 'v') { - let auxReg = pvObj.altoForma; - pvObj.altoForma = pvObj.anchoForma; - pvObj.anchoForma = auxReg; - } - $(pvName + '_forma').text(pvObj.anchoForma + "x" + pvObj.altoForma); - pvObj.altoClick = isNaN(parseFloat(rowData.alto_click)) ? 305 : parseFloat(rowData.alto_click); - pvObj.nFormasH = Math.trunc(pvObj.anchoImpresion / pvObj.anchoForma); - pvObj.nFormasV = Math.trunc((pvObj.altoImpresion - 3) / (pvObj.altoForma + 4)); - break; - - case 'bn': - case 'bnhq': - case 'color': - case 'colorhq': - // Conditional assignements depending on rotation of the printing shape - if (pvObj.orientacionFormas == 'v') { - let auxReg = pvObj.altoForma; - pvObj.altoForma = pvObj.anchoForma; - pvObj.anchoForma = auxReg; - } - $(pvName + '_forma').text(pvObj.anchoForma + "x" + pvObj.altoForma); - break; - case 'guardas': - // Fresado TD y Cosido TD - if (pvObj.tipoImpresion === 1 || pvObj.tipoImpresion === 3) { - pvObj.anchoForma = 2 * pvObj.anchoLibro; - } - // Fresado TB y Cosido TB - else if (pvObj.tipoImpresion === 2 || pvObj.tipoImpresion === 4) { - pvObj.anchoForma = pvObj.anchoLibro; - } - // Espiral TD y TB, Wire-o TD y TB - else if (pvObj.tipoImpresion === 5 || pvObj.tipoImpresion === 6 || - pvObj.tipoImpresion === 7 || pvObj.tipoImpresion === 8) { - pvObj.anchoForma = pvObj.anchoLibro; - } else { - // ? - } - - // Conditional assignements depending on rotation of the printing shape - if (pvObj.orientacionFormas == 'v') { - let auxReg = pvObj.altoForma; - pvObj.altoForma = pvObj.anchoForma; - pvObj.anchoForma = auxReg; - } - $(pvName + '_forma').text(pvObj.anchoForma + "x" + pvObj.altoForma); - break; - - default: - break; - } -} - - -function getVisibleTabs() { - const table = $('#tableLineasPresupuesto').DataTable(); - - // Clear all existing tabs - $('*[id*=tab-pv-]').hide().find('.active').removeClass('active'); - $('*[id*=pv_]').removeClass('active show'); - - // Enable active tabs - table.rows().every(function () { - const lpName = this.data().row_id.replace('lp_', ''); - const tabName = lpName.replace('_', '-'); - - if (['bn', 'bnhq', 'color', 'colorhq', 'rot_bn', 'rot_color', 'guardas', 'cubierta', 'sobrecubierta'].includes(lpName)) { - $(`#tab-pv-${tabName}`).show(); - if (lpName === 'cubierta') { - $(`#tab-pv-${tabName}`).show(); - $(`#tab-pv-esquema-${tabName}`).show(); - } - } - }); -} \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/viewPresupuestoadminForm.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/viewPresupuestoadminForm.php index 9dfc18c8..69f3375c 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/viewPresupuestoadminForm.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/viewPresupuestoadminForm.php @@ -6,25 +6,31 @@ section("content") ?> -
+

+ + + + getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?> - - - + + + + + + + @@ -168,104 +174,20 @@ } } }); - - $('#clienteId').select2({ - allowClear: false, - ajax: { - url: '', - type: 'post', - dataType: 'json', - - data: function(params) { - return { - id: 'id', - text: 'nombre', - searchTerm: params.term, - : v - }; - }, - delay: 60, - processResults: function(response) { - yeniden(response.); - return { - results: response.menu - }; - }, - cache: true - } - }); - - /******************************* - * Inicialización de los Select2 - *******************************/ - $('#incRei').select2({ - allowClear: false, - }); - - $('#paisId').select2({ - allowClear: false, - }); + endSection() ?> - - - -section("additionalInlineJs") ?> -$(window).on('load', function() { - - // Detectar cambios en inputs de texto - $('input[type="text"]').on('input', function() { - showBreadCrumbSaveButton(true); - }); - - // Detectar cambios en inputs de texto - $('input[type="number"]').on('input', function() { - showBreadCrumbSaveButton(true); - }); - - // Detectar cambios en select - $('select').change(function() { - showBreadCrumbSaveButton(true); - }); - - // Detectar cambios en checkboxes - $('input[type="checkbox"]').change(function() { - showBreadCrumbSaveButton(true); - }); - - // Detectar cambios en textareas - $('textarea').on('input', function() { - showBreadCrumbSaveButton(true); - }); - - // Detectar cambios en otros tipos de input - $('input[type="radio"]').change(function() { - showBreadCrumbSaveButton(true); - }); - - // Detectar cambios en otros tipos de input - $('input:not([type])').on('input', function() { - showBreadCrumbSaveButton(true); - }); - -}); - -$('#bc-save').on( "click", function() { - showBreadCrumbSaveButton(false); - $('#saveForm').click() -} ); - -endSection() ?> section("additionalInlineJs") ?> + endSection() ?> @@ -350,17 +272,6 @@ $('#bc-save').on( "click", function() { endSection() ?> - - - - - section("additionalInlineJs") ?> - - window.token_ajax= {: v}; - window.csrf_token = ''; - - endSection() ?> - @@ -370,6 +281,7 @@ $('#bc-save').on( "click", function() { "> + endSection() ?> section('additionalExternalJs') ?> @@ -380,18 +292,14 @@ $('#bc-save').on( "click", function() { - - - - - - - - - - + + + + + + endSection() ?> diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/viewPresupuestoclienteForm.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/viewPresupuestoclienteForm.php index cdd7b7de..7a23896f 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/viewPresupuestoclienteForm.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/viewPresupuestoclienteForm.php @@ -29,6 +29,7 @@ +
diff --git a/httpdocs/assets/js/safekat/components/preview.js b/httpdocs/assets/js/safekat/components/preview.js index e7eada9d..269e8888 100644 --- a/httpdocs/assets/js/safekat/components/preview.js +++ b/httpdocs/assets/js/safekat/components/preview.js @@ -1,5 +1,5 @@ - class previewFormas { + constructor(container, tipoLibro, tipoTapa, size, datos) { this.container = container; @@ -10,6 +10,40 @@ class previewFormas { this.ancho = datos.ancho; this.alto = datos.alto; this.lomo = datos.lomo; + this.lomoSobrecubierta = datos.lomoSobrecubierta; + + if (datos.solapas == undefined || datos.solapas == null || datos.solapas == false) { + this.solapa = 0; + this.offsetSolapa = 0.0; + } + else { + this.solapa = datos.solapas; + this.offsetSolapa = 3.0; + } + if (datos.solapas_sobrecubierta == undefined || datos.solapas_sobrecubierta == null || datos.solapas_sobrecubierta == false) { + this.solapas_sobrecubierta = 0; + this.offsetSolapa_sobrecubierta = 0.0; + } + else { + this.solapa_sobrecubierta = datos.solapas_sobrecubierta; + this.offsetSolapa_sobrecubierta = 3.0; + } + this.lomoRedondo = datos.lomoRedondo; + + this.pvObj = null; + + } + + setContainer(container) { + this.container = container; + } + + setData(datos) { + + this.ancho = datos.ancho; + this.alto = datos.alto; + this.lomo = datos.lomo; + this.lomoSobrecubierta = datos.lomoSobrecubierta; if (datos.solapas == undefined || datos.solapas == null || datos.solapas == false) { this.solapa = 0; @@ -20,6 +54,384 @@ class previewFormas { this.offsetSolapa = 3.0; } this.lomoRedondo = datos.lomoRedondo; + } + + getObjetoLP(lpName, _isCosido, _isTapaDura) { + + let rowData = null; + + $('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + + let lineaPresupuestoId = this.data().row_id.replace('lp_', ''); + + switch (lpName) { + case 'bn': + case 'bnhq': + case 'color': + case 'colorhq': + case 'cubierta': + case 'rot_bn': + case 'rot_color': + case 'guardas': + case 'sobrecubierta': + if (lineaPresupuestoId === lpName) { + rowData = this.data(); + } + break; + case 'ec': + if (lineaPresupuestoId === 'cubierta') { + rowData = this.data(); + } + break; + default: + //console.log(lineaPresupuestoId); + break; + } + + }); + + + this.pvObj = { + idIndex: lpName, + tipoImpresion: parseInt($('#tipo_impresion_id').val()), + gramajeLibro: parseInt(rowData.gramaje), + manoLP: parseFloat(rowData.lomo), + lomoLibro: this.lomo(), + lomoLibroSobrecubierta: this.lomoSobrecubierta(), + anchoSolapa: $('#solapas').is(':checked') ? parseFloat($('#solapas_ancho').val()) : parseFloat(0), + nFormas: parseInt(rowData.formas), + nFormasH: parseInt(rowData.formas_h), + nFormasV: parseInt(rowData.formas_v), + orientacionFormas: rowData.formas_orientacion, + altoMaquina: parseFloat(rowData.maquina_alto), + anchoMaquina: parseFloat(rowData.maquina_ancho), + altoImpresion: parseFloat(rowData.maquina_impresion_alto), + anchoImpresion: parseFloat(rowData.maquina_impresion_ancho), + altoLibro: this.alto(), + anchoLibro: this.ancho(), + offsetSolapa: 0 + }; + + //console.log(pvObj); + + // Printing shape definition + this.pvObj.anchoForma = (_isCosido) ? 2 * this.pvObj.anchoLibro : this.pvObj.anchoLibro; + this.pvObj.altoForma = this.pvObj.altoLibro; + + + // Update preview info fields + let pvName = '#pv_' + lpName; + $(pvName + '_pg').attr("href", $(pvName + '_pg').attr('sk-url') + rowData.papel); + $(pvName + '_pi').attr("href", $(pvName + '_pi').attr('sk-url') + rowData.papel_impresion_id); + $(pvName + '_mi').attr("href", $(pvName + '_mi').attr('sk-url') + rowData.maquina_id); + + $(pvName + '_gramaje').text(this.pvObj.gramajeLibro); + $(pvName + '_mano').text(this.pvObj.manoLP); + $(pvName + '_solapas').text(this.pvObj.anchoSolapa); + $(pvName + '_maquina').text(this.pvObj.anchoMaquina + "x" + this.pvObj.altoMaquina); + $(pvName + '_maquina_impresion').text(this.pvObj.anchoImpresion + "x" + this.pvObj.altoImpresion); + $(pvName + '_libro').text(this.pvObj.anchoLibro + "x" + this.pvObj.altoLibro); + $(pvName + '_forma').text(this.pvObj.anchoForma + "x" + this.pvObj.altoForma); + $(pvName + '_nFormas').text(this.pvObj.nFormas); + + if (this.pvObj.anchoSolapa != 0) { + $('.pv-solapas').show(); + this.pvObj.offsetSolapa = parseFloat(3); // 3mm + + } + + // Custom overwrites + switch (this.pvObj.idIndex) { + case 'cubierta': + // Fresado TD or Cosido TD + if (this.pvObj.tipoImpresion === 1 || this.pvObj.tipoImpresion === 3) { + let anchoPliegue = parseFloat(7); // mm + let altoPliegue = parseFloat(7); // mm + let sangre = parseFloat(20); // mm + if (this.isTapaDura && (this.ancho() >= 210 || this.alto() >= 297)) { + sangre = parseFloat(10); // mm + } + this.pvObj.anchoForma = ((2 * this.pvObj.anchoLibro) + (2 * anchoPliegue) + (2 * sangre) + this.pvObj.lomoLibro); + this.pvObj.altoForma += altoPliegue + (2 * sangre); + } + // Fresado TB y Cosido TB + else if (this.pvObj.tipoImpresion === 2 || this.pvObj.tipoImpresion === 4) { + let sangre = parseFloat(5); // mm + this.pvObj.anchoForma = ((2 * this.pvObj.anchoLibro) + (2 * (this.pvObj.anchoSolapa + this.pvObj.offsetSolapa)) + (2 * sangre) + this.pvObj.lomoLibro); + this.pvObj.altoForma += (2 * sangre); + } + // Grapado + else if (this.pvObj.tipoImpresion === 21) { + let sangre = parseFloat(5); // mm + this.pvObj.anchoForma = ((2 * this.pvObj.anchoLibro) + (2 * (this.pvObj.anchoSolapa + this.pvObj.offsetSolapa)) + (2 * sangre)); + this.pvObj.altoForma += (2 * sangre); + } + // Espiral TD y TB, Wire-o TD y TB + else if (this.pvObj.tipoImpresion === 5 || this.pvObj.tipoImpresion === 6 || + this.pvObj.tipoImpresion === 7 || this.pvObj.tipoImpresion === 8) { + let sangre = parseFloat(20); // mm + this.pvObj.anchoForma = this.pvObj.anchoLibro; + } else { + // ? + } + + // Update labels + $(pvName + '_forma').text(this.pvObj.anchoForma + "x" + this.pvObj.altoForma); + break; + + case 'sobrecubierta': + let sangre = parseFloat(5); // mm + let anchoSolapaSobrecubierta = $('#solapas_sobrecubierta').is(':checked') ? parseFloat($('#solapas_ancho_sobrecubierta').val()) : parseFloat(0); // mm + if (_isTapaDura) { + let anchoPliegue = parseFloat(7); // mm + let altoPliegue = parseFloat(7); // mm + this.pvObj.anchoForma = ((2 * this.pvObj.anchoLibro) + (2 * anchoPliegue) + (2 * (anchoSolapaSobrecubierta + this.pvObj.offsetSolapa)) + (2 * sangre) + this.pvObj.lomoLibroSobrecubierta); + this.pvObj.altoForma += altoPliegue + (2 * sangre); + } else { + this.pvObj.anchoForma = ((2 * this.pvObj.anchoLibro) + (2 * (anchoSolapaSobrecubierta + this.pvObj.offsetSolapa)) + (2 * sangre) + this.pvObj.lomoLibroSobrecubierta); + this.pvObj.altoForma += (2 * sangre); + } + + // Update labels + $(pvName + '_solapas').text(anchoSolapaSobrecubierta); + anchoSolapaSobrecubierta != 0 ? $('.pv-solapas').show() : $('.pv-solapas').hide(); + $(pvName + '_forma').text(this.pvObj.anchoForma + "x" + this.pvObj.altoForma); + break; + case 'ec': + $(pvName + '_pg').attr("href", $(pvName + '_pg').attr('sk-url') + rowData.papel); + $(pvName + '_pi').attr("href", $(pvName + '_pi').attr('sk-url') + rowData.papel_impresion_id); + $(pvName + '_mi').attr("href", $(pvName + '_mi').attr('sk-url') + rowData.maquina_id); + $('#pv_ec_lomo').text(this.pvObj.lomoLibro); + break; + + case 'rot_bn': + case 'rot_color': + // Conditional assignements depending on rotation of the printing shape + if (this.pvObj.orientacionFormas == 'v') { + let auxReg = this.pvObj.altoForma; + this.pvObj.altoForma = this.pvObj.anchoForma; + this.pvObj.anchoForma = auxReg; + } + $(pvName + '_forma').text(this.pvObj.anchoForma + "x" + this.pvObj.altoForma); + this.pvObj.altoClick = isNaN(parseFloat(rowData.alto_click)) ? 305 : parseFloat(rowData.alto_click); + this.pvObj.nFormasH = Math.trunc(this.pvObj.anchoImpresion / this.pvObj.anchoForma); + this.pvObj.nFormasV = Math.trunc((this.pvObj.altoImpresion - 3) / (this.pvObj.altoForma + 4)); + break; + + case 'bn': + case 'bnhq': + case 'color': + case 'colorhq': + // Conditional assignements depending on rotation of the printing shape + if (this.pvObj.orientacionFormas == 'v') { + let auxReg = this.pvObj.altoForma; + this.pvObj.altoForma = this.pvObj.anchoForma; + this.pvObj.anchoForma = auxReg; + } + $(pvName + '_forma').text(this.pvObj.anchoForma + "x" + this.pvObj.altoForma); + break; + case 'guardas': + // Fresado TD y Cosido TD + if (this.pvObj.tipoImpresion === 1 || this.pvObj.tipoImpresion === 3) { + this.pvObj.anchoForma = 2 * this.pvObj.anchoLibro; + } + // Fresado TB y Cosido TB + else if (this.pvObj.tipoImpresion === 2 || this.pvObj.tipoImpresion === 4) { + this.pvObj.anchoForma = this.pvObj.anchoLibro; + } + // Espiral TD y TB, Wire-o TD y TB + else if (this.pvObj.tipoImpresion === 5 || this.pvObj.tipoImpresion === 6 || + this.pvObj.tipoImpresion === 7 || this.pvObj.tipoImpresion === 8) { + this.pvObj.anchoForma = this.pvObj.anchoLibro; + } else { + // ? + } + + // Conditional assignements depending on rotation of the printing shape + if (this.pvObj.orientacionFormas == 'v') { + let auxReg = this.pvObj.altoForma; + this.pvObj.altoForma = this.pvObj.anchoForma; + this.pvObj.anchoForma = auxReg; + } + $(pvName + '_forma').text(this.pvObj.anchoForma + "x" + this.pvObj.altoForma); + break; + + default: + break; + } + } + + previewInteriorPlana(lpTagName, isCosido, isTapaDura) { + + // Local parameters + let guardaV = 0; + let guardaH = 0; + let styleText = { size: 12, family: 'Public Sans' }; + + // Get the preview Object parameters + this.getObjetoLP(lpTagName, isCosido, isTapaDura); + + // Configuracion de las guardas + // Guarda vertical + if (this.pvObj.nFormasV > 1) { + guardaV = 3; + } + // Guarda horizontal + if (this.pvObj.nFormasH > 1) { + guardaH = 3; + } + // Constantes relativas a las dimnesiones de la forma + let LVo = this.pvObj.altoForma / 2; + let LHo = this.pvObj.anchoForma / 2; + + // Clear the canvas element + $('#pv_' + this.pvObj.idIndex + '_shape').empty(); + // Get the element for placing the graphical elements + var divPlana = document.getElementById('pv_' + this.pvObj.idIndex + '_shape'); + var _pvPlana = new Two({ fitted: true }).appendTo(divPlana); + // Calculate the center of the canvas element + var origenPlana = new Two.Vector(_pvPlana.width / 2, _pvPlana.height / 2); + + var areaMaquinaPlana = _pvPlana.makeRectangle( + origenPlana.x, + origenPlana.y, + this.pvObj.anchoMaquina, + this.pvObj.altoMaquina); + areaMaquinaPlana.stroke = 'black'; + areaMaquinaPlana.fill = '#E69F6E'; + areaMaquinaPlana.linewidth = 1; + + var areaImpresionPlana = _pvPlana.makeRectangle( + origenPlana.x, + origenPlana.y, + this.pvObj.anchoImpresion, + this.pvObj.altoImpresion); + areaImpresionPlana.stroke = 'red'; + areaImpresionPlana.fill = '#FCEAF1'; + areaImpresionPlana.linewidth = 1; + + var formas = []; + + for (let iV = 0; iV < this.pvObj.nFormasV; iV++) { + + for (let iH = 0; iH < this.pvObj.nFormasH; iH++) { + + let _offsetX = ((((this.pvObj.nFormasH - 1) - 2 * iH) * LHo) + (((this.pvObj.nFormasH - 1) / 2 - iH) * guardaH)); + let _offsetY = ((((this.pvObj.nFormasV - 1) - 2 * iV) * LVo) + (((this.pvObj.nFormasV - 1) / 2 - iV) * guardaV)); + + formas[iV + iH] = _pvPlana.makeRectangle( + origenPlana.x + _offsetX, + origenPlana.y + _offsetY, + this.pvObj.anchoForma, + this.pvObj.altoForma); + formas[iV + iH].stroke = 'grey'; + formas[iV + iH].fill = '#F4F8F2'; + formas[iV + iH].linewidth = 1; + + // Texts + _pvPlana.makeText(this.pvObj.altoForma, (origenPlana.x + _offsetX) + (this.pvObj.anchoForma / 2 - 25), (origenPlana.y + _offsetY), styleText); + _pvPlana.makeText(this.pvObj.anchoForma, (origenPlana.x + _offsetX), (origenPlana.y + _offsetY) + (this.pvObj.altoForma / 2 - 15), styleText); + + } + } + _pvPlana.update(); + } + + previewRotativa(lpTagName, isCosido, isTapaDura) { + + // Local parameters + let styleText = { size: 12, family: 'Public Sans' }; + let margenTop = 3; + let guardaV = 0; + let guardaH = 0; + + // Get the preview Object parameters + this.getObjetoLP(lpTagName, isCosido, isTapaDura); + + // Calculos + // Configuracion de las guardas + // Guarda vertical + if (this.pvObj.nFormasV > 1) { + guardaV = 3; + } + // Guarda horizontal + if (this.pvObj.nFormasH > 1) { + guardaH = 3; + } + // Constantes relativas al libro + let LVo = this.pvObj.altoForma / 2; + let LHo = this.pvObj.anchoForma / 2; + + // offset Y + let nTopForms = (this.pvObj.altoImpresion / 2.0 - margenTop) / (LVo + guardaV); + const int_part = Math.trunc(nTopForms); + const float_part = Number((nTopForms - int_part).toFixed(2)); + let yOffset = LVo * float_part; + + //console.log(yOffset); + + // Clear the canvas element + $('#pv_' + this.pvObj.idIndex + '_shape').empty(); + // Get the element for placing the graphical elements + var divRotativa = document.getElementById('pv_' + this.pvObj.idIndex + '_shape'); + var _pvRotativa = new Two({ fitted: true }).appendTo(divRotativa); + // Calculate the center of the canvas element + var origenRotativa = new Two.Vector(_pvRotativa.width / 2, _pvRotativa.height / 2); + + var areaMaquinaRotativa = _pvRotativa.makeRectangle( + origenRotativa.x, + origenRotativa.y, + this.pvObj.anchoMaquina, + this.pvObj.altoMaquina); + areaMaquinaRotativa.stroke = 'black'; + areaMaquinaRotativa.fill = '#E69F6E'; + areaMaquinaRotativa.linewidth = 1; + + var areaImpresionRotativa = _pvRotativa.makeRectangle( + origenRotativa.x, + origenRotativa.y, + this.pvObj.anchoImpresion, + this.pvObj.altoImpresion); + areaImpresionRotativa.stroke = 'red'; + areaImpresionRotativa.fill = '#FCEAF1'; + areaImpresionRotativa.linewidth = 1; + + var areaClickRotativa = _pvRotativa.makeRectangle( + origenRotativa.x, + origenRotativa.y - (this.pvObj.altoImpresion / 2 - this.pvObj.altoClick / 2), + this.pvObj.anchoImpresion - 10, + this.pvObj.altoClick); + areaClickRotativa.stroke = 'blue'; + //areaClickRotativa.fill = '#FCEAF1'; + areaClickRotativa.linewidth = 2; + + var formas = []; + + for (let iV = 0; iV < this.pvObj.nFormasV; iV++) { + + for (let iH = 0; iH < this.pvObj.nFormasH; iH++) { + + let _offsetX = ((((this.pvObj.nFormasH - 1) - 2 * iH) * LHo) + (((this.pvObj.nFormasH - 1) / 2 - iH) * guardaH)); + let _offsetY = ((((this.pvObj.nFormasV - 1) - 2 * iV) * LVo) + (((this.pvObj.nFormasV - 1) / 2 - iV) * guardaV)); + + formas[iV + iH] = _pvRotativa.makeRectangle( + origenRotativa.x + _offsetX, + (origenRotativa.y - yOffset) + _offsetY, + this.pvObj.anchoForma, + this.pvObj.altoForma); + formas[iV + iH].stroke = 'grey'; + formas[iV + iH].fill = '#F4F8F2'; + formas[iV + iH].linewidth = 1; + + // Texts + _pvRotativa.makeText(this.pvObj.altoForma, (origenRotativa.x + _offsetX) + (this.pvObj.anchoForma / 2 - 25), ((origenRotativa.y - yOffset) + _offsetY), styleText); + _pvRotativa.makeText(this.pvObj.anchoForma, (origenRotativa.x + _offsetX), ((origenRotativa.y - yOffset) + _offsetY) + (this.pvObj.altoForma / 2 - 15), styleText); + + } + + } + + _pvRotativa.update(); } @@ -49,6 +461,15 @@ class previewFormas { // Variables locales let altoLibro, anchoLibro, lomoLibro, anchoCubierta, altoSangrado, anchoSangrado, anchoSolapa; + + if(typeof this.lomo === 'function') { + this.lomo = this.lomo(); + this.ancho = this.ancho(); + this.alto = this.alto(); + this.lomoRedondo = this.lomoRedondo(); + this.solapa = this.solapa(); + } + let styleCotas = { size: 12, family: 'Public Sans' }; let sangradoTexto = "Sangrado 5 mm"; let sangradoValor = parseFloat(5); // mm @@ -60,7 +481,7 @@ class previewFormas { anchoSangrado = 350; // px altoSangrado = (anchoSangrado * 0.647 > 300) ? 300 : anchoSangrado * 0.647; // px } else { - anchoSangrado = 800; // px + anchoSangrado = 750; // px altoSangrado = (anchoSangrado * 0.647 > 650) ? 650 : anchoSangrado * 0.647; // px } @@ -217,12 +638,18 @@ class previewFormas { previewEC.makeText(sangradoTexto, origenEC.x + (lomoLibro / 2 + anchoLibro + anchoSolapa + 20), origenEC.y, styleSangrado).rotation = -Math.PI / 2; previewEC.makeText(sangradoTexto, origenEC.x - (lomoLibro / 2 + anchoLibro + anchoSolapa + 20), origenEC.y, styleSangrado).rotation = -Math.PI / 2; // Cotas - previewEC.makeText(this.lomo.toFixed(1) + " mm", origenEC.x, origenEC.y + (altoLibro / 3) + 15, styleCotas); + let lomoTotal = 0; + if(typeof this.lomo === 'function') { + lomoTotal = this.lomo().toFixed(1); + } else { + lomoTotal = this.lomo.toFixed(1); + } + previewEC.makeText(lomoTotal + " mm", origenEC.x, origenEC.y + (altoLibro / 3) + 15, styleCotas); previewEC.makeText((this.ancho + this.offsetSolapa).toFixed(1) + " mm", origenEC.x - (lomoLibro / 2 + anchoLibro / 2), origenEC.y - (altoLibro / 3) + 15, styleCotas); previewEC.makeText((this.ancho + this.offsetSolapa).toFixed(1) + " mm", origenEC.x + (lomoLibro / 2 + anchoLibro / 2), origenEC.y - (altoLibro / 3) + 15, styleCotas); previewEC.makeText(this.alto.toFixed(1) + " mm", origenEC.x + (lomoLibro / 2) + 25, origenEC.y, styleCotas).rotation = -Math.PI / 2; previewEC.makeText((this.alto + (2 * sangradoValor)).toFixed(1) + " mm", origenEC.x + (lomoLibro / 2 + anchoLibro + anchoSolapa) + 50, origenEC.y, styleCotas).rotation = -Math.PI / 2; - previewEC.makeText(((2 * this.ancho) + (2 * (this.solapa + this.offsetSolapa)) + this.lomo + (2 * sangradoValor)).toFixed(1) + " mm", + previewEC.makeText((((2 * this.ancho) + (2 * (this.solapa + this.offsetSolapa)) + parseFloat(lomoTotal) + (2 * sangradoValor)).toFixed(1)) + " mm", origenEC.x, origenEC.y + (altoLibro / 2) + 50, styleCotas); @@ -238,12 +665,20 @@ class previewFormas { // Variables locales let altoLibro, anchoLibro, lomoLibro, anchoCubierta, altoSangrado, anchoSangrado; + + if(typeof this.lomo === 'function') { + this.lomo = this.lomo(); + this.ancho = this.ancho(); + this.alto = this.alto(); + this.lomoRedondo = this.lomoRedondo(); + } + let styleCotas = { size: 12, family: 'Public Sans' }; let sangradoTexto = "Sangrado 20 mm"; let sangradoValor = parseFloat(20); // mm if (this.ancho >= 210 || this.alto >= 297) { - sangradoValor = parseFloat(15); // mm - sangradoTexto = "Sangrado 15 mm"; + sangradoValor = parseFloat(10); // mm + sangradoTexto = "Sangrado 10 mm"; } let anchoPliegue = parseFloat(7); // mm cajo let altoPliegue = parseFloat(7); // mm @@ -378,11 +813,19 @@ class previewFormas { // Variables locales let altoLibro, anchoLibro, anchoSolapa, anchoCalle, altoSangrado, anchoSangrado, offsetCubierta, anchoCubierta; + + if(typeof this.lomo === 'function') { + this.lomo = this.lomo(); + this.ancho = this.ancho(); + this.alto = this.alto(); + this.lomoRedondo = this.lomoRedondo(); + this.solapa = this.solapa(); + } + let styleCotas = { size: 12, family: 'Public Sans' }; let sangradoTexto = (isTapaDura) ? "Sangrado 20 mm" : "Sangrado 5 mm"; let sangradoValor = (isTapaDura) ? parseFloat(20) : parseFloat(5); // mm - // Definicion de los parametros del Esquema de Cubierta (EC) if ((this.solapa !== 0) && (!isTapaDura)) { if (this.size == "thumbnail") { @@ -587,10 +1030,19 @@ class previewFormas { // Variables locales let altoLibro, anchoLibro, lomoLibro, anchoSolapa, anchoCubierta, altoSangrado, anchoSangrado; + + if(typeof this.lomo === 'function') { + this.lomo = this.lomo(); + this.ancho = this.ancho(); + this.alto = this.alto(); + this.lomoRedondo = this.lomoRedondo(); + this.solapa = this.solapa(); + } + let styleCotas = { size: 12, family: 'Public Sans' }; let sangradoTexto = "Sangrado 5 mm"; let sangradoValor = parseFloat(5); // mm - + // Definicion de los parametros del Esquema de Cubierta (EC) if (this.solapa == 0) { if (this.size == "thumbnail") { diff --git a/httpdocs/assets/js/safekat/components/select2.js b/httpdocs/assets/js/safekat/components/select2.js index febfa86c..06bca1f8 100644 --- a/httpdocs/assets/js/safekat/components/select2.js +++ b/httpdocs/assets/js/safekat/components/select2.js @@ -4,15 +4,16 @@ * @param {String} url * @param {String} placeholder */ -let ClassSelect = function (domItem, url, placeholder, allowClear = false, params = {}) { +let ClassSelect = function (domItem, url, placeholder, allowClear = false, params = {}, dropdownParent = "") { this.url = url; this.item = domItem; this.params = params; - + this.dropdownParent = dropdownParent; + this.config = { placeholder: placeholder, allowClear: allowClear, - dropdownParent: domItem.parent(), + dropdownParent: dropdownParent!=""?dropdownParent:domItem.parent(), language: "es", ajax: { url: () => { diff --git a/httpdocs/assets/js/safekat/components/tarjetaDireccionPresupuesto.js b/httpdocs/assets/js/safekat/components/tarjetaDireccionPresupuesto.js index f7140387..7c555773 100644 --- a/httpdocs/assets/js/safekat/components/tarjetaDireccionPresupuesto.js +++ b/httpdocs/assets/js/safekat/components/tarjetaDireccionPresupuesto.js @@ -8,6 +8,7 @@ class tarjetaDireccion { this.card = this.#generateHTML(id, direccion); this.deleteBtn = this.card.find('.direccion-eliminar'); this.editBtn = this.card.find('.direccion-editar'); + this.direccion = direccion; } @@ -89,13 +90,21 @@ class tarjetaDireccion { return this.id; } + getPaisId() { + return this.direccion.pais_id; + } + + getDireccion() { + return this.direccion; + } + getDireccionId() { return this.direccionId; } getFormData() { return { - id: this.direccionId, + direccion: this.direccion, unidades: this.getUnidades(), entregaPalets: this.getEntregaPalets() }; diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminAdd.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminAdd.js new file mode 100644 index 00000000..6f5b4830 --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminAdd.js @@ -0,0 +1,185 @@ +import ClassSelect from '../../components/select2.js'; +import Ajax from '../../components/ajax.js'; + +class PresupuestoAdminAdd { + + constructor() { + + this.cosido = $("#isCosido"); + this.tipo_impresion = $("#tipo_impresion_id"); + this.POD = $("#POD"); + + this.inc_rei = $('#incRei'); + this.cliente = new ClassSelect($('#clienteId'), '/clientes/cliente/getSelect2', 'Seleccione cliente'); + this.pais = new ClassSelect($('#paisId'), '/paises/menuitems2', 'Seleccione País'); + + this.fecha = $('#updated_at'); + this.estado = $('#estado_id'); + this.titulo = $('#titulo'); + this.autor = $('#autor'); + this.coleccion = $('#coleccion'); + this.numeroEdicion = $('#numeroEdicion'); + this.isbn = $('#isbn'); + this.referenciaCliente = $('#referenciaCliente'); + + this.paginas = $('#paginas'); + this.tirada = $('#tirada'); + this.merma = $('#merma'); + this.mermaCubierta = $('#mermacubierta'); + + this.tamanio = new ClassSelect($("#papelFormatoId"), '/papel-formato/getSelect2', window.language.Presupuestos.formatoLibro); + this.tamanioPersonalizado = $('#papelFormatoPersonalizado'); + this.anchoPersonalizado = $('#papelFormatoAncho'); + this.altoPersonalizado = $('#papelFormatoAlto'); + + this.guardar = $('#saveForm'); + + this.init(); + } + + init() { + + // Fuerza el foco en el campo de búsqueda de select2 + $(document).on('select2:open', () => { + document.querySelector('.select2-search__field').focus(); + }); + + $('#solapas').addClass('d-none'); + $('#solapas_sobrecubierta').addClass('d-none'); + $('#div_solapas_ancho').addClass('d-none'); + $('#div_solapas_ancho_sobrecubierta').addClass('d-none'); + $('.solapas-cubierta-div').addClass('d-none'); + $('.solapas-sobrecubierta-div').addClass('d-none'); + + this.cliente.init(); + this.pais.init(); + + this.tamanio.init(); + + this.inc_rei.select2({ + allowClear: false, + }); + + this.tamanioPersonalizado.on('change', this.changeTipoTamanio.bind(this)); + this.guardar.on('click', this.guardarPresupuesto.bind(this)); + this.tirada.on('change', this.calcular_mermas.bind(this)); + } + + changeTipoTamanio() { + + if (this.tamanioPersonalizado.prop('checked')) { + $('.tamanio-personalizado').removeClass('d-none'); + $('.tamanio-estandar').addClass('d-none'); + this.tamanio.setVal(''); + $("#label_papelFormatoId").text( + window.language.Presupuestos.papelFormatoId + " (" + + window.language.Presupuestos.papelFormatoAncho + " x " + window.language.Presupuestos.papelFormatoAncho + ")*"); + } + else { + this.anchoPersonalizado.val(""); + this.altoPersonalizado.val(""); + $('.tamanio-personalizado').addClass('d-none'); + $('.tamanio-estandar').removeClass('d-none'); + $("#label_papelFormatoId").text( + window.language.Presupuestos.papelFormatoId + '*'); + } + + } + + async guardarPresupuesto() { + + $('#loader').modal('show'); + + try { + + let data = this.getFormData(); + + new Ajax('/presupuestoadmin/add/', data, {}, + function (response) { + popSuccessAlert(response.mensaje); + $('#loader').modal('hide'); + }, + function (error) { + console.error(error); + $('#loader').modal('hide'); + } + ).post(); + + + } catch (error) { + console.error(error); + $('#loader').modal('hide'); + } + } + + getFormData() { + + let datos = {}; + + datos.cliente_id = this.cliente.getVal(); + datos.tipo_impresion_id = this.tipo_impresion.val(); + datos.cosido = this.cosido.val(); + + datos = { + ...datos, ...{ + inc_rei: this.inc_rei.select2('data')[0].id, + titulo: this.titulo.val(), + autor: this.autor.val(), + isbn: this.isbn.val(), + pais_id: this.pais.getVal(), + coleccion: this.coleccion.val(), + numero_edicion: this.numeroEdicion.val(), + referencia_cliente: this.referenciaCliente.val(), + updated_at: new Date().toISOString().slice(0, 19).replace('T', ' '), + } + } + + datos = { + ...datos, ...{ + paginas: this.paginas.val(), + tirada: this.tirada.val(), + papel_formato_id: this.tamanio.item.hasClass('d-none') ? 0 : this.tamanio.getVal(), + papel_formato_personalizado: this.tamanio.item.hasClass('d-none') ? 1 : 0, + merma: this.merma.val(), + merma_cubierta: this.mermaCubierta.val(), + solapas_ancho: "0", + solapas_ancho_sobrecubierta: "0", + } + } + if (datos.papel_formato_personalizado) { + datos.papel_formato_ancho = this.anchoPersonalizado.val(), + datos.papel_formato_alto = this.altoPersonalizado.val() + } + datos.selectedTirada = this.tirada.val(); + + return datos; + } + + calcular_mermas() { + + const tirada = parseInt($('#tirada').val()); + const POD = parseInt($('#POD').val()); + let merma = 0; + + merma = tirada * 0.1 <= POD ? tirada * 0.1 : POD; + + $('#mermacubierta').val(parseInt(merma)) + $('#merma').val(parseInt(merma)) + } + +} + +document.addEventListener('DOMContentLoaded', function () { + + const locale = document.querySelector('meta[name="locale"]').getAttribute('content'); + + new Ajax('/translate/getTranslation', { locale: locale, translationFile: ['Presupuestos', 'PresupuestosDirecciones'] }, {}, + function (translations) { + window.language = JSON.parse(translations); + new PresupuestoAdminAdd().init(); + }, + function (error) { + console.log("Error getting translations:", error); + } + ).post(); +}); \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js new file mode 100644 index 00000000..f2c49e31 --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/presupuestoAdminEdit.js @@ -0,0 +1,503 @@ +import { getToken } from '../../common/common.js'; +import Ajax from '../../components/ajax.js'; + +import DatosGenerales from './sections/datosGenerales.js'; +import DatosLibro from './sections/datosLibro.js'; +import Comparador from './sections/comparador.js'; +import LineasPresupuesto from './sections/lineasPresupuesto.js'; +import PreviewFormasAdmin from './sections/previewFormasAdmin.js'; +import Servicios from './sections/servicios.js'; +import Envios from './sections/envios.js'; +import TiradasAlernativas from './sections/tiradasAlternativas.js'; +import Resumen from './sections/resumen.js'; + +class PresupuestoAdminEdit { + + constructor() { + + this.domItem = $('#presupuestoForm'); + + this.csrf_token = getToken(); + this.csrf_hash = $('#presupuestoForm').find('input[name="' + this.csrf_token + '"]').val(); + + this.lc = $("#lomo_cubierta"); + this.lsc = $("#lomo_sobrecubierta"); + this.cosido = $("#isCosido"); + this.tipo_impresion = $("#tipo_impresion_id"); + this.POD = $("#POD"); + + this.tipoTapa = $('.card-title').text().toLowerCase().includes('dura') ? 'dura' : 'blanda'; + + this.datosGenerales = new DatosGenerales(this.domItem.find('#accordionDatosPresupuestoTip')); + this.datosLibro = new DatosLibro(this.domItem.find('#accordionDatosLibroTip'), + { + checkPaginasPresupuesto: this.checkPaginasPresupuesto, + }); + this.comparador = new Comparador(this.domItem.find('#accordionDatosPresupuestoClienteTip')); + this.lineasPresupuesto = new LineasPresupuesto(this.domItem.find('#accordionLineasPresupuestoTip'), + { + getDimensionLibro: this.getDimensionLibro, + }); + + this.previewFormasAdmin = null; + this.servicios = new Servicios(); + this.envios = new Envios(); + this.tiradasAlternativas = new TiradasAlernativas({ + getDimensionLibro: this.getDimensionLibro, + }); + this.resumen = new Resumen(); + + this.guardar = $('#saveForm'); + + this.calcularPresupuesto = false; + } + + init() { + + // Fuerza el foco en el campo de búsqueda de select2 + $(document).on('select2:open', () => { + document.querySelector('.select2-search__field').focus(); + }); + + const impresion_id = $('#tipo_impresion_id').val(); + let tipoLibro = ''; + if (impresion_id == 1 || impresion_id == 2) { + tipoLibro = 'fresado'; + } else if (impresion_id == 3 || impresion_id == 4) { + tipoLibro = 'cosido'; + } else if (impresion_id == 5 || impresion_id == 6) { + tipoLibro = 'espiral'; + } else if (impresion_id == 7 || impresion_id == 8) { + tipoLibro = 'wireo'; + } else if (impresion_id == 21) { + tipoLibro = 'grapado'; + } + + + this.datosGenerales.init(); + this.datosLibro.init(); + this.comparador.init(); + this.lineasPresupuesto.init(); + + this.previewFormasAdmin = new PreviewFormasAdmin(tipoLibro, this.tipoTapa, + { + ancho: () => this.getDimensionLibro().ancho, + alto: () => this.getDimensionLibro().alto, + lomo: () => $('#lomo_cubierta').val() === '' ? parseFloat('0.0') : parseFloat($('#lomo_cubierta').val()), + lomoSobrecubierta: () => $('#lomo_sobrecubierta').val() === '' ? parseFloat('0.0') : parseFloat($('#lomo_sobrecubierta').val()), + solapa: () => $('#solapas').prop('checked') ? parseFloat($('#solapas_ancho').val()) : 0, + solapa_sobrecubierta: () => $('#solapas_sobrecubierta').prop('checked') ? parseFloat($('#solapas_ancho_sobrecubierta').val()) : 0, + lomoRedondo: () => (this.tipo_impresion == 1 || this.tipo_impresion == 3) ? parseFloat($('#compLomoRedondo').val()) : 0, + } + ); + this.previewFormasAdmin.init(); + this.servicios.init(); + this.envios.init(); + this.tiradasAlternativas.init(); + this.resumen.init(); + + if (window.location.href.includes("edit")) { + + setTimeout(() => { + this.#cargarPresupuesto(); + }, 0); + + const successMessage = sessionStorage.getItem('message'); + if (successMessage) { + popSuccessAlert(successMessage); + sessionStorage.removeItem('message'); + } + } + this.downloadPreviewImage(); + + $(document).on('update-presupuesto', this.updatePresupuesto.bind(this)); + + this.guardar.on('click', this.guardarPresupuesto.bind(this)); + } + + + async guardarPresupuesto() { + + $('#loader').modal('show'); + + try { + + const id = window.location.href.split("/").pop(); + let data = this.getFormData(); + + await this.servicios.guardar(); + await this.envios.guardarEnvios(); + await this.lineasPresupuesto.guardarLineasPresupuesto(); + + new Ajax('/presupuestoadmin/edit/' + id, data, {}, + function (response) { + popSuccessAlert(response.mensaje); + $('#loader').modal('hide'); + }, + function (error) { + console.error(error); + $('#loader').modal('hide'); + } + ).post(); + + + } catch (error) { + console.error(error); + $('#loader').modal('hide'); + } + } + + + getFormData() { + + let datos = {}; + + datos.id = window.location.href.split("/").pop(); + datos.cliente_id = this.datosGenerales.cliente.getVal(); + datos.tipo_impresion_id = this.tipo_impresion.val(); + datos.cosido = this.cosido.val(); + datos.lomo_cubierta = this.lc.val(); + datos.lomo_sobrecubierta = this.lsc.val(); + datos.envio_base = $('#envio_base').val(); + + datos = { + ...datos, ...{ + inc_rei: this.datosGenerales.inc_rei.select2('data')[0].id, + titulo: this.datosGenerales.titulo.val(), + autor: this.datosGenerales.autor.val(), + isbn: this.datosGenerales.isbn.val(), + pais_id: this.datosGenerales.pais.getVal(), + coleccion: this.datosGenerales.coleccion.val(), + numero_edicion: this.datosGenerales.numeroEdicion.val(), + referencia_cliente: this.datosGenerales.referenciaCliente.val(), + updated_at: new Date().toISOString().slice(0, 19).replace('T', ' '), + } + } + + datos = { + ...datos, ...{ + paginas: this.datosLibro.paginas.val(), + tirada: this.datosLibro.tirada.val(), + papel_formato_id: this.datosLibro.tamanio.item.hasClass('d-none') ? 0 : this.datosLibro.tamanio.getVal(), + papel_formato_personalizado: this.datosLibro.tamanio.item.hasClass('d-none') ? 1 : 0, + merma: this.datosLibro.merma.val(), + merma_cubierta: this.datosLibro.mermaCubierta.val() + } + } + if (datos.papel_formato_personalizado) { + datos.papel_formato_ancho = this.datosLibro.anchoPersonalizado.val(), + datos.papel_formato_alto = this.datosLibro.altoPersonalizado.val() + } + datos.selectedTirada = this.datosLibro.tirada.val(); + datos.acabado_cubierta_id = this.datosLibro.acabadoCubierta.getVal(); + datos.acabado_sobrecubierta_id = this.datosLibro.acabadoSobrecubierta.getVal(); + + datos = { + ...datos, ...{ + 'prototipo': this.datosLibro.prototipo.is(':checked') ? 1 : 0, + 'ferro': this.datosLibro.ferro.is(':checked') ? 1 : 0, + 'ferro_digital': this.datosLibro.ferroDigital.is(':checked') ? 1 : 0, + 'marcapaginas': this.datosLibro.marcapaginas.is(':checked') ? 1 : 0, + 'retractilado': this.datosLibro.retractilado.is(':checked') ? 1 : 0, + 'retractilado5': this.datosLibro.retractilado5.is(':checked') ? 1 : 0, + } + }; + + datos.comp_tipo_impresion = this.comparador.tipo_impresion.val(); + datos.comp_pos_paginas_color = this.comparador.posPagColor.val(); + + + if (this.comparador.tipo_impresion_id == 1 || this.tipo_impresion_id == 3) { + datos.lomoRedondo = this.comparador.lomoRedondo.select2('data')[0].id; + datos.cabezada = this.comparador.cabezada.val(); + } + else { + datos.lomoRedondo = 0; + } + + if ($('#tipo_impresion_id').val() != 1 && $('#tipo_impresion_id').val() != 3 && + $('#tipo_impresion_id').val() != 5 && $('#tipo_impresion_id').val() != 7) { + datos.solapas = this.datosLibro.solapasCubierta.is(':checked') ? 1 : 0; + datos.solapas_ancho = this.datosLibro.anchoSolapasCubierta.val(); + } + + datos.solapas_sobrecubierta = this.datosLibro.solapasSobrecubierta.is(':checked') ? 1 : 0; + datos.solapas_ancho_sobrecubierta = this.datosLibro.anchoSolapasSobrecubierta.val(); + + datos.entrega_taller = this.envios.recogerTaller.is(':checked') ? 1 : 0; + if (parseInt(this.cosido.val())) { + + let paginas_por_cuadernillo = ""; + + this.servicios.ServiciosEncuadernacion.table.rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + if (rowData.paginas_por_cuadernillo != null) { + paginas_por_cuadernillo = rowData.paginas_por_cuadernillo; + } + }); + + datos.paginas_por_cuadernillo = paginas_por_cuadernillo; + } + + datos.comentarios_cliente = $('#comentariosCliente').val(); + datos.comentarios_safekat = $('#comentariosSafekat').val(); + datos.comentarios_presupuesto = $('#comentariosPdf').val(); + datos.comentarios_produccion = $('#comentariosProduccion').val(); + + datos = { ...datos, ...this.resumen.getData() }; + + return datos; + } + + + async updatePresupuesto(event, { + + update_lineas = true, + update_servicios = true, + update_envios = true, + update_resumen = true, + update_tiradas_alternativas = true + }) { + const waitForEvent = (eventName) => { + return new Promise((resolve) => { + $(document).one(eventName, () => { + resolve(); + }); + }); + }; + + // Ejecutar los pasos de forma secuencial si están habilitados + if (update_lineas) { + $(document).trigger('update-lineas-presupuesto'); + await waitForEvent('update-lineas-presupuesto-completed'); + } + + if (update_servicios) { + $(document).trigger('update-servicios'); + await waitForEvent('update-servicios-completed'); + } + + if (update_envios) { + $(document).trigger('update-envios'); + await waitForEvent('update-envios-completed'); + } + + if (update_resumen) { + $(document).trigger('update-totales'); + await waitForEvent('update-totales-completed'); + } + + if (update_tiradas_alternativas) { + $(document).trigger('update-tiradas-alternativas'); + await waitForEvent('update-tiradas-alternativas-completed'); + } + } + + + #cargarPresupuesto() { + + const self = this; + + $('#loader').modal('show'); + let id = window.location.href.split("/").pop() + new Ajax('/presupuestoadmin/cargar/' + id, + {}, + {}, + (response) => { + + if (response.status === 1) { + + self.lc.val(parseFloat(response.data.lc).toFixed(2)); + self.lsc.val(parseFloat(response.data.lsc).toFixed(2)); + self.cosido.val(response.data.cosido ? 1 : 0); + self.tipo_impresion.val(response.data.tipo_impresion); + self.POD.val(response.data.POD); + + self.calcularPresupuesto = false; + + self.datosGenerales.cargarDatos(response.data.datosGenerales); + self.datosLibro.cargarDatos(response.data.datosLibro); + self.comparador.cargarDatos(response.data.comparador); + self.lineasPresupuesto.cargarDatos(response.data.lineasPresupuesto); + + self.servicios.cargar(response.data.servicios); + self.envios.cargar(response.data.direcciones); + + $('#comentariosCliente').val(response.data.comentarios_cliente); + $('#comentariosSafekat').val(response.data.comentarios_safekat); + $('#comentariosPdf').val(response.data.comentarios_presupuesto); + $('#comentariosProduccion').val(response.data.comentarios_produccion); + + self.tiradasAlternativas.cargar(response.data.tiradasAlternativas); + + self.resumen.cargar(response.data.resumen); + + setTimeout(() => { + + $('#loader').modal('hide'); + + if (response.data.state != 2) { + + self.calcularPresupuesto = true; + } + + }, 0); + + // Funciones para detectar cambios en el formulario + this.#checkChangesPresupuesto(); + $('#bc-save').on("click", function () { + showBreadCrumbSaveButton(false); + $('#saveForm').trigger('click'); + }); + } + }, + () => { + $('#loader').modal('hide'); + this.calcularPresupuesto = true; + } + ).get(); + } + + + checkPaginasPresupuesto() { + + let cantidad_total = 0; + + // TO-DO + /* + tableLineasPresupuesto.rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + if (rowData.row_id != 'lp_cubierta' && rowData.row_id != 'lp_sobrecubierta' && rowData.row_id != 'lp_guardas') + cantidad_total += parseInt(rowData.paginas) + }) + htmlString = '' + + if (cantidad_total != parseInt($('#paginas').val())) { + htmlString = ` + `; + } + $('#divAlarmasLineasPresupuesto').html(htmlString)*/ + } + + getDimensionLibro() { + + var ancho = 0; + var alto = 0; + + + if ($('#papelFormatoPersonalizado').is(':checked')) { + ancho = parseFloat($('#papelFormatoAncho').val()); + alto = parseFloat($('#papelFormatoAlto').val()); + } + else { + const selectedText = $('#papelFormatoId').find('option:selected').text(); + if (selectedText.length > 0) { + ancho = parseFloat(selectedText.trim().split(" x ")[0]); + alto = parseFloat(selectedText.trim().split(" x ")[1]); + } + } + + return { + ancho: ancho, + alto: alto + } + } + + + #checkChangesPresupuesto() { + // Detectar cambios en inputs de texto + $('input[type="text"]').on('change', function () { + showBreadCrumbSaveButton(true); + }); + + // Detectar cambios en inputs de texto + $('input[type="number"]').on('change', function () { + showBreadCrumbSaveButton(true); + }); + + // Detectar cambios en select + $('select').on('change', function () { + showBreadCrumbSaveButton(true); + }); + + $('.select2bs').on('change', function (e) { + showBreadCrumbSaveButton(true); + }); + + // Detectar cambios en checkboxes + $('input[type="checkbox"]').change(function () { + showBreadCrumbSaveButton(true); + }); + + // Detectar cambios en textareas + $('textarea').on('input', function () { + showBreadCrumbSaveButton(true); + }); + + // Detectar cambios en otros tipos de input + $('input[type="radio"]').change(function () { + showBreadCrumbSaveButton(true); + }); + + // Detectar cambios en otros tipos de input + $('input:not([type])').on('input', function () { + showBreadCrumbSaveButton(true); + }); + } + downloadPreviewImage() { + $(document).on("click", ".download-shape", (event) => { + let parentDiv = $(event.currentTarget).parent().parent(); + let shapeSvgElQuery = $(parentDiv).find("svg"); + let shapeSvgEl = shapeSvgElQuery[0]; + const filename = shapeSvgElQuery.parent().attr("id") ?? "image" + const serializer = new XMLSerializer(); + const svgData = serializer.serializeToString(shapeSvgEl); + const svgBlob = new Blob([svgData], { type: 'image/svg+xml;charset=utf-8' }); + const svgUrl = URL.createObjectURL(svgBlob); + const img = new Image(); + img.onload = () => { + const canvas = document.createElement('canvas'); + canvas.width = img.width; + canvas.height = img.height; + const ctx = canvas.getContext('2d'); + ctx.drawImage(img, 0, 0); + const pngUrl = canvas.toDataURL('image/png'); + const downloadLink = document.createElement('a'); + downloadLink.href = pngUrl; + downloadLink.download = filename ?? '.png'; + document.body.appendChild(downloadLink); + downloadLink.click(); + document.body.removeChild(downloadLink); + + URL.revokeObjectURL(svgUrl); + }; + + img.src = svgUrl; + }) + } + +} + +document.addEventListener('DOMContentLoaded', function () { + + const locale = document.querySelector('meta[name="locale"]').getAttribute('content'); + + new Ajax('/translate/getTranslation', { locale: locale, translationFile: ['Presupuestos', 'PresupuestosDirecciones'] }, {}, + function (translations) { + window.language = JSON.parse(translations); + new PresupuestoAdminEdit().init(); + }, + function (error) { + console.log("Error getting translations:", error); + } + ).post(); +}); \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/comparador.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/comparador.js new file mode 100644 index 00000000..01eb1ec9 --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/comparador.js @@ -0,0 +1,1477 @@ +import ClassSelect from '../../../components/select2.js'; +import { getToken } from '../../../common/common.js'; +import Ajax from '../../../components/ajax.js'; + +class Comparador { + + constructor(domItem) { + + this.domItem = domItem; + + this.tipo_impresion_id = parseInt($('#tipo_impresion_id').val()); + + this.csrf_token = getToken(); + this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val(); + + this.comparador_json = this.domItem.find("#comparador_json_data"); + this.tipo_impresion = $("#tipoImpresion"); + + this.paginasNegro = $('#compPaginasNegro'); + this.papelNegro = new ClassSelect($('#compPapelNegro'), + '/presupuestoadmin/papelgenerico', 'Seleccione papel', false, + { + [this.csrf_token]: this.csrf_hash, + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'negro', + }); + + this.gramajeNegro = new ClassSelect($('#compGramajeNegro'), + '/presupuestoadmin/papelgramaje', 'Seleccione gramaje', false, + { + [this.csrf_token]: this.csrf_hash, + papel_generico: () => this.papelNegro.getVal(), + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'negro', + }); + this.paginasColor = $('#compPaginasColor'); + this.papelColor = new ClassSelect($('#compPapelColor'), + '/presupuestoadmin/papelgenerico', 'Seleccione papel', false, + { + [this.csrf_token]: this.csrf_hash, + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'color', + }); + + this.gramajeColor = new ClassSelect($('#compGramajeColor'), + '/presupuestoadmin/papelgramaje', 'Seleccione gramaje', false, + { + [this.csrf_token]: this.csrf_hash, + papel_generico: () => this.papelColor.getVal(), + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'color', + }); + + this.paginasNegrohq = $('#compPaginasNegrohq'); + this.papelNegrohq = new ClassSelect($('#compPapelNegrohq'), + '/presupuestoadmin/papelgenerico', 'Seleccione papel', false, + { + [this.csrf_token]: this.csrf_hash, + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'negrohq', + }); + + this.gramajeNegrohq = new ClassSelect($('#compGramajeNegrohq'), + '/presupuestoadmin/papelgramaje', 'Seleccione gramaje', false, + { + [this.csrf_token]: this.csrf_hash, + papel_generico: () => this.papelNegrohq.getVal(), + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'negrohq', + }); + + this.paginasColorhq = $('#compPaginasColorhq'); + this.papelColorhq = new ClassSelect($('#compPapelColorhq'), + '/presupuestoadmin/papelgenerico', 'Seleccione papel', false, + { + [this.csrf_token]: this.csrf_hash, + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'colorhq', + }); + + this.gramajeColorhq = new ClassSelect($('#compGramajeColorhq'), + '/presupuestoadmin/papelgramaje', 'Seleccione gramaje', false, + { + [this.csrf_token]: this.csrf_hash, + papel_generico: () => this.papelColorhq.getVal(), + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'colorhq', + }); + + this.paginasCubierta = $('#compCarasCubierta'); + this.papelCubierta = new ClassSelect($('#compPapelCubierta'), + '/presupuestoadmin/papelgenerico', 'Seleccione papel', false, + { + [this.csrf_token]: this.csrf_hash, + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'colorhq', + uso: 'cubierta', + }); + this.gramajeCubierta = new ClassSelect($('#compGramajeCubierta'), + '/presupuestoadmin/papelgramaje', 'Seleccione gramaje', false, + { + [this.csrf_token]: this.csrf_hash, + papel_generico: () => this.papelCubierta.getVal(), + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'colorhq', + uso: 'cubierta', + }); + if (this.tipo_impresion_id != 5 && this.tipo_impresion_id != 6 && this.tipo_impresion_id != 7 && this.tipo_impresion_id != 8 && this.tipo_impresion_id != 21) { + this.sobrecubierta = $('#compSobrecubierta'); + this.papelSobrecubierta = new ClassSelect($('#compPapelSobrecubierta'), + '/presupuestoadmin/papelgenerico', 'Seleccione papel', false, + { + [this.csrf_token]: this.csrf_hash, + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'colorhq', + uso: 'sobrecubierta', + }); + this.gramajeSobrecubierta = new ClassSelect($('#compGramajeSobrecubierta'), + '/presupuestoadmin/papelgramaje', 'Seleccione gramaje', false, + { + [this.csrf_token]: this.csrf_hash, + papel_generico: () => this.papelSobrecubierta.getVal(), + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'colorhq', + uso: 'sobrecubierta', + }); + } + + if (this.tipo_impresion_id == 1 || this.tipo_impresion_id == 3 || this.tipo_impresion_id == 5 || this.tipo_impresion_id == 7) { + this.papelGuardas = new ClassSelect($('#compPapelGuardas'), + '/presupuestoadmin/papelgenerico', 'Seleccione papel', false, + { + [this.csrf_token]: this.csrf_hash, + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'colorhq', + uso: 'guardas', + }); + this.gramajeGuardas = new ClassSelect($('#compGramajeGuardas'), + '/presupuestoadmin/papelgramaje', 'Seleccione gramaje', false, + { + [this.csrf_token]: this.csrf_hash, + papel_generico: () => this.papelCubierta.getVal(), + tipo_impresion: this.tipo_impresion_id, + tirada: () => $('#tirada').val(), + tipo: 'colorhq', + uso: 'guardas', + }); + this.carasGuardas = $('#compCarasGuardas'); + this.btnInsertarGuardas = $('#insertarGuardasBtn'); + } + + if (this.tipo_impresion_id == 1 || this.tipo_impresion_id == 3) { + this.lomoRedondo = $('#compLomoRedondo'); + this.cabezada = $('#cabezada'); + } + + this.posPagColor = $('#compPosPaginasColor'); + this.calculatedColorPages = $('#compCalPaginasColor'); + + this.tableCompCubierta = null; + this.tableCompGuardas = null; + this.tableCompIntPlana = null; + this.tableCompIntRotativa = null; + this.btnInsertarPlana = $('#insertarPlanaBtn'); + this.btnInsertarRotativa = $('#insertarRotativaBtn'); + this.btnInsertarCubierta = $('#insertarCubiertaBtn'); + + this.cargando = false; + this.comparadorPlanaRunning = false; + } + + init() { + + autosize($('#compCalPaginasColor')); + + this.generateTables(); + + this.initSelect2(); + + this.initEvents(); + } + + initSelect2() { + + const self = this; + + this.paginasCubierta.select2({ + allowClear: false, + minimumResultsForSearch: Infinity, + }); + + if ($('#tipo_impresion_id').val() == 1 || $('#tipo_impresion_id').val() == 3 || + $('#tipo_impresion_id').val() == 5 || $('#tipo_impresion_id').val() == 7) { + + this.papelGuardas.init(); + + this.carasGuardas.select2({ + allowClear: false, + minimumResultsForSearch: Infinity, + }); + } + this.papelNegro.init(); + this.gramajeNegro.init(); + this.papelColor.init(); + this.gramajeColor.init(); + this.papelNegrohq.init(); + this.gramajeNegrohq.init(); + this.papelColorhq.init(); + this.gramajeColorhq.init(); + this.papelCubierta.init(); + this.gramajeCubierta.init(); + + if (this.tipo_impresion_id == 1 || this.tipo_impresion_id == 3) { + this.lomoRedondo.select2({ + allowClear: false, + minimumResultsForSearch: Infinity, + }); + this.cabezada.select2({ + allowClear: false, + minimumResultsForSearch: Infinity, + }); + } + + if (this.tipo_impresion_id != 5 && this.tipo_impresion_id != 6 && this.tipo_impresion_id != 7 && this.tipo_impresion_id != 8 && this.tipo_impresion_id != 21) { + + this.sobrecubierta.select2({ + allowClear: false, + minimumResultsForSearch: Infinity, + }); + this.papelSobrecubierta.init(); + this.gramajeSobrecubierta.init(); + this.papelSobrecubierta.onChange(() => self.gramajeSobrecubierta.empty()); + this.sobrecubierta.on('change', () => { + if (this.sobrecubierta.val() == 1) { + $('#solapas_sobrecubierta').prop('checked', true); + $('#div_solapas_ancho_sobrecubierta').removeClass('d-none'); + $('#solapas_ancho_sobrecubierta').val(60); + $('#compPapelSobrecubierta').prop('disabled', false); + $('#compGramajeSobrecubierta').prop('disabled', false); + } + else { + this.papelSobrecubierta.setVal(0); + this.gramajeSobrecubierta.setVal(0); + $('#compPapelSobrecubierta').prop('disabled', true); + $('#compGramajeSobrecubierta').prop('disabled', true); + + } + }); + } + + if (this.tipo_impresion_id == 1 || this.tipo_impresion_id == 3 || this.tipo_impresion_id == 5 || this.tipo_impresion_id == 7) { + this.papelGuardas.init(); + this.gramajeGuardas.init(); + this.papelGuardas.onChange(() => self.gramajeGuardas.empty()); + } + + this.papelNegro.onChange(() => self.gramajeNegro.empty()); + this.papelNegrohq.onChange(() => self.gramajeNegrohq.empty()); + this.papelColor.onChange(() => self.gramajeColor.empty()); + this.papelColorhq.onChange(() => self.gramajeColorhq.empty()); + this.papelCubierta.onChange(() => self.gramajeCubierta.empty()); + + + this.tipo_impresion.select2({ + allowClear: false, + }); + + this.posPagColor.on('keyup', () => this.#computarPaginasColor(this.posPagColor.val())); + } + + initEvents() { + + this.tipo_impresion.on("change", this.#handleTipoImpresion.bind(this)); + $('.accordion-button').on('click', function (e) { + + if (e.target.id.includes("plana")) { + $("#tableCompIntPlana").DataTable().columns.adjust(); + } + else if (e.target.id.includes("rotativa")) { + $("#tableCompIntRotativa").DataTable().columns.adjust(); + } + else if (e.target.id.includes("cubierta")) { + $("#tableCompCubierta").DataTable().columns.adjust(); + } + else if (e.target.id.includes("guardas")) { + $("#tableCompGuardas").DataTable().columns.adjust(); + } + else if (e.target.id.includes("LineasPresupuesto")) { + $("#tableLineasPresupuesto").DataTable().columns.adjust(); + } + }); + + $('.comp_negro_items').on('change', this.obtenerComparadorInterior.bind(this)); + $('.comp_negrohq_items').on('change', this.obtenerComparadorInterior.bind(this)); + $('.comp_color_items').on('change', this.obtenerComparadorInterior.bind(this)); + $('.comp_colorhq_items').on('change', this.obtenerComparadorInterior.bind(this)); + + $('.comp_cubierta_items').on('change', this.obtenerComparadorExteriores.bind(this)); + if (this.tipo_impresion_id != 5 && this.tipo_impresion_id != 6 && this.tipo_impresion_id != 7 && this.tipo_impresion_id != 8 && this.tipo_impresion_id != 21) { + $('.comp_sobrecubierta_items').on('change', this.obtenerComparadorExteriores.bind(this)); + } + + if (this.tipo_impresion_id == 1 || this.tipo_impresion_id == 3 || this.tipo_impresion_id == 5 || this.tipo_impresion_id == 7) { + $('.comp_guardas_items').on('change', this.obtenerComparadorGuardas.bind(this)); + } + + } + + #changePaginasComparador(element) { + + const paginas = parseInt($('#paginas').val()); + const newPaginas = parseInt($('#' + element).val()); + + if (paginas < newPaginas) { + $('#' + element).val(paginas) + } + if (element == this.paginasNegro.attr('id')) { + if (!$('.comp-color-selected').hasClass('d-none')) { + this.paginasColor.val((paginas - newPaginas) > 0 ? paginas - newPaginas : 0); + } + } + else if (element == this.paginasNegrohq.attr('id')) { + if (!$('.comp-colorhq-selected').hasClass('d-none')) { + this.paginasColorhq.val((paginas - newPaginas) > 0 ? paginas - newPaginas : 0); + } + } + else if (element == this.paginasColor.attr('id')) { + this.paginasNegro.val((paginas - newPaginas) > 0 ? paginas - newPaginas : 0); + } + else if (element == this.paginasColorhq.attr('id')) { + this.paginasNegrohq.val((paginas - newPaginas) > 0 ? paginas - newPaginas : 0); + } + } + + + cargarDatos(datos) { + + this.cargando = true; + + this.tipo_impresion.val(datos.tipo_impresion).trigger('change'); + this.updateOpcionesComparador(); + + if (datos.json_data != null) { + this.comparador_json.val(JSON.stringify(datos.json_data)); + + if (datos.json_data.bn) { + this.paginasNegro.val(datos.json_data.bn.paginas); + this.papelNegro.setOption(datos.json_data.bn.papel_id, datos.json_data.bn.papel_nombre); + this.gramajeNegro.setOption(datos.json_data.bn.gramaje, datos.json_data.bn.gramaje); + } + else { + this.paginasNegro.val(0); + } + if (datos.json_data.bnhq) { + this.paginasNegrohq.val(datos.json_data.bnhq.paginas); + this.papelNegrohq.setOption(datos.json_data.bnhq.papel_id, datos.json_data.bnhq.papel_nombre); + this.gramajeNegrohq.setOption(datos.json_data.bnhq.gramaje, datos.json_data.bnhq.gramaje); + } + else { + this.paginasNegrohq.val(0); + } + if (datos.json_data.color) { + this.paginasColor.val(datos.json_data.color.paginas); + this.papelColor.setOption(datos.json_data.color.papel_id, datos.json_data.color.papel_nombre); + this.gramajeColor.setOption(datos.json_data.color.gramaje, datos.json_data.color.gramaje); + } + else { + this.paginasColor.val(0); + } + if (datos.json_data.colorhq) { + this.paginasColorhq.val(datos.json_data.colorhq.paginas); + this.papelColorhq.setOption(datos.json_data.colorhq.papel_id, datos.json_data.colorhq.papel_nombre); + this.gramajeColorhq.setOption(datos.json_data.colorhq.gramaje, datos.json_data.colorhq.gramaje); + } + else { + this.paginasColorhq.val(0); + } + if (datos.json_data.cubierta) { + this.paginasCubierta.val(datos.json_data.cubierta.paginas); + this.papelCubierta.setOption(datos.json_data.cubierta.papel_id, datos.json_data.cubierta.papel_nombre); + this.gramajeCubierta.setOption(datos.json_data.cubierta.gramaje, datos.json_data.cubierta.gramaje); + } + if (datos.json_data.sobrecubierta) { + this.sobrecubierta.val(datos.json_data.sobrecubierta.imprimir).trigger('change'); + this.papelSobrecubierta.setOption(datos.json_data.sobrecubierta.papel_id, datos.json_data.sobrecubierta.papel_nombre); + this.gramajeSobrecubierta.setOption(datos.json_data.sobrecubierta.gramaje, datos.json_data.sobrecubierta.gramaje); + } + if (datos.json_data.guardas) { + this.carasGuardas.val(datos.json_data.guardas.paginas).trigger('change'); + this.papelGuardas.setOption(datos.json_data.guardas.papel_id, datos.json_data.guardas.papel_nombre); + this.gramajeGuardas.setOption(datos.json_data.guardas.gramaje, datos.json_data.guardas.gramaje); + } + + if (this.tipo_impresion_id == 1 || this.tipo_impresion_id == 3) { + this.lomoRedondo.val(datos.lomoRedondo ? 1 : 0).trigger('change'); + this.cabezada.val(datos.cabezada).trigger('change'); + } + + if (datos.posPagColor != null && datos.posPagColor.length > 0) { + this.posPagColor.val(datos.posPagColor); + this.#computarPaginasColor(datos.posPagColor); + } + } + + this.cargando = false; + if (this.paginasNegro.val() > 0) { + this.paginasNegro.trigger('change'); + } + else if (this.paginasNegrohq.val() > 0) { + this.paginasNegrohq.trigger('change'); + } + else if (this.paginasColor.val() > 0) { + this.paginasColor.trigger('change'); + } + else if (this.paginasColorhq.val() > 0) { + this.paginasColorhq.trigger('change'); + } + this.paginasCubierta.trigger('change'); + if (this.tipo_impresion_id == 1 || this.tipo_impresion_id == 3 || this.tipo_impresion_id == 5 || this.tipo_impresion_id == 7) { + this.carasGuardas.trigger('change'); + } + + } + + + generateTables() { + + this.tableCompIntPlana = new DataTable('#tableCompIntPlana', { + scrollX: true, + searching: false, + paging: false, + info: false, + ordering: false, + responsive: true, + select: false, + language: { + url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + columns: [ + { + 'data': 'tipo', + 'render': function (data, type, row, meta) { + if (data == 'bn') + return window.language.Presupuestos.bn; + else if (data == 'bnhq') + return window.language.Presupuestos.bnhq; + else if (data == 'color') + return window.language.Presupuestos.color; + else if (data == 'colorhq') + return window.language.Presupuestos.colorhq; + } + }, + { 'data': 'paginas' }, + { 'data': 'papel' }, + { 'data': 'gramaje' }, + { 'data': 'marca' }, + { 'data': 'maquina' }, + { 'data': 'numeroPliegos' }, + { 'data': 'pliegosPedido' }, + { 'data': 'precioPliego' }, + { 'data': 'libro' }, + { 'data': 'totalPapelPedido' }, + { 'data': 'lomo' }, + { 'data': 'peso' }, + { 'data': 'horasMaquina' }, + { 'data': 'precioImpresion' }, + { 'data': 'total' }, + { 'data': 'maquinaId' }, + { 'data': 'maquinaVelocidad' }, + { 'data': 'tiempoMaquina' }, + { 'data': 'papelGenericoId' }, + { 'data': 'papelImpresionId' }, + { 'data': 'tarifa_impresion_id' } + ], + columnDefs: [ + { + target: [16, 17, 18, 19, 20, 21], + visible: false, + searchable: false + }, + ] + }); + + + this.tableCompIntRotativa = new DataTable('#tableCompIntRotativa', { + scrollX: true, + searching: false, + paging: false, + info: false, + ordering: false, + responsive: true, + select: false, + language: { + url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + columns: [ + { + 'data': 'tipo', + 'render': function (data, type, row, meta) { + if (data == 'rotativa') + return window.language.Presupuestos.rotativa; + } + }, + { 'data': 'paginas' }, + { 'data': 'papel' }, + { 'data': 'gramaje' }, + { 'data': 'marca' }, + { + 'data': 'aFavorFibra', + 'render': function (data, type, row, meta) { + if (data == 'si') + return window.language.Presupuestos.si; + else if (data == 'no') + return window.language.Presupuestos.no; + } + }, + { 'data': 'maquina' }, + { 'data': 'numeroPliegos' }, + { 'data': 'pliegosPedido' }, + { 'data': 'precioPliego' }, + { 'data': 'libro' }, + { 'data': 'totalPapelPedido' }, + { 'data': 'lomo' }, + { 'data': 'peso' }, + { 'data': 'horasMaquina' }, + { 'data': 'precioImpresion' }, + { 'data': 'precioPagNegro' }, + { 'data': 'precioPagColor' }, + { 'data': 'totalTinta' }, + { 'data': 'totalCorte' }, + { 'data': 'total' }, + { 'data': 'maquinaId' }, + { 'data': 'maquinaVelocidad' }, + { 'data': 'tiempoMaquina' }, + { 'data': 'papelGenericoId' }, + { 'data': 'papelImpresionId' }, + { 'data': 'paginasColor' }, + { 'data': 'tarifa_impresion_id' } + ], + columnDefs: [ + { + target: [21, 22, 23, 24, 25, 26, 27], + visible: false, + searchable: false + }, + ] + }); + + this.tableCompCubierta = new DataTable('#tableCompCubierta', { + scrollX: true, + searching: false, + paging: false, + info: false, + ordering: true, + responsive: true, + select: false, + language: { + url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + columns: [ + { + 'data': 'tipo', + 'render': function (data, type, row, meta) { + if (data == 'cubierta') + return window.language.Presupuestos.cubierta; + else if (data == 'sobrecubierta') + return window.language.Presupuestos.sobrecubierta; + } + }, + { 'data': 'paginas' }, + { 'data': 'papel' }, + { 'data': 'gramaje' }, + { 'data': 'marca' }, + { 'data': 'maquina' }, + { 'data': 'numeroPliegos' }, + { 'data': 'pliegosPedido' }, + { 'data': 'precioPliego' }, + { 'data': 'libro' }, + { 'data': 'totalPapelPedido' }, + { 'data': 'lomo' }, + { 'data': 'peso' }, + { 'data': 'horasMaquina' }, + { 'data': 'precioImpresion' }, + { 'data': 'total' }, + { 'data': 'maquinaId' }, + { 'data': 'maquinaVelocidad' }, + { 'data': 'tiempoMaquina' }, + { 'data': 'papelGenericoId' }, + { 'data': 'papelImpresionId' }, + { 'data': 'tarifa_impresion_id' } + ], + columnDefs: [ + { + target: [16, 17, 18, 19, 20, 21], + visible: false, + searchable: false + }, + ], + "order": [[0, 'asc'], [15, 'asc']] + }); + + if (this.tipo_impresion_id == 1 || this.tipo_impresion_id == 3 || this.tipo_impresion_id == 5 || this.tipo_impresion_id == 7) { + this.tableCompGuardas = new DataTable('#tableCompGuardas', { + scrollX: true, + searching: false, + paging: false, + info: false, + ordering: false, + responsive: true, + select: false, + language: { + url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + columns: [ + { + 'data': 'tipo', + 'render': function (data, type, row, meta) { + + return window.language.Presupuestos.Guardas; + } + + }, + { 'data': 'paginas' }, + { 'data': 'papel' }, + { 'data': 'gramaje' }, + { 'data': 'marca' }, + { 'data': 'maquina' }, + { 'data': 'numeroPliegos' }, + { 'data': 'pliegosPedido' }, + { 'data': 'precioPliego' }, + { 'data': 'libro' }, + { 'data': 'totalPapelPedido' }, + { 'data': 'lomo' }, + { 'data': 'peso' }, + { 'data': 'horasMaquina' }, + { 'data': 'precioImpresion' }, + { 'data': 'total' }, + { 'data': 'maquinaId' }, + { 'data': 'maquinaVelocidad' }, + { 'data': 'tiempoMaquina' }, + { 'data': 'papelGenericoId' }, + { 'data': 'papelImpresionId' }, + { 'data': 'tarifa_impresion_id' }, + { 'data': 'paginas_impresion' }, + ], + columnDefs: [ + { + target: [16, 17, 18, 19, 20, 21, 22], + visible: false, + searchable: false + }, + ] + }); + } + + } + + updateOpcionesComparador() { + + $('.comp_negro_items').off('change'); + $('.comp_negrohq_items').off('change'); + $('.comp_color_items').off('change'); + $('.comp_colorhq_items').off('change'); + + this.tableCompIntPlana.clear().draw(); + this.tableCompIntRotativa.clear().draw(); + + const selValue = this.tipo_impresion.val(); + const elements_negro = $('.comp-negro-selected'); + const elements_negrohq = $('.comp-negrohq-selected'); + const elements_color = $('.comp-color-selected'); + const elements_colorhq = $('.comp-colorhq-selected'); + if (selValue.includes("hq")) { + Array.from(elements_negro).forEach(element => { + $(element).addClass('d-none'); + }); + Array.from(elements_color).forEach(element => { + $(element).addClass('d-none'); + }); + if (selValue.includes('color')) { + Array.from(elements_colorhq).forEach(element => { + $(element).removeClass('d-none'); + }); + } + else { + Array.from(elements_colorhq).forEach(element => { + $(element).addClass('d-none'); + }); + } + Array.from(elements_negrohq).forEach(element => { + $(element).removeClass('d-none'); + }); + } + else { + Array.from(elements_negrohq).forEach(element => { + $(element).addClass('d-none'); + }); + Array.from(elements_colorhq).forEach(element => { + $(element).addClass('d-none'); + }); + if (selValue.includes('color')) { + Array.from(elements_color).forEach(element => { + $(element).removeClass('d-none'); + }); + } + else { + Array.from(elements_color).forEach(element => { + $(element).addClass('d-none'); + }); + } + Array.from(elements_negro).forEach(element => { + $(element).removeClass('d-none'); + }); + } + + $('.comp_negro_items').on('change', this.obtenerComparadorInterior.bind(this)); + $('.comp_negrohq_items').on('change', this.obtenerComparadorInterior.bind(this)); + $('.comp_color_items').on('change', this.obtenerComparadorInterior.bind(this)); + $('.comp_colorhq_items').on('change', this.obtenerComparadorInterior.bind(this)); + + if (selValue.includes('color')) { + $('.pos-paginas-color').removeClass('d-none'); + } + else { + $('.pos-paginas-color').addClass('d-none'); + } + } + + #computarPaginasColor(string) { + + var numbers = []; + for (const [, beginStr, endStr] of string.matchAll(/(\d+)(?:-(\d+))?/g)) { + const [begin, end] = [beginStr, endStr].map(Number); + numbers.push(begin); + if (endStr !== undefined) { + for (let num = begin + 1; num <= end; num++) { + numbers.push(num); + } + } + } + var numbers2 = []; + numbers.forEach(function (value, i) { + // Si es impar y no está el siguiente par hay que añadirlo + if (value % 2 != 0 && numbers[i + 1] != value + 1) { + numbers2.push(value + 1); + } + }); + numbers = numbers.concat(numbers2); + numbers.sort(function (a, b) { + return a - b; + }); + this.calculatedColorPages.val(numbers); + autosize.update(this.calculatedColorPages); + } + + #handleTipoImpresion() { + + this.updateOpcionesComparador(); + $('#title_int_rot').html(window.language.Presupuestos.compInteriorRotativa); + $('#title_int_plana').html(window.language.Presupuestos.compInteriorPlana); + if (($('#tipoImpresion').select2('data')[0].id == 'negro' || + $('#tipoImpresion').select2('data')[0].id == 'color')) { + + $('#tableCompIntRotativa').DataTable().clear().draw(); + $('#total_comp_rot').html("0.00"); + + $('#compPaginasColor').val('0') + $('#compPaginasColorhq').val('0') + $('#compPaginasNegrohq').val('0'); + $('#compPaginasNegro').val($('#paginas').val()) + + if ($('#tipoImpresion').select2('data')[0].id == 'negro') { + $('#compGramajeColor').val('').trigger('change') + $('#compPapelColor').val(0).trigger('change') + } + + if ($('#tableCompIntPlana').DataTable().rows().count() > 0 && + $('#tableCompIntPlana').DataTable().cell(0, 0).data().includes('hq')) { + + $('#tableCompIntPlana').DataTable().clear().draw(); + $('#total_comp_plana').html("0.00"); + } + + } + else if (($('#tipoImpresion').select2('data')[0].id == 'negrohq' || + $('#tipoImpresion').select2('data')[0].id == 'colorhq')) { + + $('#tableCompIntRotativa').DataTable().clear().draw(); + $('#total_comp_rot').html("0.00"); + + $('#compPaginasColorhq').val('0') + $('#compPaginasColor').val('0') + $('#compPaginasNegro').val('0') + $('#compPaginasNegrohq').val($('#paginas').val()) + + if ($('#tipoImpresion').select2('data')[0].id == 'negrohq') { + $('#compGramajeColorhq').val('').trigger('change') + $('#compPapelColorhq').val(0).trigger('change') + } + + if ($('#tableCompIntPlana').DataTable().rows().count() > 0 && + !$('#tableCompIntPlana').DataTable().cell(0, 0).data().includes('hq')) { + + $('#tableCompIntPlana').DataTable().clear().draw(); + $('#total_comp_plana').html("0.00"); + } + } + + if (!this.cargando) + $('#paginas').trigger('change'); + } + + getDataForComp(uso = 'interior') { + + let ancho = 0; + let alto = 0; + let papel_generico = {}; + let gramaje = {}; + let paginasColor = 0; + let paginas = parseInt($('#paginas').val()); + + if (!$('#papelFormatoPersonalizado').prop('checked')) { + const selectedFormat = $('#papelFormatoId').select2('data')[0].text; + ancho = Math.round(parseFloat(selectedFormat.trim().split(" x ")[0]), 2); + alto = Math.round(parseFloat(selectedFormat.trim().split(" x ")[1]), 2); + + } + else { + ancho = Math.round(parseFloat($('#papelFormatoAncho').val()), 2); + alto = Math.round(parseFloat($('#papelFormatoAlto').val()), 2); + } + + if (parseInt($('#paginas').val()) <= 0) { + popErrorAlert(window.language.Presupuestos.errores.paginas, 'divAlarmasComparador'); + return { error: true, data: {} }; + } + if (parseInt($('#tirada').val()) <= 0) { + popErrorAlert(window.language.Presupuestos.errores.tiradas, 'divAlarmasComparador'); + return { error: true, data: {} }; + } + if (ancho && alto) { + + if (alto < 60 || ancho < 60 || isNaN(alto) || isNaN(ancho)) { + popErrorAlert(window.language.Presupuestos.errores.dimension, 'divAlarmasComparador'); + return { error: true, data: {} }; + } + } + else { + popErrorAlert(window.language.Presupuestos.errores.dimension, 'divAlarmasComparador'); + return { error: true, data: {} }; + } + + if (uso == 'interior') { + let papeles = []; + let gramajes = []; + if (this.tipo_impresion.val().includes('hq')) { + if (this.tipo_impresion.val().includes('color')) { + papeles.push(this.papelColorhq); + gramajes.push(this.gramajeColorhq); + } + papeles.push(this.papelNegrohq); + gramajes.push(this.gramajeNegrohq); + } + else { + if (this.tipo_impresion.val().includes('color')) { + papeles.push(this.papelColor); + gramajes.push(this.gramajeColor); + } + papeles.push(this.papelNegro); + gramajes.push(this.gramajeNegro); + } + for (let element of papeles) { + if (element.getVal() == 0 || element.getVal() == null) { + const tipo = element.item.attr('id').split('Papel')[1]; + if ($('#compPaginas' + tipo).val() > 0) { + popErrorAlert(window.language.Presupuestos.errores.seleccionePapel, 'divAlarmasComparador'); + return { error: true, data: {} }; + } + } + }; + for (let element of gramajes) { + + if (element.getVal() == 0 || element.getVal() == null) { + const tipo = element.item.attr('id').split('Gramaje')[1]; + if ($('#compPaginas' + tipo).val() > 0) { + popErrorAlert(window.language.Presupuestos.errores.seleccioneGramaje, 'divAlarmasComparador'); + return { error: true, data: {} }; + } + } + }; + + if (this.tipo_impresion.val().includes('color')) { + + if (this.tipo_impresion.val().includes('hq')) { + papel_generico.color = { id: this.papelColorhq.getVal(), nombre: this.papelColorhq.getText() }; + gramaje.color = this.gramajeColorhq.getVal(); + paginasColor = this.paginasColorhq.val(); + } + else { + papel_generico.color = { id: this.papelColor.getVal(), nombre: this.papelColor.getText() }; + gramaje.color = this.gramajeColor.getVal(); + paginasColor = this.paginasColor.val(); + } + + } + if (this.tipo_impresion.val().includes('hq')) { + papel_generico.negro = { id: this.papelNegrohq.getVal(), nombre: this.papelNegrohq.getText() }; + gramaje.negro = this.gramajeNegrohq.getVal(); + } + else { + papel_generico.negro = { id: this.papelNegro.getVal(), nombre: this.papelNegro.getText() }; + gramaje.negro = this.gramajeNegro.getVal(); + } + + } + else if (uso == 'cubierta') { + if (this.papelCubierta.getVal() == 0 || this.papelCubierta.getVal() == null) { + popErrorAlert(window.language.Presupuestos.errores.seleccionePapel, 'divAlarmasComparador'); + return { error: true, data: {} }; + } + if (this.gramajeCubierta.getVal() == 0 || this.gramajeCubierta.getVal() == null) { + popErrorAlert(window.language.Presupuestos.errores.seleccioneGramaje, 'divAlarmasComparador'); + return { error: true, data: {} }; + } + + + papel_generico = { id: this.papelCubierta.getVal(), nombre: this.papelCubierta.getText() }; + gramaje = this.gramajeCubierta.getVal(); + paginas = this.paginasCubierta.select2('data')[0].id + } + + else if (uso == 'sobrecubierta') { + if (this.papelSobrecubierta.getVal() == 0 || this.papelSobrecubierta.getVal() == null) { + popErrorAlert(window.language.Presupuestos.errores.seleccionePapel, 'divAlarmasComparador'); + return { error: true, data: {} }; + } + if (this.gramajeSobrecubierta.getVal() == 0 || this.gramajeSobrecubierta.getVal() == null) { + popErrorAlert(window.language.Presupuestos.errores.seleccioneGramaje, 'divAlarmasComparador'); + return { error: true, data: {} }; + } + + papel_generico = { id: this.papelSobrecubierta.getVal(), nombre: this.papelSobrecubierta.getText() }; + gramaje = this.gramajeSobrecubierta.getVal(); + paginas = 4; + + } + + else if (uso == 'guardas') { + if (this.papelGuardas.getVal() == 0 || this.papelGuardas.getVal() == null) { + popErrorAlert(window.language.Presupuestos.errores.seleccionePapel, 'divAlarmasComparador'); + return { error: true, data: {} }; + } + if (this.gramajeGuardas.getVal() == 0 || this.gramajeGuardas.getVal() == null) { + popErrorAlert(window.language.Presupuestos.errores.seleccioneGramaje, 'divAlarmasComparador'); + return { error: true, data: {} }; + } + + papel_generico = { id: this.papelGuardas.getVal(), nombre: this.papelGuardas.getText() }; + gramaje = this.gramajeGuardas.getVal(); + paginas = this.carasGuardas.val(); + + } + + const datosPedido = { + paginas: paginas, + tirada: $('#tirada').val(), + merma: $('#merma').val(), + ancho: ancho, + alto: alto, + isCosido: $('#isCosido').val(), + a_favor_fibra: 1, + }; + + + if ($('#clienteId').select2('data').length == 0 || $('#clienteId').select2('data').id < 1) { + popErrorAlert(window.language.Presupuestos.errores.seleccioneCliente, 'divAlarmasComparador'); + return { error: true, data: {} }; + } + + let datos = { + datosPedido: datosPedido, + uso: uso, + tipo_impresion_id: this.tipo_impresion_id, + cliente_id: $('#clienteId').select2('data')[0].id, + papel_generico: papel_generico, + gramaje: gramaje, + isColor: this.tipo_impresion.val().includes('color') ? 1 : 0, + isHq: this.tipo_impresion.val().includes('hq') ? 1 : 0, + paginas_color: paginasColor + } + + if (uso == 'cubierta') { + datos.datosPedido.lomo = $("#lomo_cubierta").val(); + datos.datosPedido.solapas = $('#solapas').prop('checked') ? 1 : 0; + datos.datosPedido.solapas_ancho = $('#solapas').prop('checked') ? parseInt($('#solapas_ancho').val()) : 0; + if (this.tipo_impresion_id == 1 || this.tipo_impresion_id == 3) { + datos.lomoRedondo = this.lomoRedondo.val(); + } + } + else if (uso == 'sobrecubierta') { + datos.datosPedido.lomo = $("#lomo_sobrecubierta").val(); + datos.datosPedido.solapas = $('#solapas_sobrecubierta').prop('checked') ? 1 : 0; + datos.datosPedido.solapas_ancho = $('#solapas_sobrecubierta').prop('checked') ? parseInt($('#solapas_ancho_sobrecubierta').val()) : 0; + } + else if (uso == 'guardas') { + datos.datosPedido.isCosido = 1; + datos.datosPedido.isHq = 1; + datos.paginas_color = datos.datosPedido.paginas; + } + + + return { error: false, data: datos }; + } + + getLomoLineasPresupuesto(tipo_lomo = 'interior') { + + let lomoTotal = 0 + try { + $('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + if (tipo_lomo = 'interior') { + if (rowData.row_id != 'lp_cubierta' && rowData.tipo != 'lp_sobrecubierta') + lomoTotal += parseFloat(rowData.lomo); + } + else if (tipo_lomo == 'cubierta') { + if (rowData.tipo != 'lp_sobrecubierta') + lomoTotal += parseFloat(rowData.lomo); + } + }) + } + catch (error) { + lomoTotal = 0; + } + $('#lomo_cubierta').val(lomoTotal); + return lomoTotal; + } + + obtenerComparadorInterior(event, actualizarLineaPlana = false, actualizarLineaRot = false) { + + try { + + const self = this; + + if (this.cargando || this.comparadorPlanaRunning) { + return + } + this.comparadorPlanaRunning = true; + + if (event.currentTarget.id.includes('Paginas')) { + this.#changePaginasComparador(event.currentTarget.id); + } + + this.tableCompIntPlana.clear().draw(); + this.tableCompIntRotativa.clear().draw(); + this.btnInsertarPlana.addClass('d-none'); + this.btnInsertarRotativa.addClass('d-none'); + $('#title_int_rot').html(window.language.Presupuestos.compInteriorRotativa); + $('#title_int_plana').html(window.language.Presupuestos.compInteriorPlana); + + const datosComp = this.getDataForComp('interior'); + if (datosComp.error) { + this.comparadorPlanaRunning = false; + return; + } + else { + + const isHq = this.tipo_impresion.val().includes('hq') ? 1 : 0; + const isColor = this.tipo_impresion.val().includes('color') ? 1 : 0; + + datosComp.data['tipo_maquina'] = 'plana'; + datosComp.data[this.csrf_token] = this.csrf_hash; + new Ajax('/presupuestoadmin/comparadorinterior', + datosComp.data, + {}, + (response) => { + if (response.data.negro && response.data.negro.length > 0) { + let sorted = response.data.negro.sort( + (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? + -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0); + sorted.forEach(function (linea) { + if (typeof linea.error == "undefined") + self.tableCompIntPlana.row + .add(self.getRowFromLinea(isHq ? 'bnhq' : 'bn', linea)) + .draw() + }); + } + if (response.data.color && response.data.color.length > 0) { + let sorted = response.data.color.sort( + (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? + -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0); + sorted.forEach(function (linea) { + if (typeof linea.error == "undefined") + self.tableCompIntPlana.row + .add(self.getRowFromLinea(isHq ? 'colorhq' : 'color', linea)) + .draw() + }); + } + + self.selectLineas('plana'); + if ($('#tableCompIntPlana').DataTable().rows().count() > 0) { + $('#title_int_plana').html(window.language.Presupuestos.compInteriorPlana + ' (' + self.tableCompIntPlana.rows().count() + ')'); + $('#insertarPlanaBtn').removeClass('d-none'); + } + else { + $('#title_int_plana').html(window.language.Presupuestos.compInteriorPlana); + $('#insertarPlanaBtn').addClass('d-none'); + } + + // Rotativa + if (!isHq) { + if (!isColor || + (isColor && datosComp.data.papel_generico.negro.id == datosComp.data.papel_generico.color.id && + datosComp.data.gramaje.negro == datosComp.data.gramaje.color) || + (isColor && datosComp.data.datosPedido.paginas == parseInt(datosComp.data.paginas_color))) { + + datosComp.data['tipo_maquina'] = 'rotativa'; + if (isColor && datosComp.data.datosPedido.paginas == parseInt(datosComp.data.paginas_color)) { + datosComp.data.papel_generico.id = datosComp.data.papel_generico.color.id; + datosComp.data.papel_generico.nombre = datosComp.data.papel_generico.color.nombre; + datosComp.data.gramaje = datosComp.data.gramaje.color; + } + else { + datosComp.data.papel_generico.id = datosComp.data.papel_generico.negro.id; + datosComp.data.papel_generico.nombre = datosComp.data.papel_generico.negro.nombre; + datosComp.data.gramaje = datosComp.data.gramaje.negro; + } + + + new Ajax('/presupuestoadmin/comparadorinterior', + datosComp.data, + {}, + (response) => { + if (response.data.rotativa && response.data.rotativa.length > 0) { + let sorted = response.data.rotativa.sort( + (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? + -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0); + sorted.forEach(function (linea) { + if (typeof linea.error == "undefined") + self.tableCompIntRotativa.row + .add(self.getRowFromLineaRot(linea)) + .draw() + }); + } + self.selectLineas('rotativa'); + if (self.tableCompIntRotativa.rows().count() > 0) { + self.btnInsertarRotativa.removeClass('d-none'); + $('#title_int_rot').html(window.language.Presupuestos.compInteriorRotativa + ' (' + self.tableCompIntRotativa.rows().count() + ')'); + } + else { + $('#title_int_rot').html(window.language.Presupuestos.compInteriorRotativa); + } + + self.comparadorPlanaRunning = false; + }, + (error) => { + console.log(error); + self.comparadorPlanaRunning = false; + } + ).post(); + } + else { + self.comparadorPlanaRunning = false; + } + } + else { + self.comparadorPlanaRunning = false; + } + }, + (error) => { + console.log(error); + self.comparadorPlanaRunning = false; + } + ).post(); + } + } catch (e) { + console.log(e); + this.comparadorPlanaRunning = false; + } + } + + obtenerComparadorExteriores(event, actualizarLineaPlana = false, actualizarLineaRot = false) { + + try { + + const self = this; + + if (this.cargando) { + return + } + + this.tableCompCubierta.clear().draw(); + this.btnInsertarCubierta.addClass('d-none'); + $('#title_cubierta').html(window.language.Presupuestos.compCubiertaSobrecubierta); + + let datosComp = {}; + datosComp.cubierta = this.getDataForComp('cubierta'); + if (datosComp.cubierta.error) { + return; + } + if (this.tipo_impresion_id != 5 && this.tipo_impresion_id != 6 && this.tipo_impresion_id != 7 && this.tipo_impresion_id != 8 && this.tipo_impresion_id != 21) { + if (this.sobrecubierta.select2('data')[0].id == 1) { + datosComp.sobrecubierta = this.getDataForComp('sobrecubierta'); + if (datosComp.sobrecubierta.error) { + return; + } + } + else { + datosComp.sobrecubierta = {}; + } + } + else { + datosComp.sobrecubierta = {}; + } + datosComp.cubierta.data[this.csrf_token] = this.csrf_hash; + if (Object.keys(datosComp.sobrecubierta).length > 0) { + datosComp.sobrecubierta.data[this.csrf_token] = this.csrf_hash; + } + new Ajax('/presupuestoadmin/comparadorexteriores', + { + cubierta: datosComp.cubierta.data, + sobrecubierta: datosComp.sobrecubierta.data + }, + {}, + (response) => { + if (response.data.cubierta && Object.keys(response.data.cubierta).length > 0) { + let sorted = Object.values(response.data.cubierta).sort( + (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? + -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0); + + sorted[0].forEach(function (linea) { + if (typeof linea.error == "undefined") + self.tableCompCubierta.row + .add(self.getRowFromLinea('cubierta', linea)) + .draw(); + }); + } + if (response.data.sobrecubierta && Object.keys(response.data.sobrecubierta).length > 0) { + let sorted = Object.values(response.data.sobrecubierta).sort( + (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? + -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0); + sorted[0].forEach(function (linea) { + if (typeof linea.error == "undefined") + self.tableCompCubierta.row + .add(self.getRowFromLinea('sobrecubierta', linea)) + .draw() + }); + } + + self.selectLineas('cubierta'); + if (self.tableCompCubierta.rows().count() > 0) { + $('#title_cubierta').html(window.language.Presupuestos.compCubiertaSobrecubierta + + (' (' + self.tableCompCubierta.rows().count() + ')')); + self.btnInsertarCubierta.removeClass('d-none'); + } + else { + $('#title_cubierta').html(window.language.Presupuestos.compCubiertaSobrecubierta); + self.btnInsertarCubierta.addClass('d-none'); + } + }, + (error) => { + console.log(error); + } + ).post(); + + } catch (e) { + console.log(e) + } + } + + obtenerComparadorGuardas(event, actualizarLineaPlana = false, actualizarLineaRot = false) { + + try { + + const self = this; + + if (this.cargando) { + return + } + + this.tableCompGuardas.clear().draw(); + this.btnInsertarGuardas.addClass('d-none'); + $('#title_guardas').html(window.language.Presupuestos.Guardas); + + let datosComp = {}; + datosComp = this.getDataForComp('guardas'); + if (datosComp.error) { + return; + } + + datosComp.data[this.csrf_token] = this.csrf_hash; + + new Ajax('/presupuestoadmin/comparadorguardas', + datosComp.data, + {}, + (response) => { + if (response.data && Object.keys(response.data).length > 0) { + let sorted = Object.values(response.data).sort( + (p1, p2) => ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) < (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? + -1 : ((p1.fields.precio_pedido + p1.fields.precio_click_pedido) > (p2.fields.precio_pedido + p2.fields.precio_click_pedido)) ? 1 : 0); + + sorted[0].forEach(function (linea) { + if (typeof linea.error == "undefined") + self.tableCompGuardas.row + .add(self.getRowFromLinea('guardas', linea)) + .draw(); + }); + } + + self.selectLineas('guardas'); + if (self.tableCompGuardas.rows().count() > 0) { + $('#title_guardas').html(window.language.Presupuestos.Guardas + + (' (' + self.tableCompGuardas.rows().count() + ')')); + self.btnInsertarGuardas.removeClass('d-none'); + } + else { + $('#title_guardas').html(window.language.Presupuestos.Guardas); + self.btnInsertarGuardas.addClass('d-none'); + } + }, + (error) => { + console.log(error); + } + ).post(); + + } catch (e) { + console.log(e) + } + } + + + selectLineas(tabla) { + + let table = this.tableCompIntPlana; + let select1 = false; + let select2 = false; + let tipo1 = 'bn'; + let tipo2 = 'color'; + let total_label = '#total_comp_plana' + switch (tabla) { + case 'guardas': + table = this.tableCompGuardas; + tipo1 = 'guardas'; + total_label = '#total_comp_guardas'; + break; + + case 'cubierta': + table = this.tableCompCubierta; + tipo1 = 'cubierta'; + tipo2 = 'sobrecubierta'; + total_label = '#total_comp_cubierta'; + break; + + case 'rotativa': + table = this.tableCompIntRotativa; + tipo1 = 'rotativa'; + total_label = '#total_comp_rot'; + break; + + default: + break; + + } + + table.rows('.selected').deselect(); + table.rows().every(function (rowIdx, tableLoop, rowLoop) { + if (!select1 && table.cell(rowIdx, 0).data().includes(tipo1)) { + table.row(rowIdx).nodes().to$().toggleClass('selected'); + select1 = true; + } + if (tabla == 'plana' || tabla == 'cubierta') + if (!select2 && table.cell(rowIdx, 0).data().includes(tipo2)) { + table.row(rowIdx).nodes().to$().toggleClass('selected'); + select2 = true; + } + }); + + var rows = table.rows('.selected').indexes(); + var data = table.rows(rows).data(); + + var value_total = 0.00; + + for (let i = 0; i < data.length; i++) { + + value_total += parseFloat(data[i]['total']) + } + + $(total_label).html(value_total.toFixed(2)); + } + + getRowFromLinea(tipo, linea) { + + const precio_impresion = isNaN(parseFloat(linea.fields.precio_impresion_horas + linea.fields.margen_impresion_horas + linea.fields.precio_click_pedido)) ? "" : + parseFloat(linea.fields.precio_impresion_horas + linea.fields.margen_impresion_horas + linea.fields.precio_click_pedido).toFixed(2); + + + let data = { + 'tipo': tipo, + 'paginas': linea.fields.paginas, + 'papel': linea.fields.papel_generico, + 'gramaje': linea.fields.gramaje, + 'marca': linea.fields.papel_impresion, + 'maquina': linea.fields.maquina, + 'numeroPliegos': isNaN(parseFloat(linea.fields.pliegos_libro)) ? "" : parseFloat(linea.fields.pliegos_libro).toFixed(2), + 'pliegosPedido': isNaN(parseFloat(linea.fields.pliegos_pedido)) ? "" : parseFloat(linea.fields.pliegos_pedido).toFixed(2), + 'precioPliego': isNaN(parseFloat(linea.fields.precios_pliegos)) ? "" : parseFloat(linea.fields.precios_pliegos).toFixed(6), + 'libro': isNaN(parseFloat(linea.fields.precio_libro)) ? "" : parseFloat(linea.fields.precio_libro).toFixed(2), + 'totalPapelPedido': isNaN(parseFloat(linea.fields.precio_pedido)) ? "" : parseFloat(linea.fields.precio_pedido).toFixed(2), + 'lomo': isNaN(parseFloat(linea.fields.mano)) ? "" : parseFloat(linea.fields.mano).toFixed(2), + 'peso': isNaN(parseFloat(linea.fields.peso)) ? "" : parseFloat(linea.fields.peso).toFixed(2), + 'horasMaquina': isNaN(parseFloat(linea.fields.horas_maquina)) ? "" : parseFloat(linea.fields.horas_maquina).toFixed(2), + 'precioImpresion': precio_impresion, + 'total': isNaN(parseFloat(linea.fields.total_impresion).toFixed(2)) ? "" : parseFloat(linea.fields.total_impresion).toFixed(2), + 'maquinaId': linea.fields.maquina_id, + 'maquinaVelocidad': linea.fields.maquina_velocidad, + 'tiempoMaquina': linea.fields.tiempo_maquina, + 'papelGenericoId': linea.fields.papel_generico_id, + 'papelImpresionId': linea.fields.papel_impresion_id, + 'tarifa_impresion_id': linea.fields.tarifa_impresion_id, + } + if (data['tipo'] == 'guardas') + data['paginas_impresion'] = linea.fields.paginas_impresion; + return data; + } + + getRowFromLineaRot(linea) { + + const precio_impresion = isNaN(parseFloat(linea.fields.precio_impresion_horas + linea.fields.precio_click_pedido)) ? "" : + parseFloat(linea.fields.precio_impresion_horas + linea.fields.precio_click_pedido).toFixed(2); + + return { + 'tipo': 'rotativa', + 'paginas': linea.fields.paginas, + 'papel': linea.fields.papel_generico, + 'gramaje': linea.fields.gramaje, + 'marca': linea.fields.papel_impresion, + 'aFavorFibra': linea.fields.a_favor_fibra == 1 ? 'si' : 'no', + 'maquina': linea.fields.maquina, + 'numeroPliegos': isNaN(parseFloat(linea.fields.pliegos_libro)) ? "" : parseFloat(linea.fields.pliegos_libro).toFixed(2), + 'pliegosPedido': isNaN(parseFloat(linea.fields.pliegos_pedido)) ? "" : parseFloat(linea.fields.pliegos_pedido).toFixed(2), + 'precioPliego': isNaN(parseFloat(linea.fields.precios_pliegos)) ? "" : parseFloat(linea.fields.precios_pliegos).toFixed(6), + 'libro': isNaN(parseFloat(linea.fields.precio_libro)) ? "" : parseFloat(linea.fields.precio_libro).toFixed(2), + 'totalPapelPedido': isNaN(parseFloat(linea.fields.precio_pedido)) ? "" : parseFloat(linea.fields.precio_pedido).toFixed(2), + 'lomo': isNaN(parseFloat(linea.fields.mano)) ? "" : parseFloat(linea.fields.mano).toFixed(2), + 'peso': isNaN(parseFloat(linea.fields.peso)) ? "" : parseFloat(linea.fields.peso).toFixed(2), + 'horasMaquina': isNaN(parseFloat(linea.fields.horas_maquina)) ? "" : parseFloat(linea.fields.horas_maquina).toFixed(2), + 'precioImpresion': precio_impresion, + 'precioPagNegro': isNaN(parseFloat(linea.fields.precio_pagina_negro)) ? "" : parseFloat(linea.fields.precio_pagina_negro).toFixed(6), + 'precioPagColor': isNaN(parseFloat(linea.fields.precio_pagina_color)) ? "" : parseFloat(linea.fields.precio_pagina_color).toFixed(6), + 'totalTinta': isNaN(parseFloat(linea.fields.precio_tinta)) ? "" : parseFloat(linea.fields.precio_tinta).toFixed(2), + 'totalCorte': isNaN(parseFloat(linea.fields.total_corte)) ? "" : parseFloat(linea.fields.total_corte).toFixed(2), + 'total': isNaN(parseFloat(linea.fields.total_impresion)) ? "" : (parseFloat(linea.fields.total_impresion)).toFixed(2), + 'maquinaId': linea.fields.maquina_id, + 'maquinaVelocidad': linea.fields.maquina_velocidad, + 'tiempoMaquina': linea.fields.tiempo_maquina, + 'papelGenericoId': linea.fields.papel_generico_id, + 'papelImpresionId': linea.fields.papel_impresion_id, + 'paginasColor': linea.fields.paginas_color, + 'tarifa_impresion_id': linea.fields.tarifa_impresion_id, + } + } +} + + +export default Comparador; \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosGenerales.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosGenerales.js new file mode 100644 index 00000000..f981d106 --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosGenerales.js @@ -0,0 +1,55 @@ +import ClassSelect from '../../../components/select2.js'; + +class DatosGenerales{ + + constructor(domItem){ + + this.domItem = domItem; + + this.id = this.domItem.find('#id'); + this.fecha = this.domItem.find('#updated_at'); + this.estado = this.domItem.find('#estado_id'); + this.inc_rei = this.domItem.find('#incRei'); + this.titulo = this.domItem.find('#titulo'); + this.autor = this.domItem.find('#autor'); + this.coleccion = this.domItem.find('#coleccion'); + this.numeroEdicion = this.domItem.find('#numeroEdicion'); + this.isbn = this.domItem.find('#isbn'); + + + this.cliente = new ClassSelect($('#clienteId'), '/clientes/cliente/getSelect2', 'Seleccione cliente'); + this.pais = new ClassSelect($('#paisId'), '/paises/menuitems2', 'Seleccione País'); + this.referenciaCliente = this.domItem.find('#referenciaCliente'); + + } + + init(){ + + this.cliente.init(); + this.pais.init(); + + this.inc_rei.select2({ + allowClear: false, + }); + } + + cargarDatos(datos){ + + this.id.val(datos.id); + this.fecha.val(datos.updated_at); + this.estado.val(datos.state); + this.inc_rei.val(datos.inc_rei).trigger('change'); + this.titulo.val(datos.titulo); + this.autor.val(datos.autor); + this.coleccion.val(datos.coleccion); + this.numeroEdicion.val(datos.numero_edicion); + this.isbn.val(datos.isbn); + + + this.cliente.setOption(datos.cliente.id, datos.cliente.nombre); + this.pais.setOption(datos.pais, datos.pais_nombre); + this.referenciaCliente.val(datos.referenciaCliente); + } +} + +export default DatosGenerales; \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosLibro.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosLibro.js new file mode 100644 index 00000000..7b48b4e3 --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/datosLibro.js @@ -0,0 +1,436 @@ +import ClassSelect from '../../../components/select2.js'; +import { getToken } from '../../../common/common.js'; + +class DatosLibro { + + constructor(domItem, functions = {}) { + + this.domItem = domItem; + + this.checkPaginasPresupuesto = functions.checkPaginasPresupuesto; + + this.csrf_token = getToken(); + this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val(); + + this.paginas = this.domItem.find('#paginas'); + this.tirada = this.domItem.find('#tirada'); + this.tamanio = new ClassSelect($("#papelFormatoId"), '/papel-formato/getSelect2', window.language.Presupuestos.formatoLibro); + this.tamanioPersonalizado = this.domItem.find('#papelFormatoPersonalizado'); + this.anchoPersonalizado = this.domItem.find('#papelFormatoAncho'); + this.altoPersonalizado = this.domItem.find('#papelFormatoAlto'); + this.merma = this.domItem.find('#merma'); + this.mermaCubierta = this.domItem.find('#mermacubierta'); + this.solapasCubierta = this.domItem.find('#solapas'); + this.solapasSobrecubierta = this.domItem.find('#solapas_sobrecubierta'); + this.anchoSolapasCubierta = this.domItem.find('#solapas_ancho'); + this.anchoSolapasSobrecubierta = this.domItem.find('#solapas_ancho_sobrecubierta'); + + this.divSolapasCubierta = this.domItem.find('#div_solapas_ancho'); + this.divSolapasSobrecubierta = this.domItem.find('#div_solapas_ancho_sobrecubierta'); + + this.acabadoCubierta = new ClassSelect($("#acabado_cubierta_id"), + '/serviciosacabados/getacabados', + '', + false, + { + [this.csrf_token]: this.csrf_hash, + "cubierta": 1 + } + ); + this.acabadoSobrecubierta = new ClassSelect($("#acabado_sobrecubierta_id"), + '/serviciosacabados/getacabados', + '', + false, + { + [this.csrf_token]: this.csrf_hash, + "sobrecubierta": 1 + } + ); + + this.retractilado = this.domItem.find('#retractilado'); + this.retractilado5 = this.domItem.find('#retractilado5'); + this.prototipo = this.domItem.find('#prototipo'); + this.ferro = this.domItem.find('#ferro'); + this.ferroDigital = this.domItem.find('#ferroDigital'); + this.marcapaginas = this.domItem.find('#marcapaginas'); + + } + + init() { + + const self = this; + + this.tamanio.init(); + this.acabadoCubierta.init(); + this.acabadoSobrecubierta.init(); + + this.acabadoCubierta.item.on('select2:select', function () { + + $(document).trigger('add-servicio-lineas', 'acabadoCubierta'); + }); + this.acabadoSobrecubierta.item.on('select2:select', function () { + $(document).trigger('add-servicio-lineas', 'acabadoSobrecubierta'); + }); + + if (window.location.href.includes("edit")) { + this.retractilado.on('change', this.checkRetractilado.bind(this)); + this.retractilado5.on('change', this.checkRetractilado.bind(this)); + this.ferro.on('change', this.changeFerro.bind(this)); + this.prototipo.on('change', this.changePrototipo.bind(this)); + + this.tamanio.item.on('select2:select', this.changeFormato.bind(this)); + $('.formato_libro').on('change', this.changeFormato.bind(this)); + + if ($('#tipo_impresion_id').val() != 1 && $('#tipo_impresion_id').val() != 3 && + $('#tipo_impresion_id').val() != 5 && $('#tipo_impresion_id').val() != 7) { + this.solapasCubierta.on('change', this.changeSolapasCubierta.bind(this)); + } + + this.solapasSobrecubierta.on('change', this.changeSolapasSobrecubierta.bind(this)); + this.tamanioPersonalizado.on('change', this.changeTipoTamanio.bind(this)); + + this.paginas.on('change', this.changePaginas.bind(this)); + this.tirada.on('change', this.changeTirada.bind(this)); + } + } + + changeFajaColor() { + + if (this.imprimirFajaColor.prop('checked')) { + $(document).trigger('add-servicio-lineas', 'facaColor'); + } + else { + $(document).trigger('remove-servicio-lineas', 'fajaColor'); + } + } + + changeFerro() { + + if (this.ferro.prop('checked')) { + $(document).trigger('add-servicio-lineas', 'ferro'); + } + else { + $(document).trigger('remove-servicio-lineas', 'ferro'); + } + } + + changePrototipo() { + + if (this.prototipo.prop('checked')) { + + $(document).trigger('add-servicio-lineas', 'prototipo'); + this.ferro.prop('checked', true).trigger('change'); + } + else { + $(document).trigger('remove-servicio-lineas', 'prototipo'); + } + } + + + checkRetractilado(element) { + + switch (element.id) { + case 'retractilado': + if ($('#' + element.id).prop('checked')) { + $('#retractilado5').prop('checked', false); + $(document).trigger('remove-servicio-lineas', 'retractilado5'); + $(document).trigger('add-servicio-lineas', 'retractilado'); + } + break; + case 'retractilado5': + if ($('#' + element.id).prop('checked')) { + $('#retractilado').prop('checked', false); + $(document).trigger('remove-servicio-lineas', 'retractilado'); + $(document).trigger('add-servicio-lineas', 'retractilado5'); + } + break; + default: + break; + } + + } + + + changeFormato() { + + // Si es negro o color + if ($('#tipoImpresion').select2('data')[0].id == 'negro' || + $('#tipoImpresion').select2('data')[0].id == 'color') { + $('#compPaginasNegro').trigger('change') + } + // Si es negrohq o colorhq + if ($('#tipoImpresion').select2('data')[0].id == 'negrohq' || + $('#tipoImpresion').select2('data')[0].id == 'colorhq') { + $('#compPaginasNegrohq').trigger('change'); + } + + $('.solapas_cubierta').trigger('change'); + $('.solapas_sobrecubierta').trigger('change'); + + this.checkPaginasPresupuesto(); + + $(document).trigger('update-presupuesto', { + update_lineas : true, + update_servicios : true, + update_envios: true, + update_resumen: true, + update_tiradas_alternativas: true + }); + } + + + changeTipoTamanio() { + + if (this.tamanioPersonalizado.prop('checked')) { + $('.tamanio-personalizado').removeClass('d-none'); + $('.tamanio-estandar').addClass('d-none'); + this.tamanio.setVal(''); + $("#label_papelFormatoId").text( + window.language.Presupuestos.papelFormatoId + " (" + + window.language.Presupuestos.papelFormatoAncho + " x " + window.language.Presupuestos.papelFormatoAncho + ")*"); + } + else { + this.anchoPersonalizado.val(""); + this.altoPersonalizado.val(""); + $('.tamanio-personalizado').addClass('d-none'); + $('.tamanio-estandar').removeClass('d-none'); + $("#label_papelFormatoId").text( + window.language.Presupuestos.papelFormatoId + '*'); + } + + $(document).trigger('update-presupuesto', { + update_lineas : true, + update_servicios : false, + update_envios: false, + update_resumen: false, + update_tiradas_alternativas: false + }); + } + + + changeSolapasCubierta() { + + setTimeout(() => { + if (this.solapasCubierta.prop('checked')) { + $('#div_solapas_ancho').removeClass('d-none'); + $(document).trigger('add-servicio-lineas', 'solapas'); + } + else { + $('#div_solapas_ancho').addClass('d-none'); + this.anchoSolapasCubierta.val(60); + $(document).trigger('remove-servicio-lineas', 'solapas'); + } + }, 100); + $(document).trigger('update-presupuesto', { + update_lineas : false, + update_servicios : true, + update_envios: false, + update_resumen: false, + update_tiradas_alternativas: false + }); + } + + + changeSolapasSobrecubierta() { + + if (this.solapasSobrecubierta.prop('checked')) { + this.divSolapasSobrecubierta.removeClass('d-none'); + $(document).trigger('remove-servicio-lineas', 'solapas'); + } + else { + this.divSolapasSobrecubierta.addClass('d-none'); + this.anchoSolapasSobrecubierta.val(60); + $(document).trigger('add-servicio-lineas', 'solapas'); + } + $(document).trigger('update-presupuesto', { + update_lineas : false, + update_servicios : true, + update_envios: false, + update_resumen: false, + update_tiradas_alternativas: false + }); + + } + + changePaginas() { + + if ($('#tipo_impresion_id').val() == 21) { + if (parseInt($('#paginas').val()) > 80) { + $('#paginas').val(80) + } + } + + if (window.location.href.includes('edit')) { + + this.checkPaginasPresupuesto(); + + // Si es negro o color + if ($('#tipoImpresion').select2('data')[0].id == 'negro' || + $('#tipoImpresion').select2('data')[0].id == 'color') { + $('#compPaginasNegro').val(parseInt($('#paginas').val()) - parseInt($('#compPaginasColor').val())); + $('#compPaginasNegro').trigger('change') + } + // Si es negrohq o colorhq + if ($('#tipoImpresion').select2('data')[0].id == 'negrohq' || + $('#tipoImpresion').select2('data')[0].id == 'colorhq') { + $('#compPaginasNegrohq').val(parseInt($('#paginas').val()) - parseInt($('#compPaginasColorhq').val())); + $('#compPaginasNegrohq').trigger('change'); + } + + + $(document).trigger('update-presupuesto', { + update_lineas : true, + update_servicios : true, + update_envios: true, + update_resumen: true, + update_tiradas_alternativas: true + }); + + } + } + + + changeTirada(update_tiradas_alternativas = true) { + + this.calcular_mermas() + + const url2 = window.location.href; + const url_parts2 = url2.split('/'); + + if (url_parts2[url_parts2.length - 2] == 'edit') { + $(document).trigger('update-presupuesto', { + update_lineas : true, + update_servicios : false, + update_envios: false, + update_resumen: false, + update_tiradas_alternativas: false + }); + + $(document).trigger('ckeck-lineas-envios'); + } + } + + calcular_mermas() { + + const tirada = parseInt($('#tirada').val()); + const POD = parseInt($('#POD').val()); + let merma = 0; + let htmlString = ''; + + if (tirada > POD) { + merma = tirada * 0.1 <= POD ? tirada * 0.1 : POD; + } + else { + let merma_lineas = [] + $('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + if (rowData.row_id != 'lp_guardas' && rowData.row_id != 'lp_cubierta' && rowData.row_id != 'lp_sobrecubierta') { + const formas_linea = parseInt($('#isCosido').val()) == 0 ? parseInt(rowData.formas) : parseInt(rowData.formas) / 2 + if (formas_linea > tirada) + merma_lineas.push(formas_linea - tirada) + else + merma_lineas.push(tirada % formas_linea) + } + + }) + + + if (merma_lineas.length > 0) + merma = Math.max(...merma_lineas) + else { + htmlString = ` + `; + + + merma = 0 + + } + + } + $('#mermacubierta').val(parseInt(merma)) + $('#merma').val(parseInt(merma)) + $('#alert-datosLibro').html(htmlString) + } + + + cargarDatos(datos) { + + this.paginas.val(datos.paginas); + this.tirada.val(datos.tirada); + this.calcular_mermas(); + if (datos.papelFormatoPersonalizado) { + this.tamanioPersonalizado.prop('checked', true); + $(".tamanio-personalizado").removeClass('d-none'); + $(".tamanio-estandar").addClass('d-none'); + this.anchoPersonalizado.val(datos.papelFormatoAlto); + this.altoPersonalizado.val(datos.papelFormatoAncho); + } + else { + $(".tamanio-personalizado").addClass('d-none'); + $(".tamanio-estandar").removeClass('d-none'); + this.tamanio.setOption(datos.papelFormatoId, datos.papelFormatoNombre); + } + + this.merma.val(datos.merma); + this.mermaCubierta.val(datos.mermaCubierta); + + if ($('#tipo_impresion_id').val() == 1 || $('#tipo_impresion_id').val() == 3 || + $('#tipo_impresion_id').val() == 5 || $('#tipo_impresion_id').val() == 7) { + $(".solapas-cubierta-div").addClass('d-none'); + } + else { + if (datos.solapasCubierta) { + this.solapasCubierta.prop('checked', true); + this.anchoSolapasCubierta.val(datos.solapasCubiertaAncho); + this.divSolapasSobrecubierta.removeClass('d-none'); + } + else { + this.solapasCubierta.prop('checked', false); + this.anchoSolapasCubierta.val(60); + this.divSolapasSobrecubierta.addClass('d-none'); + } + } + if (datos.solapasSobrecubierta) { + this.solapasSobrecubierta.prop('checked', true); + this.anchoSolapasSobrecubierta.val(datos.solapasSobrecubiertaAncho); + $('#div_solapas_ancho_sobrecubierta').removeClass('d-none'); + } + else { + this.solapasSobrecubierta.prop('checked', false); + this.anchoSolapasSobrecubierta.val(60); + $('#div_solapas_ancho_sobrecubierta').addClass('d-none'); + } + + + this.acabadoCubierta.setOption(datos.acabadoCubierta.id, datos.acabadoCubierta.text); + + if ($('#tipo_impresion_id').val() == 5 || $('#tipo_impresion_id').val() == 6 || + $('#tipo_impresion_id').val() == 7 || $('#tipo_impresion_id').val() == 8 + || $('#tipo_impresion_id').val() == 21) { + $(".impresion-con-sobrecubierta").addClass('d-none'); + } + else { + + this.acabadoSobrecubierta.setOption(datos.acabadoSobrecubierta.id, datos.acabadoSobrecubierta.text); + } + + this.retractilado.prop('checked', datos.retractilado); + this.retractilado5.prop('checked', datos.retractilado5); + this.prototipo.prop('checked', datos.prototipo); + this.ferro.prop('checked', datos.ferro); + this.ferroDigital.prop('checked', datos.ferroDigital); + this.marcapaginas.prop('checked', datos.marcapaginas); + } +} + + +export default DatosLibro; \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/envios.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/envios.js new file mode 100644 index 00000000..e4126ce3 --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/envios.js @@ -0,0 +1,675 @@ +import Ajax from "../../../components/ajax.js"; +import { getToken } from "../../../common/common.js"; +import ClassSelect from "../../../components/select2.js"; +import ModalYesNo from "../../../components/modalYesNo.js"; + + +class Envios { + + constructor() { + + this.csrf_token = getToken(); + this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val(); + + this.recogerTaller = $('#recoger_en_taller'); + + this.table = null; + this.direccionesClienteForm = new ClassSelect($('#add_clientedAdd'), '/misdirecciones/getSelect2', 'Seleccione una direccion', false, {}); + this.paisesClienteForm = new ClassSelect($('#add_pais_id'), '/paises/menuitems2', 'Seleccione país', false, {}); + this.modalYesNo = null; + + this.insertarEnvio = $('#insertar_direccion'); + + this.actionBtns_direcciones = function (data) { + return ` + + + `; + }; + } + + + init() { + + const self = this; + + this.paisesClienteForm.init(); + + this.table = $('#tableOfDireccionesEnvio').DataTable({ + draw: 5, + serverSide: false, + processing: true, + autoWidth: true, + responsive: true, + order: [[0, "asc"]], + pageLength: 20, + lengthChange: false, + searching: false, + paging: false, + info: false, + scrollX: true, + + columns: [ + { 'data': 'tarifa_id' }, + { 'data': 'cantidad' }, + { 'data': 'peso' }, + { 'data': 'att' }, + { 'data': 'email' }, + { 'data': 'direccion' }, + { 'data': 'cp' }, + { 'data': 'municipio' }, + { 'data': 'pais' }, + { 'data': 'pais_id', visible: false }, + { 'data': 'telefono' }, + { 'data': 'proveedor' }, + { 'data': 'proveedor_id', visible: false }, + { 'data': 'precio' }, + { 'data': 'margen', render: function (data, type, row) { return Math.round(data) } }, + { 'data': 'entregaPieCalle' }, + { + data: function (row, type, set, meta) { + return ` + + + `; + }, + className: 'row-edit dt-center' + } + ], + columnDefs: [ + + { + orderable: false, + searchable: false, + targets: [$('#tableOfDireccionesEnvio').find("tr:first th").length - 1] + }, + { "orderData": [0], "targets": 0 }, + + ], + language: { + url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + + drawCallback: function (settings) { + + const boolCols = [15]; + for (let coln of boolCols) { + self.table.column(coln, { page: 'current' }).nodes().each(function (cell, i) { + cell.innerHTML = cell.innerHTML == '1' ? '' : ''; + }); + } + + // obtener la suma del precio de los envios + let total = 0; + self.table.rows().every(function (rowIdx, tableLoop, rowLoop) { + let data = this.data(); + total += parseFloat(data.precio); + }); + + $("#costeEnvios").text(total.toFixed(2) + "€" || "0€"); + + self.check_unidades_enviadas(); + } + + }); + + $(document).on('click', '.btn-delete-envio', function () { + const rowId = $(this).closest('td').parent()[0].sectionRowIndex; + self.table.row(rowId).remove().draw(); + }); + + $(document).on('click', '.btn-edit-envio', function () { + const rowId = $(this).closest('td').parent()[0].sectionRowIndex; + const data = $('#tableOfDireccionesEnvio').DataTable().row(rowId).data(); + + $("#addressForm").attr('action', 'edit') + $("#addressForm").attr('row', rowId) + $("#addressForm").attr('presupuestodireccion_id', data.id) + let $newAddDialog = $("#addressForm") + let maximaCantidad = parseInt($('#tirada').val()) + $("#add_cantidad").attr("max", maximaCantidad); + $("#add_cantidad").val(maximaCantidad); + $("#add_cantidad").on('change', function () { + $("#add_cantidad").val(parseInt($("#add_cantidad").val()) > maximaCantidad ? maximaCantidad : $("#add_cantidad").val()) + }) + + let cantidad_total = 0 + $('#tableOfDireccionesEnvio').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + let data2 = this.data(); + cantidad_total += parseInt(data2.cantidad) + }); + cantidad_total -= parseInt(data.cantidad) // Si es editar tienes que restar los de la linea actual + $('#add_cantidad').attr('max-value', parseInt($('#tirada').val()) - cantidad_total) + $('#add_cantidad').val(parseInt($('#tirada').val()) - cantidad_total) + + $('#add_att').val(data.att) + $('#add_direccion').val(data.direccion) + $('#add_email').val(data.email) + $('#add_cp').val(data.cp) + $('#add_municipio').val(data.municipio) + $('#add_provincia').val(data.provincia) + self.paisesClienteForm.setOption(data.pais_id, data.pais); + $('#add_telefono').val(data.telefono) + $('#add_cantidad').val(data.cantidad) + $('#add_entregaPieCalle').prop('checked', data.entregaPieCalle == 1 ? true : false) + + self.direccionesClienteForm.setParams({ 'cliente_id': () => $("#clienteId").select2('data')[0].id }); + self.direccionesClienteForm.init(); + + $newAddDialog.modal('show') + }); + + this.recogerTaller.on('change', function () { + + const current_value = this.checked; + self.recogerTaller.prop('checked', false); + + if (current_value) { + self.modalYesNo = new ModalYesNo("Esto borrará todas las direcciones de envío. ¿Está seguro?", "modalYesNoEnvios"); + self.modalYesNo.init(); + self.modalYesNo.show(() => { + self.table.clear().draw(); + self.check_unidades_enviadas(); + self.recogerTaller.prop('checked', true); + self.modalYesNo.hide(); + self.insertarEnvio.addClass('d-none'); + + }); + } + else { + self.insertarEnvio.removeClass('d-none'); + } + }); + + + this.insertarEnvio.on('click', this.addEnvio.bind(this)); + + this.initFormularioDireccionEnvio(); + + $(document).on('update-envios', async function () { + + await self.updateTablaEnvios(); + + $(document).trigger('update-envios-completed'); + + }); + $(document).on('ckeck-lineas-envios', this.check_unidades_enviadas.bind(this)); + } + + addEnvio() { + + $("#addressForm").attr('action', 'create'); + let newAddDialog = $("#addressForm"); + this.direccionesClienteForm.setParams({ 'cliente_id': () => $("#clienteId").select2('data')[0].id }); + this.direccionesClienteForm.init(); + let maximaCantidad = parseInt($('#tirada').val()); + $("#add_cantidad").attr("max", maximaCantidad);; + $("#add_cantidad").val(maximaCantidad); + $("#add_cantidad").on('change', function () { + $("#add_cantidad").val(parseInt($("#add_cantidad").val()) > maximaCantidad ? maximaCantidad : $("#add_cantidad").val()); + }) + + let cantidad_total = 0; + $('#tableOfDireccionesEnvio').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + let data = this.data(); + cantidad_total += parseInt(data.cantidad); + }); + $('#add_cantidad').attr('max-value', parseInt($('#tirada').val()) - cantidad_total); + $('#add_cantidad').val(parseInt($('#tirada').val()) - cantidad_total); + newAddDialog.modal('show'); + } + + + get_peso_libro() { + + var peso_total_libro = 0.0 + $('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + peso_total_libro += parseFloat(rowData.peso) + }) + return peso_total_libro; + } + + + async guardarEnvios() { + + var id = window.location.pathname.split('/').pop(); + + await $.post('/presupuestodirecciones/datatable', + Object.assign({ tipo: "clear_lineas", presupuesto_id: id }, window.token_ajax)) + .done(function (data) { + + $('#tableOfDireccionesEnvio').DataTable().rows().every(async function (rowIdx, tableLoop, rowLoop) { + var data = this.data(); + await $.post('/presupuestos/presupuestodirecciones/add', + { + presupuesto_id: id, + tarifa_id: data.tarifa_id, + cantidad: data.cantidad, + peso: data.peso, + att: data.att, + email: data.email, + direccion: data.direccion, + pais_id: data.pais_id, + provincia: data.provincia, + municipio: data.municipio, + cp: data.cp, + telefono: data.telefono, + precio: data.precio, + margen: data.margen, + proveedor: data.proveedor, + proveedor_id: data.proveedor_id, + entregaPieCalle: data.entregaPieCalle + }) + }); + }) + } + + + async updateTiradaBase() { + + const self = this; + var peso_total_libro = this.get_peso_libro(); + + const tirada = parseInt($('#tirada').val()); + const peso_envio = peso_total_libro * tirada / 1000.0; + + let pais = 1; + let cp = 18000; + let entrega = 'cajas'; + + var datos_tarifa = await self.get_precio_envio(peso_envio, pais, cp, entrega); + + if (datos_tarifa.id != null) { + + if (peso_envio > parseFloat(datos_tarifa.peso_max) || parseFloat(datos_tarifa.peso_max) == 0) { + datos_tarifa.precio = parseFloat(datos_tarifa.peso_min) + (peso_envio - parseFloat(datos_tarifa.peso_min)) * parseFloat(datos_tarifa.precio_adicional); + } + // si no se calcula linealmente + else { + let m = ((parseFloat(datos_tarifa.precio_max) - parseFloat(datos_tarifa.precio_min)) / (parseFloat(datos_tarifa.peso_max) - parseFloat(datos_tarifa.peso_min))); + let b = parseFloat(datos_tarifa.precio_max) - m * parseFloat(datos_tarifa.peso_max); + datos_tarifa.precio = parseFloat(m * peso_envio + b); + } + + $('#envio_base').val(datos_tarifa.precio.toFixed(2)); + } + + } + + async updateTablaEnvios(event, input_data = {}) { + + const self = this; + var peso_total_libro = this.get_peso_libro(); + + await self.updateTiradaBase(); + + $('#tableOfDireccionesEnvio').DataTable().rows().every(async function (rowIdx, tableLoop, rowLoop) { + + var rowData = this.data(); + + if (Object.keys(input_data).length > 0) { + const porcentaje = parseInt(rowData.cantidad) / input_data.tirada_inicial * 100.0; + const cantidad = Math.floor(input_data.tirada * porcentaje / 100.0); + rowData.cantidad = cantidad; + } + + const peso_envio = peso_total_libro * parseInt(rowData.cantidad) / 1000.0; + const tirada = parseInt($('#tirada').val()); + var datos_tarifa = await self.get_precio_envio(peso_envio, rowData.pais_id, rowData.cp, parseInt(rowData.entregaPieCalle) == 1 ? 'palets' : 'cajas'); + + + if (datos_tarifa.id != null) { + + if (peso_envio > parseFloat(datos_tarifa.peso_max) || parseFloat(datos_tarifa.peso_max) == 0) { + datos_tarifa.precio = parseFloat(datos_tarifa.peso_min) + (peso_envio - parseFloat(datos_tarifa.peso_min)) * parseFloat(datos_tarifa.precio_adicional); + } + // si no se calcula linealmente + else { + let m = ((parseFloat(datos_tarifa.precio_max) - parseFloat(datos_tarifa.precio_min)) / (parseFloat(datos_tarifa.peso_max) - parseFloat(datos_tarifa.peso_min))); + let b = parseFloat(datos_tarifa.precio_max) - m * parseFloat(datos_tarifa.peso_max); + datos_tarifa.precio = parseFloat(m * peso_envio + b); + } + + + datos_tarifa.cantidad = parseInt($('#add_cantidad').val()); + datos_tarifa.peso = peso_envio; + + $('#tableOfDireccionesEnvio').DataTable().row(rowIdx) + .data({ + 'tarifa_id': datos_tarifa.id, + 'cantidad': rowData.cantidad, + 'peso': datos_tarifa.peso.toFixed(3), + 'att': rowData.att, + 'email': rowData.email, + 'direccion': rowData.direccion, + 'cp': rowData.cp, + 'municipio': rowData.municipio, + 'provincia': rowData.provincia, + 'pais_id': rowData.pais_id, + 'pais': datos_tarifa.pais, + 'telefono': rowData.telefono, + 'proveedor': datos_tarifa.proveedor, + 'proveedor_id': datos_tarifa.proveedor_id, + 'precio': datos_tarifa.precio.toFixed(2), + 'margen': datos_tarifa.margen, + 'entregaPieCalle': rowData.entregaPieCalle, + 'actionBtns_direcciones': self.actionBtns_direcciones, + }) + .draw(); + + + $(document).trigger('update-presupuesto', { + update_lineas: false, + update_servicios: false, + update_envios: false, + update_resumen: true, + update_tiradas_alternativas: true + }); + } + else { + popErrorAlert(window.error_no_tarifa_envio, 'error-tarifa') + } + }) + + if (Object.keys(input_data).length > 0) { + + $('#tirada').val(input_data.tirada); + $('#tirada').trigger('change', [false]); + } + } + + async get_precio_envio(peso, paisId, cp, tipo_envio) { + + let data = { + tipo: 'get_tarifa', + peso: peso, + paisId: paisId, + cp: cp, + tipo_envio: tipo_envio, + } + + const response = await fetch('/presupuestodirecciones/datatable_2', { + method: "POST", + body: JSON.stringify(data), + headers: { + "Content-type": "application/json; charset=UTF-8", + } + }); + + const values = await response.json(); + return values.data; + } + + initFormularioDireccionEnvio() { + + const self = this; + + this.direccionesClienteForm.item.on('select2:select', function (e) { + + $('.save-alias').css('display', 'none'); + $('#add_alias').val(''); + $('#add_saveDirection').attr("disabled", true); + + let data = e.params.data; + + $.ajax({ + type: "POST", + url: '/clientedirecciones/datatable', + dataType: 'json', + data: { + tipo: 'direccion', + id: data.id, + [self.csrf_token]: self.csrf_hash + + }, + success: function (data) { + if (data.length > 0) { + $('#add_att').val(data[0].att); + $('#add_direccion').val(data[0].direccion); + $('#add_cp').val(data[0].cp); + $('#add_municipio').val(data[0].municipio); + $('#add_provincia').val(data[0].provincia); + $('#add_telefono').val(data[0].telefono); + $('#add_email').val(data[0].email); + self.paisesClienteForm.empty(); + self.paisesClienteForm.setOption(data[0].pais_id, data[0].pais); + } + + return true; + }, + error: function (e) { + return false; + } + }) + return false; + }); + + $('#addressForm').on('hidden.bs.modal', function () { + $('#add_alias').val(""); + $('#add_att').val(""); + $('#add_email').val(""); + $('#add_direccion').val(""); + self.paisesClienteForm.empty(); + self.direccionesClienteForm.empty(); + $('#add_municipio').val(""); + $('#add_provincia').val(""); + $('#add_cp').val(""); + $('#add_telefono').val(""); + $('#add_saveDirection').prop('checked', false) + $('#add_entregaPieCalle').prop('checked', false) + }); + + $('#cancelAdd').on('click', function () { + $('#addressForm').modal("hide"); + }) + + $('#add_cantidad').on('change', function () { + if (parseInt($('#add_cantidad').val()) > $('#add_cantidad').attr('max-value')) + $('#add_cantidad').val($('#add_cantidad').attr('max-value')) + }) + + $('#saveDireccionEnvio').on('click', function () { + + if (self.validate_fields()) { + + if ($('#addressForm').attr('action') == 'edit') { + self.table.row($("#addressForm").attr('row')) + .remove() + .draw(); + } + let peso_total_libro = 0 + + $('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + let rowData = this.data(); + peso_total_libro += parseFloat(rowData.peso) + + }) + + const peso_envio = peso_total_libro * parseInt($('#add_cantidad').val()) / 1000.0 + + + $.post('/presupuestodirecciones/datatable', + { + tipo: "get_tarifa", + peso: peso_envio, + paisId: $("#add_pais_id").val(), + cp: $('#add_cp').val(), + tipo_envio: $('#add_entregaPieCalle').is(":checked") ? 'palets' : 'cajas', + [self.csrf_token]: self.csrf_hash + }) + .done(function (data) { + if (data.length > 0) { + + let precios = [] + for (let i = 0; i < data.length; i++) { + if (peso_envio > data[i].peso_max || data[i].precio_max == 0) { + data[i].precio = (parseFloat(data[i].precio_min) + (peso_envio - parseFloat(data[i].peso_min)) * parseFloat(data[i].precio_adicional)).toFixed(2); + } + + else { + let m = ((data[i].precio_max - data[i].precio_min) / (data[i].peso_max - data[i].peso_min)) + let b = data[i].precio_max - m * data[i].peso_max + data[i].precio = parseFloat(m * peso_envio + b).toFixed(2); + } + data[i].margen = data[i].margen + } + + let tarifa_final = data.reduce((previous, current) => { + return current.precio < previous.precio ? current : previous; + }); + tarifa_final.cantidad = parseInt($('#add_cantidad').val()) + tarifa_final.peso = peso_envio + + + self.table.row + .add({ + 'tarifa_id': tarifa_final.id, + 'cantidad': tarifa_final.cantidad, + 'peso': tarifa_final.peso.toFixed(3), + 'att': $('#add_att').val(), + 'email': $('#add_email').val(), + 'direccion': $('#add_direccion').val(), + 'cp': $('#add_cp').val(), + 'municipio': $('#add_municipio').val(), + 'provincia': $('#add_provincia').val(), + 'pais_id': $('#add_pais_id').select2('data')[0].id, + 'pais': $('#add_pais_id').select2('data')[0].text, + 'telefono': $('#add_telefono').val(), + 'proveedor': tarifa_final.proveedor, + 'proveedor_id': tarifa_final.proveedor_id, + 'precio': tarifa_final.precio, + 'margen': tarifa_final.margen, + 'entregaPieCalle': $('#add_entregaPieCalle').is(":checked") ? 1 : 0, + 'actionBtns_direcciones': ` + + + `, + }) + .draw(); + + + // Se guarda la dirección + if ($('#add_saveDirection').is(":checked") && + $('#add_alias').val().length > 0) { + $.post('/clientes/clientedirecciones/add', + { + cliente_id: $('#clienteId').val(), + 'att': $('#add_att').val(), + 'email': $('#add_email').val(), + 'direccion': $('#add_direccion').val(), + 'cp': $('#add_cp').val(), + 'municipio': $('#add_municipio').val(), + 'provincia': $('#add_provincia').val(), + 'paisId': $('#add_pais_id').val(), + 'telefono': $('#add_telefono').val(), + 'alias': $('#add_alias').val(), + [self.csrf_token]: self.csrf_hash + }) + .done(function (data) { + + }) + } + + $(document).trigger('ckeck-lineas-envios'); + + $(document).trigger('update-presupuesto', { + update_lineas : false, + update_servicios : true, + update_envios: false, + update_resumen: true, + update_tiradas_alternativas: true + }); + + $('#addressForm').modal("hide"); + + } + else { + popErrorAlert(window.language.PresupuestosDirecciones.validation.no_tarifa, 'error-tarifa') + } + + }); + } + }); + + $('#add_saveDirection').on('change', function () { + if (this.checked) { + $('.save-alias').css('display', 'inline') + } + else { + $('.save-alias').css('display', 'none') + } + $('#add_saveDirection').val(this.checked); + }); + + + $('.new-address').on('change', function (e) { + if (e.originalEvent) { + // user-triggered event + $('#add_clientedAdd').val(null).trigger('change'); + $('#add_saveDirection').removeAttr("disabled"); + } + + }) + } + + validate_fields() { + + $(".error-text-form").remove(); + + let returnValue = false + + $("input.new-address").each(function () { + if ($('#' + this.id).val().length == 0 && $('#' + this.id).css('display') != 'none') { + $('#' + this.id).after( + "

" + window.language.PresupuestosDirecciones.validation.required + '

') + } + returnValue = true + }) + return returnValue + } + + cargar(datos) { + if (datos.entrega_taller) { + this.recogerTaller.prop('checked', true); + } + else { + this.table.rows.add(datos).draw(); + } + } + + check_unidades_enviadas() { + + let cantidad_total = 0 + this.table.rows().every(function (rowIdx, tableLoop, rowLoop) { + cantidad_total += parseInt(this.data().cantidad) + }); + + const tirada = parseInt($('#tirada').val()); + let htmlString = ''; + if (cantidad_total < tirada && this.recogerTaller.prop('checked') === false) { + htmlString = ` + `; + $('#alert-envios').html(htmlString); + this.insertarEnvio.removeClass('d-none'); + return false; + } + this.insertarEnvio.addClass('d-none'); + $('#alert-envios').html(htmlString); + return true; + } +} + +export default Envios; \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/lineasPresupuesto.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/lineasPresupuesto.js new file mode 100644 index 00000000..c0442a7c --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/lineasPresupuesto.js @@ -0,0 +1,1938 @@ +import ClassSelect from '../../../components/select2.js'; +import { getToken } from '../../../common/common.js'; +import Ajax from '../../../components/ajax.js'; + + + +class LineasPresupuesto { + + constructor(domItem, functions = {}) { + this.domItem = domItem; + this.getDimensionLibro = functions.getDimensionLibro; + + this.table = null; + + this.csrf_token = getToken(); + this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val(); + + this.addLineaManual = this.domItem.find("#btn_addLinea"); + } + + + init() { + const self = this; + + this.#initTable(); + + this.addLineaManual.on('click', this.#insertLineaManual.bind(this)); + + // Botones de borrar de las lineas de presupuesto + $(document).on('click', '.btn-delete-lp', function (e) { + + const row = $(this).closest('tr'); + const data = self.table.row(row).data() + self.table.row(row) + .remove() + .draw(); + + $(document).trigger('update-presupuesto', { + update_lineas: false, + update_servicios: false, + update_envios: true, + update_resumen: true, + update_tiradas_alternativas: true + }); + // TO-DO + /* + if (data.row_id == 'lp_guardas') + servicioGuardas(false) + */ + + // Si existe cubierta, hay que actualizar con el valor del lomo + if (self.table.row('#lp_cubierta').length > 0) { + self.obtenerLinea('lp_cubierta', false, false); + } + }); + + // Evento para recalcular las lineas de presupuesto + $(document).on('update-lineas-presupuesto', async function () { + + await self.updateLineasPresupuesto(); + + $(document).trigger('update-lineas-presupuesto-completed'); + }); + + $('.insertarLinea').on("click", this.#insertarLineaComparador.bind(this)); + $('.paginas-lp').on('change', this.checkPaginasLineasPresupuesto.bind(this)); + } + + + #initTable() { + + const self = this; + + const lastColNr_lp = $('#tableLineasPresupuesto').find("tr:first th").length - 1; + + const actionBtns_lp = function (data) { + return ` + + `; + }; + + this.table = new DataTable('#tableLineasPresupuesto', { + scrollX: true, + searching: false, + paging: false, + info: false, + ordering: true, + responsive: true, + select: false, + rowId: 'row_id', + language: { + url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + columnDefs: [ + { + targets: 0, + className: 'dt-control', + orderable: false, + data: null, + defaultContent: '' + }, + { + targets: [1, 2, 3, 4, 5, 6, 7, 8, 9], + orderable: false, + visible: false, + }, + { + targets: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], + orderable: false, + }, + { + targets: [10], + orderable: true, + visible: false, + }, + { + orderable: false, + searchable: false, + targets: [lastColNr_lp] + }, + ], + columns: [ + { data: null }, + { data: 'tarifa_impresion_id' }, + { data: 'maquina_ancho' }, + { data: 'maquina_alto' }, + { data: 'maquina_impresion_ancho' }, + { data: 'maquina_impresion_alto' }, + { data: 'formas' }, + { data: 'formas_v' }, + { data: 'formas_h' }, + { data: 'formas_orientacion' }, + { + data: 'position', + type: "num", + render: function (data, type, row, meta) { + if (row.row_id.includes('_bn')) { + return 0; + } + else if (row.row_id.includes('_color')) { + return 1; + } + else if (row.row_id.includes('_cubierta')) { + return 2; + } + else if (row.row_id.includes('_sobrecubierta')) { + return 3; + } + else if (row.row_id.includes('_guardas')) { + return 4; + } + } + }, + { + data: 'icon', + render: function (data, type, row, meta) { + return '' + } + }, + { + data: 'paginas', + render: function (data, type, row, meta) { + if (row.row_id != "lp_cubierta" && row.row_id != "lp_sobrecubierta" && row.row_id != "lp_guardas") + return ''; + else if (row.row_id == "lp_cubierta") { + let select = '' + + return select; + } + else if (row.row_id == "lp_guardas") { + let select = '' + + return select; + + } + else { + return ''; + } + } + }, + { + data: 'papel', + render: function (data, type, row, meta) { + var select = $('') + .attr('id', row.row_id + '_gramaje') + .attr('name', row.row_id + '_gramaje') + .addClass('form-control form-select-sm lp-cell lp-select ')//+ row.row_class + '-select') + .css('min-width', '40px') + + if (data) { + var option = ''; + select.append(option); + } + + return select[0].outerHTML + } + }, + { + data: 'papel_impresion', + render: function (data, type, row, meta) { + var select = $('') + .attr('id', row.row_id + '_maquina') + .attr('name', row.row_id + '_maquina') + .addClass('form-control form-select-sm lp-cell lp-select ' + row.row_class + '-select') + .css('min-width', '110px') + + if (data) { + var option = ''; + select.append(option); + } + + return select[0].outerHTML + } + }, + { + data: 'tiempo', + render: function (data, type, row, meta) { + return ''; + } + }, + { + data: 'lomo', + render: function (data, type, row, meta) { + return ''; + } + }, + { + data: 'peso', + render: function (data, type, row, meta) { + return ''; + } + }, + { + data: 'total_linea', + render: function (data, type, row, meta) { + return ''; + } + }, + { + data: actionBtns_lp, + className: 'row-edit dt-center' + } + ], + "order": [10, 'asc'], + }); + + this.table.on('click', 'td.dt-control', function (e) { + let tr = e.target.closest('tr'); + let row = self.table.row(tr); + + if (row.child.isShown()) { + // This row is already open - close it + row.child.hide(); + } + else { + // Open this row + row.child(self.formatRow(row.data())).show(); + } + }); + + this.table.on('draw', function () { + + $("#lomo_cubierta").val(self.getLomoInterior()); + $("#lomo_sobrecubierta").val(parseFloat(self.getLomoInterior()) + parseFloat(self.getLomoCubierta())); + self.checkPaginasLineasPresupuesto(); + self.mostrarTabsPreview(); + }); + } + + + async updateLineasPresupuesto() { + + $('#tableLineasPresupuesto tbody tr:visible ').each(function () { + + $('#' + this.id + '_maquina').trigger('change'); + }) + } + + cargarDatos(data) { + + const self = this; + + data[1].forEach(function (lp) { + + const formas = JSON.parse(lp.formas) + lp.dimensiones_maquina = [formas.maquina_ancho, formas.maquina_alto] + lp.dimensiones_maquina_impresion = [formas.maquina_impresion_ancho, formas.maquina_impresion_alto] + lp.num_formas = { + value: formas.formas, + num_formas_verticales: formas.formas_v, + num_formas_horizontales: formas.formas_h, + posicion_formas: formas.formas_orientacion + } + lp['tipo_maquina'] = lp['maquina_tipo'] + lp['precio_impresion_horas'] = lp['precio_impresion'] + lp['margen_impresion_horas'] = lp['margen_impresion'] + lp['precio_libro'] = lp['libro'] + lp['precio_pedido'] = lp['total_papel_pedido'] + lp['total_impresion'] = lp['total_linea'] + lp['precios_pliegos'] = lp['pliegos_precio'] + lp['papel_generico_id'] = lp['papel_id'] + + let dateObj = new Date(lp['tiempo_maquina'] * 1000); + const hours = dateObj.getUTCHours(); + const minutes = dateObj.getUTCMinutes(); + const seconds = dateObj.getSeconds(); + lp['tiempo_maquina'] = hours.toString().padStart(2, '0') + ':' + + minutes.toString().padStart(2, '0') + ':' + + seconds.toString().padStart(2, '0'); + + if (lp.maquina_tipo == 'inkjet') { + + lp.datosTipologias = { + negro: lp.rotativa_negro, + cyan: lp.rotativa_cyan, + magenta: lp.rotativa_magenta, + amarillo: lp.rotativa_amarillo, + cg: lp.rotativa_cg, + gota_negro: lp.rotativa_gota_negro, + gota_color: lp.rotativa_gota_color, + } + + lp['paginas_color'] = lp['rotativa_pag_color'] + + lp['totalImpresion'] = lp['rotativa_total_impresion'] + lp['a_favor_fibra'] = lp['rotativa_a_favor_fibra'] + + lp['resolucion'] = lp['rotativa_resolucion'] + lp['superficie'] = lp['rotativa_area_paginas'] + + lp['num_gotas_negro'] = lp['rotativa_num_gotas_negro'] + lp['num_gotas_cyan'] = lp['rotativa_num_gotas_cyan'] + lp['num_gotas_magenta'] = lp['rotativa_num_gotas_magenta'] + lp['num_gotas_amarillo'] = lp['rotativa_num_gotas_amarillo'] + lp['num_gotas_cg'] = lp['rotativa_num_gotas_cg'] + + lp['precio_pagina_negro'] = lp['rotativa_precio_pag_negro'] + lp['precio_pagina_color'] = lp['rotativa_precio_pag_color'] + lp['factor_altura'] = lp['rotativa_factor_altura'] + lp['factor_anchura'] = lp['rotativa_factor_anchura'] + lp['paginas_por_pliego'] = lp['rotativa_pag_por_pliego'] + + lp['clicks_libro'] = lp['rotativa_clicks_libro'] + lp['peso_gotas_negro'] = lp['rotativa_peso_gotas_negro'] + lp['peso_gotas_cyan'] = lp['rotativa_peso_gotas_cyan'] + lp['peso_gotas_magenta'] = lp['rotativa_peso_gotas_magenta'] + lp['peso_gotas_amarillo'] = lp['rotativa_peso_gotas_amarillo'] + lp['peso_gotas_cg'] = lp['rotativa_peso_gotas_cg'] + lp['clicks_pedido'] = lp['rotativa_clicks_total'] + lp['precio_click_pedido'] = lp['precio_click_pedido'] + lp['margen_click_pedido'] = lp['margen_click_pedido'] + lp['precio_tinta'] = lp['rotativa_precio_tinta'] + + + lp['peso_gotas_negro_pedido'] = lp['rotativa_peso_gotas_negro_pedido'] + lp['peso_gotas_cyan_pedido'] = lp['rotativa_peso_gotas_cyan_pedido'] + lp['peso_gotas_magenta_pedido'] = lp['rotativa_peso_gotas_magenta_pedido'] + lp['peso_gotas_amarillo_pedido'] = lp['rotativa_peso_gotas_amarillo_pedido'] + lp['peso_gotas_cg_pedido'] = lp['rotativa_peso_gotas_cg_pedido'] + + } + if (lp.tipo.includes('rot')) { + + lp['maquina_velocidad'] = lp['rotativa_mxm'] + lp['metros_papel_libro'] = lp['rotativa_metros_libro'] + lp['metros_papel_total'] = lp['rotativa_metros_total'] + lp['velocidad_corte'] = lp['rotativa_velocidad_corte'] + lp['precio_hora_corte'] = lp['rotativa_precio_hora_corte'] + lp['tiempo_corte'] = lp['rotativa_tiempo_corte'] + lp['total_corte'] = lp['rotativa_total_corte'] + } + + lp['areaPaginas'] = lp['rotativa_superficie'] + + + let rowData = self.#processRowData(lp, lp.tipo, lp.tipo.replace(/_/g, '-')); + + let row = self.table.row("#" + lp.tipo); + + self.table.row.add(rowData).draw() + row = self.table.row("#" + lp.tipo); + + row.child(self.formatRow(row.data())).show(); + + self.#addEventosLineas(lp.tipo, lp.maquina_tipo == 'inkjet' ? true : false); + if (lp.tipo == 'lp_guardas') + lp['paginas_impresion'] = lp.paginas_impresion; + + }); + } + + async guardarLineasPresupuesto() { + + let data = []; + const presupuesto_id = window.location.href.split('/').pop(); + + this.table.rows().every(function (rowIdx, tableLoop, rowLoop) { + + var rowData = this.data(); + + const formas = { + maquina_ancho: rowData.maquina_ancho, + maquina_alto: rowData.maquina_alto, + maquina_impresion_ancho: rowData.maquina_impresion_ancho, + maquina_impresion_alto: rowData.maquina_impresion_alto, + formas: rowData.formas, + formas_v: rowData.formas_v, + formas_h: rowData.formas_h, + formas_orientacion: rowData.formas_orientacion, + } + + var t_maq_str = rowData.tiempo.split(':'); // split it at the colons + var t_maq = 0 + + if (t_maq_str.length == 3) + t_maq = (+t_maq_str[0]) * 3600 + (+t_maq_str[1]) * 60 + (+t_maq_str[2]); + + let linea_data = { + presupuesto_id: presupuesto_id, + tipo: rowData.row_id, + paginas: (rowData.row_id == 'lp_guardas') ? (($('#tipo_impresion_id').val() == 1 || $('#tipo_impresion_id').val() == 3) ? 8 : 4) : rowData.paginas, + papel_id: rowData.papel, + gramaje: rowData.gramaje, + papel_impresion_id: rowData.papel_impresion_id, + papel_impresion: rowData.papel_impresion, + maquina_id: rowData.maquina_id, + maquina: rowData.maquina, + maquina_tipo: rowData.maquinaTipo, + tiempo_maquina: t_maq, + pliegos_libro: rowData.numeroPliegos, + pliegos_pedido: rowData.pliegosPedido, + pliegos_precio: rowData.precioPliego, + libro: rowData.libro, + total_papel_pedido: rowData.totalPapelPedido, + margen_papel_pedido: rowData.margenPapelPedido, + mano: rowData.lomo, + peso: rowData.peso, + precio_click: rowData.click, + precio_click_pedido: rowData.totalClicks, + margen_click_pedido: rowData.margenClicks, + check_papel_total: $('#' + rowData.row_id + '_checkPapel').is(":checked") ? 1 : 0, + check_impresion_total: $('#' + rowData.row_id + '_checkClicks').is(":checked") ? 1 : 0, + tarifa_impresion_id: rowData.tarifa_impresion_id, + formas: JSON.stringify(formas), + + horas_maquina: rowData.horasMaquina, + precio_hora: rowData.precioHora, + precio_impresion: rowData.precioImpresion, + margen_impresion: rowData.margenImpresion, + total_linea: rowData.total_linea, + } + + if (rowData.row_id == 'lp_guardas') + linea_data.paginas_impresion = rowData.paginas_impresion + + // maquina rotativa o inkjet + if (linea_data.maquina_tipo == 'inkjet') { + + linea_data.rotativa_pag_color = rowData.numPagColor + + linea_data.rotativa_total_impresion = rowData.totalImpresion + linea_data.rotativa_a_favor_fibra = rowData.aFavorFibra, + linea_data.rotativa_negro = rowData.cobNegro + linea_data.rotativa_cyan = rowData.cobCyan + linea_data.rotativa_magenta = rowData.cobMagenta + linea_data.rotativa_amarillo = rowData.cobAmarillo + linea_data.rotativa_cg = rowData.cobCG + linea_data.rotativa_gota_negro = rowData.gotaNegro + linea_data.rotativa_gota_color = rowData.gotaColor + + + linea_data.rotativa_resolucion = rowData.resolucion + linea_data.rotativa_area_paginas = rowData.areaPaginas + + linea_data.rotativa_num_gotas_negro = rowData.gotaNegro + linea_data.rotativa_num_gotas_cyan = rowData.gotasCyan + linea_data.rotativa_num_gotas_magenta = rowData.gotasMagenta + linea_data.rotativa_num_gotas_amarillo = rowData.gotasAmarillo + linea_data.rotativa_num_gotas_cg = rowData.gotasCG + + linea_data.rotativa_precio_pag_negro = rowData.precioPagNegro + linea_data.rotativa_precio_pag_color = rowData.precioPagColor + linea_data.rotativa_factor_altura = rowData.factorAltura + linea_data.rotativa_factor_anchura = rowData.factorAnchura + linea_data.rotativa_pag_por_pliego = rowData.paginasPliego + + linea_data.rotativa_clicks_libro = rowData.clicksLibro + linea_data.rotativa_peso_gotas_negro = rowData.gTintaNegro + linea_data.rotativa_peso_gotas_cyan = rowData.gTintaCyan + linea_data.rotativa_peso_gotas_magenta = rowData.gTintaMagenta + linea_data.rotativa_peso_gotas_amarillo = rowData.gTintaAmarillo + linea_data.rotativa_peso_gotas_cg = rowData.gTintaCG + linea_data.rotativa_clicks_total = rowData.clicksPedido + linea_data.precio_click_pedido = rowData.totalClicksPedido + linea_data.rotativa_precio_tinta = rowData.totalTinta + + + linea_data.rotativa_peso_gotas_negro_pedido = rowData.gTintaNegroPed + linea_data.rotativa_peso_gotas_cyan_pedido = rowData.gTintaCyanPed + linea_data.rotativa_peso_gotas_magenta_pedido = rowData.gTintaMagentaPed + linea_data.rotativa_peso_gotas_amarillo_pedido = rowData.gTintaAmarilloPed + linea_data.rotativa_peso_gotas_cg_pedido = rowData.gTintaCGPed + + } + if (linea_data.tipo.includes('rot')) { + + linea_data.rotativa_mxm = rowData.metrosMinuto + linea_data.rotativa_metros_libro = rowData.metrosPapelLibro + linea_data.rotativa_metros_total = rowData.metrosPapelTotal + linea_data.rotativa_velocidad_corte = rowData.velocidadCorte + linea_data.rotativa_precio_hora_corte = rowData.precioHoraCorte + linea_data.rotativa_tiempo_corte = rowData.tiempoCorte + linea_data.rotativa_total_corte = rowData.totalCorte + linea_data.rotativa_a_favor_fibra = rowData.aFavorFibra == true ? 1 : 0 + } + + data.push(linea_data) + }); + + + var datos = { + tipo: 'lineasPresupuesto', + datos: data, + presupuesto_id: presupuesto_id, + } + + await $.ajax({ + type: 'post', + url: '/presupuestoadmin/datatable_2', + data: datos, + dataType: 'json', + success: function (response) { + + } + }).fail(function (jqXHR, textStatus, error) { + // Handle error here + console.log(jqXHR) + }); + } + + + mostrarTabsPreview() { + + const table = $('#tableLineasPresupuesto').DataTable(); + + // Clear all existing tabs + $('*[id*=tab-pv-]').hide().find('.active').removeClass('active'); + $('*[id*=pv_]').removeClass('active show'); + + // Enable active tabs + table.rows().every(function () { + const lpName = this.data().row_id.replace('lp_', ''); + const tabName = lpName.replace('_', '-'); + + if (['bn', 'bnhq', 'color', 'colorhq', 'rot_bn', 'rot_color', 'guardas', 'cubierta', 'sobrecubierta'].includes(lpName)) { + $(`#tab-pv-${tabName}`).show(); + if (lpName === 'cubierta') { + $(`#tab-pv-${tabName}`).show(); + $(`#tab-pv-esquema-${tabName}`).show(); + } + } + }); + } + + checkPaginasLineasPresupuesto() { + + let cantidad_total = 0 + + this.table.rows().every(function (rowIdx, tableLoop, rowLoop) { + let rowData = this.data(); + if (rowData.row_id != 'lp_cubierta' && rowData.row_id != 'lp_sobrecubierta' && rowData.row_id != 'lp_guardas') + cantidad_total += parseInt(rowData.paginas) + }) + let htmlString = '' + + if (cantidad_total != parseInt($('#paginas').val())) { + htmlString = ` + `; + } + $('#divAlarmasLineasPresupuesto').html(htmlString) + } + + #insertLineaManual() { + + let dataRows = this.table.rows().data(); + + switch ($('#addLineasPresupuesto').val()) { + // Se chequean todas las lineas de negro y todas las de color + // (solo una de cada en interior) + + case 'lp_bn': + var hayLinea = false + for (let number = 0; number < dataRows.length; number++) { + if (dataRows[number].row_id == 'lp_bn' || + dataRows[number].row_id == 'lp_bnhq' || + dataRows[number].row_id == 'lp_rot_bn') { + hayLinea = true; + continue; + } + } + + if (hayLinea) { + popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto'); + break; + } + + var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_bn', 'lp-bn'); + this.table.row.add(data).draw(); + this.#addEventosLineas('lp_bn', false); + break; + + case 'lp_bnhq': + var hayLinea = false + for (let number = 0; number < dataRows.length; number++) { + if (dataRows[number].row_id == 'lp_bn' || + dataRows[number].row_id == 'lp_bnhq' || + dataRows[number].row_id == 'lp_rot_bn') { + hayLinea = true + continue + } + } + + if (hayLinea) { + popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto'); + break + } + + var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_bnhq', 'lp-bnhq'); + this.table.row.add(data).draw() + this.#addEventosLineas('lp_bnhq', false); + break + + case 'lp_color': + var hayLinea = false + for (let number = 0; number < dataRows.length; number++) { + if (dataRows[number].row_id == 'lp_color' || + dataRows[number].row_id == 'lp_colorhq' || + dataRows[number].row_id == 'lp_rot_color') { + hayLinea = true; + continue; + } + } + + if (hayLinea) { + popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto'); + break; + } + + var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_color', 'lp-color'); + this.table.row.add(data).draw(); + this.#addEventosLineas('lp_color', false); + break + + case 'lp_colorhq': + var hayLinea = false + for (let number = 0; number < dataRows.length; number++) { + if (dataRows[number].row_id == 'lp_color' || + dataRows[number].row_id == 'lp_colorhq' || + dataRows[number].row_id == 'lp_rot_color') { + hayLinea = true + continue + } + } + + if (hayLinea) { + popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto'); + break; + } + + var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_colorhq', 'lp-colorhq'); + this.table.row.add(data).draw(); + this.#addEventosLineas('lp_colorhq', false); + break; + + case 'lp_rot_bn': + var hayLinea = false + for (let number = 0; number < dataRows.length; number++) { + if (dataRows[number].row_id == 'lp_bn' || + dataRows[number].row_id == 'lp_bnhq' || + dataRows[number].row_id == 'lp_rot_bn') { + hayLinea = true; + continue; + } + } + + if (hayLinea) { + popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto'); + break; + } + + var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_rot_bn', 'lp-rot-bn'); + this.table.row.add(data).draw(); + this.#addEventosLineas('lp_rot_bn', false); + break + + case 'lp_rot_color': + var hayLinea = false + for (let number = 0; number < dataRows.length; number++) { + if (dataRows[number].row_id == 'lp_color' || + dataRows[number].row_id == 'lp_colorhq' || + dataRows[number].row_id == 'lp_rot_color') { + hayLinea = true; + continue; + } + } + + if (hayLinea) { + popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto'); + break; + } + + var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_rot_color', 'lp-rot-color'); + this.table.row.add(data).draw() + this.#addEventosLineas('lp_rot_color', false); + break; + + case 'lp_cubierta': + var hayLinea = false + for (let number = 0; number < dataRows.length; number++) { + if (dataRows[number].row_id == 'lp_cubierta') { + hayLinea = true; + continue; + } + } + + if (hayLinea) { + popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto'); + break; + } + + var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_cubierta', 'lp-cubierta'); + this.table.row.add(data).draw(); + this.#addEventosLineas('lp_cubierta', false); + break + + case 'lp_sobrecubierta': + var hayLinea = false + for (let number = 0; number < dataRows.length; number++) { + if (dataRows[number].row_id == 'lp_sobrecubierta') { + hayLinea = true; + continue; + } + } + + if (hayLinea) { + popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto'); + break; + } + + var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_sobrecubierta', 'lp-sobrecubierta'); + this.table.row.add(data).draw(); + this.#addEventosLineas('lp_sobrecubierta', false); + break + + case 'lp_guardas': + var hayLinea = false + for (let number = 0; number < dataRows.length; number++) { + if (dataRows[number].row_id == 'lp_guardas') { + hayLinea = true; + continue; + } + } + + if (hayLinea) { + popErrorAlert(window.language.Presupuestos.errores.lineaDuplicada, 'divAlarmasLineasPresupuesto'); + break; + } + + var data = this.#processRowData({ tipo_maquina: 'toner' }, 'lp_guardas', 'lp-guardas'); + this.table.row.add(data).draw() + this.#addEventosLineas('lp_guardas', false); + servicioGuardas(true); + break + default: + break + } + this.table.columns.adjust(); + } + + #processRowData(row, rowId, rowClass) { + + var icon = "" + if (rowId == 'lp_bn') { + if (row.tipo_maquina == 'toner') + icon = '/themes/vuexy/img/safekat/presupuestos/icon_bn.png' + else + icon = '/themes/vuexy/img/safekat/presupuestos/icon_inkjet_bn.png'; + } + + else if (rowId == 'lp_bnhq') { + if (row.tipo_maquina == 'toner') + icon = '/themes/vuexy/img/safekat/presupuestos/icon_bnhq.png'; + else + icon = '/themes/vuexy/img/safekat/presupuestos/icon_inkjet_bn.png'; + } + else if (rowId == 'lp_color') { + if (row.tipo_maquina == 'toner') + icon = '/themes/vuexy/img/safekat/presupuestos/icon_color.png'; + else + icon = '/themes/vuexy/img/safekat/presupuestos/icon_inkjet_color.png'; + } + else if (rowId == 'lp_colorhq') { + if (row.tipo_maquina == 'toner') + icon = '/themes/vuexy/img/safekat/presupuestos/icon_colorhq.png'; + else + icon = '/themes/vuexy/img/safekat/presupuestos/icon_inkjet_color.png'; + } + + else if (rowId == 'lp_cubierta') + icon = '/themes/vuexy/img/safekat/presupuestos/icon_cubierta.png'; + else if (rowId == 'lp_sobrecubierta') + icon = '/themes/vuexy/img/safekat/presupuestos/icon_sobrecubierta.png'; + else if (rowId == 'lp_guardas') + icon = '/themes/vuexy/img/safekat/presupuestos/icon_guardas.png'; + else if (rowId == 'lp_rot_bn') + icon = '/themes/vuexy/img/safekat/presupuestos/icon_rotativa_bn.png'; + else if (rowId == 'lp_rot_color') + icon = '/themes/vuexy/img/safekat/presupuestos/icon_rotativa_color.png'; + + const blank_line = (typeof row.tarifa_impresion_id === 'undefined') ? 1 : 0; + var data = { + 'row_id': rowId, + 'row_class': rowClass, + + 'tarifa_impresion_id': blank_line ? 0 : isNaN(parseInt(row.tarifa_impresion_id)) ? "" : parseInt(row.tarifa_impresion_id), + 'maquina_ancho': blank_line ? 0 : isNaN(parseFloat(row.dimensiones_maquina[0])) ? "" : parseFloat(row.dimensiones_maquina[0]), + 'maquina_alto': blank_line ? 0 : isNaN(parseFloat(row.dimensiones_maquina[1])) ? "" : parseFloat(row.dimensiones_maquina[1]), + 'maquina_impresion_ancho': blank_line ? 0 : isNaN(parseFloat(row.dimensiones_maquina_impresion[0])) ? "" : parseFloat(row.dimensiones_maquina_impresion[0]), + 'maquina_impresion_alto': blank_line ? 0 : isNaN(parseFloat(row.dimensiones_maquina_impresion[1])) ? "" : parseFloat(row.dimensiones_maquina_impresion[1]), + 'formas': blank_line ? 0 : isNaN(parseInt(row.num_formas.value)) ? 0 : parseInt(row.num_formas.value), + 'formas_v': blank_line ? 0 : isNaN(parseInt(row.num_formas.num_formas_verticales)) ? 0 : parseInt(row.num_formas.num_formas_verticales), + 'formas_h': blank_line ? 0 : isNaN(parseInt(row.num_formas.num_formas_horizontales)) ? 0 : parseInt(row.num_formas.num_formas_horizontales), + 'formas_orientacion': blank_line ? 0 : row.num_formas.posicion_formas, + + 'icon': icon, + 'paginas': blank_line ? 0 : row.paginas, + 'paginas_impresion': rowId == 'lp_guardas' ? row.paginas_impresion : 0, + 'papel': blank_line ? "" : row.papel_generico_id, + 'papel_nombre': blank_line ? "" : row.papel_generico, + 'gramaje': blank_line ? "" : row.gramaje, + 'papel_impresion': blank_line ? "" : row.papel_impresion, + 'papel_impresion_id': blank_line ? "" : row.papel_impresion_id, + 'maquina': blank_line ? "" : row.maquina, + 'maquina_id': blank_line ? "" : row.maquina_id, + + 'tiempo': blank_line ? "" : row.tiempo_maquina, + 'lomo': isNaN(parseFloat(row.mano)) ? "" : parseFloat(row.mano).toFixed(2), + 'peso': isNaN(parseFloat(row.peso)) ? "" : parseFloat(row.peso).toFixed(2), + + 'total_linea': isNaN(parseFloat(row.total_impresion)) ? "" : parseFloat(row.total_impresion).toFixed(2), + + 'numeroPliegos': isNaN(parseFloat(row.pliegos_libro)) ? "" : parseFloat(row.pliegos_libro).toFixed(0), + 'pliegosPedido': isNaN(parseFloat(row.pliegos_pedido)) ? "" : parseFloat(row.pliegos_pedido).toFixed(0), + 'precioPliego': isNaN(parseFloat(row.precios_pliegos)) ? "" : parseFloat(row.precios_pliegos).toFixed(6), + 'libro': isNaN(parseFloat(row.precio_libro)) ? "" : parseFloat(row.precio_libro).toFixed(2), + 'totalPapelPedido': isNaN(parseFloat(row.precio_pedido)) ? "" : parseFloat(row.precio_pedido).toFixed(2), + 'margenPapelPedido': isNaN(parseFloat(row.margen_papel_pedido)) ? "" : parseFloat(row.margen_papel_pedido).toFixed(2), + 'click': isNaN(parseFloat(row.precio_click)) ? "" : parseFloat(row.precio_click).toFixed(6), + 'totalClicks': isNaN(parseFloat(row.precio_click_pedido)) ? "" : parseFloat(row.precio_click_pedido).toFixed(2), + 'margenClicks': isNaN(parseFloat(row.margen_click_pedido)) ? "" : parseFloat(row.margen_click_pedido).toFixed(2), + 'horasMaquina': isNaN(parseFloat(row.horas_maquina)) ? "" : parseFloat(row.horas_maquina).toFixed(4), + 'precioHora': isNaN(parseFloat(row.precio_hora)) ? "" : parseFloat(row.precio_hora).toFixed(2), + 'precioImpresion': isNaN(parseFloat(row.precio_impresion_horas)) ? "" : parseFloat(row.precio_impresion_horas).toFixed(2), + 'margenImpresion': isNaN(parseFloat(row.margen_impresion_horas)) ? "" : parseFloat(row.margen_impresion_horas).toFixed(2), + 'maquinaTipo': row.tipo_maquina, + 'check_papel_total': row.check_papel_total, + 'check_impresion_total': row.check_impresion_total, + } + + if (row.tipo_maquina == 'inkjet') { + + data.numPagColor = row.paginas_color + data.aFavorFibra = row.a_favor_fibra + data.cobNegro = isNaN(parseFloat(row.datosTipologias.negro)) ? "" : parseFloat(row.datosTipologias.negro).toFixed(2) + data.cobCyan = isNaN(parseFloat(row.datosTipologias.cyan)) ? "" : parseFloat(row.datosTipologias.cyan).toFixed(2) + data.cobMagenta = isNaN(parseFloat(row.datosTipologias.magenta)) ? "" : parseFloat(row.datosTipologias.magenta).toFixed(2) + data.cobAmarillo = isNaN(parseFloat(row.datosTipologias.amarillo)) ? "" : parseFloat(row.datosTipologias.amarillo).toFixed(2) + data.gotaNegro = isNaN(parseFloat(row.datosTipologias.gota_negro)) ? "" : parseFloat(row.datosTipologias.gota_negro).toFixed(2) + data.gotaColor = isNaN(parseFloat(row.datosTipologias.gota_color)) ? "" : parseFloat(row.datosTipologias.gota_color).toFixed(2) + + data.resolucion = isNaN(parseFloat(row.resolucion)) ? "" : parseFloat(row.resolucion).toFixed(0) + data.areaPaginas = isNaN(parseFloat(row.superficie)) ? "" : parseFloat(row.superficie).toFixed(2) + + data.gotasNegro = isNaN(parseFloat(row.num_gotas_negro)) ? "" : parseFloat(row.num_gotas_negro).toFixed(0) + data.gotasCyan = isNaN(parseFloat(row.num_gotas_cyan)) ? "" : parseFloat(row.num_gotas_cyan).toFixed(0) + data.gotasMagenta = isNaN(parseFloat(row.num_gotas_magenta)) ? "" : parseFloat(row.num_gotas_magenta).toFixed(0) + data.gotasAmarillo = isNaN(parseFloat(row.num_gotas_amarillo)) ? "" : parseFloat(row.num_gotas_amarillo).toFixed(0) + data.precioPagNegro = isNaN(parseFloat(row.precio_pagina_negro)) ? "" : parseFloat(row.precio_pagina_negro).toFixed(6) + data.precioPagColor = isNaN(parseFloat(row.precio_pagina_color)) ? "" : parseFloat(row.precio_pagina_color).toFixed(6) + data.factorAltura = isNaN(parseFloat(row.factor_altura)) ? "" : parseFloat(row.factor_altura).toFixed(2) + data.factorAnchura = isNaN(parseFloat(row.factor_anchura)) ? "" : parseFloat(row.factor_anchura).toFixed(2) + data.paginasPliego = isNaN(parseFloat(row.paginas_por_pliego)) ? "" : parseFloat(row.paginas_por_pliego).toFixed(2) + + if (rowId.includes('rot')) { + data.metrosMinuto = isNaN(parseFloat(row.maquina_velocidad)) ? "" : parseFloat(row.maquina_velocidad).toFixed(2) + data.metrosPapelLibro = isNaN(parseFloat(row.metros_papel_libro)) ? "" : parseFloat(row.metros_papel_libro).toFixed(2) + data.metrosPapelTotal = isNaN(parseFloat(row.metros_papel_total)) ? "" : parseFloat(row.metros_papel_total).toFixed(2) + data.velocidadCorte = isNaN(parseFloat(row.velocidad_corte)) ? "" : parseFloat(row.velocidad_corte).toFixed(2) + data.precioHoraCorte = isNaN(parseFloat(row.precio_hora_corte)) ? "" : parseFloat(row.precio_hora_corte).toFixed(2) + data.tiempoCorte = isNaN(parseFloat(row.tiempo_corte)) ? "" : parseFloat(row.tiempo_corte).toFixed(2) + data.totalCorte = isNaN(parseFloat(row.total_corte)) ? "" : parseFloat(row.total_corte).toFixed(2) + } + else { + data.totalCorte = 0 + } + + data.clicksLibro = isNaN(parseFloat(row.clicks_libro)) ? "" : parseFloat(row.clicks_libro).toFixed(0) + data.gTintaNegro = isNaN(parseFloat(row.peso_gotas_negro)) ? "" : parseFloat(row.peso_gotas_negro).toFixed(2) + data.gTintaCyan = isNaN(parseFloat(row.peso_gotas_cyan)) ? "" : parseFloat(row.peso_gotas_cyan).toFixed(2) + data.gTintaMagenta = isNaN(parseFloat(row.peso_gotas_magenta)) ? "" : parseFloat(row.peso_gotas_magenta).toFixed(2) + data.gTintaAmarillo = isNaN(parseFloat(row.peso_gotas_amarillo)) ? "" : parseFloat(row.peso_gotas_amarillo).toFixed(2) + data.clicksPedido = isNaN(parseFloat(row.clicks_pedido)) ? "" : parseFloat(row.clicks_pedido).toFixed(0) + data.totalClicksPedido = isNaN(parseFloat(row.precio_click_pedido)) ? "" : parseFloat(row.precio_click_pedido).toFixed(2) + data.totalTinta = isNaN(parseFloat(row.precio_tinta)) ? "" : parseFloat(row.precio_tinta).toFixed(2) + + data.totalImpresion = isNaN(parseFloat(row.precio_click_pedido + row.precio_tinta + data.totalCorte)) ? "" : parseFloat(row.precio_click_pedido + row.precio_tinta + data.totalCorte).toFixed(2) + + data.gTintaNegroPed = isNaN(parseFloat(row.peso_gotas_negro_pedido)) ? "" : parseFloat(row.peso_gotas_negro_pedido).toFixed(2) + data.gTintaCyanPed = isNaN(parseFloat(row.peso_gotas_cyan_pedido)) ? "" : parseFloat(row.peso_gotas_cyan_pedido).toFixed(2) + data.gTintaMagentaPed = isNaN(parseFloat(row.peso_gotas_magenta_pedido)) ? "" : parseFloat(row.peso_gotas_magenta_pedido).toFixed(2) + data.gTintaAmarilloPed = isNaN(parseFloat(row.peso_gotas_amarillo_pedido)) ? "" : parseFloat(row.peso_gotas_amarillo_pedido).toFixed(2) + + if (!rowId.includes('rot')) { + data.cobCG = isNaN(parseFloat(row.datosTipologias.cg)) ? "" : parseFloat(row.datosTipologias.cg).toFixed(2) + data.gotasCG = isNaN(parseFloat(row.num_gotas_cg)) ? "" : parseFloat(row.num_gotas_cg).toFixed(2) + data.gTintaCG = isNaN(parseFloat(row.peso_gotas_cg)) ? "" : parseFloat(row.peso_gotas_cg).toFixed(2) + data.gTintaCGPed = isNaN(parseFloat(row.peso_gotas_cg_pedido)) ? "" : parseFloat(row.peso_gotas_cg_pedido).toFixed(2) + } + + + data.alto_click = row.alto_click + } + + return data + } + + formatRow(d) { + + var value = '' + + '' + + '' + + '' + + '
' + + '
' + + window.language.Presupuestos.numeroPliegos + + '' + + '
' + + '
' + + window.language.Presupuestos.pliegosPedido + + '' + + '
' + + '
' + + window.language.Presupuestos.precioPliego + + '' + + '
' + + '
' + + window.language.Presupuestos.libro + + '' + + '
' + + '
' + + window.language.Presupuestos.totalPapelPedido + + '' + + '
' + + '' + + '
' + + '' + + '
' + + '
' + + window.language.Presupuestos.click + + '' + + '
' + + '
' + + window.language.Presupuestos.totalClicks + + '' + + '
' + + '
' + + window.language.Presupuestos.horas + + '' + + '
' + + '
' + + window.language.Presupuestos.precioHora + + '' + + '
' + + '
' + + window.language.Presupuestos.precioImpresion + + '' + + '
' + + '
' + + '' + + '
' + + '' + + '' + + '
' + + '' + + + + + value += '' + + if (d.maquinaTipo == 'inkjet') { + value += + '' + + '' + + '' + + '' + + '
' + + '
' + + '' + + '
' + + '
' + + window.language.Presupuestos.numPagColor + + '' + + '
' + + ((d.row_id.includes('rot')) ? '
' + + window.language.Presupuestos.saturacion + + '' + + '
' : '') + + '
' + + window.language.Presupuestos.cobNegro + + '' + + '
' + + '
' + + window.language.Presupuestos.cobCyan + + '' + + '
' + + '
' + + window.language.Presupuestos.cobMagenta + + '' + + '
' + + '
' + + window.language.Presupuestos.cobAmarillo + + '' + + '
' + + ((!d.row_id.includes('rot')) ? + '
' + + window.language.Presupuestos.cobCG + + '' + + '
' : '') + + '
' + + window.language.Presupuestos.gotaNegro + + '' + + '
' + + '
' + + window.language.Presupuestos.gotaColor + + '' + + '
' + + '
' + + window.language.Presupuestos.aFavorFibra + + '' + + '
' + + '
' + + '' + + '
' + + '
' + + + '' + + '' + + '' + + '' + + '' + + '' + + '
' + + ((!d.row_id.includes('rot')) ? + '
' + + window.language.Presupuestos.factorAltura + + '' + + '
' + + '
' + + window.language.Presupuestos.factorAnchura + + '' + + '
' : '') + + (d.row_id.includes('rot') ? '
' : '' + + + (d.row_id.includes('rot') ? '
' + + window.language.Presupuestos.resolucion + + '' + + '
' : '') + + (d.row_id.includes('rot') ? '
' + + window.language.Presupuestos.areaPaginas + + '' + + '
' : '') + + '
' + + window.language.Presupuestos.gotasNegro + + '' + + '
' + + '
' + + window.language.Presupuestos.gotasCyan + + '' + + '
' + + '
' + + window.language.Presupuestos.gotasMagenta + + '' + + '
' + + '
' + + window.language.Presupuestos.gotasAmarillo + + '' + + '
' + + (!(d.row_id.includes('rot')) ? '
' + + window.language.Presupuestos.gotasCG + + '' + + '
' : '') + + '
' + + window.language.Presupuestos.precioPagNegro + + '' + + '
' + + '
' + + window.language.Presupuestos.precioPagColor + + '' + + '
' + + (d.row_id.includes('rot') ? + '
' + + window.language.Presupuestos.factorAltura + + '' + + '
' + + '
' + + window.language.Presupuestos.factorAnchura + + '' + + '
' : '') + + (d.row_id.includes('rot') ? '
' + + window.language.Presupuestos.paginasPliego + + '' + + '
' : '') + + '
' + + '' + + '' + + '' + + '' + + '' + + '' + + '
' + + (d.row_id.includes('rot') ? '
' : '' + + (d.row_id.includes('rot') ? '
' : '' + + (d.row_id.includes('rot') ? '
' + + window.language.Presupuestos.clicksLibro + + '' + + '
' : '') + + ((!d.row_id.includes('rot')) ? '
' + + window.language.Presupuestos.saturacion + + '' + + '
' : '') + + ((!d.row_id.includes('rot')) ? '
' + + window.language.Presupuestos.paginasPliego + + '' + + '
' : '') + + '
' + + window.language.Presupuestos.gTintaNegro + + '' + + '
' + + '
' + + window.language.Presupuestos.gTintaCyan + + '' + + '
' + + '
' + + window.language.Presupuestos.gTintaMagenta + + '' + + '
' + + '
' + + window.language.Presupuestos.gTintaAmarillo + + '' + + '
' + + (!(d.row_id.includes('rot')) ? '
' + + window.language.Presupuestos.gTintaCG + + '' + + '
' : '') + + ((!d.row_id.includes('rot')) ? '
' + + window.language.Presupuestos.clicksLibro + + '' + + '
' : '') + + '
' + + window.language.Presupuestos.clicksPedido + + '' + + '
' + + '
' + + window.language.Presupuestos.totalClicks + + '' + + '
' + + '
' + + window.language.Presupuestos.totalTinta + + '' + + '
' + + (d.row_id.includes('rot') ? '
' : '' + + '
' + + window.language.Presupuestos.totalImpresion + + '' + + '
' + + '
' + + '' + + '' + + '' + + '' + + '' + + '' + + '
' + + ((!d.row_id.includes('rot')) ? '
' + + window.language.Presupuestos.resolucion + + '' + + '
' : '') + + ((!d.row_id.includes('rot')) ? '
' + + window.language.Presupuestos.areaPaginas + + '' + + '
' : '') + + (d.row_id.includes('rot') ? '
' : '' + + (d.row_id.includes('rot') ? '
' : '' + + (d.row_id.includes('rot') ? '
' : '' + + '
' + + window.language.Presupuestos.gTintaNegroPed + + '' + + '
' + + '
' + + window.language.Presupuestos.gTintaCyanPed + + '' + + '
' + + '
' + + window.language.Presupuestos.gTintaMagentaPed + + '' + + '
' + + '
' + + window.language.Presupuestos.gTintaAmarilloPed + + '' + + '
' + + (!(d.row_id.includes('rot')) ? '
' + + window.language.Presupuestos.gTintaCGPed + + '' + + '
' : '') + + '
' + + '' + + '' + } + + return $(value).toArray(); + } + + + getLomoInterior() { + let lomo = 0; + $('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + if (rowData.row_id != 'lp_cubierta' && rowData.tipo != 'lp_sobrecubierta') + lomo += parseFloat(rowData.lomo); + } + ); + return lomo; + } + + + getLomoCubierta() { + let lomo = 0; + $('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + if (rowData.row_id == 'lp_cubierta') + lomo += parseFloat(rowData.lomo); + } + ); + return lomo; + } + + + obtenerLinea(linea = 'lp_bn', fromComparador = false, updatedTipologias = false, input_data = {}) { + + const self = this; + const dimension = this.getDimensionLibro(); + + if (Object.keys(input_data).length == 0) { + + input_data = { + papel_generico_id: $('#' + linea + '_papel option:selected').val(), + papel_generico: $('#' + linea + '_papel option:selected').text().trim(), + gramaje: $('#' + linea + '_gramaje option:selected').text().trim(), + maquina_id: $('#' + linea + '_maquina option:selected').val(), + papel_impresion_id: $('#' + linea + '_papelImpresion option:selected').val() + } + if (linea.includes('rot')) { + input_data.fibra = fromComparador == false ? ($('#lp_rot_color_aFavorFibra').prop('checked') ? 1 : 0) : 1; + } + if (linea == 'lp_cubierta') { + input_data.paginas = parseInt($('#lp_cubierta_paginas option:selected').val()); + } + else if (linea == 'lp_sobrecubierta') { + input_data.paginas = 4; + } + else if (linea == 'lp_guardas') { + input_data.paginas = (parseInt($('#tipo_impresion_id').val()) == 1 || parseInt($('#tipo_impresion_id').val()) == 3) ? 8 : 4; + input_data.paginas_impresion = parseInt($('#lp_guardas_paginas option:selected').val()); + } + else { + input_data.paginas = parseInt($('#' + linea + '_paginas').val()); + } + } + + + if (input_data.maquina_id == undefined || input_data.maquina_id == '') { + return; + } + if (linea != 'lp_guardas' && linea != 'lp_sobrecubierta' && linea != 'lp_faja') { + if (input_data.paginas == 0) + return; + } + + let uso = 'interior'; + switch (linea) { + case 'lp_cubierta': + uso = 'cubierta'; + break; + case 'lp_sobrecubierta': + uso = 'sobrecubierta'; + break; + case 'lp_guardas': + uso = 'guardas'; + break; + case 'lp_rot_bn': + case 'lp_rot_color': + uso = 'interior_rot'; + break; + } + + let color = 1; + if (linea == 'lp_bn' || linea == 'lp_bnhq' || linea == 'lp_rot_bn') { + color = 0; + } + let hq = 1; + if (linea == 'lp_bn' || linea == 'lp_color' || linea == 'lp_rot_bn' || linea == 'lp_rot_color') { + hq = 0; + } + + + var datos = { + tipo_impresion_id: $('#tipo_impresion_id').val(), + type: uso, + color: color, + hq: hq, + paginas: input_data.paginas, + tirada: parseInt($('#tirada').val()), + merma: parseInt($('#merma').val()), + ancho: dimension.ancho, + alto: dimension.alto, + papel_generico_id: input_data.papel_generico_id, + papel_generico: input_data.papel_generico, + gramaje: input_data.gramaje, + cliente_id: $('#clienteId').find(":selected").val(), + }; + + if (datos.ancho == 0 || datos.alto == 0 || datos.ancho == '' || datos.alto == '' || isNaN(datos.ancho) || isNaN(datos.alto)) { + return; + } + + if (linea.includes('rot')) { + if (fromComparador) { + datos.paginas_negro = parseInt($('#compPaginasNegro').val()) + datos.paginas_color = parseInt($('#compPaginasColor').val()) + } + else { + let paginas_color = isNaN(parseInt($('#lp_rot_color_numPagColor').val())) ? input_data.paginas : parseInt($('#lp_rot_color_numPagColor').val()) + datos.paginas_negro = input_data.paginas - paginas_color; + datos.paginas_color = paginas_color; + } + datos.a_favor_fibra = fromComparador == false ? ($('#lp_rot_color_aFavorFibra').prop('checked') ? 1 : 0) : 1; + } + else if (linea == 'lp_cubierta') { + datos.solapas = $('#solapas').is(':checked') ? 1 : 0; + datos.solapas_ancho = $('#solapas').is(':checked') ? parseInt($('#solapas_ancho').val()) : 0; + datos.lomo = $('#lomo_cubierta').val(); + } + else if (linea == 'lp_sobrecubierta') { + datos.solapas = $('#solapas_sobrecubierta').is(':checked') ? 1 : 0; + datos.solapas_ancho = $('#solapas_sobrecubierta').is(':checked') ? parseInt($('#solapas_ancho_sobrecubierta').val()) : 0; + datos.lomo = $('#lomo_sobrecubierta').val(); + } + else if (linea == 'lp_guardas') { + datos.paginas_impresion = input_data.paginas_impresion; + } + datos = Object.assign(datos, window.token_ajax); + + // Si es inkjet, existe este check + if ($('#' + linea + '_aFavorFibra').length) { + datos.a_favor_fibra = $('#' + linea + '_aFavorFibra').prop('checked') + } + + if (updatedTipologias && $('#' + linea + '_gotaNegro').length) { + datos.gota_negro = $('#' + linea + '_gotaNegro').val() + datos.gota_color = $('#' + linea + '_gotaColor').val() + datos.negro = $('#' + linea + '_cobNegro').val() + datos.cyan = $('#' + linea + '_cobCyan').val() + datos.magenta = $('#' + linea + '_cobMagenta').val() + datos.amarillo = $('#' + linea + '_cobAmarillo').val() + if ($('#' + linea + '_cobCG').length) { + datos.cg = $('#' + linea + '_cobCG').val() + } + } + + new Ajax('/presupuestoadmin/getlinea', + datos, + {}, + (response) => { + if (response.lineas.length > 0) { + + let borrar_linea = true; + // Si viene del comparador + if (Object.keys(input_data).length == 0) { + borrar_linea = false; + } + + for (let $i = 0; $i < response.lineas.length; $i++) { + + // Se cogen los valores de la linea con los datos correspondientes + if (response.lineas[$i].fields.maquina_id === input_data.maquina_id && + response.lineas[$i].fields.papel_generico_id === input_data.papel_generico_id && + response.lineas[$i].fields.papel_impresion_id === input_data.papel_impresion_id) { + + borrar_linea = false; + + // Si viene del comparador + if (Object.keys(input_data).length == 0) { + response.lineas[$i].fields.check_papel_total = $('#' + linea + '_checkPapel').is(":checked") ? 1 : 0 + response.lineas[$i].fields.check_impresion_total = $('#' + linea + '_checkClicks').is(":checked") ? 1 : 0 + + } + else { + response.lineas[$i].fields.check_papel_total = 1; + response.lineas[$i].fields.check_impresion_total = 1; + } + self.rellenarDatosLinea(linea, response.lineas[$i].fields); + + return false; + } + } + if (borrar_linea) { + self.table.row('#' + linea).remove().draw(); + } + } + else { + let pags = $("#" + linea + "_paginas").val() + $("." + linea + "-input").val("0") + $("#" + linea + "_paginas").val(pags) + + } + }, + (error) => { + console.error(error); + } + ).post(); + + } + + rellenarDatosLinea(linea, row, fromComparator = false) { + + + if (fromComparator) { + + var input_data = { + paginas: row.paginas, + papel_generico_id: row.papelGenericoId, + gramaje: row.gramaje, + papel_impresion_id: row.papelImpresionId, + maquina_id: row.maquinaId, + } + this.obtenerLinea(linea, fromComparator, false, input_data) + } + else { + // Se guarda el estado de "ver calculos" + const mostrar_calculos = ($(".calculos_" + linea).css('display') == 'table-row') + + // Si viene de hacerlo a mano... + let data = this.#processRowData(row, linea, linea.replace('_', '-')); + + let currentRow = this.table.row('#' + linea); + if (currentRow.length > 0) + this.table.row('#' + linea).data(data).draw() + else { + this.table.row.add(data).draw() + currentRow = this.table.row('#' + linea); + } + currentRow.child(this.formatRow(currentRow.data())).show(); + + this.#addEventosLineas(linea, data.maquinaTipo == 'inkjet' ? true : false); + + + $('#' + linea + '_checkPapel').trigger('change'); + + + /* TO-DO + calcular_mermas() + */ + + $(document).trigger('update-presupuesto', { + update_lineas : false, + update_servicios : true, + update_envios: true, + update_resumen: true, + update_tiradas_alternativas: true + }); + + + // Si existe cubierta, hay que actualizar con el valor del lomo + if (linea != 'lp_cubierta' && linea != 'lp_sobrecubierta' && this.table.row('#lp_cubierta').length > 0) { + this.obtenerLinea('lp_cubierta', false, false); + } + if (mostrar_calculos) { + $(".calculos_" + linea).css('display', 'table-row') + } + } + + this.table.columns.adjust(); + + } + + + #addEventosLineas(tipoLinea, isInkjet = false) { + + const self = this; + + let tipo = 'negro'; + let uso = 'interior'; + switch (tipoLinea) { + case 'lp_negrohq': + tipo = 'negrohq'; + break; + case 'lp_rot_color': + case 'lp_color': + tipo = 'color'; + break; + case 'lp_colorhq': + case 'lp_guardas': + case 'lp_cubierta': + case 'lp_sobrecubierta': + tipo = 'colorhq'; + break + default: + break; + } + + switch (tipoLinea) { + case 'lp_cubierta': + uso = 'cubierta'; + break; + case 'lp_sobrecubierta': + uso = 'sobrecubierta'; + break; + case 'lp_guardas': + uso = 'guardas'; + break; + case 'lp_rot_bn': + case 'lp_rot_color': + uso = 'rotativa'; + break; + default: + break; + } + + let select_papel = new ClassSelect($('#' + tipoLinea + '_papel'), + '/presupuestoadmin/papelgenerico', 'Seleccione papel', false, + { + [this.csrf_token]: this.csrf_hash, + tipo_impresion: () => $("#tipo_impresion_id").val(), + tirada: () => $('#tirada').val(), + tipo: tipo, + uso: uso, + }, $('body')); + select_papel.init(); + + + let select_gramaje = new ClassSelect($('#' + tipoLinea + '_gramaje'), + '/presupuestoadmin/papelgramaje', 'Seleccione gramaje', false, + { + [this.csrf_token]: this.csrf_hash, + papel_generico: () => select_papel.getVal(), + tipo_impresion: () => $("#tipo_impresion_id").val(), + tirada: () => $('#tirada').val(), + tipo: tipo, + uso: uso, + }, $('body')); + select_gramaje.init(); + + let papel_impresion = new ClassSelect($('#' + tipoLinea + '_papelImpresion'), + '/presupuestoadmin/papelimpresion', 'Seleccione papel', false, + { + [this.csrf_token]: this.csrf_hash, + papel_generico: () => select_papel.getVal(), + gramaje: () => select_gramaje.getVal(), + tipo_impresion: () => $("#tipo_impresion_id").val(), + tipo: tipo, + uso: uso, + }, $('body')); + papel_impresion.init(); + + let merma = uso == 'interior' ? $('#merma').val() : $('#mermacubierta').val(); + uso = ((uso == 'guardas') ? 'cubierta' : uso); + + let maquinas = new ClassSelect($('#' + tipoLinea + '_maquina'), + '/presupuestoadmin/maquinas', 'Seleccione maquina', false, + { + [this.csrf_token]: this.csrf_hash, + ancho: () => this.getDimensionLibro().ancho, + alto: () => this.getDimensionLibro().alto, + solapas: () => uso == 'cubierta' ? $('#solapas').prop('checked') : $('#solapas_sobrecubierta').prop('checked'), + solapas_ancho: () => uso == 'cubierta' ? $('#solapas_ancho').val() : $('#solapas_ancho_sobrecubierta').val(), + tirada: () => $('#tirada').val(), + merma: merma, + papel_impresion: () => papel_impresion.getVal(), + tipo_impresion: () => $("#tipo_impresion_id").val(), + tarifa_tipo: tipo, + uso_tarifa: uso == 'rotativa' ? 'interior' : uso, + is_rotativa: () => tipoLinea.includes('rot') ? 1 : 0, + lomo_redondo: () => (this.tipo_impresion_id == 1 || this.tipo_impresion_id == 3) ? $('#compLomoRedondo').val() : 0, + lomo: () => uso == 'sobrecubierta' ? this.getLomoCubierta() + this.getLomoInterior() : this.getLomoInterior(), + }, $('body')); + maquinas.init(); + + + $('#' + tipoLinea + '_papel').on("change", () => { + select_gramaje.reset(); + papel_impresion.reset(); + maquinas.reset(); + }); + $('#' + tipoLinea + '_gramaje').on('change', () => { + papel_impresion.reset(); + maquinas.reset(); + }); + $('#' + tipoLinea + '_papelImpresion').on("change", () => { maquinas.reset(); }); + + $('#' + tipoLinea + '_maquina').on("change", function (event) { + self.obtenerLinea(tipoLinea, false, false, {}, event); // Pasamos explícitamente 'tipoLinea' + }.bind(this)); + $('#' + tipoLinea + '_paginas').on("change", function (event) { + if (tipoLinea != 'lp_sobrecubierta') { + self.obtenerLinea(tipoLinea, false, false, {}, event); // Pasamos explícitamente 'tipoLinea' + } + }.bind(this)); + $('#' + tipoLinea + '_vercalculos').on("click", () => self.verCalculosInkjet(tipoLinea)); + + if (isInkjet) { + $('.' + tipoLinea.replace('_', '-') + '-tipologia').on("change", () => { this.change_tipologia(tipoLinea); }); + $('#' + tipoLinea + '_defecto').on("click", () => { this.lp_por_defecto(tipoLinea); }); + $('#' + tipoLinea + '_aFavorFibra').on("change", () => { this.change_aFavorFibra(tipoLinea); }); + } + } + + + verCalculosInkjet(linea) { + if ($(".calculos_" + linea).css('display') == 'none') + $(".calculos_" + linea).css('display', 'table-row') + else { + $(".calculos_" + linea).css('display', 'none') + } + } + + change_aFavorFibra(linea) { + + let paginas_ok = true; + + if (linea.includes('lp_bn') || linea.includes('lp_color') || linea.includes('lp_rot')) { + paginas_ok = parseInt($('#' + linea + '_paginas').val()) > 0; + } + + if (paginas_ok && + parseInt($('#' + linea + '_papel option:selected').val()) > 0 && + $('#' + linea + '_gramaje option:selected').text().length > 0 && + parseInt($('#' + linea + '_papelImpresion option:selected').val()) > 0 + ) { + var rowData = this.table.row('#' + linea).data() + rowData.aFavorFibra = $('#' + linea + '_aFavorFibra').prop('checked') + this.table.row('#' + linea).data(rowData).draw(false) + + this.obtenerLinea(linea, false, true); + } + } + + change_tipologia(linea) { + + let paginas_ok = true; + + if (linea.includes('lp_bn') || linea.includes('lp_color') || linea.includes('lp_rot')) { + paginas_ok = parseInt($('#' + linea + '_paginas').val()) > 0; + } + + if (paginas_ok && + parseInt($('#' + linea + '_papel option:selected').val()) > 0 && + $('#' + linea + '_gramaje option:selected').text().length > 0 && + parseInt($('#' + linea + '_papelImpresion option:selected').val()) > 0 + ) { + + this.obtenerLinea(linea, false, true, {}); + } + } + + + lp_por_defecto(linea) { + + let paginas_ok = true; + + if (linea.includes('lp_bn') || linea.includes('lp_color') || linea.includes('lp_rot')) { + paginas_ok = parseInt($('#' + linea + '_paginas').val()) > 0; + } + + if (paginas_ok && + parseInt($('#' + linea + '_papel option:selected').val()) > 0 && + $('#' + linea + '_gramaje option:selected').text().length > 0 && + parseInt($('#' + linea + '_papelImpresion option:selected').val()) > 0 + ) { + + this.obtenerLinea(linea); + } + } + + #insertarLineaComparador(e) { + + const self = this; + + if (e.target.id.includes("Plana") || e.target.id.includes("Rotativa")) { + + for (let i = self.table.rows().data().length - 1; i >= 0; i--) { + let row = self.table.row(i).data(); + + if (row.row_id.includes('lp_bn') || row.row_id.includes('lp_color') || row.row_id.includes('lp_rot')) { + self.table.row(i).remove(); + } + } + self.table.draw(); + + + if (e.target.id.includes("Plana")) { + + var rows = $("#tableCompIntPlana").DataTable().rows('.selected').data().toArray(); + + for (const row of rows) { + if (row['tipo'] == 'bn') { + this.rellenarDatosLinea('lp_bn', row, true); + } + else if (row['tipo'] == 'bnhq') { + this.rellenarDatosLinea('lp_bnhq', row, true); + } + else if (row['tipo'] == 'color') { + this.rellenarDatosLinea('lp_color', row, true); + } + else if (row['tipo'] == 'colorhq') { + this.rellenarDatosLinea('lp_colorhq', row, true); + } + } + } + if (e.target.id.includes("Rotativa")) { + + var rows = $("#tableCompIntRotativa").DataTable().rows('.selected').data().toArray(); + for (const row of rows) { + if (row['paginasColor'] == 0) { + this.rellenarDatosLinea('lp_rot_bn', row, true); + } + else if (row['paginasColor'] > 0) { + this.rellenarDatosLinea('lp_rot_color', row, true); + } + } + } + } + + if (e.target.id.includes("Cubierta")) { + + for (let i = self.table.rows().data().length - 1; i >= 0; i--) { + let row = self.table.row(i).data(); // Obtener datos de la fila actual + + if (row.row_id.includes('lp_cubierta') || row.row_id.includes('lp_sobrecubierta')) { + self.table.row(i).remove(); // Eliminar fila + } + } + self.table.draw(); + + + var rows = $("#tableCompCubierta").DataTable().rows('.selected').data().toArray(); + for (const row of rows) { + if (row.tipo == 'cubierta') { + this.rellenarDatosLinea('lp_cubierta', row, true); + + if ($('#acabado_cubierta_id').val() > 0) + $(document).trigger('add-servicio-lineas', 'acabadoCubierta'); + + } + if (row.tipo == 'sobrecubierta') { + this.rellenarDatosLinea('lp_sobrecubierta', row, true); + if ($('#acabado_sobrecubierta_id').val() > 0) + $(document).trigger('add-servicio-lineas', 'acabadoSobrecubierta'); + } + } + } + + if (e.target.id.includes("Guardas")) { + + self.table.rows().data().toArray().forEach((row, index) => { + const rowIdx = self.table.row(index).index(); // Obtener el índice actual de la fila + if (row.row_id.includes('lp_guardas')) { + self.table.row(rowIdx).remove(); // Eliminar fila por índice + } + }); + self.table.draw(); + + var rows = $("#tableCompGuardas").DataTable().rows('.selected').data().toArray(); + for (const row of rows) { + this.rellenarDatosLinea('lp_guardas', row, true); + } + /* TO-DO + servicioGuardas(true) + */ + } + + + $(document).trigger('update-presupuesto', { + update_lineas : false, + update_servicios : true, + update_envios: true, + update_resumen: true, + update_tiradas_alternativas: true + }); + } +} + +export default LineasPresupuesto; \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/previewFormasAdmin.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/previewFormasAdmin.js new file mode 100644 index 00000000..f5b735af --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/previewFormasAdmin.js @@ -0,0 +1,86 @@ +import preview from '../../../components/preview.js'; + +class PreviewFormasAdmin{ + + constructor(tipoLibro, tipoTapa, data){ + + this.data = data; + this.isCosido = $("#isCosido").val(); + this.tipoTapa = tipoTapa; + + // Container para el esquema de cubierta + this.preview = new preview($('#pv_ec_shape'), tipoLibro, tipoTapa, "fullImage", data); + } + + setData(data){ + this.data = data; + } + + init(){ + + const self = this; + + $('#tab-pv-bn').on( "click", function() { + self.preview.setData(self.data); + self.preview.previewInteriorPlana('bn', self.isCosido, self.tipoTapa.includes("dura")?1:0); + } ); + + $('#tab-pv-bnhq').on( "click", function() { + self.preview.setData(self.data); + self.preview.previewInteriorPlana('bnhq', self.isCosido, self.tipoTapa.includes("dura")?1:0); + } ); + + $('#tab-pv-color').on( "click", function() { + self.preview.setData(self.data); + self.preview.previewInteriorPlana('color', self.isCosido, self.tipoTapa.includes("dura")?1:0); + } ); + + $('#tab-pv-colorhq').on( "click", function() { + self.preview.setData(self.data); + self.preview.previewInteriorPlana('colorhq', self.isCosido, self.tipoTapa.includes("dura")?1:0); + } ); + + $('#tab-pv-rot-bn').on( "click", function() { + self.preview.setData(self.data); + self.preview.previewRotativa('rot_bn', self.isCosido, self.tipoTapa.includes("dura")?1:0); + + } ); + + $('#tab-pv-rot-color').on( "click", function() { + + self.preview.setData(self.data); + self.preview.previewRotativa('rot_color', self.isCosido, self.tipoTapa.constains("dura")?1:0); + + } ); + + $('#tab-pv-guardas').on( "click", function() { + + self.preview.setData(self.data); + self.preview.previewInteriorPlana('guardas', self.isCosido, self.tipoTapa.includes("dura")?1:0); + } ); + + $('#tab-pv-cubierta').on( "click", function() { + + self.preview.setData(self.data); + self.preview.previewInteriorPlana('cubierta', self.isCosido, self.tipoTapa.includes("dura")?1:0); + + } ); + + $('#tab-pv-esquema-cubierta').on( "click", function() { + + self.preview.setData(self.data); + self.preview.getObjetoLP('ec', self.isCosido, self.tipoTapa.includes("dura")?1:0); + self.preview.previewEsquemaCubierta('ec', self.isCosido, self.tipoTapa.includes("dura")?1:0); + + } ); + + $('#tab-pv-sobrecubierta').on( "click", function() { + + self.preview.setData(self.data); + self.preview.previewInteriorPlana('sobrecubierta', self.isCosido, self.tipoTapa.includes("dura")?1:0); + + } ); + } +} + +export default PreviewFormasAdmin; \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js new file mode 100644 index 00000000..b76dc98e --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/resumen.js @@ -0,0 +1,351 @@ +class Resumen { + + constructor() { + + } + + init() { + + const self = this; + + $(".update-totales").on("change", function () { + self.updateTotales(true, true, true) + }); + + $(document).on('update-totales', async function () { + await self.updateTotales(); + $(document).trigger('update-totales-completed'); + }); + } + + cargar(resumen) { + + // Mapear los valores a los elementos HTML por ID + $("#totalCostePapel").text(resumen.total_coste_papel + "€" || "0€"); + $("#porcentajeMargenPapel").text(resumen.total_margenPercent_papel ? resumen.total_margenPercent_papel + "%" : "0%"); + $("#margenPapel").text(resumen.total_margen_papel + "€" || "0€"); + + $("#totalCosteImpresion").text(resumen.total_coste_impresion + "€" || "0€"); + $("#porcentajeMargenImpresion").text(resumen.total_margenPercent_impresion ? resumen.total_margenPercent_impresion + "%" : "0%"); + $("#margenImpresion").text(resumen.total_margen_impresion + "€" || "0€"); + + $("#totalServicios").text(resumen.total_coste_servicios + "€" || "0€"); + $("#porcentajeMargenServicios").text(resumen.total_margenPercent_servicios ? resumen.total_margenPercent_servicios + "%" : "0%"); + $("#margenServicios").text(resumen.total_margen_servicios + "€" || "0€"); + + //$("#costeEnvios").text(resumen.total_coste_envios + "€" || "0€"); + $("#totalEnvios").text(resumen.total_coste_envios + "€" || "0€"); + $("#margenEnvios").text(resumen.total_margen_envios + "€" || "0€"); + + $("#totalCostes").text(resumen.total_costes + "€" || "0€"); + $("#porcentajeMargen").text(resumen.porcentajeMargen ? resumen.porcentajeMargen + "%" : "0%"); + $("#totalMargenes").text(resumen.total_margenes + "€" || "0€"); + + $("#totalAntesDescuento").text(resumen.total_antes_descuento + "€" || "0€"); + $("#total_descuentoPercent").val(resumen.total_descuentoPercent || "0"); + $("#descuentoTotal").text(resumen.total_descuento + "€" || "0€"); + $("#totalDespuesDecuento").text(resumen.total_presupuesto + "€" || "0€"); + $("#precioUnidadPresupuesto").text(resumen.total_precio_unidad + "€" || "0€"); + $("#factor").text(resumen.total_factor || "0"); + $("#factor_ponderado").text(resumen.total_factor_ponderado || "0"); + + if (resumen.total_aceptado !== undefined) { + $("#totalAceptado").val(resumen.total_aceptado + "€" || "0€"); + } + + } + + update() { + + + } + + // Formatear agregando separadores de miles + addSeparatorsNF(nStr, inD, outD, sep) { + nStr += ''; + let dpos = nStr.indexOf(inD); + let nStrEnd = ''; + if (dpos != -1) { + nStrEnd = outD + nStr.substring(dpos + 1, nStr.length); + nStr = nStr.substring(0, dpos); + } + let rgx = /(\d+)(\d{3})/; + while (rgx.test(nStr)) { + nStr = nStr.replace(rgx, '$1' + sep + '$2'); + } + return nStr + nStrEnd; + } + + + async updateTotales(event, data = {}) { + + let updateLP = data.updateLP || true; + let updateServicios = data.updateServicios || true; + let updateEnvio = data.updateEnvio || true; + let totalPapel = 0; + let margenPapel = 0; + + let totalImpresion = 0; + let totalImpresionforMargen = 0; + let margenImpresion = 0; + + let totalServicios = 0; + let margenServicios = 0; + + let totalEnvios = 0; + let margenEnvios = 0; + + let sumForFactor = 0.0; + let sumForFactorPonderado = 0.0; + + + let margenPorHoras = 0.0; + + if (updateLP) { + + if (typeof $("#tableLineasPresupuesto").DataTable() !== 'undefined') { + $("#tableLineasPresupuesto").DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + let rowData = this.data(); + + if (rowData.check_papel_total) { + totalPapel += parseFloat($('#' + rowData.row_id + '_totalPapelPedido').val()) + margenPapel += parseFloat($('#' + rowData.row_id + '_margenPapelPedido').val()) + + sumForFactor += parseFloat($('#' + rowData.row_id + '_totalPapelPedido').val()) + sumForFactor -= parseFloat($('#' + rowData.row_id + '_margenPapelPedido').val()) + + } + if (rowData.check_impresion_total) { + //totalImpresion += parseFloat($('#' + rowData.row_id + '_precioImpresion').val()) + margenPorHoras += parseFloat($('#' + rowData.row_id + '_precioImpresion').val()) + totalImpresion += parseFloat($('#' + rowData.row_id + '_totalClicks').val()) + + sumForFactor += parseFloat($('#' + rowData.row_id + '_totalClicks').val()) + + if (rowData.maquinaTipo == 'inkjet') { + totalImpresion += parseFloat(rowData.totalTinta) + totalImpresion += parseFloat(rowData.totalCorte) + + sumForFactor += (parseFloat(rowData.totalTinta) + parseFloat(rowData.totalCorte)) + } + //margenImpresion += parseFloat($('#' + rowData.row_id + '_margenImpresion').val()) + //margenPorHoras += parseFloat($('#' + rowData.row_id + '_margenImpresion').val()) + margenImpresion += parseFloat($('#' + rowData.row_id + '_margenClicks').val()) + + + sumForFactor -= parseFloat($('#' + rowData.row_id + '_margenClicks').val()) + + if (!isNaN(parseFloat($('#' + rowData.row_id + 'lp_bn_totalTinta').val()))) { + totalImpresion += parseFloat($('#' + rowData.row_id + 'lp_bn_totalTinta').val()) + sumForFactor += parseFloat($('#' + rowData.row_id + 'lp_bn_totalTinta').val()) + } + } + }) + } + + totalImpresion -= parseFloat(margenImpresion); + totalPapel -= parseFloat(margenPapel); + + margenImpresion += parseFloat(margenPorHoras); + + let porcentajeMargenPapel = isNaN(margenPapel / (totalPapel) * 100.0) ? 0 : margenPapel / (totalPapel) * 100.0 + $('#porcentajeMargenPapel').text(porcentajeMargenPapel.toFixed(0) + '%') + $('#totalCostePapel').text((this.addSeparatorsNF(totalPapel.toFixed(2), ".", ",", ".")) + "€") + $('#margenPapel').text((this.addSeparatorsNF(margenPapel.toFixed(2), ".", ",", ".")) + "€") + $('#totalCostePapel').attr('val', totalPapel.toFixed(2)) + $('#margenPapel').attr('val', margenPapel.toFixed(2)) + + let porcentajeMargenImpresion = isNaN(margenImpresion / (totalImpresion) * 100.0) ? 0 : margenImpresion / (totalImpresion) * 100.0 + $('#porcentajeMargenImpresion').text(porcentajeMargenImpresion.toFixed(0) + '%') + $('#totalCosteImpresion').text((this.addSeparatorsNF(totalImpresion.toFixed(2), ".", ",", ".")) + "€") + $('#margenImpresion').text((this.addSeparatorsNF(margenImpresion.toFixed(2), ".", ",", ".")) + "€") + $('#totalCosteImpresion').attr('val', totalImpresion.toFixed(2)) + $('#margenImpresion').attr('val', margenImpresion.toFixed(2)) + + } + else { + totalPapel = parseFloat($('#totalCostePapel').attr('val')) + margenPapel = parseFloat($('#margenPapel').attr('val')) + totalImpresion = parseFloat($('#totalCosteImpresion').attr('val')) + margenImpresion = parseFloat($('#margenImpresion').attr('val')) + } + + sumForFactorPonderado = sumForFactor; + + if (updateServicios) { + + if (typeof $("#tableOfServiciosEncuadernacion").DataTable() !== 'undefined' && $("#tableOfServiciosEncuadernacion").DataTable().rows().count() > 0) { + $('#tableOfServiciosEncuadernacion').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + let rowData = this.data(); + let total_servicio = parseFloat(rowData.precio_total); + let margen_servicio = parseFloat(rowData.margen); + totalServicios += total_servicio + let base = total_servicio / (1 + margen_servicio / 100.0); + margenServicios = total_servicio - base; + }); + } + + if (typeof $("#tableOfServiciosAcabado").DataTable() !== 'undefined' && $("#tableOfServiciosAcabado").DataTable().rows().count() > 0) { + $('#tableOfServiciosAcabado').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + let rowData = this.data(); + let total_servicio = parseFloat(rowData.precio_total); + let margen_servicio = parseFloat(rowData.margen); + totalServicios += total_servicio + let base = total_servicio / (1 + margen_servicio / 100.0); + margenServicios = total_servicio - base; + }); + } + + if (typeof $("#tableOfServiciosPreimpresion").DataTable() !== 'undefined' && $("#tableOfServiciosPreimpresion").DataTable().rows().count() > 0) { + $('#tableOfServiciosPreimpresion').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + let rowData = this.data(); + let total_servicio = parseFloat(rowData.precio); + let coste_servicio = parseFloat(rowData.coste); + totalServicios += total_servicio + margenServicios = total_servicio - coste_servicio; + }); + } + + if (typeof $("#tableOfServiciosExtra").DataTable() !== 'undefined' && $("#tableOfServiciosExtra").DataTable().rows().count() > 0) { + $('#tableOfServiciosExtra').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + let rowData = this.data(); + let total_servicio = parseFloat(rowData.precio); + let coste_servicio = parseFloat(rowData.coste); + totalServicios += total_servicio + margenServicios = total_servicio - coste_servicio; + }); + } + + if (typeof $("#tableOfServiciosManipulado").DataTable() !== 'undefined' && $("#tableOfServiciosManipulado").DataTable().rows().count() > 0) { + $('#tableOfServiciosManipulado').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + let rowData = this.data(); + let total_servicio = parseFloat(rowData.precio_total); + let margen_servicio = parseFloat(rowData.margen); + totalServicios += total_servicio + let base = total_servicio / (1 + margen_servicio / 100.0); + margenServicios = total_servicio - base; + }); + } + + totalServicios -= margenServicios; + + sumForFactorPonderado += totalServicios; + + let porcentajeMargenServicios = margenServicios / (totalServicios) * 100 + $('#porcentajeMargenServicios').text(isNaN(porcentajeMargenServicios.toFixed(0)) ? 0 : porcentajeMargenServicios.toFixed(0) + '%') + $('#totalServicios').text((this.addSeparatorsNF(totalServicios.toFixed(2), ".", ",", ".")) + "€") + $('#margenServicios').text((this.addSeparatorsNF(margenServicios.toFixed(2), ".", ",", ".")) + "€") + $('#totalServicios').attr('val', totalServicios.toFixed(2) + '€') + $('#margenServicios').attr('val', margenServicios.toFixed(2) + '€') + + } + else { + + totalServicios = parseFloat($('#totalServicios').attr('val')) + margenServicios = parseFloat($('#margenServicios').attr('val')) + + sumForFactorPonderado += totalServicios; + } + + if (updateEnvio) { + + totalEnvios = parseFloat($('#envio_base').val()); + if (typeof $('#tableOfDireccionesEnvio').DataTable() !== 'undefined' && $('#tableOfDireccionesEnvio').DataTable().rows().count() > 0) { + $('#tableOfDireccionesEnvio').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + if (rowIdx == 0) { + return; + } + let data = this.data() + totalEnvios += parseFloat(data.precio) + margenEnvios += parseFloat((data.precio) * data.margen / 100) + }); + } + + totalEnvios -= margenEnvios + $('#totalEnvios').text((this.addSeparatorsNF(totalEnvios.toFixed(2), ".", ",", ".")) + "€") + $('#margenEnvios').text((this.addSeparatorsNF(margenEnvios.toFixed(2), ".", ",", ".")) + "€") + $('#totalEnvios').attr('val', totalEnvios.toFixed(2) + '€') + $('#margenEnvios').attr('val', margenEnvios.toFixed(2) + '€') + } + else { + totalEnvios = parseFloat($('#totalEnvios').attr('val')) + margenEnvios = parseFloat($('#margenEnvios').attr('val')) + } + + let totalCostes = parseFloat(totalPapel.toFixed(2)) + parseFloat(totalImpresion.toFixed(2)) + parseFloat(totalServicios.toFixed(2)) + parseFloat(totalEnvios.toFixed(2)) + let totalMargenes = parseFloat(margenPapel.toFixed(2)) + parseFloat(margenImpresion.toFixed(2)) + parseFloat(margenServicios.toFixed(2)) + parseFloat(margenEnvios.toFixed(2)) + let porcentajeMargen = totalCostes + totalMargenes > 0 ? (100 * totalMargenes / (totalCostes + totalMargenes)).toFixed(0) : 0 + $('#totalCostes').text((this.addSeparatorsNF(totalCostes.toFixed(2), ".", ",", ".")) + "€") + $('#totalMargenes').text((this.addSeparatorsNF(totalMargenes.toFixed(2), ".", ",", ".")) + "€") + $('#totalCostes').attr('val', (totalCostes).toFixed(2) + '€') + $('#totalMargenes').attr('val', (totalMargenes).toFixed(2) + '€') + $('#porcentajeMargen').text(porcentajeMargen + '%') + $('#porcentajeMargen').attr('val', porcentajeMargen) + + if ($('#total_descuentoPercent').val() < 0) { + $('#total_descuentoPercent').val(0) + } + let totalAntesDescuento = totalCostes + totalMargenes + let totalDescuento = totalAntesDescuento * parseInt($('#total_descuentoPercent').val() || 0) / 100 + let totalPresupuesto = totalAntesDescuento - totalDescuento + let precioUnidad = totalPresupuesto / parseInt($('#tirada').val()) + + $('#totalAntesDescuento').text((this.addSeparatorsNF(totalAntesDescuento.toFixed(2), ".", ",", ".")) + "€") + $('#descuentoTotal').text((this.addSeparatorsNF(totalDescuento.toFixed(2), ".", ",", ".")) + "€") + $('#totalDespuesDecuento').text((this.addSeparatorsNF(totalPresupuesto.toFixed(2), ".", ",", ".")) + "€") + $('#precioUnidadPresupuesto').text((this.addSeparatorsNF(precioUnidad.toFixed(4), ".", ",", ".")) + "€") + $('#totalAntesDescuento').attr('val', (totalAntesDescuento).toFixed(2)) + $('#descuentoTotal').attr('val', (totalDescuento).toFixed(2)) + $('#totalDespuesDecuento').attr('val', (totalPresupuesto).toFixed(2)) + $('#precioUnidadPresupuesto').attr('val', (precioUnidad).toFixed(4)) + + + $('#factor').text(this.addSeparatorsNF(((totalPresupuesto - totalEnvios - margenEnvios) / sumForFactor).toFixed(2), ".", ",", ".")) + $('#factor').attr('val', ((totalPresupuesto - totalEnvios - margenEnvios) / sumForFactor).toFixed(2)) + $('#factor_ponderado').text(this.addSeparatorsNF(((totalPresupuesto - totalEnvios - margenEnvios) / sumForFactorPonderado).toFixed(2), ".", ",", ".")) + $('#factor_ponderado').attr('val', ((totalPresupuesto - totalEnvios - margenEnvios) / sumForFactorPonderado).toFixed(2)) + + } + + + getData(){ + + let data = { + 'total_coste_papel': $('#totalCostePapel').attr('val').replace('€', ''), + 'total_margen_papel': $('#margenPapel').attr('val').replace('€', ''), + 'total_margenPercent_papel': $('#porcentajeMargenPapel').text().replace('%', ''), + + 'total_coste_impresion': $('#totalCosteImpresion').attr('val').replace('€', ''), + 'total_margen_impresion': $('#margenImpresion').attr('val').replace('€', ''), + 'total_margenPercent_impresion': $('#porcentajeMargenImpresion').text().replace('%', ''), + + 'total_coste_servicios': $('#totalServicios').attr('val').replace('€', ''), + 'total_margen_servicios': $('#margenServicios').attr('val').replace('€', ''), + 'total_margenPercent_servicios': $('#porcentajeMargenServicios').text().replace('%', ''), + + 'total_coste_envios': $('#totalEnvios').attr('val').replace('€', ''), + 'total_margen_envios': $('#margenEnvios').attr('val').replace('€', ''), + + 'total_costes': $('#totalCostes').attr('val').replace('€', ''), + 'total_margenes': $('#totalMargenes').attr('val').replace('€', ''), + + 'total_antes_descuento': $('#totalAntesDescuento').attr('val').replace('€', ''), + 'total_descuento': $('#descuentoTotal').attr('val').replace('€', ''), + 'total_descuentoPercent': $('#total_descuentoPercent').val().replace('€', ''), + 'total_presupuesto': $('#totalDespuesDecuento').attr('val').replace('€', ''), + 'total_precio_unidad': $('#precioUnidadPresupuesto').attr('val').replace('€', ''), + + 'total_factor': $('#factor').text().replace(/,/g, '.'), + 'total_factor_ponderado': $('#factor_ponderado').text().replace(/,/g, '.'), + }; + + if($('#confirmar_presupuesto').prop('checked')){ + data.confirmar = '1'; + data.total_aceptado = $('#totalDespuesDecuento').attr('val').replace('€', ''); + } + + return data; + } +} + +export default Resumen; \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/servicios.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/servicios.js new file mode 100644 index 00000000..9e67db07 --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/servicios.js @@ -0,0 +1,1594 @@ +import Ajax from "../../../components/ajax.js"; +import { getToken } from "../../../common/common.js"; +import ClassSelect from "../../../components/select2.js"; + +class Servicios { + + constructor() { + + this.csrf_token = getToken(); + this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val(); + + this.serviciosAcabado = new ServiciosAcabado(this.csrf_token, this.csrf_hash); + this.serviciosPreimpresion = new ServiciosPreimpresion(this.csrf_token, this.csrf_hash); + this.ServiciosEncuadernacion = new ServiciosEncuadernacion(this.csrf_token, this.csrf_hash); + this.ServiciosManipulado = new ServiciosManipulado(this.csrf_token, this.csrf_hash); + this.serviciosExtra = new ServiciosExtra(this.csrf_token, this.csrf_hash); + + this.serviciosDefecto = $('#serv_default'); + } + + init() { + + const self = this; + + this.serviciosAcabado.init(); + this.serviciosPreimpresion.init(); + this.ServiciosEncuadernacion.init(); + this.ServiciosManipulado.init(); + this.serviciosExtra.init(); + + this.serviciosDefecto.on('click', function () { + + $('#loader').modal('show'); + try { + self.ServiciosEncuadernacion.getServiciosDefecto().then(function (response) { + self.ServiciosManipulado.getServiciosDefecto().then(function (response) { + $('#loader').modal('hide'); + }); + }); + } + catch (error) { + console.log(error); + $('#loader').modal('hide'); + } + }); + + $('.nav-servicios button').on('shown.bs.tab', function () { + $("#tableOfServiciosAcabado").DataTable().columns.adjust(); + $("#tableOfServiciosPreimpresion").DataTable().columns.adjust(); + $("#tableOfServiciosEncuadernacion").DataTable().columns.adjust(); + $("#tableOfServiciosManipulado").DataTable().columns.adjust(); + $("#tableOfServiciosExtra").DataTable().columns.adjust(); + }) + + $(document).on('add-servicio-lineas', this.addServicio.bind(this)); + $(document).on('remove-servicio-lineas', this.removeServicio.bind(this)); + + + + $(document).on('change', '.update-totales-servicios', function () { + + const row = $(this).closest('tr'); + const table = $(this).closest('table').DataTable(); + + if (!row.length || !table) return; + + const data = table.row(row).data(); + data.precio_total = parseFloat($(this).val().replace(',', '.')); + table.row(row).data(data).draw(); + + showBreadCrumbSaveButton(true); + }); + + $(document).on('update-servicios', async function(){ + await self.updateServicios() + + $(document).trigger('update-servicios-completed'); + }); + } + + cargar(datos) { + + if (datos.serviciosAcabado.length > 0) + this.serviciosAcabado.cargarServiciosAcabado(datos.serviciosAcabado); + if (datos.serviciosPreimpresion.length > 0) + this.serviciosPreimpresion.cargarServiciosPreimpresion(datos.serviciosPreimpresion); + if (datos.serviciosEncuadernacion.length > 0) + this.ServiciosEncuadernacion.cargarServiciosEncuadernacion(datos.serviciosEncuadernacion); + if (datos.serviciosManipulado.length > 0) + this.ServiciosManipulado.cargarServiciosManipulado(datos.serviciosManipulado); + if (datos.serviciosExtra.length > 0) + this.serviciosExtra.cargarServiciosExtra(datos.serviciosExtra); + + } + + async guardar(){ + await this.serviciosAcabado.guardarServiciosAcabado(); + await this.serviciosPreimpresion.guardarServiciosPreimpresion(); + await this.ServiciosEncuadernacion.guardarServiciosEncuadernacion(); + await this.ServiciosManipulado.guardarServiciosManipulado(); + await this.serviciosExtra.guardarServiciosExtra(); + } + + + addServicio(event, servicio) { + + if (servicio == 'acabadoCubierta') { + this.serviciosAcabado.updateAcabadosExteriores(1, 0); + } + else if (servicio == 'acabadoSobrecubierta') { + this.serviciosAcabado.updateAcabadosExteriores(0, 1); + } + else if (servicio == 'solapas') { + this.ServiciosManipulado.addSolapas(); + } + + + } + + removeServicio(event, servicio) { + if (servicio == 'solapas') { + this.ServiciosManipulado.removeSolapas(); + } + } + + async updateServicios() { + + this.serviciosAcabado.updateServicios(); + this.ServiciosEncuadernacion.updateServicios(); + this.ServiciosManipulado.updateServicios(); + } +} + +class ServiciosAcabado { + + constructor(token, hash) { + + this.csrf_token = token; + this.csrf_hash = hash; + + this.table = null; + + this.selectorServicios = new ClassSelect($('#add_servicio_acabado_list'), '/tarifas/acabados/gettarifas', window.language.Presupuestos.servicioAcabadoList, false, {}); + this.addServicio = $('#insertar_serv_acabado'); + } + + init() { + + const self = this; + + this.selectorServicios.init(); + + this.table = new DataTable('#tableOfServiciosAcabado', { + scrollX: true, + searching: false, + paging: false, + info: false, + ordering: false, + responsive: true, + select: false, + language: { + url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + columns: [ + { data: 'tarifa_id' }, + { + data: 'nombre', render: function (data, type, row) { + if (row.cubierta == 1) { + return row.nombre + ' (' + window.language.Presupuestos.cubierta + ')'; + } + else if (row.sobrecubierta == 1) { + return row.nombre + ' (' + window.language.Presupuestos.sobrecubierta + ')'; + } + else { + return row.nombre; + } + } + }, + { + data: 'proveedor', render: function (data, type, row) { + return ` + + `; + } + }, + { + data: 'precio_unidad', render: function (data, type, row) { + let precio_unidad_coste = (row.precio_unidad / (1 + row.margen / 100)).toFixed(2); + precio_unidad_coste = parseFloat(precio_unidad_coste).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + const precio_unidad = parseFloat(row.precio_unidad).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + return precio_unidad_coste + '/' + precio_unidad; + } + }, + { + data: 'precio_total', render: function (data, type, row) { + const total = parseFloat(data).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + return ` + `; + } + }, + { data: 'margen' }, + { data: 'cubierta', visible: false }, + { data: 'sobrecubierta', visible: false }, + { + data: function (row) { + return ` + + `; + } + } + ], + + drawCallback: function (settings) { + + $('.proveedor_acabado').select2({ + allowClear: false, + minimumResultsForSearch: -1, + ajax: { + url: '/serviciosacabados/menuitems', + type: 'post', + dataType: 'json', + + data: function (params) { + + if (parseInt($('#tirada').val()) > 0) { + var tirada = parseInt($('#tirada').val()) + } + else { + var tirada = 0 + } + + var row = self.table.row($(this).closest('tr')).data(); + var return_data = { + tarifa_id: row.tarifa_id, + tirada: tirada, + }; + return_data = Object.assign(return_data, window.token_ajax); + + return return_data; + }, + delay: 60, + processResults: function (response) { + yeniden(response[window.csrf_token]); + return { + results: response.menu + }; + }, + cache: true + } + }); + + $('.proveedor_acabado').on('select2:close', function () { + self.getPresupuestoAcabado(null, null, $(this)); + }) + + self.check_serv_acabado_error(); + + $(document).trigger('update-presupuesto', { + update_lineas : false, + update_servicios : false, + update_envios: false, + update_resumen: true, + update_tiradas_alternativas: true + }); + } + }); + + + $(document).on('click', '.btn-delete-servacabados', function () { + const rowId = $(this).closest('td').parent()[0].sectionRowIndex; + self.table.row(rowId).remove().draw(); + }); + + + + this.addServicio.on('click', this.addServicioAcabado.bind(this)); + } + + updateServicios() { + + const self = this; + + const id = window.location.href.split('/').pop(); + const tarifa_ids = this.table.rows().data().toArray().map(row => row.tarifa_id); + const proveedor_ids = this.table.rows().data().toArray().map(row => row.proveedor_id); + const cubiertas = this.table.rows().data().toArray().map(row => row.cubierta); + const sobrecubiertas = this.table.rows().data().toArray().map(row => row.sobrecubierta); + // emparejar los tarifa_ids con los proveedor_ids + let tarifa_data = []; + for (let i = 0; i < tarifa_ids.length; i++) { + tarifa_data.push({ tarifa_id: tarifa_ids[i], proveedor_id: proveedor_ids[i], cubierta: cubiertas[i], sobrecubierta: sobrecubiertas[i] }); + } + + let tirada = 0; + if (parseInt($('#tirada').val()) > 0) { + tirada = parseInt($('#tirada').val()) + } + if (tarifa_ids.length > 0 && tirada > 0) { + const data = { + datos: tarifa_data, + tirada: tirada + }; + new Ajax('/serviciosacabados/update/' + id, data, {}, + function (response) { + if (response.lineas) { + self.table.clear().draw(); + self.table.rows.add(response.lineas).draw(); + } + }, + function (error) { + console.error(error); + } + ).post(); + } + + } + + updateAcabadosExteriores(cubierta, sobrecubierta) { + + this.table.rows().every(function () { + var data = this.data(); + if (data.cubierta == cubierta && data.sobrecubierta == sobrecubierta) { + + this.remove().draw(); + } + }); + + let tarifa_id = 0; + if (cubierta == 1) { + tarifa_id = $('#acabado_cubierta_id').val(); + } + else if (sobrecubierta == 1) { + tarifa_id = $('#acabado_sobrecubierta_id').val(); + } + + this.getPresupuestoAcabado(tarifa_id, cubierta == 1 ? 'cubierta' : 'sobrecubierta', null); + } + + getPresupuestoAcabado(tarifa_id = -1, uso = null, updateSelect = null) { + + const self = this; + + let tirada = 0 + if (parseInt($('#tirada').val()) > 0) { + tirada = parseInt($('#tirada').val()) + } + let datos = { + tirada: tirada, + }; + + if (updateSelect != null) { + datos.tarifa_acabado_id = self.table.row(updateSelect.closest('tr')).data().tarifa_id; + datos.proveedor_id = parseInt(updateSelect.val()) + } + else { + datos.tarifa_acabado_id = tarifa_id; + } + + if (datos.tarifa_acabado_id > 0) { + new Ajax('/serviciosacabados/getvalues', datos, {}, + function (response) { + if (response.values) { + response.values[0].cubierta = 0; + response.values[0].sobrecubierta = 0; + if (uso == 'cubierta') { + response.values[0].cubierta = 1; + } + else if (uso == 'sobrecubierta') { + response.values[0].sobrecubierta = 1; + } + if (updateSelect != null) { + + self.table.row(updateSelect.closest('tr')).data(response.values[0]).draw(); + } + else { + self.table.rows.add([response.values[0]]).draw(); + } + } + }, + function (error) { + console.error(error); + } + ).post(); + } + } + + addServicioAcabado() { + + const tarifa_text = this.selectorServicios.getText(); + + if (tarifa_text.length > 0) { + + var rows = this.table.rows().data().toArray(); + var found = rows.some(row => { + const renderedText = row.nombre; + if (row.cubierta == 1) { + return renderedText === tarifa_text + ' (' + window.language.Presupuestos.cubierta + ')'; + } else if (row.sobrecubierta == 1) { + return renderedText === tarifa_text + ' (' + window.language.Presupuestos.sobrecubierta + ')'; + } else { + return renderedText === tarifa_text; + } + }); + + if (!found) + this.getPresupuestoAcabado(this.selectorServicios.getVal()); + else + popErrorAlert(window.language.Presupuestos.errores.error_servicios_duplicados, 'serv-acabado-alert'); + } + + this.check_serv_acabado_error(); + + showBreadCrumbSaveButton(true); + + } + + + cargarServiciosAcabado(datos) { + + this.table.rows.add(datos).draw(); + } + + + async guardarServiciosAcabado() { + + let datos = []; + this.table.rows().every(function () { + datos.push(this.data()); + }); + const domain = window.location.origin; + const id = window.location.href.split('/').pop(); + await fetch(domain + "/presupuestos/presupuestoacabados/edit/" + id , { + method: "POST", + body: JSON.stringify({datos: datos}), + headers: { + "Content-type": "application/json; charset=UTF-8" + } + }) + } + + + + + check_serv_acabado_error() { + + var htmlString = ''; + var error = false; + + const rows = this.table.rows().data().toArray(); + for (let i = 0; i < rows.length; i++) { + if (rows[i]['precio_total'] == 0) { + error = true; + break; + } + } + + if (error) { + htmlString = ` + `; + } + + $('#serv-acabado-error').html(htmlString) + } +} + +class ServiciosPreimpresion { + + constructor(token, hash) { + + this.csrf_token = token; + this.csrf_hash = hash; + + this.table = null; + + this.selectorServicios = new ClassSelect($('#add_servicio_preimpresion_list'), + '/tarifapreimpresion/gettarifas', window.language.Presupuestos.servicioPreimpresionList, false, {}); + this.addServicio = $('#insertar_serv_preimpresion'); + } + + init() { + + const self = this; + + this.selectorServicios.init(); + + this.table = new DataTable('#tableOfServiciosPreimpresion', { + scrollX: true, + searching: false, + paging: false, + info: false, + ordering: false, + responsive: true, + select: false, + language: { + url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + columns: [ + { data: 'tarifa_id' }, + { data: 'nombre' }, + + { + data: 'coste', render: function (data, type, row) { + let coste = (row.precio / (1 + row.margen / 100)).toFixed(2); + coste = parseFloat(coste).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + return coste; + } + }, + { + data: 'precio', render: function (data, type, row) { + + const total = parseFloat(data).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + return ` + `; + + } + }, + { data: 'margen' }, + { + data: function (row) { + return ` + + `; + } + } + ], + drawCallback: function (settings) { + + self.check_serv_preimpresion_error(); + + $(document).trigger('update-presupuesto', { + update_lineas : false, + update_servicios : false, + update_envios: false, + update_resumen: true, + update_tiradas_alternativas: true + }); + } + + + }); + + + $(document).on('click', '.btn-delete-servpreimpresion', function () { + const rowId = $(this).closest('td').parent()[0].sectionRowIndex; + self.table.row(rowId).remove().draw(); + }); + + + + this.addServicio.on('click', this.addServicioPreimpresion.bind(this)); + } + + getPresupuestoPreimpresion(tarifa_id = -1) { + + const self = this; + + let datos = { + tarifa_preimpresion_id: tarifa_id + }; + + if (datos.tarifa_preimpresion_id > 0) { + new Ajax('/serviciospreimpresiones/getvalues', datos, {}, + function (response) { + if (response.values) { + + self.table.rows.add([response.values[0]]).draw(); + } + }, + function (error) { + console.error(error); + } + ).post(); + } + } + + addServicioPreimpresion() { + + const tarifa_text = this.selectorServicios.getText(); + const tarifa_id = this.selectorServicios.getVal(); + + if (tarifa_text.length > 0) { + + var rows = this.table.rows().data().toArray(); + var found = rows.some(row => row.tarifa_id === tarifa_id); + + if (!found) + this.getPresupuestoPreimpresion(this.selectorServicios.getVal()); + else + popErrorAlert(window.language.Presupuestos.errores.error_servicios_duplicados, 'serv-preimpresion-alert'); + } + + this.check_serv_preimpresion_error(); + + showBreadCrumbSaveButton(true); + } + + cargarServiciosPreimpresion(datos) { + + this.table.rows.add(datos).draw(); + } + + + check_serv_preimpresion_error() { + + var htmlString = ''; + var error = false; + + const rows = this.table.rows().data().toArray(); + for (let i = 0; i < rows.length; i++) { + if (rows[i]['precio_total'] == 0) { + error = true; + break; + } + } + + if (error) { + htmlString = ` + `; + } + + $('#serv-preimpresion-error').html(htmlString) + } + + async guardarServiciosPreimpresion() { + + let datos = []; + this.table.rows().every(function () { + datos.push(this.data()); + }); + const domain = window.location.origin; + const id = window.location.href.split('/').pop(); + await fetch(domain + "/presupuestos/presupuestopreimpresiones/edit/" + id , { + method: "POST", + body: JSON.stringify({datos: datos}), + headers: { + "Content-type": "application/json; charset=UTF-8" + } + }) + } +} + +class ServiciosEncuadernacion { + + constructor(token, hash) { + + this.csrf_token = token; + this.csrf_hash = hash; + + this.table = null; + + this.selectorServicios = new ClassSelect($('#add_servicio_enc_list'), + '/tarifasencuadernacion/gettarifas', window.language.Presupuestos.servicioEncuadernacionList, false, {}); + this.addServicio = $('#insertar_serv_enc'); + } + + init() { + + const self = this; + + this.selectorServicios.init(); + + this.table = new DataTable('#tableOfServiciosEncuadernacion', { + scrollX: true, + searching: false, + paging: false, + info: false, + ordering: false, + responsive: true, + select: false, + language: { + url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + columns: [ + { data: 'tarifa_id' }, + { data: 'nombre' }, + { + data: 'proveedor', render: function (data, type, row) { + return ` + + `; + } + }, + { + data: 'paginas_por_cuadernillo', render: function (data, type, row) { + if (data == null) return ''; + else { + const value_list = [32, 28, 24, 20, 16]; + var string = + ''; + return string; + } + } + }, + { + data: 'tiempo', render: function (data, type, row) { + return self.convertirTiempo(data); + } + }, + { + data: 'precio_unidad', render: function (data, type, row) { + let precio_unidad_coste = (row.precio_unidad / (1 + row.margen / 100)).toFixed(2); + precio_unidad_coste = parseFloat(precio_unidad_coste).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + const precio_unidad = parseFloat(row.precio_unidad).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + return precio_unidad_coste + '/' + precio_unidad; + } + }, + { + data: 'precio_total', render: function (data, type, row) { + const total = parseFloat(data).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + return ` + `; + } + }, + { data: 'margen' }, + { + data: function (row) { + return ` + + `; + } + } + ], + + drawCallback: function (settings) { + + $('.cuadernillo_enc').select2({ + allowClear: false, + minimumResultsForSearch: -1, + }); + + $('.proveedor_encuadernacion').select2({ + + allowClear: false, + minimumResultsForSearch: -1, + ajax: { + url: '/serviciosencuadernaciones/menuitems', + type: 'post', + dataType: 'json', + + data: function (params) { + + let tirada = 0; + if (parseInt($('#tirada').val()) > 0) { + tirada = parseInt($('#tirada').val()) + } + + let paginas = 0; + if (parseInt($('#paginas').val()) > 0) { + paginas = parseInt($('#paginas').val()) + } + + const row = self.table.row($(this).closest('tr')).data(); + const tamanio = self.getDimensionLibro(); + + let return_data = { + tarifa_id: row.tarifa_id, + tirada: tirada, + paginas: paginas, + ancho: tamanio.ancho, + alto: tamanio.alto, + }; + + if (row.paginas_por_cuadernillo) { + return_data.paginas_por_cuadernillo = row.paginas_por_cuadernillo; + } + + return return_data; + }, + delay: 60, + processResults: function (response) { + yeniden(response[window.csrf_token]); + return { + results: response.menu + }; + }, + cache: true + } + }); + + $('.proveedor_encuadernacion').on('select2:close', function () { + + const row = $(this).closest('tr'); + const table = $(this).closest('table').DataTable(); + + if (!row.length || !table || $(this).select2('data') <= 0) return; + + const data = table.row(row).data(); + + data.proveedor_id = parseInt($(this).select2('data')[0].id); + data.proveedor_nombre = $(this).select2('data')[0].text; + //table.row(row).data(data).draw(); + + self.getPresupuestoEncuadernacion(null, $(this)); + }) + + $('.cuadernillo_enc').on('select2:close', function () { + + const row = $(this).closest('tr'); + const table = $(this).closest('table').DataTable(); + + if (!row.length || !table || $(this).select2('data') <= 0) return; + + const data = table.row(row).data(); + data.paginas_por_cuadernillo = parseInt($(this).select2('data')[0].text); + self.getPresupuestoEncuadernacion(null, $(this)); + }) + + self.check_serv_enc_error(); + + $(document).trigger('update-presupuesto', { + update_lineas : false, + update_servicios : false, + update_envios: false, + update_resumen: true, + update_tiradas_alternativas: true + }); + } + }); + + $(document).on('click', '.btn-delete-servencuadernacion', function () { + const rowId = $(this).closest('td').parent()[0].sectionRowIndex; + self.table.row(rowId).remove().draw(); + }); + + this.addServicio.on('click', this.addServicioEncuadernacion.bind(this)); + } + + updateServicios() { + + const self = this; + + const id = window.location.href.split('/').pop(); + const tarifa_ids = this.table.rows().data().toArray().map(row => row.tarifa_id); + const proveedor_ids = this.table.rows().data().toArray().map(row => row.proveedor_id); + const cuadernillos = this.table.rows().data().toArray().map(row => row.paginas_por_cuadernillo); + + let tarifa_data = []; + for (let i = 0; i < tarifa_ids.length; i++) { + tarifa_data.push({ tarifa_id: tarifa_ids[i], proveedor_id: proveedor_ids[i], paginas_por_cuadernillo: cuadernillos[i] }); + } + + let tirada = 0; + if (parseInt($('#tirada').val()) > 0) { + tirada = parseInt($('#tirada').val()) + } + let paginas = 0; + if (parseInt($('#paginas').val()) > 0) { + paginas = parseInt($('#paginas').val()) + } + + const dimension = self.getDimensionLibro(); + if (tarifa_ids.length > 0 && tirada > 0) { + const data = { + datos: tarifa_data, + tirada: tirada, + paginas: paginas, + ancho: dimension.ancho, + alto: dimension.alto, + }; + new Ajax('/serviciosencuadernaciones/update/' + id, data, {}, + function (response) { + if (response.lineas) { + self.table.clear().draw(); + self.table.rows.add(response.lineas).draw(); + } + }, + function (error) { + console.error(error); + } + ).post(); + } + } + + cargarServiciosEncuadernacion(datos) { + + this.table.rows.add(datos).draw(); + } + + async getServiciosDefecto() { + + const self = this; + + let tirada = 0; + if (parseInt($('#tirada').val()) > 0) { + tirada = parseInt($('#tirada').val()) + } + let paginas = 0; + if (parseInt($('#paginas').val()) > 0) { + paginas = parseInt($('#paginas').val()) + } + + const tamanio = self.getDimensionLibro(); + let datos = { + tirada: tirada, + paginas: paginas, + ancho: tamanio.ancho, + alto: tamanio.alto, + solapas: $('#solapas').is(':checked') ? 1 : 0, + tipo_impresion_id: $('#tipo_impresion_id').val(), + tipo: 'default' + }; + + new Ajax('/serviciosencuadernaciones/datatable', datos, {}, + function (response) { + if (response.values) { + self.table.clear().draw(); + self.table.rows.add(response.values).draw(); + } + }, + function (error) { + console.error(error); + } + ).post(); + + this.check_serv_enc_error(); + + showBreadCrumbSaveButton(true); + } + + + getPresupuestoEncuadernacion(tarifa_id = -1, updateSelect = null) { + + const self = this; + + let tirada = 0; + if (parseInt($('#tirada').val()) > 0) { + tirada = parseInt($('#tirada').val()) + } + let paginas = 0; + if (parseInt($('#paginas').val()) > 0) { + paginas = parseInt($('#paginas').val()) + } + + const tamanio = self.getDimensionLibro(); + let datos = { + tirada: tirada, + paginas: paginas, + ancho: tamanio.ancho, + alto: tamanio.alto, + }; + + if (updateSelect != null) { + const row = updateSelect.closest('tr'); + const data = self.table.row(row).data(); + datos.tarifa_enc_id = data.tarifa_id; + datos.proveedor_id = data.proveedor_id; + if (data.paginas_por_cuadernillo) { + datos.paginas_por_cuadernillo = data.paginas_por_cuadernillo; + } + } + else { + datos.tarifa_enc_id = tarifa_id; + } + + if (datos.tarifa_enc_id > 0) { + new Ajax('/serviciosencuadernaciones/getvalues', datos, {}, + function (response) { + if (response.values) { + if (updateSelect != null) { + + self.table.row(updateSelect.closest('tr')).data(response.values[0]).draw(); + } + else { + self.table.rows.add([response.values[0]]).draw(); + } + } + }, + function (error) { + console.error(error); + } + ).post(); + } + } + + addServicioEncuadernacion() { + + const tarifa_text = this.selectorServicios.getText(); + const tarifa_id = this.selectorServicios.getVal(); + + if (tarifa_text.length > 0) { + + var rows = this.table.rows().data().toArray(); + var found = rows.some(row => row.tarifa_id === tarifa_id); + + if (!found) + this.getPresupuestoEncuadernacion(tarifa_id); + else + popErrorAlert(window.language.Presupuestos.errores.error_servicios_duplicados, 'serv-enc-alert'); + } + + this.check_serv_enc_error(); + + showBreadCrumbSaveButton(true); + + } + + async guardarServiciosEncuadernacion() { + + let datos = []; + this.table.rows().every(function () { + datos.push(this.data()); + }); + const domain = window.location.origin; + const id = window.location.href.split('/').pop(); + await fetch(domain + "/presupuestos/presupuestoencuadernaciones/edit/" + id , { + method: "POST", + body: JSON.stringify({datos: datos}), + headers: { + "Content-type": "application/json; charset=UTF-8" + } + }) + } + + + check_serv_enc_error() { + + var htmlString = ''; + var error = false; + + const rows = this.table.rows().data().toArray(); + for (let i = 0; i < rows.length; i++) { + if (rows[i]['precio_total'] == 0) { + error = true; + break; + } + } + + if (error) { + htmlString = ` + `; + } + $('#serv-enc-error').html(htmlString) + } + + + convertirTiempo(horas) { + + if (horas != null) { + + if (parseFloat(horas) > 0) { + + const seconds = parseFloat(horas) * 3600; + // se convierte a formato hh:mm:ss + const h = Math.floor(seconds / 3600); + const minutos = Math.floor((seconds % 3600) / 60); + const segundos = Math.round(seconds % 60, 0); + return h + ':' + minutos + ':' + segundos; + } + else { + return ""; + } + } + else { + return ""; + } + } + + getDimensionLibro() { + + var ancho = 0; + var alto = 0; + + + if ($('#papelFormatoPersonalizado').is(':checked')) { + ancho = parseFloat($('#papelFormatoAncho').val()); + alto = parseFloat($('#papelFormatoAlto').val()); + } + else { + const selectedText = $('#papelFormatoId').find('option:selected').text(); + if (selectedText.length > 0) { + ancho = parseFloat(selectedText.trim().split(" x ")[0]); + alto = parseFloat(selectedText.trim().split(" x ")[1]); + } + } + + return { + ancho: ancho, + alto: alto + } + } +} + +class ServiciosManipulado { + + constructor(token, hash) { + + this.csrf_token = token; + this.csrf_hash = hash; + + this.table = null; + + this.selectorServicios = new ClassSelect($('#add_servicio_manipulado_list'), + '/tarifasmanipulado/gettarifas', window.language.Presupuestos.servicioManipuladoList, false, {}); + this.addServicio = $('#insertar_serv_manipulado'); + } + + init() { + + const self = this; + + this.selectorServicios.init(); + + this.table = new DataTable('#tableOfServiciosManipulado', { + scrollX: true, + searching: false, + paging: false, + info: false, + ordering: false, + responsive: true, + select: false, + language: { + url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + columns: [ + { data: 'tarifa_id' }, + { data: 'nombre' }, + { + data: 'precio_unidad', render: function (data, type, row) { + let precio_unidad_coste = (row.precio_unidad / (1 + row.margen / 100)).toFixed(2); + precio_unidad_coste = parseFloat(precio_unidad_coste).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + const precio_unidad = parseFloat(row.precio_unidad).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + return precio_unidad_coste + '/' + precio_unidad; + } + }, + { + data: 'precio_total', render: function (data, type, row) { + const total = parseFloat(data).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + return ` + `; + } + }, + { data: 'margen' }, + { + data: function (row) { + return ` + + `; + } + } + ], + drawCallback: function (settings) { + + self.check_serv_manipulado_error(); + + $(document).trigger('update-presupuesto', { + update_lineas : false, + update_servicios : false, + update_envios: false, + update_resumen: true, + update_tiradas_alternativas: true + }); + } + }); + + this.addServicio.on('click', this.addServicioManipulado.bind(this)); + + $(document).on('click', '.btn-delete-servmanipulado', function () { + const rowId = $(this).closest('td').parent()[0].sectionRowIndex; + self.table.row(rowId).remove().draw(); + }); + } + + + addServicioManipulado() { + + const tarifa_text = this.selectorServicios.getText(); + const tarifa_id = this.selectorServicios.getVal(); + + if (tarifa_text.length > 0) { + + var rows = this.table.rows().data().toArray(); + var found = rows.some(row => row.tarifa_id === tarifa_id); + + if (!found) + this.getPresupuestoManipulado(tarifa_id); + else + popErrorAlert(window.language.Presupuestos.errores.error_servicios_duplicados, 'serv-manipulado-alert'); + } + } + + async getServiciosDefecto() { + + const self = this; + + let tirada = 0; + if (parseInt($('#tirada').val()) > 0) { + tirada = parseInt($('#tirada').val()) + } + + let datos = { + tirada: tirada, + solapas: $('#solapas').is(':checked') ? 1 : 0, + tipo_impresion_id: $('#tipo_impresion_id').val(), + tipo: 'default' + }; + + new Ajax('/serviciosmanipulados/datatable', datos, {}, + function (response) { + if (response.values) { + self.table.clear().draw(); + self.table.rows.add(response.values).draw(); + } + }, + function (error) { + console.error(error); + } + ).post(); + + this.check_serv_manipulado_error(); + + showBreadCrumbSaveButton(true); + } + + addSolapas() { + + const self = this; + new Ajax('/serviciosmanipulados/serviciosolapas', {}, {}, + function (response) { + if (response.service) { + + const tarifa_id = response.service; + var rows = self.table.rows().data().toArray(); + var found = rows.some(row => row.tarifa_id === tarifa_id); + + if (!found) + self.getPresupuestoManipulado(tarifa_id); + + } + }, + function (error) { + console.error(error); + } + ).get(); + } + + removeSolapas() { + + const self = this; + + new Ajax('/serviciosmanipulados/serviciosolapas', {}, {}, + function (response) { + if (response.service) { + + const tarifa_id = response.service; + var rows = self.table.rows().data().toArray(); + for (let i = 0; i < rows.length; i++) { + if (rows[i]['tarifa_id'] == tarifa_id) { + self.table.row(i).remove().draw(); + break; + } + } + + } + }, + function (error) { + console.error(error); + } + ).get(); + } + + updateServicios() { + + const self = this; + + const id = window.location.href.split('/').pop(); + const tarifa_ids = this.table.rows().data().toArray().map(row => row.tarifa_id); + + let tirada = 0; + if (parseInt($('#tirada').val()) > 0) { + tirada = parseInt($('#tirada').val()) + } + + if (tarifa_ids.length > 0) { + const data = { + datos: tarifa_ids, + solapas: $('#solapas').is(':checked') ? 1 : 0, + tirada: tirada + }; + new Ajax('/serviciosmanipulados/update/' + id, data, {}, + function (response) { + if (response.lineas) { + self.table.clear().draw(); + self.table.rows.add(response.lineas).draw(); + } + }, + function (error) { + console.error(error); + } + ).post(); + } + + } + + getPresupuestoManipulado(tarifa_id = -1) { + + const self = this; + + let tirada = 0; + if (parseInt($('#tirada').val()) > 0) { + tirada = parseInt($('#tirada').val()) + } + + let datos = { + tirada: tirada, + tarifa_manipulado_id: tarifa_id + }; + + if (datos.tarifa_manipulado_id > 0) { + new Ajax('/serviciosmanipulados/getvalues', datos, {}, + function (response) { + if (response.values) { + self.table.rows.add([response.values[0]]).draw(); + } + }, + function (error) { + console.error(error); + } + ).post(); + } + } + + cargarServiciosManipulado(datos) { + + this.table.rows.add(datos).draw(); + } + + async guardarServiciosManipulado() { + + let datos = []; + this.table.rows().every(function () { + datos.push(this.data()); + }); + const domain = window.location.origin; + const id = window.location.href.split('/').pop(); + await fetch(domain + "/presupuestos/presupuestomanipulados/edit/" + id , { + method: "POST", + body: JSON.stringify({datos: datos}), + headers: { + "Content-type": "application/json; charset=UTF-8" + } + }) + } + + check_serv_manipulado_error() { + + var htmlString = ''; + var error = false; + + // get all rows of the table + const rows = this.table.rows().data().toArray(); + for (let i = 0; i < rows.length; i++) { + if (rows[i]['precio_total'] == 0) { + error = true; + break; + } + } + + if (error) { + htmlString = ` + `; + } + $('#serv-manipulado-error').html(htmlString) + } +} + +class ServiciosExtra { + + constructor(token, hash) { + + this.csrf_token = token; + this.csrf_hash = hash; + + this.table = null; + + this.selectorServicios = new ClassSelect($('#add_servicio_extra_list'), + '/tarifaextra/gettarifas', window.language.Presupuestos.servicioExtraList, false, {}); + this.addServicio = $('#insertar_serv_extra'); + + } + + init() { + + const self = this; + + this.selectorServicios.init(); + + this.table = new DataTable('#tableOfServiciosExtra', { + scrollX: true, + searching: false, + paging: false, + info: false, + ordering: false, + responsive: true, + select: false, + language: { + url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + columns: [ + { data: 'tarifa_id' }, + { data: 'nombre' }, + + { + data: 'coste', render: function (data, type, row) { + let coste = (row.precio / (1 + row.margen / 100)).toFixed(2); + coste = parseFloat(coste).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + return coste; + } + }, + { + data: 'precio', render: function (data, type, row) { + + const total = parseFloat(data).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); + return ` + `; + + } + }, + { data: 'margen' }, + { + data: function (row) { + return ` + + `; + } + } + ], + drawCallback: function (settings) { + + self.check_serv_extra_error(); + + $(document).trigger('update-presupuesto', { + update_lineas : false, + update_servicios : false, + update_envios: false, + update_resumen: true, + update_tiradas_alternativas: true + }); + } + }); + + $(document).on('click', '.btn-delete-servextra', function () { + const rowId = $(this).closest('td').parent()[0].sectionRowIndex; + self.table.row(rowId).remove().draw(); + }); + + this.addServicio.on('click', this.addServicioExtra.bind(this)); + } + + addServicioExtra() { + + const tarifa_text = this.selectorServicios.getText(); + const tarifa_id = this.selectorServicios.getVal(); + + if (tarifa_text.length > 0) { + + var rows = this.table.rows().data().toArray(); + var found = rows.some(row => row.tarifa_id === tarifa_id); + + if (!found) + this.getPresupuestoExtra(this.selectorServicios.getVal()); + else + popErrorAlert(window.language.Presupuestos.errores.error_servicios_duplicados, 'serv-extra-alert'); + } + + this.check_serv_extra_error(); + + showBreadCrumbSaveButton(true); + + } + + cargarServiciosExtra(datos) { + + this.table.rows.add(datos).draw(); + } + + async guardarServiciosExtra() { + + let datos = []; + this.table.rows().every(function () { + datos.push(this.data()); + }); + const domain = window.location.origin; + const id = window.location.href.split('/').pop(); + await fetch(domain + "/presupuestos/presupuestoserviciosextra/edit/" + id , { + method: "POST", + body: JSON.stringify({datos: datos}), + headers: { + "Content-type": "application/json; charset=UTF-8" + } + }) + } + + getPresupuestoExtra(tarifa_id = -1) { + + const self = this; + + let datos = { + tarifa_extra_id: tarifa_id + }; + + if (datos.tarifa_extra_id > 0) { + new Ajax('/serviciosextra/getvalues', datos, {}, + function (response) { + if (response.values) { + self.table.rows.add([response.values[0]]).draw(); + } + }, + function (error) { + console.error(error); + } + ).post(); + } + } + + check_serv_extra_error() { + + var htmlString = ''; + var error = false; + + const rows = this.table.rows().data().toArray(); + for (let i = 0; i < rows.length; i++) { + if (rows[i]['precio_total'] == 0) { + error = true; + break; + } + } + + if (error) { + htmlString = ` + `; + } + + $('#serv-extra-error').html(htmlString) + } +} + +export default Servicios; \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/tiradasAlternativas.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/tiradasAlternativas.js new file mode 100644 index 00000000..897566d1 --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/tiradasAlternativas.js @@ -0,0 +1,382 @@ +import { getToken } from "../../../common/common.js"; + +class TiradasAlernativas { + + constructor(functions = {}) { + + this.getDimensionLibro = functions.getDimensionLibro; + + this.csrf_token = getToken(); + this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val(); + + this.addTirada = $('#add_tirada_alt'); + this.tirada = $('#tirada_alt'); + + this.table = null; + } + + init() { + + const self = this; + + this.addTirada.on('click', this.addTiradaAlt.bind(this)); + + this.table = $('#tableTiradas').DataTable({ + + "language": { + "url": "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + "paging": false, + "info": false, + "searching": false, + "ordering": true, + "autoWidth": false, + "responsive": true, + "columnDefs": [ + { + orderable: false, + searchable: false, + targets: [$('#tableTiradas').find("tr:first th").length - 1] + }, + ], + "columns": [ + { data: "tirada" }, + { data: 'coste_impresion' }, + { + data: 'coste_envio', + render: function (data, type, row) { + return parseFloat(data).toFixed(2); + }, + }, + { + data: 'margen', + render: function (data, type, row) { + return data + '%'; + } + }, + { + data: 'total_pedido', + render: function (data, type, row) { + return parseFloat(data).toFixed(2); + } + }, + { + data: 'precio_unidad', + render: function (data, type, row) { + return parseFloat(data).toFixed(4); + } + }, + { + data: function (row, type, set, meta) { + return ` + + + `; + }, + className: 'row-edit dt-center' + } + ], + order: [[0, 'asc']] + }); + + // Evento de borrado de una fila de la tabla de tiradas + $(document).on('click', '.btn-delete-tirada', function (e) { + + const row = $(this).closest('tr'); + $('#tableTiradas').DataTable().row(row) + .remove() + .draw(); + showBreadCrumbSaveButton(true); + }) + + $(document).on('click', '.comfirm-tirada-alt', function (e) { + + const row = $(this).closest('tr'); + const data = self.table.row(row).data(); + + self.table.row(row).remove().draw(); + + $(document).trigger('update-envios', { tirada_inicial: $('#tirada').val(), tirada: data.tirada }); + + }); + + $(document).on('update-tiradas-alternativas', async function () { + + await self.updateTiradasAlternativas(); + + $(document).trigger('update-tiradas-alternativas-completed'); + + }); + } + + async updateTiradasAlternativas() { + + const self = this; + + if ($('#tableTiradas').DataTable().rows().count() > 0) { + // se obtiene la primera columna de la tabla de tiradas + const data = $('#tableTiradas').DataTable().rows().data().toArray(); + // se borra la tabla de tiradas + $('#tableTiradas').DataTable().clear().draw(); + const tiradas = data.map(row => row.tirada); + // por cada tirada, se añade una fila a la tabla de tiradas + tiradas.forEach(function (tirada) { + self.addTiradaAlt(tirada); + }); + } + } + + + cargar(datos) { + + if (datos != null && datos != undefined && datos.length > 0) { + this.table.clear().draw(); + this.table.rows.add(datos).draw(); + } + } + + generate_json_tiradas() { + + const data = this.table.rows().data().toArray(); + return JSON.stringify(data); + } + + + addTiradaAlt(tiradaExterna = null) { + + const self = this; + const id = window.location.href.split('/').pop(); + + const tirada = tiradaExterna === null ? parseInt(this.tirada.val()) : tiradaExterna; + const tirada_ejemplo = parseInt($('#tirada').val()); + const POD = parseInt($('#POD').val()); + + if ((tirada_ejemplo > POD && tirada <= POD) || + (tirada_ejemplo <= POD && tirada > POD)) { + popErrorAlert('No se pueden mezclar tiradas POD y no POD', 'alert-tiradas_alt'); + return; + } + + if (this.table.rows().count() > 0) { + let tiradas = this.table.rows().data().toArray(); + if (tiradas.find(t => parseInt(t.tirada) == tirada)) { + popErrorAlert('La tirada ya existe', 'alert-tiradas_alt'); + return; + } + } + + const dimension = this.getDimensionLibro(); + + const envios = JSON.stringify($('#tableOfDireccionesEnvio').DataTable().rows().data().toArray()); + + let datos = { + id: id, + tirada: this.tirada.val(), + peso_libro: this.get_peso_libro(), + tirada_base: $('#tirada').val(), + paginas: $('#paginas').val(), + merma: this.getMerma(tirada), + tipo_impresion_id: $('#tipo_impresion_id').val(), + json_tiradas: this.generate_json_lp(), + json_acabados: this.generate_json_servicios('acabados'), + json_encuadernaciones: this.generate_json_servicios('encuadernaciones'), + json_manipulado: this.generate_json_servicios('manipulado'), + json_envios: envios, + ancho: dimension.ancho, + alto: dimension.alto, + cliente_id: $('#clienteId').find(":selected").val(), + solapas_cubierta: $('#solapas').is(':checked') ? 1 : 0, + solapas_cubierta_ancho: $('#solapas').is(':checked') ? parseInt($('#solapas_ancho').val()) : 0, + solapas_sobrecubierta: $('#solapas_sobrecubierta').is(':checked') ? 1 : 0, + solapas_sobrecubierta_ancho: $('#solapas_sobrecubierta').is(':checked') ? parseInt($('#solapas_ancho_sobrecubierta').val()) : 0, + lomo: $('#lomo_cubierta').val(), + }; + + $.ajax({ + type: "POST", + url: '/presupuestotiradasalternativas/datatable_2', + data: datos, + success: async function (data) { + + var coste_total = 0.0; + var margen_total = 0.0; + + var costes_servicios = 0.0; + var margen_servicios = 0.0; + + var coste_envio = 0.0; + var margen_envio = 0.0; + + if (data.lineas.length > 0) { + // Se cogen los valores de la linea con los datos correspondientes + data.lineas.forEach(function (value) { + coste_total += value.total_coste; + margen_total += value.total_margen; + }); + + if (data.servicios) { + costes_servicios += data.servicios.coste; + margen_servicios += data.servicios.margen; + + } + + $('#tableOfServiciosPreimpresion').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + costes_servicios += parseFloat(rowData.coste); + margen_servicios += parseFloat(rowData.precio) - parseFloat(rowData.coste); + }); + + $('#tableOfServiciosExtra').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + costes_servicios += parseFloat(rowData.coste); + margen_servicios += parseFloat(rowData.precio) - parseFloat(rowData.coste); + }); + + if (data.envios) { + coste_envio += data.envios.coste; + margen_envio += data.envios.margen; + + } + + // Se añade la fila a la tabla de tiradas + self.table.row.add({ + tirada: datos.tirada, + coste_impresion: coste_total.toFixed(2), + coste_envio: coste_envio.toFixed(2), + margen: ((margen_total + margen_servicios + margen_envio) / (coste_total + coste_envio) * 100.0).toFixed(2), + total_pedido: (coste_total + costes_servicios + coste_envio).toFixed(2), + precio_unidad: ((coste_total + costes_servicios + coste_envio) / datos.tirada).toFixed(4), + + }).draw(false); + } + + + }, + error: function (e) { } + }); + } + + generate_json_lp() { + + const data = $('#tableLineasPresupuesto').DataTable().data().toArray(); + + let json = this.filterData(data, + ['paginas', + 'numPagColor', + 'paginas_impresion', + 'papel', // papel generico + 'papel_impresion_id', + 'gramaje', + 'maquina_id', + 'aFavorFibra', + 'row_id', + 'check_papel_total', + 'check_impresion_total', + 'cobAmarillo', // tipologia de papel + 'cobCyan', + 'cobMagenta', + 'cobNegro', + 'cobCG', + 'gotaColor', + 'gotaNegro']); + + json.forEach(element => { + element['check_papel_total'] = $('#' + element['row_id'] + '_checkPapel').is(':checked') ? 1 : 0; + element['check_impresion_total'] = $('#' + element['row_id'] + '_checkClicks').is(':checked') ? 1 : 0; + }); + return JSON.stringify(json); + } + + generate_json_servicios(servicios) { + + let json = []; + switch (servicios) { + case 'acabados': + $('#tableOfServiciosAcabado').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + json.push(rowData); + }); + break; + case 'encuadernaciones': + $('#tableOfServiciosEncuadernacion').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + json.push(rowData); + }); + break; + case 'presimpresion': + $('#tableOfServiciosPreimpresion').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + json.push(rowData); + }); + break; + case 'manipulado': + $('#tableOfServiciosManipulado').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + json.push(rowData); + }); + break; + case 'extra': + $('#tableOfServiciosExtra').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + json.push(rowData); + }); + break; + } + return JSON.stringify(json); + } + + get_peso_libro() { + + var peso_total_libro = 0.0 + $('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + peso_total_libro += parseFloat(rowData.peso) + }) + return peso_total_libro; + } + + getMerma(tirada) { + + let merma = 0; + + if (tirada > parseInt($('#POD').val())) { + + merma = tirada * 0.1 <= 30 ? tirada * 0.1 : 30 + } + else { + let merma_lineas = [] + $('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) { + var rowData = this.data(); + if (rowData.row_id != 'lp_guardas' && rowData.row_id != 'lp_cubierta' && rowData.row_id != 'lp_sobrecubierta') { + const formas_linea = $('#isCosido').val() == 0 ? parseInt(rowData.formas) : parseInt(rowData.formas) / 2 + if (formas_linea > tirada) + merma_lineas.push(formas_linea - tirada) + else + merma_lineas.push(tirada % formas_linea) + } + }) + + if (merma_lineas.length > 0) + merma = Math.max(...merma_lineas) + else + merma = 0 + } + return merma; + } + + filterData(data, keys) { + + return data.map(obj => { + + const newObj = {}; + keys.forEach(key => { + if (obj.hasOwnProperty(key)) { + newObj[key] = obj[key]; + } + }); + return newObj; + }); + } +} + +export default TiradasAlernativas; \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/pages/presupuestoCliente/direcciones.js b/httpdocs/assets/js/safekat/pages/presupuestoCliente/direcciones.js index 6e6288b3..1ee81bad 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoCliente/direcciones.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoCliente/direcciones.js @@ -88,6 +88,9 @@ class Direcciones { }); }, 0); + + $('#tiradaEnvios-' + datosGenerales.selectedTirada).trigger('click'); + if (datos.entrega_taller == 1) { this.recogidaTaller.prop('checked', true); this.recogidaTaller.trigger('change'); @@ -104,7 +107,7 @@ class Direcciones { for (let i = 0; i < datos.length; i++) { let id = datos[i].id; - let unidades = datos[i].unidades; + let unidades = datos[i].cantidad; let entregaPalets = datos[i].palets; @@ -113,7 +116,22 @@ class Direcciones { if (unidades == null || unidades <= 0 || unidades == undefined) return; - let peticion = new Ajax('/misdirecciones/getDireccionPresupuesto/' + id, {}, {}, + let divId = "dirEnvio-1"; + let direccionesActuales = this.divDirecciones.find('.direccion-cliente'); + if (direccionesActuales.length > 0) { + // the the lass item + let last = direccionesActuales[direccionesActuales.length - 1]; + divId = "dirEnvio-" + (parseInt(last.id.split('-')[1]) + 1); + } + let tarjeta = new tarjetaDireccion(this.divDirecciones, divId, datos[i]); + tarjeta.setUnidades(unidades); + tarjeta.setEntregaPalets(entregaPalets); + tarjeta.card.find('.direccion-editar').on('click', this.#editUnits.bind(self)); + tarjeta.card.find('.direccion-eliminar').on('click', this.#deleteDireccion.bind(self)); + this.divDirecciones.append(tarjeta.card); + this.direcciones.push(tarjeta); + + /*let peticion = new Ajax('/misdirecciones/getDireccionPresupuesto/' + id, {}, {}, (response) => { let divId = "dirEnvio-1"; let direccionesActuales = this.divDirecciones.find('.direccion-cliente'); @@ -134,7 +152,7 @@ class Direcciones { console.error('Error getting address'); }); - peticion.get(); + peticion.get();*/ } } } catch (e) { @@ -226,7 +244,7 @@ class Direcciones { let direcciones = []; this.direcciones.forEach(direccion => { let dir = { - id: direccion.getId(), + direccion: direccion.getDireccion(), unidades: direccion.getUnidades(), entregaPalets: direccion.getEntregaPalets() }; @@ -306,12 +324,23 @@ class Direcciones { total_unidades += parseInt(this.direcciones[i].getUnidades()); } + + if (this.getSelectedTirada() == null) { + popErrorAlert("Tiene que seleccionar una tirada para insertar una dirección"); + return; + } + if (total_unidades + parseInt(unidades) > this.getSelectedTirada()) { popErrorAlert("El total de unidades enviadas tiene que ser menor que " + this.getSelectedTirada()); return; } } else { + if (this.getSelectedTirada() == null) { + popErrorAlert("Tiene que seleccionar una tirada para insertar una dirección"); + return; + } + if (unidades > this.getSelectedTirada()) { popErrorAlert("El total de unidades enviadas tiene que ser menor que " + this.getSelectedTirada()); return; diff --git a/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js b/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js index 577190f2..61c52bf9 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoCliente/presupuestoCliente.js @@ -194,10 +194,10 @@ class PresupuestoCliente { console.log("Error en el calculo del lomo interior."); return; } - if(response.errors.status == 1){ + if (response.errors.status == 1) { popErrorAlert('' + response.errors.value, "sk-alert", false); } - else{ + else { popAlert2Hide('sk-alert'); } }, @@ -477,6 +477,13 @@ class PresupuestoCliente { try { $('#loader').modal('show'); + if (this.direcciones.tiradaSeleccionada == null || this.direcciones.tiradaSeleccionada == undefined + || this.direcciones.tiradaSeleccionada == "" || this.direcciones.tiradaSeleccionada == 0) { + popErrorAlert("Seleccione una tirada en la pestaña direcciones para guardar el presupuesto."); + $('#loader').modal('hide'); + return; + } + this.#getDatos(); let datos_to_check = this.#prepareData(); @@ -561,17 +568,23 @@ class PresupuestoCliente { popAlert2Hide(); - for (let i = 0; i < tiradas.length; i++) { + for (let i = 0; i < response.tiradas.length; i++) { + if(i==0){ + $('#eb').val(response.eb[i]); + } new tarjetaTiradasPrecio( this.divTiradasPrecios, ('precio-tiradas-' + response.tiradas[i]), - tiradas[i], - (parseFloat(response.precio_u[i]) * parseInt(tiradas[i])).toFixed(2), + response.tiradas[i], + (parseFloat(response.precio_u[i]) * parseInt(response.tiradas[i])).toFixed(2), response.precio_u[i] ); if (this.actualizarTiradasEnvio) { - this.direcciones.insertTirada(tiradas[i]); + this.direcciones.insertTirada(response.tiradas[i]); + if(i==0){ + $('#tiradaEnvios-' + response.tiradas[i]).trigger('click'); + } } } @@ -670,6 +683,12 @@ class PresupuestoCliente { }, } + if(this.direcciones.getSelectedTirada() != null && this.direcciones.getSelectedTirada() != undefined && this.direcciones.getSelectedTirada() > 0){ + this.datos.selectedTirada = this.direcciones.getSelectedTirada(); + } + + this.datos.guardas = this.disenioCubierta.getGuardas(); + if (calcularSolapas) { return; } @@ -683,6 +702,7 @@ class PresupuestoCliente { this.datos.retractilado = this.datosGenerales.retractilado.is(':checked') ? 1 : 0; this.datos.retractilado5 = this.datosGenerales.retractilado5.is(':checked') ? 1 : 0; + this.datos.eb = $('#eb').val(); this.datos.cubierta = { tipoCubierta: this.disenioCubierta.disenioCubierta.filter('.selected').attr('id'), @@ -693,7 +713,7 @@ class PresupuestoCliente { carasImpresion: this.disenioCubierta.carasCubierta.val(), }; - this.datos.guardas = this.disenioCubierta.getGuardas(); + this.datos.sobrecubierta = this.disenioCubierta.getSobrecubierta(); this.datos.faja = this.disenioCubierta.getFaja(); @@ -780,8 +800,18 @@ class PresupuestoCliente { self.direcciones.cargarDatos(response.data.direcciones, response.data.datosGenerales); - self.disenioInterior.cargarDatos(response.data.interior, response.data.datosGenerales.papelInteriorDiferente); - self.disenioCubierta.cargarDatos(response.data.cubierta, response.data.guardas, response.data.sobrecubierta); + try { + self.disenioInterior.cargarDatos(response.data.interior, response.data.datosGenerales.papelInteriorDiferente); + } + catch (e) { + console.log("Error al cargar diseño interior: " + e); + } + try { + self.disenioCubierta.cargarDatos(response.data.cubierta, response.data.guardas, response.data.sobrecubierta); + } + catch (e) { + console.log("Error al cargar diseño cubierta: " + e); + } setTimeout(() => { @@ -811,7 +841,7 @@ class PresupuestoCliente { $('#menu_resumen_button').trigger('click'); setTimeout(() => { self.resumen.init_dropzone(); - self.resumen.generate_total(response.data.resumen.base, response.data.resumen.precio_unidad); + self.resumen.generate_total(response.data.resumen.base, response.data.resumen.precio_unidad, response.data.datosGenerales.ivaReducido); }, 0); } }, 0); diff --git a/httpdocs/assets/js/safekat/pages/presupuestoCliente/resumen.js b/httpdocs/assets/js/safekat/pages/presupuestoCliente/resumen.js index 62fae0d8..343e4392 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoCliente/resumen.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoCliente/resumen.js @@ -322,7 +322,7 @@ class Resumen { } - generate_total(base, precio_u) { + generate_total(base, precio_u, iva_reducido) { let precio_u_text = String(precio_u); precio_u_text = precio_u_text.replace('€/u', ''); @@ -330,7 +330,7 @@ class Resumen { let base_text = this.#changeDecimalFormat(String(base)); - const iva_porcentaje = this.datosGenerales.ivaReducido.find('option:selected').val() == 1 ? 0.21 : 0.04; + const iva_porcentaje = !iva_reducido? 0.21 : 0.04; const iva = (parseFloat(base) * iva_porcentaje).toFixed(2); let iva_text = this.#changeDecimalFormat(iva); @@ -339,7 +339,7 @@ class Resumen { this.precio_unidad.text(precio_u_text); this.total_base.text(base_text); - this.iva_porcentaje.text(this.datosGenerales.ivaReducido.find('option:selected').val() == 1 ? '21' : '4'); + this.iva_porcentaje.text(!iva_reducido? '21' : '4'); this.iva.text(iva_text); this.total.text(total_text); } diff --git a/httpdocs/themes/vuexy/css/sk-datatables.css b/httpdocs/themes/vuexy/css/sk-datatables.css index 6c249c4f..60269a86 100644 --- a/httpdocs/themes/vuexy/css/sk-datatables.css +++ b/httpdocs/themes/vuexy/css/sk-datatables.css @@ -38,11 +38,16 @@ table.dataTable.table-hover>tbody>tr.selected:hover>* { text-align: right; } +#tableOfDireccionesEnvio.comparator-table td { + text-align: center !important; +} + .comparator-table td.dt-result-value { text-align: left; } + .lp-cell { padding-left: 1px; padding-right: 1px;