diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php
index ba3b7bf9..6de7cb2f 100644
--- a/ci4/app/Config/Routes.php
+++ b/ci4/app/Config/Routes.php
@@ -113,6 +113,7 @@ $routes->group('users', ['namespace' => 'App\Controllers\Configuracion'], functi
$routes->get('delete/(:num)', 'Users::delete/$1', ['as' => 'deleteUser']);
$routes->post('allmenuitems', 'Users::allItemsSelect', ['as' => 'select2ItemsOfUsers']);
$routes->post('menuitems', 'Users::menuItems', ['as' => 'menuItemsOfUsers']);
+ $routes->post('datatable', 'Users::datatable', ['as' => 'datatableOfUsers']);
$routes->get('getMenuComerciales', 'Users::getMenuComerciales', ['as' => 'menuItemsComerciales']);
});
$routes->resource('users', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Users', 'except' => 'show,new,create,update']);
@@ -263,6 +264,8 @@ $routes->resource('papelesimpresionmargenes', ['namespace' => 'App\Controllers\C
$routes->group('maquinas', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
$routes->get('', 'Maquinas::index', ['as' => 'maquinaList']);
$routes->get('add', 'Maquinas::add', ['as' => 'newMaquina']);
+ $routes->get('edit/(:num)', 'Maquinas::edit/$1');
+ $routes->get('delete/(:num)', 'Maquinas::delete/$1');
$routes->post('add', 'Maquinas::add', ['as' => 'createMaquina']);
$routes->post('create', 'Maquinas::create', ['as' => 'ajaxCreateMaquina']);
$routes->put('update/(:num)', 'Maquinas::update/$1', ['as' => 'ajaxUpdateMaquina']);
@@ -428,11 +431,15 @@ $routes->resource('clienteplantillaprecios', ['namespace' => 'App\Controllers\Cl
$routes->group('clienteplantillaprecioslineas', ['namespace' => 'App\Controllers\Clientes'], function ($routes) {
$routes->post('datatable', 'Clienteplantillaprecioslineas::datatable', ['as' => 'dataTableOfClientesplantillaprecioslineas']);
$routes->post('datatable_editor', 'Clienteplantillaprecioslineas::datatable_editor', ['as' => 'editorOfClienteplantillaprecioslineas']);
+ $routes->post('getrows', 'Clienteplantillaprecioslineas::getStoredRows', ['as' => 'getStoredRowsOfClienteplantillaprecioslineas']);
});
$routes->resource('clienteplantillaprecioslineas', ['namespace' => 'App\Controllers\Clientes', 'controller' => 'clienteplantillaprecioslineas', 'except' => 'show,new,create,update']);
$routes->group('clienteusuarios', ['namespace' => 'App\Controllers\Clientes'], function ($routes) {
$routes->post('datatable', 'Clienteusuarios::datatable', ['as' => 'dataTableOfClienteUsuarios']);
+ $routes->post('adduser', 'Clienteusuarios::addUserToClient');
+ $routes->get('delete/(:num)', 'Clienteusuarios::removeClienteFromUser/$1');
+ $routes->get('getusers', 'Clienteusuarios::getAvailableUsers');
});
@@ -607,6 +614,7 @@ $routes->group('serviciosacabados', ['namespace' => 'App\Controllers\Presupuesto
$routes->post('datatable', 'Presupuestoacabados::datatable', ['as' => 'dataTableOfPresupuestoAcabados']);
$routes->post('menuitems', 'Presupuestoacabados::menuItems', ['as' => 'menuItemsOfPresupuestoAcabados']);
$routes->post('edit/(:num)', 'Presupuestoacabados::edit/$1', ['as' => 'updatePresupuestoacabados']);
+ $routes->get('getacabados', 'Presupuestoacabados::getAcabados');
});
$routes->group('serviciosencuadernaciones', ['namespace' => 'App\Controllers\Presupuestos'], function ($routes) {
@@ -799,6 +807,11 @@ $routes->group('chat', ['namespace' => 'App\Controllers\Chat'], function ($route
$routes->get('direct/conversation/(:num)', 'ChatController::get_chat_direct/$1', ['as' => 'getChatDirect']);
$routes->get('direct/users/select/(:num)', 'ChatController::get_chat_direct_select_users/$1', ['as' => 'getChatDirectSelectUsers']);
+
+ $routes->get('direct/client/users/select/presupuesto/(:num)', 'ChatController::get_presupuesto_client_users/$1/$2', ['as' => 'getPresupuestoClientUsers']);
+ $routes->get('direct/client/users/select/pedido/(:num)', 'ChatController::get_pedido_client_users/$1/$2', ['as' => 'getPedidoClientUsers']);
+ $routes->get('direct/client/users/select/factura/(:num)', 'ChatController::get_factura_client_users/$1/$2', ['as' => 'getFacturaClientUsers']);
+
$routes->get('direct/users/(:num)', 'ChatController::get_chat_direct_users', ['as' => 'getChatDirectUsers']);
$routes->post('direct/users/(:num)', 'ChatController::store_chat_direct_users/$1', ['as' => 'storeChatDirectUsers']);
$routes->get('direct/messages/(:num)', 'ChatController::get_chat_direct_messages/$1', ['as' => 'getChatDirectMessages']);
diff --git a/ci4/app/Controllers/Chat/ChatController.php b/ci4/app/Controllers/Chat/ChatController.php
index 3526b6da..854f562b 100644
--- a/ci4/app/Controllers/Chat/ChatController.php
+++ b/ci4/app/Controllers/Chat/ChatController.php
@@ -10,6 +10,9 @@ use App\Models\Chat\ChatModel;
use App\Models\ChatNotification;
use App\Models\ChatUser;
use App\Models\Clientes\ClienteModel;
+use App\Models\Facturas\FacturaModel;
+use App\Models\Pedidos\PedidoModel;
+use App\Models\Presupuestos\PresupuestoModel;
use App\Models\Usuarios\UserModel;
use App\Services\MessageService;
use CodeIgniter\HTTP\ResponseInterface;
@@ -396,6 +399,72 @@ class ChatController extends BaseController
return $this->response->setJSON($query->get()->getResultObject());
}
+ public function get_presupuesto_client_users(int $presupuesto_id)
+ {
+ $pm = model(PresupuestoModel::class);
+ $p = $pm->find($presupuesto_id);
+ $query = $this->userModel->builder()->select(
+ [
+ "id",
+ "CONCAT(first_name,' ',last_name,'(',username,')') as name"
+ ]
+ )
+ ->where("deleted_at", null)
+ ->whereNotIn("id", [auth()->user()->id])
+ ->where("cliente_id",$p->cliente_id);
+ if ($this->request->getGet("q")) {
+ $query->groupStart()
+ ->orLike("users.username", $this->request->getGet("q"))
+ ->orLike("CONCAT(first_name,' ',last_name)", $this->request->getGet("q"))
+ ->groupEnd();
+ }
+
+ return $this->response->setJSON($query->get()->getResultObject());
+ }
+ public function get_pedido_client_users(int $pedido_id)
+ {
+ $pm = model(PedidoModel::class);
+ $p = $pm->find($pedido_id);
+ $query = $this->userModel->builder()->select(
+ [
+ "id",
+ "CONCAT(first_name,' ',last_name,'(',username,')') as name"
+ ]
+ )
+ ->where("deleted_at", null)
+ ->whereNotIn("id", [auth()->user()->id])
+ ->where("cliente_id",$p->cliente()->id);
+ if ($this->request->getGet("q")) {
+ $query->groupStart()
+ ->orLike("users.username", $this->request->getGet("q"))
+ ->orLike("CONCAT(first_name,' ',last_name)", $this->request->getGet("q"))
+ ->groupEnd();
+ }
+
+ return $this->response->setJSON($query->get()->getResultObject());
+ }
+ public function get_factura_client_users(int $factura_id)
+ {
+ $fm = model(FacturaModel::class);
+ $f = $fm->find($factura_id);
+ $query = $this->userModel->builder()->select(
+ [
+ "id",
+ "CONCAT(first_name,' ',last_name,'(',username,')') as name"
+ ]
+ )
+ ->where("deleted_at", null)
+ ->whereNotIn("id", [auth()->user()->id])
+ ->where("cliente_id",$f->cliente_id);
+ if ($this->request->getGet("q")) {
+ $query->groupStart()
+ ->orLike("users.username", $this->request->getGet("q"))
+ ->orLike("CONCAT(first_name,' ',last_name)", $this->request->getGet("q"))
+ ->groupEnd();
+ }
+
+ return $this->response->setJSON($query->get()->getResultObject());
+ }
public function store_hebra_presupuesto()
{
$auth_user = auth()->user();
diff --git a/ci4/app/Controllers/Clientes/Cliente.php b/ci4/app/Controllers/Clientes/Cliente.php
index f388ec1f..970118d9 100755
--- a/ci4/app/Controllers/Clientes/Cliente.php
+++ b/ci4/app/Controllers/Clientes/Cliente.php
@@ -250,11 +250,20 @@ class Cliente extends \App\Controllers\BaseResourceController
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
$search = $reqData['search']['value'];
- $requestedOrder = $reqData['order']['0']['column'] ?? 1;
- $order = ClienteModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 1];
- $dir = $reqData['order']['0']['dir'] ?? 'asc';
+ $searchValues = get_filter_datatables_columns($reqData);
+ $requestedOrder = $reqData['order'] ?? [];
- $resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
+ $resourceData = $this->model->getResource($searchValues);
+ foreach ($requestedOrder as $order) {
+ $column = $order['column'] ?? 0;
+ $dir = $order['dir'] ?? 'asc';
+ $orderColumn = ClienteModel::SORTABLE[$column] ?? null;
+ if ($orderColumn) {
+ $resourceData->orderBy($orderColumn, $dir);
+ }
+ }
+ $resourceData = $resourceData->limit($length, $start)->get()->getResultObject();
+
foreach ($resourceData as $item) :
if (isset($item->direccion) && strlen($item->direccion) > 100) :
$item->direccion = character_limiter($item->direccion, 100);
@@ -273,7 +282,7 @@ class Cliente extends \App\Controllers\BaseResourceController
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource()->countAllResults(),
- $this->model->getResource($search)->countAllResults()
+ $this->model->getResource($searchValues)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
diff --git a/ci4/app/Controllers/Clientes/Clienteplantillaprecioslineas.php b/ci4/app/Controllers/Clientes/Clienteplantillaprecioslineas.php
index 4e933a3a..d0b4d98a 100755
--- a/ci4/app/Controllers/Clientes/Clienteplantillaprecioslineas.php
+++ b/ci4/app/Controllers/Clientes/Clienteplantillaprecioslineas.php
@@ -120,6 +120,26 @@ class Clienteplantillaprecioslineas extends \App\Controllers\BaseResourceControl
}
}
+
+ public function getStoredRows()
+ {
+ if ($this->request->isAJAX()) {
+ $reqData = $this->request->getPost();
+ $plantilla_id = $reqData['plantilla_id'] ?? 0;
+
+ $resourceData = $this->model->getResource([], $plantilla_id);
+ $resourceData = $resourceData->get()->getResultObject();
+
+ return $this->respond(Collection::datatable(
+ $resourceData,
+ $this->model->getResource([], $plantilla_id)->countAllResults(),
+ $this->model->getResource([], $plantilla_id)->countAllResults()
+ ));
+ } else {
+ return $this->failUnauthorized('Invalid request', 403);
+ }
+ }
+
public function datatable_editor() {
if ($this->request->isAJAX()) {
@@ -178,26 +198,6 @@ class Clienteplantillaprecioslineas extends \App\Controllers\BaseResourceControl
),
)
- ->validator(function ($editor, $action, $data) {
- if ($action === Editor::ACTION_CREATE || $action === Editor::ACTION_EDIT) {
- foreach ($data['data'] as $pkey => $values) {
- // Si no se quiere borrar...
- if ($data['data'][$pkey]['is_deleted'] != 1) {
- $process_data['tiempo_min'] = $data['data'][$pkey]['tiempo_min'];
- $process_data['tiempo_max'] = $data['data'][$pkey]['tiempo_max'];
- $process_data['tipo'] = $data['data'][$pkey]['tipo'];
- $process_data['tipo_maquina'] = $data['data'][$pkey]['tipo_maquina'];
- $process_data['tipo_impresion'] = $data['data'][$pkey]['tipo_impresion'];
-
- $response = $this->model->checkIntervals($process_data, $pkey, $data['data'][$pkey]['plantilla_id']);
- // No se pueden duplicar valores al crear o al editar
- if (!empty($response)) {
- return $response;
- }
- }
- }
- }
- })
->on('preCreate', function ($editor, &$values) {
$datetime = (new \CodeIgniter\I18n\Time("now"));
$editor
diff --git a/ci4/app/Controllers/Clientes/Clienteusuarios.php b/ci4/app/Controllers/Clientes/Clienteusuarios.php
index 8e2cdaac..ba0c9952 100644
--- a/ci4/app/Controllers/Clientes/Clienteusuarios.php
+++ b/ci4/app/Controllers/Clientes/Clienteusuarios.php
@@ -1,4 +1,5 @@
-request->isAJAX()) {
+ if (intval($user_id) > 0) {
+ $this->model->removeClienteFromUser($user_id);
+ return $this->respond(['status' => 'success', 'msg' => 'Usuario eliminado correctamente']);
+ }
+ } else {
+ return $this->failUnauthorized('Invalid request', 403);
+ }
+ }
+
+ public function addUserToClient(){
+
+ if ($this->request->isAJAX()) {
+ $user_id = $this->request->getPost("user_id");
+ $cliente_id = $this->request->getPost("cliente_id");
+ if (intval($user_id) > 0 && intval($cliente_id) > 0) {
+ $this->model->addUserToClient($user_id, $cliente_id);
+ return $this->respond(['status' => 'success', 'msg' => 'Usuario añadido correctamente']);
+ }
+ } else {
+ return $this->failUnauthorized('Invalid request', 403);
+ }
+ }
+
+ public function getAvailableUsers()
+ {
+ if ($this->request->isAJAX()) {
+ $query = $this->model->builder()->select(
+ [
+ "id",
+ "CONCAT(first_name, ' ', last_name) as name"
+ ]
+ )
+ ->where("deleted_at", null)
+ ->where("cliente_id", null);
+
+ if ($this->request->getGet("q")) {
+ $column = "CONCAT(first_name, ' ', last_name)";
+ $value = $this->request->getGet("q");
+ $query->groupStart()
+ ->where("LOWER(CONVERT($column USING utf8)) COLLATE utf8_general_ci LIKE", "%" . strtolower($value) . "%")
+ ->groupEnd();
+ }
+
+ $items = $query->get()->getResultObject();
+ return $this->response->setJSON($items);
+
+ } else {
+ return $this->failUnauthorized('Invalid request', 403);
+ }
+ }
public function datatable()
@@ -53,14 +107,19 @@ class Clienteusuarios extends \App\Controllers\BaseResourceController
}
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
- $search = $reqData['search']['value'];
- $requestedOrder = $reqData['order']['0']['column'] ?? 1;
- $order = ClienteUsuariosModel::SORTABLE[$requestedOrder >= 0 ? $requestedOrder : 1];
- $dir = $reqData['order']['0']['dir'] ?? 'asc';
-
+ $requestedOrder = $reqData['order'] ?? [];
$id_C = $reqData['id_cliente'] ?? -1;
- $resourceData = $this->model->getResource("", $id_C)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
+ $resourceData = $this->model->getResource("", $id_C);
+ foreach ($requestedOrder as $order) {
+ $column = $order['column'] ?? 0;
+ $dir = $order['dir'] ?? 'asc';
+ $orderColumn = ClienteUsuariosModel::SORTABLE[$column] ?? null;
+ if ($orderColumn) {
+ $resourceData->orderBy($orderColumn, $dir);
+ }
+ }
+ $resourceData = $resourceData->limit($length, $start)->get()->getResultObject();
return $this->respond(Collection::datatable(
$resourceData,
diff --git a/ci4/app/Controllers/Configuracion/Maquinas.php b/ci4/app/Controllers/Configuracion/Maquinas.php
index 65166b70..8deac302 100755
--- a/ci4/app/Controllers/Configuracion/Maquinas.php
+++ b/ci4/app/Controllers/Configuracion/Maquinas.php
@@ -1,4 +1,5 @@
-respond(['status' => 'error', 'msg' => 'ID no válida']);
+ }
+
+ // Buscar la máquina en la base de datos
+ $maquina = $this->model->find($id);
+ if (!$maquina) {
+ $message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Maquinas.maquina')), $id]);
+ return $this->respond(['status' => 'error', 'msg' => 'ID no válida']);
+ }
+
+ // Verificar que el usuario está autenticado
+ if (!auth()->user()) {
+ return $this->respond(['status' => 'error', 'msg' => 'Usuario no autenticado']);
+ }
+
+ // Preparar los datos para actualizar
+ $data = [
+ 'id' => $id,
+ 'is_deleted' => 1,
+ 'deleted_at' => date('Y-m-d H:i:s'),
+ 'user_updated_id' => auth()->user()->id,
+ ];
+
+ // Guardar los cambios
+ if (!$this->model->save($data)) {
+ return $this->respond(['status' => 'error', 'msg' => 'Error al eliminar']);
+ }
+
+ // Retornar éxito
+ $message = lang('Basic.global.deleteSuccess', [lang('Basic.global.record')]) . '.';
+ return $this->respond(['status' => 'error', 'msg' => $message]);
+ }
+
public function add()
{
-
-
-
-
- if ($this->request->getPost()) :
+ if ($this->request->getPost()):
$nullIfEmpty = true; // !(phpversion() >= '8.1');
@@ -84,10 +121,10 @@ class Maquinas extends \App\Controllers\BaseResourceController
$sanitizedData['user_created_id'] = auth()->user()->id;
$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 +138,14 @@ class Maquinas 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);
return redirect()->to(site_url('configuracion/maquinas/edit/' . $id))->with('sweet-success', $message);
else:
@@ -138,20 +175,20 @@ class Maquinas extends \App\Controllers\BaseResourceController
{
- if ($requestedId == null) :
+ if ($requestedId == null):
return $this->redirect2listView();
endif;
$id = filter_var($requestedId, FILTER_SANITIZE_URL);
$maquina = $this->model->find($id);
- if ($maquina == false) :
+ if ($maquina == false):
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Maquinas.maquina')), $id]);
return $this->redirect2listView('sweet-error', $message);
endif;
-
- if ($this->request->getPost()) :
+
+ if ($this->request->getPost()):
$nullIfEmpty = true; // !(phpversion() >= '8.1');
@@ -171,17 +208,19 @@ class Maquinas extends \App\Controllers\BaseResourceController
// JJO
$sanitizedData['user_updated_id'] = auth()->user()->id;
$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()):
//JJO: comprobar alto y ancho impresion < alto y ancho
if ($sanitizedData['alto'] < $sanitizedData['alto_impresion']) {
$successfulResult = false;
- $this->viewData['errorMessage'] = lang('Maquinas.validation.alto_menor_alto_impresion');;
+ $this->viewData['errorMessage'] = lang('Maquinas.validation.alto_menor_alto_impresion');
+ ;
$this->session->setFlashdata('formErrors', $this->model->errors());
} else if ($sanitizedData['ancho'] < $sanitizedData['ancho_impresion']) {
$successfulResult = false;
- $this->viewData['errorMessage'] = lang('Maquinas.validation.ancho_menor_ancho_impresion');;
+ $this->viewData['errorMessage'] = lang('Maquinas.validation.ancho_menor_ancho_impresion');
+ ;
$this->session->setFlashdata('formErrors', $this->model->errors());
} else {
try {
@@ -202,12 +241,12 @@ class Maquinas extends \App\Controllers\BaseResourceController
$thenRedirect = false;
endif;
- if ($noException && $successfulResult) :
+ if ($noException && $successfulResult):
$id = $maquina->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);
@@ -243,22 +282,24 @@ class Maquinas extends \App\Controllers\BaseResourceController
}
$start = $reqData['start'] ?? 0;
$length = $reqData['length'] ?? 5;
- $search = $reqData['search']['value'];
- $requestedOrder = $reqData['order']['0']['column'] ?? 1;
- $order = MaquinaModel::SORTABLE[$requestedOrder >= 0 ? $requestedOrder : 1];
- $dir = $reqData['order']['0']['dir'] ?? 'asc';
+ $searchValues = get_filter_datatables_columns($reqData);
+ $requestedOrder = $reqData['order'] ?? [];
- $resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
- foreach ($resourceData as $item) :
- if (isset($item->observaciones) && strlen($item->observaciones) > 100) :
- $item->observaciones = character_limiter($item->observaciones, 100);
- endif;
- endforeach;
+ $resourceData = $this->model->getResource($searchValues);
+ foreach ($requestedOrder as $order) {
+ $column = $order['column'] ?? 0;
+ $dir = $order['dir'] ?? 'asc';
+ $orderColumn = MaquinaModel::SORTABLE[$column] ?? null;
+ if ($orderColumn) {
+ $resourceData->orderBy($orderColumn, $dir);
+ }
+ }
+ $resourceData = $resourceData->limit($length, $start)->get()->getResultObject();
return $this->respond(Collection::datatable(
$resourceData,
- $this->model->getResource()->countAllResults(),
- $this->model->getResource($search)->countAllResults()
+ $this->model->getResource([])->countAllResults(),
+ $this->model->getResource($searchValues)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
@@ -319,11 +360,11 @@ class Maquinas 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/Users.php b/ci4/app/Controllers/Configuracion/Users.php
index 7864620f..8fcc153e 100755
--- a/ci4/app/Controllers/Configuracion/Users.php
+++ b/ci4/app/Controllers/Configuracion/Users.php
@@ -7,6 +7,8 @@ use App\Models\Usuarios\GroupModel;
use App\Models\UserModel;
use App\Models\Usuarios\GroupsUsersModel;
+use App\Models\Collection;
+
use CodeIgniter\Shield\Entities\User;
use function PHPUnit\Framework\isNull;
@@ -22,7 +24,8 @@ class Users extends \App\Controllers\GoBaseController
use \CodeIgniter\API\ResponseTrait;
- protected static $primaryModelName = 'App\Models\UserModel';
+ protected static $primaryModelName = UserModel::class;
+ protected $modelName = ClientePlantillaPreciosLineasModel::class;
protected static $singularObjectNameCc = 'user';
protected static $singularObjectName = 'User';
@@ -58,10 +61,8 @@ class Users extends \App\Controllers\GoBaseController
public function index()
{
- $this->viewData['usingClientSideDataTable'] = true;
+ $this->viewData['usingServerSideDataTable'] = true;
$this->viewData['pageSubTitle'] = lang('Basic.global.ManageAllRecords', [lang('Users.user')]);
- $this->viewData['user_model'] = $this->user_model;
- $this->viewData['userList2'] = auth()->getProvider()->findAll();
parent::index();
}
@@ -313,8 +314,10 @@ class Users extends \App\Controllers\GoBaseController
return $this->redirect2listView('errorMessage', $message);
endif;
+ $this->chat_department_user_model->where("user_id", $id)->delete();
+
$users = auth()->getProvider();
- $users->delete($user->id, true);
+ $users->delete($user->id);
$message = "Usuario eliminado correctamente";
return $this->redirect2listView('successMessage', $message);
@@ -373,6 +376,43 @@ class Users extends \App\Controllers\GoBaseController
}
}
+ public function datatable(){
+
+ if($this->request->isAJAX()){
+
+ $reqData = $this->request->getPost();
+ 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);
+ return $response;
+ }
+ $start = $reqData['start'] ?? 0;
+ $length = $reqData['length'] ?? 5;
+ $searchValues = get_filter_datatables_columns($reqData);
+ $requestedOrder = $reqData['order'] ?? [];
+
+ $resourceData = $this->model->getResource($searchValues);
+ foreach ($requestedOrder as $order) {
+ $column = $order['column'] ?? 0;
+ $dir = $order['dir'] ?? 'asc';
+ $orderColumn = UserModel::SORTABLE[$column] ?? null;
+ if ($orderColumn) {
+ $resourceData->orderBy($orderColumn, $dir);
+ }
+ }
+ $resourceData = $resourceData->limit($length, $start)->get()->getResultObject();
+
+ return $this->respond(Collection::datatable(
+ $resourceData,
+ $this->model->getResource([])->countAllResults(),
+ $this->model->getResource($searchValues)->countAllResults()
+ ));
+
+ } else {
+ return $this->failUnauthorized('Invalid request', 403);
+ }
+ }
+
public function getMenuComerciales()
{
if ($this->request->isAJAX()) {
diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoacabados.php b/ci4/app/Controllers/Presupuestos/Presupuestoacabados.php
index 48fa392c..18dc5743 100755
--- a/ci4/app/Controllers/Presupuestos/Presupuestoacabados.php
+++ b/ci4/app/Controllers/Presupuestos/Presupuestoacabados.php
@@ -1,4 +1,5 @@
-request->getJSON();
- if(count($postData->datos)>0){
+ if (count($postData->datos) > 0) {
$this->model->deleteServiciosNotInArray($requestedId, $postData->datos);
- }
- else{
+ } else {
$this->model->deleteAllServicios($requestedId);
}
- if(count($postData->datos)>0){
+ if (count($postData->datos) > 0) {
$this->model->updateTarifas($requestedId, $postData->datos);
}
@@ -58,14 +58,14 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController
$data = [
$csrfTokenName => $newTokenHash
];
-
+
return $this->respond($data);
}
public function update($requestedId = null)
{
- if ($requestedId == null) :
+ if ($requestedId == null):
return;
endif;
@@ -75,20 +75,20 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController
$POD = $postData->POD ?? 0;
$result = [];
- if(count($tarifas)>0){
- foreach ($tarifas as $tarifa){
+ if (count($tarifas) > 0) {
+ foreach ($tarifas as $tarifa) {
$values = $this->model->getPrecioTarifa($tarifa, $tirada, $POD);
array_push($result, $values);
}
}
-
+
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$data = [
'lines' => $result,
$csrfTokenName => $newTokenHash
];
-
+
return $this->respond($data);
}
@@ -101,7 +101,7 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController
$tirada = $reqData['tirada'] ?? 0;
$proveedor_id = $reqData['proveedor_id'] ?? -1;
$POD = $reqData['POD'] ?? 0;
-
+
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
@@ -119,17 +119,59 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController
}
}
+ public function getAcabados()
+ {
+ if ($this->request->isAJAX()) {
+
+ $cubierta = $this->request->getGet("cubierta") ?? 0;
+ $sobrecubierta = $this->request->getGet("sobrecubierta") ?? 0;
+
+ $model = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel');
+ $query = $model->builder()->select(
+ [
+ "id",
+ "nombre as name"
+ ]
+ )
+ ->where("lg_tarifa_acabado.is_deleted", 0)
+ ->where("lg_tarifa_acabado.mostrar_en_presupuesto", 1);
+
+ if($cubierta == 1){
+ $query->where("lg_tarifa_acabado.acabado_cubierta", 1);
+ }
+ else if ($sobrecubierta == 1){
+ $query->where("lg_tarifa_acabado.acabado_sobrecubierta", 1);
+ }
+ if ($this->request->getGet("q")) {
+ $query->groupStart()
+ ->orLike("lg_tarifa_acabado.nombre", $this->request->getGet("q"))
+ ->groupEnd();
+ }
+
+ $items = $query->get()->getResultObject();
+ // add a custom item at the beginning
+ $customItem = new \stdClass;
+ $customItem->id = 0;
+ $customItem->name = "Ninguno";
+ array_unshift($items, $customItem);
+
+ return $this->response->setJSON($items);
+
+ } else {
+ return $this->failUnauthorized('Invalid request', 403);
+ }
+ }
public function menuItems()
{
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
- try{
+ try {
$tarifa_id = $reqData['tarifa_id'] ?? -1;
$tirada = $reqData['tirada'] ?? 0;
-
+
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
@@ -140,17 +182,15 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController
$csrfTokenName => $newTokenHash
];
- }
- catch(Exception $e){
+ } catch (Exception $e) {
$data = [
'error' => $e,
$csrfTokenName => $newTokenHash
];
- }
- finally{
+ } finally {
return $this->respond($data);
}
-
+
} else {
return $this->failUnauthorized('Invalid request', 403);
}
diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php
index a7f3d0be..aca290a0 100755
--- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php
+++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php
@@ -22,6 +22,7 @@ use App\Services\PresupuestoClienteService;
use App\Services\PresupuestoService;
use Exception;
+use stdClass;
use function PHPUnit\Framework\containsOnly;
@@ -328,7 +329,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'gramajeCubierta' => intval($cubierta['gramajeCubierta']),
'carasCubierta' => intval($cubierta['carasImpresion'] ?? 0),
'solapasCubierta' => intval($cubierta['solapas'] ?? 0) == 1 ? intval($cubierta['tamanioSolapas']) : 0,
- 'acabadosCubierta' => $cubierta['acabados'] ?? 0,
+ 'acabado' => $cubierta['acabado'] ?? 0,
'lomoRedondo' => $lomoRedondo,
];
@@ -338,7 +339,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'papel' => $modelPapelGenerico->getIdFromCode($sobrecubierta['papel']),
'gramaje' => intval($sobrecubierta['gramaje']),
'solapas' => intval($sobrecubierta['solapas'] ?? 0),
- 'acabados' => $sobrecubierta['plastificado'] ?? 0,
+ 'acabado' => $sobrecubierta['acabado'] ?? 0,
];
} else
$sobrecubierta = false;
@@ -718,6 +719,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$reqData = $this->request->getPost();
+ $POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
+
$id = $reqData['id'] ?? 0;
$id = intval($id);
@@ -794,7 +797,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'gramajeCubierta' => intval($cubierta['gramajeCubierta']),
'carasCubierta' => intval($cubierta['carasImpresion'] ?? 0),
'solapasCubierta' => intval($cubierta['solapas'] ?? 0) == 1 ? intval($cubierta['tamanioSolapas']) : 0,
- 'acabadosCubierta' => $cubierta['acabados'] ?? 0,
+ 'acabado' => $cubierta['acabado'] ?? 0,
'lomoRedondo' => $cubierta['lomoRedondo'] ?? 0,
'cabezada' => $cubierta['cabezada'] ?? 'WHI',
];
@@ -805,7 +808,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'papel' => $modelPapelGenerico->getIdFromCode($sobrecubierta['papel']),
'gramaje' => intval($sobrecubierta['gramaje']),
'solapas' => intval($sobrecubierta['solapas'] ?? 0),
- 'acabados' => $sobrecubierta['plastificado'] ?? 0,
+ 'acabado' => $sobrecubierta['acabado'] ?? 0,
];
} else
$sobrecubierta = false;
@@ -933,33 +936,13 @@ 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;
$datos_presupuesto['ferro'] = $ferro;
$datos_presupuesto['ferro_digital'] = $ferroDigital;
$datos_presupuesto['marcapaginas'] = $marcapaginas;
$datos_presupuesto['retractilado'] = $retractilado;
$datos_presupuesto['retractilado5'] = $retractilado5;
+ $datos_presupuesto['entrega_taller'] = $reqData['entrega_taller'] ?? 0;
$id = $model_presupuesto->insertarPresupuestoCliente(
$id,
@@ -991,6 +974,29 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$this->guardarLineaPresupuesto($id, $resultado_presupuesto['info']['guardas']);
// Servicios
+ if ($sobrecubierta) {
+ if (intval($sobrecubierta['acabado']) > 0) {
+ $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
+ $servicio = $model->getPrecioTarifa(intval($sobrecubierta['acabado']), intval($selected_tirada), -1, $POD);
+
+ if (count($servicio) > 0) {
+ if ($servicio[0]->total > 0) {
+ $this->guardarServicio($id, $servicio[0], 'acabado', false, true);
+ }
+ }
+ }
+ }
+ if (intval($cubierta['acabado']) > 0) {
+ $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
+ $servicio = $model->getPrecioTarifa(intval($cubierta['acabado']), intval($selected_tirada), -1, $POD);
+
+ if (count($servicio) > 0) {
+ if ($servicio[0]->total > 0) {
+ $this->guardarServicio($id, $servicio[0], 'acabado', true, false);
+ }
+ }
+
+ }
foreach ($resultado_presupuesto['info']['serviciosDefecto'] as $servicio) {
$this->guardarServicio($id, $servicio, 'encuadernacion');
}
@@ -1092,26 +1098,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$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']['acabado']['id'] = $presupuesto->acabado_cubierta_id;
+ if ($presupuesto->acabado_cubierta_id == 0) {
+ $data['cubierta']['acabado']['text'] = "Ninguno";
+ } else {
+ $data['cubierta']['acabado']['text'] = $modelAcabado->find($presupuesto->acabado_cubierta_id)->nombre;
}
$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);
- if ($data['sobrecubierta']['plastificado'] == '') {
- $data['sobrecubierta']['plastificado'] = 'NONE';
+ $data['sobrecubierta']['acabado']['id'] = $presupuesto->acabado_sobrecubierta_id;
+ if ($presupuesto->acabado_sobrecubierta_id == 0) {
+ $data['sobrecubierta']['acabado']['text'] = "Ninguno";
+ } else {
+ $data['sobrecubierta']['acabado']['text'] = $modelAcabado->find($presupuesto->acabado_sobrecubierta_id)->nombre;
}
$data['guardas'] = array_key_exists('guardas', $datos_papel) ? $datos_papel['guardas'] : [];
@@ -1122,7 +1124,12 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
[$data['datosGenerales']['paginasNegro'], $data['datosGenerales']['paginasColor']] =
$this->getPaginas($lineas);
- $data['direcciones'] = $this->obtenerDireccionesEnvio($id, $presupuesto->cliente_id);
+ if (intval($presupuesto->envios_recoge_cliente) == 1) {
+ $data['direcciones']['entrega_taller'] = 1;
+ } else {
+ $data['direcciones']['entrega_taller'] = 0;
+ $data['direcciones'] = $this->obtenerDireccionesEnvio($id, $presupuesto->cliente_id);
+ }
if (intval($presupuesto->estado_id) == 2) {
$data['resumen']['base'] = $presupuesto->total_aceptado;
@@ -1311,7 +1318,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
- protected function guardarServicio($presupuestoId, $servicio, $tipo)
+ protected function guardarServicio($presupuestoId, $servicio, $tipo, $cubierta = false, $sobrecubierta = false)
{
if ($tipo == 'encuadernacion') {
@@ -1349,9 +1356,12 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$data = [
'presupuesto_id' => $presupuestoId,
'tarifa_acabado_id' => $servicio->tarifa_id,
- 'precio_total' => $servicio->total,
- 'precio_unidad' => $servicio->precio_unidad,
+ 'precio_total' => round($servicio->total, 2),
+ 'precio_unidad' => round($servicio->precio_unidad, 2),
'margen' => $servicio->margen,
+ 'proveedor_id' => $servicio->proveedor_id,
+ 'cubierta' => $cubierta,
+ 'sobrecubierta' => $sobrecubierta,
];
$model->insert($data);
} else if ($tipo == 'manipulado') {
@@ -1460,7 +1470,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$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
@@ -1698,20 +1707,18 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
];
return $return_data;
}
- // Acabados Cubierta
- $tarifaAcabadoCubierta = $this->obtenerTarifasAcabado($acabadosCubierta);
- $acabadoCubierta = [];
- foreach ($tarifaAcabadoCubierta as $tarifa) {
- if ($tarifa == 0)
- continue;
+ // Acabado Cubierta
+ if (intval($datos_entrada['cubierta']['acabado']) != 0) {
+
+
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
- $acabadoCubierta = $model->getPrecioTarifa($tarifa, $datosPedido->tirada, -1, $POD);
+ $acabadoCubierta = $model->getPrecioTarifa(intval($datos_entrada['cubierta']['acabado']), $datosPedido->tirada, -1, $POD);
if (count($acabadoCubierta) > 0) {
if ($acabadoCubierta[0]->total <= 0) {
- $input_data['tarifas_acabado_cubierta'] = $tarifaAcabadoCubierta;
+ $input_data['tarifas_acabado_cubierta'] = intval($datos_entrada['cubierta']['acabado']);
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
@@ -1785,21 +1792,17 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
$lomo_sobrecubierta = $lomo + floatval($linea_sobrecubierta['mano']);
- $tarifaAcabadoSobrecubierta = $this->obtenerTarifasAcabado(['plastificado' => $sobreCubierta['acabados']]);
- $acabadoSobrecubierta = [];
- foreach ($tarifaAcabadoSobrecubierta as $tarifa) {
+ // Acabado sobrecubierta
+ if (intval($datos_entrada['sobrecubierta']['acabado']) != 0) {
- // NONE
- if ($tarifaAcabadoSobrecubierta[0] == 0)
- continue;
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
- $acabadoSobrecubierta = $model->getPrecioTarifa($tarifa, $datosPedido->tirada, -1, $POD);
+ $acabadoSobrecubierta = $model->getPrecioTarifa(intval($datos_entrada['sobrecubierta']['acabado']), $datosPedido->tirada, -1, $POD);
if (count($acabadoSobrecubierta) > 0) {
if ($acabadoSobrecubierta[0]->total <= 0) {
- $input_data['tarifas_acabado_sobrecubierta'] = $tarifaAcabadoSobrecubierta;
+ $input_data['tarifas_acabado_sobrecubierta'] = intval($datos_entrada['sobrecubierta']['acabado']);
$errorModel = new ErrorPresupuesto();
$errorModel->insertError(
$datos_entrada['id'],
@@ -2250,22 +2253,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
return $data;
}
- protected function getAcabadosCubierta()
- {
- $model = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel');
- $data = $model->getServiciosAcabadoCubierta();
- array_unshift($data, (object) ['id' => '', 'label' => lang('Basic.global.None')]);
- return $data;
- }
-
- protected function getAcabadosSobrecubierta()
- {
- $model = model('App\Models\Tarifas\Acabados\TarifaAcabadoModel');
- $data = $model->getServiciosAcabadoSobrecubierta();
- array_unshift($data, (object) ['id' => '', 'label' => lang('Basic.global.None')]);
- return $data;
- }
-
protected function getClienteListItems($selId = null)
{
$data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Clientes.cliente'))])];
@@ -2403,7 +2390,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
{
$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', $id)->findAll();
$result = [];
@@ -2447,16 +2433,16 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
foreach ($data as $linea) {
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']['papel'] = $modelPapelGenerico->getNombre($linea->papel_id);
$return_data['interior']['negro']['papel']['id'] = $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']['papel'] = $modelPapelGenerico->getNombre($linea->papel_id);
$return_data['interior']['color']['papel']['id'] = $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']['papel'] = $modelPapelGenerico->getNombre($linea->papel_id);
$return_data['cubierta']['papel']['id'] = $linea->papel_id;
$return_data['cubierta']['gramaje'] = $linea->gramaje;
$return_data['cubierta']['paginas'] = $linea->paginas;
@@ -2590,10 +2576,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if ($value != 'NONE') {
$data = $model->where('code', $value)->first();
- $data = $data->id;
- array_push($tarifas, [$acabado => $data]);
- } else {
- array_push($tarifas, 0);
+ $tarifas[$acabado] = $data->id;
}
}
diff --git a/ci4/app/Database/Migrations/2024-12-14-121014_RemoveEstampadoBarnizado.php b/ci4/app/Database/Migrations/2024-12-14-121014_RemoveEstampadoBarnizado.php
new file mode 100644
index 00000000..37f96362
--- /dev/null
+++ b/ci4/app/Database/Migrations/2024-12-14-121014_RemoveEstampadoBarnizado.php
@@ -0,0 +1,36 @@
+forge->dropColumn('presupuestos', 'barniz_cubierta_id');
+ $this->forge->dropColumn('presupuestos', 'estampado_cubierta_id');
+ }
+
+ public function down()
+ {
+ $fields = [
+ 'barniz_cubierta_id' => [
+ 'type' => 'INT',
+ 'constraint' => 10,
+ 'unsigned' => true,
+ 'null' => false,
+ 'default' => 0,
+ ],
+ 'estampado_cubierta_id' => [
+ 'type' => 'INT',
+ 'constraint' => 10,
+ 'unsigned' => true,
+ 'null' => false,
+ 'default' => 0,
+ ],
+ ];
+
+ $this->forge->addColumn('presupuestos', $fields);
+ }
+}
diff --git a/ci4/app/Entities/Pedidos/PedidoEntity.php b/ci4/app/Entities/Pedidos/PedidoEntity.php
index 6e210b8a..32a1bf01 100644
--- a/ci4/app/Entities/Pedidos/PedidoEntity.php
+++ b/ci4/app/Entities/Pedidos/PedidoEntity.php
@@ -4,6 +4,8 @@ namespace App\Entities\Pedidos;
use App\Entities\Presupuestos\PresupuestoEntity;
use App\Entities\Produccion\OrdenTrabajoEntity;
use App\Models\OrdenTrabajo\OrdenTrabajoModel;
+use App\Entities\Clientes\ClienteEntity;
+use App\Models\Clientes\ClienteModel;
use App\Models\Pedidos\PedidoLineaModel;
use App\Models\Presupuestos\PresupuestoModel;
use CodeIgniter\Entity;
@@ -63,4 +65,14 @@ class PedidoEntity extends \CodeIgniter\Entity\Entity
return $m->where("pedido_id",$this->attributes["id"])->first();
}
+
+ public function cliente() : ?ClienteEntity
+ {
+ $m = model(ClienteModel::class);
+ $pl = model(PedidoLineaModel::class);
+ $pm = model(PresupuestoModel::class);
+ $pedido_linea = $pl->where('pedido_id',$this->attributes["id"])->first();
+ $pre = $pm->find($pedido_linea->presupuesto_id);
+ return $m->find($pre->cliente_id);
+ }
}
diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php
index 1fb887c2..fee02953 100755
--- a/ci4/app/Language/es/Presupuestos.php
+++ b/ci4/app/Language/es/Presupuestos.php
@@ -67,6 +67,7 @@ return [
'papelFormatoPersonalizado' => 'Tamaño personalizado',
'papelFormatoAncho' => 'Ancho',
'papelFormatoAlto' => 'Alto',
+ 'acabado' => 'Acabado',
'acabadosExteriores' => 'Acabados exteriores',
'acabadoCubierta' => 'Acabado Cubierta',
'acabadoSobrecubierta' => 'Acabado Sobrecubierta',
diff --git a/ci4/app/Language/es/Users.php b/ci4/app/Language/es/Users.php
index ff61a685..81059ba3 100755
--- a/ci4/app/Language/es/Users.php
+++ b/ci4/app/Language/es/Users.php
@@ -3,6 +3,7 @@
return [
+ 'add' => 'Añadir',
'address' => 'Dirección',
'blocked' => 'Bloqueado',
'non_blocked' => 'No bloqueado',
@@ -38,6 +39,7 @@ return [
'user' => 'Usuario',
'userList' => 'Lista de usuarios',
'users' => 'Usuarios',
+ 'usersAvailables' => 'Usuarios disponibles',
'zipCode' => 'Código postal',
'admin' => 'Administrador',
@@ -52,6 +54,8 @@ return [
'editor' => 'Editor',
'beta' => 'Beta',
+ 'cliente' => 'Cliente',
+
'errors' => [
'cliente_sin_clienteID' => 'El usuario debe de tener un cliente asignado cuando se usa algún rol de cliente.',
],
diff --git a/ci4/app/Models/Chat/ChatDeparmentUserModel.php b/ci4/app/Models/Chat/ChatDeparmentUserModel.php
index 0c701d14..717c738a 100644
--- a/ci4/app/Models/Chat/ChatDeparmentUserModel.php
+++ b/ci4/app/Models/Chat/ChatDeparmentUserModel.php
@@ -11,7 +11,7 @@ class ChatDeparmentUserModel extends Model
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
protected $returnType = 'array';
- protected $useSoftDeletes = false;
+ protected $useSoftDeletes = true;
protected $protectFields = true;
protected $allowedFields = [
"chat_department_id",
diff --git a/ci4/app/Models/Clientes/ClienteModel.php b/ci4/app/Models/Clientes/ClienteModel.php
index a1193860..ccc7f509 100755
--- a/ci4/app/Models/Clientes/ClienteModel.php
+++ b/ci4/app/Models/Clientes/ClienteModel.php
@@ -14,13 +14,14 @@ class ClienteModel extends \App\Models\BaseModel
protected $useAutoIncrement = true;
const SORTABLE = [
- 0 => "t1.nombre",
- 1 => "t1.alias",
- 2 => "t1.cif",
- 3 => "t1.email",
- 4 => "t1.comercial_id",
- 5 => "t1.forma_pago_id",
- 6 => "t1.vencimiento",
+ 0 => "t1.id",
+ 1 => "t1.nombre",
+ 2 => "t1.alias",
+ 3 => "t1.cif",
+ 4 => "t1.email",
+ 5 => "t1.comercial_id",
+ 6 => "t1.forma_pago_id",
+ 7 => "t1.vencimiento",
];
protected $allowedFields = [
@@ -63,7 +64,7 @@ class ClienteModel extends \App\Models\BaseModel
];
protected $returnType = "App\Entities\Clientes\ClienteEntity";
- protected $deletedField = 'deleted_at';
+ protected $deletedField = 'deleted_at';
public static $labelField = "nombre";
@@ -245,7 +246,7 @@ class ClienteModel extends \App\Models\BaseModel
"required" => "Clientes.validation.vencimiento.required",
],
];
- public function findAllWithAllRelations(string $selcols = "*", int $limit = null, int $offset = 0)
+ public function findAllWithAllRelations($selcols = "*", int $limit = null, int $offset = 0)
{
$sql =
"SELECT t1." .
@@ -279,35 +280,30 @@ class ClienteModel extends \App\Models\BaseModel
*
* @return \CodeIgniter\Database\BaseBuilder
*/
- public function getResource(string $search = "")
+ public function getResource($search = [])
{
$builder = $this->db
->table($this->table . " t1")
->select(
"t1.id AS id, t1.nombre AS nombre, t1.alias AS alias, t1.cif AS cif, t1.email AS email, t1.vencimiento AS vencimiento, t5.first_name AS comercial, t7.nombre AS forma_pago_id"
)
- ->where("is_deleted", 0);;
+ ->where("is_deleted", 0);
+ ;
$builder->join("users t5", "t1.comercial_id = t5.id", "left");
$builder->join("formas_pago t7", "t1.forma_pago_id = t7.id", "left");
-
- return empty($search)
- ? $builder
- : $builder
- ->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();
+ if (empty($search))
+ return $builder;
+ else {
+ $builder->groupStart();
+ foreach ($search as $col_search) {
+ $column = self::SORTABLE[$col_search[0]];
+ $value = $col_search[2];
+ $builder->where("LOWER(CONVERT($column USING utf8)) COLLATE utf8_general_ci LIKE", "%" . strtolower($value) . "%");
+ }
+ $builder->groupEnd();
+ return $builder;
+ }
}
/*
@@ -353,7 +349,7 @@ class ClienteModel extends \App\Models\BaseModel
->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();
+ $data = $query->get()->getResultObject();
$facturas = [];
$presupuestos = [];
$pedidos = [];
diff --git a/ci4/app/Models/Clientes/ClientePlantillaPreciosLineasModel.php b/ci4/app/Models/Clientes/ClientePlantillaPreciosLineasModel.php
index 4a948f0e..9e1b6852 100755
--- a/ci4/app/Models/Clientes/ClientePlantillaPreciosLineasModel.php
+++ b/ci4/app/Models/Clientes/ClientePlantillaPreciosLineasModel.php
@@ -160,7 +160,7 @@ class ClientePlantillaPreciosLineasModel extends \App\Models\BaseModel
else {
$builder->groupStart();
foreach ($search as $col_search) {
- if ($col_search[1] > 0 && $col_search[0] < 4)
+ if ($col_search[0] > 0 && $col_search[0] < 4)
$builder->where(self::SORTABLE[$col_search[0]], $col_search[2]);
else
$builder->like(self::SORTABLE[$col_search[0]], $col_search[2]);
diff --git a/ci4/app/Models/Clientes/ClienteUsuariosModel.php b/ci4/app/Models/Clientes/ClienteUsuariosModel.php
index 474b6ce3..4eedadf5 100644
--- a/ci4/app/Models/Clientes/ClienteUsuariosModel.php
+++ b/ci4/app/Models/Clientes/ClienteUsuariosModel.php
@@ -16,9 +16,10 @@ class ClienteUsuariosModel extends ShieldUserModel
protected $useAutoIncrement = true;
const SORTABLE = [
- 0 => "t1.first_name",
- 1 => "t1.last_name",
- 2 => "t2.secret",
+ 0 => "t1.id",
+ 1 => "t1.first_name",
+ 2 => "t1.last_name",
+ 3 => "t2.secret",
];
protected $allowedFields = ["id", "first_name", "last_name", "email"];
@@ -83,6 +84,19 @@ class ClienteUsuariosModel extends ShieldUserModel
return $result;
}
+ public function removeClienteFromUser($user_id = -1){
+
+ $this->db->table($this->table)->where('id', $user_id)->update(['cliente_id' => null]);
+ }
+
+
+ public function addUserToClient($user_id = -1, $cliente_id = -1){
+ if($user_id < 1 || $cliente_id < 1){
+ return;
+ }
+ $this->db->table($this->table)->where('id', $user_id)->update(['cliente_id' => $cliente_id]);
+ }
+
/**
* Get resource data.
*
@@ -100,15 +114,8 @@ class ClienteUsuariosModel extends ShieldUserModel
);
$builder->join("auth_identities t2", "t1.id = t2.user_id", "left");
- $builder->where('t1.id', $cliente_id);
+ $builder->where('t1.cliente_id', $cliente_id);
- return empty($search)
- ? $builder
- : $builder
- ->groupStart()
- ->like("t1.first_name", $search)
- ->orLike("t1.last_name", $search)
- ->orLike("t2.secret", $search)
- ->groupEnd();
+ return $builder;
}
}
diff --git a/ci4/app/Models/Configuracion/MaquinaModel.php b/ci4/app/Models/Configuracion/MaquinaModel.php
index 0cefa19a..650162e6 100755
--- a/ci4/app/Models/Configuracion/MaquinaModel.php
+++ b/ci4/app/Models/Configuracion/MaquinaModel.php
@@ -14,22 +14,13 @@ class MaquinaModel extends \App\Models\BaseModel
protected $useAutoIncrement = true;
const SORTABLE = [
- //1 => "t1.id",
- 0 => "t1.nombre",
+ 0 => "t1.id",
1 => "t2.nombre",
2 => "t1.tipo",
- 3 => "t1.velocidad",
- 4 => "t1.duracion_jornada",
- 5 => "t1.ancho",
- 6 => "t1.alto",
- 7 => "t1.ancho_impresion",
- 8 => "t1.alto_impresion",
- 9 => "t1.orden_planning",
- 10 => "t1.min",
- 11 => "t1.max",
-
-
- ];
+ 3 => "t1.ancho_impresion",
+ 4 => "t1.alto_impresion",
+ 5 => "t1.min",
+ 6 => "t1.max", ];
protected $allowedFields = [
"nombre",
@@ -295,7 +286,7 @@ class MaquinaModel extends \App\Models\BaseModel
*
* @return \CodeIgniter\Database\BaseBuilder
*/
- public function getResource(string $search = "")
+ public function getResource($search = [])
{
$builder = $this->db
->table($this->table . " t1")
@@ -313,56 +304,18 @@ class MaquinaModel extends \App\Models\BaseModel
//JJO
$builder->where("t1.is_deleted", 0);
- return empty($search)
- ? $builder
- : $builder
- ->groupStart()
- ->like("t1.id", $search)
- ->orLike("t1.nombre", $search)
- ->orLike("t1.tipo", $search)
- ->orLike("t1.velocidad", $search)
- ->orLike("t1.ancho", $search)
- ->orLike("t1.alto", $search)
- ->orLike("t1.ancho_impresion", $search)
- ->orLike("t1.alto_impresion", $search)
- ->orLike("t1.alto_click", $search)
- ->orLike("t1.min", $search)
- ->orLike("t1.max", $search)
- ->orLike("t1.duracion_jornada", $search)
- ->orLike("t1.orden_planning", $search)
- ->orLike("t1.precio_tinta_negro", $search)
- ->orLike("t1.precio_tinta_color", $search)
- ->orLike("t1.velocidad_corte", $search)
- ->orLike("t1.precio_hora_corte", $search)
- ->orLike("t1.metrosxminuto", $search)
- ->orLike("t1.forzar_num_formas_horizontales_cubierta", $search)
- ->orLike("t1.forzar_num_formas_verticales_cubierta", $search)
- ->orLike("t1.observaciones", $search)
- ->orLike("t2.id", $search)
- ->orLike("t1.id", $search)
- ->orLike("t1.nombre", $search)
- ->orLike("t1.tipo", $search)
- ->orLike("t1.velocidad", $search)
- ->orLike("t1.ancho", $search)
- ->orLike("t1.alto", $search)
- ->orLike("t1.ancho_impresion", $search)
- ->orLike("t1.alto_impresion", $search)
- ->orLike("t1.alto_click", $search)
- ->orLike("t1.padre_id", $search)
- ->orLike("t1.min", $search)
- ->orLike("t1.max", $search)
- ->orLike("t1.duracion_jornada", $search)
- ->orLike("t1.orden_planning", $search)
- ->orLike("t1.precio_tinta_negro", $search)
- ->orLike("t1.precio_tinta_color", $search)
- ->orLike("t1.velocidad_corte", $search)
- ->orLike("t1.precio_hora_corte", $search)
- ->orLike("t1.metrosxminuto", $search)
- ->orLike("t1.forzar_num_formas_horizontales_cubierta", $search)
- ->orLike("t1.forzar_num_formas_verticales_cubierta", $search)
- ->orLike("t1.observaciones", $search)
- ->orLike("t2.nombre", $search)
- ->groupEnd();
+ if (empty($search))
+ return $builder;
+ else {
+ $builder->groupStart();
+ foreach ($search as $col_search) {
+ $column = self::SORTABLE[$col_search[0]];
+ $value = $col_search[2];
+ $builder->where("LOWER(CONVERT($column USING utf8)) COLLATE utf8_general_ci LIKE", "%" . strtolower($value) . "%");
+ }
+ $builder->groupEnd();
+ return $builder;
+ }
}
public function getMaquinaImpresionForPresupuesto($is_rotativa, $tarifa_tipo, $uso_tarifa , $tirada, $papel_impresion_id = -1)
diff --git a/ci4/app/Models/Configuracion/PapelGenericoModel.php b/ci4/app/Models/Configuracion/PapelGenericoModel.php
index 70c0447c..4f2d8cf9 100755
--- a/ci4/app/Models/Configuracion/PapelGenericoModel.php
+++ b/ci4/app/Models/Configuracion/PapelGenericoModel.php
@@ -94,6 +94,20 @@ class PapelGenericoModel extends \App\Models\BaseModel
return $data;
}
+ public function getNombre($id = 0)
+ {
+ $builder = $this->db
+ ->table($this->table . " t1")
+ ->select(
+ "t1.nombre AS nombre"
+ )
+ ->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/Presupuestos/BuscadorModel.php b/ci4/app/Models/Presupuestos/BuscadorModel.php
index e1df2343..df051c59 100644
--- a/ci4/app/Models/Presupuestos/BuscadorModel.php
+++ b/ci4/app/Models/Presupuestos/BuscadorModel.php
@@ -132,7 +132,7 @@ class BuscadorModel extends \App\Models\BaseModel
t6.estado AS estado"
);
$builder->join("clientes t2", "t1.cliente_id = t2.id", "left");
- $builder->join("users t3", "t1.user_update_id = t3.id", "left");
+ $builder->join("users t3", "t2.comercial_id = t3.id", "left");
$builder->join("lg_paises t5", "t1.pais_id = t5.id", "left");
$builder->join("presupuesto_estados t6", "t1.estado_id = t6.id", "left");
$builder->join("tipos_presupuestos t7", "t1.tipo_impresion_id = t7.id", "left");
diff --git a/ci4/app/Models/Presupuestos/PresupuestoModel.php b/ci4/app/Models/Presupuestos/PresupuestoModel.php
index 974c29fa..135efbc2 100755
--- a/ci4/app/Models/Presupuestos/PresupuestoModel.php
+++ b/ci4/app/Models/Presupuestos/PresupuestoModel.php
@@ -434,6 +434,8 @@ class PresupuestoModel extends \App\Models\BaseModel
'merma_cubierta' => $extra_info['merma'],
'paginasCuadernillo' => $data['paginasCuadernillo'],
+ 'recoger_en_taller' => $data['entrega_taller'],
+
'comp_pos_paginas_color' => $data['interior']['pos_paginas_color'],
'paginas_color_consecutivas' => $data['interior']['paginas_color_consecutivas'],
'papel_interior_diferente' => $data['interior']['papelInteriorDiferente'],
@@ -443,10 +445,8 @@ class PresupuestoModel extends \App\Models\BaseModel
'comparador_json_data' => $this->generateJson($data),
- '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'],
+ 'acabado_cubierta_id' => $data['cubierta']['acabado'],
+ 'acabado_sobrecubierta_id' => !$data['sobrecubierta'] ? 0 : $data['sobrecubierta']['acabado'],
'comp_tipo_impresion' => $data['isHq'] ? ($data['isColor'] ? 'colorhq' : 'negrohq') : ($data['isColor'] ? 'color' : 'negro'),
diff --git a/ci4/app/Models/UserModel.php b/ci4/app/Models/UserModel.php
index 752a22a7..cd7d2944 100644
--- a/ci4/app/Models/UserModel.php
+++ b/ci4/app/Models/UserModel.php
@@ -25,6 +25,15 @@ class UserModel extends ShieldUserModel
];
}
+ const SORTABLE = [
+ 0 => "t1.id",
+ 1 => "t1.first_name",
+ 2 => "t1.last_name",
+ 3 => "t2.secret",
+ 4 => "t3.nombre",
+ 5 => "t1.last_active",
+ ];
+
protected $returnType = UsersEntity::class;
protected $useSoftDeletes = true;
@@ -36,6 +45,7 @@ class UserModel extends ShieldUserModel
protected $validationRules = [
"first_name" => "required|trim|max_length[150]",
"last_name" => "required|trim|max_length[150]",
+ "email" => "required|valid_email|max_length[150]",
'new_pwd' => 'permit_empty|min_length[8]',
'new_pwd_confirm' => 'permit_empty|required_with[new_pwd]|matches[new_pwd]',
"comments" => "permit_empty|trim|max_length[512]"
@@ -59,9 +69,42 @@ class UserModel extends ShieldUserModel
'comments' => [
"max_length" => "Users.validation.last_name.max_length",
],
+ 'email' => [
+ "required" => "Users.validation.email.required",
+ "valid_email" => "Users.validation.email.valid_email",
+ "max_length" => "Users.validation.email.max_length"
+ ]
];
+ public function getResource($search = [])
+ {
+ $builder = $this->db
+ ->table($this->table . " t1")
+ ->select(
+ "t1.id as id, t1.first_name AS first_name, t1.last_name AS last_name,
+ t2.secret AS email, t1.last_active AS last_active, t3.nombre AS cliente"
+ );
+
+ $builder->join("auth_identities t2", "t1.id = t2.user_id", "left");
+ $builder->join("clientes t3", "t1.cliente_id = t3.id", "left");
+
+ $builder->where('t1.deleted_at', null)->groupBy("t1.id");
+
+ if (empty($search))
+ return $builder;
+ else {
+ $builder->groupStart();
+ foreach ($search as $col_search) {
+ $column = self::SORTABLE[$col_search[0]];
+ $value = $col_search[2];
+ $builder->where("LOWER(CONVERT($column USING utf8)) COLLATE utf8_general_ci LIKE", "%" . strtolower($value) . "%");
+ }
+ $builder->groupEnd();
+ return $builder;
+ }
+ }
+
public function getComerciales()
{
diff --git a/ci4/app/Views/themes/vuexy/components/chat_factura.php b/ci4/app/Views/themes/vuexy/components/chat_factura.php
index f3e13cdf..c9e9748d 100644
--- a/ci4/app/Views/themes/vuexy/components/chat_factura.php
+++ b/ci4/app/Views/themes/vuexy/components/chat_factura.php
@@ -1,4 +1,9 @@
+user()->inGroup('admin')) { ?>
+
+ Mensaje directo a cliente
+
+
+ = view("themes/vuexy/components/modals/modalNewDirectMessageClient", ["modelId" => $modelId]) ?>
+
= $this->section('css') ?>
diff --git a/ci4/app/Views/themes/vuexy/components/chat_pedido.php b/ci4/app/Views/themes/vuexy/components/chat_pedido.php
index 64cb9c3c..9422acf7 100644
--- a/ci4/app/Views/themes/vuexy/components/chat_pedido.php
+++ b/ci4/app/Views/themes/vuexy/components/chat_pedido.php
@@ -1,5 +1,9 @@
-
+user()->inGroup('admin')) { ?>
+
+ Mensaje directo a cliente
+
+
+ = view("themes/vuexy/components/modals/modalNewDirectMessageClient", ["modelId" => $modelId]) ?>
+
diff --git a/ci4/app/Views/themes/vuexy/components/chat_presupuesto.php b/ci4/app/Views/themes/vuexy/components/chat_presupuesto.php
index 76c30928..238a7477 100644
--- a/ci4/app/Views/themes/vuexy/components/chat_presupuesto.php
+++ b/ci4/app/Views/themes/vuexy/components/chat_presupuesto.php
@@ -1,7 +1,11 @@
-
+ user()->inGroup('admin')) { ?>
+
+ Mensaje directo a cliente
+
+
+
+ = view("themes/vuexy/components/modals/modalNewDirectMessageClient", ["modelId" => $modelId]) ?>
= $this->section('css') ?>
diff --git a/ci4/app/Views/themes/vuexy/components/modals/modalNewDirectMessageClient.php b/ci4/app/Views/themes/vuexy/components/modals/modalNewDirectMessageClient.php
new file mode 100644
index 00000000..c2f6759f
--- /dev/null
+++ b/ci4/app/Views/themes/vuexy/components/modals/modalNewDirectMessageClient.php
@@ -0,0 +1,47 @@
+
+
>
+
+
+
+
+
+ = view("themes/vuexy/components/alerts/alert", ["id" => "alertDirectMessage"]) ?>
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php b/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php
index 5766a61f..6c67d6a6 100644
--- a/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php
+++ b/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php
@@ -654,6 +654,24 @@
+
+
+
+
+
+
+ = lang('Users.usersAvailables') ?>
+
+
+
+
+
+
+
+ = lang("Users.add")?>
+
+
+
@@ -1104,67 +1122,6 @@ function delete_direccion_envio(dataId){
=$this->endSection() ?>
-= $this->section("additionalInlineJs") ?>
-/****************************************
- Contactos
-*****************************************/
-
- const lastColNrCU = $('#tableOfClienteUsuarios').find("tr:first th").length - 1;
-
- var theTableCU = $('#tableOfClienteUsuarios').DataTable( {
- serverSide: true,
- processing: true,
- autoWidth: true,
- responsive: true,
- lengthMenu: [ 5, 10, 25],
- order: [[ 0, "asc" ], [ 1, "asc" ]],
- pageLength: 10,
- lengthChange: true,
- searching: false,
- paging: true,
- info: false,
- dom: '<"mt-4"><"float-end"B><"float-start"l><"mt-4 mb-3"p>',
- ajax : $.fn.dataTable.pipeline( {
- url: '= route_to('dataTableOfClienteUsuarios') ?>',
- data: {
- //id_cliente: id,
- id_cliente: 1,
- },
- method: 'POST',
- headers: {'X-Requested-With': 'XMLHttpRequest'},
- async: true,
- }),
- columns: [
- { 'data': 'id' },
- { 'data': 'nombre' },
- { 'data': 'apellidos' },
- { 'data': 'email' },
- {
- data: actionBtns,
- className: 'row-edit dt-center'
- }
- ],
- columnDefs: [
- {
- orderable: false,
- searchable: false,
- targets: [lastColNrCU]
- },
- {
- "orderData": [ 0, 1 ],
- "targets": 0
- },
-
- ],
- language: {
- url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
- }
- } );
-
-=$this->endSection() ?>
-
-
-
=$this->section('css') ?>
diff --git a/ci4/app/Views/themes/vuexy/form/clientes/cliente/viewClienteList.php b/ci4/app/Views/themes/vuexy/form/clientes/cliente/viewClienteList.php
index f2448cbc..dd4eca4e 100644
--- a/ci4/app/Views/themes/vuexy/form/clientes/cliente/viewClienteList.php
+++ b/ci4/app/Views/themes/vuexy/form/clientes/cliente/viewClienteList.php
@@ -1,35 +1,35 @@
= $this->include('themes/_commonPartialsBs/select2bs5') ?>
= $this->include('themes/_commonPartialsBs/datatables') ?>
-= $this->include('themes/_commonPartialsBs/_confirm2delete') ?>
= $this->extend('themes/vuexy/main/defaultlayout') ?>
-= $this->section('content'); ?>
+= $this->section('content'); ?>
+
= lang('Clientes.clienteList') ?>
+ = anchor(route_to('clienteAdd'), lang('Basic.global.addNew') . ' ' . lang('Clientes.cliente'), ['class' => 'btn btn-primary float-end']); ?>
+
- = view('themes/_commonPartialsBs/_alertBoxes'); ?>
-
-
-
- = lang('Clientes.nombre') ?>
- = lang('Clientes.alias') ?>
- = lang('Clientes.cif') ?>
- = lang('Clientes.email') ?>
- = lang('Users.comercial') ?>
- = lang('FormasPago.formaDePago') ?>
- = lang('Clientes.vencimiento') ?>
- = lang('Basic.global.Action') ?>
-
-
-
+ = view('themes/_commonPartialsBs/_alertBoxes'); ?>
+
+
+
+ ID
+ = lang('Clientes.nombre') ?>
+ = lang('Clientes.alias') ?>
+ = lang('Clientes.cif') ?>
+ = lang('Clientes.email') ?>
+ = lang('Users.comercial') ?>
+ = lang('FormasPago.formaDePago') ?>
+ = lang('Clientes.vencimiento') ?>
+ = lang('Basic.global.Action') ?>
+
+
+
-
-
+
+
@@ -37,111 +37,28 @@
-=$this->endSection() ?>
+= $this->endSection() ?>
-=$this->section('additionalInlineJs') ?>
-
- const lastColNr = $('#tableOfClientes').find("tr:first th").length - 1;
- const actionBtns = function(data) {
- return `
-
-
- `;
- };
-
- theTable = $('#tableOfClientes').DataTable({
- processing: true,
- serverSide: true,
- autoWidth: true,
- responsive: true,
- scrollX: true,
- lengthMenu: [ 5, 10, 25, 50, 75, 100, 250, 500, 1000, 2500 ],
- pageLength: 10,
- lengthChange: true,
- "dom": 'lfBrtip',
- "buttons": [
- 'copy', 'csv', 'excel', 'print', {
- extend: 'pdfHtml5',
- orientation: 'landscape',
- pageSize: 'A4'
- }
- ],
- stateSave: true,
- order: [[0, 'asc']],
- language: {
- url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
- },
- ajax : $.fn.dataTable.pipeline( {
- url: '= route_to('clienteDT') ?>',
- method: 'POST',
- headers: {'X-Requested-With': 'XMLHttpRequest'},
- async: true,
- }),
- columnDefs: [
- {
- orderable: false,
- searchable: false,
- targets: [lastColNr]
- }
- ],
- columns : [
- { 'data': 'nombre' },
- { 'data': 'alias' },
- { 'data': 'cif' },
- { 'data': 'email' },
- { 'data': 'comercial' },
- { 'data': 'forma_pago_id' },
- { 'data': 'vencimiento' },
- { 'data': actionBtns }
- ]
- });
-
-
- $(document).on('click', '.btn-edit', function(e) {
- window.location.href = `/clientes/cliente/edit/${$(this).attr('data-id')}`;
- });
-
- $(document).on('click', '.btn-delete', function(e) {
- $(".btn-remove").attr('data-id', $(this).attr('data-id'));
- });
-
- $(document).on('click', '.btn-remove', function(e) {
- const dataId = $(this).attr('data-id');
- const row = $(this).closest('tr');
- if ($.isNumeric(dataId)) {
- $.ajax({
- url: `/clientes/cliente/delete/${dataId}`,
- method: 'GET',
- }).done((data, textStatus, jqXHR) => {
- $('#confirm2delete').modal('toggle');
- theTable.clearPipeline();
- theTable.row($(row)).invalidate().draw();
- popSuccessAlert(data.msg ?? jqXHR.statusText);
- }).fail((jqXHR, textStatus, errorThrown) => {
- popErrorAlert(jqXHR.responseJSON.messages.error)
- })
- }
- });
-
-=$this->endSection() ?>
-
-
-=$this->section('css') ?>
- ">
-=$this->endSection() ?>
+= $this->section('css') ?>
+ ">
+= $this->endSection() ?>
= $this->section('additionalExternalJs') ?>
-
-
-
-
-
-
-
-=$this->endSection() ?>
+
+
+
+
+
+
+
+
+
+
+= $this->endSection() ?>
\ No newline at end of file
diff --git a/ci4/app/Views/themes/vuexy/form/configuracion/maquinas/viewMaquinaList.php b/ci4/app/Views/themes/vuexy/form/configuracion/maquinas/viewMaquinaList.php
index c3e7a1b0..a6d48422 100644
--- a/ci4/app/Views/themes/vuexy/form/configuracion/maquinas/viewMaquinaList.php
+++ b/ci4/app/Views/themes/vuexy/form/configuracion/maquinas/viewMaquinaList.php
@@ -18,13 +18,14 @@
+ ID
= lang('Maquinas.nombre') ?>
= lang('Maquinas.tipo') ?>
= lang('Maquinas.anchoImpresion') ?>
= lang('Maquinas.altoImpresion') ?>
= lang('Maquinas.min') ?>
= lang('Maquinas.max') ?>
- = lang('Basic.global.Action') ?>
+ = lang('Basic.global.Action') ?>
@@ -42,102 +43,6 @@
=$this->endSection() ?>
-=$this->section('additionalInlineJs') ?>
-
- const lastColNr = $('#tableOfMaquinas').find("tr:first th").length - 1;
- const actionBtns = function(data) {
- return `
-
-
- `;
- };
- theTable = $('#tableOfMaquinas').DataTable({
- processing: true,
- serverSide: true,
- autoWidth: true,
- responsive: true,
- scrollX: true,
- lengthMenu: [ 5, 10, 25, 50, 75, 100, 250, 500, 1000, 2500 ],
- pageLength: 10,
- lengthChange: true,
- "dom": 'lfBrtip',
- "buttons": [
- 'copy', 'csv', 'excel', 'print', {
- extend: 'pdfHtml5',
- orientation: 'landscape',
- pageSize: 'A4'
- }
- ],
- stateSave: true,
- order: [[0, 'asc']],
- language: {
- url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
- },
- ajax : $.fn.dataTable.pipeline( {
- url: '= route_to('dataTableOfMaquinas') ?>',
- method: 'POST',
- headers: {'X-Requested-With': 'XMLHttpRequest'},
- async: true,
- }),
- columnDefs: [
- {
- orderable: false,
- searchable: false,
- targets: [lastColNr]
- }
- ],
- columns : [
- { 'data': 'nombre' },
- { 'data': 'tipo' },
- { 'data': 'ancho_impresion' },
- { 'data': 'alto_impresion' },
- { 'data': 'min' },
- { 'data': 'max' },
- { 'data': actionBtns }
- ]
- });
-
-
- theTable.on( 'draw.dt', function () {
- const boolCols = [];
- for (let coln of boolCols) {
- theTable.column(coln, { page: 'current' }).nodes().each( function (cell, i) {
- cell.innerHTML = cell.innerHTML == '1' ? ' ' : '';
- });
- }
- });
-
- $(document).on('click', '.btn-edit', function(e) {
- window.location.href = `/configuracion/maquinas/edit/${$(this).attr('data-id')}`;
- });
-
- $(document).on('click', '.btn-delete', function(e) {
- $(".btn-remove").attr('data-id', $(this).attr('data-id'));
- });
-
- $(document).on('click', '.btn-remove', function(e) {
- const dataId = $(this).attr('data-id');
- const row = $(this).closest('tr');
- if ($.isNumeric(dataId)) {
- $.ajax({
- url: `/configuracion/maquinas/delete/${dataId}`,
- method: 'GET',
- }).done((data, textStatus, jqXHR) => {
- $('#confirm2delete').modal('toggle');
- theTable.clearPipeline();
- theTable.row($(row)).invalidate().draw();
- popSuccessAlert(data.msg ?? jqXHR.statusText);
- }).fail((jqXHR, textStatus, errorThrown) => {
- popErrorAlert(jqXHR.responseJSON.messages.error)
- })
- }
- });
-=$this->endSection() ?>
-
-
=$this->section('css') ?>
">
=$this->endSection() ?>
@@ -151,5 +56,7 @@
+
+
=$this->endSection() ?>
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_datosLibroItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_datosLibroItems.php
deleted file mode 100644
index d0d58e27..00000000
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_datosLibroItems.php
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_direccionesItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_direccionesItems.php
deleted file mode 100644
index eb4fe1d7..00000000
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_direccionesItems.php
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-
-
-
-
- Mis direcciones
-
-
-
-
- Unidades
-
-
-
-
- Insertar
-
-
-
-
-
-
-
-
-
- = lang('PresupuestosDirecciones.entregaPieCalle') ?>
-
-
-
-
-
-
-
-
-
-= $this->section("additionalInlineJs") ?>
-
-window.direcciones = = json_encode($presupuestoEntity->direcciones_envio) ?>;
-window.direcciones_sel_tirada = = json_encode($presupuestoEntity->selected_tirada) ?>;
-window.routes_direcciones = {
- direcciones: "= route_to('getDirecciones') ?>",
- getDatos: "= route_to('getDatosDireccion') ?>",
- nuevaDireccion: "= route_to('nuevaDireccion') ?>",
-}
-= $this->endSection() ?>
\ No newline at end of file
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_disenioLibroItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_disenioLibroItems.php
deleted file mode 100644
index 0516df66..00000000
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_disenioLibroItems.php
+++ /dev/null
@@ -1,665 +0,0 @@
-
-
-
-
-
-
-
Fresado
-
-
-
-
- = lang('Presupuestos.titulo') ?>*
-
-
-
-
-
-
-
user()->inGroup('admin') || auth()->user()->inGroup('beta')) ?' style="display:none;"':''?>>
-
- = lang('Presupuestos.clienteId') ?>*
-
-
-
- clienteList) && is_array($datosPresupuesto->clienteList) && !empty($datosPresupuesto->clienteList)) :
- foreach ($datosPresupuesto->clienteList as $k => $v) : ?>
- >
- = $v ?>
-
-
-
-
-
-
-
-
-
- = lang('Presupuestos.referenciaCliente') ?>
-
- = lang('Presupuestos.referenciaCliente2') ?>
-
-
-
-
-
-
-
-
-
-
>
-
- tapa == 'blanda' ? ' checked=""': ''); ?> >
-
-
-
-
-
-
>
-
- tapa == 'dura' ? ' checked=""': ''); ?> >
-
-
-
-
-
-
-
-
-
-
Datos presupuesto
-
-
-
-
-
-
-
No puede mezclar tiradas mayores de 30 unidades con tiradas menores de 30 unidades
-
-
-
-
-
-
-
-
-
-
-
- = lang('Presupuestos.paginas') ?>
-
-
-
-
-
-
- = lang('Presupuestos.paginasCuadernillo') ?>
-
-
- paginasCuadernillo) && is_array($datosPresupuesto->paginasCuadernillo) && !empty($datosPresupuesto->paginasCuadernillo)) :
- foreach ($datosPresupuesto->paginasCuadernillo as $value) : ?>
- paginas_por_cuadernillo ? ' selected' : '' ?>>
- = $value ?>
-
-
-
-
-
-
-
-
-
-
papel_formato_personalizado == false ? '' : 'style="display: none"'; ?>>
-
- Tamaño Libro*
-
-
-
-
- papelFormatoList) && is_array($datosPresupuesto->papelFormatoList) && !empty($datosPresupuesto->papelFormatoList)) :
- foreach ($datosPresupuesto->papelFormatoList as $formato) : ?>
- id == $presupuestoEntity->papel_formato_id ? ' selected' : '' ?>>
- = $formato->tamanio ?>
-
-
-
-
-
-
papel_formato_personalizado == true ? '' : 'style="display: none"'; ?>>
-
- Ancho Libro
-
-
-
-
-
papel_formato_personalizado == true ? '' : 'style="display: none"'; ?>>
-
- Alto Libro
-
-
-
-
-
-
- papel_formato_personalizado == true ? 'checked' : ''; ?>>
- = lang('Presupuestos.papelFormatoPersonalizado') ?>
-
-
-
-
-
-
-
-
-
No existe combinación con las opciones seleccionadas. Pruebe con otro papel/gramaje
-
-
-
Color del interior
-
-
-
-
-
-
-
-
-
-
Blanco y Negro Estándar
-
-
-
-
-
-
-
-
-
Blanco y Negro Premium
-
-
-
-
-
-
-
-
-
-
-
-
Color Estándar
-
-
-
-
-
-
-
-
-
Color Premium
-
-
-
-
-
-
-
-
- Páginas a color
-
-
-
-
-
-
Papel
-
-
-
- Tipo de papel
-
-
-
-
- Gramaje (g/m2)
-
-
-
-
-
-
-
-
Opciones extra
-
>
-
-
- excluir_rotativa == true ? 'checked' : ''; ?>>
- Excluir rotativa
-
-
-
-
-
-
-
-
-
No existe combinación con las opciones seleccionadas. Pruebe con otro papel/gramaje
-
-
-
Papel
-
-
-
- Tipo de papel
-
- papelCubierta) && is_array($datosPresupuesto->papelCubierta) && !empty($datosPresupuesto->papelCubierta)) :
- foreach ($datosPresupuesto->papelCubierta as $k => $v) : ?>
-
- = $v->nombre ?>
-
-
-
-
-
-
- Gramaje (g/m2)
-
-
-
-
-
-
-
-
-
-
Caras impresas cubierta
-
- paginas_cubierta==2?'selected':''?> >
- = lang('Presupuestos.unaCara') ?>
-
- paginas_cubierta==4?'selected':''?>>
- = lang('Presupuestos.dosCaras') ?>
-
-
-
-
-
-
-
-
Opciones extra
-
-
-
-
-
- solapas == true ? 'checked' : ''; ?>>
- Solapas cubierta
-
-
-
-
solapas == true ? '' : 'style="display: none;"'; ?>>
- Tamaño
-
-
-
-
-
-
-
-
- Acabados cubierta
-
- acabadosCubierta) && is_array($datosPresupuesto->acabadosCubierta) && !empty($datosPresupuesto->acabadosCubierta)) :
- foreach ($datosPresupuesto->acabadosCubierta as $acabado) : ?>
- id == $presupuestoEntity->acabado_cubierta_id ? ' selected' : '' ?>>
- = $acabado->label ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
No existe combinación con las opciones seleccionadas. Pruebe con otro papel/gramaje
-
-
-
-
-
- papel_sobrecubierta) && $presupuestoEntity->papel_sobrecubierta>0) :
- echo 'checked';
- endif; ?>
- >
- Añadir sobrecubierta
-
-
-
-
-
papel_sobrecubierta) && $presupuestoEntity->papel_sobrecubierta>0) :
- echo '';
- else:
- echo 'style="display: none;"';
- endif; ?>
- > Papel
-
-
-
- Tipo de papel
-
- papelSobrecubierta) && is_array($datosPresupuesto->papelSobrecubierta) && !empty($datosPresupuesto->papelSobrecubierta)) :
- foreach ($datosPresupuesto->papelSobrecubierta as $k => $v) : ?>
-
- = $v->nombre ?>
-
-
-
-
-
-
- Gramaje (g/m2)
-
-
-
-
-
-
-
papel_sobrecubierta) && $presupuestoEntity->papel_sobrecubierta>0) :
- echo '';
- else:
- echo 'style="display: none;"';
- endif; ?>
- > Opciones extra
-
-
papel_sobrecubierta) && $presupuestoEntity->papel_sobrecubierta>0) :
- echo '';
- else:
- echo 'style="display: none;"';
- endif; ?>
- >
-
-
- Tamaño solapas
-
-
-
-
-
-
papel_sobrecubierta) && $presupuestoEntity->papel_sobrecubierta>0) :
- echo '';
- else:
- echo 'style="display: none;"';
- endif; ?>
- >
-
-
- Acabados sobrecubierta
-
- acabadosSobrecubierta) && is_array($datosPresupuesto->acabadosSobrecubierta) && !empty($datosPresupuesto->acabadosSobrecubierta)) :
- foreach ($datosPresupuesto->acabadosSobrecubierta as $acabado) : ?>
- id == $presupuestoEntity->acabado_sobrecubierta_id ? ' selected' : '' ?>>
- = $acabado->label ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
No existe combinación con las opciones seleccionadas. Pruebe con otro papel/gramaje
-
-
-
-
-
Impresión de guardas
-
- paginas_guardas) || $presupuestoEntity->paginas_guardas==0) ? 'selected' : ''); ?>
- >
- = lang('Presupuestos.sinImpresion') ?>
-
- paginas_guardas==4 ? 'selected' : ''); ?>
- >
- = lang('Presupuestos.unaCara') ?>
-
- paginas_guardas==8 ? 'selected' : ''); ?>
- >
- = lang('Presupuestos.dosCaras') ?>
-
-
-
-
-
-
-
- Tipo de papel
-
- papelGuardas) && is_array($datosPresupuesto->papelGuardas) && !empty($datosPresupuesto->papelGuardas)) :
- foreach ($datosPresupuesto->papelGuardas as $k => $v) : ?>
- id==$presupuestoEntity->papel_guardas?'selected':'');?> >
- = $v->nombre ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- retractilado == true ? 'checked' : ''; ?>>
- = lang('Presupuestos.retractilado') ?>
-
-
-
-
-
-
-
-
-
- retractilado5 == true ? 'checked' : ''; ?>>
- = lang('Presupuestos.retractilado5') ?>
-
-
-
-
-
-
-
-
-
-
- faja_color == true ? 'checked' : ''; ?>>
- = lang('Presupuestos.fajaColor') ?>
-
-
-
-
-
-
-
-
-
- prototipo == true ? 'checked' : ''; ?>>
- = lang('Presupuestos.prototipo') ?>
-
-
-
-
-
-
-
-
-
-
-
-
- ferro == true ? 'checked' : ''; ?>>
- = lang('Presupuestos.ferro') ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
I.V.A. reducido
-
- iva_reducido == 1? 'selected':''?> >
- = lang('SI') ?>
-
- iva_reducido == 0? 'selected':''?> >
- = lang('NO') ?>
-
-
-
-
-
Se verificará que el pedido cumpla con los requisitos establecidos en el Artículo 91 de la Ley 37/1992, sobre inserción de publicidad, antes de proceder con su producción, lo que garantiza la aplicación del IVA reducido del 4%.
-
-
-
-
-
-
-= $this->section("additionalInlineJs") ?>
-
-
-window.datosDisenioLibro = {
- papel_interior: papel_interior ? $presupuestoEntity->papel_interior : 'null'; ?>,
- gramaje_interior: gramaje_interior ? $presupuestoEntity->gramaje_interior : 'null'; ?>,
- papel_cubierta: papel_cubierta ? $presupuestoEntity->papel_cubierta : 'null'; ?>,
- gramaje_cubierta: gramaje_cubierta ? $presupuestoEntity->gramaje_cubierta : 'null'; ?>,
- papel_sobrecubierta: papel_sobrecubierta ? $presupuestoEntity->papel_sobrecubierta : 'null'; ?>,
- gramaje_sobrecubierta: gramaje_sobrecubierta ? $presupuestoEntity->gramaje_sobrecubierta : 'null'; ?>,
-}
-window.routes_disenio_libro = {
- obtenerGramaje: "= route_to('obtenerGramaje') ?>",
- presupuestoCliente: "= route_to('presupuestoCliente') ?>",
-}
-= $this->endSection() ?>
\ No newline at end of file
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_resumenItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_resumenItems.php
deleted file mode 100644
index f9cf2d07..00000000
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_resumenItems.php
+++ /dev/null
@@ -1,316 +0,0 @@
-
-
- estado_id==2): ?>
-
PRESUPUESTO ACEPTADO
-
lomo_cubierta ?>>
-
-
-
Resumen
-
-
Libro
-
resumen->titulo)?$presupuestoEntity->resumen->titulo:'') ?>
-
Tamaño: resumen->tamanio)?$presupuestoEntity->resumen->tamanio:'') ?>
-
Número de páginas: paginas ?>
-
Tirada: tirada ?>
-
Prototipo: prototipo?'SI':'NO') ?>
-
Ferro: ferro?'SI':'NO') ?>
-
-
Interior
-
Impresion:
- resumen->tipo_impresion)?$presupuestoEntity->resumen->tipo_impresion:'') ?>
-
-
paginasColor==0?'style="display:none"':'')?>>
- Páginas a color: paginasColor?>
-
Papel:
- papel_interior_nombre)?$presupuestoEntity->papel_interior_nombre:'') ?>
- gramaje_interior)?$presupuestoEntity->gramaje_interior:'') ?>gr/m²
-
-
Cubierta
-
Papel:
- papel_cubierta_nombre)?$presupuestoEntity->papel_cubierta_nombre:''); ?>
- gramaje_cubierta)?$presupuestoEntity->gramaje_cubierta:''); ?>gr/m²
-
Impresión: paginas_cubierta==2?"1 cara":"2 caras");?>
- solapas_ancho>0 || $presupuestoEntity->estado_id==1): ?>
-
Solapas: solapas_ancho;?>mm
-
- acabado_cubierta_id>0 || $presupuestoEntity->estado_id==1): ?>
-
Acabado:
- acabadosCubierta) && is_array($datosPresupuesto->acabadosCubierta) && !empty($datosPresupuesto->acabadosCubierta)) :
- foreach ($datosPresupuesto->acabadosCubierta as $acabado) :
- if ($acabado->id == $presupuestoEntity->acabado_cubierta_id):
- echo $acabado->label;
- endif;
- endforeach;
- endif; ?>
-
-
-
- papel_sobrecubierta || $presupuestoEntity->estado_id==1): ?>
-
Sobrecubierta
-
Papel:
- papel_sobrecubierta_nombre)?$presupuestoEntity->papel_sobrecubierta_nombre:'') ?>
- gramaje_sobrecubierta)?$presupuestoEntity->gramaje_sobrecubierta:'') ?>gr/m²
- solapas_ancho_sobrecubierta>0 || $presupuestoEntity->estado_id==1): ?>
-
Ancho solapas: solapas_ancho_sobrecubierta;?>mm
-
-
Acabado:
- acabadosSobrecubierta) && is_array($datosPresupuesto->acabadosSobrecubierta) && !empty($datosPresupuesto->acabadosSobrecubierta)) :
- foreach ($datosPresupuesto->acabadosSobrecubierta as $acabado) :
- if ($acabado->id == $presupuestoEntity->acabado_sobrecubierta_id):
- echo $acabado->label;
- endif;
- endforeach;
- endif; ?>
-
-
-
- papel_guardas || $presupuestoEntity->estado_id==1): ?>
-
Guardas
-
Papel:
- papel_guardas_nombre)?$presupuestoEntity->papel_guardas_nombre:''); ?>
- 170gr/m²
-
Impresión:
- paginas_guardas) || $presupuestoEntity->paginas_guardas==0):
- echo "Sin impresion";
- elseif($presupuestoEntity->paginas_guardas==4):
- echo "1 cara";
- else:
- echo "2 caras";
- endif; ?>
-
-
- retractiladol || $presupuestoEntity->retractilado5 || $presupuestoEntity->faja_color || $presupuestoEntity->estado_id==1): ?>
-
-
- retractiladol): ?>
-
- retractilado5): ?>
-
- faja_color): ?>
-
-
-
-
-
-
- estado_id==2):
- $total = $presupuestoEntity->total_aceptado;
- $iva = $presupuestoEntity->iva_reducido?1.04:1.21;
- $total *= $iva;
- $total_unidad = $presupuestoEntity->total_precio_unidad * $iva;;
- echo '
Total: ' . round($total, 2) . '€ ';
- echo '
' . round($total_unidad, 4) . '€/ud '
- ?>
-
-
Total: 100€
-
10.4€/ud
-
-
-
-
-
- Previsualizar detalles de cubierta
-
-
-
-
-
- estado_id==2):
- echo '
';
- echo '
Direcciones de envío ';
- echo '
';
- if(isset($presupuestoEntity->direcciones_envio)):
- foreach ($presupuestoEntity->direcciones_envio as $direccion):
- echo '
';
- echo '
';
- echo '';
- echo '';
- echo '';
- echo '' . $direccion['direccion'] . ' ';
- echo '' . $direccion['cp'] . ' ';
- echo '' . $direccion['municipio'] .', ' . $direccion['pais'] . ' ';
- echo '' . $direccion['telefono'] . ' ';
- echo '' . $direccion['email'] . ' ';
- if($direccion['entregaPieCalle'] == 1){
- echo 'Envío en palets ';
- }
- echo ' ';
- echo ' ';
- echo ' ';
- echo '
';
- echo '
';
- endforeach;
- endif;
- echo '
';
- echo '
';
- endif; ?>
-
- estado_id==2): ?>
-
-
Ficheros
-
-
-
- Arrastre aquí los ficheros o haga click
-
-
-
-
-
-
-
- Actualizar ficheros
-
-
-
-
-
-
-
-
-
-
-= $this->section("additionalInlineJs") ?>
-window.estado = = $presupuestoEntity->estado_id ?? 1?>;
-window.tirada = = $presupuestoEntity->selected_tirada ?? 0?>;
-window.total = = $presupuestoEntity->total_aceptado ?? 0?>;
-window.total_unidad = = $presupuestoEntity->total_precio_unidad ?? 0 ?>;
-window.routes_resumen = {
- guardarPresupuesto: "= route_to('guardarPresupuesto') ?>",
- duplicarPresupuesto: "= route_to('duplicarPresupuesto') ?>",
-}
-
-estado_id===2): ?>
- previewEsquemaCubierta(true);
-
- const previewTemplate = ``;
-
- Dropzone.autoDiscover = false;
-
- var dropzoneMulti = new Dropzone('#dropzone-multi', {
- url: "= site_url('presupuestos/presupuestocliente/upload_files') ?>",
- addRemoveLinks: true,
- previewTemplate: previewTemplate,
- paramName: "file",
- uploadMultiple: true,
- parallelUploads: 4, // Ajusta este número al máximo número de archivos que esperas subir a la vez
- maxFiles: 5, // Ajusta este número al máximo número de archivos que esperas subir a la vez
- autoProcessQueue: true,
- dictRemoveFile: "Eliminar",
- acceptedFiles: 'image/*, application/pdf',
- maxFilesize: 5e+7, // Bytes
- init: function() {
- thisDropzone = this;
- $('#loader').show();
-
- $.ajax({
- url: "= site_url('presupuestos/presupuestocliente/get_files') ?>",
- type: 'POST',
- data: { presupuesto_id: = $presupuestoEntity->id ?> },
-
- }).done(function(response) {
- if(response == null || response == ""){
- return;
- }
- values = JSON.parse(response);
- for(var i = 0; i < values.length; i++){
- var mockFile = { name: values[i].name, size: values[i].size, hash: values[i].hash};
-
- thisDropzone.files.push(mockFile); // add to files array
- thisDropzone.emit("addedfile", mockFile);
- thisDropzone.emit("thumbnail", mockFile, window.location.host + "/sistema/intranet/presupuestos/"+values[i].hash);
- thisDropzone.emit("complete", mockFile);
- thisDropzone.options.success.call(thisDropzone, mockFile);
- };
- }).always(function() {
- $('#loader').hide();
- });
-
- this.on("addedfile", function (file) {
- if(file.hash){
- var viewButton = Dropzone.createElement("Ver ");
- file.previewElement.appendChild(viewButton);
- // Listen to the view button click event
- viewButton.addEventListener("click", function (e) {
-
- window.open(window.location.protocol + "//" + window.location.host + "/sistema/intranet/presupuestos/"+file.hash, '_blank');
- });
- }
- });
- }
- });
-
- $('#presupuesto-cliente-form').submit(function(e){
- e.preventDefault();
- var files = dropzoneMulti.files;
- $('#loader').show();
-
- var formData = new FormData();
- var oldFiles = [];
- var counter = 0;
- for (var i = 0; i < files.length; i++) {
-
- if(files[i].upload){
- var file = files[i];
- formData.append('file[' + counter + ']', file);
- counter += 1;
- }
- else{
- oldFiles.push(files[i].name);
- }
- }
- formData.append('oldFiles', JSON.stringify(oldFiles));
-
- formData.append('presupuesto_id', = $presupuestoEntity->id ?>);
-
- $.ajax({
- url: "= site_url('presupuestos/presupuestocliente/upload_files') ?>",
- type: 'POST',
- data: formData,
- processData: false, // Indicar a jQuery que no procese los datos
- contentType: false // Indicar a jQuery que no establezca el tipo de contenido
- }).done(function(response) {
- // Aquí puedes manejar la respuesta del servidor
- }).always(function() {
- $('#loader').hide();
- })
-
- return false;
- });
-
-= $this->endSection() ?>
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_tipoLibroItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_tipoLibroItems.php
deleted file mode 100644
index 54cf1280..00000000
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/_tipoLibroItems.php
+++ /dev/null
@@ -1,122 +0,0 @@
-
-
-
-
lomo_cubierta ?>>
-
-
-
-
-
-
\ No newline at end of file
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/direcciones.js b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/direcciones.js
deleted file mode 100644
index 5a264add..00000000
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/direcciones.js
+++ /dev/null
@@ -1,387 +0,0 @@
-function initDirecciones() {
- data = {
- id: $('#clienteId').val()
- },
- data = Object.assign(data, window.token_ajax);
- $('#errorDirecciones').hide();
-
- $.ajax({
- url: window.routes_direcciones.direcciones,
- type: 'POST',
- data: data,
- success: function(response) {
- $("#direcciones").empty();
- $.each(response.menu, function(index, value) {
- $("#direcciones").append('' + value.text + ' ');
- });
- $("#direcciones").val('');
- },
- error: function() {
- $("#direcciones").empty();
- },
- });
-}
-
-function initTiradasDirecciones() {
- const _this = this
- let sel_index = 1;
-
- $('#containerTiradasEnvios').empty();
-
- for (i = 1; i <= 4; i++) {
- let id = "tiradaPrecio" + i;
- if ($('#' + id).length > 0) {
-
- let tirada_id = "ud_tiradaPrecio" + i;
- let total_id = "tot_tiradaPrecio" + i;
- let precio_u_id = "pu_tiradaPrecio" + i;
- let peso = $('#' + id).attr('peso');
-
- let html = '';
- html += '';
- html += '
';
- html += '';
- html += ' ';
- html += '';
- html += '';
- html += '' + $('#' + precio_u_id).text() + ' ';
- html += ' ';
- html += ' ';
- html += '
';
- html += '
';
-
- $('#containerTiradasEnvios').append(html);
-
- if(parseInt($('#' + tirada_id).text().split(' ')[0]) == window.direcciones_sel_tirada){
- sel_index = i;
- }
-
- $('#' + id).hide();
- }
- }
- $(('#env_tiradaPrecio' + sel_index)).trigger('click');
-
- cargarDirecciones();
-
- const tiradasDireccionesList = [].slice.call(document.querySelectorAll('.custom-option-tiradasDirecciones .form-check-input'))
- tiradasDireccionesList.map(function (customOptionEL) {
- // Update custom options check on page load
- _this.updateTiradasDireccionesCheck(customOptionEL)
-
- // Update custom options check on click
- customOptionEL.addEventListener('click', e => {
- _this.updateTiradasDireccionesCheck(customOptionEL)
- })
- })
-}
-
-function cargarDirecciones(){
- $('#loader').show();
- $('#divDirecciones').empty();
-
- if(window.direcciones == null){
- $('#loader').hide();
- return;
- }
- for(let i=0; i';
- html += '';
- html += '';
-
- $('#divDirecciones').append(html);
- $('#errorDirecciones').hide();
- $('#loader').hide();
- }
-}
-
-function updateTiradasDireccionesCheck(el) {
- if (el.checked) {
- // If custom option element is radio, remove checked from the siblings (closest `.row`)
- if (el.type === 'radio') {
- const customRadioOptionList = [].slice.call(el.closest('.row').querySelectorAll('.custom-option-tiradasDirecciones'))
- customRadioOptionList.map(function (customRadioOptionEL) {
- customRadioOptionEL.closest('.custom-option-tiradasDirecciones').classList.remove('checked')
- let id_temp = customRadioOptionEL.id.split('-')[1];
- $('#' + id_temp).prop('checked', false);
- })
- }
- const element = el.closest('.custom-option-tiradasDirecciones');
- element.classList.add('checked');
-
- let id = element.id.split('-')[1];
- $('#' + id).prop('checked', true);
-
- } else {
- el.closest('.custom-option-tiradasDirecciones').classList.remove('checked')
- }
-}
-
-
-function obtenerUnidadesEnvio(){
-
- const elements = $('#divDirecciones').find('.row.mb-3');
- let total = 0;
-
- if(elements.length > 0) {
- for (let index=0; index 0 ) {
-
- let unidades = $('#unidadesEnvio').val();
- if(unidades == '' || isNaN(unidades) || parseInt(unidades) <= 0){
- return false;
- }
- unidades = parseInt(unidades);
-
- const seleccion = $('.custom-option-tiradasDirecciones.checked');
- if(seleccion.length == 0) {
- return false;
- }
-
- const element_tirada =($(seleccion[0]).find('label input')[0]);
- const number = element_tirada.id.match(/\d+$/);
- if (number.length == 0) {
- return false;
- }
- let tirada = parseInt($('#tiradaDireccionesValue' + number[0]).text());
-
- let total = obtenerUnidadesEnvio();
-
- if($('#prototipo').is(':checked')) {
- tirada += 1;
- }
-
- if(total + unidades <= tirada) {
-
- data = {
- id: $('#direcciones').val(),
- peso: $('#env_tiradaPrecio' + number[0]).attr('peso'),
- unidades: unidades,
- entregaPieCalle: $('#entregaPieCalle').is(':checked')?1:0,
- },
- data = Object.assign(data, window.token_ajax)
-
- $('#loader').show();
-
- $.ajax({
- url: window.routes_direcciones.getDatos,
- type: 'POST',
- data: data,
- success: function(response) {
- if(response.data.length > 0) {
- let html = '';
- html += '';
- html += '
';
- html += '
';
-
- $('#divDirecciones').append(html);
- $('#errorDirecciones').hide();
- $('#loader').hide();
- }
- },
- error: function() {
- $("#direcciones").empty();
- $('#loader').hide();
- },
- });
- }
- else{
- $('#errorDirecciones').text('El número de unidades supera la tirada seleccionada.');
- $('#errorDirecciones').show();
- }
- }
- return false;
-})
-
-
-
-$(document).on('click', '.eliminar-direccion', function(e) {
-
- $(this).closest('.row.mb-3').remove();
-
- const seleccion = $('.custom-option-tiradasDirecciones.checked');
- if(seleccion.length == 0) {
- return false;
- }
-
- const element_tirada =($(seleccion[0]).find('label input')[0]);
- const number = element_tirada.id.match(/\d+$/);
- if (number.length == 0) {
- return false;
- }
-
- let tirada = parseInt($('#tiradaDireccionesValue' + number[0]).text());
-
- const elements = $('#divDirecciones').find('.row.mb-3');
-
- let total = 0;
- if(elements.length > 0) {
- for (let index=0; index' + value.text + '');
- });
- $("#direcciones").val('');
- $('#addressForm').modal('hide');
- },
- error: function() {
- $('#addressForm').modal('hide');
- },
- });
-
- }
-}
-
-function validarEnvio(){
-
- const seleccion = $('.custom-option-tiradasDirecciones.checked');
- if(seleccion.length == 0) {
- return false;
- }
-
- const element_tirada =($(seleccion[0]).find('label input')[0]);
-
- const number = element_tirada.id.match(/\d+$/);
- if (number.length == 0) {
- return false;
- }
- let tirada = parseInt($('#tiradaDireccionesValue' + number[0]).text());
-
- let total = obtenerUnidadesEnvio();
-
- if($('#prototipo').is(':checked')) {
- tirada += 1;
- }
-
- if(total != tirada){
- return false;
- }
- return true;
-}
-
-function getDireccionesEnvio(){
-
- const elements = $('#divDirecciones').find('.row.mb-3');
-
- let direcciones = [];
-
- if(elements.length > 0) {
- for (let index=0; index {
- _this.updateTapaCheck(customOptionEL)
- })
- })
-}
-
-function updateTapaCheck(el) {
- if (el.checked) {
- // If custom option element is radio, remove checked from the siblings (closest `.row`)
- if (el.type === 'radio') {
- const customRadioOptionList = [].slice.call(el.closest('.row').querySelectorAll('.custom-option-tapa'))
- customRadioOptionList.map(function (customRadioOptionEL) {
- customRadioOptionEL.closest('.custom-option-tapa').classList.remove('checked')
- })
- }
- el.closest('.custom-option-tapa').classList.add('checked')
- if (el.closest('.custom-option-tapa').id == 'tapaBlandaInnerDiv') {
- $('#tapaBlanda').prop('checked', true);
- $('#tapaDura').prop('checked', false);
- }
- else {
- $('#tapaBlanda').prop('checked', false);
- $('#tapaDura').prop('checked', true);
- }
- } else {
- el.closest('.custom-option-tapa').classList.remove('checked')
- }
-}
-
-
-function initColorCheck() {
- const _this = this
-
- const custopOptionList = [].slice.call(document.querySelectorAll('.custom-option-color .form-check-input'))
- custopOptionList.map(function (customOptionEL) {
- // Update custom options check on page load
- _this.updateColorCheck(customOptionEL)
-
- // Update custom options check on click
- customOptionEL.addEventListener('click', e => {
- _this.updateColorCheck(customOptionEL)
- })
- })
-}
-
-function updateColorCheck(el) {
- if (el.checked) {
- // If custom option element is radio, remove checked from the siblings (closest `.row`)
- if (el.type === 'radio') {
- const customRadioOptionList = [].slice.call(el.closest('.row-color').querySelectorAll('.custom-option-color'))
- customRadioOptionList.map(function (customRadioOptionEL) {
- customRadioOptionEL.closest('.custom-option-color').classList.remove('checked')
- })
- }
- el.closest('.custom-option-color').classList.add('checked')
- if (el.closest('.custom-option-color').id == 'colorNegroDiv') {
- $('#colorNegro').prop('checked', true);
- $('#colorNegroHq').prop('checked', false);
- $('#colorColor').prop('checked', false);
- $('#colorColorHq').prop('checked', false);
- }
- else if (el.closest('.custom-option-color').id == 'colorNegroHqDiv') {
- $('#colorNegro').prop('checked', false);
- $('#colorNegroHq').prop('checked', true);
- $('#colorColor').prop('checked', false);
- $('#colorColorHq').prop('checked', false);
- }
- else if (el.closest('.custom-option-color').id == 'colorColorDiv') {
- $('#colorNegro').prop('checked', false);
- $('#colorNegroHq').prop('checked', false);
- $('#colorColor').prop('checked', true);
- $('#colorColorHq').prop('checked', false);
- }
- else {
- $('#colorNegro').prop('checked', false);
- $('#colorNegroHq').prop('checked', false);
- $('#colorColor').prop('checked', false);
- $('#colorColorHq').prop('checked', true);
- }
-
- } else {
- el.closest('.custom-option-color').classList.remove('checked')
- }
-}
-
-
-$('#enableSobrecubierta').on('change', function () {
- if ($(this).is(":checked")) {
- $('.enable-sobrecubierta').show();
- } else {
- $('#gramajeSobrecubierta').val('').trigger('change');
- $('#paperSobrecubierta').val('').trigger('change');
- $('#acabadosSobrecubierta').val('').trigger('change');
- $('#tamanioSolapasSobrecubierta').val();
- $('.enable-sobrecubierta').hide();
-
- }
-});
-
-
-function initDisenioLibro() {
- initTapaCheck();
- initColorCheck();
-
- $('.elementos-libro').trigger('change');
- $('.change-tipo-impresion').trigger('change');
-
- $('#papelInterior').trigger('change');
- $('#papelInterior').val(window.datosDisenioLibro.papel_interior);
- $('#gramajeInterior').append($('', {
- value: window.datosDisenioLibro.gramaje_interior,
- text: window.datosDisenioLibro.gramaje_interior
- }));
- $('#gramajeInterior').val(window.datosDisenioLibro.gramaje_interior);
- $('#papelCubierta').val('').trigger('change');
- $('#papelCubierta').val(window.datosDisenioLibro.papel_cubierta);
- $('#gramajeCubierta').append($(' ', {
- value: window.datosDisenioLibro.gramaje_cubierta,
- text: window.datosDisenioLibro.gramaje_cubierta
- }));
- $('#gramajeCubierta').val(window.datosDisenioLibro.gramaje_cubierta);
-
- $('#papelSobrecubierta').val('').trigger('change');
- $('#papelSobrecubierta').val(window.datosDisenioLibro.papel_sobrecubierta);
- $('#gramajeSobrecubierta').append($(' ', {
- value: window.datosDisenioLibro.gramaje_sobrecubierta,
- text: window.datosDisenioLibro.gramaje_sobrecubierta
- }));
- $('#gramajeSobrecubierta').val(window.datosDisenioLibro.gramaje_sobrecubierta);
-
- $('#enableSobrecubierta').trigger('change');
-}
-
-$('.change-tipo-impresion').on('change', function () {
-
- let isColor = false;
- if($('#colorColorDiv').hasClass('checked') || $('#colorColorHqDiv').hasClass('checked'))
- isColor = true;
- let isHq = false;
- if($('#colorNegroDiv').hasClass('checked') || $('#colorColorHqDiv').hasClass('checked'))
- isHq = true;
-
- //si es color hay que mostrar el numero de paginas a color
- if (isColor) {
- $('#pagColorDiv').show();
- if($('#paginasColor').val() == '')
- $('#paginasColor').val('0');
- }
- else {
- $('#pagColorDiv').hide();
- $('#paginasColor').val('0');
- }
-
- var data = [];
-
- if (!isColor && !isHq) {
- data = window.datosPresupuesto.papelInteriorNegro;
- }
- else if (!isColor && isHq) {
- data = window.datosPresupuesto.papelInteriorNegroHq;
- }
- else if (isColor && !isHq) {
- data = window.datosPresupuesto.papelInteriorColor;
- }
- else if (isColor && isHq) {
- data = window.datosPresupuesto.papelInteriorColorHq;
- }
-
- var dropdown = $("#papelInterior");
- dropdown.empty();
- $.each(data, function () {
- dropdown.append($(" ").val(this.id).text(this.nombre));
- });
- //Se quita la seleccion del dropdown
- dropdown.val('').trigger('change');
- $('#gramajeInterior').val('').trigger('change');
-
-
-
-});
-
-
-
-$('#tirada').on('change', function () {
-
- const valInterior = $('#gramajeInterior option:selected').val();
- const valCubierta = $('#gramajeCubierta option:selected').val();
- const valSobrecubierta = $('#gramajeSobrecubierta option:selected').val();
-
-
- $('#papelInterior').trigger('change');
- $('#papelCubierta').trigger('change');
- $('#papelSobrecubierta').trigger('change');
-});
-
-
-$('#papelInterior').on('change', function () {
-
- let isColor = false;
- if($('#colorColorDiv').hasClass('checked') || $('#colorColorHqDiv').hasClass('checked'))
- isColor = true;
- let isHq = false;
- if($('#colorNegroDiv').hasClass('checked') || $('#colorColorHqDiv').hasClass('checked'))
- isHq = true;
-
- if ($('#papelInterior option:selected').val() != undefined) {
- var uso = 'bn';
-
- if (!isColor && !isHq) {
- uso = 'bn';
- }
- else if (!isColor && isHq) {
- uso = 'bnhq';
- }
- else if (isColor && !isHq) {
- uso = 'color';
- }
- else if (isColor && isHq) {
- uso = 'colorhq';
- }
- datos = {
- tirada: $('#tirada').val(),
- merma: 0,
- uso: uso,
- papel: $('#papelInterior option:selected').text()
- };
- datos = Object.assign(datos, window.token_ajax)
-
- const valInterior = $('#gramajeInterior option:selected').val();
-
- $.ajax({
- url: window.routes_disenio_libro.obtenerGramaje,
- type: 'POST',
- data: datos,
- success: function (response) {
-
- if(response.menu){
-
- $('#gramajeInterior').empty();
- $(response.menu).each(function (index, element) {
- $('#gramajeInterior').append($(" ").val(element.id).text(element.text));
- });
- }
-
-
- if (valInterior != undefined && valInterior != '')
- $('#gramajeInterior option[value=' + valInterior + ']').prop('selected', true).trigger('change');
- else
- $('#gramajeInterior').val('').trigger('change');
-
- }
- });
- }
-});
-
-
-$('#papelCubierta').on('change', function () {
- let isColor = true;
- let isHq = true;
-
- if ($('#papelCubierta option:selected').val() != undefined) {
- var uso = 'cubierta';
-
- datos = {
- tirada: $('#tirada').val(),
- merma: 0,
- uso: uso,
- papel: $('#papelCubierta option:selected').text().trim()
- };
- datos = Object.assign(datos, window.token_ajax)
-
- const valCubierta = $('#gramajeCubierta option:selected').val();
-
- $.ajax({
- url: window.routes_disenio_libro.obtenerGramaje,
- type: 'POST',
- data: datos,
- success: function (response) {
-
- $('#gramajeCubierta').empty();
- $(response.menu).each(function (index, element) {
- $('#gramajeCubierta').append($(" ").val(element.id).text(element.text));
- });
-
- if (valCubierta != undefined && valCubierta != '')
- $('#gramajeCubierta option[value=' + valCubierta + ']').prop('selected', true).trigger('change');
- else
- $('#gramajeCubierta').val('').trigger('change');
- }
- });
- }
-});
-
-
-$('#papelSobrecubierta').on('change', function () {
- let isColor = true;
- let isHq = true;
-
- if ($('#papelSobrecubierta option:selected').val() != undefined) {
- var uso = 'sobrecubierta';
-
- datos = {
- tirada: $('#tirada').val(),
- merma: 0,
- uso: uso,
- papel: $('#papelSobrecubierta option:selected').text().trim()
- };
- datos = Object.assign(datos, window.token_ajax)
-
- const valSobrecubierta = $('#gramajeSobrecubierta option:selected').val();
-
- $.ajax({
- url: window.routes_disenio_libro.obtenerGramaje,
- type: 'POST',
- data: datos,
- success: function (response) {
-
- $('#gramajeSobrecubierta').empty();
- $(response.menu).each(function (index, element) {
- $('#gramajeSobrecubierta').append($(" ").val(element.id).text(element.text));
- });
-
- if (valSobrecubierta != undefined)
- $('#gramajeSobrecubierta option[value=' + valSobrecubierta + ']').prop('selected', true).trigger('change');
- else
- $('#gramajeSobrecubierta').val('').trigger('change');
- }
- });
- }
-});
-
-
-$('#solapasCubierta').on('change', function () {
- if ($(this).is(":checked")) {
- $('#tamanioSolapasCubierta').show();
- } else {
- $('#tamanioSolapasCubierta').hide();
- }
-});
-
-
-// Funcion que comprueba que están rellenos todos los datos necesarios para calcular el presupuesto
-function checkValues() {
-
- const tirada = $('#tirada').val();
- const paginas = $('#paginas').val();
- const papelInterior = $('#papelInterior option:selected').val();
- const gramajeInterior = $('#gramajeInterior option:selected').text();
- const papelCubierta = $('#papelCubierta option:selected').val();
- const gramajeCubierta = $('#gramajeCubierta option:selected').text();
- const papelFormatoAlto = $('#papelFormatoAlto').val();
- const papelFormatoAncho = $('#papelFormatoAncho').val();
- const clienteId = $('#clienteId').val();
-
- if (paginas == '' || isNaN(paginas) || parseInt(paginas) <= 0) {
- return false;
- }
- if(parseInt(paginas)%2!=0){
- $('#paginas').val(parseInt(paginas)+1).trigger('change');
- return false;
- }
-
- if(clienteId == '' || isNaN(clienteId) || parseInt(clienteId) <= 0){
- return false;
- }
-
- if (tirada == '' || isNaN(tirada) || parseInt(tirada) <= 0) {
- return false;
- }
-
- if (papelInterior == '' || gramajeInterior == '') {
- return false;
- }
- if (papelCubierta == '' || gramajeCubierta == '') {
- return false;
- }
-
- if ($('#papelFormatoId').val() == null && !$('#papelFormatoPersonalizado').is(':checked')){
- return false;
- }
- if($('#papelFormatoPersonalizado').is(':checked')){
- if(papelFormatoAncho == '' || parseInt(papelFormatoAncho) <= 0 ||
- papelFormatoAlto == '' || parseInt(papelFormatoAlto) <= 0){
- return false;
- }
- }
-
- return true;
-}
-
-
-function getTiradas() {
- let tiradas = [];
- tiradas.push(parseInt($('#tirada').val()));
- if ($('#tirada2').val().length > 0 && parseInt($('#tirada2').val()) > 0)
- tiradas.push(parseInt($('#tirada2').val()));
- if ($('#tirada3').val().length > 0 && parseInt($('#tirada3').val()) > 0)
- tiradas.push(parseInt($('#tirada3').val()));
- if ($('#tirada4').val().length > 0 && parseInt($('#tirada4').val()) > 0)
- tiradas.push(parseInt($('#tirada4').val()));
- return tiradas;
-}
-
-
-function getDimensionLibro() {
-
- var ancho = 0;
- var alto = 0;
-
- if ($('#papelFormatoId option:selected').length > 0) {
- var selectedText = $('#papelFormatoId option:selected').text();
- if (selectedText.length > 0) {
- ancho = parseFloat(selectedText.trim().split(" x ")[0]);
- alto = parseFloat(selectedText.trim().split(" x ")[1]);
- }
- else if (document.getElementById('papelFormatoPersonalizado').checked) {
- ancho = parseFloat(document.getElementById('papelFormatoAncho').value);
- alto = parseFloat(document.getElementById('papelFormatoAlto').value);
- }
- }
-
- else if (document.getElementById('papelFormatoPersonalizado').checked) {
- ancho = parseFloat(document.getElementById('papelFormatoAncho').value);
- alto = parseFloat(document.getElementById('papelFormatoAlto').value);
- }
- return {
- ancho: ancho,
- alto: alto
- }
-}
-
-
-$('#retractilado').on('change', function () {
- if ($(this).is(':checked')) {
- if ($('#retractilado5').is(':checked'))
- $('#retractilado5').prop('checked', false);
- }
-});
-
-
-$('#retractilado5').on('change', function () {
- if ($(this).is(':checked')) {
- if ($('#retractilado').is(':checked'))
- $('#retractilado').prop('checked', false);
- }
-});
-
-$('.elementos-libro').on('change', function () {
- // Libro cosido
- if ($('#cosidoDiv').hasClass('checked')) {
- $('#tituloDisenioLibro').text("Rústica cosido");
- if ($('#tapaBlandaInnerDiv').hasClass('checked')) {
- // Cosido tapa blanda
- $('.guardas').hide();
- $('.solapas-cubierta').show();
- $('.sobrecubierta').show();
- $('#enableSobrecubierta').trigger('change');
- }
- else {
- // Cosido tapa dura
- $('.guardas').show();
- numCarasGuardas(2);
- $('.solapas-cubierta').hide();
- $('.sobrecubierta').show();
- $('#enableSobrecubierta').trigger('change');
- }
- }
- // Libro fresado
- else if ($('#fresadoDiv').hasClass('checked')) {
- $('#tituloDisenioLibro').text("Rústica fresado");
- if ($('#tapaBlandaInnerDiv').hasClass('checked')) {
- // fresado tapa blanda
- $('.guardas').hide();
- $('.solapas-cubierta').show();
- $('.sobrecubierta').show();
- $('#enableSobrecubierta').trigger('change');
- }
- else {
- // fresado tapa dura
- $('.guardas').show();
- numCarasGuardas(2);
- $('.solapas-cubierta').hide();
- $('.sobrecubierta').show();
- $('#enableSobrecubierta').trigger('change');
- }
- }
- // Libro grapado
- else if ($('#grapadoDiv').hasClass('checked')) {
- $('#tituloDisenioLibro').text("Cosido con grapas");
- if ($('#tapaBlandaInnerDiv').hasClass('checked')) {
- // grapado tapa blanda
- $('.guardas').hide();
- $('.solapas-cubierta').show();
- $('.sobrecubierta').hide();
- $('#enableSobrecubierta').prop('checked', false);
- }
- }
- // Libro wire-o
- else if ($('#wireoDiv').hasClass('checked')) {
- $('#tituloDisenioLibro').text("Wire-O");
- if ($('#tapaBlandaInnerDiv').hasClass('checked')) {
- // wire-o tapa blanda
- $('.guardas').hide();
- $('.solapas-cubierta').show();
- $('.sobrecubierta').hide();
- $('#enableSobrecubierta').prop('checked', false);
- }
- else {
- // wire-o tapa dura
- $('.guardas').show();
- numCarasGuardas(1);
- $('.solapas-cubierta').hide();
- $('.sobrecubierta').hide();
- $('#enableSobrecubierta').prop('checked', false);
- }
- }
- // Libro espiral
- else if ($('#espiralDiv').hasClass('checked')) {
- $('#tituloDisenioLibro').text("Espiral");
- if ($('#tapaBlandaInnerDiv').hasClass('checked')) {
- // espiral tapa blanda
- $('.guardas').hide();
- $('.solapas-cubierta').show();
- $('.sobrecubierta').hide();
- $('#enableSobrecubierta').prop('checked', false);
- }
- else {
- // espiral tapa dura
- $('.espiral').show();
- numCarasGuardas(1);
- $('.solapas-cubierta').hide();
- $('.sobrecubierta').hide();
- $('#enableSobrecubierta').prop('checked', false);
- }
- }
-});
-
-
-function numCarasGuardas(numCaras) {
- if (numCaras == 1) {
- $("#impresionGuardas option[value='8']").remove();
- }
- else {
- if ($("#impresionGuardas option[value='8']").length == 0)
- $("#impresionGuardas").append('' + window.Presupuestos.dosCaras + ' ');
-
- }
-}
-
-
-$('.calcular-presupuesto').on('change', function () {
-
- // se obtiene el id del elemento que ha disparado el evento
- if($(this).hasClass('input-sobrecubierta')){
- if($('#papelSobrecubierta option:selected').val() == '' || $('#gramajeSobrecubierta option:selected').val() == ''){
- return;
- }
- }
- calcularPresupuesto();
-});
-
-function comprobarTiradasPOD(){
- const tiradas = getTiradas();
-
- //Comprobar que todos los elementos del array tiradas estan por encima de 30 o por debajo
- const tiradasPOD = tiradas.every(tirada => tirada <= 30);
- const tiradasNoPOD = tiradas.every(tirada => tirada > 30);
- if (tiradasPOD == !tiradasNoPOD) {
- return true;
- }
- return false;
-}
-
-$('#clienteId').on('select2:change', function () {
- calcularPresupuesto();
-});
-
-
-async function calcularPresupuesto() {
-
- let isColor = false;
- if($('#colorColorDiv').hasClass('checked') || $('#colorColorHqDiv').hasClass('checked'))
- isColor = true;
- let isHq = false;
- if($('#colorNegroHqDiv').hasClass('checked') || $('#colorColorHqDiv').hasClass('checked'))
- isHq = true;
-
- if(!comprobarTiradasPOD()){
- $('#errorTiradas').show();
- return;
- }
- $('#errorTiradas').hide();
-
- // se obtiene la propiedad serv_id de los checkboxes seleccionados de la clase .servicio-extra
- if (!checkValues()) {
- return;
- }
-
- let servicios = [];
- $('.servicio-extra:checked').each(function () {
- servicios.push($(this).attr('serv_id'));
- })
-
- let datos = {
- tamanio: getDimensionLibro(),
- tirada: getTiradas(),
- paginas: $('#paginas').val(),
- paginasColor: $('#paginasColor').val(),
- tipo: $('.custom-option-tipo.checked').attr('id').replace('Div', ''),
- tapa: $('#tapaDura').is(':checked') ? 'dura' : 'blanda',
- isColor: isColor ? 1 : 0,
- isHq: isHq ? 1 : 0,
- papelInterior: $('#papelInterior option:selected').val(),
- papelInteriorNombre: $('#papelInterior option:selected').text().trim(),
- gramajeInterior: $('#gramajeInterior option:selected').text(),
- excluirRotativa: $('#excluirRotativa').is(':checked')? 1 : 0,
- papelCubierta: $('#papelCubierta option:selected').val(),
- papelCubiertaNombre: $('#papelCubierta option:selected').text().trim(),
- gramajeCubierta: $('#gramajeCubierta option:selected').text(),
- carasCubierta: $('#carasCubierta').val(),
- acabadoCubierta: $('#acabadosCubierta').val(),
- clienteId: $('#clienteId').val(),
- servicios: servicios,
- }
-
- // Si es cosido, se añade el número de páginas del cuadernillo
- if ($('#cosidoDiv').hasClass('checked')) {
- datos.paginasCuadernillo = $('#paginasCuadernillo').val();
- }
- // Si hay solapas de cubierta
- if ($('#solapasCubierta').is(':checked')) {
- datos.solapasCubierta = $('#anchoSolapasCubierta').val()
- }
-
-
-
- // Si hay sobrecubierta
- if ($('#enableSobrecubierta').is(':checked')) {
- if($('#papelSobrecubierta option:selected').val()>0 && $('#gramajeSobrecubierta option:selected').val()>0){
-
- datos.sobrecubierta = {
- papel: $('#papelSobrecubierta option:selected').val(),
- papel_nombre: $('#papelSobrecubierta option:selected').text().trim(),
- gramaje: $('#gramajeSobrecubierta option:selected').text(),
- acabado: $('#acabadosSobrecubierta').val()
- }
-
- datos.sobrecubierta.solapas = $('#anchoSolapasSobrecubierta').val()
- }
- }
-
- if ($('#divGuardas').is(':visible')) {
- datos.guardas = {
- papel: $('#papelGuardas option:selected').val(),
- papel_nombre: $('#papelGuardas option:selected').text().trim(),
- gramaje: 170,
- caras: $('#impresionGuardas option:selected').val()
- }
- }
-
- datos = Object.assign(datos, window.token_ajax)
-
- $('.divTiradasPrecio').empty();
- $('#loader').show();
-
- $.ajax({
- url: window.routes_disenio_libro.presupuestoCliente,
- type: 'POST',
- data: datos,
- success: function (response) {
- error = false;
- $('#errorGeneral').hide();
- try{
-
-
- if(response.errors.interior.length > 0){
- $('#errorInterior').show();
- error = true;
- }
- else
- $('#errorInterior').hide();
- if(response.errors.cubierta.length > 0){
- $('#errorCubierta').show();
- error = true;
- }
- else
- $('#errorCubierta').hide();
-
- if(response.errors.sobrecubierta.length > 0){
- $('#errorSobrecubierta').show();
- error = true;
- }
- else
- $('#errorSobrecubierta').hide();
-
-
- if(response.errors.guardas.length > 0){
- $('#errorGuardas').show();
- error = true;
- }
- else
- $('#errorGuardas').hide();
-
- if(response.errors.servicios.length > 0 || response.errors.serviciosDefecto.length > 0){
- error = true;
- $('#errorGeneral').show();
- }
- else{
- $('#errorGeneral').hide();
- }
- }
- catch(error){
- }
-
- //For debug only
- //console.log(response);
-
- $('#loader').hide();
-
- $('.divTiradasPrecio').empty();
-
- if(!error){
-
- $('#lomo_cubierta').val(response.info.lomo_cubierta);
-
- $('#precios').show();
-
- if(response.tiradas){
- for (i = 0; i < response.tiradas.length; i++) {
- const total = (parseFloat(response.precio_u[i]) * parseInt(response.tiradas[i])).toFixed(2) ;
- const label = "tiradaPrecio" + parseInt(i+1);
-
- let html = '';
-
- html += '';
-
- $('.divTiradasPrecio').append(html);
- }
- }
-
- if($('#resumen-libro').hasClass('active')) {
- initDirecciones();
- initTiradasDirecciones();
- generarResumen();
- previewEsquemaCubierta(true);
- }
-
- }
- },
- error: function (error) {
- $('#loader').hide();
- $('.divTiradasPrecio').empty();
- }
- });
-}
\ No newline at end of file
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_direcciones.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_direcciones.php
index 67af53db..a35d6b5e 100644
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_direcciones.php
+++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_direcciones.php
@@ -13,7 +13,15 @@
-
+
+
+
+ = lang('Presupuestos.recogerEnTaller') ?>
+
+
+
+
Mis direcciones
@@ -36,7 +44,7 @@
-
+
-
+
- Nueva Dirección
+ Nueva
+ Dirección
-
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioCubierta.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioCubierta.php
index 5b242bca..705495f1 100644
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioCubierta.php
+++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioCubierta.php
@@ -171,46 +171,12 @@
-
-
- = lang('Presupuestos.plastificado') ?>
-
-
- = lang('Presupuestos.sinPlastificar') ?>
- = lang('Presupuestos.brillo') ?>
- = lang('Presupuestos.mate') ?>
- = lang('Presupuestos.antirrayado') ?>
- = lang('Presupuestos.rugoso') ?>
-
-
-
-
-
- = lang('Presupuestos.barniz') ?>
-
-
- -
- = lang('Presupuestos.relieve2D') ?>
- = lang('Presupuestos.relieve3D') ?>
-
-
- = lang('Presupuestos.barnizDescription') ?>
-
-
-
-
-
- = lang('Presupuestos.estampado') ?>
-
-
- -
- = lang('Presupuestos.oro') ?>
- = lang('Presupuestos.plata') ?>
- = lang('Presupuestos.cobre') ?>
- = lang('Presupuestos.bronce') ?>
+
+
+
"
@@ -230,11 +196,11 @@
Extras
-
+
-
+
-
+
-
+
- = lang('Presupuestos.plastificadoSobrecubierta') ?>
+ = lang('Presupuestos.acabado') ?>
-
- Sin plastificar
- = lang('Presupuestos.brillo') ?>
- = lang('Presupuestos.mate') ?>
- = lang('Presupuestos.antirrayado') ?>
+
-
-
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 a0ef0448..c1098b6f 100644
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/loader.php
+++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/loader.php
@@ -1,4 +1,4 @@
-
+
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/presupuestoCliente.js b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/presupuestoCliente.js
deleted file mode 100644
index 6c79f0ee..00000000
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/presupuestoCliente.js
+++ /dev/null
@@ -1,356 +0,0 @@
-/**
- * Cliente presupuesto Wizard
- */
-
-'use strict';
-
-(function () {
-
-
- // Init custom option check
- //window.Helpers.initCustomOptionCheck();
- // Vertical Wizard
- // --------------------------------------------------------------------
-
- const clientePresupuestoWizard = document.querySelector('#wizard-presupuesto-cliente');
- if (typeof clientePresupuestoWizard !== undefined && clientePresupuestoWizard !== null ) {
- // Wizard form
- const clientePresupuestoWizardForm = clientePresupuestoWizard.querySelector('#presupuesto-cliente-form');
- // Wizard steps
- const clientePresupuestoWizardFormStep2 = clientePresupuestoWizardForm.querySelector('#tipo-libro');
- const clientePresupuestoWizardFormStep3 = clientePresupuestoWizardForm.querySelector('#disenio-libro');
- const clientePresupuestoWizardFormStep4 = clientePresupuestoWizardForm.querySelector('#direcciones-libro');
- const clientePresupuestoWizardFormStep5 = clientePresupuestoWizardForm.querySelector('#resumen-libro');
- // Wizard next prev button
- const clientePresupuestoWizardNext = [].slice.call(clientePresupuestoWizardForm.querySelectorAll('.btn-next'));
- const clientePresupuestoWizardPrev = [].slice.call(clientePresupuestoWizardForm.querySelectorAll('.btn-prev'));
-
- let FormValidation2;
- let FormValidation3;
- let FormValidation4;
- let FormValidation5;
-
- let validationStepper = new Stepper(clientePresupuestoWizard, {
- linear: true
- });
-
- if(clientePresupuestoWizardFormStep2 != null) {
- // select2 (clienteId)
- const clienteId = $('#clienteId');
-
- clienteId.on('change.select2', function () {
- // Revalidate the clienteId field when an option is chosen
- FormValidation2.revalidateField('clienteId');
- });
-
- // Deal Details
- FormValidation2 = FormValidation.formValidation(clientePresupuestoWizardFormStep2, {
- fields: {
- },
- plugins: {
- trigger: new FormValidation.plugins.Trigger(),
- bootstrap5: new FormValidation.plugins.Bootstrap5({
- // Use this for enabling/changing valid/invalid class
- // eleInvalidClass: '',
- eleValidClass: '',
- rowSelector: '.col-sm-3'
- }),
- autoFocus: new FormValidation.plugins.AutoFocus(),
- submitButton: new FormValidation.plugins.SubmitButton()
- }
- }).on('core.form.valid', function () {
- // Jump to the next step when all fields in the current step are valid
- validationStepper.next();
- });
-
-
- // Deal Usage
- FormValidation3 = FormValidation.formValidation(clientePresupuestoWizardFormStep3, {
- fields: {
- titulo: {
- validators: {
- notEmpty: {
- message: window.Presupuestos.validation.requerido_short
- },
- }
- },
- clienteId: {
- validators: {
- callback: {
- message: window.Presupuestos.validation.cliente,
- callback: function (input) {
- // Get the selected options
- const options = $("#clienteId").select2('data');
- const hasValidOption = options.some(option => parseInt(option.id) > 0);
- return options !== null && options.length > 0 && hasValidOption;
- },
- }
- }
- },
- tirada: {
- validators: {
- callback: {
- message: window.Presupuestos.validation.integer_greatherThan_0,
- callback: function (input) {
- const value = $("#tirada").val();
- return value.length > 0 && Number.isInteger(parseInt(value)) && parseInt(value) > 0;
- },
- }
- }
- },
- paginas: {
- validators: {
- callback: {
- message: window.Presupuestos.validation.integer_greatherThan_0,
- callback: function (input) {
- const value = $("#paginas").val();
- return value.length > 0 && Number.isInteger(parseInt(value)) && parseInt(value) > 0;
- },
- }
- }
- },
- paginasColor: {
- validators: {
- callback: {
- message: window.Presupuestos.validation.integer_greatherThan_0,
- callback: function (input) {
- if ($('#pagColorDiv').is(':hidden'))
- return true;
- else {
- const value = $("#paginasColor").val();
- return value.length > 0 && Number.isInteger(parseInt(value)) && parseInt(value) > 0;
- }
- },
- }
- }
- },
- gramajeInterior: {
- validators: {
- callback: {
- callback: function (input) {
- const value = $("#tirada").val();
- if ($('#gramajeInterior option:selected').text().length == 0) {
- if(value.length > 0 && Number.isInteger(parseInt(value)) && parseInt(value) > 0){
- return {
- valid: false,
- message: window.Presupuestos.validation.sin_gramaje,
- }
- }
- return {
- valid: value.length > 0 && Number.isInteger(parseInt(value)) && parseInt(value) > 0,
- message: window.Presupuestos.validation.tirada_no_valida,
- }
- }
- return true;
- },
- },
- }
- },
- gramajeCubierta: {
- validators: {
- callback: {
- message: window.Presupuestos.validation.tirada_no_valida,
- callback: function (input) {
- const value = $("#tirada").val();
- if ($('#gramajeCubierta option:selected').text().length == 0) {
- return value.length > 0 && Number.isInteger(parseInt(value)) && parseInt(value) > 0;
- }
- return true;
- },
- },
- callback: {
- message: window.Presupuestos.validation.sin_gramaje,
- callback: function (input) {
- if ($('#gramajeCubierta option:selected').text().length == 0) {
- return false;
- }
- return true;
- },
- }
- }
- },
- gramajeSobrecubierta: {
- validators: {
- callback: {
- message: window.Presupuestos.validation.tirada_no_valida,
- callback: function (input) {
- const value = $("#tirada").val();
- if ($('#gramajeSobrecubierta option:selected').text().length == 0) {
- return value.length > 0 && Number.isInteger(parseInt(value)) && parseInt(value) > 0;
- }
- return true;
- },
- }
- }
- },
- },
- plugins: {
- trigger: new FormValidation.plugins.Trigger(),
- bootstrap5: new FormValidation.plugins.Bootstrap5({
- // Use this for enabling/changing valid/invalid class
- // eleInvalidClass: '',
- eleValidClass: '',
- rowSelector: function (field, ele) {
- // field is the field name
- // ele is the field element
- switch (field) {
- case 'gramajeInterior':
- case 'gramajeCubierta':
- case 'gramajeSobrecubierta':
- return '.col-sm-2';
-
- case 'titulo':
- return '.col-sm-12';
-
- case 'clienteId':
- return '.col-sm-6';
-
- default:
- return '.col-sm-3';
- }
- }
- }),
- autoFocus: new FormValidation.plugins.AutoFocus(),
- submitButton: new FormValidation.plugins.SubmitButton()
- }
- }).on('core.form.valid', function () {
- if($('#tiradaPrecio1').length > 0) {
- validationStepper.next();
- initDirecciones();
- initTiradasDirecciones();
- }
- });
-
- const tirada = $('#tirada');
- tirada.on('change', function () {
- // Revalidate the clienteId field when an option is chosen
- FormValidation2.revalidateField('gramajeInterior');
- FormValidation2.revalidateField('gramajeCubierta');
- FormValidation2.revalidateField('gramajeSobrecubierta');
- });
-
- // Direcciones
- FormValidation4 = FormValidation.formValidation(clientePresupuestoWizardFormStep4, {
- fields: {
-
- },
- plugins: {
- trigger: new FormValidation.plugins.Trigger(),
- bootstrap5: new FormValidation.plugins.Bootstrap5({
- // Use this for enabling/changing valid/invalid class
- // eleInvalidClass: '',
- eleValidClass: '',
- rowSelector: '.col-md-12'
- }),
- autoFocus: new FormValidation.plugins.AutoFocus(),
- submitButton: new FormValidation.plugins.SubmitButton()
- }
- }).on('core.form.valid', function () {
- if(validarEnvio()){
- generarResumen();
- validationStepper.next();
- }
- else{
- let text = "El número de unidades enviadas no coincie con la tirada seleccionada.";
- if($('#prototipo').is(':checked')) {
- text += "
(Tenga en cuenta que se ha seleccionado la opción de prototipo)";
- }
- $('#errorDirecciones').text(text);
- $('#errorDirecciones').show();
- }
- });
- }
- // Deal Usage
- FormValidation5 = FormValidation.formValidation(clientePresupuestoWizardFormStep5, {
- fields: {
- // * Validate the fields here based on your requirements
- },
- plugins: {
- trigger: new FormValidation.plugins.Trigger(),
- bootstrap5: new FormValidation.plugins.Bootstrap5({
- // Use this for enabling/changing valid/invalid class
- // eleInvalidClass: '',
- eleValidClass: '',
- rowSelector: '.col-md-12'
- }),
- autoFocus: new FormValidation.plugins.AutoFocus(),
- submitButton: new FormValidation.plugins.SubmitButton()
- }
- }).on('core.form.valid', function () {
- // You can submit the form
- // clientePresupuestoWizardForm.submit()
- // or send the form data to server via an Ajax request
- // To make the demo simple, I just placed an alert
- //alert('Submitted..!!');
- });
-
- clientePresupuestoWizardNext.forEach(item => {
- item.addEventListener('click', event => {
- // When click the Next button, we will validate the current step
- switch (validationStepper._currentIndex) {
- case 0:
- FormValidation2.validate();
- break;
-
- case 1:
- FormValidation3.validate();
- break;
-
- case 2:
- FormValidation4.validate();
- break;
-
- case 3:
- FormValidation5.validate();
- break;
-
- default:
- validationStepper.next();
- break;
- }
- });
- });
-
- clientePresupuestoWizardPrev.forEach(item => {
- item.addEventListener('click', event => {
- switch (validationStepper._currentIndex) {
- case 4:
- validationStepper.previous();
- break;
-
- case 3:
- validationStepper.previous();
- break;
-
- case 2:
- for (let i = 0; i < 4; i++) {
- let id = "tiradaPrecio" + i;
- if ($('#' + id).length > 0) {
- $('#' + id).show();
- }
- }
- validationStepper.previous();
- break;
-
- case 1:
- validationStepper.previous();
- break;
-
- case 0:
- window.location.href = document.location.origin + '/presupuestocliente/list';
-
- default:
- break;
- }
- });
- });
-
- var url = $(location).attr('href'); // Obtener URL actual
- if (url.includes('/edit/')) { // Comprobar si la URL contiene 'edit'
- validationStepper.to(4);
- }
-
- }
-})();
-
-
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/resumen.js b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/resumen.js
deleted file mode 100644
index 956eb8fa..00000000
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/resumen.js
+++ /dev/null
@@ -1,311 +0,0 @@
-function generarResumen(){
- $('#tipoLibro').text($('#tituloDisenioLibro').text() + ' tapa ' + (($('#tapaBlandaInnerDiv').hasClass('checked'))?'blanda':'dura'));
- $('#resumenTamanio').text('Dimensiones: ' + getDimensionLibro().ancho + 'x' + getDimensionLibro().alto + 'mm');
- $('#resumenPaginas').text('Páginas: '+ $('#paginas').val() + ' páginas');
-
- const seleccion = $('.custom-option-tiradasDirecciones.checked');
- let tirada = 0;
- if(seleccion.length != 0) {
-
- const element_tirada =($(seleccion[0]).find('label input')[0]);
- const number = element_tirada.id.match(/\d+$/);
- if (number.length != 0) {
- tirada = parseInt($('#tiradaDireccionesValue' + number[0]).text());
- }
- }
- $('#resumenTirada').text('Tirada: '+ tirada + ' unidades');
-
- $('#resumenPrototipo').text('Prototipo: ' + (($('#prototipo').is(':checked'))?'Sí':'No'));
- $('#resumenFerro').text('Ferro: ' + (($('#ferro').is(':checked'))?'Sí':'No'));
-
- $('#tipoImpresion').text('Impresión: ' +
- ($('#colorNegroDiv').hasClass('checked')?'Negro estándar':
- $('#colorNegroHqDiv').hasClass('checked')?'Negro premium':
- $('#colorColorDiv').hasClass('checked')?'Color estándar':'Color premium'));
-
- if($('#colorNegroDiv').hasClass('checked') || $('#colorNegroHqDiv').hasClass('checked')){
- $('#pResumenPaginasColor').hide();
- }
- else{
- $('#pResumenPaginasColor').show();
- $('#resumenPaginasColor').text($('#paginasColor').val());
- }
- $('#resumenPapelInterior').text($('#papelInterior option:selected').text().trim() + ' ' +
- $('#gramajeInterior option:selected').text() + 'gr/m²');
-
- let papelCubierta = $('#papelCubierta option:selected').text().trim() + ' ' +
- $('#gramajeCubierta option:selected').text();
- papelCubierta += 'gr/m²';
- $('#resumenPapelCubierta').text(papelCubierta);
- $('#resumenCarasCubierta').text('Impresión: ' + $('#carasCubierta option:selected').text())
- $('#resumenAcabadoCubierta').text('Acabado: ' + $('#acabadosCubierta option:selected').text())
- if ($('#solapasCubierta').is(':checked')) {
- $('#resumenSolapasCubierta').text('Solapas: ' + $('#anchoSolapasCubierta').val())
- }
- else{
- $('#resumenSolapasCubierta').text('Solapas: No')
- }
-
- if ($('#enableSobrecubierta').is(':checked')) {
- $(".resumen-sobrecubierta").show();
- $('#resumenPapelCubierta').text($('#papelSobrecubierta option:selected').text().trim() + ' ' +
- $('#gramajeSobrecubierta option:selected').text() + 'gr/m²');
- $('#resumenAcabadoSobrecubierta').text('Acabado: ' + $('#acabadosSobrecubierta option:selected').text())
- $('#resumenSolapasSobrecubierta').text('Solapas: ' + $('#anchoSolapasSobrecubierta').val())
-
- }
- else{
- $(".resumen-sobrecubierta").hide();
- }
-
- if ($('#divGuardas').css('display') != 'none') {
-
- $(".resumen-guardas").show();
- $('#resumenGuardasPapel').text($('#papelGuardas option:selected').text().trim() + ' ' + '170gr/m²');
- $('#resumenGuardasCaras').text('Impresión: ' + $('#impresionGuardas option:selected').text())
- }
- else{
- $(".resumen-guardas").hide();
- }
-
-
- if($('#retractilado').is(':checked') || $('#retractilado5').is(':checked') || $('#fajaColor').is(':checked')){
-
- $('.resumen-extras').show();
- $('#retractilado').is(':checked')?$('#resumenRetractilado1').show():$('#resumenRetractilado1').hide();
- $('#retractilado5').is(':checked')?$('#resumenRetractilado5').show():$('#resumenRetractilado5').hide();
- $('#fajaColor').is(':checked')?$('#resumenFajaColor').show():$('#resumenFajaColor').hide();
- }
- else{
- $('.resumen-extras').hide();
- }
-
- for (i = 1; i <= 4; i++) {
- let id = "tiradaPrecio" + i;
- if ($('#' + id).length > 0) {
-
- const envio = getTotalEnvio();
-
- let tirada_id = "ud_tiradaPrecio" + i;
- if(parseInt($('#' + tirada_id).text().replace(' ud.', '')) != tirada){
- continue;
- }
-
- let total_id = "tot_tiradaPrecio" + i;
-
- let total = parseFloat($('#' + total_id).text().replace('€', '').replace('Total: ', '')) + envio;
- let total_iva = 0.0;
- if($('#ivaReducido').val() == '1'){
- total_iva = total * 1.04;
- }
- else{
- total_iva = total * 1.21;
- }
- const precio_u = total_iva/tirada;
- $('#resumenTotalIVA').text('Total (I.V.A. ' + (($('#ivaReducido').val() == '1')?'4':'21') + '%): ' + total_iva.toFixed(2) + '€');
- $('#resumenPrecioU').text(precio_u.toFixed(4) + '€/ud');
- }
- }
-
-
-}
-
-function getTotalEnvio(){
- const elements = $('#divDirecciones').find('.row.mb-3');
- let total = 0.0;
-
- if(elements.length > 0) {
- for (let index=0; index
path !== "");
- let id=0;
- if(paths.length > 0 && paths[paths.length - 2] == 'edit'){
- id=paths[paths.length - 1];
- }
- datos = {
- id: id,
- }
- datos = Object.assign(datos, window.token_ajax)
-
- $('#loader').show();
-
- $.ajax({
- url: window.routes_resumen.duplicarPresupuesto,
- type: 'POST',
- data: datos,
- success: function(response) {
-
- if(Object.keys(response).length > 0) {
- if(response.success){
- $('#loader').hide();
- window.location.href = document.location.origin + '/presupuestos/presupuestocliente/edit/' + response.id;
- }
- }
- $('#loader').hide();
-
- },
- error: function() {
- $('#loader').hide();
- },
- });
-});
-
-
-$('#btnBack').on('click', function() {
- window.location.href = document.location.origin + '/presupuestocliente/list';
-});
-
-function finalizarPresupuesto(confirmar){
-
- let isColor = false;
- if($('#colorColorDiv').hasClass('checked') || $('#colorColorHqDiv').hasClass('checked'))
- isColor = true;
- let isHq = false;
- if($('#colorNegroDiv').hasClass('checked') || $('#colorColorHqDiv').hasClass('checked'))
- isHq = true;
-
- const paths = window.location.pathname.split("/").filter(path => path !== "");
- let id=0;
- if(paths.length > 0 && paths[paths.length - 2] == 'edit'){
- id=paths[paths.length - 1];
- }
-
- let servicios = [];
- $('.servicio-extra:checked').each(function () {
- servicios.push($(this).attr('serv_id'));
- })
-
- let datos_libro = {
- tamanio: getDimensionLibro(),
- tirada: getTiradas(),
- paginas: $('#paginas').val(),
- paginasColor: $('#paginasColor').val(),
- tipo: $('.custom-option-tipo.checked').attr('id').replace('Div', ''),
- tapa: $('#tapaDura').is(':checked') ? 'dura' : 'blanda',
- isColor: isColor,
- isHq: isHq,
- papelInterior: $('#papelInterior option:selected').val(),
- papelInteriorNombre: $('#papelInterior option:selected').text().trim(),
- gramajeInterior: $('#gramajeInterior option:selected').text(),
- excluirRotativa: $('#excluirRotativa').is(':checked')? 1 : 0,
- papelCubierta: $('#papelCubierta option:selected').val(),
- papelCubiertaNombre: $('#papelCubierta option:selected').text().trim(),
- gramajeCubierta: $('#gramajeCubierta option:selected').text(),
- carasCubierta: $('#carasCubierta').val(),
- acabadoCubierta: $('#acabadosCubierta').val(),
- clienteId: $('#clienteId').val(),
- servicios: servicios,
- };
-
- // Si es cosido, se añade el número de páginas del cuadernillo
- if ($('#cosidoDiv').hasClass('checked')) {
- datos_libro.paginasCuadernillo = $('#paginasCuadernillo').val();
- }
-
- // Si hay solapas de cubierta
- if ($('#solapasCubierta').is(':checked')) {
- datos_libro.solapasCubierta = $('#anchoSolapasCubierta').val()
- }
-
- // Si hay sobrecubierta
- if ($('#enableSobrecubierta').is(':checked')) {
- if($('#papelSobrecubierta option:selected').val()>0 && $('#gramajeSobrecubierta option:selected').val()>0){
-
- datos_libro.sobrecubierta = {
- papel: $('#papelSobrecubierta option:selected').val(),
- papel_nombre: $('#papelSobrecubierta option:selected').text().trim(),
- gramaje: $('#gramajeSobrecubierta option:selected').text(),
- acabado: $('#acabadosSobrecubierta').val()
- }
-
- datos_libro.sobrecubierta.solapas = $('#anchoSolapasSobrecubierta').val()
- }
- }
-
- if ($('#divGuardas').css('display') != 'none') {
- datos_libro.guardas = {
- papel: $('#papelGuardas option:selected').val(),
- papel_nombre: $('#papelGuardas option:selected').text().trim(),
- gramaje: 170,
- caras: $('#impresionGuardas option:selected').val()
- }
- }
-
- let datos_cabecera = {
- titulo: $('#titulo').val(),
- referenciaCliente: $('#referenciaCliente').val(),
- }
-
- const seleccion = $('.custom-option-tiradasDirecciones.checked');
- let tirada = 0;
- let peso_libro = 0;
- if(seleccion.length != 0) {
-
- const element_tirada =($(seleccion[0]).find('label input')[0]);
- const number = element_tirada.id.match(/\d+$/);
- if (number.length != 0) {
- tirada = parseInt($('#tiradaDireccionesValue' + number[0]).text());
- peso_libro = ($(seleccion[0])).find('label input').attr('peso');
- }
- }
-
-
- let direcciones = getDireccionesEnvio();
- datos = {
- id: id,
- datos_libro : datos_libro,
- datos_cabecera: datos_cabecera,
- direcciones: direcciones,
- tirada: tirada,
- peso: peso_libro,
- iva_reducido: $('#ivaReducido').val()==1?1:0,
- confirmar: confirmar?1:0,
- },
-
- datos = Object.assign(datos, window.token_ajax)
-
- $('#loader').show();
-
- $.ajax({
- url: window.routes_resumen.guardarPresupuesto,
- type: 'POST',
- data: datos,
- success: function(response) {
-
- if(Object.keys(response).length > 0) {
- if(response.status > 0){
- if(confirmar || window.location.href.includes("add"))
- window.location.href = response.url + '/' + response.status;
- }
-
- }
- $('#loader').hide();
-
- },
- error: function() {
- $('#loader').hide();
- },
- });
-}
\ No newline at end of file
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/tipoLibroItems.js b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/tipoLibroItems.js
deleted file mode 100644
index 11ee90da..00000000
--- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/tipoLibroItems.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// Init custom option check
-function initTipoLibroCheck()
-{
- const _this = this
-
- const custopOptionList = [].slice.call(document.querySelectorAll('.custom-option-tipo .form-check-input'))
- custopOptionList.map(function (customOptionEL) {
- // Update custom options check on page load
- _this.updateTipoLibroCheck(customOptionEL)
-
- // Update custom options check on click
- customOptionEL.addEventListener('click', e => {
- _this.updateTipoLibroCheck(customOptionEL)
- })
- })
-}
-
-function updateTipoLibroCheck(el)
-{
- if (el.checked) {
- // If custom option element is radio, remove checked from the siblings (closest `.row`)
- if (el.type === 'radio') {
- const customRadioOptionList = [].slice.call(el.closest('.tipo_libro').querySelectorAll('.custom-option-tipo'))
- customRadioOptionList.map(function (customRadioOptionEL) {
- customRadioOptionEL.closest('.custom-option-tipo').classList.remove('checked')
- })
- }
- el.closest('.custom-option-tipo').classList.add('checked')
- if(el.closest('.custom-option-tipo').id == 'grapadoDiv') {
- $('#tapaDuraDiv').hide();
- $('#tapaBlanda').prop('checked', true);
- }
- else {
- $('#tapaDuraDiv').show();
- }
- if(el.closest('.custom-option-tipo').id == 'cosidoDiv') {
- $('#div_pagCuadernillo').show();
- }
- else {
- $('#div_pagCuadernillo').hide();
- }
- } else {
- el.closest('.custom-option-tipo').classList.remove('checked')
- }
-}
-
-initTipoLibroCheck();
-
-
-function getUpdatePapelInterior() {
- var impresionInterior = $('input[name="impresionInterior"]:checked').val();
- if(impresionInterior == 'color') {
- $('#colorInteriorDiv').show();
- }
- else {
- $('#colorInteriorDiv').hide();
- }
-}
diff --git a/ci4/app/Views/themes/vuexy/form/user/viewUserList.php b/ci4/app/Views/themes/vuexy/form/user/viewUserList.php
index b6adb138..e72c8c3f 100644
--- a/ci4/app/Views/themes/vuexy/form/user/viewUserList.php
+++ b/ci4/app/Views/themes/vuexy/form/user/viewUserList.php
@@ -1,5 +1,6 @@
-= $this->include('themes/_commonPartialsBs/datatables') ?>
+=$this->include('themes/_commonPartialsBs/datatables') ?>
= $this->extend('themes/vuexy/main/defaultlayout') ?>
+
= $this->section('content'); ?>
@@ -16,36 +17,16 @@
style="width: 100%;">
+ ID
= lang('Users.firstName') ?>
= lang('Users.lastName') ?>
= lang('Users.email') ?>
- = lang('Users.lastAccess') ?>
- = lang('Basic.global.Action') ?>
+ = lang('Users.cliente') ?>
+ = lang('Users.lastAccess') ?>
+ = lang('Basic.global.Action') ?>
-
-
-
- = empty($item->first_name) || strlen($item->first_name) < 51 ? esc($item->first_name) : character_limiter(esc($item->first_name), 50) ?>
-
-
- = empty($item->last_name) || strlen($item->last_name) < 51 ? esc($item->last_name) : character_limiter(esc($item->last_name), 50) ?>
-
-
- = empty(auth()->getProvider()->findById($item->id)->email) ? "" : character_limiter(esc(auth()->getProvider()->findById($item->id)->email), 50) ?>
-
-
- = empty($item->last_active) ? '' : date('d/m/Y H:m:s', strtotime($item->last_active)) ?>
-
-
-
- = anchor(route_to('editUser', $item->id), " ", ['class' => 'text-body', 'data-id' => $item->id,]); ?>
- = anchor('#confirm2delete', " ", ['class' => 'text-body', 'data-href' => route_to('deleteUser', $item->id), 'data-bs-toggle' => 'modal', 'data-bs-target' => '#confirm2delete']); ?>
-
-
-
-
@@ -56,4 +37,24 @@
-= $this->endSection() ?>
\ No newline at end of file
+= $this->endSection() ?>
+
+
+=$this->section('css') ?>
+ ">
+=$this->endSection() ?>
+
+= $this->section('additionalExternalJs') ?>
+
+
+
+
+
+
+
+
+
+
+
+
+=$this->endSection() ?>
diff --git a/httpdocs/assets/js/safekat/components/alerts/alert.js b/httpdocs/assets/js/safekat/components/alerts/alert.js
index ace6fde9..25595040 100644
--- a/httpdocs/assets/js/safekat/components/alerts/alert.js
+++ b/httpdocs/assets/js/safekat/components/alerts/alert.js
@@ -7,6 +7,8 @@ class Alert {
this.icon = this.item.find(".icon-alert")
this.iconSuccess = "ti-circle-check"
this.iconError = "ti-exclamation-mark"
+ this.iconInfo = "ti-question-mark"
+
@@ -14,6 +16,7 @@ class Alert {
setIcon(iconClass){
this.icon.removeClass(this.iconSuccess)
this.icon.removeClass(this.iconError)
+ this.icon.removeClass(this.iconInfo)
this.icon.addClass(iconClass)
}
setAsError() {
@@ -24,16 +27,25 @@ class Alert {
}
setAsSuccess() {
this.item.removeClass("alert-danger")
+ this.item.removeClass("alert-warning")
+ this.item.removeClass("alert-info")
this.item.addClass("alert-success")
this.setIcon(this.iconSuccess)
}
setAsWarning() {
this.item.removeClass("alert-success")
+ this.item.removeClass("alert-danger")
+ this.item.removeClass("alert-info")
this.item.addClass("alert-warning")
+ this.setIcon(this.iconError)
+
}
setAsInfo() {
- this.item.removeClass("alert-*")
+ this.item.removeClass("alert-success")
+ this.item.removeClass("alert-danger")
+ this.item.addClass("alert-warning")
this.item.addClass("alert-info")
+ this.setIcon(this.iconInfo)
}
show() {
this.item.removeClass("d-none")
@@ -48,6 +60,16 @@ class Alert {
this.body.append(content)
}
setErrors() { }
+ reset(){
+ this.item.removeClass("alert-success")
+ this.item.removeClass("alert-danger")
+ this.item.removeClass("alert-warning")
+ this.item.removeClass("alert-info")
+ this.item.setContent("")
+ this.item.setHeadingTitle("")
+ this.item.hide()
+
+ }
}
export default Alert;
\ No newline at end of file
diff --git a/httpdocs/assets/js/safekat/components/modalYesNo.js b/httpdocs/assets/js/safekat/components/modalYesNo.js
index 2a88cc59..d9531dcc 100644
--- a/httpdocs/assets/js/safekat/components/modalYesNo.js
+++ b/httpdocs/assets/js/safekat/components/modalYesNo.js
@@ -7,8 +7,10 @@ class ModalYesNo {
this.btnCancelId = alias !== "" ? `btnCancelModal-${alias}` : 'btnCancelModal';
this.btnConfirmId = alias !== "" ? `btnYesModal-${alias}` : 'btnYesModal';
+ this.callback = () => {};
+
this.modalHtml = `
-