diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index e0329474..a9baa5bc 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -1,6 +1,7 @@ routes($routes, ['except' => ['login', 'register']]); service('auth')->routes($routes); + //WEB ROUTER ------------------------------------------------------ //------------------------------------------------------------------ $routes->get('/', 'Home::index', ['as' => 'home']); @@ -50,7 +52,6 @@ $routes->group('tarifas', ['namespace' => 'App\Controllers\Tarifas'], function ( $routes->get('delete/(:num)', 'TarifaAcabadosLineas::delete/$1', ['as' => 'tarifaAcabadoLineasDelete']); }); }); - }); /* Rutas para configuraciones */ @@ -64,7 +65,6 @@ $routes->group('configuracion', ['namespace' => 'App\Controllers\Configuracion'] $routes->match(['get', 'post'], 'edit/(:num)', 'Ubicaciones::edit/$1', ['as' => 'ubicacionesEdit']); $routes->get('delete/(:num)', 'Ubicaciones::delete/$1', ['as' => 'ubicacionesDelete']); $routes->post('datatable', 'Ubicaciones::datatable', ['as' => 'ubicacionesDT']); - }); /* Series Factura */ @@ -85,14 +85,20 @@ $routes->group('configuracion', ['namespace' => 'App\Controllers\Configuracion'] $routes->get('delete/(:num)', 'FormasPago::delete/$1', ['as' => 'formasPagoDelete']); $routes->post('datatable', 'FormasPago::datatable', ['as' => 'formasPagoDT']); }); - $routes->group("variables",["namespace" => 'App\Controllers\Configuracion'],function($routes){ + $routes->group("variables", ["namespace" => 'App\Controllers\Configuracion'], function ($routes) { $routes->get('', 'ConfigVariables::index', ['as' => 'variablesIndex']); $routes->get('find/(:num)', 'ConfigVariables::get/$1', ['as' => 'variablesFind']); $routes->post('edit/(:num)', 'ConfigVariables::updateVariable/$1', ['as' => 'updateVariable']); $routes->delete('delete/(:num)', 'ConfigVariables::delete/$1', ['as' => 'deleteVariable']); $routes->get('datatable', 'ConfigVariables::datatable', ['as' => 'datatableVariables']); }); - + $routes->group("errores-presupuesto", ["namespace" => 'App\Controllers\Configuracion'], function ($routes) { + $routes->get('', 'ConfigErrores::index', ['as' => 'erroresPresupuestoIndex']); + $routes->get('edit/(:num)', 'ConfigErrores::viewForm/$1', ['as' => 'erroresPresupuestoViewForm']); + $routes->get('get/(:num)', 'ConfigErrores::get_error_presupuesto/$1', ['as' => 'erroresPresupuestoGetErrorPresupuesto']); + $routes->get('datatable', 'ConfigErrores::datatable', ['as' => 'erroresPresupuestoDatatable']); + $routes->post('edit/(:num)', 'ConfigErrores::update_error_presupuesto/$1', ['as' => 'erroresPresupuestoUpdate']); + }); }); @@ -370,8 +376,8 @@ $routes->group('clientes', ['namespace' => 'App\Controllers\Clientes'], function $routes->get('delete/(:num)', 'Cliente::delete/$1', ['as' => 'clienteDelete']); $routes->post('datatable', 'Cliente::datatable', ['as' => 'clienteDT']); $routes->post('menuitems', 'Cliente::menuItems', ['as' => 'menuItemsOfClientes']); + $routes->get('getSelect2', 'Cliente::getSelect2', ['as' => 'getListaSelect2']); }); - }); @@ -407,6 +413,10 @@ $routes->group('clienteusuarios', ['namespace' => 'App\Controllers\Clientes'], f $routes->group('misdirecciones', ['namespace' => 'App\Controllers\Clientes'], function ($routes) { $routes->get('', 'Clientedirecciones::index', ['as' => 'clientedireccionesIndex']); + $routes->get('get/(:num)', 'Clientedirecciones::get/$1', ['as' => 'get']); + $routes->get('getDireccionPresupuesto/(:num)', 'Clientedirecciones::getDireccionPresupuesto/$1', ['as' => 'getDireccionPresupuesto']); + $routes->post('add', 'Clientedirecciones::add', ['as' => 'newClientedirecciones']); + $routes->get('getSelect2', 'Clientedirecciones::getSelect2', ['as' => 'listaClientedirecciones']); }); @@ -562,7 +572,7 @@ $routes->group('cosidotapablanda', ['namespace' => 'App\Controllers\Presupuestos $routes->resource('cosidotapablanda', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Cosidotapablanda', 'except' => 'show,new,create,update']); $routes->group('presupuestocliente', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) { - $routes->get('list', 'Presupuestocliente::list', ['as' => 'listaPresupuestos']); + $routes->get('list', 'Presupuestocliente::list', ['as' => 'listaPresupuestos']); $routes->post('datatable', 'Presupuestocliente::datatable', ['as' => 'datatableOfPresupuestos']); $routes->get('add', 'Presupuestocliente::add', ['as' => 'nuevoPresupuestoCliente']); $routes->post('add', 'Presupuestocliente::add', ['as' => 'crearPresupuestoCliente']); @@ -571,10 +581,11 @@ $routes->group('presupuestocliente', ['namespace' => 'App\Controllers\Presupuest $routes->post('getgramaje', 'Presupuestocliente::getGramaje', ['as' => 'obtenerGramaje']); $routes->post('presupuesto', 'Presupuestocliente::presupuesto', ['as' => 'presupuestoCliente']); $routes->post('getDireccionesCliente', 'Presupuestocliente::getDireccionesCliente', ['as' => 'getDirecciones']); - $routes->post('getDatosDireccion', 'Presupuestocliente::getDatosDireccion', ['as' => 'getDatosDireccion']); $routes->post('getNuevaDireccion', 'Presupuestocliente::getNuevaDireccion', ['as' => 'nuevaDireccion']); - $routes->post('guardarPresupuesto', 'Presupuestocliente::guardarPresupuesto', ['as' => 'guardarPresupuesto']); + $routes->post('guardar', 'Presupuestocliente::guardar', ['as' => 'guardar']); + $routes->get('cargar/(:num)', 'Presupuestocliente::cargar/$1', ['as' => 'cargarPresupuesto']); $routes->post('duplicarPresupuesto', 'Presupuestocliente::duplicarPresupuesto', ['as' => 'duplicarPresupuesto']); + $routes->post('calcular', 'Presupuestocliente::calcular', ['as' => 'calcularPresupuesto']); }); $routes->resource('presupuestocliente', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Presupuestocliente', 'except' => 'show,new,create,update']); @@ -589,7 +600,6 @@ $routes->group('serviciosencuadernaciones', ['namespace' => 'App\Controllers\Pre $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->group('serviciosmanipulados', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) { @@ -615,13 +625,13 @@ $routes->group('presupuestodirecciones', ['namespace' => 'App\Controllers\Presup $routes->group('presupuestotiradasalternativas', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) { $routes->post('datatable', 'Presupuestotiradasalternativas::datatable', ['as' => 'dataTableOfPresupuestoTiradasAlternativas']); $routes->post('datatable_2', 'Presupuestotiradasalternativas::datatable_2', ['as' => 'getTiradaData']); -}); +}); $routes->group('pedidos', ['namespace' => 'App\Controllers\Pedidos'], function ($routes) { $routes->get('list', 'Pedido::todos', ['as' => 'listaPresupuestos']); - $routes->get('listActivos', 'Pedido::activos', ['as' => 'listaPresupuestosActivos']); - $routes->get('listFinalizados', 'Pedido::finalizados', ['as' => 'listaFinalizados']); - $routes->get('listCancelados', 'Pedido::cancelados', ['as' => 'listaCancelados']); + $routes->get('listActivos', 'Pedido::activos', ['as' => 'listaPresupuestosActivos']); + $routes->get('listFinalizados', 'Pedido::finalizados', ['as' => 'listaFinalizados']); + $routes->get('listCancelados', 'Pedido::cancelados', ['as' => 'listaCancelados']); $routes->post('datatable', 'Pedido::datatable', ['as' => 'dataTableOfPedidos']); $routes->get('add', 'Pedido::add', ['as' => 'nuevoPedido']); $routes->post('add', 'Pedido::add', ['as' => 'crearPedido']); @@ -629,9 +639,7 @@ $routes->group('pedidos', ['namespace' => 'App\Controllers\Pedidos'], function ( $routes->post('getlineas', 'Pedido::getLineas', ['as' => 'tablaLineasPedido']); $routes->post('cambiarestado', 'Pedido::cambiarEstado', ['as' => 'cambiarEstadoPedido']); $routes->post('update/(:any)', 'Pedido::update/$1', ['as' => 'actualizarPedido']); - $routes->get('xml/(:num)', 'Pedido::get_xml_pedido/$1',['as' => 'getXMLPedido']); - - + $routes->get('xml/(:num)', 'Pedido::get_xml_pedido/$1', ['as' => 'getXMLPedido']); }); $routes->resource('pedidos', ['namespace' => 'App\Controllers\Pedidos', 'controller' => 'Pedido', 'except' => 'show,new,create,update']); @@ -728,6 +736,19 @@ $routes->group( ); $routes->resource('buscadorpresupuestos', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Buscador', 'except' => 'show,new,create,update']); + +$routes->group( + 'papel-formato', + ['namespace' => 'App\Controllers\Configuracion'], + function ($routes) { + $routes->post('menuitems', 'Papelformato::menuitems', ['as' => 'menuitems']); + $routes->get('getSelect2', 'Papelformato::getSelect2', ['as' => 'getSelect2']); + } +); +$routes->resource('papel-formato', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Papelformato', 'except' => 'show,new,create,update']); + + + /* Rutas para mensajeria */ $routes->group('mensajes', ['namespace' => 'App\Controllers\Mensajeria'], function ($routes) { @@ -740,9 +761,7 @@ $routes->group('mensajes', ['namespace' => 'App\Controllers\Mensajeria'], functi $routes->match(['get', 'post'], 'edit/(:num)', 'TarifaAcabados::edit/$1', ['as' => 'tarifaAcabadoEdit']); $routes->get('delete/(:num)', 'TarifaAcabados::delete/$1', ['as' => 'tarifaAcabadoDelete']); $routes->post('datatable', 'TarifaAcabados::datatable', ['as' => 'tarifaAcabadoDT']);*/ - }); - }); $routes->group('chat', ['namespace' => 'App\Controllers\Chat'], function ($routes) { $routes->get('departments', 'ChatController::get_chat_departments', ['as' => 'getChatDepartments']); @@ -766,14 +785,9 @@ $routes->group('chat', ['namespace' => 'App\Controllers\Chat'], function ($route $routes->post('hebra/pedido', 'ChatController::store_hebra_pedido', ['as' => 'storeHebraPedido']); $routes->post('hebra/factura', 'ChatController::store_hebra_factura', ['as' => 'storeHebraFactura']); $routes->post('hebra/(:num)', 'ChatController::update_hebra/$1', ['as' => 'updateHebra']); - $routes->get('hebra/presupuesto/(:num)',"ChatController::get_hebra_presupuesto/$1",["as" => "getHebraPresupuesto"]); - $routes->get('hebra/pedido/(:num)',"ChatController::get_hebra_pedido/$1",["as" => "getHebraPedido"]); - $routes->get('hebra/factura/(:num)',"ChatController::get_hebra_factura/$1",["as" => "getHebraFactura"]); - - - - - + $routes->get('hebra/presupuesto/(:num)', "ChatController::get_hebra_presupuesto/$1", ["as" => "getHebraPresupuesto"]); + $routes->get('hebra/pedido/(:num)', "ChatController::get_hebra_pedido/$1", ["as" => "getHebraPedido"]); + $routes->get('hebra/factura/(:num)', "ChatController::get_hebra_factura/$1", ["as" => "getHebraFactura"]); }); @@ -789,6 +803,15 @@ $routes->group('api', ['filter' => 'jwt'], static function ($routes) { // ... }); +/* + * -------------------------------------------------------------------- + * Translation + * -------------------------------------------------------------------- + */ +$routes->group('translate', ['namespace' => 'App\Controllers'], function ($routes) { + $routes->post('getTranslation', 'Language::getTranslation', ['as' => 'getKeys']); +}); +$routes->resource('translate', ['namespace' => 'App\Controllers', 'controller' => 'Language', 'except' => '']); /* @@ -806,4 +829,4 @@ $routes->group('api', ['filter' => 'jwt'], static function ($routes) { */ if (file_exists(APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php')) { require APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php'; -} +} \ No newline at end of file diff --git a/ci4/app/Controllers/Clientes/Cliente.php b/ci4/app/Controllers/Clientes/Cliente.php index 678532c9..f388ec1f 100755 --- a/ci4/app/Controllers/Clientes/Cliente.php +++ b/ci4/app/Controllers/Clientes/Cliente.php @@ -1,4 +1,6 @@ -redirect2listView('sweet-error', $message); endif; - + if ($this->request->getPost()) : @@ -310,10 +312,9 @@ class Cliente extends \App\Controllers\BaseResourceController $onlyActiveOnes = false; $columns2select = [$reqId ?? 'id', $reqText ?? 'nombre']; $onlyActiveOnes = false; - try{ + try { $menu = $this->model->getSelect2MenuItems($columns2select, $columns2select[1], $onlyActiveOnes, $searchStr); - } - catch(Exception $e){ + } catch (Exception $e) { $menu = []; } @@ -330,6 +331,28 @@ class Cliente extends \App\Controllers\BaseResourceController } + 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("clientes.nombre", $this->request->getGet("q")) + ->groupEnd(); + } + + return $this->response->setJSON($query->get()->getResultObject()); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + protected function getPaisListItems($selId = null) { $paisModel = model('App\Models\Configuracion\PaisModel'); @@ -423,24 +446,23 @@ class Cliente extends \App\Controllers\BaseResourceController } - protected function getPrecioTemplate($cliente_id){ + protected function getPrecioTemplate($cliente_id) + { $modelPreciosCliente = model('App\Models\Clientes\ClientePreciosModel'); $plantilla_id = $modelPreciosCliente->get_plantilla_precios($cliente_id); - if (is_null($plantilla_id)){ + if (is_null($plantilla_id)) { return null; } $modelPlantillaPreciosCliente = model('App\Models\Clientes\ClientePlantillaPreciosModel'); $plantilla = $modelPlantillaPreciosCliente->where("id", $plantilla_id)->where("is_deleted", 0)->first(); - if ($plantilla == false){ + if ($plantilla == false) { return null; - } - else{ + } else { return (object)array( "value" => $plantilla_id, "label" => $plantilla->nombre ); } - } } diff --git a/ci4/app/Controllers/Clientes/Clientedirecciones.php b/ci4/app/Controllers/Clientes/Clientedirecciones.php index d37d665f..872eeeca 100755 --- a/ci4/app/Controllers/Clientes/Clientedirecciones.php +++ b/ci4/app/Controllers/Clientes/Clientedirecciones.php @@ -1,4 +1,6 @@ -viewData['breadcrumb'] = [ ['title' => lang("Clientes.direccionesEnvio"), 'route' => "javascript:void(0);", 'active' => false], - + ]; $this->viewData['comunidadAutonomaList'] = $this->getComunidadAutonomaListItems($clienteEntity->comunidad_autonoma_id ?? null); @@ -71,21 +73,22 @@ class Clientedirecciones extends \App\Controllers\BaseResourceController return view(static::$viewPath . 'viewClienteDireccionesList', $viewData); } - public function add(){ + public function add() + { if ($this->request->isAJAX()) { - + $reqData = $this->request->getPost(); $cliente_id = $reqData['cliente_id'] ?? -1; $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'] ?? ""; $telefono = $reqData['telefono'] ?? ""; $alias = $reqData['alias'] ?? ""; - + $data = [ "cliente_id" => $cliente_id, "att" => $att, @@ -99,15 +102,11 @@ class Clientedirecciones extends \App\Controllers\BaseResourceController "alias" => $alias, ]; $response = $this->model->insert($data); - - $newTokenHash = csrf_hash(); - $csrfTokenName = csrf_token(); + $data_ret = [ 'data' => $response, - $csrfTokenName => $newTokenHash ]; return $this->respond($data_ret); - } else { return $this->failUnauthorized('Invalid request', 403); } @@ -117,14 +116,14 @@ class Clientedirecciones extends \App\Controllers\BaseResourceController public function menuItems() { if ($this->request->isAJAX()) { - + $reqData = $this->request->getPost(); $cliente_id = $reqData['cliente_id'] ?? -1; - + $clienteDireccionesModel = model('App\Models\Clientes\ClienteDireccionesModel'); $menu = $clienteDireccionesModel->getMenuDirecciones($cliente_id); //$menu = $this->model->getMenuItems($cliente_id); - + $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); $data = [ @@ -138,6 +137,34 @@ class Clientedirecciones extends \App\Controllers\BaseResourceController } + public function getSelect2() + { + if ($this->request->isAJAX()) { + + $cliente_id = $this->request->getGet('cliente_id'); + + + $query = $this->model->builder()->select( + [ + "id", + "alias as name" + ] + ) + ->where("cliente_id", $cliente_id) + ->orderBy("alias", "asc"); + if ($this->request->getGet("q")) { + $query->groupStart() + ->orLike("clientes.nombre", $this->request->getGet("q")) + ->groupEnd(); + } + + return $this->response->setJSON($query->get()->getResultObject()); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function datatable() { if ($this->request->isAJAX()) { @@ -145,7 +172,7 @@ class Clientedirecciones extends \App\Controllers\BaseResourceController $tipo = $reqData['tipo'] ?? null; - if(is_null($tipo)){ + if (is_null($tipo)) { if (!isset($reqData['draw']) || !isset($reqData['columns'])) { $errstr = 'No data available in response to this specific request.'; $response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr); @@ -160,22 +187,21 @@ class Clientedirecciones extends \App\Controllers\BaseResourceController $id_C = $reqData['cliente_id'] ?? -1; - + $resourceData = $this->model->getResource($search, $id_C)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); - + return $this->respond(Collection::datatable( $resourceData, $this->model->getResource()->countAllResults(), $this->model->getResource("", $id_C)->countAllResults() )); - } - else{ + } else { $id = $reqData['id'] ?? -1; $resourceData = $this->model->getDireccion($id); - + return $this->respond($resourceData); } @@ -184,6 +210,44 @@ class Clientedirecciones extends \App\Controllers\BaseResourceController } } + + public function get($id) + { + try { + $resourceData = $this->model->getDireccion($id); + $response = (object)[ + 'error' => false, + 'data' => $resourceData + ]; + return $this->respond($response); + } catch (\Exception $e) { + $response = (object)[ + 'error' => true, + 'message' => $e->getMessage() + ]; + return $this->fail($response); + } + } + + public function getDireccionPresupuesto($id) + { + try { + $model = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); + $resourceData = $model->getDireccion($id); + $response = (object)[ + 'error' => false, + 'data' => $resourceData + ]; + return $this->respond($response); + } catch (\Exception $e) { + $response = (object)[ + 'error' => true, + 'message' => $e->getMessage() + ]; + return $this->fail($response); + } + } + public function datatable_editor() { if ($this->request->isAJAX()) { @@ -194,72 +258,116 @@ class Clientedirecciones extends \App\Controllers\BaseResourceController $response = Editor::inst($db, 'cliente_direcciones') ->fields( Field::inst('att') - ->validator('Validate::notEmpty', array( - 'message' => lang('ClienteDirecciones.validation.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('ClienteDirecciones.validation.required') + ) ) - ->validator( Validate::maxLen( 100 ) , array( - 'message' => lang('ClienteDirecciones.validation.max_length')) - ), + ->validator( + Validate::maxLen(100), + array( + 'message' => lang('ClienteDirecciones.validation.max_length') + ) + ), Field::inst('alias') - ->validator('Validate::notEmpty', array( - 'message' => lang('ClienteDirecciones.validation.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('ClienteDirecciones.validation.required') + ) ) - ->validator( Validate::maxLen( 100 ) , array( - 'message' => lang('ClienteDirecciones.validation.max_length')) - ), + ->validator( + Validate::maxLen(100), + array( + 'message' => lang('ClienteDirecciones.validation.max_length') + ) + ), Field::inst('email') - ->validator('Validate::notEmpty', array( - 'message' => lang('ClienteDirecciones.validation.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('ClienteDirecciones.validation.required') + ) ) - ->validator( Validate::maxLen( 100 ) , array( - 'message' => lang('ClienteDirecciones.validation.max_length')) - ), + ->validator( + Validate::maxLen(100), + array( + 'message' => lang('ClienteDirecciones.validation.max_length') + ) + ), Field::inst('direccion') - ->validator('Validate::notEmpty', array( - 'message' => lang('ClienteDirecciones.validation.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('ClienteDirecciones.validation.required') + ) ) - ->validator( Validate::maxLen( 255 ) , array( - 'message' => lang('ClienteDirecciones.validation.max_length')) - ), + ->validator( + Validate::maxLen(255), + array( + 'message' => lang('ClienteDirecciones.validation.max_length') + ) + ), Field::inst('municipio') - ->validator('Validate::notEmpty', array( - 'message' => lang('ClienteDirecciones.validation.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('ClienteDirecciones.validation.required') + ) ) - ->validator( Validate::maxLen( 100 ) , array( - 'message' => lang('ClienteDirecciones.validation.max_length')) - ), + ->validator( + Validate::maxLen(100), + array( + 'message' => lang('ClienteDirecciones.validation.max_length') + ) + ), Field::inst('cp') - ->validator('Validate::notEmpty', array( - 'message' => lang('ClienteDirecciones.validation.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('ClienteDirecciones.validation.required') + ) ) - ->validator( Validate::maxLen( 20 ) , array( - 'message' => lang('ClienteDirecciones.validation.max_length')) - ), + ->validator( + Validate::maxLen(20), + array( + 'message' => lang('ClienteDirecciones.validation.max_length') + ) + ), Field::inst('telefono') - ->validator('Validate::notEmpty', array( - 'message' => lang('ClienteDirecciones.validation.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('ClienteDirecciones.validation.required') + ) ) - ->validator( Validate::maxLen( 40 ) , array( - 'message' => lang('ClienteDirecciones.validation.max_length')) - ), + ->validator( + Validate::maxLen(40), + array( + 'message' => lang('ClienteDirecciones.validation.max_length') + ) + ), Field::inst('provincia') - ->validator( function ( $val, $data, $field, $host ) { - if ($data['pais_id'] == 1) { // Si es españa provincia y CCAA es obligatorio - if (strlen( $val ) > 100) - return lang('ClienteDirecciones.validation.max_length'); - else if (strlen( $val ) == 0) - lang('ClienteDirecciones.validation.required'); - else - return true; + ->validator( + function ($val, $data, $field, $host) { + if ($data['pais_id'] == 1) { // Si es españa provincia y CCAA es obligatorio + if (strlen($val) > 100) + return lang('ClienteDirecciones.validation.max_length'); + else if (strlen($val) == 0) + lang('ClienteDirecciones.validation.required'); + else + return true; + } + return true; } - return true; - } - ), + ), Field::inst('pais_id')->validator('Validate::notEmpty', array( - 'message' => lang('ClienteDirecciones.validation.required'))), + 'message' => lang('ClienteDirecciones.validation.required') + )), Field::inst('cliente_id'), ) - + ->debug(true) ->process($_POST) ->data(); @@ -270,7 +378,6 @@ class Clientedirecciones extends \App\Controllers\BaseResourceController $response[$csrfTokenName] = $newTokenHash; echo json_encode($response); - } else { return $this->failUnauthorized('Invalid request', 403); } diff --git a/ci4/app/Controllers/Configuracion/ConfigVariables.php b/ci4/app/Controllers/Configuracion/ConfigVariables.php index 23c8c96d..1455c93c 100644 --- a/ci4/app/Controllers/Configuracion/ConfigVariables.php +++ b/ci4/app/Controllers/Configuracion/ConfigVariables.php @@ -33,7 +33,6 @@ class ConfigVariables extends BaseResourceController parent::initController($request, $response, $logger); $this->configVariableModel = model(ConfigVariableModel::class); - } @@ -48,45 +47,46 @@ class ConfigVariables extends BaseResourceController return view(static::$viewPath . $this->indexRoute, $viewData); } - public function store(){ + public function store() + { $data = []; $variableCreated = $this->configVariableModel->store($data); return $this->response->setJSON($variableCreated); } - public function get(int $config_variable_id){ + public function get(int $config_variable_id) + { $data = $this->configVariableModel->find($config_variable_id); return $this->response->setJSON($data); } - public function updateVariable(int $config_variable_id){ + public function updateVariable(int $config_variable_id) + { $reqData = []; if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); - $status = $this->configVariableModel->update($config_variable_id,$reqData); + $status = $this->configVariableModel->update($config_variable_id, $reqData); return $this->response->setJSON([ "message" => "Variable actualizada correctamente", "status" => $status ]); - } - else { + } else { return $this->failUnauthorized('Invalid request', 403); } } public function deleteVariable(int $config_variable_id): Response { return $this->response->setJSON([]); - } - public function datatable(){ + public function datatable() + { $query = $this->configVariableModel->builder()->select([ "id", "name", "value", - "description"])->orderBy("name","asc"); + "description" + ])->orderBy("name", "asc"); return DataTable::of($query) - ->add("action",fn($q) => $q->id) - ->toJson(true); + ->add("action", fn($q) => $q->id) + ->toJson(true); } - - } \ No newline at end of file diff --git a/ci4/app/Controllers/Configuracion/Maquinastarifasimpresion.php b/ci4/app/Controllers/Configuracion/Maquinastarifasimpresion.php index d7fe1bbc..4d090cb4 100755 --- a/ci4/app/Controllers/Configuracion/Maquinastarifasimpresion.php +++ b/ci4/app/Controllers/Configuracion/Maquinastarifasimpresion.php @@ -1,4 +1,5 @@ -request->getPost()) : + + if ($this->request->getPost()): $nullIfEmpty = true; // !(phpversion() >= '8.1'); @@ -81,10 +82,10 @@ class Maquinastarifasimpresion extends \App\Controllers\BaseResourceController $noException = true; - 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)->save($sanitizedData); } catch (\Exception $e) { @@ -98,14 +99,14 @@ class Maquinastarifasimpresion extends \App\Controllers\BaseResourceController $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); else: return $this->redirect2listView('sweet-success', $message); @@ -129,25 +130,25 @@ class Maquinastarifasimpresion extends \App\Controllers\BaseResourceController return $this->displayForm(__METHOD__); } // end function add() - + public function edit($requestedId = null) { - if ($requestedId == null) : + if ($requestedId == null): return $this->redirect2listView(); endif; $id = filter_var($requestedId, FILTER_SANITIZE_URL); $maquinasTarifasImpresion = $this->model->find($id); - if ($maquinasTarifasImpresion == false) : + if ($maquinasTarifasImpresion == false): $message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('MaquinasTarifasImpresions.maquinasTarifaImpresion')), $id]); return $this->redirect2listView('sweet-error', $message); endif; - - if ($this->request->getPost()) : + + if ($this->request->getPost()): $nullIfEmpty = true; // !(phpversion() >= '8.1'); @@ -160,10 +161,10 @@ class Maquinastarifasimpresion extends \App\Controllers\BaseResourceController $noException = true; - 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) { @@ -180,12 +181,12 @@ class Maquinastarifasimpresion extends \App\Controllers\BaseResourceController $thenRedirect = false; endif; - if ($noException && $successfulResult) : + if ($noException && $successfulResult): $id = $maquinasTarifasImpresion->id ?? $id; $message = lang('Basic.global.updateSuccess', [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); else: return $this->redirect2listView('sweet-success', $message); @@ -220,30 +221,48 @@ class Maquinastarifasimpresion extends \App\Controllers\BaseResourceController $response = Editor::inst($db, 'lg_maquinas_tarifas_impresion') ->fields( Field::inst('uso') - ->validator('Validate::notEmpty', array( - 'message' => lang('MaquinasTarifasImpresions.validation.uso.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('MaquinasTarifasImpresions.validation.uso.required') + ) ), Field::inst('tipo') - ->validator('Validate::notEmpty', array( - 'message' => lang('MaquinasTarifasImpresions.validation.tipo.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('MaquinasTarifasImpresions.validation.tipo.required') + ) ), Field::inst('precio') - ->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar') - ->validator('Validate::numeric', array( + ->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar') + ->validator( + 'Validate::numeric', + array( "decimal" => ',', - 'message' => lang('MaquinasTarifasImpresions.validation.precio.decimal')) + 'message' => lang('MaquinasTarifasImpresions.validation.precio.decimal') + ) ) - ->validator('Validate::notEmpty', array( - 'message' => lang('MaquinasTarifasImpresions.validation.tipo.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('MaquinasTarifasImpresions.validation.tipo.required') + ) ), Field::inst('margen') - ->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar') - ->validator('Validate::numeric', array( + ->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar') + ->validator( + 'Validate::numeric', + array( "decimal" => ',', - 'message' => lang('MaquinasTarifasImpresions.validation.precio.decimal')) + 'message' => lang('MaquinasTarifasImpresions.validation.precio.decimal') + ) ) - ->validator('Validate::notEmpty', array( - 'message' => lang('MaquinasTarifasImpresions.validation.tipo.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('MaquinasTarifasImpresions.validation.tipo.required') + ) ), Field::inst('maquina_id'), Field::inst('user_created_id'), @@ -269,16 +288,21 @@ class Maquinastarifasimpresion extends \App\Controllers\BaseResourceController 'maquina_id' => $values['maquina_id'], 'tipo' => $values['tipo'], 'uso' => $values['uso'], - 'is_deleted' => 0)); + 'is_deleted' => 0 + )); - $id = $builder->get()->getFirstRow()->id; + $id = $builder->get()->getFirstRow(); + if ($id) { + $id = $id->id; + // No se pueden duplicar valores al crear o al editar + if ($builder->countAllResults() >= 1) { + if ( + ($action === Editor::ACTION_EDIT && $id != $pkey) + || $action === Editor::ACTION_CREATE + ) { - // No se pueden duplicar valores al crear o al editar - if ($builder->countAllResults() >= 1) { - if (($action === Editor::ACTION_EDIT && $id != $pkey) - || $action === Editor::ACTION_CREATE) { - - return lang('MaquinasTarifasImpresions.validation.duplicated_uso_tipo'); + return lang('MaquinasTarifasImpresions.validation.duplicated_uso_tipo'); + } } } } @@ -413,11 +437,11 @@ class Maquinastarifasimpresion extends \App\Controllers\BaseResourceController protected function getMaquinaListItems($selId = null) { $data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Maquinas.maquina'))])]; - if (!empty($selId)) : + if (!empty($selId)): $maquinaModel = model('App\Models\Configuracion\MaquinaModel'); $selOption = $maquinaModel->where('id', $selId)->findColumn('nombre'); - if (!empty($selOption)) : + if (!empty($selOption)): $data[$selId] = $selOption[0]; endif; endif; diff --git a/ci4/app/Controllers/Configuracion/Papelformato.php b/ci4/app/Controllers/Configuracion/Papelformato.php index 4c55dff7..b2b23276 100755 --- a/ci4/app/Controllers/Configuracion/Papelformato.php +++ b/ci4/app/Controllers/Configuracion/Papelformato.php @@ -244,23 +244,15 @@ class Papelformato extends \App\Controllers\BaseResourceController { public function menuItems() { if ($this->request->isAJAX()) { - $searchStr = goSanitize($this->request->getPost('searchTerm'))[0]; - $reqId = goSanitize($this->request->getPost('id'))[0]; - $reqText = goSanitize($this->request->getPost('text'))[0]; - $onlyActiveOnes = false; - $columns2select = [$reqId ?? 'id', $reqText ?? 'ancho']; - $onlyActiveOnes = false; - $menu = $this->model->getSelect2MenuItems($columns2select, $columns2select[1], $onlyActiveOnes, $searchStr); - $nonItem = new \stdClass; - $nonItem->id = ''; - $nonItem->text = '- '.lang('Basic.global.None').' -'; - array_unshift($menu , $nonItem); - - $newTokenHash = csrf_hash(); - $csrfTokenName = csrf_token(); + $papelFormatoModel = model('App\Models\Configuracion\PapelFormatoModel'); + $searchStr = goSanitize($this->request->getPfgost('searchTerm'))[0]; + $menu = $papelFormatoModel->getElementsForMenu2($searchStr); + if(empty(($searchStr))) + array_shift($menu); + $data = [ 'menu' => $menu, - $csrfTokenName => $newTokenHash + ]; return $this->respond($data); } else { @@ -268,4 +260,15 @@ class Papelformato extends \App\Controllers\BaseResourceController { } } + + public function getSelect2() + { + if ($this->request->isAJAX()) { + $data = $this->model->getElementsForMenu2($this->request->getGet("q")); + + return $this->response->setJSON($data); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } } diff --git a/ci4/app/Controllers/Language.php b/ci4/app/Controllers/Language.php index cd2b062e..437f18eb 100755 --- a/ci4/app/Controllers/Language.php +++ b/ci4/app/Controllers/Language.php @@ -15,4 +15,15 @@ class Language extends BaseController $url = previous_url(); return redirect()->to($url); } + + + // Function to get the translation of the language file from a AJAX request + public function getTranslation() + { + $translationFile = $this->request->getPost('translationFile'); + $locale = $this->request->getPost('locale'); + $path = "Language/{$locale}/$translationFile.php"; + $lang = require APPPATH.$path; + return json_encode($lang); + } } diff --git a/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php b/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php index f5a26275..fa04075c 100755 --- a/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php +++ b/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php @@ -1278,8 +1278,8 @@ class Cosidotapablanda extends \App\Controllers\BaseResourceController $input_data['is_duplicado'] = $presupuestoEntity->is_duplicado; if($presupuestoEntity->papel_formato_personalizado){ - $input_data['ancho'] = $presupuestoEntity->ancho; - $input_data['alto'] = $presupuestoEntity->alto; + $input_data['ancho'] = $presupuestoEntity->papel_formato_ancho ; + $input_data['alto'] = $presupuestoEntity->papel_formato_alto ; } else{ $model = model("App\Models\Configuracion\PapelFormatoModel"); diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index 0be955ff..68c93493 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -5,6 +5,8 @@ namespace App\Controllers\Presupuestos; use App\Entities\Presupuestos\PresupuestoEntity; use App\Libraries\SafekatFtpClient; use App\Models\Collection; +use App\Models\Clientes\ClienteModel; +use App\Models\Configuracion\PapelFormatoModel; use App\Models\Configuracion\PapelGenericoModel; use App\Models\Configuracion\TipoPresupuestoModel; use App\Models\Presupuestos\PresupuestoAcabadosModel; @@ -15,6 +17,7 @@ use App\Models\Presupuestos\PresupuestoManipuladosModel; use App\Models\Presupuestos\PresupuestoModel; use App\Models\Presupuestos\PresupuestoPreimpresionesModel; use App\Models\Presupuestos\PresupuestoServiciosExtraModel; +use App\Models\Presupuestos\ErrorPresupuesto; use App\Services\PresupuestoClienteService; use App\Services\PresupuestoService; use Exception; @@ -89,47 +92,35 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController public function add() { + $this->viewData['breadcrumb'] = [ + ['title' => lang("App.menu_presupuestos"), 'route' => "javascript:void(0);", 'active' => false], + ['title' => "Listado", 'route' => site_url('presupuestocliente/list'), 'active' => true] + ]; + // Se obtiene el cliente ID a partir del usuario de la sesion $model_user = model('App\Models\Usuarios\UserModel'); + $user = $model_user->find(auth()->user()->id); $clienteId = $user->cliente_id; - - $presupuestoEntity = isset($sanitizedData) ? new PresupuestoEntity($sanitizedData) : new PresupuestoEntity(); - $presupuestoEntity->clienteId = $clienteId; - $datosPresupuesto = (object)array(); - $datosPresupuesto->POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD(); - $datosPresupuesto->paisList = model('App\Models\Configuracion\PaisModel')->getAllForMenu('id, nombre', 'nombre', true); - $datosPresupuesto->papelFormatoList = $this->getPapelFormatoListItems($presupuestoEntity->papel_formato_id ?? null); + if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) { + if ($clienteId === false || $clienteId === null) { + return $this->failNotFound('Su usuario no tiene asociado un cliente de Safekat. Póngase en contacto con el administrador.'); + } + } - $datosPresupuesto->papelInteriorNegro = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('negro', false, false, false, false, true); - $datosPresupuesto->papelInteriorNegroHq = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('negrohq', false, false, false, false, true); - $datosPresupuesto->papelInteriorColor = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('color', false, false, false, false, true); - $datosPresupuesto->papelInteriorColorHq = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, false, false, false, true); + $POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD(); - $datosPresupuesto->papelCubierta = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', true, false, false, false, true); - $datosPresupuesto->papelSobrecubierta = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, true, false, false, true); - $datosPresupuesto->papelGuardas = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, false, false, true, false); - - $datosPresupuesto->acabadosCubierta = $this->getAcabadosCubierta(); - $datosPresupuesto->acabadosSobrecubierta = $this->getAcabadosSobrecubierta(); - - $datosPresupuesto->tipo_libro = ""; - $datosPresupuesto->color_impresion = 'negro'; - $datosPresupuesto->tapa = 'blanda'; - - $datosPresupuesto->clienteList = $this->getClienteListItems($clienteId ?? null); - $datosPresupuesto->paginasCuadernillo = [32, 28, 24, 20 , 16]; - $presupuestoEntity->estado_id = 1; - $presupuestoEntity->paginas_por_cuadernillo = 32; + $this->viewData['breadcrumb'] = [ + ['title' => lang("App.menu_presupuestos"), 'route' => site_url('presupuestocliente/list'), 'active' => false], + ['title' => "Añadir Presupuesto", 'route' => "javascript:void(0);", 'active' => true] + ]; $this->viewData['formAction'] = 'add'; - $this->viewData['paisList'] = $this->getPaisListItems(); - - $this->viewData['presupuestoEntity'] = $presupuestoEntity; - $this->viewData['datosPresupuesto'] = $datosPresupuesto; + $this->viewData['paisList'] = model('App\Models\Configuracion\PaisModel')->getAllForMenu('id, nombre', 'nombre', true); $this->viewData['clienteId'] = $clienteId; + $this->viewData['POD'] = $POD; $this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . $this->viewData['pageTitle'] . ' ' . lang('Basic.global.addNewSuffix'); @@ -139,13 +130,13 @@ class Presupuestocliente 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; @@ -153,60 +144,29 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController // Se obtiene el cliente ID a partir del usuario de la sesion $model_user = model('App\Models\Usuarios\UserModel'); $user = $model_user->find(auth()->user()->id); - $clienteId = $user->cliente_id; - - $datosPresupuesto = (object)array(); - $datosPresupuesto->POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD(); - $datosPresupuesto->paisList = model('App\Models\Configuracion\PaisModel')->getAllForMenu('id, nombre', 'nombre', true); - $datosPresupuesto->papelFormatoList = $this->getPapelFormatoListItems($presupuestoEntity->papel_formato_id ?? null); - - $datosPresupuesto->papelInteriorNegro = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('negro', false, false, false, false, true); - $datosPresupuesto->papelInteriorNegroHq = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('negrohq', false, false, false, false, true); - $datosPresupuesto->papelInteriorColor = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('color', false, false, false, false, true); - $datosPresupuesto->papelInteriorColorHq = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, false, false, false, true); - - $datosPresupuesto->papelCubierta = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', true, false, false, false, true); - $datosPresupuesto->papelSobrecubierta = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, true, false, false, true); - $datosPresupuesto->papelGuardas = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, false, false, true, false); - - $datosPresupuesto->acabadosCubierta = $this->getAcabadosCubierta(); - $datosPresupuesto->acabadosSobrecubierta = $this->getAcabadosSobrecubierta(); - - $datosPresupuesto->tipo_libro = $this->getTipoLibro($presupuestoEntity->tipo_impresion_id ?? null); - $datosPresupuesto->color_impresion = - $this->getTipoInterior($presupuestoEntity->id ?? null); - $datosPresupuesto->tapa = $this->getTapa($presupuestoEntity->tipo_impresion_id ?? null); - - $datosPresupuesto->clienteList = $this->getClienteListItems($presupuestoEntity->cliente_id ?? null); - - $this->obtenerTiradas($presupuestoEntity); - $this->obtenerDatosPapel($presupuestoEntity); - $this->obtenerPaginasColor($presupuestoEntity); - $this->obtenerDireccionesEnvio($presupuestoEntity); - - // Si el presupuesto está confirmado, se generan los datos del resumen - if($presupuestoEntity->estado_id == 2){ - $this->generarResumen($presupuestoEntity); + if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) { + $clienteId = $user->cliente_id; + if ($clienteId === false || $clienteId === null) { + return $this->failNotFound('Su usuario no tiene asociado un cliente de Safekat. Póngase en contacto con el administrador.'); + } + } else { + $clienteId = $presupuestoEntity->cliente_id; } - $datosPresupuesto->paginasCuadernillo = [32, 28, 24, 20 , 16]; - $presupuestoEntity->paginas_por_cuadernillo = $this->obtenerPaginasCuadernillo($presupuestoEntity); - $this->viewData['formAction'] = 'edit'; $this->viewData['paisList'] = $this->getPaisListItems(); - $this->viewData['presupuestoEntity'] = $presupuestoEntity; - $this->viewData['datosPresupuesto'] = $datosPresupuesto; - $this->viewData['clienteId'] = $presupuestoEntity->cliente_id; // En el caso del edit, se mantiene el clienteId del presupuesto - + $this->viewData['clienteId'] = $clienteId; + $this->viewData['POD'] = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD(); // 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) { $this->model->removeIsDuplicado($presupuestoEntity->id); } - - + + $this->viewData['presupuestoId'] = $presupuestoEntity->id; + $this->viewData['state'] = intval($presupuestoEntity->estado_id); $this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . $this->viewData['pageTitle'] . ' ' . lang('Basic.global.edit3'); return $this->displayForm(__METHOD__, $id); @@ -237,7 +197,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $datetime = (new \CodeIgniter\I18n\Time("now")); $rawResult = $this->model->where('id', $id) ->set([ - 'deleted_at' => $datetime->format('Y-m-d H:i:s'), + 'deleted_at' => $datetime->format('Y-m-d H:i:s'), 'is_deleted' => $this->delete_flag ]) ->update(); @@ -255,40 +215,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } - public function getGramaje() - { - if ($this->request->isAJAX()) { - $reqData = $this->request->getPost(); - - try { - $newTokenHash = csrf_hash(); - $csrfTokenName = csrf_token(); - - $tirada = $reqData['tirada'] ?? 0; - $merma = $reqData['merma'] ?? 0; - $papel = $reqData['papel'] ?? ""; - $uso = $reqData['uso'] ?? ""; - - $model = new PapelGenericoModel(); - $menu = $model->getGramajeComparador($papel, $uso, intval($tirada + $merma)); - - $data = [ - 'menu' => $menu, - $csrfTokenName => $newTokenHash - ]; - } catch (Exception $e) { - $data = [ - 'error' => $e, - $csrfTokenName => $newTokenHash - ]; - } finally { - return $this->respond($data); - } - } else { - return $this->failUnauthorized('Invalid request', 403); - } - } public function datatable() { @@ -334,83 +261,208 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController - public function presupuesto() + public function calcular() { if ($this->request->isAJAX()) { - $reqData = $this->request->getPost(); - $newTokenHash = csrf_hash(); - $csrfTokenName = csrf_token(); + try { - $tirada = $reqData['tirada'] ?? 0; - $tamanio = $reqData['tamanio']; - $tipo_impresion_id = $this->getTipoImpresion($reqData['tipo'], $reqData['tapa']); - $cliente_id = $reqData['clienteId'] ?? -1; - $isColor = intval($reqData['isColor']) ?? 0; - $isHq = intval($reqData['isHq']) ?? 0; + $reqData = $this->request->getPost(); + $modelPapelGenerico = new PapelGenericoModel(); - // Interior - $papel_generico = [ - 'id' => $reqData['papelInterior'] ?? 0, - 'nombre' => $reqData['papelInteriorNombre'] ?? "", - ]; - $gramaje = $reqData['gramajeInterior'] ?? 0; - $excluirRotativa = $reqData['excluirRotativa'] ?? 0; - $paginas = intval($reqData['paginas']) ?? 0; - $paginas_color = intval($reqData['paginasColor']) ?? 0; - // Cubierta - $papel_generico_cubierta = [ - 'id' => $reqData['papelCubierta'] ?? 0, - 'nombre' => $reqData['papelCubiertaNombre'] ?? "", - ]; - $gramajeCubierta = $reqData['gramajeCubierta'] ?? 0; - $carasCubierta = intval($reqData['carasCubierta'] ?? 0); - $solapasCubierta = intval($reqData['solapasCubierta'] ?? 0); - $acabadoCubierta = $reqData['acabadoCubierta'] ?? 0; + $id = $reqData['id'] ?? 0; - // Sobrecubierta - $sobreCubierta = $reqData["sobrecubierta"] ?? null; + $cliente_id = $reqData['clienteId'] ?? -1; - // Guardas - $datos_guardas = $reqData['guardas'] ?? []; + $tirada = $reqData['tirada'] ?? 0; + $tamanio = $reqData['tamanio']; + $paginas = $reqData['paginas'] ?? 0; + $paginas_color = $reqData['paginasColor'] ?? 0; + $tipo = $reqData['tipo']; - $servicios = $reqData['servicios'] ?? []; + $paginasCuadernillo = $reqData['paginasCuadernillo'] ?? null; + $papelInteriorDiferente = intval($reqData['papelInteriorDiferente']) ?? null; - $paginasCuadernillo = $reqData['paginasCuadernillo'] ?? null; + $isColor = intval($reqData['isColor']) ?? 0; + $isHq = intval($reqData['isHq']) ?? 0; - $datos_presupuesto = array( - 'tirada' => $tirada, - 'tamanio' => $tamanio, - 'tipo_impresion_id' => $tipo_impresion_id, - 'clienteId' => $cliente_id, - 'isColor' => $isColor, - 'isHq' => $isHq, - 'paginasCuadernillo' => $paginasCuadernillo, + $interior = $reqData['interior'] ?? []; + $cubierta = $reqData['cubierta'] ?? []; + $sobrecubierta = $reqData['sobrecubierta'] ?? []; + $guardas = $reqData['guardas'] ?? []; + $faja = $reqData['faja'] ?? []; + $excluirRotativa = $reqData['excluirRotativa'] ?? 0; + $excluirRotativa = intval($excluirRotativa); + $ivaReducido = intval($reqData['ivaReducido']) ?? 0; - 'interior' => array( - 'papel_generico' => $papel_generico, + $direcciones = $reqData['direcciones'] ?? []; + + $tipo_impresion_id = $this->getTipoImpresion($tipo, $cubierta['tipoCubierta']); + $lomoRedondo = $cubierta['lomoRedondo'] ?? 0; + + if ($papelInteriorDiferente) { + $papel['negro'] = $modelPapelGenerico->getIdFromCode($interior['papelInterior']['negro']); + $papel['color'] = $modelPapelGenerico->getIdFromCode($interior['papelInterior']['color']); + $gramaje['negro'] = intval($interior['gramajeInterior']['negro']); + $gramaje['color'] = intval($interior['gramajeInterior']['color']); + } else { + $papel = $modelPapelGenerico->getIdFromCode($interior['papelInterior']); + $gramaje = intval($interior['gramajeInterior']); + } + // Interior + $interior = [ + 'papel_generico' => $papel, 'gramaje' => $gramaje, 'excluirRotativa' => $excluirRotativa, 'paginas' => $paginas, 'paginas_color' => $paginas_color, - ), - 'cubierta' => array( - 'papel_generico_cubierta' => $papel_generico_cubierta, - 'gramajeCubierta' => $gramajeCubierta, - 'carasCubierta' => $carasCubierta, - 'solapasCubierta' => $solapasCubierta, - ), - 'acabadoCubierta' => $acabadoCubierta, - 'sobrecubierta' => $sobreCubierta, - 'datos_guardas' => $datos_guardas, - 'servicios' => $servicios, - ); + 'papelInteriorDiferente' => $papelInteriorDiferente + ]; - $return_data = $this->calcular_presupuesto($datos_presupuesto, 0, false); //TRUE FOR DEBUG - array_merge($return_data, [$csrfTokenName => $newTokenHash]); - return $this->respond($return_data); + // Cubierta + $cubierta = [ + 'papel_generico_cubierta' => $modelPapelGenerico->getIdFromCode($cubierta['papelCubierta']), + 'gramajeCubierta' => intval($cubierta['gramajeCubierta']), + 'carasCubierta' => intval($cubierta['carasImpresion'] ?? 0), + 'solapasCubierta' => intval($cubierta['solapas'] ?? 0), + 'acabadosCubierta' => $cubierta['acabados'] ?? 0, + 'lomoRedondo' => $lomoRedondo, + ]; + + // Sobrecubierta + if ($sobrecubierta != "false" && $sobrecubierta != null) { + $sobrecubierta = [ + 'papel' => $modelPapelGenerico->getIdFromCode($sobrecubierta['papel']), + 'gramaje' => intval($sobrecubierta['gramaje']), + 'solapas' => intval($sobrecubierta['solapas'] ?? 0), + 'acabados' => $sobrecubierta['plastificado'] ?? 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; + } + } + + if (array_key_exists('exception', $return_data)) { + return $this->failServerError( + $return_data['exception'] . ' - ' . + $return_data['file'] . ' - ' . $return_data['line'] + ); + } + + if (count($direcciones) > 1) { + + for ($i = 0; $i < count($tirada); $i++) { + + $coste_envio = 0.0; + foreach ($direcciones as $direccion) { + $coste_direccion = $this->getCosteEnvio( + $direccion['id'], + $return_data['peso'][$i], + $direccion['unidades'], + $direccion['entregaPalets'] == 'true' ? 1 : 0 + )[0]; + + + 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); + } + } else { + + for ($i = 0; $i < count($tirada); $i++) { + + $coste_envio = 0.0; + $coste_direccion = $this->getCosteEnvio(null, $return_data['peso'][$i], $tirada[$i], false)[0]; + + 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 + ); + $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 $this->respond($return_data); + } catch (Exception $e) { + return $this->failServerError($e->getMessage()); + } } else { return $this->failUnauthorized('Invalid request', 403); } @@ -438,30 +490,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - public function getDatosDireccion() - { - if ($this->request->isAJAX()) { - - $newTokenHash = csrf_hash(); - $csrfTokenName = csrf_token(); - - $reqData = $this->request->getPost(); - $direccionId = $reqData['id'] ?? 0; - $peso = $reqData['peso'] ?? 0; - $unidades = $reqData['unidades'] ?? 0; - $entregaPieCalle = $reqData['entregaPieCalle'] ?? 0; - - $data = $this->calcular_coste_envio($direccionId, $peso, $unidades, $entregaPieCalle); - - return $this->respond([ - 'data' => $data, - $csrfTokenName => $newTokenHash - ]); - } else { - return $this->failUnauthorized('Invalid request', 403); - } - } public function getNuevaDireccion() { @@ -500,7 +529,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - public function duplicarPresupuesto(){ + public function duplicarPresupuesto() + { if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); @@ -510,61 +540,60 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $id = $reqData['id'] ?? 0; - if($id > 0){ - try{ - + if ($id > 0) { + try { + $presupuesto = $this->model->find($id); - $presupuesto->titulo = $presupuesto->titulo .' - ' . lang('Presupuestos.duplicado'); + $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 $this->respond([ 'success' => true, 'id' => $new_id, $csrfTokenName => $newTokenHash ]); - - }catch(\Exception $e){ + } catch (\Exception $e) { return $this->respond([ 'success' => false, 'message' => $e->getMessage(), @@ -577,68 +606,117 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'success' => false, 'message' => "No existe el presupuesto", $csrfTokenName => $newTokenHash - + ]); - } else { return $this->failUnauthorized('Invalid request', 403); } } - public function guardarPresupuesto() + public function guardar() { if ($this->request->isAJAX()) { + $modelPapelGenerico = new PapelGenericoModel(); + $reqData = $this->request->getPost(); - $newTokenHash = csrf_hash(); - $csrfTokenName = csrf_token(); - - $confirmar = $reqData['confirmar'] ?? 0; - $id = $reqData['id'] ?? 0; $id = intval($id); - $datosCabecera = $reqData['datos_cabecera'] ?? []; + $datosCabecera = $reqData['datosCabecera'] ?? []; - $tirada = $reqData['datos_libro']['tirada'] ?? 0; - $selected_tirada = $reqData['tirada'] ?? 0; - $peso_libro = $reqData['peso'] ?? 0; - $tamanio = $reqData['datos_libro']['tamanio']; - $tipo_impresion_id = $this->getTipoImpresion($reqData['datos_libro']['tipo'], $reqData['datos_libro']['tapa']); - $cliente_id = $reqData['datos_libro']['clienteId'] ?? -1; - $isColor = intval($reqData['datos_libro']['isColor']) ?? 0; - $isHq = intval($reqData['datos_libro']['isHq']) ?? 0; - $paginasCuadernillo = $reqData['datos_libro']['paginasCuadernillo'] ?? null; + $confirmar = $reqData['confirmar'] ?? 0; + $confirmar = intval($confirmar); + $cliente_id = $reqData['clienteId'] ?? -1; + + $tirada = $reqData['tirada'] ?? 0; + $selected_tirada = $reqData['selectedTirada'] ?? 0; + $tamanio = $reqData['tamanio']; + $paginas = $reqData['paginas'] ?? 0; + $paginas_color = $reqData['paginasColor'] ?? 0; + + $posPaginasColor = $reqData['posPaginasColor'] ?? ""; + $paginasColorConsecutivas = $reqData['pagColorConsecutivas'] ?? 0; + $papelInteriorDiferente = $reqData['papelInteriorDiferente'] ?? 0; + + $tipo = $reqData['tipo']; + + $paginasCuadernillo = $reqData['paginasCuadernillo'] ?? null; + $papelInteriorDiferente = intval($reqData['papelInteriorDiferente']) ?? null; + + $isColor = intval($reqData['isColor']) ?? 0; + $isHq = intval($reqData['isHq']) ?? 0; + + $prototipo = intval($reqData['prototipo']) ?? 0; + + $interior = $reqData['interior'] ?? []; + $cubierta = $reqData['cubierta'] ?? []; + $sobrecubierta = $reqData['sobrecubierta'] ?? []; + $guardas = $reqData['guardas'] ?? []; + $faja = $reqData['faja'] ?? []; + $excluirRotativa = $reqData['excluirRotativa'] ?? 0; + $excluirRotativa = intval($excluirRotativa); + $ivaReducido = intval($reqData['ivaReducido']) ?? 0; + + $direcciones = $reqData['direcciones'] ?? []; + + $tipo_impresion_id = $this->getTipoImpresion($tipo, $cubierta['tipoCubierta']); + + if ($papelInteriorDiferente) { + $papel['negro'] = $modelPapelGenerico->getIdFromCode($interior['papelInterior']['negro']); + $papel['color'] = $modelPapelGenerico->getIdFromCode($interior['papelInterior']['color']); + $gramaje['negro'] = intval($interior['gramajeInterior']['negro']); + $gramaje['color'] = intval($interior['gramajeInterior']['color']); + } else { + $papel = $modelPapelGenerico->getIdFromCode($interior['papelInterior']); + $gramaje = intval($interior['gramajeInterior']); + } // Interior - $papel_generico = [ - 'id' => $reqData['datos_libro']['papelInterior'] ?? 0, - 'nombre' => $reqData['datos_libro']['papelInteriorNombre'] ?? "", + $interior = [ + 'papel_generico' => $papel, + 'gramaje' => $gramaje, + 'excluirRotativa' => $excluirRotativa, + 'paginas' => $paginas, + 'paginas_color' => $paginas_color, + 'pos_paginas_color' => $posPaginasColor, + 'paginas_color_consecutivas' => $paginasColorConsecutivas, + 'papelInteriorDiferente' => $papelInteriorDiferente ]; - $gramaje = $reqData['datos_libro']['gramajeInterior'] ?? 0; - $excluirRotativa = $reqData['datos_libro']['excluirRotativa'] ?? 0; - $paginas = intval($reqData['datos_libro']['paginas']) ?? 0; - $paginas_color = intval($reqData['datos_libro']['paginasColor']) ?? 0; + // Cubierta - $papel_generico_cubierta = [ - 'id' => $reqData['datos_libro']['papelCubierta'] ?? 0, - 'nombre' => $reqData['datos_libro']['papelCubiertaNombre'] ?? "", + $cubierta = [ + 'papel_generico_cubierta' => $modelPapelGenerico->getIdFromCode($cubierta['papelCubierta']), + 'gramajeCubierta' => intval($cubierta['gramajeCubierta']), + 'carasCubierta' => intval($cubierta['carasImpresion'] ?? 0), + 'solapasCubierta' => intval($cubierta['solapas'] ?? 0), + 'acabadosCubierta' => $cubierta['acabados'] ?? 0, + 'lomoRedondo' => $cubierta['lomoRedondo'] ?? 0, + 'cabezada' => $cubierta['cabezada'] ?? 'WHI', ]; - $gramajeCubierta = $reqData['datos_libro']['gramajeCubierta'] ?? 0; - $carasCubierta = intval($reqData['datos_libro']['carasCubierta'] ?? 0); - $solapasCubierta = intval($reqData['datos_libro']['solapasCubierta'] ?? 0); - $acabadoCubierta = $reqData['datos_libro']['acabadoCubierta'] ?? 0; // Sobrecubierta - $sobreCubierta = $reqData['datos_libro']["sobrecubierta"] ?? null; + if ($sobrecubierta != "false" && $sobrecubierta != null) { + $sobrecubierta = [ + 'papel' => $modelPapelGenerico->getIdFromCode($sobrecubierta['papel']), + 'gramaje' => intval($sobrecubierta['gramaje']), + 'solapas' => intval($sobrecubierta['solapas'] ?? 0), + 'acabados' => $sobrecubierta['plastificado'] ?? 0, + ]; + } else + $sobrecubierta = false; // Guardas - $datos_guardas = $reqData['datos_libro']['guardas'] ?? 0; - - $servicios = $reqData['datos_libro']['servicios'] ?? []; - $iva_reducido = $reqData['iva_reducido']; + 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( 'tirada' => $tirada, @@ -649,25 +727,16 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'isHq' => $isHq, 'paginasCuadernillo' => $paginasCuadernillo, - 'interior' => array( - 'papel_generico' => $papel_generico, - 'gramaje' => $gramaje, - 'excluirRotativa' => $excluirRotativa, - 'paginas' => $paginas, - 'paginas_color' => $paginas_color, - ), - 'cubierta' => array( - 'papel_generico_cubierta' => $papel_generico_cubierta, - 'gramajeCubierta' => $gramajeCubierta, - 'carasCubierta' => $carasCubierta, - 'solapasCubierta' => $solapasCubierta, - ), - 'acabadoCubierta' => $acabadoCubierta, - 'sobrecubierta' => $sobreCubierta, + 'interior' => $interior, + 'cubierta' => $cubierta, + 'sobrecubierta' => $sobrecubierta, 'datos_guardas' => $datos_guardas, - 'servicios' => $servicios, + + 'servicios' => $reqData['servicios'] ?? [], ); + $datos_presupuesto['id'] = $id; + $resultado_presupuesto = $this->calcular_presupuesto($datos_presupuesto, $selected_tirada, true); if (isset($resultado_presupuesto['errors'])) { @@ -676,57 +745,63 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if (!empty($error)) { return $this->respond([ 'error' => $error, - $csrfTokenName => $newTokenHash ]); } } } else if (isset($resultado_presupuesto['exception'])) { return $this->respond([ 'error' => $resultado_presupuesto['exception'], - $csrfTokenName => $newTokenHash + 'file' => $resultado_presupuesto['file'], + 'line' => $resultado_presupuesto['line'], ]); } + // seleccionamos el peso de la tirada seleccionada + $peso_libro = $resultado_presupuesto['peso'][array_search($selected_tirada, $tirada)]; - 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) > 1) { - foreach ($reqData['direcciones'] as $direccion) { + for ($i = 0; $i < count($tirada); $i++) { - $proporcion = intval($direccion['unidades']) / $selected_tirada * 100.0; - $unidades_calculo = floor($tirada[$i] * $proporcion / 100.0); - try{ - $coste_envio = $this->calcular_coste_envio( + $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'], - $peso_libro, - $unidades_calculo, - $direccion['tipo'] == 'cajas' ? 0 : 1 - ); + $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); + } + } else { - if (count($coste_envio) > 0) { - $coste = floatval($coste_envio[0]->coste); - $margen = ($coste * floatval($coste_envio[0]->margen)) / 100.0; - $coste -= $margen; - $resultado_presupuesto['info']['totales'][$i]['coste_envio'] += $coste; - $resultado_presupuesto['info']['totales'][$i]['margen_envio'] += $margen; - } - } - catch(Exception $e){ - return $this->respond([ - 'status' => -1, - 'message' => "Error al calcular el coste de envío (¿las direcciones están guardadas?)", - $csrfTokenName => $newTokenHash - ]); - } + 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; } } $model_presupuesto = new PresupuestoModel(); $tiradas_alternativas = []; $resumen_totales = []; + for ($i = 0; $i < count($tirada); $i++) { + if ($tirada[$i] != $selected_tirada) { $coste_total = $resultado_presupuesto['info']['totales'][$i]['totalImpresion'] + $resultado_presupuesto['info']['totales'][$i]['totalPapel'] + @@ -736,9 +811,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $resultado_presupuesto['info']['totales'][$i]['margenPapel'] + $resultado_presupuesto['info']['totales'][$i]['margen_envio']) / ($coste_total + $coste_envio) * 100.0, 2); $total_pedido = round(($coste_total + $resultado_presupuesto['info']['totales'][$i]['totalServicios'] + $resultado_presupuesto['info']['totales'][$i]['margenServicios'] + $coste_envio), 2); - $precio_u = round(($coste_total + $resultado_presupuesto['info']['totales'][$i]['totalServicios'] + $resultado_presupuesto['info']['totales'][$i]['margenServicios'] + $coste_envio) / $tirada[$i], 4); + $precio_u = round(($coste_total + $resultado_presupuesto['info']['totales'][$i]['totalServicios'] + $resultado_presupuesto['info']['totales'][$i]['margenServicios'] + $coste_envio) / $tirada[$i], 4); - array_push($tiradas_alternativas, (object)array( + array_push($tiradas_alternativas, (object) array( 'tirada' => $tirada[$i], 'coste_impresion' => round($coste_total, 2), 'coste_envio' => $coste_envio, @@ -756,6 +831,29 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $borrar_antes = true; } + if ($datos_presupuesto['sobrecubierta']) { + $acabado_id = $this->obtenerTarifasAcabado(['plastificado' => $datos_presupuesto['sobrecubierta']['acabados']]); + if (count($acabado_id) > 0) { + $datos_presupuesto['sobrecubierta']['acabados'] = $acabado_id[0]; + } + } + $acabado_id = $this->obtenerTarifasAcabado($datos_presupuesto['cubierta']['acabadosCubierta']); + if (count($acabado_id) > 0) { + if (array_key_exists('plastificado', $acabado_id)) { + $datos_presupuesto['cubierta']['acabadosCubierta']['plastificado'] = $acabado_id['plastificado']; + } + if (array_key_exists('barniz', $acabado_id)) { + $datos_presupuesto['cubierta']['acabadosCubierta']['barniz'] = $acabado_id['barniz']; + } + if (array_key_exists('estampado', $acabado_id)) { + $datos_presupuesto['cubierta']['acabadosCubierta']['estampado'] = $acabado_id['estampado']; + } + } else { + $datos_presupuesto['cubierta']['acabadosCubierta']['id'] = 0; + } + + $datos_presupuesto['prototipo'] = $prototipo; + $id = $model_presupuesto->insertarPresupuestoCliente( $id, $selected_tirada, @@ -763,7 +861,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $datosCabecera, $resultado_presupuesto['info'], $resumen_totales, - $iva_reducido, + $ivaReducido, $excluirRotativa, $tiradas_alternativas ); @@ -793,21 +891,23 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if ($servicio->tarifa_id == 3 || $servicio->tarifa_id == 5 || $servicio->tarifa_id == 16) { // Servicios acabado $this->guardarServicio($id, $servicio, 'acabado'); - } else if ($servicio->tarifa_id == 24 ) { + } else if ($servicio->tarifa_id == 24) { // Servicios preimpresion $this->guardarServicio($id, $servicio, 'preimpresion'); } else if ($servicio->tarifa_id == 9) { // Servicios extra $this->guardarServicio($id, $servicio, 'extra'); - } - else if ($servicio->tarifa_id == 62) { + } else if ($servicio->tarifa_id == 62) { // Servicios manipulado $this->guardarServicio($id, $servicio, 'manipulado'); } } - foreach ($reqData['direcciones'] as $direccion) { - $this->guardarLineaEnvio($id, $direccion, $peso_libro); + if (array_key_exists('direcciones', $reqData)) { + + foreach ($reqData['direcciones'] as $direccion) { + $this->guardarLineaEnvio($id, $direccion, $peso_libro); + } } if ($confirmar) { @@ -819,14 +919,116 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'status' => $id, 'url' => site_url('presupuestos/presupuestocliente/edit'), 'message' => lang('Basic.global.saveSuccess', [lang('Basic.global.record')]), - $csrfTokenName => $newTokenHash ]); } else { return $this->failUnauthorized('Invalid request', 403); } } - public function get_files(){ + + public function cargar($id) + { + if ($this->request->isAJAX()) { + + $modelPapelFormato = new PapelFormatoModel(); + $modelCliente = new ClienteModel(); + + + $presupuesto = $this->model->find($id); + $data = []; + if ($presupuesto) { + $data['lc'] = $presupuesto->lomo_cubierta; + $data['lsc'] = $presupuesto->lomo_sobrecubierta; + $data['state'] = intval($presupuesto->estado_id); + $data['datosGenerales']['titulo'] = $presupuesto->titulo; + $data['datosGenerales']['autor'] = $presupuesto->autor; + $data['datosGenerales']['isbn'] = $presupuesto->isbn; + $data['datosGenerales']['coleccion'] = $presupuesto->coleccion; + $data['datosGenerales']['referenciaCliente'] = $presupuesto->referencia_cliente; + $data['datosGenerales']['paginas'] = $presupuesto->paginas; + $data['datosGenerales']['paginasCuadernillo'] = $presupuesto->paginasCuadernillo; + $data['datosGenerales']['tirada'] = $presupuesto->tirada; + $data['datosGenerales']['ivaReducido'] = $presupuesto->iva_reducido; + $data['datosGenerales']['excluirRotativa'] = $presupuesto->excluir_rotativa; + $data['datosGenerales']['clienteId'] = $presupuesto->cliente_id; + $data['datosGenerales']['clienteNombre'] = $modelCliente->getNombre($presupuesto->cliente_id); + model('App\Models\Clientes\ClienteModel') + ->find($presupuesto->cliente_id)->nombre; + $data['datosGenerales']['papelFormatoId'] = $presupuesto->papel_formato_id; + $data['datosGenerales']['papelFormatoNombre'] = $modelPapelFormato->getNombre($presupuesto->papel_formato_id); + $data['datosGenerales']['papelFormatoPersonalizado'] = $presupuesto->papel_formato_personalizado; + $data['datosGenerales']['papelFormatoAncho'] = $presupuesto->papel_formato_ancho; + $data['datosGenerales']['papelFormatoAlto'] = $presupuesto->papel_formato_alto; + + $data['datosGenerales']['posPaginasColor'] = $presupuesto->comp_pos_paginas_color; + $data['datosGenerales']['papelInteriorDiferente'] = $presupuesto->papel_interior_diferente; + $data['datosGenerales']['paginasColorConsecutivas'] = $presupuesto->paginas_color_consecutivas; + + $data['datosGenerales']['tipo'] = $this->getTipoLibro($presupuesto->tipo_impresion_id ?? null); + $data['datosGenerales']['prototipo'] = $presupuesto->prototipo; + + $datos_papel = $this->obtenerDatosPapel($presupuesto->id); + $data['interior'] = $datos_papel['interior'] ? $datos_papel['interior'] : []; + + $data['cubierta'] = $datos_papel['cubierta'] ? $datos_papel['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; + $data['cubierta']['solapas_ancho'] = $presupuesto->solapas_ancho; + $data['cubierta']['cabezada'] = $presupuesto->cabezada; + $modelAcabado = model("App\Models\Tarifas\Acabados\TarifaAcabadoModel"); + $data['cubierta']['plastificado'] = $modelAcabado->getCodeFromId($presupuesto->acabado_cubierta_id); + if ($data['cubierta']['plastificado'] == '') { + $data['cubierta']['plastificado'] = 'NONE'; + } + $data['cubierta']['barniz'] = $modelAcabado->getCodeFromId($presupuesto->barniz_cubierta_id); + if ($data['cubierta']['barniz'] == '') { + $data['cubierta']['barniz'] = 'NONE'; + } + $data['cubierta']['estampado'] = $modelAcabado->getCodeFromId($presupuesto->estampado_cubierta_id); + if ($data['cubierta']['estampado'] == '') { + $data['cubierta']['estampado'] = 'NONE'; + } + $data['cubierta']['retractilado'] = $presupuesto->retractilado ? 1 : 0; + + $data['sobrecubierta'] = array_key_exists('sobrecubierta', $datos_papel) ? $datos_papel['sobrecubierta'] : []; + $data['sobrecubierta']['solapas'] = $presupuesto->solapas_sobrecubierta ? 1 : 0; + $data['sobrecubierta']['solapas_ancho'] = $presupuesto->solapas_ancho_sobrecubierta; + $data['sobrecubierta']['plastificado'] = $modelAcabado->getCodeFromId($presupuesto->acabado_sobrecubierta_id); + + $data['guardas'] = array_key_exists('guardas', $datos_papel) ? $datos_papel['guardas'] : []; + + $modelLinea = new PresupuestoLineaModel(); + $lineas = $modelLinea->where('presupuesto_id', $id)->findAll(); + + [$data['datosGenerales']['paginasNegro'], $data['datosGenerales']['paginasColor']] = + $this->getPaginas($lineas); + + $data['direcciones'] = $this->obtenerDireccionesEnvio($id, $presupuesto->cliente_id); + + if(intval($presupuesto->estado_id) == 2){ + $data['resumen']['base'] = $presupuesto->total_aceptado; + $data['resumen']['precio_unidad'] = $presupuesto->total_precio_unidad; + } + + $tiradas_alternativas = json_decode($presupuesto->tirada_alternativa_json_data); + for ($i = 0; $i < count($tiradas_alternativas); $i++) { + $tirada = $tiradas_alternativas[$i]; + $data['datosGenerales']['tirada' . ($i + 2)] = $tirada->tirada; + } + + return $this->respond([ + 'status' => 1, + 'data' => $data + ]); + } + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function get_files() + { // Check if the request is a POST request if ($_SERVER['REQUEST_METHOD'] == 'POST') { @@ -842,14 +1044,15 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $size = filesize($file->file_path); $splitPath = explode("presupuestos/", $file->file_path); - + // se crea un objeto con el nombre del fichero y el tamaño $obj = (object) array( 'name' => $file->nombre, 'size' => $size, - 'hash' => $splitPath[1] ?? $file->file_path); + 'hash' => $splitPath[1] ?? $file->file_path + ); + - // se añade el objeto al array array_push($result, $obj); } @@ -858,23 +1061,24 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - public function upload_files(){ + public function upload_files() + { $model = model('App\Models\Presupuestos\PresupuestoFicheroModel'); if ($_SERVER['REQUEST_METHOD'] == 'POST') { $presupuesto_id = $_POST['presupuesto_id']; - $old_files = json_decode($_POST['oldFiles']); - + $old_files = json_decode($_POST['oldFiles']); + // Comprobar si se han subido archivos if (!empty($_FILES['file']) || !empty($old_files)) { - - + + // Borrar los archivos existentes del presupuesto $model->deleteFiles($presupuesto_id, $old_files); - if (!empty($_FILES['file'])){ + if (!empty($_FILES['file'])) { $files = $_FILES['file']; // Iterar sobre los archivos @@ -885,23 +1089,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $tmp_name = $files['tmp_name'][$i]; $new_name = $model->saveFileInBBDD($presupuesto_id, $name, $extension, auth()->id()); - + // Se sube el fichero // Pero primero se comprueba que la carpeta presupuestos exista if (!is_dir(WRITEPATH . 'uploads/presupuestos')) { mkdir(WRITEPATH . 'uploads/presupuestos', 0777, true); } - if(!is_null($new_name)){ + if (!is_null($new_name)) { $path = WRITEPATH . 'uploads/presupuestos/' . $new_name; - move_uploaded_file($tmp_name,$path); + move_uploaded_file($tmp_name, $path); $ftp = new SafekatFtpClient(); $ftp->uploadFilePresupuesto($presupuesto_id); } } } - } - else{ + } else { // Borrar los archivos existentes del presupuesto $model->deleteFiles($presupuesto_id); } @@ -910,7 +1113,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } - + /*********************** @@ -963,7 +1166,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $unidades = intval($direccion['unidades']); $peso_envio = $peso_libro * $unidades / 1000.0; - $data = $this->calcular_coste_envio($direccion['id'], $peso_libro, $direccion['unidades'], $direccion['tipo'] == 'cajas' ? 0 : 1); + $data = $this->getCosteEnvio( + $direccion['id'], + $peso_libro, + $direccion['unidades'], + $direccion['entregaPalets'] == 'false' ? 0 : 1 + ); + if (count($data) > 0) { $data[0]->presupuesto_id = $presupuestoId; @@ -971,7 +1180,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController unset($data[0]->id); $data[0]->precio = $data[0]->coste; unset($data[0]->coste); - $data[0]->entregaPieCalle = $direccion['tipo'] == 'cajas' ? 0 : 1; + $data[0]->entregaPieCalle = $direccion['entregaPalets'] == 'false' ? 0 : 1; unset($data[0]->tipo); $data[0]->peso = $peso_envio; $data[0]->cantidad = $unidades; @@ -1002,7 +1211,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController if (isset($servicio->paginas_por_cuadernillo)) { $data['paginas_por_cuadernillo'] = $servicio->paginas_por_cuadernillo; } - + $model->insert($data); } else if ($tipo == 'extra') { $model = new PresupuestoServiciosExtraModel(); @@ -1010,8 +1219,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $data = [ 'presupuesto_id' => $presupuestoId, 'tarifa_extra_id' => $servicio->tarifa_id, - 'precio_total' => $servicio->total, - 'precio_unidad' => $servicio->precio_unidad, + 'precio' => $servicio->precio, 'margen' => $servicio->margen, ]; $model->insert($data); @@ -1041,18 +1249,27 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } - protected function calcular_coste_envio($direccionId, $peso, $unidades, $entregaPieCalle) + protected function getCosteEnvio($direccionId = null, $peso, $unidades, $entregaPieCalle) { - $model = model('App\Models\Clientes\ClienteDireccionesModel'); - $data = $model->getDireccion($direccionId); + if ($direccionId != null) { + $model = model('App\Models\Clientes\ClienteDireccionesModel'); + $data = $model->getDireccion($direccionId); + } else { + $data = []; + array_push($data, (object) [ + 'pais_id' => 1, // españa + 'cp' => 18000, // envio nacional + ]); + } + $modelTarifaEnvio = model('App\Models\Tarifas\TarifaEnvioModel'); $coste = 0; $margen = 0; if ($data > 0) { - $peso_envio = $peso * $unidades / 1000.0; // peso libro * unidades y se pasa a kilogramos + $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) { @@ -1077,7 +1294,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $coste = $tarifas_envio[0]->precio; } } - if (count($data) > 0 && count($tarifas_envio) > 0){ + if (count($data) > 0 && count($tarifas_envio) > 0) { $data[0]->coste = $coste; $data[0]->tipo = $entregaPieCalle ? 'palets' : 'cajas'; $data[0]->margen = $margen; @@ -1108,18 +1325,23 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $isHq = $datos_entrada['isHq']; $paginasCuadernillo = $datos_entrada['paginasCuadernillo'] ?? null; + // Interior + $papelInteriorDiferente = $datos_entrada['interior']['papelInteriorDiferente'] ?? false; $papel_generico = $datos_entrada['interior']['papel_generico']; $gramaje = $datos_entrada['interior']['gramaje']; $excluirRotativa = $datos_entrada['interior']['excluirRotativa']; $paginas = $datos_entrada['interior']['paginas']; $paginas_color = $datos_entrada['interior']['paginas_color']; + // Cubierta $papel_generico_cubierta = $datos_entrada['cubierta']['papel_generico_cubierta']; $gramajeCubierta = $datos_entrada['cubierta']['gramajeCubierta']; $carasCubierta = $datos_entrada['cubierta']['carasCubierta']; $solapasCubierta = $datos_entrada['cubierta']['solapasCubierta']; + $acabadosCubierta = $datos_entrada['cubierta']['acabadosCubierta'] ?? []; + $lomoRedondo = $datos_entrada['cubierta']['lomoRedondo']; // Sobrecubierta $sobreCubierta = $datos_entrada["sobrecubierta"] ?? null; @@ -1130,14 +1352,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController // Servicios $servicios = $datos_entrada['servicios'] ?? []; - $error = (object)[ - 'interior' => "", - 'cubierta' => "", - 'sobrecubierta' => "", - 'guardas' => "", - 'servicios' => "", - 'serviciosDefecto' => "", - ]; $coste_servicios = 0.0; $POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD(); @@ -1167,7 +1381,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $is_cosido = (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id); - $datosPedido = (object)array( + $datosPedido = (object) array( 'paginas' => $paginas, 'tirada' => $tirada[$t], 'merma' => $tirada[$t] > $POD ? $this->calcular_merma($tirada[$t], $POD) : 0, @@ -1191,10 +1405,28 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'cliente_id' => $cliente_id, 'paginas_color' => $paginas_color, 'excluirRotativa' => $excluirRotativa, + 'papelInteriorDiferente' => $papelInteriorDiferente ); $interior = PresupuestoClienteService::obtenerInterior($input_data); + if ($interior == -1) { + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'] == 0 ? null : $datos_entrada['id'], + auth()->user()->id, + ' + No se puede obtener el interior', + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } + $costeInterior = 0.0; $peso_interior = 0.0; foreach ($interior as $linea) { @@ -1215,10 +1447,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - if ($costeInterior <= 0) { - $error->interior = lang('Presupuestos.errores.noInterior'); - } - // Si es POD hay que volver a calcular para incluir la merma correcta if ($tirada[$t] <= $POD) { $num_formas = []; @@ -1233,6 +1461,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $info['merma'] = max($info['merma'], $input_data['datosPedido']->merma); } $interior = PresupuestoClienteService::obtenerInterior($input_data); + if ($interior == -1) { + + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'], + auth()->user()->id, + 'No se puede obtener el interior', + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } $costeInterior = 0.0; $peso_interior = 0.0; @@ -1264,11 +1508,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - if ($costeInterior <= 0) - $error->interior = lang('Presupuestos.errores.noInterior'); - else - $error->interior = ""; + if ($costeInterior <= 0) { + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'], + auth()->user()->id, + 'No se puede obtener el interior', + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } // Cubierta $input_data['papel_generico'] = $papel_generico_cubierta; @@ -1281,6 +1536,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $input_data['isColor'] = 1; $input_data['isHq'] = 1; $input_data['uso'] = 'cubierta'; + $input_data['lomoRedondo'] = $lomoRedondo; $cubierta = PresupuestoClienteService::obtenerCubierta($input_data); $coste_cubierta = 0.0; @@ -1301,41 +1557,69 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController ); } } - if ($coste_cubierta <= 0) - $error->cubierta = lang('Presupuestos.errores.noCubiertaSobrecubierta'); - else - $error->cubierta = ""; + if ($coste_cubierta <= 0) { - $tarifaAcabadoCubierta = intval($datos_entrada['acabadoCubierta'] ?? 0); + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'], + auth()->user()->id, + 'No se puede obtener la cubierta', + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } + // Acabados Cubierta + $tarifaAcabadoCubierta = $this->obtenerTarifasAcabado($acabadosCubierta); $acabadoCubierta = []; - if ($tarifaAcabadoCubierta > 0) { + foreach ($tarifaAcabadoCubierta as $tarifa) { + + if ($tarifa == 0) + continue; $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); - $acabadoCubierta = $model->getPrecioTarifa($tarifaAcabadoCubierta, $datosPedido->tirada, -1, $POD); - } - if (count($acabadoCubierta) > 0) { - if ($acabadoCubierta[0]->total <= 0) - $error->servicios = lang('Presupuestos.errores.errorPresupuesto'); - $coste_servicios += floatval($acabadoCubierta[0]->total); + $acabadoCubierta = $model->getPrecioTarifa($tarifa, $datosPedido->tirada, -1, $POD); + + if (count($acabadoCubierta) > 0) { + if ($acabadoCubierta[0]->total <= 0) { + + $input_data['tarifas_acabado_cubierta'] = $tarifaAcabadoCubierta; + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'], + auth()->user()->id, + 'No se puede obtener acabados de cubierta', + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } + $coste_servicios += floatval($acabadoCubierta[0]->total); + } } + // Sobrecubierta $coste_sobrecubierta = 0.0; $peso_sobrecubierta = 0.0; $linea_sobrecubierta = []; $acabadoSobrecubierta = []; $lomo_sobrecubierta = 0.0; - if (!is_null($sobreCubierta)) { + if (!is_null($sobreCubierta) && $sobreCubierta) { - $papel_generico_sobrecubierta = [ - 'id' => $sobreCubierta['papel'] ?? 0, - 'nombre' => $sobreCubierta['papel_nombre'] ?? "", - ]; - $input_data['papel_generico'] = $papel_generico_sobrecubierta; + $input_data['papel_generico'] = $sobreCubierta['papel'] ?? 0; $input_data['gramaje'] = $sobreCubierta['gramaje'] ?? 0; $input_data['datosPedido']->paginas = 4; $input_data['paginas_color'] = 4; $input_data['datosPedido']->solapas_ancho = intval($sobreCubierta['solapas'] ?? 0); - $input_data['datosPedido']->solapas = $input_data['datosPedido']->solapas_ancho > 0 ? 1 : 0; + $input_data['datosPedido']->solapas = $sobreCubierta['solapas'] > 0 ? 1 : 0; $input_data['datosPedido']->lomo = $this->calcular_lomo([$cubierta], $input_data['datosPedido']->lomo); $input_data['isColor'] = 1; $input_data['isHq'] = 1; @@ -1358,23 +1642,56 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController ); } } - if ($coste_sobrecubierta <= 0) - $error->sobrecubierta = lang('Presupuestos.errores.noCubiertaSobrecubierta'); - else - $error->sobrecubierta = ""; + if ($coste_sobrecubierta <= 0) { + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'], + auth()->user()->id, + 'No se puede obtener la sobrecubierta', + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } $lomo_sobrecubierta = $lomo + floatval($linea_sobrecubierta['mano']); - $tarifaAcabadoSobrecubierta = intval(strlen($sobreCubierta['acabado']) == 0 ? 0 : $sobreCubierta['acabado']); + $tarifaAcabadoSobrecubierta = $this->obtenerTarifasAcabado(['plastificado' => $sobreCubierta['acabados']]); $acabadoSobrecubierta = []; - if ($tarifaAcabadoSobrecubierta > 0) { + foreach ($tarifaAcabadoSobrecubierta as $tarifa) { + + // NONE + if ($tarifaAcabadoSobrecubierta[0] == 0) + continue; $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); - $acabadoSobrecubierta = $model->getPrecioTarifa($tarifaAcabadoSobrecubierta, $datosPedido->tirada, $POD); - } - if (count($acabadoSobrecubierta) > 0) { - if ($acabadoSobrecubierta[0]->total <= 0) - $error->servicios = lang('Presupuestos.errores.errorPresupuesto'); - $coste_servicios += floatval($acabadoSobrecubierta[0]->total); + $acabadoSobrecubierta = $model->getPrecioTarifa($tarifa, $datosPedido->tirada, -1, $POD); + + if (count($acabadoSobrecubierta) > 0) { + + if ($acabadoSobrecubierta[0]->total <= 0) { + + $input_data['tarifas_acabado_sobrecubierta'] = $tarifaAcabadoSobrecubierta; + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'], + auth()->user()->id, + 'No se puede obtener acabados de sobrecubierta', + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } + + $coste_servicios += floatval($acabadoSobrecubierta[0]->total); + } } } @@ -1382,15 +1699,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $guardas = []; $peso_guardas = 0.0; $coste_guardas = 0.0; - if($datos_guardas != 0){ - if (count($datos_guardas) != 0) { + if ($datos_guardas != 0) { + if (count($datos_guardas) != 0 && $datos_guardas) { $guardas = $datos_guardas; - $papel_generico_guardas = [ - 'id' => $datos_guardas['papel'] ?? 0, - 'nombre' => $datos_guardas['nombre'] ?? "", - ]; - $input_data['papel_generico'] = $papel_generico_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; @@ -1427,10 +1740,21 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController ); } } - if ($coste_guardas <= 0) - $error->guardas = lang('Presupuestos.errores.noGuardas'); - else - $error->guardas = ""; + if ($coste_guardas <= 0) { + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'], + auth()->user()->id, + 'No se puede obtener las guardas', + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } } } if ($extra_info) { @@ -1454,8 +1778,24 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController ]); $costeServiciosDefecto = 0.0; foreach ($servDefecto as $servicio) { - if ($servicio->total <= 0) - $error->serviciosDefecto = lang('Presupuestos.errores.errorPresupuesto'); + if ($servicio->total <= 0) { + + $input_data['servicios'] = $servDefecto; + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'], + auth()->user()->id, + 'No se puede obtener servicios', + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } + $costeServiciosDefecto += floatval($servicio->total); if ($extra_info) { @@ -1470,29 +1810,29 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController // Servicios // se comprueba si $datos guardas es un array - if(is_array($datos_guardas)){ - if(count($datos_guardas) > 0){ + if (is_array($datos_guardas)) { + if (count($datos_guardas) > 0) { array_push($servicios, 62); // Plegado de guardas } - } - else{ + } else { if ($datos_guardas > 0) { array_push($servicios, 62); // Plegado de guardas } } - + /* 'retractilado' => 3, - 'retractilado5' => 5, - 'ferro' => 24, 'prototipo' => 9, - 'fajaColor' => 16, - 'plegadoGuardas' => 62, */ $serviciosAutomaticos = []; - + $servicios = []; + if ($datos_entrada['cubierta']['acabadosCubierta']['retractilado'] === 'true') + array_push($servicios, 3); + if ($datos_entrada['servicios']['prototipo']) + array_push($servicios, 9); foreach ($servicios as $servicio) { - if (intval($servicio) == 3 || intval($servicio) == 5 || intval($servicio) == 16) { + + if (intval($servicio) == 3) { // Servicios acabado $resultado = PresupuestoCLienteService::getServiciosAcabados([ 'tarifa_id' => $servicio, @@ -1500,68 +1840,63 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'POD' => $POD, ]); array_push($serviciosAutomaticos, $resultado[0]); - if ($resultado[0]->total <= 0) - $error->servicios = lang('Presupuestos.errores.errorPresupuesto'); + + if ($resultado[0]->total <= 0) { + + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'], + auth()->user()->id, + 'No se puede obtener servicio con id 3', + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } $coste_servicios += floatval($resultado[0]->total); if ($extra_info) { $totalServicios += floatval($resultado[0]->total); $margenServicios += floatval($resultado[0]->total) * floatval($resultado[0]->margen) / 100.0; } - } else if (intval($servicio) == 24) { - // Servicios preimpresion (Ferro) - $resultado = PresupuestoCLienteService::getServiciosPreimpresion([ - 'tarifa_id' => $servicio, - ]); - array_push($serviciosAutomaticos, $resultado[0]); - if ($resultado[0]->precio <= 0) - $error->servicios = lang('Presupuestos.errores.errorPresupuesto'); - - $coste_servicios += floatval($resultado[0]->precio); - if ($extra_info) { - $totalServicios += floatval($resultado[0]->precio); - $margenServicios += floatval($resultado[0]->precio) * floatval($resultado[0]->margen) / 100.0; - } - } - if(intval($servicio) == 9) { - // Servicios preimpresion + } else if (intval($servicio) == 9) { + // Prototipo $resultado = PresupuestoCLienteService::getServiciosExtra([ 'tarifa_id' => $servicio, ]); array_push($serviciosAutomaticos, $resultado[0]); - if ($resultado[0]->precio <= 0) - $error->servicios = lang('Presupuestos.errores.errorPresupuesto'); + if ($resultado[0]->precio <= 0) { + + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'], + auth()->user()->id, + 'No se puede obtener servicio con id 9', + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } + $coste_servicios += floatval($resultado[0]->precio); if ($extra_info) { $totalServicios += floatval($resultado[0]->precio); $margenServicios += floatval($resultado[0]->precio) * floatval($resultado[0]->margen) / 100.0; } - } else if (intval($servicio) == 62) { - // Servicios manipulado - $resultado = PresupuestoCLienteService::getServiciosManipulado([ - 'tarifa_id' => $servicio, - 'tirada' => $datosPedido->tirada, - 'POD' => $POD, - ]); - array_push($serviciosAutomaticos, $resultado[0]); - if ($resultado[0]->total <= 0) - $error->servicios = lang('Presupuestos.errores.errorPresupuesto'); - - $coste_servicios += floatval($resultado[0]->total); - if ($extra_info) { - $totalServicios += floatval($resultado[0]->total); - $margenServicios += floatval($resultado[0]->total) * floatval($resultado[0]->margen) / 100.0; - } } } array_push($precio_u, round(($costeInterior + $coste_cubierta + $coste_sobrecubierta + $costeServiciosDefecto + $coste_servicios) / $tirada[$t], 4)); array_push($peso, round($peso_interior + $peso_cubierta + $peso_sobrecubierta + $peso_guardas, 2)); - foreach ($error as $err) { - if ($err != "") - break; - } if ($extra_info) { $totalServicios -= $margenServicios; @@ -1588,10 +1923,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController )); } - $info['lomo_cubierta'] = $lomo; - $info['lomo_sobrecubierta'] = $lomo_sobrecubierta; + $info['lomo_cubierta'] = round(floatval($lomo), 2); + $info['lomo_sobrecubierta'] = round(floatval($lomo_sobrecubierta), 2); $return_data['info'] = $info; - + if ($extra_info) { // && $tirada[$t] == $selected_tirada) { @@ -1604,13 +1939,15 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - $return_data += [ - 'errors' => $error, - 'total_lp' => $costeInterior + $coste_cubierta + $coste_sobrecubierta, - 'acabadoCubierta' => $acabadoCubierta, - 'acabadoSobrecubierta' => $acabadoSobrecubierta, - 'total_servicios_defecto' => $costeServiciosDefecto, - 'total_servicios_automaticos' => $coste_servicios, + $return_data += [ + 'errors' => (object) ([ + 'status' => 0, + ]), + //'total_lp' => $costeInterior + $coste_cubierta + $coste_sobrecubierta, + //'acabadoCubierta' => $acabadoCubierta, + //'acabadoSobrecubierta' => $acabadoSobrecubierta, + //'total_servicios_defecto' => $costeServiciosDefecto, + //'total_servicios_automaticos' => $coste_servicios, 'tiradas' => $tirada, 'precio_u' => $precio_u, 'peso' => $peso, @@ -1622,7 +1959,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController return $return_data; } catch (Exception $e) { - return ['exception' => $e->getMessage()]; + return [ + 'exception' => $e->getMessage(), + "line" => $e->getLine(), + "file" => $e->getFile() + ]; } } @@ -1665,37 +2006,41 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController protected function getTipoImpresion($tipo, $tapa) { - $tipo_impresion_id = 0; + $tipo_impresion_id = -1; - if ($tipo == 'fresado') { + try { + if ($tipo == 'fresado') { - if ($tapa == 'blanda') - $tipo_impresion_id = 2; - else - $tipo_impresion_id = 1; - } else if ($tipo == 'cosido') { + if (strpos(strtolower($tapa), 'blanda') !== false) + $tipo_impresion_id = 2; + else + $tipo_impresion_id = 1; + } else if ($tipo == 'cosido') { - if ($tapa == 'blanda') - $tipo_impresion_id = 4; - else - $tipo_impresion_id = 3; - } else if ($tipo == 'espiral') { + if (strpos(strtolower($tapa), 'blanda') !== false) + $tipo_impresion_id = 4; + else + $tipo_impresion_id = 3; + } else if ($tipo == 'espiral') { - if ($tapa == 'blanda') - $tipo_impresion_id = 6; - else - $tipo_impresion_id = 5; - } else if ($tipo == 'wireo') { + if (strpos(strtolower($tapa), 'blanda') !== false) + $tipo_impresion_id = 6; + else + $tipo_impresion_id = 5; + } else if ($tipo == 'wireo') { - if ($tapa == 'blanda') - $tipo_impresion_id = 8; - else - $tipo_impresion_id = 7; - } else if ($tipo == 'grapado') { - $tipo_impresion_id = 21; + if (strpos(strtolower($tapa), 'blanda') !== false) + $tipo_impresion_id = 8; + else + $tipo_impresion_id = 7; + } else if ($tipo == 'grapado') { + $tipo_impresion_id = 21; + } + + return $tipo_impresion_id; + } catch (Exception $e) { + return -1; } - - return $tipo_impresion_id; } @@ -1735,7 +2080,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController { $model = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel'); $data = $model->getServiciosAcabadoCubierta(); - array_unshift($data, (object)['id' => '', 'label' => lang('Basic.global.None')]); + array_unshift($data, (object) ['id' => '', 'label' => lang('Basic.global.None')]); return $data; } @@ -1743,18 +2088,18 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController { $model = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel'); $data = $model->getServiciosAcabadoSobrecubierta(); - array_unshift($data, (object)['id' => '', 'label' => lang('Basic.global.None')]); + array_unshift($data, (object) ['id' => '', 'label' => lang('Basic.global.None')]); return $data; } 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; @@ -1785,6 +2130,19 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } else return ''; } + + protected function obtenerTipoTapa($tipo_impresion_id) + { + $model = model('App\Models\Configuracion\TipoPresupuestoModel'); + $data = $model->get_isTapaDura($tipo_impresion_id); + if ($data) { + return 'dura'; + } else { + return 'blanda'; + } + } + + protected function getTipoInterior($presupuestoId) { @@ -1792,7 +2150,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $color = 'negro'; $model = model('App\Models\Presupuestos\PresupuestoLineaModel'); - $data = $model->where('presupuesto_id', $presupuestoId)->findAll();; + $data = $model->where('presupuesto_id', $presupuestoId)->findAll(); + ; foreach ($data as $linea) { if (strpos($linea->tipo, "hq") !== false) { // $linea->tipo contains the substring "hq" @@ -1805,11 +2164,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $tipo = "negro"; - if($calidad == 'premium' && $color=='negro') + if ($calidad == 'premium' && $color == 'negro') $tipo = "negroHq"; - else if ($calidad == 'estandar' && $color=='color') + else if ($calidad == 'estandar' && $color == 'color') $tipo = "color"; - else if ($calidad == 'premium' && $color=='color') + else if ($calidad == 'premium' && $color == 'color') $tipo = "colorHq"; return $tipo; @@ -1832,7 +2191,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController protected function obtenerPaginasColor($presupuestoEntity) { $comparador_data = json_decode($presupuestoEntity->comparador_json_data); - if(!is_null($comparador_data)){ + if (!is_null($comparador_data)) { if (property_exists($comparador_data, 'color')) { $presupuestoEntity->paginasColor = $comparador_data->color->paginas; } @@ -1841,8 +2200,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } else { $presupuestoEntity->paginasColor = 0; } - } - else + } else $presupuestoEntity->paginasColor = 0; } @@ -1867,111 +2225,122 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } - protected function obtenerDireccionesEnvio($presupuestoEntity) + protected function obtenerDireccionesEnvio($id, $cliente_id) { $model = model('App\Models\Presupuestos\PresupuestoDireccionesModel'); $model_direcciones = model('App\Models\Clientes\ClienteDireccionesModel'); $model_pais = model('App\Models\Configuracion\PaisModel'); - $direcciones = $model->where('presupuesto_id', $presupuestoEntity->id)->findAll(); + $direcciones = $model->where('presupuesto_id', $id)->findAll(); $result = []; $temp = []; - for ($i=0; $igetIdForPresupuestoCliente( - $presupuestoEntity->cliente_id, + $cliente_id, $direcciones[$i]->att, $direcciones[$i]->email, $direcciones[$i]->direccion, $direcciones[$i]->cp, $direcciones[$i]->pais_id, - $direcciones[$i]->telefono); - if(count($direccion_id) > 0) { + $direcciones[$i]->telefono + ); + if (count($direccion_id) > 0) { $temp = $direcciones[$i]->toArray(); - $temp['pais'] = $model_pais->where('id', $direcciones[$i]->pais_id)->first()->nombre; - $temp['direccion_id'] = $direccion_id[0]->id; - array_push($result, $temp); + array_push($result, [ + 'id' => $temp['id'], + 'unidades' => $temp['cantidad'], + 'palets' => $temp['entregaPieCalle'], + ]); } } - if(count($result) > 0) - $presupuestoEntity->direcciones_envio = $result; + if (count($result) > 0) + return $result; + else + return []; } - protected function obtenerDatosPapel($presupuestoEntity) + protected function obtenerDatosPapel($presupuesto_id) { - $id = $presupuestoEntity->id; + $return_data = []; $model = model('App\Models\Presupuestos\PresupuestoLineaModel'); - $data = $model->where('presupuesto_id', $id)->findAll(); + $data = $model->where('presupuesto_id', $presupuesto_id)->findAll(); + + $modelPapelGenerico = model('App\Models\Configuracion\PapelGenericoModel'); + if (count($data) > 0) { foreach ($data as $linea) { - // Se coje el primer papel que se encuentre para el interior - // para presupuestos del cliente sólo se escoje un papel para el interior - if (strpos($linea->tipo, "bn") !== false || strpos($linea->tipo, "color") !== false) { - $presupuestoEntity->papel_interior = $linea->papel_id; - $presupuestoEntity->gramaje_interior = $linea->gramaje; - } - // Si es cubierta - else if (strpos($linea->tipo, "cubierta") !== false && strpos($linea->tipo, "sobrecubierta") === false) { - $presupuestoEntity->papel_cubierta = $linea->papel_id; - $presupuestoEntity->gramaje_cubierta = $linea->gramaje; - $presupuestoEntity->paginas_cubierta = $linea->paginas; - } - // Si es sobrecubierta - else if (strpos($linea->tipo, "sobrecubierta") !== false) { - $presupuestoEntity->papel_sobrecubierta = $linea->papel_id; - $presupuestoEntity->gramaje_sobrecubierta = $linea->gramaje; - $presupuestoEntity->paginas_sobrecubierta = $linea->paginas; - } - // Si es guardas - else if (strpos($linea->tipo, "guardas") !== false) { - $presupuestoEntity->papel_guardas = $linea->papel_id; - $presupuestoEntity->paginas_guardas = $linea->paginas; + if ($linea->tipo == 'lp_bn' || $linea->tipo == 'lp_bnhq' || $linea->tipo == 'lp_rot_bn') { + $return_data['interior']['negro']['tipo'] = $linea->tipo == 'lp_bn' || $linea->tipo == 'lp_rot_bn' ? 'negroEstandar' : 'negroPremium'; + $return_data['interior']['negro']['papel'] = $modelPapelGenerico->getCodeFromId($linea->papel_id); + $return_data['interior']['negro']['gramaje'] = $linea->gramaje; + } else if ($linea->tipo == 'lp_color' || $linea->tipo == 'lp_colorhq' || $linea->tipo == 'lp_rot_color') { + $return_data['interior']['color']['tipo'] = $linea->tipo == 'lp_color' || $linea->tipo == 'lp_rot_color' ? 'colorEstandar' : 'colorPremium'; + $return_data['interior']['color']['papel'] = $modelPapelGenerico->getCodeFromId($linea->papel_id); + $return_data['interior']['color']['gramaje'] = $linea->gramaje; + } else if ($linea->tipo == 'lp_cubierta') { + $return_data['cubierta']['papel'] = $modelPapelGenerico->getCodeFromId($linea->papel_id); + $return_data['cubierta']['gramaje'] = $linea->gramaje; + $return_data['cubierta']['paginas'] = $linea->paginas; + } else if ($linea->tipo == 'lp_sobrecubierta') { + $return_data['sobrecubierta']['papel'] = $modelPapelGenerico->getCodeFromId($linea->papel_id); + $return_data['sobrecubierta']['gramaje'] = $linea->gramaje; + $return_data['sobrecubierta']['paginas'] = $linea->paginas; + } else if ($linea->tipo == 'lp_guardas') { + $return_data['guardas']['papel'] = $modelPapelGenerico->getCodeFromId($linea->papel_id); + $return_data['guardas']['gramaje'] = $linea->gramaje; + $return_data['guardas']['paginas'] = $linea->paginas; } } } + + return $return_data; } - protected function generarResumen($presupuestoEntity){ - - $presupuestoEntity->resumen = (object)[ + protected function generarResumen($presupuestoEntity) + { + + $presupuestoEntity->resumen = (object) [ 'titulo' => $this->generarTitulo($presupuestoEntity), 'tamanio' => $this->obtenerTamanio($presupuestoEntity), 'tipo_impresion' => $this->obtenerTipoImpresion($presupuestoEntity) ]; $model_papelGenerico = model('App\Models\Configuracion\PapelGenericoModel'); - if(!is_null($presupuestoEntity->papel_interior)){ + if (!is_null($presupuestoEntity->papel_interior)) { $nombre = $model_papelGenerico->where('id', $presupuestoEntity->papel_interior)->first()->nombre; - if($nombre != null) + if ($nombre != null) $presupuestoEntity->papel_interior_nombre = $nombre; } - if(!is_null($presupuestoEntity->papel_cubierta)){ + if (!is_null($presupuestoEntity->papel_cubierta)) { $nombre = $model_papelGenerico->where('id', $presupuestoEntity->papel_interior)->first()->nombre; - if($nombre != null) + if ($nombre != null) $presupuestoEntity->papel_cubierta_nombre = $nombre; } - if(!is_null($presupuestoEntity->papel_sobrecubierta)){ + if (!is_null($presupuestoEntity->papel_sobrecubierta)) { $nombre = $model_papelGenerico->where('id', $presupuestoEntity->papel_sobrecubierta)->first()->nombre; - if($nombre != null) + if ($nombre != null) $presupuestoEntity->papel_sobrecubierta_nombre = $nombre; } - if(!is_null($presupuestoEntity->papel_guardas)){ + if (!is_null($presupuestoEntity->papel_guardas)) { $nombre = $model_papelGenerico->where('id', $presupuestoEntity->papel_guardas)->first()->nombre; - if($nombre != null) + if ($nombre != null) $presupuestoEntity->papel_guardas_nombre = $nombre; } } - protected function generarTitulo($presupuestoEntity){ + protected function generarTitulo($presupuestoEntity) + { $model = model('App\Models\Configuracion\TipoPresupuestoModel'); $codigo = $model->where('id', $presupuestoEntity->tipo_impresion_id)->first()->codigo; - $titulo = lang('Presupuestos.titulos.'.$codigo); + $titulo = lang('Presupuestos.titulos.' . $codigo); return $titulo; } - protected function obtenerTamanio($presupuestoEntity){ + protected function obtenerTamanio($presupuestoEntity) + { $ancho = 0; $alto = 0; @@ -1979,15 +2348,14 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $model = model('App\Models\Presupuestos\PresupuestoModel'); $data = $model->where('id', $presupuestoEntity->id)->first(); - if($data != null){ - if($data->papel_formato_personalizado == 0){ + if ($data != null) { + if ($data->papel_formato_personalizado == 0) { $model_papel_formato = model('App\Models\Configuracion\PapelFormatoModel'); $data_papel_formato = $model_papel_formato->where('id', $data->papel_formato_id)->first(); $ancho = $data_papel_formato->ancho; $alto = $data_papel_formato->alto; - } - else{ + } else { $ancho = $data->papel_formato_ancho; $alto = $data->papel_formato_alto; } @@ -1996,7 +2364,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController return $ancho . "x" . $alto; } - protected function obtenerTipoImpresion($presupuestoEntity){ + protected function obtenerTipoImpresion($presupuestoEntity) + { $id = $presupuestoEntity->id; @@ -2019,16 +2388,67 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController return $tipo; } - protected function obtenerPaginasCuadernillo($presupuestoEntity){ + protected function obtenerPaginasCuadernillo($presupuestoEntity) + { $model = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel'); $lineas = $model->getResource($presupuestoEntity->id)->get()->getResultObject(); - - foreach ($lineas as $linea){ + + foreach ($lineas as $linea) { // check if exist - if($linea->paginas_por_cuadernillo != null) + if ($linea->paginas_por_cuadernillo != null) return $linea->paginas_por_cuadernillo; } return 32; // valor por defecto } + + protected function obtenerTarifasAcabado($acabados) + { + $tarifas = []; + + $model = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel'); + + + foreach ($acabados as $acabado => $value) { + + if ($value != 'NONE') { + $data = $model->where('code', $value)->first(); + $data = $data->id; + array_push($tarifas, [$acabado => $data]); + } else { + array_push($tarifas, 0); + } + } + + return $tarifas; + } + + + private function getPaginas($lineas) + { + + $paginasNegro = 0; + $paginasColor = 0; + + foreach ($lineas as $linea) { + if (strpos($linea->tipo, "lp_bn") !== false || strpos($linea->tipo, "lp_bnhq") !== false) { + $paginasNegro = $linea->paginas; + } + + if (strpos($linea->tipo, "lp_color") !== false || strpos($linea->tipo, "lp_colorhq") !== false) { + $paginasColor = $linea->paginas; + } + + if (strpos($linea->tipo, "lp_rot_bn") !== false) { + $paginasNegro = $linea->paginas; + } + + if (strpos($linea->tipo, "lp_rot_color") !== false) { + $paginasColor = $linea->rotativa_pag_color; + $paginasNegro = $linea->paginas - $linea->rotativa_pag_color; + } + } + + return [$paginasNegro, $paginasColor]; + } } diff --git a/ci4/app/Controllers/Tarifas/Acabados/TarifaAcabados.php b/ci4/app/Controllers/Tarifas/Acabados/TarifaAcabados.php index eb9e47eb..85920898 100644 --- a/ci4/app/Controllers/Tarifas/Acabados/TarifaAcabados.php +++ b/ci4/app/Controllers/Tarifas/Acabados/TarifaAcabados.php @@ -39,10 +39,10 @@ class TarifaAcabados extends BaseResourceController $this->viewData = ['usingServerSideDataTable' => true]; - // Breadcrumbs + // Breadcrumbs $this->viewData['breadcrumb'] = [ ['title' => lang("App.menu_tarifas"), 'route' => "javascript:void(0);", 'active' => false], - ['title' => lang("App.menu_tarifaacabado"), 'route' => site_url('tarifas/tarifaacabado'), 'active' => true] + ['title' => lang("App.menu_tarifaacabado"), 'route' => site_url('tarifas/acabados'), 'active' => true] ]; parent::initController($request, $response, $logger); @@ -133,6 +133,8 @@ class TarifaAcabados extends BaseResourceController endif; // ($requestMethod === 'post') + $this->viewData['proveedores'] = $this->getProveedores(); + $this->viewData['tarifaacabadoEntity'] = isset($sanitizedData) ? new TarifaAcabadoEntity($sanitizedData) : new TarifaAcabadoEntity(); $this->viewData['formAction'] = route_to('tarifaAcabadoAdd'); $this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . lang('Tarifaacabado.moduleTitle') . ' ' . lang('Basic.global.addNewSuffix'); diff --git a/ci4/app/Controllers/Tarifas/Tarifaencuadernacionlineas.php b/ci4/app/Controllers/Tarifas/Tarifaencuadernacionlineas.php index 60545c9d..850225b9 100755 --- a/ci4/app/Controllers/Tarifas/Tarifaencuadernacionlineas.php +++ b/ci4/app/Controllers/Tarifas/Tarifaencuadernacionlineas.php @@ -1,4 +1,5 @@ -request->getPost()) : + + if ($this->request->getPost()): $nullIfEmpty = true; // !(phpversion() >= '8.1'); @@ -84,10 +85,10 @@ class Tarifaencuadernacionlineas extends \App\Controllers\BaseResourceController $sanitizedData = $this->sanitized($postData, $nullIfEmpty); $noException = true; - 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)->save($sanitizedData); } catch (\Exception $e) { @@ -101,14 +102,14 @@ class Tarifaencuadernacionlineas extends \App\Controllers\BaseResourceController $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); else: return $this->redirect2listView('sweet-success', $message); @@ -134,20 +135,20 @@ class Tarifaencuadernacionlineas 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); $tarifaEncuadernacionLinea = $this->model->find($id); - if ($tarifaEncuadernacionLinea == false) : + if ($tarifaEncuadernacionLinea == false): $message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('TarifaEncuadernacionLineas.tarifaencuadernacionLinea')), $id]); return $this->redirect2listView('sweet-error', $message); endif; - - if ($this->request->getPost()) : + + if ($this->request->getPost()): $nullIfEmpty = true; // !(phpversion() >= '8.1'); @@ -156,10 +157,10 @@ class Tarifaencuadernacionlineas extends \App\Controllers\BaseResourceController $sanitizedData = $this->sanitized($postData, $nullIfEmpty); $noException = true; - 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) { @@ -176,12 +177,12 @@ class Tarifaencuadernacionlineas extends \App\Controllers\BaseResourceController $thenRedirect = false; endif; - if ($noException && $successfulResult) : + if ($noException && $successfulResult): $id = $tarifaEncuadernacionLinea->id ?? $id; $message = lang('Basic.global.updateSuccess', [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); else: return $this->redirect2listView('sweet-success', $message); @@ -214,45 +215,90 @@ class Tarifaencuadernacionlineas extends \App\Controllers\BaseResourceController $response = Editor::inst($db, 'tarifa_encuadernacion_lineas') ->fields( Field::inst('paginas_libro_min') - ->validator('Validate::numeric', array( - 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_min.decimal')) + ->validator( + 'Validate::numeric', + array( + 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_min.decimal') + ) ) - ->validator('Validate::notEmpty', array( - 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_min.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_min.required') + ) ), Field::inst('paginas_libro_max') - ->validator('Validate::numeric', array( - 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_max.decimal')) + ->validator( + 'Validate::numeric', + array( + 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_max.decimal') + ) ) - ->validator('Validate::notEmpty', array( - 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_max.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_max.required') + ) ), Field::inst('precio_min') - ->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar') - ->validator('Validate::numeric', array( + ->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar') + ->validator( + 'Validate::numeric', + array( "decimal" => ',', - 'message' => lang('TarifaAcabadoLineas.validation.precio_min.decimal')) + 'message' => lang('TarifaAcabadoLineas.validation.precio_min.decimal') + ) ) - ->validator('Validate::notEmpty', array( - 'message' => lang('TarifaAcabadoLineas.validation.precio_min.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('TarifaAcabadoLineas.validation.precio_min.required') + ) ), Field::inst('precio_max') - ->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar') - ->validator('Validate::numeric', array( + ->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar') + ->validator( + 'Validate::numeric', + array( "decimal" => ',', - 'message' => lang('TarifaAcabadoLineas.validation.precio_max.decimal')) + 'message' => lang('TarifaAcabadoLineas.validation.precio_max.decimal') + ) ) - ->validator('Validate::notEmpty', array( - 'message' => lang('TarifaAcabadoLineas.validation.precio_max.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('TarifaAcabadoLineas.validation.precio_max.required') + ) + ), + Field::inst('total_min') + ->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar') + ->validator( + 'Validate::numeric', + array( + "decimal" => ',', + 'message' => lang('TarifaEncuadernacionTiradas.validation.tirada_min.decimal') + ) + ) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('TarifaEncuadernacionTiradas.validation.tirada_min.required') + ) ), Field::inst('margen') - ->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar') - ->validator('Validate::numeric', array( + ->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar') + ->validator( + 'Validate::numeric', + array( "decimal" => ',', - 'message' => lang('TarifaAcabadoLineas.validation.margen.decimal')) + 'message' => lang('TarifaAcabadoLineas.validation.margen.decimal') + ) ) - ->validator('Validate::notEmpty', array( - 'message' => lang('TarifaAcabadoLineas.validation.margen.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('TarifaAcabadoLineas.validation.margen.required') + ) ), Field::inst('tirada_encuadernacion_id'), Field::inst('user_created_id'), @@ -322,10 +368,10 @@ class Tarifaencuadernacionlineas extends \App\Controllers\BaseResourceController if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); - + $cleandatatable = $reqData['cleandatatable'] ?? 0; - - if($cleandatatable){ + + if ($cleandatatable) { $tarifa_encuadernacion_id = $reqData['tarifa_encuadernacion_id'] ?? -1; @@ -338,11 +384,9 @@ class Tarifaencuadernacionlineas extends \App\Controllers\BaseResourceController $csrfTokenName => $newTokenHash ]; return $this->respond($data); - - } - else{ - + } else { + if (!isset($reqData['draw']) || !isset($reqData['columns'])) { $errstr = 'No data available in response to this specific request.'; $response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr); diff --git a/ci4/app/Controllers/Tarifas/Tarifaencuadernacionlineashoras.php b/ci4/app/Controllers/Tarifas/Tarifaencuadernacionlineashoras.php index 7b306ebb..c3410e12 100755 --- a/ci4/app/Controllers/Tarifas/Tarifaencuadernacionlineashoras.php +++ b/ci4/app/Controllers/Tarifas/Tarifaencuadernacionlineashoras.php @@ -1,4 +1,5 @@ -request->getPost()) : + + if ($this->request->getPost()): $nullIfEmpty = true; // !(phpversion() >= '8.1'); @@ -82,10 +83,10 @@ class Tarifaencuadernacionlineashoras extends \App\Controllers\BaseResourceContr $sanitizedData = $this->sanitized($postData, $nullIfEmpty); $noException = true; - 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)->save($sanitizedData); } catch (\Exception $e) { @@ -99,14 +100,14 @@ class Tarifaencuadernacionlineashoras extends \App\Controllers\BaseResourceContr $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); else: return $this->redirect2listView('sweet-success', $message); @@ -134,20 +135,20 @@ class Tarifaencuadernacionlineashoras extends \App\Controllers\BaseResourceContr public function edit($requestedId = null) { - if ($requestedId == null) : + if ($requestedId == null): return $this->redirect2listView(); endif; $id = filter_var($requestedId, FILTER_SANITIZE_URL); $tarifaEncuadernacionLinea = $this->model->find($id); - if ($tarifaEncuadernacionLinea == false) : + if ($tarifaEncuadernacionLinea == false): $message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('TarifaEncuadernacionLineas.tarifaencuadernacionLinea')), $id]); return $this->redirect2listView('sweet-error', $message); endif; - - if ($this->request->getPost()) : + + if ($this->request->getPost()): $nullIfEmpty = true; // !(phpversion() >= '8.1'); @@ -156,10 +157,10 @@ class Tarifaencuadernacionlineashoras extends \App\Controllers\BaseResourceContr $sanitizedData = $this->sanitized($postData, $nullIfEmpty); $noException = true; - 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) { @@ -176,12 +177,12 @@ class Tarifaencuadernacionlineashoras extends \App\Controllers\BaseResourceContr $thenRedirect = false; endif; - if ($noException && $successfulResult) : + if ($noException && $successfulResult): $id = $tarifaEncuadernacionLinea->id ?? $id; $message = lang('Basic.global.updateSuccess', [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); else: return $this->redirect2listView('sweet-success', $message); @@ -214,40 +215,79 @@ class Tarifaencuadernacionlineashoras extends \App\Controllers\BaseResourceContr $response = Editor::inst($db, 'tarifa_encuadernacion_lineas_horas') ->fields( Field::inst('tiempo_min') - ->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar') - ->validator('Validate::numeric', array( + ->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar') + ->validator( + 'Validate::numeric', + array( "decimal" => ',', - 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_min.decimal')) + 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_min.decimal') + ) ) - ->validator('Validate::notEmpty', array( - 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_min.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_min.required') + ) ), Field::inst('tiempo_max') - ->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar') - ->validator('Validate::numeric', array( + ->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar') + ->validator( + 'Validate::numeric', + array( "decimal" => ',', - 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_max.decimal')) + 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_max.decimal') + ) ) - ->validator('Validate::notEmpty', array( - 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_max.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('TarifaAcabadoLineas.validation.paginas_libro_max.required') + ) ), Field::inst('precio_hora') - ->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar') - ->validator('Validate::numeric', array( + ->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar') + ->validator( + 'Validate::numeric', + array( "decimal" => ',', - 'message' => lang('TarifaAcabadoLineas.validation.precio_min.decimal')) + 'message' => lang('TarifaAcabadoLineas.validation.precio_min.decimal') + ) ) - ->validator('Validate::notEmpty', array( - 'message' => lang('TarifaAcabadoLineas.validation.precio_min.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('TarifaAcabadoLineas.validation.precio_min.required') + ) + ), + Field::inst('total_min') + ->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar') + ->validator( + 'Validate::numeric', + array( + "decimal" => ',', + 'message' => lang('TarifaEncuadernacionTiradas.validation.tirada_min.decimal') + ) + ) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('TarifaEncuadernacionTiradas.validation.tirada_min.required') + ) ), Field::inst('margen') - ->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar') - ->validator('Validate::numeric', array( + ->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar') + ->validator( + 'Validate::numeric', + array( "decimal" => ',', - 'message' => lang('TarifaAcabadoLineas.validation.margen.decimal')) + 'message' => lang('TarifaAcabadoLineas.validation.margen.decimal') + ) ) - ->validator('Validate::notEmpty', array( - 'message' => lang('TarifaAcabadoLineas.validation.margen.required')) + ->validator( + 'Validate::notEmpty', + array( + 'message' => lang('TarifaAcabadoLineas.validation.margen.required') + ) ), Field::inst('tirada_encuadernacion_id'), Field::inst('user_created_id'), @@ -314,10 +354,10 @@ class Tarifaencuadernacionlineashoras extends \App\Controllers\BaseResourceContr { if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); - + $cleandatatable = $reqData['cleandatatable'] ?? 0; - - if($cleandatatable){ + + if ($cleandatatable) { $tarifa_encuadernacion_id = $reqData['tarifa_encuadernacion_id'] ?? -1; @@ -330,9 +370,8 @@ class Tarifaencuadernacionlineashoras extends \App\Controllers\BaseResourceContr $csrfTokenName => $newTokenHash ]; return $this->respond($data); - - } - else{ + + } else { if (!isset($reqData['draw']) || !isset($reqData['columns'])) { $errstr = 'No data available in response to this specific request.'; $response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr); diff --git a/ci4/app/Controllers/Tarifas/Tarifaencuadernaciontiradas.php b/ci4/app/Controllers/Tarifas/Tarifaencuadernaciontiradas.php index d67b6565..4ad0710c 100755 --- a/ci4/app/Controllers/Tarifas/Tarifaencuadernaciontiradas.php +++ b/ci4/app/Controllers/Tarifas/Tarifaencuadernaciontiradas.php @@ -126,15 +126,6 @@ class Tarifaencuadernaciontiradas extends \App\Controllers\BaseResourceControlle ->validator('Validate::notEmpty', array( 'message' => lang('TarifaEncuadernacionTiradas.validation.tirada_min.required')) ), - Field::inst('precio_min') - ->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar') - ->validator('Validate::numeric', array( - "decimal" => ',', - 'message' => lang('TarifaEncuadernacionTiradas.validation.tirada_min.decimal')) - ) - ->validator('Validate::notEmpty', array( - 'message' => lang('TarifaEncuadernacionTiradas.validation.tirada_min.required')) - ), Field::inst('proveedor_id') ->validator('Validate::notEmpty', array( 'message' => lang('TarifaEncuadernacionTiradas.validation.tirada_max.required')) diff --git a/ci4/app/Entities/Presupuestos/PresupuestoEntity.php b/ci4/app/Entities/Presupuestos/PresupuestoEntity.php index d8ade0a6..3969835e 100755 --- a/ci4/app/Entities/Presupuestos/PresupuestoEntity.php +++ b/ci4/app/Entities/Presupuestos/PresupuestoEntity.php @@ -64,7 +64,7 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity "created_at" => null, "updated_at" => null, "comp_tipo_impresion" => null, - "comp_pos_paginas_color" => null, + "pos_paginas_color" => null, "total_coste_papel" => null, "total_margen_papel" => null, "total_margenPercent_papel" => null, @@ -90,6 +90,11 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity "acabado_cubierta_id" => null, "acabado_sobrecubierta_id" => null, "is_duplicado" => false, + 'paginas_color_consecutivas' => null, + 'papel_interior_diferente' => null, + 'paginasCuadernillo' => null, + 'lomo_redondo' => null, + 'cabezada' => null, ]; protected $casts = [ "cliente_id" => "int", @@ -155,5 +160,9 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity "acabado_cubierta_id" => "int", "acabado_sobrecubierta_id" => "int", "is_duplicado" => "boolean", + 'paginas_color_consecutivas' => "boolean", + 'papel_interior_diferente' => "boolean", + 'paginasCuadernillo' => "int", + 'lomo_redondo' => "boolean", ]; } diff --git a/ci4/app/Entities/Tarifas/Acabados/TarifaAcabadoEntity.php b/ci4/app/Entities/Tarifas/Acabados/TarifaAcabadoEntity.php index 0d5852a1..37554c8d 100644 --- a/ci4/app/Entities/Tarifas/Acabados/TarifaAcabadoEntity.php +++ b/ci4/app/Entities/Tarifas/Acabados/TarifaAcabadoEntity.php @@ -8,6 +8,8 @@ class TarifaAcabadoEntity extends \CodeIgniter\Entity\Entity protected $attributes = [ "id" => null, "nombre" => null, + "code" => null, + "comment" => null, "precio_min" => 0, "importe_fijo" => 0, "mostrar_en_presupuesto" => 1, @@ -22,6 +24,8 @@ class TarifaAcabadoEntity extends \CodeIgniter\Entity\Entity ]; protected $casts = [ "precio_min" => "float", + "comment" => "string", + "code" => "string", "importe_fijo" => "float", "user_created_id" => "int", "user_updated_id" => "int", diff --git a/ci4/app/Entities/Tarifas/TarifaEncuadernacionEntity.php b/ci4/app/Entities/Tarifas/TarifaEncuadernacionEntity.php index 87d18ebe..03d68989 100755 --- a/ci4/app/Entities/Tarifas/TarifaEncuadernacionEntity.php +++ b/ci4/app/Entities/Tarifas/TarifaEncuadernacionEntity.php @@ -9,6 +9,7 @@ class TarifaEncuadernacionEntity extends \CodeIgniter\Entity\Entity protected $attributes = [ "id" => null, "nombre" => null, + "code" => null, "mostrar_en_presupuesto" => 1, "tipo_encuadernacion" => 0, "servicio_encuadernacion" => 0, @@ -22,6 +23,7 @@ class TarifaEncuadernacionEntity extends \CodeIgniter\Entity\Entity ]; protected $casts = [ "mostrar_en_presupuesto" => "int", + "code" => "string", "tipo_encuadernacion" => "int", "servicio_encuadernacion" => "int", "por_horas" => "int", diff --git a/ci4/app/Entities/Tarifas/TarifaEncuadernacionLinea.php b/ci4/app/Entities/Tarifas/TarifaEncuadernacionLinea.php index be10cf9c..6a72e00c 100755 --- a/ci4/app/Entities/Tarifas/TarifaEncuadernacionLinea.php +++ b/ci4/app/Entities/Tarifas/TarifaEncuadernacionLinea.php @@ -15,6 +15,7 @@ class TarifaEncuadernacionLinea extends \CodeIgniter\Entity\Entity "precio_max" => 0, "tirada_min" => 0, "tirada_max" => 0, + "total_min" => 0, "margen" => 0, "user_created_id" => 0, "user_updated_id" => 0, @@ -31,6 +32,7 @@ class TarifaEncuadernacionLinea extends \CodeIgniter\Entity\Entity "precio_max" => "float", "tirada_min" => "float", "tirada_max" => "float", + "total_min" => "float", "margen" => "float", "user_created_id" => "int", "user_updated_id" => "int", diff --git a/ci4/app/Entities/Tarifas/TarifaEncuadernacionLineaHoras.php b/ci4/app/Entities/Tarifas/TarifaEncuadernacionLineaHoras.php index 2f5d6f0a..23a93e1d 100755 --- a/ci4/app/Entities/Tarifas/TarifaEncuadernacionLineaHoras.php +++ b/ci4/app/Entities/Tarifas/TarifaEncuadernacionLineaHoras.php @@ -11,6 +11,7 @@ class TarifaEncuadernacionLineaHoras extends \CodeIgniter\Entity\Entity "tiempo_min" => 0, "tiempo_max" => 0, "precio_hora" => 0, + "total_min" => 0, "margen" => 0, "user_created_id" => 0, "user_updated_id" => 0, @@ -22,6 +23,7 @@ class TarifaEncuadernacionLineaHoras extends \CodeIgniter\Entity\Entity "tirada_encuadernacion_id" => "int", "tiempo_min" => "float", "tiempo_max" => "float", + "total_min" => "float", "precio_hora" => "float", "margen" => "float", "user_created_id" => "int", diff --git a/ci4/app/Entities/Tarifas/TarifaEncuadernacionTirada.php b/ci4/app/Entities/Tarifas/TarifaEncuadernacionTirada.php index 1a65fe07..91f35604 100755 --- a/ci4/app/Entities/Tarifas/TarifaEncuadernacionTirada.php +++ b/ci4/app/Entities/Tarifas/TarifaEncuadernacionTirada.php @@ -11,7 +11,6 @@ class TarifaEncuadernacionTirada extends \CodeIgniter\Entity\Entity "tirada_min" => 0, "tirada_max" => 0, "proveedor_id" => 0, - "precio_min" => 0, "importe_fijo" => 0, "user_created_id" => 0, "user_updated_id" => 0, @@ -24,7 +23,6 @@ class TarifaEncuadernacionTirada extends \CodeIgniter\Entity\Entity "tirada_min" => "float", "tirada_max" => "float", "proveedor_id" => "int", - "precio_min" => "float", "importe_fijo" => "float", "user_created_id" => "int", "user_updated_id" => "int", diff --git a/ci4/app/Entities/Tarifas/TarifaEnvioEntity.php b/ci4/app/Entities/Tarifas/TarifaEnvioEntity.php index 0becbc9d..acc68f37 100755 --- a/ci4/app/Entities/Tarifas/TarifaEnvioEntity.php +++ b/ci4/app/Entities/Tarifas/TarifaEnvioEntity.php @@ -9,6 +9,8 @@ class TarifaEnvioEntity extends \CodeIgniter\Entity\Entity "id" => null, "pais_id" => null, "nombre" => null, + "code" => null, + "comment" => null, "user_created_id" => 0, "user_updated_id" => 0, "is_deleted" => 0, @@ -17,6 +19,8 @@ class TarifaEnvioEntity extends \CodeIgniter\Entity\Entity ]; protected $casts = [ "pais_id" => "?int", + "code" => "string", + "comment" => "string", "user_created_id" => "int", "user_updated_id" => "int", "is_deleted" => "int", diff --git a/ci4/app/Entities/Tarifas/TarifaManipuladoEntity.php b/ci4/app/Entities/Tarifas/TarifaManipuladoEntity.php index aac261a4..d9f3c2f7 100755 --- a/ci4/app/Entities/Tarifas/TarifaManipuladoEntity.php +++ b/ci4/app/Entities/Tarifas/TarifaManipuladoEntity.php @@ -9,6 +9,8 @@ class TarifaManipuladoEntity extends \CodeIgniter\Entity\Entity protected $attributes = [ "id" => null, "nombre" => null, + "code" => null, + "comment" => null, "precio_min" => 0, "importe_fijo" => 0, "mostrar_en_presupuesto" => 1, @@ -22,6 +24,8 @@ class TarifaManipuladoEntity extends \CodeIgniter\Entity\Entity protected $casts = [ "precio_min" => "float", "importe_fijo" => "float", + "code" => "string", + "comment" => "string", "mostrar_en_presupuesto" => "int", "user_created_id" => "int", "user_updated_id" => "int", diff --git a/ci4/app/Entities/Tarifas/TarifaextraEntity.php b/ci4/app/Entities/Tarifas/TarifaextraEntity.php index ac6b35eb..db2b0594 100755 --- a/ci4/app/Entities/Tarifas/TarifaextraEntity.php +++ b/ci4/app/Entities/Tarifas/TarifaextraEntity.php @@ -8,6 +8,8 @@ class TarifaextraEntity extends \CodeIgniter\Entity\Entity protected $attributes = [ "id" => null, "nombre" => null, + "code" => null, + "comment" => null, "precio" => null, "margen" => 0, "mostrar_en_presupuesto" => 1, @@ -20,6 +22,8 @@ class TarifaextraEntity extends \CodeIgniter\Entity\Entity ]; protected $casts = [ "precio" => "float", + "code" => "string", + "comment" => "string", "margen" => "float", "mostrar_en_presupuesto" => "int", "user_created_id" => "int", diff --git a/ci4/app/Entities/Tarifas/TarifapreimpresionEntity.php b/ci4/app/Entities/Tarifas/TarifapreimpresionEntity.php index a6ea7177..b1873597 100755 --- a/ci4/app/Entities/Tarifas/TarifapreimpresionEntity.php +++ b/ci4/app/Entities/Tarifas/TarifapreimpresionEntity.php @@ -8,6 +8,8 @@ class TarifapreimpresionEntity extends \CodeIgniter\Entity\Entity protected $attributes = [ "id" => null, "nombre" => null, + "code" => null, + "comment" => null, "precio" => null, "margen" => 0, "mostrar_en_presupuesto" => 1, @@ -21,6 +23,8 @@ class TarifapreimpresionEntity extends \CodeIgniter\Entity\Entity protected $casts = [ "precio" => "float", "margen" => "float", + "code" => "string", + "comment" => "string", "mostrar_en_presupuesto" => "int", "user_created_id" => "int", "user_update_id" => "int", diff --git a/ci4/app/Language/en/Presupuestos.php b/ci4/app/Language/en/Presupuestos.php index 4d514cfa..cce0c828 100755 --- a/ci4/app/Language/en/Presupuestos.php +++ b/ci4/app/Language/en/Presupuestos.php @@ -31,12 +31,12 @@ return [ 'presupuestoEstadoAceptado' => 'Acepted', 'incidencia' => 'Incident', 'reimpresion' => 'Reprint', - 'reimpresion' => 'Free of charge', 'autor' => 'Author', 'coleccion' => 'Collection', 'numeroEdicion' => 'Edition number', 'isbn' => 'ISBN', 'referenciaCliente' => 'Customer reference', + 'formatoLibro' => "Book format", 'papelFormatoId' => "Size", 'papelFormatoPersonalizado' => 'Custom size', 'papelFormatoAncho' => 'Width', diff --git a/ci4/app/Language/en/Tarifaacabado.php b/ci4/app/Language/en/Tarifaacabado.php index e9413fab..e527a403 100755 --- a/ci4/app/Language/en/Tarifaacabado.php +++ b/ci4/app/Language/en/Tarifaacabado.php @@ -10,6 +10,9 @@ return [ 'id' => 'ID', 'moduleTitle' => 'Finishing Rates', 'nombre' => 'Name', + 'code' => 'Código', + 'comment' => 'Comentario', + 'comment_placeholder' => 'Inserte un comentario', 'precioMax' => 'Price Max', 'precioMin' => 'Price Min', 'precioMin' => 'Min Price', diff --git a/ci4/app/Language/es/App.php b/ci4/app/Language/es/App.php index 50c00a2c..80a35a45 100755 --- a/ci4/app/Language/es/App.php +++ b/ci4/app/Language/es/App.php @@ -26,8 +26,12 @@ return [ "global_inactive" => "Inactivo", "global_copy" => "Dupdo", "global_print" => "Impresión", + "global_print2" => "Imprimir", + "global_confirm" => "Confirmar", "global_excel" => "Excel", "global_pdf" => "PDF", + "global_prev" => "Anterior", + "global_next" => "Siguiente", // LOGIN - Index "login_title" => "Iniciar sesión en su cuenta", @@ -680,6 +684,7 @@ return [ "menu_configuration" => "Configuración", "menu_variables" => "Variables sistema", + "menu_error_presupuesto" => "Errores presupuesto", "menu_calendario" => "Calendario", "menu_paises" => "Paises", "menu_correo" => "Correo", diff --git a/ci4/app/Language/es/Chat.php b/ci4/app/Language/es/Chat.php index 1e649965..3bc975c8 100644 --- a/ci4/app/Language/es/Chat.php +++ b/ci4/app/Language/es/Chat.php @@ -2,6 +2,7 @@ return [ "chat" => "Mensajería", + "messages" => "Mensajes", "modal" => [ "new_hebra" => "Nueva hebra", "title" => "Título", diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index 4904fd8d..d9217b5f 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -44,7 +44,10 @@ return [ 'titulo' => 'Título', 'paisId' => 'País', 'incRei' => 'Incidencia \ Reimpresión', - 'paginas' => 'Paginas', + 'paginas' => 'Páginas', + 'paginasNegro' => 'Páginas Negro', + 'paginasColor' => 'Páginas Color', + 'totalPaginas' => 'Total páginas', 'tirada' => 'Tirada', 'totalPedido' => 'Total Pedido', 'totalPresupuesto' => 'Total Presupuesto', @@ -79,6 +82,8 @@ return [ 'tipoImpresion' => 'Tipo de impresión', 'papelesComparadorCosidoTapaBlanda' => 'Papeles interior y cubierta', 'posicionPagColor' => 'Posición páginas a color', + 'papelDiferente' => 'Papel color y negro diferente', + 'paginasColorConsecutivas' => 'Páginas color consecutivas', 'colorPageInstructions' => 'Introduzca la posición de las páginas a color dentro del libro. Ej: 3,5,7 ó 4-10,20,155', 'numeroPaginas' => 'Nº Páginas', 'papel' => 'Papel', @@ -87,7 +92,43 @@ return [ 'retractilado' => 'Retractilado individual', 'retractilado5' => 'Retractilado de 5', 'Guardas' => 'Guardas', + 'papelGuardas' => 'Papel de guardas', + 'offsetBlancoGuardas' => 'Offset blanco 170 gr', + 'offsetAhuesadoGuardas' => 'Offset ahuesado 170 gr', + 'guardasImpresas' => "Guardas impresas", 'imprimir_guardas' => 'Imprimir guardas', + 'cabezada' => 'Cabezada', + 'blanca' => 'Blanca', + 'verde' => 'Verde', + 'azul' => 'Azul', + 'rojaAmarilla' => 'Roja-Amarilla', + 'plastificado' => 'Plastificado', + 'brillo' => 'Brillo', + 'mate' => 'Mate', + 'antirrayado' => 'Anti-rayado', + 'rugoso' => 'Sandy (rugoso)', + 'sinPlastificar' => 'Sin plastificar', + 'barniz' => 'Barniz UVI', + 'relieve2D' => 'Relieve 2D', + 'relieve3D' => 'Relieve 3D', + 'barnizDescription' => 'Barnizado selectivo en zonas de la cubierta', + 'estampado' => 'Estampado', + 'oro' => 'Oro', + 'plata' => 'Plata', + 'cobre' => 'Cobre', + 'bronce' => 'Bronce', + 'retractiladoTitle' => 'Retractilado', + 'papelSobrecubierta' => 'Papel sobrecubierta', + 'tamanioSolapasSobrecubierta' => 'Tamaño solapas sobrecubierta', + 'plastificadoSobrecubierta' => 'Plastificado sobrecubierta', + 'faja' => 'Faja', + 'altoFaja' => 'Alto faja', + 'papelFaja' => 'Papel faja', + 'tamanioSolapasFaja' => 'Tamaño solapas faja', + 'plastificadoFaja' => 'Plastificado faja', + 'estucadoMate170gr' => 'Estucado mate 170 gr', + 'estucadoMate200gr' => 'Estucado mate 200 gr', + 'fajaColor' => 'Imprimir faja a color', 'compInteriorPlana' => 'Interior en plana', 'compInteriorRotativa' => 'Interior en rotativa', @@ -212,6 +253,11 @@ return [ 'totalAceptado' => 'Total aceptado', + // Placeholders + 'formatoLibro' => "Formato libro", + 'selectCliente' => "Seleccione cliente", + + // Preview 'preview' => 'Previsualización de configuraciones', 'preview-conf-bn' => 'Configuración Blanco y Negro', @@ -302,10 +348,19 @@ return [ 'no_lp_for_merma' => 'Inserte líneas de presupuesto para calcular la merma', 'ejemplares_envio' => 'El número de ejemplares enviados no coincide con la tirada', 'cliente' => 'Debe seleccionar un cliente', + 'papelFormato' => 'Seleccione un formato', + 'tipo_libro' => 'Seleccione un tipo de libro', + 'disenio_interior' => 'Seleccione el diseño del interior', + 'papel_interior' => 'Seleccione el tipo de papel', + 'gramaje_interior' => 'Seleccione el gramaje', 'pais' => 'Debe seleccionar un país', 'integer_greatherThan_0' => 'Número entero > 0 requerido', 'tirada_no_valida' => "Tirada no valida", 'sin_gramaje' => "Seleccione gramaje", + 'tipo_cubierta' => 'Seleccione tipo de cubierta', + 'opcion_solapas' => 'Seleccione la opción para las solapas', + 'paginas_cosido' => 'El número de páginas para cosido debe ser múltiplo de 4', + 'paginas_pares' => 'El número de páginas debe ser par', ], 'errores' => [ diff --git a/ci4/app/Language/es/Tarifaencuadernacion.php b/ci4/app/Language/es/Tarifaencuadernacion.php index 34c01087..fbc59ef5 100755 --- a/ci4/app/Language/es/Tarifaencuadernacion.php +++ b/ci4/app/Language/es/Tarifaencuadernacion.php @@ -10,6 +10,9 @@ return [ 'id' => 'ID', 'moduleTitle' => 'Tarifas Encuadernación', 'nombre' => 'Nombre', + 'code' => 'Código', + 'comment' => 'Comentario', + 'comment_placeholder' => 'Inserte un comentario', 'precioMax' => 'Precio T. Mín', 'precioMin' => 'Precio T. Máx', 'importeFijo' => 'Importe Fijo', diff --git a/ci4/app/Language/es/Tarifaextra.php b/ci4/app/Language/es/Tarifaextra.php index 3d640b2b..ea711c63 100755 --- a/ci4/app/Language/es/Tarifaextra.php +++ b/ci4/app/Language/es/Tarifaextra.php @@ -7,6 +7,9 @@ return [ 'id' => 'ID', 'moduleTitle' => 'Tarifas Servicios Extra', 'nombre' => 'Nombre', + 'code' => 'Código', + 'comment' => 'Comentario', + 'comment_placeholder' => 'Inserte un comentario', 'precio' => 'Precio', 'precioMin' => 'Precio Mínimo', 'importeFijo' => 'Importe Fijo', diff --git a/ci4/app/Language/es/Tarifamanipulado.php b/ci4/app/Language/es/Tarifamanipulado.php index 20079ddb..80afab6a 100755 --- a/ci4/app/Language/es/Tarifamanipulado.php +++ b/ci4/app/Language/es/Tarifamanipulado.php @@ -10,6 +10,9 @@ return [ 'id' => 'ID', 'moduleTitle' => 'Tarifas Manipulado', 'nombre' => 'Nombre', + 'code' => 'Código', + 'comment' => 'Comentario', + 'comment_placeholder' => 'Inserte un comentario', 'importeMinimo' => 'Importe mínimo', 'precioMax' => 'Precio T. Mín', 'precioMin' => 'Precio T. Máx', diff --git a/ci4/app/Language/es/Tarifapreimpresion.php b/ci4/app/Language/es/Tarifapreimpresion.php index 80a0562a..f98cd490 100755 --- a/ci4/app/Language/es/Tarifapreimpresion.php +++ b/ci4/app/Language/es/Tarifapreimpresion.php @@ -7,6 +7,9 @@ return [ 'id' => 'ID', 'moduleTitle' => 'Tarifas Preimpresión', 'nombre' => 'Nombre', + 'code' => 'Código', + 'comment' => 'Comentario', + 'comment_placeholder' => 'Inserte un comentario', 'precio' => 'Precio', 'precioMin' => 'Precio Mínimo', 'importeFijo' => 'Importe Fijo', @@ -25,7 +28,16 @@ return [ 'required' => 'El campo {field} es obligatorio.', ], + 'code' => [ + 'max_length' => 'El campo {field} no puede exceder {param} caracteres en longitud.', + 'required' => 'El campo {field} es obligatorio.', + ], + 'comment' => [ + 'max_length' => 'El campo {field} no puede exceder {param} caracteres en longitud.', + 'required' => 'El campo {field} es obligatorio.', + + ], 'precio' => [ 'decimal' => 'El campo {field} debe contener un número decimal.', 'required' => 'El campo {field} es obligatorio.', diff --git a/ci4/app/Language/es/TarifasEnvios.php b/ci4/app/Language/es/TarifasEnvios.php index 5591a894..db669784 100755 --- a/ci4/app/Language/es/TarifasEnvios.php +++ b/ci4/app/Language/es/TarifasEnvios.php @@ -9,6 +9,9 @@ return [ 'isDeleted' => 'Is Deleted', 'moduleTitle' => 'Tarifas Envíos', 'nombre' => 'Nombre', + 'code' => 'Código', + 'comment' => 'Comentario', + 'comment_placeholder' => 'Inserte un comentario', 'paisId' => 'Pais', 'tarifaEnvio' => 'Tarifa Envío', 'tarifaEnvioList' => 'Lista Tarifas Envío', diff --git a/ci4/app/Models/Chat/ChatModel.php b/ci4/app/Models/Chat/ChatModel.php index 161b8115..29367da0 100644 --- a/ci4/app/Models/Chat/ChatModel.php +++ b/ci4/app/Models/Chat/ChatModel.php @@ -199,7 +199,7 @@ class ChatModel extends Model } public function getClienteChatPedidos(array $pedidos) : array { - $results = $this->db->table("chats") + $q = $this->db->table("chats") ->select([ "chats.id as chatId", "chats.pedido_id as pedidoId", @@ -209,8 +209,13 @@ class ChatModel extends Model ]) ->join("chat_departments","chat_departments.id = chats.chat_department_id","left") ->join("pedidos","pedidos.id = chats.pedido_id","left") - ->whereIn("pedidos.id",$pedidos) - ->get()->getResultObject(); + ->where('chats.chat_department_id is NOT NULL', NULL, FALSE); + if(count($pedidos)>0){ + $q->whereIn("pedidos.id",$pedidos); + }else{ + return []; + } + $results = $q->get()->getResultObject(); $chatMessageModel = model(ChatMessageModel::class); $count = 0; foreach ($results as $row) { @@ -220,13 +225,14 @@ class ChatModel extends Model $count++; } } + $row->uri = "/pedidos/edit/".$row->pedidoId; $row->unreadMessages=$count; } return $results; } public function getClienteChatFacturas(array $facturas) : array { - $results = $this->db->table("chats") + $q = $this->db->table("chats") ->select([ "chats.id as chatId", "chats.factura_id as facturaId", @@ -236,8 +242,14 @@ class ChatModel extends Model ]) ->join("chat_departments","chat_departments.id = chats.chat_department_id","left") ->join("facturas","facturas.id = chats.factura_id","left") - ->whereIn("facturas.id",$facturas) - ->get()->getResultObject(); + ->where('chats.chat_department_id is NOT NULL', NULL, FALSE); + + if(count($facturas)>0){ + $q->whereIn("facturas.id",$facturas); + }else{ + return []; + } + $results = $q->get()->getResultObject(); $chatMessageModel = model(ChatMessageModel::class); $count = 0; foreach ($results as $row) { @@ -247,13 +259,14 @@ class ChatModel extends Model $count++; } } + $row->uri = "/facturas/edit/".$row->facturaId; $row->unreadMessages=$count; } return $results; } public function getClienteChatPresupuestos(array $presupuestos) : array { - $results = $this->db->table("chats") + $q = $this->db->table("chats") ->select([ "chats.id as chatId", "chats.presupuesto_id as presupuestoId", @@ -263,8 +276,14 @@ class ChatModel extends Model ]) ->join("chat_departments","chat_departments.id = chats.chat_department_id","left") ->join("presupuestos","presupuestos.id = chats.presupuesto_id","left") - ->whereIn("presupuestos.id",$presupuestos) - ->get()->getResultObject(); + ->where('chats.chat_department_id is NOT NULL', NULL, FALSE); + + if(count($presupuestos)>0){ + $q->whereIn("presupuestos.id",$presupuestos); + }else{ + return []; + } + $results = $q->get()->getResultObject(); $chatMessageModel = model(ChatMessageModel::class); $count = 0; foreach ($results as $row) { @@ -274,6 +293,7 @@ class ChatModel extends Model $count++; } } + $row->uri = "/presupuestos/presupuestocliente/edit/".$row->presupuestoId; $row->unreadMessages=$count; } diff --git a/ci4/app/Models/Clientes/ClienteDireccionesModel.php b/ci4/app/Models/Clientes/ClienteDireccionesModel.php index 5ea8db63..e60eab05 100755 --- a/ci4/app/Models/Clientes/ClienteDireccionesModel.php +++ b/ci4/app/Models/Clientes/ClienteDireccionesModel.php @@ -54,7 +54,7 @@ class ClienteDireccionesModel extends \App\Models\BaseModel ], "email" => [ "label" => "ClienteDirecciones.email", - "rules" => "trim|max_length[100]|valid_email", + "rules" => "trim|max_length[100]", ], "cp" => [ "label" => "ClienteDirecciones.cp", diff --git a/ci4/app/Models/Clientes/ClienteModel.php b/ci4/app/Models/Clientes/ClienteModel.php index 8563eef1..a1193860 100755 --- a/ci4/app/Models/Clientes/ClienteModel.php +++ b/ci4/app/Models/Clientes/ClienteModel.php @@ -1,4 +1,5 @@ groupStart() - ->like("t1.nombre", $search) - ->orLike("t1.alias", $search) - ->orLike("t1.cif", $search) - ->orLike("t1.email", $search) - ->orLike("t1.soporte_id", $search) - ->orLike("t1.forma_pago_id", $search) - ->orLike("t1.vencimiento", $search) - ->orLike("t5.id", $search) - ->orLike("t5.first_name", $search) - ->orLike("t5.last_name", $search) - ->orLike("t7.id", $search) - ->orLike("t7.nombre", $search) - ->groupEnd(); + ->groupStart() + ->like("t1.nombre", $search) + ->orLike("t1.alias", $search) + ->orLike("t1.cif", $search) + ->orLike("t1.email", $search) + ->orLike("t1.soporte_id", $search) + ->orLike("t1.forma_pago_id", $search) + ->orLike("t1.vencimiento", $search) + ->orLike("t5.id", $search) + ->orLike("t5.first_name", $search) + ->orLike("t5.last_name", $search) + ->orLike("t7.id", $search) + ->orLike("t7.nombre", $search) + ->groupEnd(); } /* TO-DO: Implementar la lógica de negocio para el crédito disponible */ - public function creditoDisponible($cliente_id){ + public function creditoDisponible($cliente_id) + { return true; } - public function getClienteDataFacturas($cliente_id){ + public function getClienteDataFacturas($cliente_id) + { $builder = $this->db ->table($this->table . " t1") ->select( @@ -329,27 +332,27 @@ class ClienteModel extends \App\Models\BaseModel ->where("t1.id", $cliente_id); $builder->join("lg_paises t2", "t1.pais_id = t2.id", "left"); $builder->join("lg_provincias t3", "t1.provincia_id = t3.id", "left"); - + return $builder->get()->getResultArray(); } - public function getClienteDataPresupuestoPedidoFactura(int $cliente_id) : array + public function getClienteDataPresupuestoPedidoFactura(int $cliente_id): array { $query = $this->db - ->table($this->table." t1") - ->select([ - "t1.id as clienteId", - "presupuestos.id as presupuestoId", - "pedidos.id as pedidoId", - "presupuesto_estados.estado as presupuestoEstado", - "facturas_pedidos_lineas.factura_id as facturaId", + ->table($this->table . " t1") + ->select([ + "t1.id as clienteId", + "presupuestos.id as presupuestoId", + "pedidos.id as pedidoId", + "presupuesto_estados.estado as presupuestoEstado", + "facturas_pedidos_lineas.factura_id as facturaId", ]) - ->join("presupuestos","t1.id = presupuestos.cliente_id","left") - ->join("presupuesto_estados","presupuestos.estado_id = presupuesto_estados.id","left") - ->join("pedidos_linea","presupuestos.id = pedidos_linea.presupuesto_id","left") - ->join("pedidos","pedidos.id = pedidos_linea.pedido_id","left") - ->join("facturas_pedidos_lineas","facturas_pedidos_lineas.pedido_linea_id = pedidos_linea.id","left") - ->where("t1.id",$cliente_id); + ->join("presupuestos", "t1.id = presupuestos.cliente_id", "left") + ->join("presupuesto_estados", "presupuestos.estado_id = presupuesto_estados.id", "left") + ->join("pedidos_linea", "presupuestos.id = pedidos_linea.presupuesto_id", "left") + ->join("pedidos", "pedidos.id = pedidos_linea.pedido_id", "left") + ->join("facturas_pedidos_lineas", "facturas_pedidos_lineas.pedido_linea_id = pedidos_linea.id", "left") + ->where("t1.id", $cliente_id); $data = $query->get()->getResultObject(); $facturas = []; $presupuestos = []; @@ -367,4 +370,23 @@ class ClienteModel extends \App\Models\BaseModel return $result; } + + public function getNombre($id = -1) + { + + try { + + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.nombre AS nombre" + ) + ->where("id", $id) + ->where("is_deleted", 0); + + return $builder->get()->getResultObject()[0]->nombre; + } catch (\Exception $e) { + return null; + } + } } diff --git a/ci4/app/Models/Configuracion/PapelFormatoModel.php b/ci4/app/Models/Configuracion/PapelFormatoModel.php index 6d682a71..03391b5b 100755 --- a/ci4/app/Models/Configuracion/PapelFormatoModel.php +++ b/ci4/app/Models/Configuracion/PapelFormatoModel.php @@ -1,4 +1,5 @@ groupStart() - ->like("t1.id", $search) - ->orLike("t1.ancho", $search) - ->orLike("t1.alto", $search) - ->orLike("t1.created_at", $search) - ->orLike("t1.updated_at", $search) - ->orLike("t1.id", $search) - ->orLike("t1.ancho", $search) - ->orLike("t1.alto", $search) - ->orLike("t1.created_at", $search) - ->orLike("t1.updated_at", $search) - ->groupEnd(); + ->groupStart() + ->like("t1.id", $search) + ->orLike("t1.ancho", $search) + ->orLike("t1.alto", $search) + ->orLike("t1.created_at", $search) + ->orLike("t1.updated_at", $search) + ->orLike("t1.id", $search) + ->orLike("t1.ancho", $search) + ->orLike("t1.alto", $search) + ->orLike("t1.created_at", $search) + ->orLike("t1.updated_at", $search) + ->groupEnd(); } - public function getElementsForMenu(){ + public function getElementsForMenu() + { return $this->db ->table($this->table . " t1") ->select( "t1.id AS id, CONCAT(t1.ancho, ' x ', t1.alto) AS tamanio" )->where('is_deleted', 0)->orderBy('orden_select', 'asc')->get()->getResultObject(); } + + public function getElementsForMenu2($search = "") + { + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.id AS id, CONCAT(t1.ancho, ' x ', t1.alto) AS name" + ) + ->where('is_deleted', 0) + ->where('id>', 0) + ->orderBy('orden_select', 'asc'); + + + return empty($search) + ? $builder->get()->getResultObject() + : $builder + ->groupStart() + ->like('t1.ancho', $search) + ->orLike('t1.alto', $search) + ->groupEnd()->get()->getResultObject(); + } + + + public function getNombre($id = -1) + { + try { + $builder = $this->db + ->table($this->table . " t1") + ->select( + "CONCAT(t1.ancho, ' x ', t1.alto) AS name" + ) + ->where('t1.id', $id); + + return $builder->get()->getResultObject()[0]->name; + } catch (\Exception $e) { + return null; + } + } } diff --git a/ci4/app/Models/Configuracion/PapelGenericoModel.php b/ci4/app/Models/Configuracion/PapelGenericoModel.php index 6b55a382..49f4a7a1 100755 --- a/ci4/app/Models/Configuracion/PapelGenericoModel.php +++ b/ci4/app/Models/Configuracion/PapelGenericoModel.php @@ -61,6 +61,37 @@ class PapelGenericoModel extends \App\Models\BaseModel ], ]; + + public function getIdFromCode(string $code=""){ + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.id AS id, t1.nombre AS nombre" + ) + ->where("t1.code", $code) + ->where("t1.is_deleted", 0); + $data = $builder->get()->getFirstRow(); + // se convierte a de stdClass a array + $data = json_decode(json_encode($data), true); + return $data; + } + + + public function getCodeFromId($id=0){ + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.code AS code" + ) + ->where("t1.id", $id) + ->where("t1.is_deleted", 0); + $data = $builder->get()->getFirstRow(); + // se convierte a de stdClass a array + $data = json_decode(json_encode($data), true); + return $data; + } + + /** * Get resource data. * diff --git a/ci4/app/Models/Configuracion/PapelImpresionModel.php b/ci4/app/Models/Configuracion/PapelImpresionModel.php index c5da113b..eac4807c 100755 --- a/ci4/app/Models/Configuracion/PapelImpresionModel.php +++ b/ci4/app/Models/Configuracion/PapelImpresionModel.php @@ -322,4 +322,22 @@ class PapelImpresionModel extends \App\Models\BaseModel return $builder->orderBy("t1.id", "asc")->get()->getResultObject(); } + + public function getPapelGenericoCode($papel_id = 0){ + $builder = $this->db + ->table($this->table . " t1") + ->select("t2.code AS code") + ->join("lg_papel_generico t2", "t1.papel_generico_id = t2.id", "left") + ->where("t1.id", $papel_id) + ->where("t1.is_deleted", 0) + ->where("t1.isActivo", 1) + ->where("t2.is_deleted", 0); + + $result = $builder->get()->getResultObject(); + if(count($result) > 0){ + return $result[0]->code; + } + else + return ""; + } } diff --git a/ci4/app/Models/Presupuestos/BuscadorModel.php b/ci4/app/Models/Presupuestos/BuscadorModel.php index 99caa4f5..e1df2343 100644 --- a/ci4/app/Models/Presupuestos/BuscadorModel.php +++ b/ci4/app/Models/Presupuestos/BuscadorModel.php @@ -80,7 +80,7 @@ class BuscadorModel extends \App\Models\BaseModel "comparador_json_data", "is_deleted", "comp_tipo_impresion", - "comp_pos_paginas_color", + "pos_paginas_color", "total_coste_papel", "total_margen_papel", "total_margenPercent_papel", diff --git a/ci4/app/Models/Presupuestos/PresupuestoDireccionesModel.php b/ci4/app/Models/Presupuestos/PresupuestoDireccionesModel.php index f89ddfd3..90da4d00 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoDireccionesModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoDireccionesModel.php @@ -123,4 +123,21 @@ class PresupuestoDireccionesModel extends \App\Models\BaseModel return $builder; } + public function getDireccion($id = -1) + { + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.id AS id, t1.att AS att, + t1.email AS email, t1.direccion AS direccion, t1.pais_id AS pais_id, t3.nombre AS pais, + t1.municipio AS municipio, t1.provincia AS provincia, t1.cp AS cp, t1.telefono AS telefono" + ); + + $builder->where('t1.id', $id); + $builder->join("lg_paises t3", "t1.pais_id = t3.id", "left"); + + + return $builder->get()->getResultObject(); + } + } diff --git a/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php b/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php index f8af0109..956bbe77 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php @@ -267,7 +267,15 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel $precio_total = floatval(1.0* $tarifa_proveedor->precio_hora* $tiempo) * (1+$tarifa_value[0]->margen/100.0); if (!$POD){ $precio_total += floatval($tarifa_proveedor->tarifa_importe_fijo); - } + } + + $tarifa_precio_min = floatval($tarifa_proveedor->tarifa_precio_min); + + if($tarifa_precio_min > $precio_total){ + $total = $total-($total * $margen/100.0); + $margen = round(100.0 * (floatval($$tarifa_precio_min) - $total) / floatval($$tarifa_precio_min), 0); + $total = floatval($$tarifa_precio_min); + } $result_data[0] = floatval($precio_total / $tirada); // Precio/unidad $result_data[1] = $precio_total; @@ -323,11 +331,12 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel $total = $precio_unidad * $ejemplares; $margen = floatval($tarifa->margen); + $tarifa_precio_min = floatval($tarifa->tarifa_precio_min); - if($tarifa->tarifa_precio_min > $total){ + if($tarifa_precio_min > $total){ $total = $total-($total * $margen/100.0); - $margen = round(100.0 * (floatval($tarifa->tarifa_precio_min) - $total) / floatval($tarifa->tarifa_precio_min), 0); - $total = floatval($tarifa->tarifa_precio_min); + $margen = round(100.0 * (floatval($tarifa_precio_min) - $total) / floatval($tarifa_precio_min), 0); + $total = floatval($tarifa_precio_min); $precio_unidad = round(floatval($total / $ejemplares), 2); } diff --git a/ci4/app/Models/Presupuestos/PresupuestoModel.php b/ci4/app/Models/Presupuestos/PresupuestoModel.php index 0150f6af..f242d25e 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoModel.php @@ -96,7 +96,9 @@ class PresupuestoModel extends \App\Models\BaseModel "comparador_json_data", "is_deleted", "comp_tipo_impresion", - "comp_pos_paginas_color", + "pos_paginas_color", + "paginas_color_consecutivas", + "papel_interior_diferente", "total_coste_papel", "total_margen_papel", "total_margenPercent_papel", @@ -121,8 +123,15 @@ class PresupuestoModel extends \App\Models\BaseModel 'iva_reducido', 'excluir_rotativa', "acabado_cubierta_id", + "barniz_cubierta_id", + "estampado_cubierta_id", "acabado_sobrecubierta_id", - "is_duplicado" + "is_duplicado", + 'paginas_color_consecutivas', + 'papel_interior_diferente', + 'paginasCuadernillo', + 'lomo_redondo', + 'cabezada', ]; protected $returnType = "App\Entities\Presupuestos\PresupuestoEntity"; @@ -395,35 +404,47 @@ class PresupuestoModel extends \App\Models\BaseModel 'cliente_id' => $data['clienteId'], 'tipo_impresion_id' => $data['tipo_impresion_id'], 'pais_id' => 1, - 'retractilado' => in_array(3, $data['servicios']) ? 1 : 0, + 'retractilado' => in_array("RETR", $data['cubierta']['acabadosCubierta']) ? 1 : 0, 'retractilado5' => in_array(5, $data['servicios']) ? 1 : 0, 'guardas' => in_array(62, $data['servicios']) ? 1 : 0, 'faja_color' => in_array(16, $data['servicios']) ? 1 : 0, 'ferro' => in_array(24, $data['servicios']) ? 1 : 0, - 'prototipo' => in_array(9, $data['servicios']) ? 1 : 0, + 'prototipo' => $data['prototipo'] ? 1 : 0, '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, 'papel_formato_alto' => !$papel_formato_id ? $data['tamanio']['alto'] : null, 'titulo' => $data_cabecera['titulo'], + 'autor' => $data_cabecera['autor'], + 'ISBN' => $data_cabecera['isbn'], + 'coleccion' => $data_cabecera['coleccion'], 'referencia_cliente' => $data_cabecera['referenciaCliente'], 'paginas' => $data['interior']['paginas'], 'tirada' => $tirada, - 'solapas' => $data['cubierta']['solapasCubierta'] > 0 ? 1 : 0, - 'solapas_ancho' => $data['cubierta']['solapasCubierta'] > 0 ? $data['cubierta']['solapasCubierta'] : 0, - 'solapas_sobrecubierta' => is_null($data['sobrecubierta']) ? 0 : 1, - 'solapas_ancho_sobrecubierta' => is_null($data['sobrecubierta']) ? 0 : $data['sobrecubierta']['solapas'], + 'solapas' => $data['cubierta']['solapasCubierta'] == 0 ? 0 : 1, + 'lomo_redondo' => $data['cubierta']['lomoRedondo'] == 0 ? 0 : 1, + 'cabezada' => $data['cubierta']['cabezada'] == 0 ? 0 : 1, + 'solapas_ancho' => $data['cubierta']['solapasCubierta'] == 0 ? $data['cubierta']['solapasCubierta'] : 0, + 'solapas_sobrecubierta' => !$data['sobrecubierta'] ? 0 : 1, + 'solapas_ancho_sobrecubierta' => !$data['sobrecubierta'] ? 0 : $data['sobrecubierta']['solapas'], 'cosido' => $is_cosido, 'merma' => $extra_info['merma'], 'merma_cubierta' => $extra_info['merma'], + 'paginasCuadernillo' => $data['paginasCuadernillo'], + + 'comp_pos_paginas_color' => $data['interior']['pos_paginas_color'], + 'paginas_color_consecutivas' => $data['interior']['paginas_color_consecutivas'], + 'papel_interior_diferente' => $data['interior']['papelInteriorDiferente'], 'lomo_cubierta' => $extra_info['lomo_cubierta'], 'lomo_sobrecubierta' => $extra_info['lomo_sobrecubierta'], 'comparador_json_data' => $this->generateJson($data), - 'acabado_cubierta_id' => $data['acabadoCubierta'], - 'acabado_sobrecubierta_id' => is_null($data['sobrecubierta']) ? 0 : $data['sobrecubierta']['acabado'], + 'acabado_cubierta_id' => $data['cubierta']['acabadosCubierta']['plastificado'], + 'barniz_cubierta_id' => $data['cubierta']['acabadosCubierta']['barniz'], + 'estampado_cubierta_id' => $data['cubierta']['acabadosCubierta']['estampado'], + 'acabado_sobrecubierta_id' => !$data['sobrecubierta'] ? 0 : $data['sobrecubierta']['acabados'], 'comp_tipo_impresion' => $data['isHq'] ? ($data['isColor'] ? 'colorhq' : 'negrohq') : ($data['isColor'] ? 'color' : 'negro'), @@ -444,7 +465,7 @@ class PresupuestoModel extends \App\Models\BaseModel 'total_margenPercent_servicios' => round($resumen_totales['porcentajeMargenServicios'], 2), 'total_coste_envios' => round($resumen_totales['coste_envio'], 2), 'total_margen_envios' => round($resumen_totales['margen_envio'], 2), - 'total_costes' => round($totalCostes, 2), + 'total_costes' => round($totalCostes, 2), 'total_margenes' => round($totalMargenes, 2), 'total_antes_descuento' => round($totalCostes + $totalMargenes, 2), @@ -482,29 +503,45 @@ class PresupuestoModel extends \App\Models\BaseModel if (is_array($data)) { // -- INTERIOR -- // Si hay negro - if ($data['interior']['paginas'] > $data['interior']['paginas_color']) { + if (intval($data['interior']['paginas']) > intval($data['interior']['paginas_color'])) { if ($data['isHq']) $key = 'bnhq'; else $key = 'bn'; + if (array_key_exists('id', $data['interior']['papel_generico'])) { + $papel_id = intval($data['interior']['papel_generico']['id']); + $gramaje = intval($data['interior']['gramaje']); + } else { + $papel_id = intval($data['interior']['papel_generico']['negro']['id']); + $gramaje = intval($data['interior']['gramaje']['negro']); + } + + $values[$key] = array( - 'paginas' => intval($data['interior']['paginas']) - intval($data['interior']['paginas_color']), - 'papel_id' => intval($data['interior']['papel_generico']['id']), - 'gramaje' => intval($data['interior']['gramaje']), + 'paginas' => intval($data['interior']['paginas']) - intval(intval($data['interior']['paginas_color'])), + 'papel_id' => $papel_id, + 'gramaje' => $gramaje, ); } // Si hay color - if ($data['interior']['paginas_color'] > 0) { + if (intval($data['interior']['paginas_color']) > 0) { if ($data['isHq']) $key = 'colorhq'; else $key = 'color'; + if (array_key_exists('id', $data['interior']['papel_generico'])) { + $papel_id = intval($data['interior']['papel_generico']['id']); + $gramaje = intval($data['interior']['gramaje']); + } else { + $papel_id = intval($data['interior']['papel_generico']['color']['id']); + $gramaje = intval($data['interior']['gramaje']['color']); + } $values[$key] = array( - 'paginas' => intval($data['interior']['paginas_color']), - 'papel_id' => intval($data['interior']['papel_generico']['id']), - 'gramaje' => intval($data['interior']['gramaje']), + 'paginas' => intval(intval($data['interior']['paginas_color'])), + 'papel_id' => $papel_id, + 'gramaje' => $gramaje, ); } @@ -516,7 +553,7 @@ class PresupuestoModel extends \App\Models\BaseModel ); // -- SOBRECUBIERTA -- - if (!is_null($data['sobrecubierta'])) { + if ($data['sobrecubierta']) { $values['sobrecubierta'] = array( 'papel_id' => intval($data['sobrecubierta']['papel']), 'gramaje' => intval($data['sobrecubierta']['gramaje']), @@ -542,7 +579,7 @@ class PresupuestoModel extends \App\Models\BaseModel $builder = $this->db ->table($this->table . " t1") ->select( - "t1.id AS numero, t1.tipo_impresion_id as tipo, t1.tirada AS unidades, t1.total_aceptado as total, t1.paginas AS paginas, + "t1.id AS numero, t1.tipo_impresion_id as tipo, t1.tirada AS unidades, t1.total_aceptado as total, t1.paginas AS paginas, t1.titulo AS titulo, t1.autor AS autor, t1.isbn AS isbn, t1.papel_formato_id AS papel_formato_id, t1.papel_formato_personalizado AS papel_formato_personalizado, t1.papel_formato_ancho AS papel_formato_ancho, t1.papel_formato_alto AS papel_formato_alto, @@ -550,7 +587,7 @@ class PresupuestoModel extends \App\Models\BaseModel t3.codigo AS codigo_encuadernacion, t1.solapas AS solapas_cubierta, CAST(t1.solapas_ancho AS INT) AS solapas_ancho_cubierta, t1.solapas_sobrecubierta AS solapas_sobrecubierta, CAST(t1.solapas_ancho_sobrecubierta AS INT) AS solapas_ancho_sobrecubierta," - ); + ); $builder->join("lg_papel_formato t2", "t1.papel_formato_id = t2.id", "left"); $builder->join("tipos_presupuestos t3", "t1.tipo_impresion_id = t3.id", "left"); $builder->where("t1.is_deleted", 0); @@ -585,7 +622,7 @@ class PresupuestoModel extends \App\Models\BaseModel ); $presupuesto->concepto .= $this->generarConceptoLineasPresupuestoLibro($lineas, $presupuesto); - $presupuesto = (object)[ + $presupuesto = (object) [ 'numero' => $presupuesto->numero, 'unidades' => $presupuesto->unidades, 'total' => $presupuesto->total, @@ -634,8 +671,8 @@ class PresupuestoModel extends \App\Models\BaseModel ->join('presupuesto_manipulados', 'presupuesto_manipulados.presupuesto_id = presupuestos.id', 'left') ->join('lg_tarifa_manipulado', 'lg_tarifa_manipulado.id = presupuesto_manipulados.tarifa_manipulado_id', 'left') ->where('presupuestos.id', $presupuesto_id); - - $queryExtras = $this->db->table($this->table) + + $queryExtras = $this->db->table($this->table) ->select( [ 'lg_tarifa_preimpresion.id', @@ -645,7 +682,7 @@ class PresupuestoModel extends \App\Models\BaseModel ) ->join('presupuesto_serviciosExtra', 'presupuesto_serviciosExtra.presupuesto_id = presupuestos.id', 'left') ->join('lg_tarifa_preimpresion', 'lg_tarifa_preimpresion.id = presupuesto_serviciosExtra.tarifa_extra_id', 'left') - ->where('presupuestos.id', $presupuesto_id); + ->where('presupuestos.id', $presupuesto_id); $servicios['acabado'] = $queryAcabado->get()->getResultObject(); $servicios['manipulado'] = $queryManipulado->get()->getResultObject(); @@ -783,5 +820,5 @@ class PresupuestoModel extends \App\Models\BaseModel } - + } diff --git a/ci4/app/Models/Presupuestos/PresupuestoServiciosExtraModel.php b/ci4/app/Models/Presupuestos/PresupuestoServiciosExtraModel.php index 60927b0e..75e9b1ef 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoServiciosExtraModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoServiciosExtraModel.php @@ -15,11 +15,10 @@ class PresupuestoServiciosExtraModel extends \App\Models\BaseModel const SORTABLE = [ 0 => "t2.nombre", - 1 => "t1.precio_unidad", - 2 => "t1.precio_total" + 1 => "t1.precio", ]; - protected $allowedFields = ["presupuesto_id", "tarifa_extra_id", "precio_total", "precio_unidad", "margen"]; + protected $allowedFields = ["presupuesto_id", "tarifa_extra_id", "precio", "margen"]; protected $returnType = "App\Entities\Presupuestos\PresupuestoServiciosExtraEntity"; protected $useTimestamps = true; diff --git a/ci4/app/Models/Tarifas/Acabados/TarifaAcabadoModel.php b/ci4/app/Models/Tarifas/Acabados/TarifaAcabadoModel.php index 4ae2b09f..9c9227d0 100644 --- a/ci4/app/Models/Tarifas/Acabados/TarifaAcabadoModel.php +++ b/ci4/app/Models/Tarifas/Acabados/TarifaAcabadoModel.php @@ -21,6 +21,8 @@ class TarifaAcabadoModel extends \App\Models\BaseModel protected $allowedFields = [ "nombre", + "code", + "comment", "precio_min", "importe_fijo", "mostrar_en_presupuesto", @@ -83,13 +85,13 @@ class TarifaAcabadoModel extends \App\Models\BaseModel public function getResource(string $search = "") { $builder = $this->db->table($this->table . " t1")->select( - "t1.id AS id, t1.nombre AS nombre, t1.precio_min AS precio_min, t1.importe_fijo AS importe_fijo, + "t1.id AS id, t1.nombre AS nombre,t1.code AS code, t1.precio_min AS precio_min, t1.importe_fijo AS importe_fijo, t1.mostrar_en_presupuesto AS mostrar_en_presupuesto, t1.acabado_cubierta AS acabado_cubierta, t1.acabado_sobrecubierta AS acabado_sobrecubierta" ); //JJO $builder->where("t1.is_deleted", 0); - + return empty($search) ? $builder : $builder @@ -114,8 +116,9 @@ class TarifaAcabadoModel extends \App\Models\BaseModel return $builder->orderBy("t1.nombre", "asc")->get()->getResultObject(); } - public function getTarifaPresupuestoAcabado($tarifa_id, $tirada, $proveedor_id = -1){ - + public function getTarifaPresupuestoAcabado($tarifa_id, $tirada, $proveedor_id = -1) + { + $builder = $this->db ->table($this->table . " t1") ->select( @@ -128,18 +131,18 @@ class TarifaAcabadoModel extends \App\Models\BaseModel ->where("t1.is_deleted", 0) //->where("t1.mostrar_en_presupuesto", 1) ->where("t2.is_deleted", 0); - + $builder->where('t1.id =', $tarifa_id); $builder->where('t2.tirada_min <=', $tirada); $builder->where('t2.tirada_max >=', $tirada); - - if($proveedor_id != -1){ + + if ($proveedor_id != -1) { $builder->where('t2.proveedor_id', $proveedor_id); } return $builder->get()->getResultObject(); } - public function getNombreTarifaAcabado($id=-1) + public function getNombreTarifaAcabado($id = -1) { /* Todos los servicios de encuadernacion activas que se pueden usar en presupuestos @@ -184,4 +187,23 @@ class TarifaAcabadoModel extends \App\Models\BaseModel return $builder->orderBy("t1.id", "asc")->get()->getResultObject(); } + + public function getCodeFromId($id = 0) + { + + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.code AS code" + ) + ->where("t1.id", $id) + ->where("t1.is_deleted", 0); + + $data = $builder->get()->getResultObject(); + if (count($data) > 0) { + return $data[0]->code; + } else { + return ""; + } + } } diff --git a/ci4/app/Models/Tarifas/TarifaEncuadernacionLineaHorasModel.php b/ci4/app/Models/Tarifas/TarifaEncuadernacionLineaHorasModel.php index 976c8ade..d2c75a73 100755 --- a/ci4/app/Models/Tarifas/TarifaEncuadernacionLineaHorasModel.php +++ b/ci4/app/Models/Tarifas/TarifaEncuadernacionLineaHorasModel.php @@ -17,7 +17,8 @@ class TarifaEncuadernacionLineaHorasModel extends \App\Models\BaseModel 1 => "t1.tiempo_min", 2 => "t1.tiempo_max", 3 => "t1.precio_hora", - 4 => "t1.margen", + 4 => "t1.total_min", + 5 => "t1.margen", ]; protected $allowedFields = [ @@ -25,6 +26,7 @@ class TarifaEncuadernacionLineaHorasModel extends \App\Models\BaseModel "tiempo_min", "tiempo_max", "precio_hora", + "total_min", "margen", "user_created_id", "is_deleted", @@ -54,6 +56,10 @@ class TarifaEncuadernacionLineaHorasModel extends \App\Models\BaseModel "label" => "TarifaEncuadernacionLineas.precioHora", "rules" => "required|decimal", ], + "total_min" => [ + "label" => "TarifaEncuadernacionLineas.precioHora", + "rules" => "required|decimal", + ], "margen" => [ "label" => "TarifaEncuadernacionLineas.margen", "rules" => "required|decimal", @@ -73,6 +79,10 @@ class TarifaEncuadernacionLineaHorasModel extends \App\Models\BaseModel "decimal" => "TarifaEncuadernacionLineas.validation.tirada_max.decimal", "required" => "TarifaEncuadernacionLineas.validation.tirada_max.required", ], + "total_min" => [ + "decimal" => "TarifaEncuadernacionLineas.validation.tirada_max.decimal", + "required" => "TarifaEncuadernacionLineas.validation.tirada_max.required", + ], "margen" => [ "decimal" => "TarifaEncuadernacionLineas.validation.margen.decimal", "required" => "TarifaEncuadernacionLineas.validation.margen.required", @@ -92,7 +102,7 @@ class TarifaEncuadernacionLineaHorasModel extends \App\Models\BaseModel ->table($this->table . " t1") ->select( "t1.id AS id, t1.tirada_encuadernacion_id AS tirada_encuadernacion_id, t1.tiempo_min AS tiempo_min, - t1.tiempo_max AS tiempo_max, t1.precio_hora AS precio_hora, t1.margen AS margen, + t1.tiempo_max AS tiempo_max, t1.precio_hora AS precio_hora, t1.total_min AS total_min, t1.margen AS margen, t2.id AS tarifa_encuadernacion" ); //JJO diff --git a/ci4/app/Models/Tarifas/TarifaEncuadernacionLineaModel.php b/ci4/app/Models/Tarifas/TarifaEncuadernacionLineaModel.php index ff1f71d1..23bb6096 100755 --- a/ci4/app/Models/Tarifas/TarifaEncuadernacionLineaModel.php +++ b/ci4/app/Models/Tarifas/TarifaEncuadernacionLineaModel.php @@ -19,6 +19,8 @@ class TarifaEncuadernacionLineaModel extends \App\Models\BaseModel 3 => "t1.paginas_libro_max", 4 => "t1.precio_min", 5 => "t1.precio_max", + 6 => "t1.total_min", + 7 => "t1.margen", ]; protected $allowedFields = [ @@ -30,6 +32,8 @@ class TarifaEncuadernacionLineaModel extends \App\Models\BaseModel "precio_max", "tirada_min", "tirada_max", + "margen", + "total_min", "user_created_id", "is_deleted", @@ -62,6 +66,10 @@ class TarifaEncuadernacionLineaModel extends \App\Models\BaseModel "label" => "TarifaEncuadernacionLineas.tiradaMin", "rules" => "required|decimal", ], + "total_min" => [ + "label" => "TarifaEncuadernacionLineas.precioMin", + "rules" => "required|decimal", + ], "paginas_libro_max" => [ "label" => "TarifaEncuadernacionLineas.paginasMax", "rules" => "required|decimal", @@ -93,6 +101,10 @@ class TarifaEncuadernacionLineaModel extends \App\Models\BaseModel "decimal" => "TarifaEncuadernacionLineas.validation.tirada_min.decimal", "required" => "TarifaEncuadernacionLineas.validation.tirada_min.required", ], + "total_min" => [ + "decimal" => "TarifaEncuadernacionLineas.validation.precio_min.decimal", + "required" => "TarifaEncuadernacionLineas.validation.precio_min.required", + ], "paginas_libro_max" => [ "decimal" => "TarifaEncuadernacionLineas.validation.paginas_libro_max.decimal", "required" => "TarifaEncuadernacionLineas.validation.paginas_libro_max.required", @@ -120,7 +132,7 @@ class TarifaEncuadernacionLineaModel extends \App\Models\BaseModel ->table($this->table . " t1") ->select( "t1.id AS id, t1.tirada_encuadernacion_id AS tirada_encuadernacion_id, t1.paginas_libro_min AS paginas_libro_min, t1.paginas_libro_max AS paginas_libro_max, t1.precio_min AS precio_min, t1.precio_max AS precio_max, t1.tirada_min AS tirada_min, - t1.tirada_max AS tirada_max, t1.margen AS margen, t2.id AS tarifa_encuadernacion, t3.id AS dimensiones_id, t3.ancho_min, t3.ancho_max, , t3.alto_min, t3.alto_max, t3.descripcion as descripcion" + t1.tirada_max AS tirada_max, t1.total_min as total_min, t1.margen AS margen, t2.id AS tarifa_encuadernacion, t3.id AS dimensiones_id, t3.ancho_min, t3.ancho_max, , t3.alto_min, t3.alto_max, t3.descripcion as descripcion" ); //JJO $builder->where('tirada_encuadernacion_id', $tirada_encuadernacion_id); @@ -190,6 +202,7 @@ class TarifaEncuadernacionLineaModel extends \App\Models\BaseModel return $builder; } + public function removeAllEncuadernacionLineasForTarifa($tarifaId = -1, $datetime = null, $delete_flag=1){ diff --git a/ci4/app/Models/Tarifas/TarifaEncuadernacionModel.php b/ci4/app/Models/Tarifas/TarifaEncuadernacionModel.php index f0c50663..7ed9fa87 100755 --- a/ci4/app/Models/Tarifas/TarifaEncuadernacionModel.php +++ b/ci4/app/Models/Tarifas/TarifaEncuadernacionModel.php @@ -22,6 +22,8 @@ class TarifaEncuadernacionModel extends \App\Models\BaseModel protected $allowedFields = [ "nombre", + "code", + "comment", "mostrar_en_presupuesto", "tipo_encuadernacion", "servicio_encuadernacion", @@ -65,7 +67,7 @@ class TarifaEncuadernacionModel extends \App\Models\BaseModel */ public function getResource(string $search = "") { - $builder = $this->db->table($this->table . " t1")->select("t1.id AS id, t1.nombre AS nombre, + $builder = $this->db->table($this->table . " t1")->select("t1.id AS id, t1.nombre AS nombre, t1.code AS code, t1.mostrar_en_presupuesto AS mostrar_en_presupuesto, t1.tipo_encuadernacion AS tipo_encuadernacion, t1.servicio_encuadernacion AS servicio_encuadernacion, t1.por_horas AS por_horas"); @@ -123,7 +125,7 @@ class TarifaEncuadernacionModel extends \App\Models\BaseModel $builder = $this->db ->table($this->table . " t1") ->select( - "t1.id AS tarifa_enc_id, t1.nombre AS tarifa_enc_nombre, t2.precio_min AS tarifa_precio_min, t2.importe_fijo AS tarifa_importe_fijo, + "t1.id AS tarifa_enc_id, t1.nombre AS tarifa_enc_nombre, t3.total_min AS tarifa_precio_min, t2.importe_fijo AS tarifa_importe_fijo, t2.id AS tarifa_tirada_id, t2.proveedor_id AS proveedor_id, t5.nombre AS proveedor_nombre, t2.tirada_min AS tirada_min, t2.tirada_max AS tirada_max, t3.id AS tarifa_linea_id, t3.paginas_libro_min AS paginas_min, t3.paginas_libro_max AS paginas_max, t3.precio_min AS precio_min, t3.precio_max AS precio_max, t3.margen AS margen, t4.ancho_min AS ancho_min, t4.ancho_max AS ancho_max, t4.alto_min AS alto_min, t4.alto_max AS alto_max" @@ -159,7 +161,7 @@ class TarifaEncuadernacionModel extends \App\Models\BaseModel $builder = $this->db ->table($this->table . " t1") ->select( - "t1.id AS tarifa_enc_id, t1.nombre AS tarifa_enc_nombre, t2.precio_min AS tarifa_precio_min, t2.importe_fijo AS tarifa_importe_fijo, + "t1.id AS tarifa_enc_id, t1.nombre AS tarifa_enc_nombre, t3.total_min AS tarifa_precio_min, t2.importe_fijo AS tarifa_importe_fijo, t2.id AS tarifa_tirada_id, t2.proveedor_id AS proveedor_id, t5.nombre AS proveedor_nombre, t2.tirada_min AS tirada_min, t2.tirada_max AS tirada_max, t3.id AS tarifa_linea_id, t3.tiempo_min AS tiempo_min, t3.tiempo_max AS tiempo_max, t3.precio_hora AS precio_hora, t3.margen AS margen" ) diff --git a/ci4/app/Models/Tarifas/TarifaEncuadernacionTiradaModel.php b/ci4/app/Models/Tarifas/TarifaEncuadernacionTiradaModel.php index ac795645..ba1a7a28 100755 --- a/ci4/app/Models/Tarifas/TarifaEncuadernacionTiradaModel.php +++ b/ci4/app/Models/Tarifas/TarifaEncuadernacionTiradaModel.php @@ -16,7 +16,6 @@ class TarifaEncuadernacionTiradaModel extends \App\Models\BaseModel 0 => "t3.nombre", 1 => "t1.tirada_min", 2 => "t1.tirada_max", - 3 => "t1.precio_min", 4 => "t1.importe_fijo", ]; @@ -25,7 +24,6 @@ class TarifaEncuadernacionTiradaModel extends \App\Models\BaseModel "tirada_min", "tirada_max", "proveedor_id", - "precio_min", "importe_fijo", "user_created_id", "user_updated_id", @@ -53,10 +51,6 @@ class TarifaEncuadernacionTiradaModel extends \App\Models\BaseModel "label" => "TarifaEncuadernacionTiradas.tiradaMin", "rules" => "required|integer", ], - "precio_min" => [ - "label" => "Tarifaencuadernacion.precioMin", - "rules" => "required|decimal", - ], "importe_fijo" => [ "label" => "Tarifaencuadernacion.importeFijo", "rules" => "required|decimal", @@ -72,10 +66,6 @@ class TarifaEncuadernacionTiradaModel extends \App\Models\BaseModel "integer" => "TarifaEncuadernacionTiradas.validation.tirada_min.integer", "required" => "TarifaEncuadernacionTiradas.validation.tirada_min.required", ], - "precio_min" => [ - "required" => "Tarifaencuadernacion.validation.precio_min.required", - "decimal" => "Tarifaencuadernacion.validation.precio_min.decimal", - ], "importe_fijo" => [ "required" => "Tarifaencuadernacion.validation.importe_fijo.required", "decimal" => "Tarifaencuadernacion.validation.importe_fijo.decimal", @@ -95,7 +85,7 @@ class TarifaEncuadernacionTiradaModel extends \App\Models\BaseModel ->table($this->table . " t1") ->select( "t1.id AS id, t1.tarifa_encuadernacion_id AS tarifa_encuadernacion_id, - t1.precio_min AS precio_min, t1.importe_fijo AS importe_fijo, + t1.importe_fijo AS importe_fijo, t1.tirada_min AS tirada_min, t1.tirada_max AS tirada_max, t3.nombre AS proveedor, t3.id AS proveedor_id, t2.id AS tarifa_encuadernacion" ); diff --git a/ci4/app/Models/Tarifas/TarifaEnvioModel.php b/ci4/app/Models/Tarifas/TarifaEnvioModel.php index 9583d4df..c5348c6e 100755 --- a/ci4/app/Models/Tarifas/TarifaEnvioModel.php +++ b/ci4/app/Models/Tarifas/TarifaEnvioModel.php @@ -1,4 +1,5 @@ "t2.nombre", ]; - protected $allowedFields = ["pais_id", "nombre","deleted_at","is_deleted"]; + protected $allowedFields = ["pais_id", "nombre", "code", "comment", "deleted_at", "is_deleted"]; protected $returnType = "App\Entities\Tarifas\TarifaEnvioEntity"; protected $useTimestamps = true; @@ -73,7 +74,7 @@ class TarifaEnvioModel extends \App\Models\BaseModel */ public function getResource(string $search = "") { - $builder = $this->db->table($this->table . " t1")->select("t1.id as id, t1.nombre AS nombre, t2.nombre AS pais_id"); + $builder = $this->db->table($this->table . " t1")->select("t1.id as id, t1.nombre AS nombre,t1.code AS code, t2.nombre AS pais_id"); $builder->join("lg_paises t2", "t1.pais_id = t2.id", "left"); //JJO @@ -82,43 +83,44 @@ class TarifaEnvioModel extends \App\Models\BaseModel return empty($search) ? $builder : $builder - ->groupStart() - ->like("t1.nombre", $search) - ->orLike("t2.id", $search) - ->orLike("t1.pais_id", $search) - ->orLike("t1.nombre", $search) - ->orLike("t2.nombre", $search) - ->groupEnd(); + ->groupStart() + ->like("t1.nombre", $search) + ->orLike("t2.code", $search) + ->orLike("t2.id", $search) + ->orLike("t1.pais_id", $search) + ->orLike("t1.nombre", $search) + ->orLike("t2.nombre", $search) + ->groupEnd(); } - public function getTarifaEnvio($paisId, string $cp, $peso, $tipo_envio){ + public function getTarifaEnvio($paisId, string $cp, $peso, $tipo_envio) + { // 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") - ->join("tarifas_envios_zonas t2", "t1.id = t2.tarifa_envio_id") - ->where("t1.pais_id", $paisId) - ->where("t1.is_deleted", 0) - ->where("t2.is_deleted", 0); - - if($paisId == 1) {// España + ->select("t1.id AS tarifa_envio_id, t2.importe_fijo as importe_fijo") + ->join("tarifas_envios_zonas t2", "t1.id = t2.tarifa_envio_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)) - ->where("CAST(t2.cp_final AS UNSIGNED) >=", intval($cp)); + ->where("CAST(t2.cp_final AS UNSIGNED) >=", intval($cp)); } $tarifas = $builder->get()->getResultObject(); $resultado = []; - + $model = model('App\Models\Tarifas\TarifaEnvioPrecioModel'); - foreach($tarifas as $tarifa){ + foreach ($tarifas as $tarifa) { $precio_tarifas = $model->getEnvioPrecio($tarifa->tarifa_envio_id, $peso, $tipo_envio); - foreach($precio_tarifas as $precio_tarifa){ + foreach ($precio_tarifas as $precio_tarifa) { $precio_tarifa->importe_fijo = $tarifa->importe_fijo; array_push($resultado, $precio_tarifa); } } return $resultado; - } } diff --git a/ci4/app/Models/Tarifas/TarifaManipuladoModel.php b/ci4/app/Models/Tarifas/TarifaManipuladoModel.php index 9a4aefd4..7783d480 100755 --- a/ci4/app/Models/Tarifas/TarifaManipuladoModel.php +++ b/ci4/app/Models/Tarifas/TarifaManipuladoModel.php @@ -22,6 +22,8 @@ class TarifaManipuladoModel extends \App\Models\BaseModel protected $allowedFields = [ "nombre", "precio_min", + "code", + "comment", "importe_fijo", "mostrar_en_presupuesto", "deleted_at", @@ -80,7 +82,7 @@ class TarifaManipuladoModel extends \App\Models\BaseModel */ public function getResource(string $search = "") { - $builder = $this->db->table($this->table . " t1")->select("t1.id AS id, t1.nombre AS nombre, t1.precio_min AS precio_min, t1.importe_fijo AS importe_fijo + $builder = $this->db->table($this->table . " t1")->select("t1.id AS id,t1.code AS code, t1.nombre AS nombre, t1.precio_min AS precio_min, t1.importe_fijo AS importe_fijo ,t1.mostrar_en_presupuesto AS mostrar_en_presupuesto"); //JJO diff --git a/ci4/app/Models/Tarifas/TarifaextraModel.php b/ci4/app/Models/Tarifas/TarifaextraModel.php index 10ec5dd8..8b1001a1 100755 --- a/ci4/app/Models/Tarifas/TarifaextraModel.php +++ b/ci4/app/Models/Tarifas/TarifaextraModel.php @@ -13,7 +13,9 @@ class TarifaextraModel extends \App\Models\BaseModel protected $useAutoIncrement = true; protected $allowedFields = [ - "nombre", + "nombre", + "code", + "comment", "precio", "margen", "mostrar_en_presupuesto", diff --git a/ci4/app/Models/Tarifas/TarifapreimpresionModel.php b/ci4/app/Models/Tarifas/TarifapreimpresionModel.php index 6bb1391f..56ed6999 100755 --- a/ci4/app/Models/Tarifas/TarifapreimpresionModel.php +++ b/ci4/app/Models/Tarifas/TarifapreimpresionModel.php @@ -13,7 +13,9 @@ class TarifapreimpresionModel extends \App\Models\BaseModel protected $useAutoIncrement = true; protected $allowedFields = [ - "nombre", + "nombre", + "code", + "comment", "precio", "margen", "mostrar_en_presupuesto", @@ -37,6 +39,14 @@ class TarifapreimpresionModel extends \App\Models\BaseModel "label" => "Tarifapreimpresion.nombre", "rules" => "trim|required|max_length[255]", ], + "code" => [ + "label" => "Tarifapreimpresion.code", + "rules" => "trim|required|max_length[5]", + ], + "comment" => [ + "label" => "Tarifapreimpresion.comment", + "rules" => "trim|max_length[255]", + ], "precio" => [ "label" => "Tarifapreimpresion.precio", "rules" => "required|decimal", @@ -52,6 +62,14 @@ class TarifapreimpresionModel extends \App\Models\BaseModel "max_length" => "Tarifapreimpresion.validation.nombre.max_length", "required" => "Tarifapreimpresion.validation.nombre.required", ], + "code" => [ + "max_length" => "Tarifapreimpresion.validation.code.max_length", + "required" => "Tarifapreimpresion.validation.code.required", + ], + "comment" => [ + "max_length" => "Tarifapreimpresion.validation.comment.max_length", + "required" => "Tarifapreimpresion.validation.comment.required", + ], "precio" => [ "decimal" => "Tarifapreimpresion.validation.precio.decimal", "required" => "Tarifapreimpresion.validation.precio.required", diff --git a/ci4/app/Services/PresupuestoClienteService.php b/ci4/app/Services/PresupuestoClienteService.php index bf6c6408..25a3a42c 100644 --- a/ci4/app/Services/PresupuestoClienteService.php +++ b/ci4/app/Services/PresupuestoClienteService.php @@ -15,37 +15,44 @@ class PresupuestoClienteService extends BaseService { $rotativa = []; - $plana = PresupuestoClienteService::obtenerPresupuestoClienteInterior($data); + $plana = []; + // no se busca en plana cuando es estándar (no Premium) + if ($data['isHq']) + $plana = PresupuestoClienteService::obtenerPresupuestoClienteInterior($data); if (!$data['excluirRotativa'] && !$data['isHq']) $rotativa = PresupuestoClienteService::obtenerPresupuestoClienteInteriorRotativa($data); $total_plana = -1; $hay_plana = false; - if($data['isColor']){ - if ($data['datosPedido']->paginas == $data['paginas_color']) - $total_plana += floatval($plana[1]['total_impresion']); - - elseif(count($plana[0]) > 2 && count($plana[1]) > 2) { - $total_plana = 0.0; - foreach ($plana as $linea) { - if (count($linea) > 0) - $total_plana += floatval($linea['total_impresion']); + if ($data['isColor']) { + if ($data['datosPedido']->paginas == $data['paginas_color']){ + if(count($plana[1]) > 2) + $total_plana += floatval($plana[1]['total_impresion']); + else + return -1; + } + + elseif (count($plana) > 0) { + if (count($plana[0]) > 2 && count($plana[1]) > 2) { + $total_plana = 0.0; + foreach ($plana as $linea) { + if (count($linea) > 0) + $total_plana += floatval($linea['total_impresion']); + } } } - } - else{ + } else { foreach ($plana as $linea) { if (count($linea) > 0) - if($linea['tipo_linea'] == 'lp_bn' || $linea['tipo_linea'] == 'lp_bnhq'){ + if ($linea['tipo_linea'] == 'lp_bn' || $linea['tipo_linea'] == 'lp_bnhq') { $total_plana = 0.0; $total_plana = floatval($linea['total_impresion']); } - } } $total_rotativa = -1; - if (!$data['excluirRotativa'] && count($rotativa) > 0 && $rotativa['num_formas']['posicion_formas'] != 'n/a') { + if (!$data['excluirRotativa'] && count($rotativa) > 0 && $rotativa['num_formas']['posicion_formas'] != 'n/a') { $total_rotativa = floatval($rotativa['total_impresion']); } if ($total_plana < 0 && $total_rotativa < 0) @@ -70,9 +77,10 @@ class PresupuestoClienteService extends BaseService $isHq = $data['isHq']; $cliente_id = $data['cliente_id']; $paginas_color = $data['paginas_color']; + $lomoRedondo = $data['lomoRedondo']; $lineas_cubierta = []; - + for ($i = 0; $i < 2; $i++) { $lineas = PresupuestoService::obtenerComparadorPlana([ @@ -84,7 +92,8 @@ class PresupuestoClienteService extends BaseService 'isColor' => $isColor, 'isHq' => $isHq, 'cliente_id' => $cliente_id, - 'a_favor_fibra' => $i + 'a_favor_fibra' => $i, + 'lomoRedondo' => $lomoRedondo ]); if (count($lineas) > 0) { @@ -124,7 +133,7 @@ class PresupuestoClienteService extends BaseService $paginas_color = $data['paginas_color']; $lineas_sobrecubierta = []; - + for ($i = 0; $i < 2; $i++) { $lineas = PresupuestoService::obtenerComparadorPlana([ @@ -175,7 +184,7 @@ class PresupuestoClienteService extends BaseService $cliente_id = $data['cliente_id']; $lineas_guardas = []; - + for ($i = 0; $i < 2; $i++) { $lineas = PresupuestoService::obtenerComparadorPlana([ @@ -238,11 +247,21 @@ class PresupuestoClienteService extends BaseService $uso = $data['uso']; $tipo_impresion_id = $data['tipo_impresion_id']; $datosPedido = $data['datosPedido']; - $papel_generico = $data['papel_generico']; - $gramaje = $data['gramaje']; + if ($data['papelInteriorDiferente'] == false) + $papel_generico = $data['papel_generico']; + else { + $papel_generico = $data['papel_generico']['negro']; + $papel_generico_color = $data['papel_generico']['color']; + } + if ($data['papelInteriorDiferente'] == false) + $gramaje = $data['gramaje']; + else { + $gramaje = $data['gramaje']['negro']; + $gramaje_color = $data['gramaje']['color']; + } $isColor = $data['isColor']; $isHq = $data['isHq']; - $cliente_id = $data['cliente_id']; + $cliente_id = $data['cliente_id']; $paginas_color = $data['paginas_color']; $paginas_negro = $datosPedido->paginas - $paginas_color; @@ -285,8 +304,6 @@ class PresupuestoClienteService extends BaseService return $result; } ); - $linea_negro_plana = $linea_negro_plana[0]['fields']; - $linea_negro_plana['tipo_linea'] = $isHq ? 'lp_bnhq' : 'lp_bn'; } } @@ -296,6 +313,10 @@ class PresupuestoClienteService extends BaseService $datosPedido->paginas = $paginas_color; for ($i = 0; $i < 2; $i++) { + if ($data['papelInteriorDiferente'] == true) { + $papel_generico = $papel_generico_color; + $gramaje = $gramaje_color; + } $lineas = PresupuestoService::obtenerComparadorPlana([ 'uso' => $uso, 'tipo_impresion_id' => $tipo_impresion_id, @@ -325,14 +346,61 @@ class PresupuestoClienteService extends BaseService return $result; } ); + } + } + + // 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 ( + $paginas_negro > 0 && $paginas_color > 0 && $data['papelInteriorDiferente'] == 0 && + count($linea_negro_plana) > 0 && count($linea_color_plana) > 0 + ) { + $mejor_combinacion = null; + $coste_menor = PHP_INT_MAX; + // Iteramos ambos arrays + foreach ($linea_color_plana as $color_item) { + foreach ($linea_negro_plana as $negro_item) { + // Comparar si tienen el mismo 'maquina_id' + if ($color_item['fields']['maquina_id'] == $negro_item['fields']['maquina_id']) { + // Sumar los 'total_impresion' de ambas líneas + $costo_total = $color_item['fields']['total_impresion'] + $negro_item['fields']['total_impresion']; + + // Verificar si es la combinación más barata hasta ahora + if ($costo_total < $coste_menor) { + $coste_menor = $costo_total; + $mejor_combinacion = [ + 'maquina_id' => $color_item['fields']['maquina_id'], + 'costo_total' => $costo_total, + 'color_item' => $color_item, + 'negro_item' => $negro_item, + ]; + } + } + } + + // Retornar la mejor combinación encontrada + if ($mejor_combinacion !== null) { + return [$mejor_combinacion['negro_item']['fields'], $mejor_combinacion['color_item']['fields']]; + } else { + return []; + } + } + } else { + if (count($linea_negro_plana) > 0) { + $linea_negro_plana = $linea_negro_plana[0]['fields']; + $linea_negro_plana['tipo_linea'] = $isHq ? 'lp_bnhq' : 'lp_bn'; + } + if (count($linea_color_plana) > 0) { $linea_color_plana = $linea_color_plana[0]['fields']; $linea_color_plana['tipo_linea'] = $isHq ? 'lp_colorhq' : 'lp_color'; } } + return [$linea_negro_plana, $linea_color_plana]; } - public static function getServiciosEncuadernacionDefault($data){ + public static function getServiciosEncuadernacionDefault($data) + { $tipo_impresion_id = $data['tipo_impresion_id'] ?? -1; $tirada = $data['tirada'] ?? -1; @@ -348,42 +416,46 @@ class PresupuestoClienteService extends BaseService return $values; } - public static function getServiciosManipulado($data){ + public static function getServiciosManipulado($data) + { $tarifa_id = $data['tarifa_id'] ?? -1; $tirada = $data['tirada'] ?? -1; $POD = $data['POD'] ?? -1; - + $model = model('App\Models\Presupuestos\PresupuestoManipuladosModel'); $values = $model->getPrecioTarifa($tarifa_id, $tirada, $POD); return $values; } - public static function getServiciosPreimpresion($data){ + public static function getServiciosPreimpresion($data) + { $tarifa_id = $data['tarifa_id'] ?? -1; - + $model = model('App\Models\Presupuestos\PresupuestoPreimpresionesModel'); $values = $model->getPrecioTarifa($tarifa_id); return $values; } - public static function getServiciosExtra($data){ + public static function getServiciosExtra($data) + { $tarifa_id = $data['tarifa_id'] ?? -1; - + $model = model('App\Models\Presupuestos\PresupuestoServiciosExtraModel'); $values = $model->getPrecioTarifa($tarifa_id); return $values; } - public static function getServiciosAcabados($data){ + public static function getServiciosAcabados($data) + { $tarifa_id = $data['tarifa_id'] ?? -1; $tirada = $data['tirada'] ?? -1; $POD = $data['POD'] ?? -1; - + $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel'); $values = $model->getPrecioTarifa($tarifa_id, $tirada, -1, $POD); // proveedor más barato return $values; diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php index 781b8127..a6c1074b 100755 --- a/ci4/app/Services/PresupuestoService.php +++ b/ci4/app/Services/PresupuestoService.php @@ -33,7 +33,7 @@ class PresupuestoService extends BaseService const SANGRE_FORMAS = 5.0; const SANGRE_FORMAS_CUBIERTA = 20.0; - + public static function getLineaPresupuestoPlana($data) { @@ -52,10 +52,10 @@ class PresupuestoService extends BaseService if ($maquina->is_inkjet) { - $parametrosInkjet = (object)array( + $parametrosInkjet = (object) array( 'a_favor_fibra' => $a_favor_fibra, // este parametro se cambia para comprobar // en las dos direcciones (menos en rustica fresada que es siempre 1) - 'bnPages' => $isColor ? 0 : $datosPedido->paginas, + 'bnPages' => $isColor ? 0 : $datosPedido->paginas, 'colorPages' => ($uso == 'guardas') ? $datosPedido->paginas_impresion : ($isColor ? $datosPedido->paginas : 0), 'rotativa_gota_negro' => 0, 'rotativa_gota_color' => 0, @@ -74,13 +74,13 @@ class PresupuestoService extends BaseService } else { $datosTipologias = $datosTipolog; } - $parametrosInkjet->rotativa_gota_negro = $datosTipologias[0]->gota_negro; - $parametrosInkjet->rotativa_gota_color = $datosTipologias[0]->gota_color; - $parametrosInkjet->rotativa_negro = $datosTipologias[0]->negro; - $parametrosInkjet->rotativa_cyan = $datosTipologias[0]->cyan; - $parametrosInkjet->rotativa_magenta = $datosTipologias[0]->magenta; - $parametrosInkjet->rotativa_amarillo = $datosTipologias[0]->amarillo; - $parametrosInkjet->rotativa_cg = $datosTipologias[0]->cg; + $parametrosInkjet->rotativa_gota_negro = $datosTipologias[0]->gota_negro; + $parametrosInkjet->rotativa_gota_color = $datosTipologias[0]->gota_color; + $parametrosInkjet->rotativa_negro = $datosTipologias[0]->negro; + $parametrosInkjet->rotativa_cyan = $datosTipologias[0]->cyan; + $parametrosInkjet->rotativa_magenta = $datosTipologias[0]->magenta; + $parametrosInkjet->rotativa_amarillo = $datosTipologias[0]->amarillo; + $parametrosInkjet->rotativa_cg = $datosTipologias[0]->cg; } $tarifamodel = new \App\Models\Configuracion\MaquinasTarifasImpresionModel(); @@ -127,7 +127,7 @@ class PresupuestoService extends BaseService ); $clientePreciosModel = new \App\Models\Clientes\ClientePreciosModel(); - $config = (object)[ + $config = (object) [ "tipo" => ($uso == 'guardas') ? 'interior' : $uso, "tipo_maquina" => $maquina->is_inkjet ? 'inkjet' : 'toner', "tipo_impresion" => $tipo @@ -137,7 +137,7 @@ class PresupuestoService extends BaseService $linea['fields']['precio_click'], $maquina->velocidad ); - [$precio_hora, $margen_precio_hora] = $clientePreciosModel->get_precio_hora($cliente_id, $config, $tiempo); + [$precio_hora, $margen_precio_hora] = $clientePreciosModel->get_precio_hora($cliente_id, $config, $tiempo); if (is_null($precio_hora)) { @@ -190,7 +190,7 @@ class PresupuestoService extends BaseService return $linea; } - + public static function getLineaPresupuestoRotativa($data) { @@ -207,9 +207,9 @@ class PresupuestoService extends BaseService $paginas = $data['paginas']; $tarifamodel = new MaquinasTarifasImpresionModel(); - + $resultado_tarifa = $tarifamodel->getTarifa($maquina->maquina_id, $uso, is_array($tipo) ? 'color' : $tipo); - if($resultado_tarifa == null){ + if ($resultado_tarifa == null) { /* $info = [ 'maquina_id' => $maquina->maquina_id, @@ -219,20 +219,19 @@ class PresupuestoService extends BaseService log_message("error","No se ha encontrado tarifa para la maquina {maquina_id} y el uso {uso} y el tipo {tipo}", $info); */ return []; - } - else{ + } else { $tarifaId = $resultado_tarifa[0]; $tarifa = $resultado_tarifa[1]; $tarifa_margen = $resultado_tarifa[2]; } - + if (!is_float($tarifa)) { return []; } // precio del pliego de impresion - $linea['fields'] = PresupuestoService::getCostesLineaRotativa($maquina, $papel, $datosPedido, $parametrosRotativa); - if(count($linea['fields']) == 0){ + $linea['fields'] = PresupuestoService::getCostesLineaRotativa($maquina, $papel, $datosPedido, $parametrosRotativa); + if (count($linea['fields']) == 0) { return []; } @@ -245,7 +244,8 @@ class PresupuestoService extends BaseService $linea['fields']['precio_libro'] = $linea['fields']['pliegos_libro'] * $linea['fields']['precios_pliegos']; // Precio papel pedido $linea['fields']['precio_pedido'] = $linea['fields']['precio_libro'] * ($datosPedido->tirada + $datosPedido->merma); - $linea['fields']['margen_papel_pedido'] = $linea['fields']['pliegos_libro'] * $margen_pliego_impresion * ($datosPedido->tirada + $datosPedido->merma);; + $linea['fields']['margen_papel_pedido'] = $linea['fields']['pliegos_libro'] * $margen_pliego_impresion * ($datosPedido->tirada + $datosPedido->merma); + ; $linea['fields']['a_favor_fibra'] = $parametrosRotativa->a_favor_fibra; $linea['fields']['maquina'] = $maquina->maquina; @@ -267,13 +267,13 @@ class PresupuestoService extends BaseService $linea['fields']['datosTipologias'] = //$datosTipologias[0]; - (Object)array( + (Object) array( 'gota_negro' => $parametrosRotativa->rotativa_gota_negro, 'gota_color' => $parametrosRotativa->rotativa_gota_color, 'negro' => $parametrosRotativa->rotativa_negro, 'cyan' => $parametrosRotativa->rotativa_cyan, 'magenta' => $parametrosRotativa->rotativa_magenta, - 'amarillo' => $parametrosRotativa->rotativa_amarillo + 'amarillo' => $parametrosRotativa->rotativa_amarillo ); // impresion @@ -290,7 +290,7 @@ class PresupuestoService extends BaseService $clientePreciosModel = new ClientePreciosModel(); - $config = (object)[ + $config = (object) [ "tipo" => $uso, "tipo_maquina" => 'inkjet', "tipo_impresion" => $tipo @@ -300,7 +300,7 @@ class PresupuestoService extends BaseService $linea['fields']['precio_click'], $maquina->velocidad ); - [$precio_hora, $margen_precio_hora] = $clientePreciosModel->get_precio_hora($cliente_id, $config, $tiempo); + [$precio_hora, $margen_precio_hora] = $clientePreciosModel->get_precio_hora($cliente_id, $config, $tiempo); if (is_null($precio_hora)) { return []; @@ -324,7 +324,7 @@ class PresupuestoService extends BaseService return $linea; } - + public static function getCostesLinea($uso, $datosPedido, $maquina, $papel_impresion, $opciones_papel, $tarifa, $tarifa_margen, $forzar_a_favor_fibra = false) { @@ -335,7 +335,7 @@ class PresupuestoService extends BaseService $ancho_calculo = ($uso == 'cubierta' || $uso == 'sobrecubierta') ? $datosPedido->anchoExteriores : $datosPedido->ancho; $alto_calculo = ($uso == 'cubierta' || $uso == 'sobrecubierta') ? $datosPedido->altoExteriores : $datosPedido->alto; $formas = PresupuestoService::getNumFormasPlana($uso, $maquina, $ancho_calculo, $alto_calculo, $datosPedido->isCosido, $forzar_a_favor_fibra); - $response['fields'] = $formas; + $response['fields'] = $formas; } @@ -358,8 +358,8 @@ class PresupuestoService extends BaseService $rotativa = array_key_exists('rotativa', $opciones_papel) ? $opciones_papel['rotativa'] : 0; - $precio_click = $tarifa * (1 + $tarifa_margen / 100.0); - $margen_click = $tarifa * ($tarifa_margen / 100.0); + $precio_click = $tarifa * (1 + $tarifa_margen / 100.0); + $margen_click = $tarifa * ($tarifa_margen / 100.0); //interior (bn o color) if ($cubierta == 0 && $sobrecubierta == 0 && $rotativa == 0) { @@ -466,7 +466,7 @@ class PresupuestoService extends BaseService $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); - if(floor($factor_anchura) == 0){ + if (floor($factor_anchura) == 0) { return []; } @@ -566,7 +566,7 @@ class PresupuestoService extends BaseService $data = []; $data['pulgada'] = 1 / 1000000000000.0; - if($maquina->maquina_id == 91 || $maquina->maquina_id == 99 || $maquina->maquina_id == 114 || $maquina->maquina_id == 98) + if ($maquina->maquina_id == 91 || $maquina->maquina_id == 99 || $maquina->maquina_id == 114 || $maquina->maquina_id == 98) $data['resolucion'] = 1200; else $data['resolucion'] = 600; @@ -599,9 +599,9 @@ class PresupuestoService extends BaseService // precio tinta $data['precio_tinta'] = round( round(($data['peso_gotas_negro_pedido'] / 1000.0) * $maquina->precio_tinta_negro, 2) + - round(($data['peso_gotas_cyan_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) + - round(($data['peso_gotas_magenta_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) + - round(($data['peso_gotas_amarillo_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2), + round(($data['peso_gotas_cyan_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) + + round(($data['peso_gotas_magenta_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) + + round(($data['peso_gotas_amarillo_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2), 2 ); @@ -698,7 +698,7 @@ class PresupuestoService extends BaseService if ( !is_null($maquina->forzar_num_formas_horizontales_cubierta) && !is_null($maquina->forzar_num_formas_verticales_cubierta) - + ) { if ( @@ -838,9 +838,13 @@ class PresupuestoService extends BaseService * Devuelve el ancho de la cubierta/sobrecubierta, incluido el lomo. * El $uso tiene que ser "cubierta" o "sobrecubierta" */ - public static function getAnchoTotalExteriores($uso = "cubierta", $tipo_impresion_id = 1, $datosPedido = null, $maquina_id = -1) + public static function getAnchoTotalExteriores($uso = "cubierta", $tipo_impresion_id = 1, $datosPedido = null, $maquina_id = -1, $lomoRedondo = 0) { $ancho_total = 0; + $sangre_cubierta = self::SANGRE_FORMAS_CUBIERTA; + if ($datosPedido->ancho >= 210) { + $sangre_cubierta = 15; + } if ($datosPedido) { // Tapa blanda (cosido y fresado) @@ -861,26 +865,33 @@ class PresupuestoService extends BaseService // si es cubierta // se añade 7mm del ancho del cartón (2*3.5mm) por cada lado del lomo // más 7mm de vuelo+cajo por cada lado. Por último, 20mm de sangre por cada lado - if ($uso == "cubierta") - $ancho_total += (2 * 7 + 2 * self::SANGRE_FORMAS_CUBIERTA + 7); + if ($uso == "cubierta") { + $ancho_total += (2 * 7 + 2 * $sangre_cubierta + 6); + if ($lomoRedondo) { + $ancho_total += 6; + } + } + // si es sobrecubierta // Se añaden 5mm de sangre por cada lado + 2 * 7mm de vuelo portada y contraportada -> total 52 else $ancho_total += (2 * 7 + 2 * self::SANGRE_FORMAS) + 7; } // Wire-o y espiral (tapa blanda y tapa dura) - else if ($tipo_impresion_id == 5 || $tipo_impresion_id == 6 || - $tipo_impresion_id == 7 || $tipo_impresion_id == 8) { + else if ( + $tipo_impresion_id == 5 || $tipo_impresion_id == 6 || + $tipo_impresion_id == 7 || $tipo_impresion_id == 8 + ) { // En este caso, la cubierta se imprime como dos formas separadas, pero hay que dejar un // espacio entre ellas para poder cortarlas $calles = (new \App\Models\Configuracion\MaquinasCallesModel())->getCallesForMaquina($maquina_id, 2); $ancho_total = floatval($datosPedido->ancho) * 2; - + if (count($calles) > 0) $ancho_total += $calles[0]->internas; // Tapa blanda - if($tipo_impresion_id == 7 || $tipo_impresion_id == 8){ + if ($tipo_impresion_id == 7 || $tipo_impresion_id == 8) { // añadimos ancho de las solapas // si se añaden solapas hay que sumar 3mm de los dobleces if ($datosPedido->solapas) { @@ -891,12 +902,11 @@ class PresupuestoService extends BaseService $ancho_total += (4 * self::SANGRE_FORMAS); } // Tapa dura - else{ + else { // Se le suma 20mm de sangre por cada lado. Como son 2 hojas independientes, se multiplica por 4 - $ancho_total += (4 * self::SANGRE_FORMAS_CUBIERTA); + $ancho_total += (4 * $sangre_cubierta); } - } - else { + } else { // En cualquier otro caso se le suma 5mm de sangre por cada lado $ancho_total += (2 * self::SANGRE_FORMAS); } @@ -913,11 +923,15 @@ class PresupuestoService extends BaseService if ($datosPedido) { $alto_total = floatval($datosPedido->alto); + $sangre_cubierta = self::SANGRE_FORMAS_CUBIERTA; + if ($datosPedido->alto >= 297) { + $sangre_cubierta = 15; + } // Tapa dura (cosido y fresado) if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) { // Se añaden 20mm de sangre por cada lado + 3.5mm extra por cada lado de vuelo if ($uso == "cubierta") - $alto_total += (2*3.5 + 2 * self::SANGRE_FORMAS_CUBIERTA); + $alto_total += (2 * 3.5 + 2 * $sangre_cubierta); // si es sobrecubierta // Se añaden 5mm de sangre por cada lado + 7mm de vuelo else @@ -985,7 +999,7 @@ class PresupuestoService extends BaseService public static function checkLineasPresupuesto($input_data, $array_lineas) { - + $data['tipo_impresion_id'] = ($input_data['presupuesto'])->tipo_impresion_id; $data['tirada'] = ($input_data['presupuesto'])->tirada; $data['merma'] = ($input_data['presupuesto'])->merma; @@ -1000,23 +1014,21 @@ class PresupuestoService extends BaseService $data['solapas_ancho_sobrecubierta'] = ($input_data['presupuesto'])->solapas_ancho_sobrecubierta; $data['lomo_cubierta'] = ($input_data['presupuesto'])->lomo_cubierta; $data['lomo_sobrecubierta'] = ($input_data['presupuesto'])->lomo_sobrecubierta; - + $cambios = false; $lineas = []; foreach ($array_lineas as $linea) { - + // Si el papel o la máquina no existen, se utiliza la más barata del comparador if (!PresupuestoService::checkMaquina($linea->maquina_id) || !PresupuestoService::checkPapelImpresion($linea->papel_impresion_id)) { - - if(($input_data['presupuesto'])->papel_formato_personalizado == 0){ + + if (($input_data['presupuesto'])->papel_formato_personalizado == 0) { $papel_formato = (new PapelFormatoModel())->find(($input_data['presupuesto'])->papel_formato_id); $ancho = $papel_formato->ancho; $alto = $papel_formato->alto; - } - else - { + } else { $ancho = ($input_data['presupuesto'])->papel_formato_ancho; $alto = ($input_data['presupuesto'])->papel_formato_alto; } @@ -1029,10 +1041,10 @@ class PresupuestoService extends BaseService // Hay que ver si es rotativa o plana // Si es rotativa - if(str_contains($linea->tipo, '_rot_')){ + if (str_contains($linea->tipo, '_rot_')) { $datos = [ - 'datosPedido' => (object)array( + 'datosPedido' => (object) array( 'paginas' => ($input_data['presupuesto'])->paginas, 'tirada' => ($input_data['presupuesto'])->tirada, 'merma' => ($input_data['presupuesto'])->merma, @@ -1043,30 +1055,32 @@ class PresupuestoService extends BaseService ), 'papel_generico' => $papel_generico, 'gramaje' => $linea->gramaje, - 'paginas' => (object)array( + 'paginas' => (object) array( 'negro' => ($input_data['presupuesto'])->paginas - $linea->rotativa_pag_color, 'color' => $linea->rotativa_pag_color, - ), + ), 'cliente_id' => ($input_data['presupuesto'])->cliente_id, - 'datosTipolog' => [(object)array( - 'negro' => $linea->rotativa_negro, - 'cyan' => $linea->rotativa_cyan, - 'magenta' => $linea->rotativa_magenta, - 'amarillo' => $linea->rotativa_amarillo, - 'cg' => $linea->rotativa_cg, - 'gota_negro' => $linea->rotativa_gota_negro, - 'gota_color' => $linea->rotativa_gota_color, - )] + 'datosTipolog' => [ + (object) array( + 'negro' => $linea->rotativa_negro, + 'cyan' => $linea->rotativa_cyan, + 'magenta' => $linea->rotativa_magenta, + 'amarillo' => $linea->rotativa_amarillo, + 'cg' => $linea->rotativa_cg, + 'gota_negro' => $linea->rotativa_gota_negro, + 'gota_color' => $linea->rotativa_gota_color, + ) + ] ]; - $comp_data = PresupuestoService::obtenerComparadorRotativa($datos); + $comp_data = PresupuestoService::obtenerComparadorRotativa($datos); } // Si es plana - else{ + else { $datos = [ 'tipo_impresion_id' => $data['tipo_impresion_id'], - 'datosPedido' => (object)array( + 'datosPedido' => (object) array( 'paginas' => ($input_data['presupuesto'])->paginas, 'tirada' => ($input_data['presupuesto'])->tirada, 'merma' => ($input_data['presupuesto'])->merma, @@ -1079,53 +1093,53 @@ class PresupuestoService extends BaseService 'papel_generico' => $papel_generico, 'gramaje' => $linea->gramaje, 'cliente_id' => ($input_data['presupuesto'])->cliente_id, - 'datosTipolog' => [(object)array( - 'negro' => $linea->rotativa_negro, - 'cyan' => $linea->rotativa_cyan, - 'magenta' => $linea->rotativa_magenta, - 'amarillo' => $linea->rotativa_amarillo, - 'cg' => $linea->rotativa_cg, - 'gota_negro' => $linea->rotativa_gota_negro, - 'gota_color' => $linea->rotativa_gota_color, - )] + 'datosTipolog' => [ + (object) array( + 'negro' => $linea->rotativa_negro, + 'cyan' => $linea->rotativa_cyan, + 'magenta' => $linea->rotativa_magenta, + 'amarillo' => $linea->rotativa_amarillo, + 'cg' => $linea->rotativa_cg, + 'gota_negro' => $linea->rotativa_gota_negro, + 'gota_color' => $linea->rotativa_gota_color, + ) + ] ]; // si la línea es cubierta o sobrecubierta, es HQ y color - if( str_contains($linea->tipo, 'cubierta') ){ + if (str_contains($linea->tipo, 'cubierta')) { $datos['isColor'] = true; $datos['isHq'] = true; - + // además se añade los campos de lomo y solapas y el uso - if( str_contains($linea->tipo, 'sobrecubierta') ){ + if (str_contains($linea->tipo, 'sobrecubierta')) { $datos['datosPedido']->solapas = ($input_data['presupuesto'])->solapas_sobrecubierta; $datos['datosPedido']->solapas_ancho = ($input_data['presupuesto'])->solapas_ancho_sobrecubierta; $datos['datosPedido']->lomo = ($input_data['presupuesto'])->lomo_sobrecubierta; $datos['uso'] = 'sobrecubierta'; - } - else{ + } else { $datos['datosPedido']->solapas = ($input_data['presupuesto'])->solapas; $datos['datosPedido']->solapas_ancho = ($input_data['presupuesto'])->solapas_ancho; $datos['datosPedido']->lomo = ($input_data['presupuesto'])->lomo_cubierta; $datos['uso'] = 'cubierta'; } - } - else{ + } else { $datos['isColor'] = str_contains($linea->tipo, '_color') ? true : false; $datos['isHq'] = str_contains($linea->tipo, 'hq') ? true : false; $datos['uso'] = 'interior'; } - if( str_contains($linea->tipo, 'guardas') ){ + if (str_contains($linea->tipo, 'guardas')) { $datos['uso'] = 'guardas'; $datos['datosPedido']->paginas_impresion = $linea->paginas_impresion; } $comp_data = PresupuestoService::obtenerComparadorPlana($datos); - + } - // se ordena $comp_data usando el campo ['fields]['total_impresion'] - usort($comp_data, function($a, $b) { + // se ordena $comp_data usando el campo ['fields]['total_impresion'] + usort($comp_data, function ($a, $b) { return $a['fields']['total_impresion'] <=> $b['fields']['total_impresion']; }); (new PresupuestoLineaModel())->updatePreciosLineasPresupuesto($linea->id, $comp_data[0]); @@ -1135,29 +1149,29 @@ class PresupuestoService extends BaseService } // Si existe el papel y la máquina, se recalcula el precio con los mismos // parámetros y se comprueba - else{ + else { $nueva_linea = PresupuestoService::obtenerValorLineaPresupuesto($data, $linea); - if(count($nueva_linea) >0){ - if(round($nueva_linea['fields']['total_impresion'],2) != round($linea->total_linea, 2)){ + if (count($nueva_linea) > 0) { + if (round($nueva_linea['fields']['total_impresion'], 2) != round($linea->total_linea, 2)) { (new PresupuestoLineaModel())->updatePreciosLineasPresupuesto($linea->id, $nueva_linea); $linea_to_save = (new PresupuestoLineaModel())->find($linea->id); $cambios = true; array_push($lineas, $linea_to_save); - } - else{ + } else { array_push($lineas, $linea); } } - + } } return [$cambios, $lineas]; } - - private static function obtenerValorLineaPresupuesto($input_data, $linea){ + + private static function obtenerValorLineaPresupuesto($input_data, $linea) + { $tipo_impresion_id = $input_data['tipo_impresion_id']; $tirada = $input_data['tirada']; @@ -1174,7 +1188,7 @@ class PresupuestoService extends BaseService $lomo_cubierta = $input_data['lomo_cubierta']; $lomo_sobrecubierta = $input_data['lomo_sobrecubierta']; - if($papel_formato_personalizado == 0){ + if ($papel_formato_personalizado == 0) { $papel_formato = (new PapelFormatoModel())->find($papel_formato_id); $ancho = $papel_formato->ancho; $alto = $papel_formato->alto; @@ -1192,33 +1206,35 @@ class PresupuestoService extends BaseService 'id' => $papel_generico->id, 'nombre' => $papel_generico->nombre, ); - - $data['datosPedido'] = (object)array( + + $data['datosPedido'] = (object) array( 'paginas' => $linea->paginas, 'tirada' => $tirada, 'merma' => $merma, 'ancho' => $ancho, 'alto' => $alto, 'a_favor_fibra' => $linea->rotativa_a_favor_fibra, - 'isCosido' => (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id), + 'isCosido' => (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id), ); $data['cliente_id'] = $cliente_id; $data['papel'] = $papel_impresion; $data['maquina'] = $maquina; $data['papel_generico'] = $papel_generico; $data['a_favor_fibra'] = $linea->rotativa_a_favor_fibra; - $data['datosTipolog'] = [(object)array( - 'negro' => $linea->rotativa_negro, - 'cyan' => $linea->rotativa_cyan, - 'magenta' => $linea->rotativa_magenta, - 'amarillo' => $linea->rotativa_amarillo, - 'cg' => $linea->rotativa_cg, - 'gota_negro' => $linea->rotativa_gota_negro, - 'gota_color' => $linea->rotativa_gota_color, - )]; + $data['datosTipolog'] = [ + (object) array( + 'negro' => $linea->rotativa_negro, + 'cyan' => $linea->rotativa_cyan, + 'magenta' => $linea->rotativa_magenta, + 'amarillo' => $linea->rotativa_amarillo, + 'cg' => $linea->rotativa_cg, + 'gota_negro' => $linea->rotativa_gota_negro, + 'gota_color' => $linea->rotativa_gota_color, + ) + ]; $data['gramaje'] = $linea->gramaje; - switch($linea->tipo){ + switch ($linea->tipo) { case 'lp_bn': case 'lp_bnhq': @@ -1231,7 +1247,7 @@ class PresupuestoService extends BaseService $tipo = $isColor ? ($isHq ? 'colorhq' : 'color') : ($isHq ? 'negrohq' : 'negro'); $opciones_papel = PresupuestoService::get_opciones_papel('interior', $isColor); - if($linea->tipo == 'lp_guardas'){ + if ($linea->tipo == 'lp_guardas') { $data['uso'] = 'guardas'; $tipo = 'colorhq'; $data['datosPedido']->paginas_impresion = $linea->paginas_impresion; @@ -1256,17 +1272,17 @@ class PresupuestoService extends BaseService case 'lp_rot_color': case 'lp_rot_bn': $data['uso'] = 'interior'; - $tipo = $linea->rotativa_pag_color>0 ? 'color' : 'negro'; - $data['paginas'] = (object)array( - 'negro' => $linea->paginas-$linea->rotativa_pag_color, + $tipo = $linea->rotativa_pag_color > 0 ? 'color' : 'negro'; + $data['paginas'] = (object) array( + 'negro' => $linea->paginas - $linea->rotativa_pag_color, 'color' => $linea->rotativa_pag_color, ); $data['tipo'] = $tipo; - $data['parametrosRotativa'] = (object)array( + $data['parametrosRotativa'] = (object) array( 'a_favor_fibra' => $linea->rotativa_a_favor_fibra, - 'bnPages' => $data['paginas']->negro, - 'colorPages' => $data['paginas']->color, + 'bnPages' => $data['paginas']->negro, + 'colorPages' => $data['paginas']->color, 'rotativa_negro' => $linea->rotativa_negro, 'rotativa_cyan' => $linea->rotativa_cyan, 'rotativa_magenta' => $linea->rotativa_magenta, @@ -1277,64 +1293,67 @@ class PresupuestoService extends BaseService $output_data = PresupuestoService::getLineaPresupuestoRotativa($data); break; - + case 'lp_cubierta': case 'lp_sobrecubierta': - $data['uso'] = ($linea->tipo == 'lp_cubierta')? 'cubierta':'sobrecubierta'; + $data['uso'] = ($linea->tipo == 'lp_cubierta') ? 'cubierta' : 'sobrecubierta'; $data['tipo'] = 'colorhq'; $data['isColor'] = true; - $data['datosPedido']->solapas = ($linea->tipo == 'lp cubierta')? $solapas : $solapas_sobrecubierta; - $data['datosPedido']->solapas_ancho = ($linea->tipo == 'lp cubierta')? $solapas_ancho_cubierta : $solapas_ancho_sobrecubierta; - $data['datosPedido']->lomo = ($linea->tipo == 'lp cubierta')? $lomo_cubierta : $lomo_sobrecubierta; + $data['datosPedido']->solapas = ($linea->tipo == 'lp cubierta') ? $solapas : $solapas_sobrecubierta; + $data['datosPedido']->solapas_ancho = ($linea->tipo == 'lp cubierta') ? $solapas_ancho_cubierta : $solapas_ancho_sobrecubierta; + $data['datosPedido']->lomo = ($linea->tipo == 'lp cubierta') ? $lomo_cubierta : $lomo_sobrecubierta; $opciones_papel = PresupuestoService::get_opciones_papel($data['uso'], true); - $data['opciones_papel'] = $opciones_papel; + $data['opciones_papel'] = $opciones_papel; $data['datosPedido']->anchoExteriores = PresupuestoService::getAnchoTotalExteriores($data['uso'], $tipo_impresion_id, $data['datosPedido'], $maquina->maquina_id); $data['datosPedido']->altoExteriores = PresupuestoService::getAltoTotalExteriores($data['uso'], $tipo_impresion_id, $data['datosPedido']); - + $output_data = PresupuestoService::getLineaPresupuestoPlana($data); - if ($tipo_impresion_id == 5 || $tipo_impresion_id == 6 || - $tipo_impresion_id == 7 || $tipo_impresion_id == 8) { - + if ( + $tipo_impresion_id == 5 || $tipo_impresion_id == 6 || + $tipo_impresion_id == 7 || $tipo_impresion_id == 8 + ) { + $output_data['fields']['num_formas']['num_formas_horizontales'] *= 2; $output_data['fields']['num_formas']['value'] *= 2; } break; } - return $output_data; + return $output_data; } // Funcion que procesa los servicios y actualiza los precios en caso de cambio - public static function checkLineasServicios($input_data, $servicios){ - + public static function checkLineasServicios($input_data, $servicios) + { + $cambio_en_servicios = false; $cambio = false; - if(count($servicios->serviciosAcabado)>0){ - - [$cambio, $servicios->serviciosAcabado] = + if (count($servicios->serviciosAcabado) > 0) { + + [$cambio, $servicios->serviciosAcabado] = PresupuestoService::procesarServiciosAcabado($input_data, $servicios->serviciosAcabado); - $cambio_en_servicios = $cambio_en_servicios? $cambio_en_servicios: $cambio; + $cambio_en_servicios = $cambio_en_servicios ? $cambio_en_servicios : $cambio; } - if(count($servicios->serviciosManipulado)>0){ - - [$cambio, $servicios->serviciosManipulado] = + if (count($servicios->serviciosManipulado) > 0) { + + [$cambio, $servicios->serviciosManipulado] = PresupuestoService::procesarServiciosManipulado($input_data, $servicios->serviciosManipulado); - $cambio_en_servicios = $cambio_en_servicios? $cambio_en_servicios: $cambio; + $cambio_en_servicios = $cambio_en_servicios ? $cambio_en_servicios : $cambio; } - if(count($servicios->serviciosEncuadernacion)>0){ - - [$cambio, $servicios->serviciosEncuadernacion] = + if (count($servicios->serviciosEncuadernacion) > 0) { + + [$cambio, $servicios->serviciosEncuadernacion] = PresupuestoService::procesarServiciosEncuadernacion($input_data, $servicios->serviciosEncuadernacion); - $cambio_en_servicios = $cambio_en_servicios? $cambio_en_servicios: $cambio; + $cambio_en_servicios = $cambio_en_servicios ? $cambio_en_servicios : $cambio; } // Los servicios de preimpresion y los extra se dejan tal y como esten @@ -1345,25 +1364,27 @@ class PresupuestoService extends BaseService // Funcion que procesa los servicios de acabado del presupuesto // y actualiza los precios en caso de cambio de valor en precio_unidad - private static function procesarServiciosAcabado($input_data, $servicios){ + private static function procesarServiciosAcabado($input_data, $servicios) + { $serviciosUpdated = []; $cambio = false; $model = new PresupuestoAcabadosModel(); foreach ($servicios as $servicio) { - + // Si es un presupuesto duplicado hay que buscar el proveedor más barato - if($input_data['is_duplicado']){ + if ($input_data['is_duplicado']) { $nueva_tarifa = $model->getPrecioTarifa($servicio->tarifa_acabado_id, $input_data['tirada'], -1, $input_data['POD']); - } - else{ + } else { $nueva_tarifa = $model->getPrecioTarifa($servicio->tarifa_acabado_id, $input_data['tirada'], $servicio->proveedor_id, $input_data['POD']); - } - - if($nueva_tarifa && count($nueva_tarifa)>0){ - if(round($nueva_tarifa[0]->precio_unidad, 2) != round($servicio->precio_unidad,2) || - $nueva_tarifa[0]->margen != $servicio->margen){ + } + + if ($nueva_tarifa && count($nueva_tarifa) > 0) { + if ( + round($nueva_tarifa[0]->precio_unidad, 2) != round($servicio->precio_unidad, 2) || + $nueva_tarifa[0]->margen != $servicio->margen + ) { $servicio->precio_unidad = round($nueva_tarifa[0]->precio_unidad, 2); $servicio->precio_total = round($nueva_tarifa[0]->total, 2); @@ -1374,7 +1395,7 @@ class PresupuestoService extends BaseService $servicio_temp = $servicio; $servicio_temp->tarifa_id = $servicio_temp->tarifa_acabado_id; $model->updateTarifas($input_data['presupuesto_id'], array($servicio_temp)); - + } } @@ -1383,7 +1404,8 @@ class PresupuestoService extends BaseService // Funcion que procesa los servicios de manipulado del presupuesto // y actualiza los precios en caso de cambio de valor en precio_unidad - private static function procesarServiciosManipulado($input_data, $servicios){ + private static function procesarServiciosManipulado($input_data, $servicios) + { $serviciosUpdated = []; $cambio = false; @@ -1392,9 +1414,11 @@ class PresupuestoService extends BaseService foreach ($servicios as $servicio) { $count = 0; $nueva_tarifa = $model->getPrecioTarifa($servicio->tarifa_manipulado_id, $input_data['tirada'], $input_data['POD']); - if($nueva_tarifa && count($nueva_tarifa)>0){ - if(round($nueva_tarifa[0]->precio_unidad, 2) != round($servicio->precio_unidad,2) || - $nueva_tarifa[0]->margen != $servicio->margen){ + if ($nueva_tarifa && count($nueva_tarifa) > 0) { + if ( + round($nueva_tarifa[0]->precio_unidad, 2) != round($servicio->precio_unidad, 2) || + $nueva_tarifa[0]->margen != $servicio->margen + ) { $servicio->precio_unidad = round($nueva_tarifa[0]->precio_unidad, 2); $servicio->precio_total = round($nueva_tarifa[0]->total, 2); @@ -1405,7 +1429,7 @@ class PresupuestoService extends BaseService $servicio_temp = $servicio; $servicio_temp->tarifa_id = $servicio_temp->tarifa_manipulado_id; $model->updateTarifas($input_data['presupuesto_id'], array($servicio_temp)); - + } } @@ -1415,7 +1439,8 @@ class PresupuestoService extends BaseService // Funcion que procesa los servicios de encuadernacion del presupuesto // y actualiza los precios en caso de cambio de valor en precio_unidad - private static function procesarServiciosEncuadernacion($input_data, $servicios){ + private static function procesarServiciosEncuadernacion($input_data, $servicios) + { $serviciosUpdated = []; $cambio = false; @@ -1424,78 +1449,83 @@ class PresupuestoService extends BaseService $tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel'); foreach ($servicios as $servicio) { - + // Si es un presupuesto duplicado hay que buscar el proveedor más barato - if($input_data['is_duplicado']){ - if($tarifaModel->isTarifaPorHoras($servicio->tarifa_encuadernado_id)){ - $paginas_cuadernillo = $servicio->paginas_por_cuadernillo??null; + if ($input_data['is_duplicado']) { + if ($tarifaModel->isTarifaPorHoras($servicio->tarifa_encuadernado_id)) { + $paginas_cuadernillo = $servicio->paginas_por_cuadernillo ?? null; $nueva_tarifa = $model->getPrecioTarifaHoras( $servicio->tarifa_encuadernado_id, - $input_data['paginas'], + $input_data['paginas'], $input_data['tirada'], - -1, + -1, $input_data['POD'], - $paginas_cuadernillo); - }else{ + $paginas_cuadernillo + ); + } else { $nueva_tarifa = $model->getPrecioTarifa( $servicio->tarifa_encuadernado_id, - $input_data['paginas'], + $input_data['paginas'], $input_data['tirada'], - $input_data['ancho'], + $input_data['ancho'], $input_data['alto'], - -1, - $input_data['POD']); + -1, + $input_data['POD'] + ); } - + } // En caso de que el presupuesto no sea duplicado, recalcular la tarifa // con el mismo proveedor - else{ - if($tarifaModel->isTarifaPorHoras($servicio->tarifa_encuadernado_id)){ - $paginas_cuadernillo = $servicio->paginas_por_cuadernillo??null; + else { + if ($tarifaModel->isTarifaPorHoras($servicio->tarifa_encuadernado_id)) { + $paginas_cuadernillo = $servicio->paginas_por_cuadernillo ?? null; $nueva_tarifa = $model->getPrecioTarifaHoras( $servicio->tarifa_encuadernado_id, - $input_data['paginas'], + $input_data['paginas'], $input_data['tirada'], - $servicio->proveedor_id, + $servicio->proveedor_id, $input_data['POD'], - $paginas_cuadernillo); - }else{ + $paginas_cuadernillo + ); + } else { $nueva_tarifa = $model->getPrecioTarifa( - $servicio->tarifa_encuadernado_id, - $input_data['paginas'], + $servicio->tarifa_encuadernado_id, + $input_data['paginas'], $input_data['tirada'], - $input_data['ancho'], + $input_data['ancho'], $input_data['alto'], - $servicio->proveedor_id, - $input_data['POD']); + $servicio->proveedor_id, + $input_data['POD'] + ); } } - - if($nueva_tarifa && count($nueva_tarifa)>0){ - if(!isset($nueva_tarifa[0]->proveedor_id)){ + + if ($nueva_tarifa && count($nueva_tarifa) > 0) { + if (!isset($nueva_tarifa[0]->proveedor_id)) { $nueva_tarifa[0]->proveedor_id = null; } // Si el presupuesto no es duplicado, se comprueba que // no ha cambiado el precio unidad - if($nueva_tarifa[0]->tiempo==null) + if ($nueva_tarifa[0]->tiempo == null) $nueva_tarifa[0]->tiempo = 0; - if($servicio->tiempo == null) + if ($servicio->tiempo == null) $servicio->tiempo = 0; - if(round($nueva_tarifa[0]->precio_unidad, 2) != round(floatval($servicio->precio_unidad),2) || + if ( + round($nueva_tarifa[0]->precio_unidad, 2) != round(floatval($servicio->precio_unidad), 2) || $nueva_tarifa[0]->margen != floatval($servicio->margen) || - $nueva_tarifa[0]->tiempo != floatval($servicio->tiempo)){ + $nueva_tarifa[0]->tiempo != floatval($servicio->tiempo) + ) { $servicio->precio_unidad = round($nueva_tarifa[0]->precio_unidad, 2); - $servicio->tiempo = $nueva_tarifa[0]->tiempo==null?0: round($nueva_tarifa[0]->tiempo, 2); + $servicio->tiempo = $nueva_tarifa[0]->tiempo == null ? 0 : round($nueva_tarifa[0]->tiempo, 2); $servicio->precio_total = round($nueva_tarifa[0]->total, 2); $servicio->margen = round($nueva_tarifa[0]->margen); $cambio = true; - } - else if($input_data['is_duplicado'] && $nueva_tarifa[0]->proveedor_id != $servicio->proveedor_id){ + } else if ($input_data['is_duplicado'] && $nueva_tarifa[0]->proveedor_id != $servicio->proveedor_id) { $servicio->precio_unidad = round($nueva_tarifa[0]->precio_unidad, 2); - $servicio->tiempo = $nueva_tarifa[0]->tiempo==null?"": round($nueva_tarifa[0]->tiempo, 2); + $servicio->tiempo = $nueva_tarifa[0]->tiempo == null ? "" : round($nueva_tarifa[0]->tiempo, 2); $servicio->precio_total = round($nueva_tarifa[0]->total, 2); $servicio->margen = round($nueva_tarifa[0]->margen); $servicio->proveedor = $nueva_tarifa[0]->proveedor; @@ -1513,37 +1543,40 @@ class PresupuestoService extends BaseService } - public static function checkLineasEnvios($envios){ - + public static function checkLineasEnvios($envios) + { + $cambio = false; - if(count($envios)>0){ + if (count($envios) > 0) { $model = new TarifaEnvioModel(); foreach ($envios as $envio) { $paisId = $envio->pais_id; - $cp= $envio->cp; - $peso= $envio->peso; - $tipo_envio= $envio->entregaPieCalle==1?'palets':'cajas'; + $cp = $envio->cp; + $peso = $envio->peso; + $tipo_envio = $envio->entregaPieCalle == 1 ? 'palets' : 'cajas'; $nueva_tarifa = $model->getTarifaEnvio($paisId, $cp, $peso, $tipo_envio); - if($nueva_tarifa && count($nueva_tarifa)>0){ + if ($nueva_tarifa && count($nueva_tarifa) > 0) { $coste = 0; $margen = 0; - if($peso>$nueva_tarifa[0]->peso_max){ - $coste += floatval($nueva_tarifa[0]->peso_min) + ($peso-floatval($nueva_tarifa[0]->peso_min))*floatval($nueva_tarifa[0]->precio_adicional); + if ($peso > $nueva_tarifa[0]->peso_max) { + $coste += floatval($nueva_tarifa[0]->peso_min) + ($peso - floatval($nueva_tarifa[0]->peso_min)) * floatval($nueva_tarifa[0]->precio_adicional); } // si no se calcula linealmente - else{ - $m=(floatval($nueva_tarifa[0]->precio_max)-floatval($nueva_tarifa[0]->precio_min)) / ((floatval($nueva_tarifa[0]->peso_max)-floatval($nueva_tarifa[0]->peso_min))); - $b=floatval($nueva_tarifa[0]->precio_max)-$m*floatval($nueva_tarifa[0]->peso_max); - $coste += floatval($m*$peso+$b); + else { + $m = (floatval($nueva_tarifa[0]->precio_max) - floatval($nueva_tarifa[0]->precio_min)) / ((floatval($nueva_tarifa[0]->peso_max) - floatval($nueva_tarifa[0]->peso_min))); + $b = floatval($nueva_tarifa[0]->precio_max) - $m * floatval($nueva_tarifa[0]->peso_max); + $coste += floatval($m * $peso + $b); } - $margen += $coste*floatval($nueva_tarifa[0]->margen)/100.0; + $margen += $coste * floatval($nueva_tarifa[0]->margen) / 100.0; - if(round($coste, 2) != $envio->precio || - $margen != $envio->margen || $nueva_tarifa[0]->id != $envio->tarifa_id){ + if ( + round($coste, 2) != $envio->precio || + $margen != $envio->margen || $nueva_tarifa[0]->id != $envio->tarifa_id + ) { $envio->precio = round($coste, 2); $envio->margen = $margen; @@ -1553,9 +1586,9 @@ class PresupuestoService extends BaseService $presupuestoDirecciones = new PresupuestoDireccionesModel(); $presupuestoDirecciones->updateLineaEnvio($envio); } - + } - + } } @@ -1579,8 +1612,9 @@ class PresupuestoService extends BaseService // - gramaje: gramaje del papel seleccionado // - cliente_id: id del cliente al que va destinado el presupuesto // - datosTipolog: datos referentes a las tintas - public static function obtenerComparadorRotativa($input_data){ - + public static function obtenerComparadorRotativa($input_data) + { + $paginas = $input_data['paginas']; $datosPedido = $input_data['datosPedido']; $gramaje = $input_data['gramaje']; @@ -1591,10 +1625,10 @@ class PresupuestoService extends BaseService $tipo = $paginas->color > 0 ? 'color' : 'negro'; $uso = 'interior'; - $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, ); @@ -1607,8 +1641,7 @@ class PresupuestoService extends BaseService if ($paginas->color > 0) { $tipo = 'color'; $opciones_papel['color'] = 1; - } - else { + } else { $opciones_papel['bn'] = 1; $tipo = 'negro'; } @@ -1639,12 +1672,12 @@ class PresupuestoService extends BaseService $datosTipologias = $datosTipolog; } - $parametrosRotativa->rotativa_gota_negro = $datosTipologias[0]->gota_negro; - $parametrosRotativa->rotativa_gota_color = $datosTipologias[0]->gota_color; - $parametrosRotativa->rotativa_negro = $datosTipologias[0]->negro; - $parametrosRotativa->rotativa_cyan = $datosTipologias[0]->cyan; - $parametrosRotativa->rotativa_magenta = $datosTipologias[0]->magenta; - $parametrosRotativa->rotativa_amarillo = $datosTipologias[0]->amarillo; + $parametrosRotativa->rotativa_gota_negro = $datosTipologias[0]->gota_negro; + $parametrosRotativa->rotativa_gota_color = $datosTipologias[0]->gota_color; + $parametrosRotativa->rotativa_negro = $datosTipologias[0]->negro; + $parametrosRotativa->rotativa_cyan = $datosTipologias[0]->cyan; + $parametrosRotativa->rotativa_magenta = $datosTipologias[0]->magenta; + $parametrosRotativa->rotativa_amarillo = $datosTipologias[0]->amarillo; $maquinamodel = new MaquinaModel(); @@ -1673,9 +1706,9 @@ class PresupuestoService extends BaseService $linea = PresupuestoService::getLineaPresupuestoRotativa($data); - if(empty($linea)) + if (empty($linea)) continue; - + array_push($lineas, $linea); } } @@ -1704,7 +1737,8 @@ class PresupuestoService extends BaseService // - cliente_id: id del cliente al que va destinado el presupuesto // - datosTipolog: datos referentes a las tintas (opcional) // - a_favor_fibra: dirección de la impresión - public static function obtenerComparadorPlana($input_data){ + public static function obtenerComparadorPlana($input_data) + { $uso = $input_data['uso']; $tipo_impresion_id = $input_data['tipo_impresion_id']; @@ -1716,7 +1750,8 @@ class PresupuestoService extends BaseService $cliente_id = $input_data['cliente_id']; $datosTipolog = $input_data['datosTipolog'] ?? null; $a_favor_fibra = $datosPedido->a_favor_fibra ?? false; - + $lomoRedondo = $input_data['lomoRedondo'] ?? 0; + $tipo = $isColor ? ($isHq ? 'colorhq' : 'color') : ($isHq ? 'negrohq' : 'negro'); $opciones_papel = PresupuestoService::get_opciones_papel($uso, $isColor); @@ -1747,7 +1782,7 @@ class PresupuestoService extends BaseService if ($uso == 'cubierta' || $uso == 'sobrecubierta') { - $datosPedido->anchoExteriores = PresupuestoService::getAnchoTotalExteriores($uso, $tipo_impresion_id, $datosPedido, $maquina->maquina_id); + $datosPedido->anchoExteriores = PresupuestoService::getAnchoTotalExteriores($uso, $tipo_impresion_id, $datosPedido, $maquina->maquina_id, $lomoRedondo); $datosPedido->altoExteriores = PresupuestoService::getAltoTotalExteriores($uso, $tipo_impresion_id, $datosPedido); } @@ -1766,27 +1801,28 @@ class PresupuestoService extends BaseService $linea = PresupuestoService::getLineaPresupuestoPlana($data); - if ($tipo_impresion_id == 5 || $tipo_impresion_id == 6 || - $tipo_impresion_id == 7 || $tipo_impresion_id == 8) { + if (empty($linea)) + continue; - if ($uso == 'cubierta'){ + if ( + $tipo_impresion_id == 5 || $tipo_impresion_id == 6 || + $tipo_impresion_id == 7 || $tipo_impresion_id == 8 + ) { + + if ($uso == 'cubierta') { $linea['fields']['num_formas']['num_formas_horizontales'] *= 2; $linea['fields']['num_formas']['value'] *= 2; } } - if(empty($linea)) - continue; - - if(!array_key_exists('tipo_linea', $linea['fields'])){ - if($isColor){ - if($isHq) + if (!array_key_exists('tipo_linea', $linea['fields'])) { + if ($isColor) { + if ($isHq) $linea['fields']['tipo_linea'] = 'lp_colorhq'; else $linea['fields']['tipo_linea'] = 'lp_color'; - } - else{ - if($isHq) + } else { + if ($isHq) $linea['fields']['tipo_linea'] = 'lp_bnhq'; else $linea['fields']['tipo_linea'] = 'lp_bn'; @@ -1805,12 +1841,12 @@ class PresupuestoService extends BaseService $model_pedido = model('App\Models\Pedidos\PedidoModel'); $model_pedido_linea = model('App\Models\Pedidos\PedidoLineaModel'); $model_cliente = model('App\Models\Clientes\ClienteModel'); - + $model_presupuesto = model('App\Models\Presupuestos\PresupuestoModel'); $datos_presupuesto = $model_presupuesto->find($presupuesto_id); $id_linea = 0; - + $data_pedido = [ 'total_precio' => $datos_presupuesto->total_aceptado, 'total_tirada' => $datos_presupuesto->tirada, @@ -1820,19 +1856,19 @@ class PresupuestoService extends BaseService ]; $pedido_id = $model_pedido->insert($data_pedido); - if($pedido_id){ + if ($pedido_id) { $data_pedido_linea = [ - "pedido_id" => $pedido_id, - "presupuesto_id" => $presupuesto_id, + "pedido_id" => $pedido_id, + "presupuesto_id" => $presupuesto_id, "ubicacion_id" => 1, // safetak por defecto "user_created_id" => auth()->user()->id, - "user_updated_id" => auth()->user()->id, + "user_updated_id" => auth()->user()->id, ]; $id_linea = $model_pedido_linea->insert($data_pedido_linea); PedidoXMLService::generate_xml($pedido_id); } - - if($id_linea != 0 && $pedido_id != 0){ + + if ($id_linea != 0 && $pedido_id != 0) { return true; } return false; @@ -1843,7 +1879,8 @@ class PresupuestoService extends BaseService *******************************/ // Funcion que comprueba si existe una maquina - private static function checkMaquina($maquina_id){ + private static function checkMaquina($maquina_id) + { $maquina = (new MaquinaModel())->find($maquina_id); if (!$maquina) { @@ -1854,7 +1891,8 @@ class PresupuestoService extends BaseService // Funcion que comprueba si existe un papel de impresion - private static function checkPapelImpresion($papel_impresion_id){ + private static function checkPapelImpresion($papel_impresion_id) + { $papel = (new PapelImpresionModel())->find($papel_impresion_id); if (!$papel) { diff --git a/ci4/app/Views/themes/_commonPartialsBs/_alertBoxes.php b/ci4/app/Views/themes/_commonPartialsBs/_alertBoxes.php index 6f0ddc22..e5019405 100755 --- a/ci4/app/Views/themes/_commonPartialsBs/_alertBoxes.php +++ b/ci4/app/Views/themes/_commonPartialsBs/_alertBoxes.php @@ -21,10 +21,13 @@ if (session()->has('error')) {
+
+
+ section('globalJsFunctions') ?> -function popAlert(message, alertClass, alertIcon, containerId = 'sk-alert'){ +function popAlert(message, alertClass, alertIcon, containerId = 'sk-alert', fade = true){ var htmlString = ` diff --git a/ci4/app/Views/themes/vuexy/components/chat_internal_pedido.php b/ci4/app/Views/themes/vuexy/components/chat_internal_pedido.php index 800229f2..bc6f8813 100644 --- a/ci4/app/Views/themes/vuexy/components/chat_internal_pedido.php +++ b/ci4/app/Views/themes/vuexy/components/chat_internal_pedido.php @@ -15,17 +15,21 @@ + user()->inGroup('admin') || auth()->user()->inGroup('beta')) { ?> +
- + user()->inGroup('admin') || auth()->user()->inGroup('beta')) { ?> + +
diff --git a/ci4/app/Views/themes/vuexy/components/chat_internal_presupuesto.php b/ci4/app/Views/themes/vuexy/components/chat_internal_presupuesto.php index e8775dde..d8509da1 100644 --- a/ci4/app/Views/themes/vuexy/components/chat_internal_presupuesto.php +++ b/ci4/app/Views/themes/vuexy/components/chat_internal_presupuesto.php @@ -15,17 +15,21 @@ + user()->inGroup('admin') || auth()->user()->inGroup('beta')) { ?> +
- + user()->inGroup('admin') || auth()->user()->inGroup('beta')) { ?> + +
diff --git a/ci4/app/Views/themes/vuexy/components/chat_pedido.php b/ci4/app/Views/themes/vuexy/components/chat_pedido.php index 44e17de6..03768365 100644 --- a/ci4/app/Views/themes/vuexy/components/chat_pedido.php +++ b/ci4/app/Views/themes/vuexy/components/chat_pedido.php @@ -37,16 +37,6 @@ - - diff --git a/ci4/app/Views/themes/vuexy/components/chat_presupuesto.php b/ci4/app/Views/themes/vuexy/components/chat_presupuesto.php index cf791d27..5a9bb075 100644 --- a/ci4/app/Views/themes/vuexy/components/chat_presupuesto.php +++ b/ci4/app/Views/themes/vuexy/components/chat_presupuesto.php @@ -1,4 +1,4 @@ -
+
diff --git a/ci4/app/Views/themes/vuexy/components/modals/modalNewInternalMessage.php b/ci4/app/Views/themes/vuexy/components/modals/modalNewInternalMessage.php index 462725e6..bad4ce3a 100644 --- a/ci4/app/Views/themes/vuexy/components/modals/modalNewInternalMessage.php +++ b/ci4/app/Views/themes/vuexy/components/modals/modalNewInternalMessage.php @@ -31,7 +31,7 @@
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/loader.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/loader.php index 85f03b08..a0ef0448 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/loader.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/loader.php @@ -1,5 +1,18 @@ -