mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
Merge branch 'main' into feat/ordenes-trabajo
This commit is contained in:
@ -394,6 +394,9 @@ $routes->group('clientes', ['namespace' => 'App\Controllers\Clientes'], function
|
|||||||
$routes->group('clienteprecios', ['namespace' => 'App\Controllers\Clientes'], function ($routes) {
|
$routes->group('clienteprecios', ['namespace' => 'App\Controllers\Clientes'], function ($routes) {
|
||||||
$routes->post('datatable', 'ClientePrecios::datatable', ['as' => 'dataTableOfClienteprecios']);
|
$routes->post('datatable', 'ClientePrecios::datatable', ['as' => 'dataTableOfClienteprecios']);
|
||||||
$routes->post('datatable_editor', 'ClientePrecios::datatable_editor', ['as' => 'editorOfClienteprecios']);
|
$routes->post('datatable_editor', 'ClientePrecios::datatable_editor', ['as' => 'editorOfClienteprecios']);
|
||||||
|
$routes->post('changeplantilla', 'ClientePrecios::updatePlantilla', ['as' => 'changePlantillaOfClienteprecios']);
|
||||||
|
$routes->get('getplantilla', 'ClientePrecios::getCurrentPlantilla', ['as' => 'getPlantillaOfClienteprecios']);
|
||||||
|
$routes->post('update', 'ClientePrecios::updatePlantilla', ['as' => 'updateClienteprecios']);
|
||||||
});
|
});
|
||||||
$routes->resource('clienteprecios', ['namespace' => 'App\Controllers\Clientes', 'controller' => 'ClientePrecios', 'except' => 'show,new,create,update']);
|
$routes->resource('clienteprecios', ['namespace' => 'App\Controllers\Clientes', 'controller' => 'ClientePrecios', 'except' => 'show,new,create,update']);
|
||||||
|
|
||||||
@ -403,11 +406,13 @@ $routes->group('clienteplantillaprecios', ['namespace' => 'App\Controllers\Clien
|
|||||||
$routes->get('add', 'Clienteplantillaprecios::add', ['as' => 'newClienteplantillaprecios']);
|
$routes->get('add', 'Clienteplantillaprecios::add', ['as' => 'newClienteplantillaprecios']);
|
||||||
$routes->post('add', 'Clienteplantillaprecios::add', ['as' => 'createClienteplantillaprecios']);
|
$routes->post('add', 'Clienteplantillaprecios::add', ['as' => 'createClienteplantillaprecios']);
|
||||||
$routes->post('edit/(:num)', 'Clienteplantillaprecios::edit/$1', ['as' => 'updateClienteplantillaprecios']);
|
$routes->post('edit/(:num)', 'Clienteplantillaprecios::edit/$1', ['as' => 'updateClienteplantillaprecios']);
|
||||||
|
$routes->get('edit/(:num)', 'Clienteplantillaprecios::edit/$1', ['as' => 'updateClienteplantillaprecios']);
|
||||||
$routes->get('delete/(:num)', 'Clienteplantillaprecios::delete/$1', ['as' => 'deleteClienteplantillaprecios']);
|
$routes->get('delete/(:num)', 'Clienteplantillaprecios::delete/$1', ['as' => 'deleteClienteplantillaprecios']);
|
||||||
$routes->post('datatable', 'Clienteplantillaprecios::datatable', ['as' => 'dataTableOfClientesplantillaprecios']);
|
$routes->post('datatable', 'Clienteplantillaprecios::datatable', ['as' => 'dataTableOfClientesplantillaprecios']);
|
||||||
$routes->post('menuitems', 'Clienteplantillaprecios::menuItems', ['as' => 'menuItemsOfClienteplantillaprecios']);
|
$routes->get('menuitems', 'Clienteplantillaprecios::menuItems', ['as' => 'menuItemsOfClienteplantillaprecios']);
|
||||||
|
$routes->post('update/(:num)', 'Clienteplantillaprecios::update/$1', ['as' => 'updateClienteplantillaprecios']);
|
||||||
});
|
});
|
||||||
$routes->resource('clienteplantillaprecios', ['namespace' => 'App\Controllers\Clientes', 'controller' => 'Clienteplantillaprecios', 'except' => 'show,new,create,update']);
|
$routes->resource('clienteplantillaprecios', ['namespace' => 'App\Controllers\Clientes', 'controller' => 'Clienteplantillaprecios', 'except' => 'show,new,create']);
|
||||||
|
|
||||||
|
|
||||||
$routes->group('clienteplantillaprecioslineas', ['namespace' => 'App\Controllers\Clientes'], function ($routes) {
|
$routes->group('clienteplantillaprecioslineas', ['namespace' => 'App\Controllers\Clientes'], function ($routes) {
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
<?php namespace App\Controllers\Clientes;
|
<?php
|
||||||
|
namespace App\Controllers\Clientes;
|
||||||
|
|
||||||
|
|
||||||
use App\Controllers\BaseResourceController;
|
use App\Controllers\BaseResourceController;
|
||||||
@ -45,40 +46,36 @@ class ClientePrecios extends \App\Controllers\BaseResourceController
|
|||||||
parent::initController($request, $response, $logger);
|
parent::initController($request, $response, $logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function update($requestedId = null)
|
public function updatePlantilla()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
if ($this->request->getPost()) :
|
if ($this->request->isAJAX()) {
|
||||||
|
|
||||||
if ($requestedId == null) :
|
|
||||||
return;
|
|
||||||
endif;
|
|
||||||
|
|
||||||
$postData = $this->request->getJSON();
|
$postData = $this->request->getPost();
|
||||||
|
|
||||||
|
$cliente_id = $postData['cliente_id'] ?? -1;
|
||||||
|
$plantilla_id = $postData['plantilla_id'] ?? -1;
|
||||||
|
|
||||||
$plantilla_id = $postData->plantilla_id ?? -1;
|
|
||||||
|
|
||||||
// Se ha actualizado un registro por lo que no es una plantilla
|
// Se ha actualizado un registro por lo que no es una plantilla
|
||||||
if($plantilla_id == -1){
|
if ($plantilla_id == -1) {
|
||||||
$this->model->clean_plantilla_id($requestedId);
|
$this->model->clean_plantilla_id($cliente_id);
|
||||||
}
|
} else if ($cliente_id == -1) { // actualizar todos los clientes que usan una plantilla
|
||||||
else if($requestedId== -1){ // actualizar todos los clientes que usan una plantilla
|
|
||||||
$this->model->update_from_plantilla($plantilla_id);
|
$this->model->update_from_plantilla($plantilla_id);
|
||||||
|
} else {
|
||||||
|
$this->model->copy_from_plantilla($cliente_id, $plantilla_id);
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
$this->model->copy_from_plantilla($requestedId, $plantilla_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
$newTokenHash = csrf_hash();
|
$newTokenHash = csrf_hash();
|
||||||
$csrfTokenName = csrf_token();
|
$csrfTokenName = csrf_token();
|
||||||
$data = [
|
$data = [
|
||||||
$csrfTokenName => $newTokenHash
|
$csrfTokenName => $newTokenHash
|
||||||
];
|
];
|
||||||
|
|
||||||
return $this->respond($data);
|
return $this->respond($data);
|
||||||
|
|
||||||
endif; // ($requestMethod === 'post')
|
} else {
|
||||||
|
return $this->failUnauthorized('Invalid request', 403);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -93,92 +90,114 @@ class ClientePrecios extends \App\Controllers\BaseResourceController
|
|||||||
}
|
}
|
||||||
$start = $reqData['start'] ?? 0;
|
$start = $reqData['start'] ?? 0;
|
||||||
$length = $reqData['length'] ?? 5;
|
$length = $reqData['length'] ?? 5;
|
||||||
$requestedOrder = $reqData['order']['0']['column'] ?? 0;
|
|
||||||
$requestedOrder2 = $reqData['order']['1']['column'] ?? $requestedOrder;
|
$requestedOrder = $reqData['order'] ?? [];
|
||||||
$requestedOrder3 = $reqData['order']['2']['column'] ?? $requestedOrder;
|
|
||||||
$requestedOrder4 = $reqData['order']['3']['column'] ?? $requestedOrder;
|
$searchValues = get_filter_datatables_columns($reqData);
|
||||||
$requestedOrder5 = $reqData['order']['4']['column'] ?? $requestedOrder;
|
|
||||||
$order = ClientePreciosModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 0];
|
|
||||||
$order2 = ClientePreciosModel::SORTABLE[$requestedOrder2 >= 0 ? $requestedOrder2 : $requestedOrder];
|
|
||||||
$order3 = ClientePreciosModel::SORTABLE[$requestedOrder3 >= 0 ? $requestedOrder3 : $requestedOrder];
|
|
||||||
$order4 = ClientePreciosModel::SORTABLE[$requestedOrder4 >= 0 ? $requestedOrder4 : $requestedOrder];
|
|
||||||
$order5 = ClientePreciosModel::SORTABLE[$requestedOrder4 >= 0 ? $requestedOrder5 : $requestedOrder];
|
|
||||||
$dir = $reqData['order']['0']['dir'] ?? 'asc';
|
|
||||||
$dir2 = $reqData['order']['1']['dir'] ?? $dir;
|
|
||||||
$dir3 = $reqData['order']['2']['dir'] ?? $dir;
|
|
||||||
$dir4= $reqData['order']['3']['dir'] ?? $dir;
|
|
||||||
$dir5= $reqData['order']['4']['dir'] ?? $dir;
|
|
||||||
|
|
||||||
$cliente_id = $reqData['cliente_id'] ?? 0;
|
$cliente_id = $reqData['cliente_id'] ?? 0;
|
||||||
|
|
||||||
$resourceData = $this->model->getResource($cliente_id)
|
$resourceData = $this->model->getResource($searchValues, $cliente_id);
|
||||||
->orderBy($order, $dir)->orderBy($order2, $dir2)->orderBy($order3, $dir3)->orderBy($order4, $dir4)->orderBy($order5, $dir5)
|
foreach ($requestedOrder as $order) {
|
||||||
->limit($length, $start)->get()->getResultObject();
|
$column = $order['column'] ?? 0;
|
||||||
|
$dir = $order['dir'] ?? 'asc';
|
||||||
|
$orderColumn = ClientePreciosModel::SORTABLE[$column] ?? null;
|
||||||
|
if ($orderColumn) {
|
||||||
|
$resourceData->orderBy($orderColumn, $dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$resourceData = $resourceData->limit($length, $start)->get()->getResultObject();
|
||||||
|
|
||||||
return $this->respond(Collection::datatable(
|
return $this->respond(Collection::datatable(
|
||||||
$resourceData,
|
$resourceData,
|
||||||
$this->model->getResource($cliente_id)->countAllResults(),
|
$this->model->getResource($searchValues, $cliente_id)->countAllResults(),
|
||||||
$this->model->getResource($cliente_id)->countAllResults()
|
$this->model->getResource($searchValues, $cliente_id)->countAllResults()
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
return $this->failUnauthorized('Invalid request', 403);
|
return $this->failUnauthorized('Invalid request', 403);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function datatable_editor() {
|
public function datatable_editor()
|
||||||
|
{
|
||||||
if ($this->request->isAJAX()) {
|
if ($this->request->isAJAX()) {
|
||||||
|
|
||||||
include(APPPATH . "ThirdParty/DatatablesEditor/DataTables.php");
|
include(APPPATH . "ThirdParty/DatatablesEditor/DataTables.php");
|
||||||
|
|
||||||
|
|
||||||
// Build our Editor instance and process the data coming from _POST
|
// Build our Editor instance and process the data coming from _POST
|
||||||
$response = Editor::inst( $db, 'cliente_precios' )
|
$response = Editor::inst($db, 'cliente_precios')
|
||||||
->fields(
|
->fields(
|
||||||
Field::inst( 'plantilla_id' ),
|
Field::inst('plantilla_id'),
|
||||||
Field::inst( 'cliente_id' ),
|
Field::inst('cliente_id'),
|
||||||
Field::inst( 'tipo' ),
|
Field::inst('tipo'),
|
||||||
Field::inst( 'tipo_maquina' ),
|
Field::inst('tipo_maquina'),
|
||||||
Field::inst( 'tipo_impresion' ),
|
Field::inst('tipo_impresion'),
|
||||||
Field::inst( 'user_updated_id' ),
|
Field::inst('user_updated_id'),
|
||||||
Field::inst( 'updated_at' ),
|
Field::inst('updated_at'),
|
||||||
Field::inst( 'is_deleted' ),
|
Field::inst('is_deleted'),
|
||||||
Field::inst( 'tiempo_min' )
|
Field::inst('tiempo_min')
|
||||||
->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar')
|
->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar')
|
||||||
->validator( 'Validate::notEmpty',array(
|
->validator(
|
||||||
'message' => lang('ClientePrecios.validation.required'))
|
'Validate::notEmpty',
|
||||||
|
array(
|
||||||
|
'message' => lang('ClientePrecios.validation.required')
|
||||||
|
)
|
||||||
)
|
)
|
||||||
->validator('Validate::numeric', array(
|
->validator(
|
||||||
|
'Validate::numeric',
|
||||||
|
array(
|
||||||
"decimal" => ',',
|
"decimal" => ',',
|
||||||
'message' => lang('ClientePrecios.validation.decimal'))
|
'message' => lang('ClientePrecios.validation.decimal')
|
||||||
|
)
|
||||||
),
|
),
|
||||||
|
|
||||||
Field::inst( 'tiempo_max' )
|
Field::inst('tiempo_max')
|
||||||
->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar')
|
->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar')
|
||||||
->validator( 'Validate::notEmpty',array(
|
->validator(
|
||||||
'message' => lang('ClientePrecios.validation.required'))
|
'Validate::notEmpty',
|
||||||
|
array(
|
||||||
|
'message' => lang('ClientePrecios.validation.required')
|
||||||
|
)
|
||||||
)
|
)
|
||||||
->validator('Validate::numeric', array(
|
->validator(
|
||||||
"decimal" => ',',
|
'Validate::numeric',
|
||||||
'message' => lang('ClientePrecios.validation.decimal'))
|
array(
|
||||||
),
|
|
||||||
|
|
||||||
Field::inst( 'precio_hora' )
|
|
||||||
->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar')
|
|
||||||
->validator( 'Validate::notEmpty',array(
|
|
||||||
'message' => lang('ClientePrecios.validation.required'))
|
|
||||||
)
|
|
||||||
->validator('Validate::numeric', array(
|
|
||||||
"decimal" => ',',
|
|
||||||
'message' => lang('ClientePrecios.validation.decimal'))
|
|
||||||
),
|
|
||||||
|
|
||||||
Field::inst( 'margen' )
|
|
||||||
->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar')
|
|
||||||
->validator( 'Validate::notEmpty',array(
|
|
||||||
'message' => lang('ClientePrecios.validation.required'))
|
|
||||||
)
|
|
||||||
->validator('Validate::numeric', array(
|
|
||||||
"decimal" => ',',
|
"decimal" => ',',
|
||||||
'message' => lang('ClientePrecios.validation.decimal'))
|
'message' => lang('ClientePrecios.validation.decimal')
|
||||||
|
)
|
||||||
|
),
|
||||||
|
|
||||||
|
Field::inst('precio_hora')
|
||||||
|
->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar')
|
||||||
|
->validator(
|
||||||
|
'Validate::notEmpty',
|
||||||
|
array(
|
||||||
|
'message' => lang('ClientePrecios.validation.required')
|
||||||
|
)
|
||||||
|
)
|
||||||
|
->validator(
|
||||||
|
'Validate::numeric',
|
||||||
|
array(
|
||||||
|
"decimal" => ',',
|
||||||
|
'message' => lang('ClientePrecios.validation.decimal')
|
||||||
|
)
|
||||||
|
),
|
||||||
|
|
||||||
|
Field::inst('margen')
|
||||||
|
->getFormatter('Format::toDecimalChar')->setFormatter('Format::fromDecimalChar')
|
||||||
|
->validator(
|
||||||
|
'Validate::notEmpty',
|
||||||
|
array(
|
||||||
|
'message' => lang('ClientePrecios.validation.required')
|
||||||
|
)
|
||||||
|
)
|
||||||
|
->validator(
|
||||||
|
'Validate::numeric',
|
||||||
|
array(
|
||||||
|
"decimal" => ',',
|
||||||
|
'message' => lang('ClientePrecios.validation.decimal')
|
||||||
|
)
|
||||||
),
|
),
|
||||||
|
|
||||||
)
|
)
|
||||||
@ -203,21 +222,19 @@ class ClientePrecios extends \App\Controllers\BaseResourceController
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
->on('preCreate', function ($editor, &$values) {
|
->on('preCreate', function ($editor, &$values) {
|
||||||
$session = session();
|
|
||||||
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
||||||
$editor
|
$editor
|
||||||
->field('user_updated_id')
|
->field('user_updated_id')
|
||||||
->setValue($session->id_user);
|
->setValue(auth()->user()->id);
|
||||||
$editor
|
$editor
|
||||||
->field('updated_at')
|
->field('updated_at')
|
||||||
->setValue($datetime->format('Y-m-d H:i:s'));
|
->setValue($datetime->format('Y-m-d H:i:s'));
|
||||||
})
|
})
|
||||||
->on('preEdit', function ($editor, &$values) {
|
->on('preEdit', function ($editor, &$values) {
|
||||||
$session = session();
|
|
||||||
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
||||||
$editor
|
$editor
|
||||||
->field('user_updated_id')
|
->field('user_updated_id')
|
||||||
->setValue($session->id_user);
|
->setValue(auth()->user()->id);
|
||||||
$editor
|
$editor
|
||||||
->field('updated_at')
|
->field('updated_at')
|
||||||
->setValue($datetime->format('Y-m-d H:i:s'));
|
->setValue($datetime->format('Y-m-d H:i:s'));
|
||||||
@ -238,4 +255,16 @@ class ClientePrecios extends \App\Controllers\BaseResourceController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getCurrentPlantilla()
|
||||||
|
{
|
||||||
|
|
||||||
|
if ($this->request->isAJAX()) {
|
||||||
|
$cliente_id = $this->request->getGet('cliente_id');
|
||||||
|
$plantilla = $this->model->getPlantilla($cliente_id);
|
||||||
|
return $this->respond($plantilla);
|
||||||
|
} else {
|
||||||
|
return $this->failUnauthorized('Invalid request', 403);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
<?php namespace App\Controllers\Clientes;
|
<?php
|
||||||
|
namespace App\Controllers\Clientes;
|
||||||
|
|
||||||
|
|
||||||
use App\Controllers\BaseResourceController;
|
use App\Controllers\BaseResourceController;
|
||||||
@ -70,51 +71,48 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
|
|||||||
// plantilla desde la lista
|
// plantilla desde la lista
|
||||||
public function update($requestedId = null)
|
public function update($requestedId = null)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
if ($this->request->getPost()) :
|
if ($requestedId == null):
|
||||||
|
return;
|
||||||
if ($requestedId == null) :
|
endif;
|
||||||
return;
|
$model = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel');
|
||||||
endif;
|
$model->delete_values($requestedId);
|
||||||
$model = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel');
|
|
||||||
$model->delete_values($requestedId);
|
$newTokenHash = csrf_hash();
|
||||||
|
$csrfTokenName = csrf_token();
|
||||||
$newTokenHash = csrf_hash();
|
$data = [
|
||||||
$csrfTokenName = csrf_token();
|
$csrfTokenName => $newTokenHash
|
||||||
$data = [
|
];
|
||||||
$csrfTokenName => $newTokenHash
|
|
||||||
];
|
return $this->respond($data);
|
||||||
|
|
||||||
return $this->respond($data);
|
|
||||||
|
|
||||||
endif; // ($requestMethod === 'post')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ($this->request->getPost()) :
|
|
||||||
|
if ($this->request->getPost()):
|
||||||
|
|
||||||
$nullIfEmpty = true; // !(phpversion() >= '8.1');
|
$nullIfEmpty = true; // !(phpversion() >= '8.1');
|
||||||
|
|
||||||
$postData = $this->request->getPost();
|
$postData = $this->request->getPost();
|
||||||
|
|
||||||
$cliente_id = $postData['cliente_id'] ?? -1;
|
$cliente_id = $postData['cliente_id'] ?? -1;
|
||||||
|
$from_client_data = $postData['from_client_data'] ?? 0;
|
||||||
|
|
||||||
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
|
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
|
||||||
|
|
||||||
// JJO
|
// JJO
|
||||||
$sanitizedData['user_created_id'] = auth()->user()->id;
|
$sanitizedData['user_created_id'] = auth()->user()->id;
|
||||||
|
|
||||||
$noException = true;
|
$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 {
|
try {
|
||||||
$successfulResult = $this->model->skipValidation(true)->save($sanitizedData);
|
$successfulResult = $this->model->skipValidation(true)->save($sanitizedData);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
@ -126,24 +124,27 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
|
|||||||
$this->session->setFlashdata('formErrors', $this->model->errors());
|
$this->session->setFlashdata('formErrors', $this->model->errors());
|
||||||
endif;
|
endif;
|
||||||
|
|
||||||
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
|
if ($from_client_data == 1) {
|
||||||
|
$thenRedirect = false;
|
||||||
|
} else {
|
||||||
|
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
|
||||||
|
}
|
||||||
endif;
|
endif;
|
||||||
if ($noException && $successfulResult) :
|
if ($noException && $successfulResult):
|
||||||
|
|
||||||
$id = $this->model->db->insertID();
|
$id = $this->model->db->insertID();
|
||||||
|
|
||||||
$message = lang('Basic.global.saveSuccess', [lang('Basic.global.record')]) . '.';
|
$message = lang('Basic.global.saveSuccess', [lang('Basic.global.record')]) . '.';
|
||||||
|
|
||||||
if($cliente_id != -1){
|
if ($cliente_id != -1) {
|
||||||
$modelLineas = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel');
|
$modelLineas = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel');
|
||||||
$modelLineas->copy_from_cliente($cliente_id, $id);
|
$modelLineas->copy_from_cliente($cliente_id, $id);
|
||||||
$modelClientePrecios = model('App\Models\Clientes\ClientePreciosModel');
|
$modelClientePrecios = model('App\Models\Clientes\ClientePreciosModel');
|
||||||
$modelClientePrecios->set_plantilla_id($cliente_id, $id);
|
$modelClientePrecios->set_plantilla_id($cliente_id, $id);
|
||||||
return ;
|
return $this->respond(['status' => 'success', 'id' => $id]);
|
||||||
}
|
} else {
|
||||||
else{
|
if ($thenRedirect):
|
||||||
if ($thenRedirect) :
|
if (!empty($this->indexRoute)):
|
||||||
if (!empty($this->indexRoute)) :
|
|
||||||
//return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
|
//return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
|
||||||
return redirect()->to(site_url('/clientes/clienteplantillaprecios/edit/' . $id))->with('message', $message);
|
return redirect()->to(site_url('/clientes/clienteplantillaprecios/edit/' . $id))->with('message', $message);
|
||||||
else:
|
else:
|
||||||
@ -171,35 +172,35 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
|
|||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
if ($requestedId == null) :
|
if ($requestedId == null):
|
||||||
return $this->redirect2listView();
|
return $this->redirect2listView();
|
||||||
endif;
|
endif;
|
||||||
$id = filter_var($requestedId, FILTER_SANITIZE_URL);
|
$id = filter_var($requestedId, FILTER_SANITIZE_URL);
|
||||||
$clientePlantillaPreciosEntity = $this->model->find($id);
|
$clientePlantillaPreciosEntity = $this->model->find($id);
|
||||||
|
|
||||||
if ($clientePlantillaPreciosEntity == false) :
|
if ($clientePlantillaPreciosEntity == false):
|
||||||
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Clientes.cliente')), $id]);
|
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Clientes.cliente')), $id]);
|
||||||
return $this->redirect2listView('sweet-error', $message);
|
return $this->redirect2listView('sweet-error', $message);
|
||||||
endif;
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ($this->request->getPost()) :
|
|
||||||
|
if ($this->request->getPost()):
|
||||||
|
|
||||||
$nullIfEmpty = true; // !(phpversion() >= '8.1');
|
$nullIfEmpty = true; // !(phpversion() >= '8.1');
|
||||||
|
|
||||||
$postData = $this->request->getPost();
|
$postData = $this->request->getPost();
|
||||||
|
|
||||||
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
|
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
|
||||||
|
|
||||||
// JJO
|
// JJO
|
||||||
$sanitizedData['user_updated_id'] = auth()->user()->id;
|
$sanitizedData['user_updated_id'] = auth()->user()->id;
|
||||||
|
|
||||||
$noException = true;
|
$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 {
|
try {
|
||||||
$successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData);
|
$successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
@ -216,12 +217,12 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
$thenRedirect = false;
|
$thenRedirect = false;
|
||||||
endif;
|
endif;
|
||||||
if ($noException && $successfulResult) :
|
if ($noException && $successfulResult):
|
||||||
$id = $clientePlantillaPreciosEntity->id ?? $id;
|
$id = $clientePlantillaPreciosEntity->id ?? $id;
|
||||||
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.';
|
$message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.';
|
||||||
|
|
||||||
if ($thenRedirect) :
|
if ($thenRedirect):
|
||||||
if (!empty($this->indexRoute)) :
|
if (!empty($this->indexRoute)):
|
||||||
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
|
return redirect()->to(route_to($this->indexRoute))->with('sweet-success', $message);
|
||||||
else:
|
else:
|
||||||
return $this->redirect2listView('sweet-success', $message);
|
return $this->redirect2listView('sweet-success', $message);
|
||||||
@ -236,7 +237,7 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
|
|||||||
//var_dump($clientePlantillaPreciosEntity); dd();
|
//var_dump($clientePlantillaPreciosEntity); dd();
|
||||||
|
|
||||||
$this->viewData['clienteplantillapreciosEntity'] = $clientePlantillaPreciosEntity;
|
$this->viewData['clienteplantillapreciosEntity'] = $clientePlantillaPreciosEntity;
|
||||||
|
|
||||||
$this->viewData['formAction'] = route_to('updateClienteplantillaprecios', $id);
|
$this->viewData['formAction'] = route_to('updateClienteplantillaprecios', $id);
|
||||||
|
|
||||||
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('Clientes.moduleTitle') . ' ' . lang('Basic.global.edit3');
|
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('Clientes.moduleTitle') . ' ' . lang('Basic.global.edit3');
|
||||||
@ -246,6 +247,23 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
|
|||||||
} // end function edit(...)
|
} // end function edit(...)
|
||||||
|
|
||||||
|
|
||||||
|
public function updatePlantillaEnCliente(){
|
||||||
|
|
||||||
|
if ($this->request->isAJAX()) {
|
||||||
|
|
||||||
|
$reqData = $this->request->getPost();
|
||||||
|
$plantilla_id = $reqData['plantilla_id'] ?? -1;
|
||||||
|
|
||||||
|
$model = model('App\Models\Clientes\ClientePreciosModel');
|
||||||
|
$model->update_plantilla_id($plantilla_id);
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return $this->failUnauthorized('Invalid request', 403);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function datatable()
|
public function datatable()
|
||||||
{
|
{
|
||||||
if ($this->request->isAJAX()) {
|
if ($this->request->isAJAX()) {
|
||||||
@ -257,16 +275,16 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
|
|||||||
}
|
}
|
||||||
$start = $reqData['start'] ?? 0;
|
$start = $reqData['start'] ?? 0;
|
||||||
$length = $reqData['length'] ?? 5;
|
$length = $reqData['length'] ?? 5;
|
||||||
$search = $reqData['search']['value'];
|
$searchValues = get_filter_datatables_columns($reqData);
|
||||||
$requestedOrder = $reqData['order']['0']['column'] ?? 1;
|
$requestedOrder = $reqData['order']['0']['column'] ?? 1;
|
||||||
$order = ClientePlantillaPreciosModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 0];
|
$order = ClientePlantillaPreciosModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 0];
|
||||||
$dir = $reqData['order']['0']['dir'] ?? 'asc';
|
$dir = $reqData['order']['0']['dir'] ?? 'asc';
|
||||||
|
|
||||||
$resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
|
$resourceData = $this->model->getResource($searchValues)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
|
||||||
return $this->respond(Collection::datatable(
|
return $this->respond(Collection::datatable(
|
||||||
$resourceData,
|
$resourceData,
|
||||||
$this->model->getResource()->countAllResults(),
|
$this->model->getResource()->countAllResults(),
|
||||||
$this->model->getResource($search)->countAllResults()
|
$this->model->getResource($searchValues)->countAllResults()
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
return $this->failUnauthorized('Invalid request', 403);
|
return $this->failUnauthorized('Invalid request', 403);
|
||||||
@ -275,34 +293,32 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function menuItems()
|
public function menuItems()
|
||||||
{
|
{
|
||||||
|
|
||||||
if ($this->request->isAJAX()) {
|
if ($this->request->isAJAX()) {
|
||||||
$searchStr = goSanitize($this->request->getPost('searchTerm'))[0];
|
$query = $this->model->builder()->select(
|
||||||
$reqId = goSanitize($this->request->getPost('id'))[0];
|
[
|
||||||
$reqText = goSanitize($this->request->getPost('text'))[0];
|
"id",
|
||||||
$onlyActiveOnes = false;
|
"nombre as name"
|
||||||
$columns2select = [$reqId ?? 'id', $reqText ?? 'nombre'];
|
]
|
||||||
$onlyActiveOnes = false;
|
)->where("deleted_at", null);
|
||||||
try{
|
if ($this->request->getGet("q")) {
|
||||||
$menu = $this->model->getSelect2MenuItems($columns2select, $columns2select[1], $onlyActiveOnes, $searchStr, true);
|
$query->groupStart()
|
||||||
$nonItem = new \stdClass;
|
->orLike("cliente_plantilla_precios.nombre", $this->request->getGet("q"))
|
||||||
$nonItem->id = '';
|
->groupEnd();
|
||||||
$nonItem->text = '- ' . lang('Basic.global.None') . ' -';
|
|
||||||
array_unshift($menu, $nonItem);
|
|
||||||
}
|
|
||||||
catch(Exception $e){
|
|
||||||
$menu = [];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$newTokenHash = csrf_hash();
|
$items = $query->get()->getResultObject();
|
||||||
$csrfTokenName = csrf_token();
|
// add a custom item at the beginning
|
||||||
$data = [
|
$customItem = new \stdClass;
|
||||||
'menu' => $menu,
|
$customItem->id = 0;
|
||||||
$csrfTokenName => $newTokenHash
|
$customItem->name = "Personalizado";
|
||||||
];
|
array_unshift($items, $customItem);
|
||||||
return $this->respond($data);
|
|
||||||
|
return $this->response->setJSON($items);
|
||||||
} else {
|
} else {
|
||||||
return $this->failUnauthorized('Invalid request', 403);
|
return $this->failUnauthorized('Invalid request', 403);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -93,31 +93,27 @@ class Clienteplantillaprecioslineas extends \App\Controllers\BaseResourceControl
|
|||||||
}
|
}
|
||||||
$start = $reqData['start'] ?? 0;
|
$start = $reqData['start'] ?? 0;
|
||||||
$length = $reqData['length'] ?? 5;
|
$length = $reqData['length'] ?? 5;
|
||||||
$requestedOrder = $reqData['order']['0']['column'] ?? 0;
|
|
||||||
$requestedOrder2 = $reqData['order']['1']['column'] ?? $requestedOrder;
|
$requestedOrder = $reqData['order'] ?? [];
|
||||||
$requestedOrder3 = $reqData['order']['2']['column'] ?? $requestedOrder;
|
$searchValues = get_filter_datatables_columns($reqData);
|
||||||
$requestedOrder4 = $reqData['order']['3']['column'] ?? $requestedOrder;
|
|
||||||
$requestedOrder5 = $reqData['order']['4']['column'] ?? $requestedOrder;
|
|
||||||
$order = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 0];
|
|
||||||
$order2 = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder2 >= 0 ? $requestedOrder2 : $requestedOrder];
|
|
||||||
$order3 = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder3 >= 0 ? $requestedOrder3 : $requestedOrder];
|
|
||||||
$order4 = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder4 >= 0 ? $requestedOrder4 : $requestedOrder];
|
|
||||||
$order5 = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder4 >= 0 ? $requestedOrder5 : $requestedOrder];
|
|
||||||
$dir = $reqData['order']['0']['dir'] ?? 'asc';
|
|
||||||
$dir2 = $reqData['order']['1']['dir'] ?? $dir;
|
|
||||||
$dir3 = $reqData['order']['2']['dir'] ?? $dir;
|
|
||||||
$dir4= $reqData['order']['3']['dir'] ?? $dir;
|
|
||||||
$dir5= $reqData['order']['4']['dir'] ?? $dir;
|
|
||||||
|
|
||||||
$plantilla_id = $reqData['plantilla_id'] ?? 0;
|
$plantilla_id = $reqData['plantilla_id'] ?? 0;
|
||||||
|
|
||||||
$resourceData = $this->model->getResource($plantilla_id)
|
$resourceData = $this->model->getResource($searchValues, $plantilla_id);
|
||||||
->orderBy($order, $dir)->orderBy($order2, $dir2)->orderBy($order3, $dir3)->orderBy($order4, $dir4)->orderBy($order5, $dir5)
|
foreach ($requestedOrder as $order) {
|
||||||
->limit($length, $start)->get()->getResultObject();
|
$column = $order['column'] ?? 0;
|
||||||
|
$dir = $order['dir'] ?? 'asc';
|
||||||
|
$orderColumn = ClientePlantillaPreciosLineasModel::SORTABLE[$column] ?? null;
|
||||||
|
if ($orderColumn) {
|
||||||
|
$resourceData->orderBy($orderColumn, $dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$resourceData = $resourceData->limit($length, $start)->get()->getResultObject();
|
||||||
|
|
||||||
return $this->respond(Collection::datatable(
|
return $this->respond(Collection::datatable(
|
||||||
$resourceData,
|
$resourceData,
|
||||||
$this->model->getResource($plantilla_id)->countAllResults(),
|
$this->model->getResource([], $plantilla_id)->countAllResults(),
|
||||||
$this->model->getResource($plantilla_id)->countAllResults()
|
$this->model->getResource($searchValues, $plantilla_id)->countAllResults()
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
return $this->failUnauthorized('Invalid request', 403);
|
return $this->failUnauthorized('Invalid request', 403);
|
||||||
@ -138,6 +134,8 @@ class Clienteplantillaprecioslineas extends \App\Controllers\BaseResourceControl
|
|||||||
Field::inst( 'tipo_maquina' ),
|
Field::inst( 'tipo_maquina' ),
|
||||||
Field::inst( 'tipo_impresion' ),
|
Field::inst( 'tipo_impresion' ),
|
||||||
Field::inst( 'user_updated_id' ),
|
Field::inst( 'user_updated_id' ),
|
||||||
|
Field::inst( 'deleted_at' ),
|
||||||
|
Field::inst( 'is_deleted' ),
|
||||||
Field::inst( 'updated_at' ),
|
Field::inst( 'updated_at' ),
|
||||||
Field::inst( 'tiempo_min' )
|
Field::inst( 'tiempo_min' )
|
||||||
->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar')
|
->getFormatter( 'Format::toDecimalChar')->setFormatter( 'Format::fromDecimalChar')
|
||||||
@ -201,21 +199,20 @@ class Clienteplantillaprecioslineas extends \App\Controllers\BaseResourceControl
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
->on('preCreate', function ($editor, &$values) {
|
->on('preCreate', function ($editor, &$values) {
|
||||||
$session = session();
|
|
||||||
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
||||||
$editor
|
$editor
|
||||||
->field('user_updated_id')
|
->field('user_updated_id')
|
||||||
->setValue($session->id_user);
|
->setValue(auth()->user()->id);
|
||||||
$editor
|
$editor
|
||||||
->field('updated_at')
|
->field('updated_at')
|
||||||
->setValue($datetime->format('Y-m-d H:i:s'));
|
->setValue($datetime->format('Y-m-d H:i:s'));
|
||||||
})
|
})
|
||||||
->on('preEdit', function ($editor, &$values) {
|
->on('preEdit', function ($editor, &$values) {
|
||||||
$session = session();
|
|
||||||
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
||||||
$editor
|
$editor
|
||||||
->field('user_updated_id')
|
->field('user_updated_id')
|
||||||
->setValue($session->id_user);
|
->setValue(auth()->user()->id);
|
||||||
$editor
|
$editor
|
||||||
->field('updated_at')
|
->field('updated_at')
|
||||||
->setValue($datetime->format('Y-m-d H:i:s'));
|
->setValue($datetime->format('Y-m-d H:i:s'));
|
||||||
|
|||||||
@ -298,13 +298,24 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
|
|||||||
{
|
{
|
||||||
if ($this->request->isAJAX()) {
|
if ($this->request->isAJAX()) {
|
||||||
|
|
||||||
|
$tirada = goSanitize($this->request->getGet('tirada'))[0] ?? null;
|
||||||
|
$POD = null;
|
||||||
|
if($tirada != null){
|
||||||
|
$POD_value = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
|
||||||
|
if(intval($tirada) <= intval($POD_value)){
|
||||||
|
$POD = true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$POD = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
$tipo = goSanitize($this->request->getGet('tipo'))[0];
|
$tipo = goSanitize($this->request->getGet('tipo'))[0];
|
||||||
$selected_papel = goSanitize($this->request->getGet('papel'))[0] ?? null;
|
$selected_papel = goSanitize($this->request->getGet('papel'))[0] ?? null;
|
||||||
$cubierta = goSanitize($this->request->getGet('cubierta'))[0] ?? 0;
|
$cubierta = goSanitize($this->request->getGet('cubierta'))[0] ?? 0;
|
||||||
$tapa_dura = goSanitize($this->request->getGet('tapa_dura'))[0] ?? null;
|
$tapa_dura = goSanitize($this->request->getGet('tapa_dura'))[0] ?? null;
|
||||||
|
|
||||||
$menu = $this->model->getPapelCliente($tipo, $cubierta, $selected_papel, $tapa_dura, false);
|
$menu = $this->model->getPapelCliente($tipo, $cubierta, $selected_papel, $tapa_dura, false, $POD);
|
||||||
$menu2 = $this->model->getPapelCliente($tipo, $cubierta, $selected_papel, $tapa_dura, true);
|
$menu2 = $this->model->getPapelCliente($tipo, $cubierta, $selected_papel, $tapa_dura, true, $POD);
|
||||||
|
|
||||||
$newTokenHash = csrf_hash();
|
$newTokenHash = csrf_hash();
|
||||||
$csrfTokenName = csrf_token();
|
$csrfTokenName = csrf_token();
|
||||||
@ -325,10 +336,21 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
if ($this->request->isAJAX()) {
|
if ($this->request->isAJAX()) {
|
||||||
|
|
||||||
|
$tirada = goSanitize($this->request->getGet('tirada'))[0] ?? null;
|
||||||
|
$POD = null;
|
||||||
|
if($tirada != null){
|
||||||
|
$POD_value = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
|
||||||
|
if(intval($tirada) <= intval($POD_value)){
|
||||||
|
$POD = true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$POD = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
$tipo = goSanitize($this->request->getGet('tipo'))[0];
|
$tipo = goSanitize($this->request->getGet('tipo'))[0];
|
||||||
$cubierta = goSanitize($this->request->getGet('cubierta'))[0] ?? 0;
|
$cubierta = goSanitize($this->request->getGet('cubierta'))[0] ?? 0;
|
||||||
|
|
||||||
$items = $this->model->getPapelCliente($tipo, $cubierta, null, true);
|
$items = $this->model->getPapelCliente($tipo, $cubierta, null, true, $POD);
|
||||||
$items = array_map(function ($item) {
|
$items = array_map(function ($item) {
|
||||||
return [
|
return [
|
||||||
'id' => $item->id,
|
'id' => $item->id,
|
||||||
|
|||||||
@ -265,7 +265,7 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
foreach ($chatDepartments as $chatDepartment) {
|
foreach ($chatDepartments as $chatDepartment) {
|
||||||
$this->chat_department_user_model->insert([
|
$this->chat_department_user_model->insert([
|
||||||
"user_id" => $id,
|
"user_id" => $id,
|
||||||
"chat_department_id" => $this->chat_department_model->where("name", $chatDepartment)->first()["id"]
|
"chat_department_id" => $this->chat_department_model->where("name", $chatDepartment)->first()->id
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
$id = $user->id ?? $id;
|
$id = $user->id ?? $id;
|
||||||
|
|||||||
@ -21,9 +21,22 @@ class Language extends BaseController
|
|||||||
public function getTranslation()
|
public function getTranslation()
|
||||||
{
|
{
|
||||||
$translationFile = $this->request->getPost('translationFile');
|
$translationFile = $this->request->getPost('translationFile');
|
||||||
$locale = $this->request->getPost('locale');
|
$data = [];
|
||||||
$path = "Language/{$locale}/$translationFile.php";
|
if(is_array($translationFile)){
|
||||||
$lang = require APPPATH.$path;
|
foreach($translationFile as $file){
|
||||||
return json_encode($lang);
|
$locale = $this->request->getPost('locale');
|
||||||
|
$path = "Language/{$locale}/$file.php";
|
||||||
|
$lang = require APPPATH.$path;
|
||||||
|
$data[$file] = $lang;
|
||||||
|
}
|
||||||
|
return json_encode($data);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$locale = $this->request->getPost('locale');
|
||||||
|
$path = "Language/{$locale}/$translationFile.php";
|
||||||
|
$lang = require APPPATH.$path;
|
||||||
|
return json_encode($lang);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -522,6 +522,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
'a_favor_fibra' => 1,
|
'a_favor_fibra' => 1,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Para POD siempre es HQ
|
||||||
|
if ($tirada[0] <= $POD) {
|
||||||
|
$isHq = true;
|
||||||
|
}
|
||||||
|
|
||||||
$input_data = array(
|
$input_data = array(
|
||||||
'uso' => 'interior',
|
'uso' => 'interior',
|
||||||
'tipo_impresion_id' => $tipo_impresion_id,
|
'tipo_impresion_id' => $tipo_impresion_id,
|
||||||
@ -1509,6 +1514,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$info['merma'] = $datosPedido->merma;
|
$info['merma'] = $datosPedido->merma;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Para POD siempre es HQ
|
||||||
|
if ($tirada[$t] <= $POD) {
|
||||||
|
$isHq = true;
|
||||||
|
}
|
||||||
|
|
||||||
$input_data = array(
|
$input_data = array(
|
||||||
'uso' => 'interior',
|
'uso' => 'interior',
|
||||||
'tipo_impresion_id' => $tipo_impresion_id,
|
'tipo_impresion_id' => $tipo_impresion_id,
|
||||||
|
|||||||
@ -28,5 +28,6 @@ return [
|
|||||||
"add_notification" => "Notificación",
|
"add_notification" => "Notificación",
|
||||||
"check_as_unviewed" => "Marcar como no leídos",
|
"check_as_unviewed" => "Marcar como no leídos",
|
||||||
"add_notification_message" => "Envía a los usuarios añadidos una notificación con los mensajes presentes en el chat.",
|
"add_notification_message" => "Envía a los usuarios añadidos una notificación con los mensajes presentes en el chat.",
|
||||||
"chat_title_presupuesto" => 'Presupuesto[{title,string,0}][{id}]'
|
"chat_title_presupuesto" => 'Presupuesto[{title,string,0}][{id}]',
|
||||||
|
"no_messages_notification" => 'No hay mensajes que revisar por el momento'
|
||||||
];
|
];
|
||||||
@ -7,14 +7,16 @@ class ClientePlantillaPreciosLineasModel extends \App\Models\BaseModel
|
|||||||
protected $table = "cliente_plantilla_precios_lineas";
|
protected $table = "cliente_plantilla_precios_lineas";
|
||||||
|
|
||||||
const SORTABLE = [
|
const SORTABLE = [
|
||||||
0 => "t1.tipo",
|
0 => "t1.id",
|
||||||
1 => "t1.tipo_maquina",
|
1 => "t1.tipo",
|
||||||
2 => "t1.tipo_impresion",
|
2 => "t1.tipo_maquina",
|
||||||
3 => "t1.tiempo_min",
|
3 => "t1.tipo_impresion",
|
||||||
4 => "t1.tiempo_max",
|
4 => "t1.tiempo_min",
|
||||||
5 => "t1.precio_hora",
|
5 => "t1.tiempo_max",
|
||||||
6 => "t1.margen",
|
6 => "t1.precio_hora",
|
||||||
|
7 => "t1.margen",
|
||||||
|
8 => "CONCAT(t2.first_name, ' ', t2.last_name)",
|
||||||
|
9 => "t1.updated_at",
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -113,10 +115,20 @@ class ClientePlantillaPreciosLineasModel extends \App\Models\BaseModel
|
|||||||
|
|
||||||
|
|
||||||
function delete_values($plantilla_id = 0){
|
function delete_values($plantilla_id = 0){
|
||||||
|
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
||||||
|
$date_value = $datetime->format('Y-m-d H:i:s');
|
||||||
|
|
||||||
$this->db
|
$this->db
|
||||||
->table($this->table . " t1")
|
->table($this->table . " t1")
|
||||||
->where('t1.plantilla_id', $plantilla_id)
|
->where('t1.plantilla_id', $plantilla_id)
|
||||||
->set('is_deleted', 1)
|
->set('is_deleted', 1)
|
||||||
|
->set('deleted_at', $date_value)
|
||||||
|
->update();
|
||||||
|
|
||||||
|
$this->db
|
||||||
|
->table('cliente_precios' . " t1")
|
||||||
|
->where('t1.plantilla_id', $plantilla_id)
|
||||||
|
->set('plantilla_id', null)
|
||||||
->update();
|
->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,14 +139,15 @@ class ClientePlantillaPreciosLineasModel extends \App\Models\BaseModel
|
|||||||
*
|
*
|
||||||
* @return \CodeIgniter\Database\BaseBuilder
|
* @return \CodeIgniter\Database\BaseBuilder
|
||||||
*/
|
*/
|
||||||
public function getResource($plantilla_id = -1)
|
public function getResource($search = [], $plantilla_id = -1)
|
||||||
{
|
{
|
||||||
$builder = $this->db
|
$builder = $this->db
|
||||||
->table($this->table . " t1")
|
->table($this->table . " t1")
|
||||||
->select(
|
->select(
|
||||||
"t1.id as id, t1.tipo AS tipo, t1.tipo_maquina AS tipo_maquina, t1.tipo_impresion AS tipo_impresion,
|
"t1.id as id, t1.tipo AS tipo, t1.tipo_maquina AS tipo_maquina, t1.tipo_impresion AS tipo_impresion,
|
||||||
t1.tiempo_min AS tiempo_min, t1.tiempo_max AS tiempo_max, t1.precio_hora AS precio_hora, t1.margen AS margen,
|
t1.tiempo_min AS tiempo_min, t1.tiempo_max AS tiempo_max, t1.precio_hora AS precio_hora, t1.margen AS margen,
|
||||||
t1.user_updated_id AS user_updated_id, t1.updated_at AS updated_at, CONCAT(t2.first_name, ' ', t2.last_name) AS user_updated"
|
t1.user_updated_id AS user_updated_id, t1.updated_at AS updated_at, CONCAT(t2.first_name, ' ', t2.last_name) AS user_updated,
|
||||||
|
t1.id AS DT_RowId"
|
||||||
);
|
);
|
||||||
|
|
||||||
$builder->join("users t2", "t1.user_updated_id = t2.id", "left");
|
$builder->join("users t2", "t1.user_updated_id = t2.id", "left");
|
||||||
@ -142,8 +155,19 @@ class ClientePlantillaPreciosLineasModel extends \App\Models\BaseModel
|
|||||||
$builder->where('t1.is_deleted', 0);
|
$builder->where('t1.is_deleted', 0);
|
||||||
$builder->where('t1.plantilla_id', $plantilla_id);
|
$builder->where('t1.plantilla_id', $plantilla_id);
|
||||||
|
|
||||||
|
if (empty($search))
|
||||||
return $builder;
|
return $builder;
|
||||||
|
else {
|
||||||
|
$builder->groupStart();
|
||||||
|
foreach ($search as $col_search) {
|
||||||
|
if ($col_search[1] > 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]);
|
||||||
|
}
|
||||||
|
$builder->groupEnd();
|
||||||
|
return $builder;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function checkIntervals($data = [], $id_linea = null, $plantilla_id = null){
|
public function checkIntervals($data = [], $id_linea = null, $plantilla_id = null){
|
||||||
@ -183,14 +207,13 @@ class ClientePlantillaPreciosLineasModel extends \App\Models\BaseModel
|
|||||||
|
|
||||||
function copy_from_cliente($cliente_id = 0, $plantilla_id = 0){
|
function copy_from_cliente($cliente_id = 0, $plantilla_id = 0){
|
||||||
|
|
||||||
$session = session();
|
|
||||||
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
||||||
$date_value = $datetime->format('Y-m-d H:i:s');
|
$date_value = $datetime->format('Y-m-d H:i:s');
|
||||||
|
|
||||||
|
|
||||||
// Se cargan los valores en la plantilla
|
// Se cargan los valores en la plantilla
|
||||||
$clientePreciosModel = model('App\Models\Clientes\ClientePreciosModel');
|
$clientePreciosModel = model('App\Models\Clientes\ClientePreciosModel');
|
||||||
$values = $clientePreciosModel->getResource($cliente_id)->get()->getResultObject();
|
$values = $clientePreciosModel->getResource([], $cliente_id)->get()->getResultObject();
|
||||||
foreach ($values as $value) {
|
foreach ($values as $value) {
|
||||||
$this->db
|
$this->db
|
||||||
->table($this->table . " t1")
|
->table($this->table . " t1")
|
||||||
@ -201,7 +224,7 @@ class ClientePlantillaPreciosLineasModel extends \App\Models\BaseModel
|
|||||||
->set('tiempo_min', $value->tiempo_min)
|
->set('tiempo_min', $value->tiempo_min)
|
||||||
->set('tiempo_max', $value->tiempo_max)
|
->set('tiempo_max', $value->tiempo_max)
|
||||||
->set('margen', $value->margen)
|
->set('margen', $value->margen)
|
||||||
->set('user_updated_id', $session->id_user)
|
->set('user_updated_id', auth()->user()->id)
|
||||||
->set('updated_at', $date_value)
|
->set('updated_at', $date_value)
|
||||||
->insert();
|
->insert();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,7 +7,8 @@ class ClientePlantillaPreciosModel extends \App\Models\BaseModel
|
|||||||
protected $table = "cliente_plantilla_precios";
|
protected $table = "cliente_plantilla_precios";
|
||||||
|
|
||||||
const SORTABLE = [
|
const SORTABLE = [
|
||||||
0 => "t1.nombre",
|
0 => "t1.id",
|
||||||
|
1 => "t1.nombre",
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,11 +49,11 @@ class ClientePlantillaPreciosModel extends \App\Models\BaseModel
|
|||||||
/**
|
/**
|
||||||
* Get resource data.
|
* Get resource data.
|
||||||
*
|
*
|
||||||
* @param string $search
|
* @param array $search
|
||||||
*
|
*
|
||||||
* @return \CodeIgniter\Database\BaseBuilder
|
* @return \CodeIgniter\Database\BaseBuilder
|
||||||
*/
|
*/
|
||||||
public function getResource(string $search = "", $cliente_id = -1)
|
public function getResource($search = [])
|
||||||
{
|
{
|
||||||
$builder = $this->db
|
$builder = $this->db
|
||||||
->table($this->table . " t1")
|
->table($this->table . " t1")
|
||||||
@ -61,14 +62,17 @@ class ClientePlantillaPreciosModel extends \App\Models\BaseModel
|
|||||||
);
|
);
|
||||||
|
|
||||||
$builder->where('t1.is_deleted', 0);
|
$builder->where('t1.is_deleted', 0);
|
||||||
|
|
||||||
|
|
||||||
return empty($search)
|
if (empty($search))
|
||||||
? $builder
|
return $builder;
|
||||||
: $builder
|
else {
|
||||||
->groupStart()
|
$builder->groupStart();
|
||||||
->like("t1.nombre", $search)
|
foreach ($search as $col_search) {
|
||||||
->groupEnd();
|
$builder->like(self::SORTABLE[$col_search[0]], $col_search[2]);
|
||||||
|
}
|
||||||
|
$builder->groupEnd();
|
||||||
|
return $builder;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,14 +14,14 @@ class ClientePreciosModel extends \App\Models\BaseModel
|
|||||||
protected $useAutoIncrement = true;
|
protected $useAutoIncrement = true;
|
||||||
|
|
||||||
const SORTABLE = [
|
const SORTABLE = [
|
||||||
0 => "t1.tipo",
|
0 => "t1.id",
|
||||||
1 => "t1.tipo_maquina",
|
1 => "t1.tipo",
|
||||||
2 => "t1.tipo_impresion",
|
2 => "t1.tipo_maquina",
|
||||||
3 => "t1.tiempo_min",
|
3 => "t1.tipo_impresion",
|
||||||
4 => "t1.tiempo_max",
|
4 => "t1.tiempo_min",
|
||||||
5 => "t1.precio_hora",
|
5 => "t1.tiempo_max",
|
||||||
6 => "t1.margen",
|
6 => "t1.precio_hora",
|
||||||
|
7 => "t1.margen",
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $allowedFields = [
|
protected $allowedFields = [
|
||||||
@ -153,7 +153,7 @@ class ClientePreciosModel extends \App\Models\BaseModel
|
|||||||
|
|
||||||
// Se cargan los valores de la plantilla
|
// Se cargan los valores de la plantilla
|
||||||
$plantillaModel = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel');
|
$plantillaModel = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel');
|
||||||
$values = $plantillaModel->getResource($plantilla_id)->get()->getResultObject();
|
$values = $plantillaModel->getResource([],$plantilla_id)->get()->getResultObject();
|
||||||
foreach ($values as $value) {
|
foreach ($values as $value) {
|
||||||
$this->db
|
$this->db
|
||||||
->table($this->table . " t1")
|
->table($this->table . " t1")
|
||||||
@ -178,7 +178,6 @@ class ClientePreciosModel extends \App\Models\BaseModel
|
|||||||
|
|
||||||
function update_from_plantilla($plantilla_id = 0){
|
function update_from_plantilla($plantilla_id = 0){
|
||||||
|
|
||||||
$session = session();
|
|
||||||
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
||||||
$date_value = $datetime->format('Y-m-d H:i:s');
|
$date_value = $datetime->format('Y-m-d H:i:s');
|
||||||
|
|
||||||
@ -187,6 +186,7 @@ class ClientePreciosModel extends \App\Models\BaseModel
|
|||||||
->table($this->table . " t1")
|
->table($this->table . " t1")
|
||||||
->select("t1.cliente_id AS id")
|
->select("t1.cliente_id AS id")
|
||||||
->where('t1.plantilla_id', $plantilla_id)
|
->where('t1.plantilla_id', $plantilla_id)
|
||||||
|
->where('t1.is_deleted', 0)
|
||||||
->distinct()
|
->distinct()
|
||||||
->get()->getResultObject();
|
->get()->getResultObject();
|
||||||
|
|
||||||
@ -200,7 +200,7 @@ class ClientePreciosModel extends \App\Models\BaseModel
|
|||||||
|
|
||||||
// Se cargan los valores de la plantilla
|
// Se cargan los valores de la plantilla
|
||||||
$plantillaModel = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel');
|
$plantillaModel = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel');
|
||||||
$values = $plantillaModel->getResource($plantilla_id)->get()->getResultObject();
|
$values = $plantillaModel->getResource([], $plantilla_id)->get()->getResultObject();
|
||||||
foreach ($values as $value) {
|
foreach ($values as $value) {
|
||||||
$this->db
|
$this->db
|
||||||
->table($this->table . " t1")
|
->table($this->table . " t1")
|
||||||
@ -215,7 +215,7 @@ class ClientePreciosModel extends \App\Models\BaseModel
|
|||||||
->set('margen', $value->margen)
|
->set('margen', $value->margen)
|
||||||
->set('user_updated_id', $value->user_updated_id)
|
->set('user_updated_id', $value->user_updated_id)
|
||||||
->set('updated_at', $value->updated_at)
|
->set('updated_at', $value->updated_at)
|
||||||
->set('user_created_id', $session->id_user)
|
->set('user_created_id', auth()->user()->id)
|
||||||
->set('created_at', $date_value)
|
->set('created_at', $date_value)
|
||||||
->insert();
|
->insert();
|
||||||
}
|
}
|
||||||
@ -256,7 +256,7 @@ class ClientePreciosModel extends \App\Models\BaseModel
|
|||||||
*
|
*
|
||||||
* @return \CodeIgniter\Database\BaseBuilder
|
* @return \CodeIgniter\Database\BaseBuilder
|
||||||
*/
|
*/
|
||||||
public function getResource($cliente_id = -1)
|
public function getResource($search = [], $cliente_id = -1)
|
||||||
{
|
{
|
||||||
$builder = $this->db
|
$builder = $this->db
|
||||||
->table($this->table . " t1")
|
->table($this->table . " t1")
|
||||||
@ -271,11 +271,43 @@ class ClientePreciosModel extends \App\Models\BaseModel
|
|||||||
|
|
||||||
$builder->where('t1.is_deleted', 0);
|
$builder->where('t1.is_deleted', 0);
|
||||||
$builder->where('t1.cliente_id', $cliente_id);
|
$builder->where('t1.cliente_id', $cliente_id);
|
||||||
|
|
||||||
|
|
||||||
return $builder;
|
if (empty($search))
|
||||||
|
return $builder;
|
||||||
|
else {
|
||||||
|
$builder->groupStart();
|
||||||
|
foreach ($search as $col_search) {
|
||||||
|
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]);
|
||||||
|
}
|
||||||
|
$builder->groupEnd();
|
||||||
|
return $builder;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPlantilla($cliente_id = -1){
|
||||||
|
$builder = $this->db
|
||||||
|
->table($this->table . " t1")
|
||||||
|
->select(
|
||||||
|
"t1.plantilla_id AS id, t2.nombre AS nombre"
|
||||||
|
);
|
||||||
|
|
||||||
|
$builder->where('t1.is_deleted', 0);
|
||||||
|
$builder->where('t1.cliente_id', $cliente_id);
|
||||||
|
$builder->join("cliente_plantilla_precios t2", "t1.plantilla_id = t2.id", "left");
|
||||||
|
$builder->limit(1);
|
||||||
|
|
||||||
|
$values = $builder->get()->getResultArray();
|
||||||
|
if(count($values)>0){
|
||||||
|
return $values[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function checkIntervals($data = [], $id_linea = null, $cliente_id = null){
|
public function checkIntervals($data = [], $id_linea = null, $cliente_id = null){
|
||||||
|
|
||||||
|
|||||||
@ -313,7 +313,7 @@ class PapelGenericoModel extends \App\Models\BaseModel
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function getPapelCliente($tipo, $is_cubierta = false, $selected_papel_id = null, $tapa_dura = null, $papel_especial = false)
|
public function getPapelCliente($tipo, $is_cubierta = false, $selected_papel_id = null, $tapa_dura = null, $papel_especial = false, $POD = null)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
1.-> Tipo impresion
|
1.-> Tipo impresion
|
||||||
@ -322,6 +322,13 @@ class PapelGenericoModel extends \App\Models\BaseModel
|
|||||||
4.-> papeles genericos que aparecen en esos papeles impresion
|
4.-> papeles genericos que aparecen en esos papeles impresion
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if ($POD == true && ($tipo == 'color' || $tipo == 'negro')) {
|
||||||
|
if($tipo == 'color')
|
||||||
|
$tipo = 'colorhq';
|
||||||
|
else if($tipo == 'negro')
|
||||||
|
$tipo = 'negrohq';
|
||||||
|
}
|
||||||
|
|
||||||
if ($selected_papel_id != null) {
|
if ($selected_papel_id != null) {
|
||||||
$builder = $this->db
|
$builder = $this->db
|
||||||
->table($this->table . " t1")
|
->table($this->table . " t1")
|
||||||
@ -404,6 +411,14 @@ class PapelGenericoModel extends \App\Models\BaseModel
|
|||||||
if ($tipo == 'colorhq' || $tipo == 'negrohq') {
|
if ($tipo == 'colorhq' || $tipo == 'negrohq') {
|
||||||
$builder->where("t2.rotativa", 0);
|
$builder->where("t2.rotativa", 0);
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
if($POD == false){
|
||||||
|
$builder->where("t2.rotativa", 1);
|
||||||
|
}
|
||||||
|
else if ($POD == true){
|
||||||
|
$builder->where("t2.rotativa", 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($selected_papel_id != null)
|
if ($selected_papel_id != null)
|
||||||
|
|||||||
@ -523,6 +523,11 @@ class PresupuestoClienteService extends BaseService
|
|||||||
$linea_rotativa = array_merge($linea_rotativa, $lineas);
|
$linea_rotativa = array_merge($linea_rotativa, $lineas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$linea_rotativa = array_filter($linea_rotativa, function($item) {
|
||||||
|
return count($item['fields']['num_formas']) > 1;
|
||||||
|
});
|
||||||
|
|
||||||
if (count($linea_rotativa) > 0) {
|
if (count($linea_rotativa) > 0) {
|
||||||
|
|
||||||
usort(
|
usort(
|
||||||
|
|||||||
@ -639,11 +639,11 @@ class PresupuestoService extends BaseService
|
|||||||
$calles = (new \App\Models\Configuracion\MaquinasCallesModel())->getCallesForMaquina($maquina->maquina_id, $h1_temp);
|
$calles = (new \App\Models\Configuracion\MaquinasCallesModel())->getCallesForMaquina($maquina->maquina_id, $h1_temp);
|
||||||
// Si son mas de 2 formas
|
// Si son mas de 2 formas
|
||||||
if (count($calles) > 0)
|
if (count($calles) > 0)
|
||||||
$h1 = ($h1_temp * $anchoForCalculo + 2 * $calles[0]->externas + ($h1_temp - 1) * $calles[0]->internas < ($maquina->ancho)) ? $h1_temp : $h1_temp - 1;
|
$h1 = ($h1_temp * $anchoForCalculo + 2 * $calles[0]->externas + ($h1_temp - 1) * $calles[0]->internas < (floatval($maquina->ancho))) ? $h1_temp : $h1_temp - 1;
|
||||||
else
|
else
|
||||||
$h1 = $h1_temp;
|
$h1 = $h1_temp;
|
||||||
|
|
||||||
$v1 = floor($maquina->alto_click / $altoForCalculo);
|
$v1 = floor(floatval($maquina->alto_click) / $altoForCalculo);
|
||||||
$formas_h = $h1 * $v1; //p1
|
$formas_h = $h1 * $v1; //p1
|
||||||
}
|
}
|
||||||
// verticales
|
// verticales
|
||||||
@ -651,10 +651,10 @@ class PresupuestoService extends BaseService
|
|||||||
|
|
||||||
$calles = (new \App\Models\Configuracion\MaquinasCallesModel())->getCallesForMaquina($maquina->maquina_id, $h2_temp);
|
$calles = (new \App\Models\Configuracion\MaquinasCallesModel())->getCallesForMaquina($maquina->maquina_id, $h2_temp);
|
||||||
if (count($calles) > 0)
|
if (count($calles) > 0)
|
||||||
$h2 = ($h2_temp * $altoForCalculo + 2 * $calles[0]->externas + ($h2_temp - 1) * $calles[0]->internas < ($maquina->ancho)) ? $h2_temp : $h2_temp - 1;
|
$h2 = ($h2_temp * $altoForCalculo + 2 * $calles[0]->externas + ($h2_temp - 1) * $calles[0]->internas < (floatval($maquina->ancho))) ? $h2_temp : $h2_temp - 1;
|
||||||
else
|
else
|
||||||
$h2 = $h2_temp;
|
$h2 = $h2_temp;
|
||||||
$v2 = floor($maquina->alto_click / $anchoForCalculo);
|
$v2 = floor(floatval($maquina->alto_click) / $anchoForCalculo);
|
||||||
$formas_v = $h2 * $v2; //p2
|
$formas_v = $h2 * $v2; //p2
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1061,16 +1061,16 @@ class PresupuestoService extends BaseService
|
|||||||
),
|
),
|
||||||
'cliente_id' => ($input_data['presupuesto'])->cliente_id,
|
'cliente_id' => ($input_data['presupuesto'])->cliente_id,
|
||||||
'datosTipolog' => [
|
'datosTipolog' => [
|
||||||
(object) array(
|
(object) array(
|
||||||
'negro' => $linea->rotativa_negro,
|
'negro' => $linea->rotativa_negro,
|
||||||
'cyan' => $linea->rotativa_cyan,
|
'cyan' => $linea->rotativa_cyan,
|
||||||
'magenta' => $linea->rotativa_magenta,
|
'magenta' => $linea->rotativa_magenta,
|
||||||
'amarillo' => $linea->rotativa_amarillo,
|
'amarillo' => $linea->rotativa_amarillo,
|
||||||
'cg' => $linea->rotativa_cg,
|
'cg' => $linea->rotativa_cg,
|
||||||
'gota_negro' => $linea->rotativa_gota_negro,
|
'gota_negro' => $linea->rotativa_gota_negro,
|
||||||
'gota_color' => $linea->rotativa_gota_color,
|
'gota_color' => $linea->rotativa_gota_color,
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
$comp_data = PresupuestoService::obtenerComparadorRotativa($datos);
|
$comp_data = PresupuestoService::obtenerComparadorRotativa($datos);
|
||||||
@ -1816,7 +1816,7 @@ class PresupuestoService extends BaseService
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($uso == 'cubierta' || $uso == 'sobrecubierta') {
|
if ($uso == 'cubierta' || $uso == 'sobrecubierta') {
|
||||||
|
|
||||||
$linea['fields']['dimension_desarrollo']['ancho'] = $datosPedido->anchoExteriores;
|
$linea['fields']['dimension_desarrollo']['ancho'] = $datosPedido->anchoExteriores;
|
||||||
$linea['fields']['dimension_desarrollo']['alto'] = $datosPedido->altoExteriores;
|
$linea['fields']['dimension_desarrollo']['alto'] = $datosPedido->altoExteriores;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -561,7 +561,6 @@
|
|||||||
|
|
||||||
<?php if ($formAction !== route_to('clienteAdd')){ ?>
|
<?php if ($formAction !== route_to('clienteAdd')){ ?>
|
||||||
<div class="tab-pane fade" id="tarifascliente" role="tabpanel">
|
<div class="tab-pane fade" id="tarifascliente" role="tabpanel">
|
||||||
<?= view("themes/vuexy/form/clientes/cliente/convert2templateModal") ?>
|
|
||||||
<div class='row'>
|
<div class='row'>
|
||||||
<div class="col-md-12 col-lg-4 px-4">
|
<div class="col-md-12 col-lg-4 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
@ -584,6 +583,7 @@
|
|||||||
<table id="tableOfPrecios" class="table table-striped table-hover" style="width: 100%;">
|
<table id="tableOfPrecios" class="table table-striped table-hover" style="width: 100%;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th>ID</th>
|
||||||
<th><?= lang('ClientePrecios.tipo') ?></th>
|
<th><?= lang('ClientePrecios.tipo') ?></th>
|
||||||
<th><?= lang('ClientePrecios.tipo_maquina') ?></th>
|
<th><?= lang('ClientePrecios.tipo_maquina') ?></th>
|
||||||
<th><?= lang('ClientePrecios.tipo_impresion') ?></th>
|
<th><?= lang('ClientePrecios.tipo_impresion') ?></th>
|
||||||
@ -591,10 +591,10 @@
|
|||||||
<th><?= lang('ClientePrecios.tiempo_max') ?></th>
|
<th><?= lang('ClientePrecios.tiempo_max') ?></th>
|
||||||
<th><?= lang('ClientePrecios.precio_hora') ?></th>
|
<th><?= lang('ClientePrecios.precio_hora') ?></th>
|
||||||
<th><?= lang('ClientePrecios.margen') ?></th>
|
<th><?= lang('ClientePrecios.margen') ?></th>
|
||||||
<th><?= lang('ClientePrecios.user_updated_id') ?></th>
|
<th class="noFilter"><?= lang('ClientePrecios.user_updated_id') ?></th>
|
||||||
<th><?= lang('ClientePrecios.updated_at') ?></th>
|
<th class="noFilter"><?= lang('ClientePrecios.updated_at') ?></th>
|
||||||
<th>plantilla_id</th>
|
<th class="noFilter noVis">plantilla_id</th>
|
||||||
<th class="text-nowrap" style="min-width:100px"><?= lang('Basic.global.Action') ?></th>
|
<th class="text-nowrap noFilter noVis" style="min-width:100px"><?= lang('Basic.global.Action') ?></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@ -880,345 +880,6 @@ $(document).on('click', '.btn-remove', function(e) {
|
|||||||
<?=$this->endSection() ?>
|
<?=$this->endSection() ?>
|
||||||
|
|
||||||
|
|
||||||
<?= $this->section("additionalInlineJs") ?>
|
|
||||||
/**************************************
|
|
||||||
Tarifas cliente
|
|
||||||
***************************************/
|
|
||||||
|
|
||||||
$('#plantillas').select2({
|
|
||||||
allowClear: false,
|
|
||||||
ajax: {
|
|
||||||
url: '<?= route_to("menuItemsOfClienteplantillaprecios") ?>',
|
|
||||||
type: 'post',
|
|
||||||
dataType: 'json',
|
|
||||||
|
|
||||||
data: function (params) {
|
|
||||||
return {
|
|
||||||
id: 'id',
|
|
||||||
text: 'nombre',
|
|
||||||
searchTerm: params.term,
|
|
||||||
<?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
|
|
||||||
};
|
|
||||||
},
|
|
||||||
delay: 60,
|
|
||||||
processResults: function (response) {
|
|
||||||
|
|
||||||
yeniden(response.<?= csrf_token() ?>);
|
|
||||||
|
|
||||||
return {
|
|
||||||
results: response.menu
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
cache: true
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const lastColNr_lineas = $('#tableOfPrecios').find("tr:first th").length - 1;
|
|
||||||
|
|
||||||
const actionBtns_lineas = function(data) {
|
|
||||||
return `
|
|
||||||
<span class="edit"><a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit mx-2" data-id="${data.id}"></i></a></span>
|
|
||||||
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete mx-2" data-id="${data.id}" data-bs-toggle="modal" data-bs-target="#confirm2delete"></i></a>
|
|
||||||
<span class="cancel"></span>
|
|
||||||
`;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
const tipo_linea = [
|
|
||||||
{label:'<?= lang('ClientePrecios.interior') ?>', value:'interior'},
|
|
||||||
{label:'<?= lang('ClientePrecios.cubierta') ?>', value: 'cubierta'},
|
|
||||||
{label:'<?= lang('ClientePrecios.sobrecubierta') ?>', value: 'sobrecubierta'}
|
|
||||||
];
|
|
||||||
|
|
||||||
const tipo_maquina = [
|
|
||||||
{label: '<?= lang('ClientePrecios.toner') ?>', value:'toner'},
|
|
||||||
{label: '<?= lang('ClientePrecios.inkjet') ?>', value:'inkjet'},
|
|
||||||
];
|
|
||||||
|
|
||||||
const tipo_impresion = [
|
|
||||||
{label: '<?= lang('ClientePrecios.negro') ?>', value:'negro'},
|
|
||||||
{label: '<?= lang('ClientePrecios.negrohq') ?>', value:'negrohq'},
|
|
||||||
{label: '<?= lang('ClientePrecios.color') ?>', value:'color'},
|
|
||||||
{label: '<?= lang('ClientePrecios.colorhq') ?>', value:'colorhq'},
|
|
||||||
];
|
|
||||||
|
|
||||||
var editorPrecios = new $.fn.dataTable.Editor( {
|
|
||||||
ajax: {
|
|
||||||
url: "<?= route_to('editorOfClienteprecios') ?>",
|
|
||||||
headers: {
|
|
||||||
<?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
table : "#tableOfPrecios",
|
|
||||||
idSrc: 'id',
|
|
||||||
fields: [ {
|
|
||||||
name: "tipo",
|
|
||||||
type: "select",
|
|
||||||
options: tipo_linea
|
|
||||||
}, {
|
|
||||||
name: "tipo_maquina",
|
|
||||||
type: "select",
|
|
||||||
options: tipo_maquina
|
|
||||||
}, {
|
|
||||||
name: "tipo_impresion",
|
|
||||||
type: "select",
|
|
||||||
options: tipo_impresion
|
|
||||||
}, {
|
|
||||||
name: "tiempo_min"
|
|
||||||
}, {
|
|
||||||
name: "tiempo_max"
|
|
||||||
}, {
|
|
||||||
name: "precio_hora"
|
|
||||||
}, {
|
|
||||||
name: "margen"
|
|
||||||
}, {
|
|
||||||
name: "user_updated_id",
|
|
||||||
type:'hidden',
|
|
||||||
|
|
||||||
}, {
|
|
||||||
name: "updated_at",
|
|
||||||
type:'hidden',
|
|
||||||
|
|
||||||
}, {
|
|
||||||
"name": "plantilla_id",
|
|
||||||
"type": "hidden"
|
|
||||||
},{
|
|
||||||
"name": "cliente_id",
|
|
||||||
"type": "hidden"
|
|
||||||
},{
|
|
||||||
"name": "deleted_at",
|
|
||||||
"type": "hidden"
|
|
||||||
},{
|
|
||||||
"name": "is_deleted",
|
|
||||||
"type": "hidden"
|
|
||||||
},
|
|
||||||
]
|
|
||||||
} );
|
|
||||||
|
|
||||||
editorPrecios.on( 'preSubmit', function ( e, d, type ) {
|
|
||||||
if ( type === 'create'){
|
|
||||||
d.data[0]['cliente_id'] = id;
|
|
||||||
}
|
|
||||||
else if(type === 'edit' ) {
|
|
||||||
for (v in d.data){
|
|
||||||
d.data[v]['cliente_id'] = id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
editorPrecios.on( 'postSubmit', function ( e, json, data, action ) {
|
|
||||||
|
|
||||||
yeniden(json.<?= csrf_token() ?>);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
editorPrecios.on( 'submitSuccess', function ( e, json, data, action ) {
|
|
||||||
|
|
||||||
theTablePrecios.clearPipeline();
|
|
||||||
theTablePrecios.draw();
|
|
||||||
});
|
|
||||||
|
|
||||||
editorPrecios.on ('postEdit', function ( e, json, data, action ) {
|
|
||||||
const domain = window.location.origin
|
|
||||||
fetch(domain + "/clientes/clienteprecios/update/" + id , {
|
|
||||||
method: "POST",
|
|
||||||
body: JSON.stringify({
|
|
||||||
<?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
|
|
||||||
}),
|
|
||||||
headers: {
|
|
||||||
"Content-type": "application/json; charset=UTF-8"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
editorPrecios.on ('postCreate', function ( e, json, data, action ) {
|
|
||||||
const domain = window.location.origin
|
|
||||||
fetch(domain + "/clientes/clienteprecios/update/" + id , {
|
|
||||||
method: "POST",
|
|
||||||
body: JSON.stringify({
|
|
||||||
<?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
|
|
||||||
}),
|
|
||||||
headers: {
|
|
||||||
"Content-type": "application/json; charset=UTF-8"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
var theTablePrecios = $('#tableOfPrecios').DataTable( {
|
|
||||||
serverSide: true,
|
|
||||||
processing: true,
|
|
||||||
autoWidth: true,
|
|
||||||
responsive: true,
|
|
||||||
lengthMenu: [ 10, 25, 50, 100],
|
|
||||||
order: [[ 0, "asc" ], [ 1, "asc" ], [ 2, "asc" ], [ 3, "asc" ]],
|
|
||||||
pageLength: 50,
|
|
||||||
lengthChange: true,
|
|
||||||
searching: false,
|
|
||||||
paging: true,
|
|
||||||
info: false,
|
|
||||||
dom: '<"mt-4"><"float-end"B><"float-start"l><t><"mt-4 mb-3"p>',
|
|
||||||
ajax : $.fn.dataTable.pipeline( {
|
|
||||||
url: '<?= route_to('dataTableOfClienteprecios') ?>',
|
|
||||||
data: {
|
|
||||||
cliente_id: id,
|
|
||||||
},
|
|
||||||
method: 'POST',
|
|
||||||
headers: {'X-Requested-With': 'XMLHttpRequest'},
|
|
||||||
async: true,
|
|
||||||
}),
|
|
||||||
columns: [
|
|
||||||
{ 'data': 'tipo' ,
|
|
||||||
'render': function ( data, type, row, meta ) {
|
|
||||||
if(data=='interior')
|
|
||||||
return '<?= lang('ClientePrecios.interior') ?>';
|
|
||||||
else if(data=='cubierta')
|
|
||||||
return '<?= lang('ClientePrecios.cubierta') ?>';
|
|
||||||
else if(data=='sobrecubierta')
|
|
||||||
return '<?= lang('ClientePrecios.sobrecubierta') ?>';
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ 'data': 'tipo_maquina',
|
|
||||||
'render': function ( data, type, row, meta ) {
|
|
||||||
if(data=='toner')
|
|
||||||
return '<?= lang('ClientePrecios.toner') ?>';
|
|
||||||
else if(data=='inkjet')
|
|
||||||
return '<?= lang('ClientePrecios.inkjet') ?>';
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ 'data': 'tipo_impresion',
|
|
||||||
'render': function ( data, type, row, meta ) {
|
|
||||||
if(data=='negro')
|
|
||||||
return '<?= lang('ClientePrecios.negro') ?>';
|
|
||||||
else if(data=='negrohq')
|
|
||||||
return '<?= lang('ClientePrecios.negrohq') ?>';
|
|
||||||
else if(data=='color')
|
|
||||||
return '<?= lang('ClientePrecios.color') ?>';
|
|
||||||
else if(data=='colorhq')
|
|
||||||
return '<?= lang('ClientePrecios.colorhq') ?>';
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ 'data': 'tiempo_min' },
|
|
||||||
{ 'data': 'tiempo_max' },
|
|
||||||
{ 'data': 'precio_hora' },
|
|
||||||
{ 'data': 'margen' },
|
|
||||||
{ 'data': 'user_updated_id',
|
|
||||||
'render': function ( data, type, row, meta ) {
|
|
||||||
return row.user_updated
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ 'data': 'updated_at' },
|
|
||||||
{ 'data': 'plantilla_id' },
|
|
||||||
{
|
|
||||||
data: actionBtns_lineas,
|
|
||||||
className: 'row-edit dt-center'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
columnDefs: [
|
|
||||||
{
|
|
||||||
target: 9,
|
|
||||||
orderable: false,
|
|
||||||
visible: false,
|
|
||||||
searchable: false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
orderable: false,
|
|
||||||
searchable: false,
|
|
||||||
targets: [lastColNr_lineas]
|
|
||||||
},
|
|
||||||
{"orderData": [ 0, 1 ], "targets": 0 },
|
|
||||||
|
|
||||||
],
|
|
||||||
language: {
|
|
||||||
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
|
|
||||||
},
|
|
||||||
buttons: [ {
|
|
||||||
className: 'btn btn-primary me-sm-3 me-1',
|
|
||||||
extend: "createInline",
|
|
||||||
editor: editorPrecios,
|
|
||||||
formOptions: {
|
|
||||||
submitTrigger: -1,
|
|
||||||
submitHtml: '<a href="javascript:void(0);"><i class="ti ti-device-floppy"></i></a>'
|
|
||||||
}
|
|
||||||
} ]
|
|
||||||
} );
|
|
||||||
|
|
||||||
|
|
||||||
const initPrecioTemplate = <?php echo json_encode($precioTemplate);?>;
|
|
||||||
if(initPrecioTemplate != null){
|
|
||||||
var newOption = new Option(initPrecioTemplate.label, initPrecioTemplate.value, false, false);
|
|
||||||
$('#plantillas').append(newOption);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Activate an inline edit on click of a table cell
|
|
||||||
$('#tableOfPrecios').on( 'click', 'tbody span.edit', function (e) {
|
|
||||||
editorPrecios.inline(
|
|
||||||
theTablePrecios.cells(this.parentNode.parentNode, '*').nodes(),
|
|
||||||
{
|
|
||||||
cancelHtml: '<a href="javascript:void(0);"><i class="ti ti-x"></i></a>',
|
|
||||||
cancelTrigger: 'span.cancel',
|
|
||||||
submitHtml: '<a href="javascript:void(0);"><i class="ti ti-device-floppy"></i></a>',
|
|
||||||
submitTrigger: 'span.edit',
|
|
||||||
submit: 'allIfChanged'
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} );
|
|
||||||
|
|
||||||
|
|
||||||
// Delete row
|
|
||||||
$(document).on('click', '.btn-delete', function(e) {
|
|
||||||
$(".btn-remove").attr('data-id', $(this).attr('data-id'));
|
|
||||||
$(".btn-remove").attr('table-id', '#tableOfPrecios');
|
|
||||||
$(".btn-remove").attr('row', $(this).closest('tr')[0]._DT_RowIndex);
|
|
||||||
});
|
|
||||||
|
|
||||||
function delete_precio(dataId, row){
|
|
||||||
if ($.isNumeric(dataId)) {
|
|
||||||
editorPrecios
|
|
||||||
.create( false )
|
|
||||||
.edit( theTablePrecios.rows(row), false)
|
|
||||||
.set( 'deleted_at', new Date().toISOString().slice(0, 19).replace('T', ' ') )
|
|
||||||
.set( 'is_deleted', 1 )
|
|
||||||
.submit();
|
|
||||||
$('#confirm2delete').modal('toggle');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$('#plantillas').on('change.select2', function(){
|
|
||||||
const data = $('#plantillas').select2('data');
|
|
||||||
if(data.length>0){
|
|
||||||
const domain = window.location.origin
|
|
||||||
fetch(domain + "/clientes/clienteprecios/update/" + id , {
|
|
||||||
method: "POST",
|
|
||||||
body: JSON.stringify({
|
|
||||||
plantilla_id: data[0].id,
|
|
||||||
<?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
|
|
||||||
}),
|
|
||||||
headers: {
|
|
||||||
"Content-type": "application/json; charset=UTF-8"
|
|
||||||
}
|
|
||||||
}).then(function(){
|
|
||||||
theTablePrecios.clearPipeline();
|
|
||||||
theTablePrecios.draw();
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
$('#convert2template').on('click', function(){
|
|
||||||
var newAddDialog = $('#convert2Template')
|
|
||||||
newAddDialog.modal("show");
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
<?= $this->endSection() ?>
|
|
||||||
|
|
||||||
|
|
||||||
<?= $this->section("additionalInlineJs") ?>
|
<?= $this->section("additionalInlineJs") ?>
|
||||||
/****************************************
|
/****************************************
|
||||||
Direcciones cliente
|
Direcciones cliente
|
||||||
|
|||||||
@ -1,65 +0,0 @@
|
|||||||
<div id="convert2Template" class="modal fade addModal">
|
|
||||||
<div class="modal-dialog modal-lg modal-simple">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h4 id="labelTitleConfirmDialog" class="modal-title"><?= lang('ClientePrecios.convertir2plantilla') ?></h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<div id='error-nombre'></div>
|
|
||||||
|
|
||||||
<div class="mb-3">
|
|
||||||
<p><?= lang('ClientePrecios.convertir2plantillaText') ?></p>
|
|
||||||
<p><?= lang('ClientePrecios.convertir2plantillaText2') ?></p>
|
|
||||||
</div><!--//.mb-3 -->
|
|
||||||
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nombre_plantilla" class="form-label">
|
|
||||||
<?= lang('ClientePrecios.nombrePlantilla') ?>
|
|
||||||
</label>
|
|
||||||
<input type="text" id="nombre_plantilla" maxLength="100" class="form-control new-address">
|
|
||||||
</div><!--//.mb-3 -->
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button id="saveTemplate"
|
|
||||||
type="button"
|
|
||||||
class="btn btn-primary"
|
|
||||||
><?= lang('App.global_save') ?></button>
|
|
||||||
<button id="cancelTemplate"
|
|
||||||
type="button"
|
|
||||||
class="btn btn-default"
|
|
||||||
><?= lang('App.user_delete_btn_cancel') ?></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<?= $this->section("additionalInlineJs") ?>
|
|
||||||
$('#saveTemplate').on('click', function(){
|
|
||||||
if($('#nombre_plantilla').val().length == 0){
|
|
||||||
popErrorAlert('<?= lang('ClientePrecios.errors.error_nombre_template') ?>', 'error-nombre')
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
data = new FormData();
|
|
||||||
data.append('cliente_id', id)
|
|
||||||
data.append('nombre', $('#nombre_plantilla').val())
|
|
||||||
data.append('<?= csrf_token() ?? "token" ?>', <?= csrf_token() ?>v)
|
|
||||||
fetch('<?= route_to("createClienteplantillaprecios");?>' , {
|
|
||||||
method: "POST",
|
|
||||||
body: data,
|
|
||||||
})
|
|
||||||
.then(data => {
|
|
||||||
$('#convert2Template').modal("hide");
|
|
||||||
var newOption = new Option($('#nombre_plantilla').val(), "", false, false);
|
|
||||||
$('#plantillas').append(newOption);
|
|
||||||
$('#nombre_plantilla').val("");
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
$('#cancelTemplate').on('click', function(){
|
|
||||||
$('#convert2Template').modal("hide");
|
|
||||||
})
|
|
||||||
<?=$this->endSection() ?>
|
|
||||||
@ -1,6 +1,7 @@
|
|||||||
<?= $this->include("themes/_commonPartialsBs/datatables") ?>
|
<?= $this->include("themes/_commonPartialsBs/datatables") ?>
|
||||||
<?= $this->include("themes/_commonPartialsBs/select2bs5") ?>
|
<?= $this->include("themes/_commonPartialsBs/select2bs5") ?>
|
||||||
<?= $this->include("themes/_commonPartialsBs/sweetalert") ?>
|
<?= $this->include("themes/_commonPartialsBs/sweetalert") ?>
|
||||||
|
<?= $this->include('themes/_commonPartialsBs/_confirm2delete') ?>
|
||||||
<?=$this->extend('themes/vuexy/main/defaultlayout') ?>
|
<?=$this->extend('themes/vuexy/main/defaultlayout') ?>
|
||||||
|
|
||||||
<?= $this->section("content") ?>
|
<?= $this->section("content") ?>
|
||||||
@ -43,5 +44,8 @@
|
|||||||
|
|
||||||
|
|
||||||
<?= $this->section("additionalExternalJs") ?>
|
<?= $this->section("additionalExternalJs") ?>
|
||||||
|
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.colVis.min.js") ?>"></script>
|
||||||
|
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.html5.min.js") ?>"></script>
|
||||||
|
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.print.min.js") ?>"></script>
|
||||||
<script type="module" src="<?= site_url('assets/js/safekat/pages/cliente/cliente.js?'. 'token' . '='. (csrf_token() ?? "token")) ?>"></script>
|
<script type="module" src="<?= site_url('assets/js/safekat/pages/cliente/cliente.js?'. 'token' . '='. (csrf_token() ?? "token")) ?>"></script>
|
||||||
<?= $this->endSection() ?>
|
<?= $this->endSection() ?>
|
||||||
@ -16,12 +16,8 @@
|
|||||||
<?= !empty($validation->getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?>
|
<?= !empty($validation->getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?>
|
||||||
<?= view("themes/vuexy/form/clientes/plantillaprecios/_ClienteplantillapreciosFormItems") ?>
|
<?= view("themes/vuexy/form/clientes/plantillaprecios/_ClienteplantillapreciosFormItems") ?>
|
||||||
<div class="pt-4">
|
<div class="pt-4">
|
||||||
<input
|
<input type="submit" class="btn btn-primary float-start me-sm-3 me-1" name="save"
|
||||||
type="submit"
|
value="<?= lang("Basic.global.Save") ?>" />
|
||||||
class="btn btn-primary float-start me-sm-3 me-1"
|
|
||||||
name="save"
|
|
||||||
value="<?= lang("Basic.global.Save") ?>"
|
|
||||||
/>
|
|
||||||
<?= anchor(route_to("clienteplantillapreciosList"), lang("Basic.global.Cancel"), ["class" => "btn btn-secondary"]) ?>
|
<?= anchor(route_to("clienteplantillapreciosList"), lang("Basic.global.Cancel"), ["class" => "btn btn-secondary"]) ?>
|
||||||
|
|
||||||
</div><!-- /.card-footer -->
|
</div><!-- /.card-footer -->
|
||||||
@ -31,22 +27,32 @@
|
|||||||
</div><!--//.row -->
|
</div><!--//.row -->
|
||||||
|
|
||||||
|
|
||||||
<?php if(str_contains($formAction,'edit')): ?>
|
<?php if (str_contains($formAction, 'edit')): ?>
|
||||||
|
|
||||||
<div class="accordion mt-3" id="accordionPreciosLineas">
|
<div class="accordion mt-3" id="accordionPreciosLineas">
|
||||||
|
|
||||||
<div class="card accordion-item active">
|
<div class="card accordion-item active">
|
||||||
<h2 class="accordion-header" id="headingOne">
|
<h2 class="accordion-header" id="headingOne">
|
||||||
<button type="button" class="accordion-button" data-bs-toggle="collapse" data-bs-target="#accordionTip1" aria-expanded="false" aria-controls="accordionTip1">
|
<button type="button" class="accordion-button" data-bs-toggle="collapse" data-bs-target="#accordionTip1"
|
||||||
|
aria-expanded="false" aria-controls="accordionTip1">
|
||||||
<h3><?= lang("MaquinasTarifasImpresions.moduleTitle") ?></h3>
|
<h3><?= lang("MaquinasTarifasImpresions.moduleTitle") ?></h3>
|
||||||
</button>
|
</button>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div id="accordionTip1" class="accordion-collapse collapse show" data-bs-parent="#accordionPreciosLineas">
|
<div id="accordionTip1" class="accordion-collapse collapse show" data-bs-parent="#accordionPreciosLineas">
|
||||||
<div class="accordion-body">
|
<div class="accordion-body">
|
||||||
|
|
||||||
|
<button id="btnApply" type="button" class="btn btn-primary d-none">
|
||||||
|
Guardar y aplicar a clientes
|
||||||
|
</button>
|
||||||
|
<button id="btnUndo" type="button" class="btn btn-secondary d-none">
|
||||||
|
Descartar cambios
|
||||||
|
</button>
|
||||||
|
|
||||||
<table id="tableOfPlantillasPreciosLineas" class="table table-striped table-hover" style="width: 100%;">
|
<table id="tableOfPlantillasPreciosLineas" class="table table-striped table-hover" style="width: 100%;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th>ID</th>
|
||||||
<th><?= lang('ClientePrecios.tipo') ?></th>
|
<th><?= lang('ClientePrecios.tipo') ?></th>
|
||||||
<th><?= lang('ClientePrecios.tipo_maquina') ?></th>
|
<th><?= lang('ClientePrecios.tipo_maquina') ?></th>
|
||||||
<th><?= lang('ClientePrecios.tipo_impresion') ?></th>
|
<th><?= lang('ClientePrecios.tipo_impresion') ?></th>
|
||||||
@ -55,308 +61,51 @@
|
|||||||
<th><?= lang('ClientePrecios.precio_hora') ?></th>
|
<th><?= lang('ClientePrecios.precio_hora') ?></th>
|
||||||
<th><?= lang('ClientePrecios.margen') ?></th>
|
<th><?= lang('ClientePrecios.margen') ?></th>
|
||||||
<th><?= lang('ClientePrecios.user_updated_id') ?></th>
|
<th><?= lang('ClientePrecios.user_updated_id') ?></th>
|
||||||
<th><?= lang('ClientePrecios.updated_at') ?></th>
|
<th class="noFilter"><?= lang('ClientePrecios.updated_at') ?></th>
|
||||||
<th class="text-nowrap" style="min-width:100px"><?= lang('Basic.global.Action') ?></th>
|
<th class="text-nowrap noFilter" style="min-width:100px"><?= lang('Basic.global.Action') ?>
|
||||||
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div> <!-- //.accordion -->
|
</div> <!-- //.accordion -->
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
|
||||||
<?= $this->endSection() ?>
|
<?= $this->endSection() ?>
|
||||||
|
|
||||||
<?php if(str_contains($formAction,'edit')): ?>
|
<?= $this->section('css') ?>
|
||||||
<?=$this->section('additionalInlineJs') ?>
|
<link rel="stylesheet"
|
||||||
|
href="<?= site_url('themes/vuexy/css/datatables-editor/editor.dataTables.min.css') ?>">
|
||||||
const lastColNr_lineas = $('#tableOfPlantillasPreciosLineas').find("tr:first th").length - 1;
|
<link rel="stylesheet"
|
||||||
|
href="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.bootstrap5.min.css") ?>">
|
||||||
const url = window.location.href;
|
<?= $this->endSection() ?>
|
||||||
const url_parts = url.split('/');
|
|
||||||
|
|
||||||
let id = -1;
|
|
||||||
if(url_parts[url_parts.length-2] == 'edit'){
|
|
||||||
id = url_parts[url_parts.length-1];
|
|
||||||
}
|
|
||||||
|
|
||||||
const actionBtns_lineas = function(data) {
|
|
||||||
return `
|
|
||||||
<span class="edit"><a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit mx-2" data-id="${data.id}"></i></a></span>
|
|
||||||
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete mx-2" data-id="${data.id}" data-bs-toggle="modal" data-bs-target="#confirm2delete"></i></a>
|
|
||||||
<span class="cancel"></span>
|
|
||||||
`;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
const tipo_linea = [
|
|
||||||
{label:'<?= lang('ClientePrecios.interior') ?>', value:'interior'},
|
|
||||||
{label:'<?= lang('ClientePrecios.cubierta') ?>', value: 'cubierta'},
|
|
||||||
{label:'<?= lang('ClientePrecios.sobrecubierta') ?>', value: 'sobrecubierta'}
|
|
||||||
];
|
|
||||||
|
|
||||||
const tipo_maquina = [
|
|
||||||
{label: '<?= lang('ClientePrecios.toner') ?>', value:'toner'},
|
|
||||||
{label: '<?= lang('ClientePrecios.inkjet') ?>', value:'inkjet'},
|
|
||||||
];
|
|
||||||
|
|
||||||
const tipo_impresion = [
|
|
||||||
{label: '<?= lang('ClientePrecios.negro') ?>', value:'negro'},
|
|
||||||
{label: '<?= lang('ClientePrecios.negrohq') ?>', value:'negrohq'},
|
|
||||||
{label: '<?= lang('ClientePrecios.color') ?>', value:'color'},
|
|
||||||
{label: '<?= lang('ClientePrecios.colorhq') ?>', value:'colorhq'},
|
|
||||||
];
|
|
||||||
|
|
||||||
var editor = new $.fn.dataTable.Editor( {
|
|
||||||
ajax: {
|
|
||||||
url: "<?= route_to('editorOfClienteplantillaprecioslineas') ?>",
|
|
||||||
headers: {
|
|
||||||
<?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
table : "#tableOfPlantillasPreciosLineas",
|
|
||||||
idSrc: 'id',
|
|
||||||
fields: [ {
|
|
||||||
name: "tipo",
|
|
||||||
type: "select",
|
|
||||||
options: tipo_linea
|
|
||||||
}, {
|
|
||||||
name: "tipo_maquina",
|
|
||||||
type: "select",
|
|
||||||
options: tipo_maquina
|
|
||||||
}, {
|
|
||||||
name: "tipo_impresion",
|
|
||||||
type: "select",
|
|
||||||
options: tipo_impresion
|
|
||||||
}, {
|
|
||||||
name: "tiempo_min"
|
|
||||||
}, {
|
|
||||||
name: "tiempo_max"
|
|
||||||
}, {
|
|
||||||
name: "precio_hora"
|
|
||||||
}, {
|
|
||||||
name: "margen"
|
|
||||||
}, {
|
|
||||||
name: "user_updated_id",
|
|
||||||
type:'hidden',
|
|
||||||
|
|
||||||
}, {
|
|
||||||
name: "updated_at",
|
|
||||||
type:'hidden',
|
|
||||||
|
|
||||||
}, {
|
|
||||||
"name": "plantilla_id",
|
|
||||||
"type": "hidden"
|
|
||||||
},{
|
|
||||||
"name": "deleted_at",
|
|
||||||
"type": "hidden"
|
|
||||||
},{
|
|
||||||
"name": "is_deleted",
|
|
||||||
"type": "hidden"
|
|
||||||
},
|
|
||||||
]
|
|
||||||
} );
|
|
||||||
|
|
||||||
editor.on( 'preSubmit', function ( e, d, type ) {
|
|
||||||
if ( type === 'create'){
|
|
||||||
d.data[0]['plantilla_id'] = id;
|
|
||||||
}
|
|
||||||
else if(type === 'edit' ) {
|
|
||||||
for (v in d.data){
|
|
||||||
d.data[v]['plantilla_id'] = id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
editor.on( 'postSubmit', function ( e, json, data, action ) {
|
|
||||||
|
|
||||||
yeniden(json.<?= csrf_token() ?>);
|
|
||||||
|
|
||||||
const domain = window.location.origin
|
|
||||||
fetch(domain + "/clientes/clienteprecios/update/" + -1 , {
|
|
||||||
method: "POST",
|
|
||||||
body: JSON.stringify({
|
|
||||||
plantilla_id: id,
|
|
||||||
<?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
|
|
||||||
}),
|
|
||||||
headers: {
|
|
||||||
"Content-type": "application/json; charset=UTF-8"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
editor.on( 'submitSuccess', function ( e, json, data, action ) {
|
|
||||||
|
|
||||||
theTable.clearPipeline();
|
|
||||||
theTable.draw();
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
var theTable = $('#tableOfPlantillasPreciosLineas').DataTable( {
|
|
||||||
serverSide: true,
|
|
||||||
processing: true,
|
|
||||||
autoWidth: true,
|
|
||||||
responsive: true,
|
|
||||||
lengthMenu: [ 10, 25, 50, 100],
|
|
||||||
order: [[ 0, "asc" ], [ 1, "asc" ], [ 2, "asc" ], [ 3, "asc" ]],
|
|
||||||
pageLength: 50,
|
|
||||||
lengthChange: true,
|
|
||||||
searching: false,
|
|
||||||
paging: true,
|
|
||||||
info: false,
|
|
||||||
dom: '<"mt-4"><"float-end"B><"float-start"l><t><"mt-4 mb-3"p>',
|
|
||||||
ajax : $.fn.dataTable.pipeline( {
|
|
||||||
url: '<?= route_to('dataTableOfClientesplantillaprecioslineas') ?>',
|
|
||||||
data: {
|
|
||||||
plantilla_id: id,
|
|
||||||
},
|
|
||||||
method: 'POST',
|
|
||||||
headers: {'X-Requested-With': 'XMLHttpRequest'},
|
|
||||||
async: true,
|
|
||||||
}),
|
|
||||||
columns: [
|
|
||||||
{ 'data': 'tipo' ,
|
|
||||||
'render': function ( data, type, row, meta ) {
|
|
||||||
if(data=='interior')
|
|
||||||
return '<?= lang('ClientePrecios.interior') ?>';
|
|
||||||
else if(data=='cubierta')
|
|
||||||
return '<?= lang('ClientePrecios.cubierta') ?>';
|
|
||||||
else if(data=='sobrecubierta')
|
|
||||||
return '<?= lang('ClientePrecios.sobrecubierta') ?>';
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ 'data': 'tipo_maquina',
|
|
||||||
'render': function ( data, type, row, meta ) {
|
|
||||||
if(data=='toner')
|
|
||||||
return '<?= lang('ClientePrecios.toner') ?>';
|
|
||||||
else if(data=='inkjet')
|
|
||||||
return '<?= lang('ClientePrecios.inkjet') ?>';
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ 'data': 'tipo_impresion',
|
|
||||||
'render': function ( data, type, row, meta ) {
|
|
||||||
if(data=='negro')
|
|
||||||
return '<?= lang('ClientePrecios.negro') ?>';
|
|
||||||
else if(data=='negrohq')
|
|
||||||
return '<?= lang('ClientePrecios.negrohq') ?>';
|
|
||||||
else if(data=='color')
|
|
||||||
return '<?= lang('ClientePrecios.color') ?>';
|
|
||||||
else if(data=='colorhq')
|
|
||||||
return '<?= lang('ClientePrecios.colorhq') ?>';
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ 'data': 'tiempo_min' },
|
|
||||||
{ 'data': 'tiempo_max' },
|
|
||||||
{ 'data': 'precio_hora' },
|
|
||||||
{ 'data': 'margen' },
|
|
||||||
{ 'data': 'user_updated_id',
|
|
||||||
'render': function ( data, type, row, meta ) {
|
|
||||||
return row.user_updated
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ 'data': 'updated_at' },
|
|
||||||
{
|
|
||||||
data: actionBtns_lineas,
|
|
||||||
className: 'row-edit dt-center'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
columnDefs: [
|
|
||||||
{
|
|
||||||
orderable: false,
|
|
||||||
searchable: false,
|
|
||||||
targets: [lastColNr_lineas]
|
|
||||||
},
|
|
||||||
{"orderData": [ 0, 1 ], "targets": 0 },
|
|
||||||
|
|
||||||
],
|
|
||||||
language: {
|
|
||||||
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
|
|
||||||
},
|
|
||||||
buttons: [
|
|
||||||
{
|
|
||||||
extend: 'collection',
|
|
||||||
text: 'Exportar',
|
|
||||||
buttons:[
|
|
||||||
'copy', 'csv', 'excel', 'print', {
|
|
||||||
extend: 'pdfHtml5',
|
|
||||||
orientation: 'landscape',
|
|
||||||
pageSize: 'A4'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
className: 'btn btn-primary me-sm-3 me-1',
|
|
||||||
extend: "createInline",
|
|
||||||
editor: editor,
|
|
||||||
formOptions: {
|
|
||||||
submitTrigger: -1,
|
|
||||||
submitHtml: '<a href="javascript:void(0);"><i class="ti ti-device-floppy"></i></a>'
|
|
||||||
}
|
|
||||||
} ]
|
|
||||||
} );
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Activate an inline edit on click of a table cell
|
|
||||||
$('#tableOfPlantillasPreciosLineas').on( 'click', 'tbody span.edit', function (e) {
|
|
||||||
editor.inline(
|
|
||||||
theTable.cells(this.parentNode.parentNode, '*').nodes(),
|
|
||||||
{
|
|
||||||
cancelHtml: '<a href="javascript:void(0);"><i class="ti ti-x"></i></a>',
|
|
||||||
cancelTrigger: 'span.cancel',
|
|
||||||
submitHtml: '<a href="javascript:void(0);"><i class="ti ti-device-floppy"></i></a>',
|
|
||||||
submitTrigger: 'span.edit',
|
|
||||||
submit: 'allIfChanged'
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} );
|
|
||||||
|
|
||||||
|
|
||||||
// Delete row
|
|
||||||
$(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/clienteplantillaprecioslineas/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() ?>
|
|
||||||
|
|
||||||
<?php endif; ?>
|
|
||||||
|
|
||||||
<?=$this->section('css') ?>
|
|
||||||
<link rel="stylesheet" href="<?= site_url('themes/vuexy/css/datatables-editor/editor.dataTables.min.css') ?>">
|
|
||||||
<link rel="stylesheet" href="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.bootstrap5.min.css") ?>">
|
|
||||||
<?=$this->endSection() ?>
|
|
||||||
|
|
||||||
<?= $this->section('additionalExternalJs') ?>
|
<?= $this->section('additionalExternalJs') ?>
|
||||||
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/dataTables.buttons.min.js") ?>"></script>
|
<script
|
||||||
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.bootstrap5.min.js") ?>"></script>
|
src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/dataTables.buttons.min.js") ?>"></script>
|
||||||
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.html5.min.js") ?>"></script>
|
<script
|
||||||
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.print.min.js") ?>"></script>
|
src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.bootstrap5.min.js") ?>"></script>
|
||||||
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/jszip/jszip.min.js") ?>"></script>
|
<script
|
||||||
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/pdfmake/pdfmake.min.js") ?>" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.html5.min.js") ?>"></script>
|
||||||
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/pdfmake/vfs_fonts.js") ?>"></script>
|
<script
|
||||||
<script src="<?= site_url('themes/vuexy/js/datatables-editor/dataTables.editor.min.js') ?>"></script>
|
src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/buttons/buttons.print.min.js") ?>"></script>
|
||||||
<?=$this->endSection() ?>
|
<script
|
||||||
|
src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/jszip/jszip.min.js") ?>"></script>
|
||||||
|
<script
|
||||||
|
src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/pdfmake/pdfmake.min.js") ?>"
|
||||||
|
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||||
|
<script
|
||||||
|
src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/pdfmake/vfs_fonts.js") ?>"></script>
|
||||||
|
<script
|
||||||
|
src="<?= site_url('themes/vuexy/js/datatables-editor/dataTables.editor.min.js') ?>"></script>
|
||||||
|
<?php if (str_contains($formAction, 'edit')): ?>
|
||||||
|
<script type="module"
|
||||||
|
src="<?= site_url('assets/js/safekat/pages/plantillasTarifasCliente/edit.js') ?>"></script>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?= $this->endSection() ?>
|
||||||
@ -10,14 +10,16 @@
|
|||||||
<h3 class="card-title"><?=lang('ClientePrecios.plantillaPrecios_list') ?></h3>
|
<h3 class="card-title"><?=lang('ClientePrecios.plantillaPrecios_list') ?></h3>
|
||||||
<?=anchor(route_to('newClienteplantillaprecios'), lang('Basic.global.addNew').' '.lang('ClientePrecios.plantillaPrecios_name'), ['class'=>'btn btn-primary float-end']); ?>
|
<?=anchor(route_to('newClienteplantillaprecios'), lang('Basic.global.addNew').' '.lang('ClientePrecios.plantillaPrecios_name'), ['class'=>'btn btn-primary float-end']); ?>
|
||||||
</div><!--//.card-header -->
|
</div><!--//.card-header -->
|
||||||
<div class="card-body">
|
<?= csrf_field() ?>
|
||||||
|
<div class="card-body">
|
||||||
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
|
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
|
||||||
|
|
||||||
<table id="tableOfClienteplantillaprecios" class="table table-striped table-hover using-exportable-data-table" style="width: 100%;">
|
<table id="tableOfClienteplantillaprecios" class="table table-striped table-hover using-exportable-data-table" style="width: 100%;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th>ID</th>
|
||||||
<th><?= lang('ClientePrecios.nombre') ?></th>
|
<th><?= lang('ClientePrecios.nombre') ?></th>
|
||||||
<th class="text-nowrap"><?= lang('Basic.global.Action') ?></th>
|
<th class="noFilter text-nowrap"><?= lang('Basic.global.Action') ?></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@ -50,100 +52,6 @@
|
|||||||
|
|
||||||
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/pdfmake/vfs_fonts.js") ?>"></script>
|
<script src="<?= site_url("/themes/vuexy/vendor/libs/datatables-sk/plugins/pdfmake/vfs_fonts.js") ?>"></script>
|
||||||
|
|
||||||
|
<script type="module" src="<?= site_url('assets/js/safekat/pages/plantillasTarifasCliente/list.js') ?>"></script>
|
||||||
|
|
||||||
<?=$this->endSection() ?>
|
<?=$this->endSection() ?>
|
||||||
|
|
||||||
<?=$this->section('additionalInlineJs') ?>
|
|
||||||
|
|
||||||
const lastColNr2 = $(".using-exportable-data-table").find("tr:first th").length - 1;
|
|
||||||
const actionBtns2 = function(data) {
|
|
||||||
return `
|
|
||||||
<span class="edit"><a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit mx-2" data-id="${data.id}"></i></a></span>
|
|
||||||
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete mx-2" data-id="${data.id}" data-bs-toggle="modal" data-bs-target="#confirm2delete"></i></a>
|
|
||||||
<span class="cancel"></span>
|
|
||||||
`;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
$(document).on('click', '.btn-edit', function(e) {
|
|
||||||
window.location.href = `/clientes/clienteplantillaprecios/edit/${$(this).attr('data-id')}`;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
// Delete row
|
|
||||||
$(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/clienteplantillaprecios/delete/${dataId}`,
|
|
||||||
method: 'GET',
|
|
||||||
}).done((data, textStatus, jqXHR) => {
|
|
||||||
$('#confirm2delete').modal('toggle');
|
|
||||||
tablePLantillaPrecios.clearPipeline();
|
|
||||||
tablePLantillaPrecios.row($(row)).invalidate().draw();
|
|
||||||
|
|
||||||
// Se borran las lineas asociadas
|
|
||||||
const domain = window.location.origin
|
|
||||||
fetch(domain + "/clientes/clienteplantillaprecios/update/" + dataId , {
|
|
||||||
method: "POST",
|
|
||||||
body: JSON.stringify({
|
|
||||||
<?= csrf_token() ?? "token" ?> : <?= csrf_token() ?>v
|
|
||||||
}),
|
|
||||||
headers: {
|
|
||||||
"Content-type": "application/json; charset=UTF-8"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
popSuccessAlert(data.msg ?? jqXHR.statusText);
|
|
||||||
}).fail((jqXHR, textStatus, errorThrown) => {
|
|
||||||
popErrorAlert(jqXHR.responseJSON.messages.error)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
var tablePLantillaPrecios = $('#tableOfClienteplantillaprecios').DataTable( {
|
|
||||||
serverSide: true,
|
|
||||||
processing: true,
|
|
||||||
autoWidth: true,
|
|
||||||
responsive: true,
|
|
||||||
lengthMenu: [ 5, 10, 25, 50, 75, 100, 250],
|
|
||||||
order: [[ 0, "asc" ]],
|
|
||||||
pageLength: 25,
|
|
||||||
lengthChange: true,
|
|
||||||
searching: true,
|
|
||||||
paging: true,
|
|
||||||
info: true,
|
|
||||||
stateSave: true,
|
|
||||||
dom: "lftp",
|
|
||||||
ajax : $.fn.dataTable.pipeline( {
|
|
||||||
url: '<?= route_to('dataTableOfClientesplantillaprecios') ?>',
|
|
||||||
method: 'POST',
|
|
||||||
headers: {'X-Requested-With': 'XMLHttpRequest'},
|
|
||||||
async: true,
|
|
||||||
}),
|
|
||||||
columns: [
|
|
||||||
{ data: 'nombre'},
|
|
||||||
{ data: actionBtns2,
|
|
||||||
className: 'row-edit dt-center'}
|
|
||||||
],
|
|
||||||
columnDefs: [
|
|
||||||
{
|
|
||||||
orderable: false,
|
|
||||||
targets: [lastColNr2]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
searchable: false,
|
|
||||||
targets: [lastColNr2]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
language: {
|
|
||||||
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
<?=$this->endSection() ?>
|
|
||||||
@ -63,7 +63,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div
|
<div id="divExcluirRotativa"
|
||||||
class="col-sm-5 mb-3 d-flex flex-column align-items-center <?= (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) ? " d-none" : "" ?>">
|
class="col-sm-5 mb-3 d-flex flex-column align-items-center <?= (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) ? " d-none" : "" ?>">
|
||||||
<div class="form-check form-switch mb-2">
|
<div class="form-check form-switch mb-2">
|
||||||
<input <?= (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) ? " hidden" : "" ?> class=" calcular-solapas calcular-presupuesto form-check-input" type="checkbox" id="excluirRotativa"
|
<input <?= (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) ? " hidden" : "" ?> class=" calcular-solapas calcular-presupuesto form-check-input" type="checkbox" id="excluirRotativa"
|
||||||
|
|||||||
@ -61,11 +61,11 @@
|
|||||||
$selectedChatDepartments = isset($chatDepartmentUser) && is_array($chatDepartmentUser) ? $chatDepartmentUser : [];
|
$selectedChatDepartments = isset($chatDepartmentUser) && is_array($chatDepartmentUser) ? $chatDepartmentUser : [];
|
||||||
$selectedKeywords = array_map(fn($chatDepartment) => $chatDepartment->name, $selectedChatDepartments);
|
$selectedKeywords = array_map(fn($chatDepartment) => $chatDepartment->name, $selectedChatDepartments);
|
||||||
foreach ($chatDepartments as $item) :
|
foreach ($chatDepartments as $item) :
|
||||||
$isSelected = in_array($item["name"], $selectedKeywords) ? 'selected' : '';
|
$isSelected = in_array($item->name, $selectedKeywords) ? 'selected' : '';
|
||||||
?>
|
?>
|
||||||
<option value="<?= $item["name"] ?>"
|
<option value="<?= $item->name ?>"
|
||||||
data-select2-id=<?= $item["name"] ?> <?= $isSelected ?>>
|
data-select2-id=<?= $item->name ?> <?= $isSelected ?>>
|
||||||
<?= $item["display"] ?>
|
<?= $item->display ?>
|
||||||
</option>
|
</option>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
@ -136,8 +136,9 @@ $picture = "/assets/img/default-user.png";
|
|||||||
<div class="container-m-nx m-2">
|
<div class="container-m-nx m-2">
|
||||||
<div class="sidebar-body">
|
<div class="sidebar-body">
|
||||||
<!-- Contacts -->
|
<!-- Contacts -->
|
||||||
|
<h6 id="chat-message-notification-title"><?= lang("Chat.no_messages_notification") ?> </h6>
|
||||||
<ul class="list-unstyled chat-contact-list mb-0" id="chat-notification-list">
|
<ul class="list-unstyled chat-contact-list mb-0" id="chat-notification-list">
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
81
httpdocs/assets/js/safekat/components/ConfirmDeleteModal.js
Normal file
81
httpdocs/assets/js/safekat/components/ConfirmDeleteModal.js
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
class ConfirmDeleteModal {
|
||||||
|
|
||||||
|
constructor(alias = "") {
|
||||||
|
|
||||||
|
this.modalId = alias !== "" ? `confirm2delete-${alias}`: 'confirm2delete';
|
||||||
|
|
||||||
|
const removeClass = alias !== "" ? `btn-remove-${alias}` : 'btn-remove';
|
||||||
|
|
||||||
|
this.btnCancelId = alias !== "" ? `btnCancelDelete-${alias}` : 'btnCancelDelete';
|
||||||
|
this.btnDeleteId = alias !== "" ? `btnConfirmDelete-${alias}` : 'btnConfirmDelete';
|
||||||
|
|
||||||
|
this.data = null;
|
||||||
|
|
||||||
|
this.modalHtml = `
|
||||||
|
<div class="modal fade" id="${this.modalId}" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="${this.modalId}Label" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="${this.modalId}Label">¿Estás seguro de que deseas eliminar?</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
Esta acción no se puede deshacer.
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button id=${this.btnCancelId} type="button" class="btn btn-default" data-bs-dismiss="modal">Cancelar</button>
|
||||||
|
<a id=${this.btnDeleteId} href="javascript:void(0);" class="btn btn-danger btn-confirm ${removeClass}">Eliminar</a>
|
||||||
|
</div><!--//.modal-footer -->
|
||||||
|
</div><!--//.modal-content -->
|
||||||
|
</div><!--//.modal-dialog -->
|
||||||
|
</div><!--//.modal -->
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
|
||||||
|
// Insertar el modal en el body del documento si no existe
|
||||||
|
if (!document.getElementById(this.modalId)) {
|
||||||
|
document.body.insertAdjacentHTML('beforeend', this.modalHtml);
|
||||||
|
}
|
||||||
|
document.getElementById(this.btnCancelId).addEventListener('click', () => {
|
||||||
|
const modal = new bootstrap.Modal(document.getElementById(this.modalId));
|
||||||
|
modal.hide();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
getModalId() {
|
||||||
|
return '#' + this.modalId;
|
||||||
|
}
|
||||||
|
|
||||||
|
setData(data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
getData() {
|
||||||
|
return this.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Método para mostrar el modal
|
||||||
|
show(callback) {
|
||||||
|
|
||||||
|
// Mostrar el modal usando Bootstrap
|
||||||
|
const modal = new bootstrap.Modal(document.getElementById(this.modalId));
|
||||||
|
modal.show();
|
||||||
|
|
||||||
|
// Configurar el evento de confirmación de eliminación
|
||||||
|
document.getElementById(this.btnDeleteId).addEventListener('click', () => {
|
||||||
|
callback(); // Llamar al callback que el usuario haya proporcionado
|
||||||
|
modal.hide(); // Cerrar el modal
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Método para ocultar el modal si es necesario
|
||||||
|
hide() {
|
||||||
|
const modal = new bootstrap.Modal(document.getElementById(this.modalId));
|
||||||
|
modal.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default ConfirmDeleteModal;
|
||||||
@ -722,9 +722,11 @@ export const showNotificationMessages = (dom) => {
|
|||||||
dom.empty()
|
dom.empty()
|
||||||
$("#chat-notification-number")
|
$("#chat-notification-number")
|
||||||
if (data.totalMessages > 0) {
|
if (data.totalMessages > 0) {
|
||||||
|
$("#chat-message-notification-title").addClass("d-none")
|
||||||
$("#chat-notification-number").removeClass("d-none")
|
$("#chat-notification-number").removeClass("d-none")
|
||||||
$("#chat-notification-number").text(data.totalMessages ?? 0)
|
$("#chat-notification-number").text(data.totalMessages ?? 0)
|
||||||
} else {
|
} else {
|
||||||
|
$("#chat-message-notification-title").removeClass("d-none")
|
||||||
$("#chat-notification-number").addClass("d-none")
|
$("#chat-notification-number").addClass("d-none")
|
||||||
$("#chat-notification-number").text(0)
|
$("#chat-notification-number").text(0)
|
||||||
}
|
}
|
||||||
|
|||||||
69
httpdocs/assets/js/safekat/components/modalYesNo.js
Normal file
69
httpdocs/assets/js/safekat/components/modalYesNo.js
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
class ModalYesNo {
|
||||||
|
|
||||||
|
constructor(text= "", alias = "") {
|
||||||
|
|
||||||
|
this.modalId = alias !== "" ? `yesNoModal-${alias}`: 'yesNoModal';
|
||||||
|
|
||||||
|
this.btnCancelId = alias !== "" ? `btnCancelModal-${alias}` : 'btnCancelModal';
|
||||||
|
this.btnConfirmId = alias !== "" ? `btnYesModal-${alias}` : 'btnYesModal';
|
||||||
|
|
||||||
|
this.modalHtml = `
|
||||||
|
<div class="modal fade" id="${this.modalId}" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="${this.modalId}Label" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="${this.modalId}Label">Aplicar cambios</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
${text}
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button id=${this.btnCancelId} type="button" class="btn btn-default" data-bs-dismiss="modal">Cancelar</button>
|
||||||
|
<a id=${this.btnConfirmId} href="javascript:void(0);" class="btn btn-danger ">Si</a>
|
||||||
|
</div><!--//.modal-footer -->
|
||||||
|
</div><!--//.modal-content -->
|
||||||
|
</div><!--//.modal-dialog -->
|
||||||
|
</div><!--//.modal -->
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
|
||||||
|
// Insertar el modal en el body del documento si no existe
|
||||||
|
if (!document.getElementById(this.modalId)) {
|
||||||
|
document.body.insertAdjacentHTML('beforeend', this.modalHtml);
|
||||||
|
}
|
||||||
|
document.getElementById(this.btnCancelId).addEventListener('click', () => {
|
||||||
|
const modal = new bootstrap.Modal(document.getElementById(this.modalId));
|
||||||
|
modal.hide();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
getModalId() {
|
||||||
|
return '#' + this.modalId;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Método para mostrar el modal
|
||||||
|
show(callback) {
|
||||||
|
|
||||||
|
// Mostrar el modal usando Bootstrap
|
||||||
|
const modal = new bootstrap.Modal(document.getElementById(this.modalId));
|
||||||
|
modal.show();
|
||||||
|
|
||||||
|
// Configurar el evento de confirmación de eliminación
|
||||||
|
document.getElementById(this.btnConfirmId).addEventListener('click', () => {
|
||||||
|
callback(); // Llamar al callback que el usuario haya proporcionado
|
||||||
|
modal.hide(); // Cerrar el modal
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Método para ocultar el modal si es necesario
|
||||||
|
hide() {
|
||||||
|
const modal = new bootstrap.Modal(document.getElementById(this.modalId));
|
||||||
|
modal.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default ModalYesNo;
|
||||||
@ -84,6 +84,10 @@ let ClassSelect = function (domItem, url, placeholder, allowClear = false, param
|
|||||||
this.onChange = function(callback) {
|
this.onChange = function(callback) {
|
||||||
this.item.on('change', callback);
|
this.item.on('change', callback);
|
||||||
};
|
};
|
||||||
|
this.offChange = function() {
|
||||||
|
this.item.off('change');
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default ClassSelect;
|
export default ClassSelect;
|
||||||
|
|||||||
187
httpdocs/assets/js/safekat/components/table.js
Normal file
187
httpdocs/assets/js/safekat/components/table.js
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
let Table = function (
|
||||||
|
domItem,
|
||||||
|
alias,
|
||||||
|
url,
|
||||||
|
columns,
|
||||||
|
data,
|
||||||
|
row_id = "DT_RowId",
|
||||||
|
|
||||||
|
language = "es-ES") {
|
||||||
|
|
||||||
|
this.domItem = domItem;
|
||||||
|
this.alias = alias;
|
||||||
|
this.url = url;
|
||||||
|
this.columns = columns;
|
||||||
|
this.data = data;
|
||||||
|
this.row_id = row_id;
|
||||||
|
this.language = language;
|
||||||
|
|
||||||
|
this.table = null;
|
||||||
|
this.actions = []; // Declaración inicial de actions como propiedad
|
||||||
|
this.deleteModal = null;
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
this.init = function ({
|
||||||
|
dom = '<"mt-4"><"float-end"B><"float-start"l><t><"mt-4 mb-3"p>',
|
||||||
|
actions = ['view', 'edit', 'delete', 'cancel'],
|
||||||
|
order = [[0, 'asc']],
|
||||||
|
buttonsExport = true,
|
||||||
|
colVisibility = true,
|
||||||
|
buttonNewWithEditor = false,
|
||||||
|
editor = null,
|
||||||
|
booleanColumns = [],
|
||||||
|
} = {}) {
|
||||||
|
|
||||||
|
this.actions = actions;
|
||||||
|
|
||||||
|
const lastColNr = this.domItem.find("tr:first th").length - 1;
|
||||||
|
|
||||||
|
let columnDefs = [];
|
||||||
|
if (actions.length > 0) {
|
||||||
|
columnDefs = [
|
||||||
|
{
|
||||||
|
orderable: false,
|
||||||
|
searchable: false,
|
||||||
|
targets: [lastColNr]
|
||||||
|
}
|
||||||
|
];
|
||||||
|
columns.push(
|
||||||
|
{
|
||||||
|
'data': self.actionBtns.bind(self), // Vincular correctamente el contexto
|
||||||
|
'defaultContent': '<span class="edit"><a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit mx-2"></i></a></span><span class="cancel"></span><a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete mx-2"></i></a>',
|
||||||
|
'className': 'row-edit dt-center',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
let buttons = [];
|
||||||
|
if (buttonsExport) {
|
||||||
|
buttons = [
|
||||||
|
'copy', 'csv', 'excel', 'print', {
|
||||||
|
extend: 'pdfHtml5',
|
||||||
|
orientation: 'landscape',
|
||||||
|
pageSize: 'A4'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
if(colVisibility){
|
||||||
|
buttons.unshift({
|
||||||
|
extend: 'colvis',
|
||||||
|
columns: ':not(.noVis)',
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (buttonNewWithEditor) {
|
||||||
|
buttons.push(
|
||||||
|
{
|
||||||
|
className: 'btn btn-primary me-sm-3 me-1',
|
||||||
|
extend: "createInline",
|
||||||
|
editor: editor,
|
||||||
|
formOptions: {
|
||||||
|
submitTrigger: -1,
|
||||||
|
submitHtml: '<a href="javascript:void(0);"><i class="ti ti-device-floppy"></i></a>'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inicialización de DataTable
|
||||||
|
this.table = this.domItem.DataTable({
|
||||||
|
processing: true,
|
||||||
|
serverSide: true,
|
||||||
|
autoWidth: true,
|
||||||
|
responsive: true,
|
||||||
|
scrollX: true,
|
||||||
|
stateSave: true,
|
||||||
|
lengthMenu: [5, 10, 25, 50, 75, 100, 250, 500, 1000, 2500],
|
||||||
|
order: order,
|
||||||
|
orderCellsTop: true,
|
||||||
|
fixedHeader: true,
|
||||||
|
rowId: row_id,
|
||||||
|
dom: dom,
|
||||||
|
ajax: $.fn.dataTable.pipeline({
|
||||||
|
url: this.url,
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'X-Requested-With': 'XMLHttpRequest' },
|
||||||
|
data: function (d) {
|
||||||
|
$.each(self.data, function (key, val) {
|
||||||
|
d[val.name] = val.value;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async: true,
|
||||||
|
}),
|
||||||
|
buttons: buttons,
|
||||||
|
columns: this.columns,
|
||||||
|
language: {
|
||||||
|
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/" + this.language + ".json"
|
||||||
|
},
|
||||||
|
columnDefs: columnDefs,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (Array.isArray(booleanColumns) && booleanColumns.length > 0) {
|
||||||
|
this.table.on('draw.dt', function () {
|
||||||
|
for (let coln of booleanColumns) {
|
||||||
|
self.table.column(coln, { page: 'current' }).nodes().each(function (cell) {
|
||||||
|
cell.innerHTML = cell.innerHTML == '1' ? '<i class="ti ti-check"></i>' : '';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.getAlias = function () {
|
||||||
|
return this.alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setData = function (data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setPageLength = function (length) {
|
||||||
|
this.table.page.len(length).draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setEditCallback = function (callback) {
|
||||||
|
this.domItem.on('click', '.btn-edit-' + this.alias, function () {
|
||||||
|
let id = $(this).data('id');
|
||||||
|
callback(id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setDeleteCallback = function (callback) {
|
||||||
|
this.domItem.on('click', '.btn-delete-' + this.alias, function () {
|
||||||
|
let id = $(this).data('id');
|
||||||
|
callback(id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setViewCallback = function (callback) {
|
||||||
|
this.domItem.on('click', '.btn-view-' + this.alias, function () {
|
||||||
|
let id = $(this).data('id');
|
||||||
|
callback(id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
this.actionBtns = function (data) {
|
||||||
|
let btns = ``;
|
||||||
|
if (this.actions.includes('view')) {
|
||||||
|
btns += `<span class="view"><a href="javascript:void(0);"><i class="ti ti-eye ti-sm btn-edit-${this.alias} mx-2" data-id="${data.id}"></i></a></span>`;
|
||||||
|
}
|
||||||
|
if (this.actions.includes('edit')) {
|
||||||
|
btns += `<span class="edit"><a href="javascript:void(0);"><i class="ti ti-pencil ti-sm btn-edit-${this.alias} mx-2" data-id="${data.id}"></i></a></span>`;
|
||||||
|
}
|
||||||
|
if (this.actions.includes('cancel')) {
|
||||||
|
btns += `<span class="cancel"></span>`;
|
||||||
|
}
|
||||||
|
if (this.actions.includes('delete')) {
|
||||||
|
btns += `<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-${this.alias} mx-2" data-id="${data.id}"></i></a>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return btns;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Table;
|
||||||
43
httpdocs/assets/js/safekat/components/tableEditor.js
Normal file
43
httpdocs/assets/js/safekat/components/tableEditor.js
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
let TableEditor = function (
|
||||||
|
table,
|
||||||
|
url = "",
|
||||||
|
headers,
|
||||||
|
idSrc,
|
||||||
|
fields) {
|
||||||
|
|
||||||
|
|
||||||
|
this.table = table;
|
||||||
|
this.url = url;
|
||||||
|
this.headers = headers;
|
||||||
|
this.idSrc = idSrc;
|
||||||
|
this.fields = fields;
|
||||||
|
|
||||||
|
this.editor = null;
|
||||||
|
|
||||||
|
this.init = function () {
|
||||||
|
|
||||||
|
if (url == "") {
|
||||||
|
this.editor = new $.fn.dataTable.Editor({
|
||||||
|
table: table,
|
||||||
|
idSrc: idSrc,
|
||||||
|
fields: fields,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
this.editor = new $.fn.dataTable.Editor({
|
||||||
|
ajax: {
|
||||||
|
url: url,
|
||||||
|
headers: headers,
|
||||||
|
},
|
||||||
|
table: table,
|
||||||
|
idSrc: idSrc,
|
||||||
|
fields: fields,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default TableEditor;
|
||||||
|
|
||||||
@ -1,11 +1,12 @@
|
|||||||
import ClassSelect from '../../components/select2.js';
|
import ClassSelect from '../../components/select2.js';
|
||||||
|
import tarifasClienteView from './tarifasCliente.js';
|
||||||
|
import Ajax from '../../components/ajax.js';
|
||||||
|
|
||||||
class Cliente {
|
class Cliente {
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
|
||||||
this.csrf_token = this.getToken();
|
this.tarifas = new tarifasClienteView($('#tarifascliente'));
|
||||||
this.csrf_hash = $('#clienteForm').find('input[name="' + this.csrf_token + '"]').val();
|
|
||||||
|
|
||||||
this.pais = new ClassSelect($("#paisId"), '/paises/menuitems2', "Seleccione un país", {[this.csrf_token]: this.csrf_hash});
|
this.pais = new ClassSelect($("#paisId"), '/paises/menuitems2', "Seleccione un país", {[this.csrf_token]: this.csrf_hash});
|
||||||
this.soporte = new ClassSelect($("#soporteId"), '/users/getMenuComerciales', "Seleccione un usuario", {[this.csrf_token]: this.csrf_hash});
|
this.soporte = new ClassSelect($("#soporteId"), '/users/getMenuComerciales', "Seleccione un usuario", {[this.csrf_token]: this.csrf_hash});
|
||||||
@ -14,7 +15,6 @@ class Cliente {
|
|||||||
this.provincia = new ClassSelect($("#provinciaId"), '/provincias/menuitems2', "Seleccione una provincia", {[this.csrf_token]: this.csrf_hash});
|
this.provincia = new ClassSelect($("#provinciaId"), '/provincias/menuitems2', "Seleccione una provincia", {[this.csrf_token]: this.csrf_hash});
|
||||||
this.comunidadAutonoma = new ClassSelect($("#comunidadAutonomaId"), '/comunidades-autonomas/menuitems2', "Seleccione una comunidad autónoma", {[this.csrf_token]: this.csrf_hash});
|
this.comunidadAutonoma = new ClassSelect($("#comunidadAutonomaId"), '/comunidades-autonomas/menuitems2', "Seleccione una comunidad autónoma", {[this.csrf_token]: this.csrf_hash});
|
||||||
|
|
||||||
this.init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
@ -30,6 +30,8 @@ class Cliente {
|
|||||||
this.formaPago.init();
|
this.formaPago.init();
|
||||||
this.provincia.init();
|
this.provincia.init();
|
||||||
this.comunidadAutonoma.init();
|
this.comunidadAutonoma.init();
|
||||||
|
|
||||||
|
this.tarifas.init();
|
||||||
|
|
||||||
$(document).keypress(function (e) {
|
$(document).keypress(function (e) {
|
||||||
var key = e.which;
|
var key = e.which;
|
||||||
@ -49,18 +51,23 @@ class Cliente {
|
|||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getToken(){
|
|
||||||
|
|
||||||
const scriptUrl = new URL(import.meta.url);
|
|
||||||
const params = new URLSearchParams(scriptUrl.search);
|
|
||||||
|
|
||||||
const paramsObject = Object.fromEntries(params.entries());
|
|
||||||
return paramsObject.token;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
new Cliente().init();
|
|
||||||
});
|
const locale = document.querySelector('meta[name="locale"]').getAttribute('content');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
new Ajax('/translate/getTranslation', { locale: locale, translationFile: ['ClienteContactos', 'ClientePrecios'] }, {},
|
||||||
|
function(translations) {
|
||||||
|
window.language = JSON.parse(translations);
|
||||||
|
new Cliente().init();
|
||||||
|
},
|
||||||
|
function (error) {
|
||||||
|
console.log("Error getting translations:", error);
|
||||||
|
}
|
||||||
|
).post();
|
||||||
|
});
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,83 @@
|
|||||||
|
class ModalConvert2Template {
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
|
||||||
|
this.modalId = 'modalConvert2Template';
|
||||||
|
this.modalHtml = `
|
||||||
|
<div class="modal fade" id="${this.modalId}" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="${this.modalId}Label" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h4 id="labelTitleConfirmDialog" class="modal-title">${window.language.ClientePrecios.convertir2plantilla}</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div id='error-nombre'></div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<p>${window.language.ClientePrecios.convertir2plantillaText}</p>
|
||||||
|
<p>${window.language.ClientePrecios.convertir2plantillaText2}</p>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="nombre_plantilla" class="form-label">
|
||||||
|
${window.language.ClientePrecios.nombrePlantilla}
|
||||||
|
</label>
|
||||||
|
<input type="text" id="nombre_plantilla" maxLength="100" class="form-control new-address">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button id="saveTemplate" type="button" class="btn btn-primary">
|
||||||
|
Guardar
|
||||||
|
</button>
|
||||||
|
<button id="cancelTemplate" type="button" class="btn btn-default">
|
||||||
|
Cancelar
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
this.modalInstance = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
// Insertar el modal en el body del documento si no existe
|
||||||
|
if (!document.getElementById(this.modalId)) {
|
||||||
|
document.body.insertAdjacentHTML('beforeend', this.modalHtml);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.modalInstance = new bootstrap.Modal(document.getElementById(this.modalId));
|
||||||
|
|
||||||
|
// Configurar el evento del botón de cancelar
|
||||||
|
document.getElementById('cancelTemplate').addEventListener('click', () => {
|
||||||
|
this.modalInstance.hide();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Método para mostrar el modal
|
||||||
|
show(callback) {
|
||||||
|
|
||||||
|
// Mostrar el modal usando Bootstrap
|
||||||
|
this.modalInstance.show();
|
||||||
|
|
||||||
|
// Configurar el evento de confirmación de eliminación
|
||||||
|
document.getElementById('saveTemplate').addEventListener('click', () => {
|
||||||
|
callback(); // Llamar al callback que el usuario haya proporcionado
|
||||||
|
this.modalInstance.hide();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
hide() {
|
||||||
|
document.getElementById('nombre_plantilla').value = "";
|
||||||
|
const modal = new bootstrap.Modal(document.getElementById(this.modalId));
|
||||||
|
modal.hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
getNombrePlantilla() {
|
||||||
|
return document.getElementById('nombre_plantilla').value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ModalConvert2Template;
|
||||||
499
httpdocs/assets/js/safekat/pages/cliente/tarifasCliente.js
Normal file
499
httpdocs/assets/js/safekat/pages/cliente/tarifasCliente.js
Normal file
@ -0,0 +1,499 @@
|
|||||||
|
import Table from '../../components/table.js';
|
||||||
|
import TableEditor from '../../components/tableEditor.js';
|
||||||
|
import ConfirmDeleteModal from '../../components/ConfirmDeleteModal.js';
|
||||||
|
import ConvertToTemplate from './modalConvert2Template.js';
|
||||||
|
import ClassSelect from '../../components/select2.js';
|
||||||
|
import Ajax from '../../components/ajax.js';
|
||||||
|
import { getToken } from '../../common/common.js';
|
||||||
|
|
||||||
|
|
||||||
|
class tarifasClienteView {
|
||||||
|
|
||||||
|
constructor(domItem) {
|
||||||
|
|
||||||
|
this.domItem = domItem;
|
||||||
|
|
||||||
|
this.csrf_token = getToken();
|
||||||
|
this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val();
|
||||||
|
|
||||||
|
this.clienteId = window.location.href.split("/").pop();
|
||||||
|
this.actions = ['edit', 'delete', 'cancel'];
|
||||||
|
|
||||||
|
this.headerSearcher();
|
||||||
|
|
||||||
|
this.tableTarifas = null;
|
||||||
|
this.editorTarifas = null;
|
||||||
|
this.confirmDeleteModal = null;
|
||||||
|
|
||||||
|
this.deleteModal = null;
|
||||||
|
this.convertToTemplate = null;
|
||||||
|
|
||||||
|
this.plantillas = $(this.domItem.find('#plantillas'));
|
||||||
|
this.selectorPlantilla = new ClassSelect(this.plantillas, '/clienteplantillaprecios/menuitems', '');
|
||||||
|
|
||||||
|
this.convertToTemplateBtn = $('#convert2template');
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
this.deleteModal = new ConfirmDeleteModal('tarifascliente');
|
||||||
|
this.deleteModal.init();
|
||||||
|
|
||||||
|
this.convertToTemplate = new ConvertToTemplate();
|
||||||
|
this.convertToTemplate.init();
|
||||||
|
|
||||||
|
this.#initEditor();
|
||||||
|
|
||||||
|
this.#initTable();
|
||||||
|
|
||||||
|
this.selectorPlantilla.init();
|
||||||
|
|
||||||
|
this.#getPlantillaPrecios();
|
||||||
|
|
||||||
|
this.convertToTemplateBtn.on('click', function () {
|
||||||
|
self.convertToTemplate.show(self.#convertir2plantilla.bind(self));
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// Editar en linea la fila
|
||||||
|
this.tableTarifas.table.on('click', 'tbody span.edit', function (e) {
|
||||||
|
|
||||||
|
const row = $(this).closest('tr');
|
||||||
|
|
||||||
|
// Iniciar la edición en línea para todas las celdas de la fila
|
||||||
|
self.editorTarifas.editor.inline(
|
||||||
|
self.tableTarifas.table.cells(row, '*').nodes(),
|
||||||
|
{
|
||||||
|
cancelHtml: '<a href="javascript:void(0);"><i class="ti ti-x"></i></a>',
|
||||||
|
submitHtml: '<a href="javascript:void(0);"><i class="ti ti-device-floppy"></i></a>',
|
||||||
|
cancelTrigger: row.find('span.cancel')[0],
|
||||||
|
submitTrigger: row.find('span.edit')[0],
|
||||||
|
submit: 'allIfChanged'
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
this.tableTarifas.table.on('click', '.btn-delete-' + this.tableTarifas.getAlias(), function (e) {
|
||||||
|
const row = $(this).closest('tr')[0]._DT_RowIndex;
|
||||||
|
self.deleteModal.setData($(this).attr('data-id'));
|
||||||
|
self.deleteModal.show(() => {
|
||||||
|
if ($.isNumeric(self.deleteModal.getData())) {
|
||||||
|
self.editorTarifas.editor
|
||||||
|
.create(false)
|
||||||
|
.edit(self.tableTarifas.table.rows(row), false)
|
||||||
|
.set('deleted_at', new Date().toISOString().slice(0, 19).replace('T', ' '))
|
||||||
|
.set('is_deleted', 1)
|
||||||
|
.submit();
|
||||||
|
self.deleteModal.hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#initEditor() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
const tipo_linea = [
|
||||||
|
{ label: window.language.ClientePrecios.interior, value: 'interior' },
|
||||||
|
{ label: window.language.ClientePrecios.cubierta, value: 'cubierta' },
|
||||||
|
{ label: window.language.ClientePrecios.sobrecubierta, value: 'sobrecubierta' }
|
||||||
|
];
|
||||||
|
|
||||||
|
const tipo_maquina = [
|
||||||
|
{ label: window.language.ClientePrecios.toner, value: 'toner' },
|
||||||
|
{ label: window.language.ClientePrecios.inkjet, value: 'inkjet' },
|
||||||
|
];
|
||||||
|
|
||||||
|
const tipo_impresion = [
|
||||||
|
{ label: window.language.ClientePrecios.negro, value: 'negro' },
|
||||||
|
{ label: window.language.ClientePrecios.negrohq, value: 'negrohq' },
|
||||||
|
{ label: window.language.ClientePrecios.color, value: 'color' },
|
||||||
|
{ label: window.language.ClientePrecios.colorhq, value: 'colorhq' },
|
||||||
|
];
|
||||||
|
|
||||||
|
const editorFields = [
|
||||||
|
{
|
||||||
|
name: "id",
|
||||||
|
type: "readonly"
|
||||||
|
}, {
|
||||||
|
name: "tipo",
|
||||||
|
type: "select",
|
||||||
|
options: tipo_linea
|
||||||
|
}, {
|
||||||
|
name: "tipo_maquina",
|
||||||
|
type: "select",
|
||||||
|
options: tipo_maquina
|
||||||
|
}, {
|
||||||
|
name: "tipo_impresion",
|
||||||
|
type: "select",
|
||||||
|
options: tipo_impresion
|
||||||
|
}, {
|
||||||
|
name: "tiempo_min"
|
||||||
|
}, {
|
||||||
|
name: "tiempo_max"
|
||||||
|
}, {
|
||||||
|
name: "precio_hora"
|
||||||
|
}, {
|
||||||
|
name: "margen"
|
||||||
|
}, {
|
||||||
|
name: "user_updated_id",
|
||||||
|
type: 'hidden',
|
||||||
|
|
||||||
|
}, {
|
||||||
|
name: "updated_at",
|
||||||
|
type: 'hidden',
|
||||||
|
|
||||||
|
}, {
|
||||||
|
name: "plantilla_id",
|
||||||
|
type: "hidden"
|
||||||
|
}, {
|
||||||
|
name: "cliente_id",
|
||||||
|
type: "hidden"
|
||||||
|
}, {
|
||||||
|
name: "deleted_at",
|
||||||
|
type: "hidden"
|
||||||
|
}, {
|
||||||
|
name: "is_deleted",
|
||||||
|
type: "hidden"
|
||||||
|
},
|
||||||
|
];
|
||||||
|
this.editorTarifas = new TableEditor(
|
||||||
|
$('#tableOfPrecios'),
|
||||||
|
'/clienteprecios/datatable_editor',
|
||||||
|
{ [this.csrf_token]: this.csrf_hash },
|
||||||
|
'id',
|
||||||
|
editorFields);
|
||||||
|
|
||||||
|
this.editorTarifas.init();
|
||||||
|
|
||||||
|
this.editorTarifas.editor.on('preSubmit', function (e, d, type) {
|
||||||
|
if (type === 'create') {
|
||||||
|
d.data[0]['cliente_id'] = self.clienteId;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.editorTarifas.editor.on('submitSuccess', function (e, json, data, action) {
|
||||||
|
|
||||||
|
self.tableTarifas.table.clearPipeline();
|
||||||
|
self.tableTarifas.table.draw();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
this.editorTarifas.editor.on('postEdit', function (e, json, data, action) {
|
||||||
|
self.#borrarPlantillaTarifa(self.clienteId);
|
||||||
|
self.selectorPlantilla.offChange();
|
||||||
|
self.selectorPlantilla.setOption(0, 'Personalizado');
|
||||||
|
self.selectorPlantilla.onChange(self.#changePlantilla.bind(this));
|
||||||
|
})
|
||||||
|
|
||||||
|
this.editorTarifas.editor.on('postCreate', function (e, json, data, action) {
|
||||||
|
self.#borrarPlantillaTarifa(self.clienteId);
|
||||||
|
self.selectorPlantilla.offChange();
|
||||||
|
self.selectorPlantilla.setOption(0, 'Personalizado');
|
||||||
|
self.selectorPlantilla.onChange(self.#changePlantilla.bind(this));
|
||||||
|
})
|
||||||
|
|
||||||
|
this.editorTarifas.editor.on('postCancel', function (e, json, data) {
|
||||||
|
// Restaurar botones de acción por fila
|
||||||
|
self.tableTarifas.table.rows().nodes().each(function (node) {
|
||||||
|
$(node).find('span.edit').removeClass('d-none');
|
||||||
|
$(node).find('span.cancel, span.submit').addClass('d-none');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#convertir2plantilla() {
|
||||||
|
if (this.convertToTemplate.getNombrePlantilla().length == 0) {
|
||||||
|
popErrorAlert(window.language.ClientePrecios.errors.error_nombre_template, 'error-nombre')
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
new Ajax('/clientes/clienteplantillaprecios/add',
|
||||||
|
{
|
||||||
|
'from_client_data': 1,
|
||||||
|
'cliente_id': this.clienteId,
|
||||||
|
'nombre': this.convertToTemplate.getNombrePlantilla(),
|
||||||
|
[this.csrf_token]: this.csrf_hash
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
(response) => {
|
||||||
|
if (response.id) {
|
||||||
|
|
||||||
|
this.selectorPlantilla.offChange();
|
||||||
|
this.selectorPlantilla.setOption(response.id, this.convertToTemplate.getNombrePlantilla());
|
||||||
|
this.selectorPlantilla.onChange(this.#changePlantilla.bind(this));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(error) => {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
).post();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#getPlantillaPrecios() {
|
||||||
|
|
||||||
|
new Ajax(
|
||||||
|
'/clienteprecios/getplantilla',
|
||||||
|
{
|
||||||
|
'cliente_id': this.clienteId,
|
||||||
|
[this.csrf_token]: this.csrf_hash
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
(data) => {
|
||||||
|
if (data !== null && typeof data === 'object') {
|
||||||
|
if (data.hasOwnProperty('id') && data.id != null)
|
||||||
|
this.selectorPlantilla.setOption(data.id, data.nombre);
|
||||||
|
else {
|
||||||
|
this.selectorPlantilla.setOption(0, 'Personalizado');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.selectorPlantilla.setOption(0, 'Personalizado');
|
||||||
|
}
|
||||||
|
this.selectorPlantilla.onChange(this.#changePlantilla.bind(this));
|
||||||
|
},
|
||||||
|
(data) => {
|
||||||
|
this.selectorPlantilla.onChange(this.#changePlantilla.bind(this));
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
#changePlantilla() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
const data = $('#plantillas').select2('data');
|
||||||
|
if (data.length > 0) {
|
||||||
|
if (data[0].id == 0) {
|
||||||
|
self.#borrarPlantillaTarifa(self.clienteId);
|
||||||
|
self.tableTarifas.table.clearPipeline();
|
||||||
|
self.tableTarifas.table.draw();
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
|
||||||
|
const id = data[0].id;
|
||||||
|
new Ajax(
|
||||||
|
'/clienteprecios/changeplantilla',
|
||||||
|
{
|
||||||
|
'cliente_id': self.clienteId,
|
||||||
|
'plantilla_id': id,
|
||||||
|
[this.csrf_token]: this.csrf_hash
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
() => {
|
||||||
|
self.tableTarifas.table.clearPipeline();
|
||||||
|
self.tableTarifas.table.draw();
|
||||||
|
},
|
||||||
|
(error) => {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
).post();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#borrarPlantillaTarifa(id) {
|
||||||
|
|
||||||
|
new Ajax(
|
||||||
|
'/clienteprecios/changeplantilla',
|
||||||
|
{
|
||||||
|
'cliente_id': id,
|
||||||
|
[this.csrf_token]: this.csrf_hash
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
() => { },
|
||||||
|
(data) => {
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
).post();
|
||||||
|
}
|
||||||
|
|
||||||
|
#initTable() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{ 'data': 'id' },
|
||||||
|
{
|
||||||
|
'data': 'tipo',
|
||||||
|
'render': function (data, type, row, meta) {
|
||||||
|
if (data == 'interior')
|
||||||
|
return window.language.ClientePrecios.interior;
|
||||||
|
else if (data == 'cubierta')
|
||||||
|
return window.language.ClientePrecios.cubierta;
|
||||||
|
else if (data == 'sobrecubierta')
|
||||||
|
return window.language.ClientePrecios.sobrecubierta;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'data': 'tipo_maquina',
|
||||||
|
'render': function (data, type, row, meta) {
|
||||||
|
if (data == 'toner')
|
||||||
|
return window.language.ClientePrecios.toner;
|
||||||
|
else if (data == 'inkjet')
|
||||||
|
return window.language.ClientePrecios.inkjet;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'data': 'tipo_impresion',
|
||||||
|
'render': function (data, type, row, meta) {
|
||||||
|
if (data == 'negro')
|
||||||
|
return window.language.ClientePrecios.negro;
|
||||||
|
else if (data == 'negrohq')
|
||||||
|
return window.language.ClientePrecios.negrohq;
|
||||||
|
else if (data == 'color')
|
||||||
|
return window.language.ClientePrecios.color;
|
||||||
|
else if (data == 'colorhq')
|
||||||
|
return window.language.ClientePrecios.colorhq;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ 'data': 'tiempo_min' },
|
||||||
|
{ 'data': 'tiempo_max' },
|
||||||
|
{ 'data': 'precio_hora' },
|
||||||
|
{ 'data': 'margen' },
|
||||||
|
{ 'data': 'user_updated' },
|
||||||
|
{ 'data': 'updated_at' },
|
||||||
|
{
|
||||||
|
'data': 'plantilla_id',
|
||||||
|
'searchable': false,
|
||||||
|
'visible': false,
|
||||||
|
},
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
this.tableTarifas = new Table(
|
||||||
|
$('#tableOfPrecios'),
|
||||||
|
'tarifasCliente',
|
||||||
|
'/clienteprecios/datatable',
|
||||||
|
columns,
|
||||||
|
[
|
||||||
|
{ name: 'cliente_id', value: window.location.href.split("/").pop() },
|
||||||
|
{ name: this.csrf_token, value: this.csrf_hash },
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
this.tableTarifas.init({
|
||||||
|
actions: self.actions,
|
||||||
|
buttonNewWithEditor: true,
|
||||||
|
buttonsExport: true,
|
||||||
|
editor: this.editorTarifas.editor,
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
this.tableTarifas.table.on('init.dt', function () {
|
||||||
|
self.tableTarifas.table.page.len(50).draw();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('button[data-bs-target="#tarifascliente"]').on('shown.bs.tab', function (event) {
|
||||||
|
setTimeout(() => {
|
||||||
|
self.tableTarifas.table.columns.adjust().draw();
|
||||||
|
}, 1000); // Usamos setTimeout para asegurar que se dibuje después del renderizado
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
headerSearcher() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
$('#tableOfPrecios thead tr').clone(false).appendTo('#tableOfPrecios thead');
|
||||||
|
$('#tableOfPrecios thead tr:eq(1) th').each(function (i) {
|
||||||
|
|
||||||
|
if (!$(this).hasClass("noFilter")) {
|
||||||
|
|
||||||
|
if (i == 1) {
|
||||||
|
|
||||||
|
// Agregar un selector en la segunda columna
|
||||||
|
$(this).html('<select class="form-control" style="min-width:100px;max-width:120px;font-size:0.8rem !important;"></select>');
|
||||||
|
|
||||||
|
// Agregar opciones al selector
|
||||||
|
var selector = $('select', this);
|
||||||
|
selector.append('<option value="">Todos</option>'); // Opción vacía
|
||||||
|
selector.append('<option value="interior">Interior</option>');
|
||||||
|
selector.append('<option value="cubierta">Cubierta</option>');
|
||||||
|
selector.append('<option value="sobrecubierta">Sobrecubierta</option>');
|
||||||
|
|
||||||
|
selector.on('change', function () {
|
||||||
|
var val = $.fn.dataTable.util.escapeRegex(
|
||||||
|
$(this).val()
|
||||||
|
);
|
||||||
|
self.tableTarifas.table.column(i).search(val).draw();
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (i == 2) {
|
||||||
|
// Agregar un selector en la tercera columna
|
||||||
|
$(this).html('<select class="form-control" style="min-width:100px;max-width:120px;font-size:0.8rem !important;"></select>');
|
||||||
|
|
||||||
|
// Agregar opciones al selector
|
||||||
|
var selector = $('select', this);
|
||||||
|
selector.append('<option value="">Todos</option>'); // Opción vacía
|
||||||
|
selector.append('<option value="toner">Toner</option>');
|
||||||
|
selector.append('<option value="inkjet">Inkjet</option>');
|
||||||
|
|
||||||
|
selector.on('change', function () {
|
||||||
|
var val = $.fn.dataTable.util.escapeRegex(
|
||||||
|
$(this).val()
|
||||||
|
);
|
||||||
|
self.tableTarifas.table.column(i).search(val).draw();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (i == 3) {
|
||||||
|
// Agregar un selector en la cuarta columna
|
||||||
|
$(this).html('<select class="form-control" style="min-width:100px;max-width:120px;font-size:0.8rem !important;"></select>');
|
||||||
|
|
||||||
|
// Agregar opciones al selector
|
||||||
|
var selector = $('select', this);
|
||||||
|
selector.append('<option value="">Todos</option>'); // Opción vacía
|
||||||
|
selector.append('<option value="negro">' + window.language.ClientePrecios.negro + '</option>');
|
||||||
|
selector.append('<option value="color">' + window.language.ClientePrecios.color + '</option>');
|
||||||
|
selector.append('<option value="negrohq">' + window.language.ClientePrecios.negrohq + '</option>');
|
||||||
|
selector.append('<option value="colorhq">' + window.language.ClientePrecios.colorhq + '</option>');
|
||||||
|
|
||||||
|
selector.on('change', function () {
|
||||||
|
var val = $.fn.dataTable.util.escapeRegex(
|
||||||
|
$(this).val()
|
||||||
|
);
|
||||||
|
self.tableTarifas.table.column(i).search(val).draw();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$(this).html('<input type="text" class="form-control " style="min-width:100px;max-width:120px;font-size:0.8rem !important;" />');
|
||||||
|
|
||||||
|
$('input', this).on('change clear', function () {
|
||||||
|
if (self.tableTarifas.table.column(i).search() !== this.value) {
|
||||||
|
self.tableTarifas.table
|
||||||
|
.column(i)
|
||||||
|
.search(this.value)
|
||||||
|
.draw();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$(this).html('<span></span>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export default tarifasClienteView;
|
||||||
@ -14,7 +14,7 @@ class MessagePage {
|
|||||||
this.formNewDirectMessage = this.modalNewMessage.item.find("#formNewDirectMessage")
|
this.formNewDirectMessage = this.modalNewMessage.item.find("#formNewDirectMessage")
|
||||||
this.alert = new Alert($("#alertDirectMessage"))
|
this.alert = new Alert($("#alertDirectMessage"))
|
||||||
this.selectUsers = $("#select-users")
|
this.selectUsers = $("#select-users")
|
||||||
this.selectUsers = $("#select-departments")
|
this.selectDepartments = $("#select-departments")
|
||||||
|
|
||||||
this.selectPlaceholder = {
|
this.selectPlaceholder = {
|
||||||
id: '0',
|
id: '0',
|
||||||
@ -25,7 +25,7 @@ class MessagePage {
|
|||||||
text: "Seleccione un departamento"
|
text: "Seleccione un departamento"
|
||||||
}
|
}
|
||||||
this.selectMessageUsers = new ClassSelect(this.selectUsers, '/chat/users/all', this.selectPlaceholder, true)
|
this.selectMessageUsers = new ClassSelect(this.selectUsers, '/chat/users/all', this.selectPlaceholder, true)
|
||||||
this.selectChatDepartment = new ClassSelect(this.selectUsers, '/chat/department/select', this.selectDepartmentPlaceholder, true)
|
this.selectChatDepartment = new ClassSelect(this.selectDepartments, '/chat/department/select', this.selectDepartmentPlaceholder, true)
|
||||||
|
|
||||||
}
|
}
|
||||||
init() {
|
init() {
|
||||||
|
|||||||
@ -0,0 +1,605 @@
|
|||||||
|
import Table from '../../components/table.js';
|
||||||
|
import TableEditor from '../../components/tableEditor.js';
|
||||||
|
import ModalYesNo from '../../components/modalYesNo.js';
|
||||||
|
import Ajax from '../../components/ajax.js';
|
||||||
|
import { getToken } from '../../common/common.js';
|
||||||
|
|
||||||
|
class PlantillasTarifasClienteForm {
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
|
||||||
|
this.domItem = $('.card-body');
|
||||||
|
|
||||||
|
this.plantillaId = window.location.href.split("/").pop();
|
||||||
|
|
||||||
|
this.csrf_token = getToken();
|
||||||
|
this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val();
|
||||||
|
|
||||||
|
this.btnApply = $('#btnApply');
|
||||||
|
this.btnUndo = $('#btnUndo');
|
||||||
|
|
||||||
|
this.tablePlantilla = null;
|
||||||
|
this.modalYesNo = null;
|
||||||
|
|
||||||
|
this.localEditor = null;
|
||||||
|
this.ajaxEditor = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
this.headerSearcher();
|
||||||
|
|
||||||
|
|
||||||
|
this.modalYesNo = new ModalYesNo(
|
||||||
|
"Aplicar los cambios afectarán a <b>TODOS</b> los clientes que tengan asociada esta plantilla de precios.<br>" +
|
||||||
|
"¿Esta seguro de que deseas aplicar los cambios?",
|
||||||
|
);
|
||||||
|
this.modalYesNo.init();
|
||||||
|
|
||||||
|
this.#initEditor();
|
||||||
|
|
||||||
|
this.#initTable();
|
||||||
|
|
||||||
|
|
||||||
|
// Editar en linea la fila
|
||||||
|
this.tablePlantilla.table.on('click', 'tbody span.edit', function (e) {
|
||||||
|
|
||||||
|
const row = $(this).closest('tr');
|
||||||
|
|
||||||
|
// Iniciar la edición en línea para todas las celdas de la fila
|
||||||
|
self.localEditor.editor.inline(
|
||||||
|
self.tablePlantilla.table.cells(row, '*').nodes(),
|
||||||
|
{
|
||||||
|
cancelHtml: '<a href="javascript:void(0);"><i class="ti ti-x"></i></a>',
|
||||||
|
submitHtml: '<a href="javascript:void(0);"><i class="ti ti-device-floppy"></i></a>',
|
||||||
|
cancelTrigger: row.find('span.cancel')[0],
|
||||||
|
submitTrigger: row.find('span.edit')[0],
|
||||||
|
submit: 'allIfChanged',
|
||||||
|
drawType: 'none'
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.tablePlantilla.table.on('click', '.btn-delete-' + this.tablePlantilla.getAlias(), function (e) {
|
||||||
|
|
||||||
|
self.tablePlantilla.table.settings()[0].oFeatures.bServerSide = false;
|
||||||
|
|
||||||
|
const row = $(this).attr('data-id');
|
||||||
|
self.btnApply.removeClass('d-none');
|
||||||
|
self.btnUndo.removeClass('d-none');
|
||||||
|
|
||||||
|
$('#' + row).css('background-color', '#ffcccc');
|
||||||
|
$('#' + row).addClass('row-deleted');
|
||||||
|
|
||||||
|
// find closest span.edit
|
||||||
|
$('#' + row).find('span.edit').addClass('d-none');
|
||||||
|
$('#' + row).find('.btn-delete-' + self.tablePlantilla.getAlias()).addClass('d-none');
|
||||||
|
});
|
||||||
|
|
||||||
|
this.btnApply.on('click', function (e) {
|
||||||
|
self.modalYesNo.show(self.#applyChanges.bind(self));
|
||||||
|
});
|
||||||
|
|
||||||
|
this.btnUndo.on('click', function (e) {
|
||||||
|
|
||||||
|
self.tablePlantilla.table.settings()[0].oFeatures.bServerSide = true;
|
||||||
|
|
||||||
|
self.tablePlantilla.table.clearPipeline();
|
||||||
|
self.tablePlantilla.table.draw();
|
||||||
|
|
||||||
|
self.btnApply.addClass('d-none');
|
||||||
|
self.btnUndo.addClass('d-none');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#initEditor() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
const tipo_linea = [
|
||||||
|
{ label: window.language.ClientePrecios.interior, value: 'interior' },
|
||||||
|
{ label: window.language.ClientePrecios.cubierta, value: 'cubierta' },
|
||||||
|
{ label: window.language.ClientePrecios.sobrecubierta, value: 'sobrecubierta' }
|
||||||
|
];
|
||||||
|
|
||||||
|
const tipo_maquina = [
|
||||||
|
{ label: window.language.ClientePrecios.toner, value: 'toner' },
|
||||||
|
{ label: window.language.ClientePrecios.inkjet, value: 'inkjet' },
|
||||||
|
];
|
||||||
|
|
||||||
|
const tipo_impresion = [
|
||||||
|
{ label: window.language.ClientePrecios.negro, value: 'negro' },
|
||||||
|
{ label: window.language.ClientePrecios.negrohq, value: 'negrohq' },
|
||||||
|
{ label: window.language.ClientePrecios.color, value: 'color' },
|
||||||
|
{ label: window.language.ClientePrecios.colorhq, value: 'colorhq' },
|
||||||
|
];
|
||||||
|
|
||||||
|
const editorFields = [
|
||||||
|
{
|
||||||
|
name: "id",
|
||||||
|
type: "readonly",
|
||||||
|
def: new Date().toISOString().slice(0, 19).replace('T', ' ')
|
||||||
|
}, {
|
||||||
|
name: "tipo",
|
||||||
|
type: "select",
|
||||||
|
options: tipo_linea
|
||||||
|
}, {
|
||||||
|
name: "tipo_maquina",
|
||||||
|
type: "select",
|
||||||
|
options: tipo_maquina
|
||||||
|
}, {
|
||||||
|
name: "tipo_impresion",
|
||||||
|
type: "select",
|
||||||
|
options: tipo_impresion
|
||||||
|
}, {
|
||||||
|
name: "tiempo_min"
|
||||||
|
}, {
|
||||||
|
name: "tiempo_max"
|
||||||
|
}, {
|
||||||
|
name: "precio_hora"
|
||||||
|
}, {
|
||||||
|
name: "margen"
|
||||||
|
}, {
|
||||||
|
name: "user_updated",
|
||||||
|
type: "hidden",
|
||||||
|
def: ''
|
||||||
|
}, {
|
||||||
|
name: "updated_at",
|
||||||
|
type: "hidden",
|
||||||
|
def: ''
|
||||||
|
}, {
|
||||||
|
name: "deleted_at",
|
||||||
|
type: "hidden",
|
||||||
|
}, {
|
||||||
|
name: "is_deleted",
|
||||||
|
type: "hidden",
|
||||||
|
}, {
|
||||||
|
name: "plantilla_id",
|
||||||
|
type: "hidden",
|
||||||
|
def: this.plantillaId
|
||||||
|
}
|
||||||
|
|
||||||
|
];
|
||||||
|
this.localEditor = new TableEditor(
|
||||||
|
$('#tableOfPlantillasPreciosLineas'),
|
||||||
|
'',
|
||||||
|
{},
|
||||||
|
'id',
|
||||||
|
editorFields);
|
||||||
|
|
||||||
|
this.localEditor.init();
|
||||||
|
|
||||||
|
this.ajaxEditor = new TableEditor(
|
||||||
|
$('#tableOfPlantillasPreciosLineas'),
|
||||||
|
'/clienteplantillaprecioslineas/datatable_editor',
|
||||||
|
{ [this.csrf_token]: this.csrf_hash },
|
||||||
|
'id',
|
||||||
|
editorFields);
|
||||||
|
|
||||||
|
this.ajaxEditor.init();
|
||||||
|
|
||||||
|
this.localEditor.editor.on('preCreate', function (e, d, type) {
|
||||||
|
|
||||||
|
self.tablePlantilla.table.settings()[0].oFeatures.bServerSide = false;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// add class and change background color of row in postCreate
|
||||||
|
this.localEditor.editor.on('postCreate', function (e, json, data) {
|
||||||
|
|
||||||
|
const row = self.tablePlantilla.table.row('#' + json.data[0].id);
|
||||||
|
|
||||||
|
let rowNode = row.node();
|
||||||
|
|
||||||
|
$(rowNode).addClass('row-created');
|
||||||
|
$(rowNode).css('background-color', '#C9E2C7');
|
||||||
|
|
||||||
|
self.btnApply.removeClass('d-none');
|
||||||
|
self.btnUndo.removeClass('d-none');
|
||||||
|
});
|
||||||
|
|
||||||
|
this.localEditor.editor.on('postEdit', function (e, json, data) {
|
||||||
|
|
||||||
|
self.tablePlantilla.table.settings()[0].oFeatures.bServerSide = false;
|
||||||
|
|
||||||
|
let row = self.tablePlantilla.table.row('#' + data.id);
|
||||||
|
|
||||||
|
let rowNode = row.node();
|
||||||
|
|
||||||
|
// Añadir una clase usando jQuery
|
||||||
|
if (!$(rowNode).hasClass('row-created')) {
|
||||||
|
$(rowNode).addClass('row-edited');
|
||||||
|
$(rowNode).css('background-color', '#E9DEAC');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (row.length) {
|
||||||
|
|
||||||
|
// Actualizar los datos de la fila
|
||||||
|
self.tablePlantilla.table.row('#' + data.id).data({
|
||||||
|
id: data.id,
|
||||||
|
tipo: data.tipo,
|
||||||
|
tipo_maquina: data.tipo_maquina,
|
||||||
|
tipo_impresion: data.tipo_impresion,
|
||||||
|
tiempo_min: data.tiempo_min,
|
||||||
|
tiempo_max: data.tiempo_max,
|
||||||
|
precio_hora: data.precio_hora,
|
||||||
|
margen: data.margen,
|
||||||
|
user_updated_id: data.user_updated,
|
||||||
|
user_updated: data.user_updated,
|
||||||
|
updated_at: data.updated_at
|
||||||
|
});
|
||||||
|
|
||||||
|
self.btnApply.removeClass('d-none');
|
||||||
|
self.btnUndo.removeClass('d-none');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.ajaxEditor.editor.on('preEdit', function (e, d, type) {
|
||||||
|
self.tablePlantilla.table.settings()[0].oFeatures.bServerSide = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
this.ajaxEditor.editor.on('preCreate', function (e, d, type) {
|
||||||
|
self.tablePlantilla.table.settings()[0].oFeatures.bServerSide = true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#applyChanges() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
const deletedRows = self.tablePlantilla.table.rows('.row-deleted').data().toArray();
|
||||||
|
const editedRows = self.tablePlantilla.table.rows('.row-edited').data().toArray();
|
||||||
|
const createdRows = self.tablePlantilla.table.rows('.row-created').data().toArray();
|
||||||
|
|
||||||
|
if (editedRows.length != 0) {
|
||||||
|
let error = self.#checkInterval(editedRows);
|
||||||
|
if (error) {
|
||||||
|
if (error == 1) {
|
||||||
|
popErrorAlert('Hay filas EDITADAS con el tiempo mínimo mayor que el tiempo máximo');
|
||||||
|
}
|
||||||
|
else if (error == 2) {
|
||||||
|
popErrorAlert('Hay filas EDITADAS con intervalos [Tiempo min., Tiempo max] solapados');
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (createdRows.length != 0) {
|
||||||
|
let error = self.#checkInterval(editedRows);
|
||||||
|
if (error) {
|
||||||
|
if (error == 1) {
|
||||||
|
popErrorAlert('Hay filas CREADAS con el tiempo mínimo mayor que el tiempo máximo');
|
||||||
|
}
|
||||||
|
else if (error == 2) {
|
||||||
|
popErrorAlert('Hay filas CREADAS con intervalos [Tiempo min., Tiempo max] solapados');
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (deletedRows.length != 0) {
|
||||||
|
|
||||||
|
let rowIds = deletedRows.map(row => '#' + row.id);
|
||||||
|
|
||||||
|
// Iterar sobre cada fila y actualizar los campos necesarios
|
||||||
|
self.ajaxEditor.editor
|
||||||
|
.edit(rowIds, false) // Editar múltiples filas (acepta un array)
|
||||||
|
.multiSet({
|
||||||
|
deleted_at: new Date().toISOString().slice(0, 19).replace('T', ' '),
|
||||||
|
is_deleted: 1
|
||||||
|
}) // Establecer valores comunes para todas las filas
|
||||||
|
.submit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (editedRows.length != 0) {
|
||||||
|
|
||||||
|
let rowIds = editedRows.map(row => '#' + row.id);
|
||||||
|
let updatedFields = {};
|
||||||
|
|
||||||
|
// Iterar sobre las filas editadas y construir el objeto actualizado
|
||||||
|
editedRows.forEach(row => {
|
||||||
|
|
||||||
|
updatedFields['tipo'] = updatedFields['tipo'] || {};
|
||||||
|
updatedFields['tipo'][row.id] = row.tipo;
|
||||||
|
|
||||||
|
updatedFields['tipo_maquina'] = updatedFields['tipo_maquina'] || {};
|
||||||
|
updatedFields['tipo_maquina'][row.id] = row.tipo_maquina;
|
||||||
|
|
||||||
|
updatedFields['tipo_impresion'] = updatedFields['tipo_impresion'] || {};
|
||||||
|
updatedFields['tipo_impresion'][row.id] = row.tipo_impresion;
|
||||||
|
|
||||||
|
updatedFields['tiempo_min'] = updatedFields['tiempo_min'] || {};
|
||||||
|
updatedFields['tiempo_min'][row.id] = row.tiempo_min;
|
||||||
|
|
||||||
|
updatedFields['tiempo_max'] = updatedFields['tiempo_max'] || {};
|
||||||
|
updatedFields['tiempo_max'][row.id] = row.tiempo_max;
|
||||||
|
|
||||||
|
updatedFields['precio_hora'] = updatedFields['precio_hora'] || {};
|
||||||
|
updatedFields['precio_hora'][row.id] = row.precio_hora;
|
||||||
|
|
||||||
|
updatedFields['margen'] = updatedFields['margen'] || {};
|
||||||
|
updatedFields['margen'][row.id] = row.margen;
|
||||||
|
});
|
||||||
|
|
||||||
|
self.ajaxEditor.editor.edit(rowIds, false).multiSet(updatedFields)
|
||||||
|
.submit()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (createdRows.length != 0) {
|
||||||
|
|
||||||
|
let updatedFields = {};
|
||||||
|
|
||||||
|
let count = 0;
|
||||||
|
// Iterar sobre las filas editadas y construir el objeto actualizado
|
||||||
|
createdRows.forEach(row => {
|
||||||
|
|
||||||
|
updatedFields['id'] = updatedFields['id'] || {};
|
||||||
|
updatedFields['id'][row.id] = count;
|
||||||
|
|
||||||
|
updatedFields['tipo'] = updatedFields['tipo'] || {};
|
||||||
|
updatedFields['tipo'][count] = row.tipo;
|
||||||
|
|
||||||
|
updatedFields['tipo_maquina'] = updatedFields['tipo_maquina'] || {};
|
||||||
|
updatedFields['tipo_maquina'][count] = row.tipo_maquina;
|
||||||
|
|
||||||
|
updatedFields['tipo_impresion'] = updatedFields['tipo_impresion'] || {};
|
||||||
|
updatedFields['tipo_impresion'][count] = row.tipo_impresion;
|
||||||
|
|
||||||
|
updatedFields['tiempo_min'] = updatedFields['tiempo_min'] || {};
|
||||||
|
updatedFields['tiempo_min'][count] = row.tiempo_min;
|
||||||
|
|
||||||
|
updatedFields['tiempo_max'] = updatedFields['tiempo_max'] || {};
|
||||||
|
updatedFields['tiempo_max'][count] = row.tiempo_max;
|
||||||
|
|
||||||
|
updatedFields['precio_hora'] = updatedFields['precio_hora'] || {};
|
||||||
|
updatedFields['precio_hora'][count] = row.precio_hora;
|
||||||
|
|
||||||
|
updatedFields['margen'] = updatedFields['margen'] || {};
|
||||||
|
updatedFields['margen'][count] = row.margen;
|
||||||
|
|
||||||
|
updatedFields['plantilla_id'] = updatedFields['plantilla_id'] || {};
|
||||||
|
updatedFields['plantilla_id'][count] = self.plantillaId;
|
||||||
|
|
||||||
|
count++;
|
||||||
|
});
|
||||||
|
|
||||||
|
self.ajaxEditor.editor.create(createdRows.length, false).multiSet(updatedFields)
|
||||||
|
.submit()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (deletedRows.length != 0 || editedRows.length != 0 || createdRows.length != 0) {
|
||||||
|
|
||||||
|
new Ajax(
|
||||||
|
'/clienteprecios/update',
|
||||||
|
{
|
||||||
|
[self.csrf_token]: self.csrf_hash,
|
||||||
|
plantilla_id: self.plantillaId
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
() => {
|
||||||
|
window.location.reload();
|
||||||
|
},
|
||||||
|
(error) => {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
).post();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#checkInterval(rows) {
|
||||||
|
|
||||||
|
// obtener todas las filas de la tabla que no tengan la clase row-deleted
|
||||||
|
let rowsNotDeletedDT = this.tablePlantilla.table.rows(':not(.row-deleted)').nodes().toArray();
|
||||||
|
for (let row of rowsNotDeletedDT) {
|
||||||
|
let rowData = this.tablePlantilla.table.row(row).data();
|
||||||
|
for (let rowEdited of rows) {
|
||||||
|
if (rowEdited.tiempo_min > rowEdited.tiempo_max) {
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (rowData.tipo == rowEdited.tipo && rowData.tipo_maquina == rowEdited.tipo_maquina && rowData.tipo_impresion == rowEdited.tipo_impresion) {
|
||||||
|
// check overlapping intervals
|
||||||
|
if (rowEdited.tiempo_min >= rowData.tiempo_min || rowEdited.tiempo_min <= rowData.tiempo_max) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#initTable() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
const columns =
|
||||||
|
[
|
||||||
|
{ 'data': 'id' },
|
||||||
|
{
|
||||||
|
'data': 'tipo',
|
||||||
|
'render': function (data, type, row, meta) {
|
||||||
|
if (data == 'interior')
|
||||||
|
return window.language.ClientePrecios.interior;
|
||||||
|
else if (data == 'cubierta')
|
||||||
|
return window.language.ClientePrecios.cubierta;
|
||||||
|
else if (data == 'sobrecubierta')
|
||||||
|
return window.language.ClientePrecios.sobrecubierta;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'data': 'tipo_maquina',
|
||||||
|
'render': function (data, type, row, meta) {
|
||||||
|
if (data == 'toner')
|
||||||
|
return window.language.ClientePrecios.toner;
|
||||||
|
else if (data == 'inkjet')
|
||||||
|
return window.language.ClientePrecios.inkjet;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'data': 'tipo_impresion',
|
||||||
|
'render': function (data, type, row, meta) {
|
||||||
|
if (data == 'negro')
|
||||||
|
return window.language.ClientePrecios.negro;
|
||||||
|
else if (data == 'negrohq')
|
||||||
|
return window.language.ClientePrecios.negrohq;
|
||||||
|
else if (data == 'color')
|
||||||
|
return window.language.ClientePrecios.color;
|
||||||
|
else if (data == 'colorhq')
|
||||||
|
return window.language.ClientePrecios.colorhq;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ 'data': 'tiempo_min' },
|
||||||
|
{ 'data': 'tiempo_max' },
|
||||||
|
{ 'data': 'precio_hora' },
|
||||||
|
{ 'data': 'margen' },
|
||||||
|
{ 'data': 'user_updated' },
|
||||||
|
{ 'data': 'updated_at' },
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
const actions = ['edit', 'delete', 'cancel'];
|
||||||
|
|
||||||
|
this.tablePlantilla = new Table(
|
||||||
|
$('#tableOfPlantillasPreciosLineas'),
|
||||||
|
'plantillaTarifasCliente',
|
||||||
|
'/clienteplantillaprecioslineas/datatable',
|
||||||
|
columns,
|
||||||
|
[
|
||||||
|
{ name: 'plantilla_id', value: this.plantillaId }
|
||||||
|
], 'id'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
this.tablePlantilla.init({
|
||||||
|
actions: actions,
|
||||||
|
colVisibility: false,
|
||||||
|
buttonsExport: true,
|
||||||
|
buttonNewWithEditor: true,
|
||||||
|
editor: self.localEditor.editor,
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
this.tablePlantilla.table.on('init.dt', function () {
|
||||||
|
self.tablePlantilla.table.page.len(50).draw();
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
headerSearcher() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
$('#tableOfPlantillasPreciosLineas thead tr').clone(false).appendTo('#tableOfPlantillasPreciosLineas thead');
|
||||||
|
$('#tableOfPlantillasPreciosLineas thead tr:eq(1) th').each(function (i) {
|
||||||
|
|
||||||
|
if (!$(this).hasClass("noFilter")) {
|
||||||
|
|
||||||
|
if (i == 1) {
|
||||||
|
|
||||||
|
// Agregar un selector en la segunda columna
|
||||||
|
$(this).html('<select class="form-control" style="min-width:100px;max-width:120px;font-size:0.8rem !important;"></select>');
|
||||||
|
|
||||||
|
// Agregar opciones al selector
|
||||||
|
var selector = $('select', this);
|
||||||
|
selector.append('<option value="">Todos</option>'); // Opción vacía
|
||||||
|
selector.append('<option value="interior">Interior</option>');
|
||||||
|
selector.append('<option value="cubierta">Cubierta</option>');
|
||||||
|
selector.append('<option value="sobrecubierta">Sobrecubierta</option>');
|
||||||
|
|
||||||
|
selector.on('change', function () {
|
||||||
|
var val = $.fn.dataTable.util.escapeRegex(
|
||||||
|
$(this).val()
|
||||||
|
);
|
||||||
|
self.tablePlantilla.table.column(i).search(val).draw();
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (i == 2) {
|
||||||
|
// Agregar un selector en la tercera columna
|
||||||
|
$(this).html('<select class="form-control" style="min-width:100px;max-width:120px;font-size:0.8rem !important;"></select>');
|
||||||
|
|
||||||
|
// Agregar opciones al selector
|
||||||
|
var selector = $('select', this);
|
||||||
|
selector.append('<option value="">Todos</option>'); // Opción vacía
|
||||||
|
selector.append('<option value="toner">Toner</option>');
|
||||||
|
selector.append('<option value="inkjet">Inkjet</option>');
|
||||||
|
|
||||||
|
selector.on('change', function () {
|
||||||
|
var val = $.fn.dataTable.util.escapeRegex(
|
||||||
|
$(this).val()
|
||||||
|
);
|
||||||
|
self.tablePlantilla.table.column(i).search(val).draw();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (i == 3) {
|
||||||
|
// Agregar un selector en la cuarta columna
|
||||||
|
$(this).html('<select class="form-control" style="min-width:100px;max-width:120px;font-size:0.8rem !important;"></select>');
|
||||||
|
|
||||||
|
// Agregar opciones al selector
|
||||||
|
var selector = $('select', this);
|
||||||
|
selector.append('<option value="">Todos</option>'); // Opción vacía
|
||||||
|
selector.append('<option value="negro">' + window.language.ClientePrecios.negro + '</option>');
|
||||||
|
selector.append('<option value="color">' + window.language.ClientePrecios.color + '</option>');
|
||||||
|
selector.append('<option value="negrohq">' + window.language.ClientePrecios.negrohq + '</option>');
|
||||||
|
selector.append('<option value="colorhq">' + window.language.ClientePrecios.colorhq + '</option>');
|
||||||
|
|
||||||
|
selector.on('change', function () {
|
||||||
|
var val = $.fn.dataTable.util.escapeRegex(
|
||||||
|
$(this).val()
|
||||||
|
);
|
||||||
|
self.tablePlantilla.table.column(i).search(val).draw();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$(this).html('<input type="text" class="form-control " style="min-width:100px;max-width:120px;font-size:0.8rem !important;" />');
|
||||||
|
|
||||||
|
$('input', this).on('change clear', function () {
|
||||||
|
if (self.tablePlantilla.table.column(i).search() !== this.value) {
|
||||||
|
self.tablePlantilla.table
|
||||||
|
.column(i)
|
||||||
|
.search(this.value)
|
||||||
|
.draw();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$(this).html('<span></span>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
|
||||||
|
const locale = document.querySelector('meta[name="locale"]').getAttribute('content');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
new Ajax('/translate/getTranslation', { locale: locale, translationFile: ['ClientePrecios'] }, {},
|
||||||
|
function (translations) {
|
||||||
|
window.language = JSON.parse(translations);
|
||||||
|
new PlantillasTarifasClienteForm().init();
|
||||||
|
},
|
||||||
|
function (error) {
|
||||||
|
console.log("Error getting translations:", error);
|
||||||
|
}
|
||||||
|
).post();
|
||||||
|
|
||||||
|
});
|
||||||
@ -0,0 +1,153 @@
|
|||||||
|
import Table from '../../components/table.js';
|
||||||
|
import ConfirmDeleteModal from '../../components/ConfirmDeleteModal.js';
|
||||||
|
import Ajax from '../../components/ajax.js';
|
||||||
|
import { getToken } from '../../common/common.js';
|
||||||
|
|
||||||
|
class PlantillasTarifasClienteList {
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
|
||||||
|
this.domItem = $('.card-body');
|
||||||
|
|
||||||
|
this.csrf_token = getToken();
|
||||||
|
this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val();
|
||||||
|
|
||||||
|
this.tablePlantillas = null;
|
||||||
|
this.deleteModal = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
this.headerSearcher();
|
||||||
|
|
||||||
|
this.deleteModal = new ConfirmDeleteModal('plantillasTarifasCliente');
|
||||||
|
this.deleteModal.init();
|
||||||
|
|
||||||
|
this.#initTable();
|
||||||
|
|
||||||
|
// Editar en linea la fila
|
||||||
|
this.tablePlantillas.table.on('click', '.btn-edit-' + this.tablePlantillas.getAlias(), function (e) {
|
||||||
|
|
||||||
|
const dataId = $(this).attr('data-id');
|
||||||
|
|
||||||
|
if (!Number.isNaN(Number(dataId))) {
|
||||||
|
window.location.href = '/clienteplantillaprecios/edit/' + dataId;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// Eliminar la fila
|
||||||
|
this.tablePlantillas.table.on('click', '.btn-delete-' + this.tablePlantillas.getAlias(), function (e) {
|
||||||
|
const row = $(this).closest('tr')[0]._DT_RowIndex;
|
||||||
|
const dataId = $(this).attr('data-id');
|
||||||
|
self.deleteModal.setData($(this).attr('data-id'));
|
||||||
|
self.deleteModal.show(() => {
|
||||||
|
|
||||||
|
if (!Number.isNaN(Number(self.deleteModal.getData()))) {
|
||||||
|
|
||||||
|
new Ajax(
|
||||||
|
'/clienteplantillaprecios/delete/' + dataId,
|
||||||
|
{
|
||||||
|
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
(data, textStatus, jqXHR) => {
|
||||||
|
|
||||||
|
self.tablePlantillas.table.clearPipeline();
|
||||||
|
self.tablePlantillas.table.row($(row)).invalidate().draw();
|
||||||
|
|
||||||
|
// Se borran las lineas asociadas
|
||||||
|
new Ajax(
|
||||||
|
"/clientes/clienteplantillaprecios/update/" + dataId,
|
||||||
|
{
|
||||||
|
[this.csrf_token]: this.csrf_hash
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
() => { },
|
||||||
|
(error) => {
|
||||||
|
console.log(error);
|
||||||
|
}).post();
|
||||||
|
|
||||||
|
popSuccessAlert(data.msg ?? jqXHR.statusText);
|
||||||
|
},
|
||||||
|
(error) => {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
).get();
|
||||||
|
self.deleteModal.hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#initTable() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{ 'data': 'id' },
|
||||||
|
{ 'data': 'nombre' },
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
const actions = ['edit', 'delete'];
|
||||||
|
|
||||||
|
this.tablePlantillas = new Table(
|
||||||
|
$('#tableOfClienteplantillaprecios'),
|
||||||
|
'plantillasTarifasCliente',
|
||||||
|
'/clienteplantillaprecios/datatable',
|
||||||
|
columns,
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
this.tablePlantillas.init({
|
||||||
|
actions: actions,
|
||||||
|
colVisibility: false,
|
||||||
|
buttonsExport: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
this.tablePlantillas.table.on('init.dt', function () {
|
||||||
|
self.tablePlantillas.table.page.len(50).draw();
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
headerSearcher() {
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
$('#tableOfClienteplantillaprecios thead tr').clone(false).appendTo('#tableOfClienteplantillaprecios thead');
|
||||||
|
$('#tableOfClienteplantillaprecios thead tr:eq(1) th').each(function (i) {
|
||||||
|
|
||||||
|
if (!$(this).hasClass("noFilter")) {
|
||||||
|
|
||||||
|
$(this).html('<input type="text" class="form-control " style="min-width:100px;max-width:500px;font-size:0.8rem !important;" />');
|
||||||
|
|
||||||
|
$('input', this).on('change clear', function () {
|
||||||
|
if (self.tablePlantillas.table.column(i).search() !== this.value) {
|
||||||
|
self.tablePlantillas.table
|
||||||
|
.column(i)
|
||||||
|
.search(this.value)
|
||||||
|
.draw();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$(this).html('<span></span>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
|
||||||
|
new PlantillasTarifasClienteList().init();
|
||||||
|
});
|
||||||
@ -572,8 +572,8 @@ class DatosGenerales {
|
|||||||
|
|
||||||
this.pagColorConsecutivas.prop('checked', datos.paginasColorConsecutivas);
|
this.pagColorConsecutivas.prop('checked', datos.paginasColorConsecutivas);
|
||||||
if (datos.paginasColorConsecutivas) {
|
if (datos.paginasColorConsecutivas) {
|
||||||
this.divPapelDiferente.removeClass('d-none');
|
//this.divPapelDiferente.removeClass('d-none');
|
||||||
this.papelDiferente.prop('checked', datos.papelInteriorDiferente).trigger('change');
|
//this.papelDiferente.prop('checked', datos.papelInteriorDiferente).trigger('change');
|
||||||
}
|
}
|
||||||
this.posPaginasColor.val(datos.posPaginasColor);
|
this.posPaginasColor.val(datos.posPaginasColor);
|
||||||
|
|
||||||
@ -727,6 +727,8 @@ class DatosGenerales {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Para recalcular el presupuesto
|
// Para recalcular el presupuesto
|
||||||
|
$('#divGramajeInterior').empty();
|
||||||
|
$('#divGramajeInteriorColor').empty();
|
||||||
element.trigger('change');
|
element.trigger('change');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -792,11 +794,11 @@ class DatosGenerales {
|
|||||||
|
|
||||||
#handPaginasConsecutivas() {
|
#handPaginasConsecutivas() {
|
||||||
if (this.pagColorConsecutivas.is(':checked')) {
|
if (this.pagColorConsecutivas.is(':checked')) {
|
||||||
this.divPapelDiferente.removeClass('d-none');
|
//this.divPapelDiferente.removeClass('d-none');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.divPapelDiferente.addClass('d-none');
|
/*this.divPapelDiferente.addClass('d-none');
|
||||||
this.papelDiferente.prop('checked', false);
|
this.papelDiferente.prop('checked', false);*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -42,15 +42,6 @@ class DisenioInterior {
|
|||||||
this.colorPremium_color = this.domItem.find("#colorPremiumColor");
|
this.colorPremium_color = this.domItem.find("#colorPremiumColor");
|
||||||
|
|
||||||
this.gramaje_color = this.domItem.find(".check-interior-color-gramaje");
|
this.gramaje_color = this.domItem.find(".check-interior-color-gramaje");
|
||||||
this.gramaje70_color = this.domItem.find("#interiorGramaje70Color");
|
|
||||||
this.gramaje80_color = this.domItem.find("#interiorGramaje80Color");
|
|
||||||
this.gramaje90_color = this.domItem.find("#interiorGramaje90Color");
|
|
||||||
this.gramaje100_color = this.domItem.find("#interiorGramaje100Color");
|
|
||||||
this.gramaje115_color = this.domItem.find("#interiorGramaje115Color");
|
|
||||||
this.gramaje120_color = this.domItem.find("#interiorGramaje120Color");
|
|
||||||
this.gramaje135_color = this.domItem.find("#interiorGramaje135Color");
|
|
||||||
this.gramaje150_color = this.domItem.find("#interiorGramaje150Color");
|
|
||||||
this.gramaje170_color = this.domItem.find("#interiorGramaje170Color");
|
|
||||||
|
|
||||||
this.checksGramaje = $('.gramaje-interior');
|
this.checksGramaje = $('.gramaje-interior');
|
||||||
|
|
||||||
@ -121,6 +112,7 @@ class DisenioInterior {
|
|||||||
new Ajax('/papelesgenericos/getpapelcliente',
|
new Ajax('/papelesgenericos/getpapelcliente',
|
||||||
{
|
{
|
||||||
[this.csrf_token]: this.csrf_hash,
|
[this.csrf_token]: this.csrf_hash,
|
||||||
|
tirada: $('#tirada').val(),
|
||||||
tipo: this.getTipoImpresion(),
|
tipo: this.getTipoImpresion(),
|
||||||
cubierta: 0,
|
cubierta: 0,
|
||||||
},
|
},
|
||||||
@ -135,6 +127,7 @@ class DisenioInterior {
|
|||||||
new Ajax('/papelesgenericos/getpapelcliente',
|
new Ajax('/papelesgenericos/getpapelcliente',
|
||||||
{
|
{
|
||||||
[this.csrf_token]: this.csrf_hash,
|
[this.csrf_token]: this.csrf_hash,
|
||||||
|
tirada: $('#tirada').val(),
|
||||||
tipo: this.getTipoImpresion(),
|
tipo: this.getTipoImpresion(),
|
||||||
cubierta: 0,
|
cubierta: 0,
|
||||||
},
|
},
|
||||||
@ -859,6 +852,7 @@ class DisenioInterior {
|
|||||||
new Ajax('/papelesgenericos/getpapelcliente',
|
new Ajax('/papelesgenericos/getpapelcliente',
|
||||||
{
|
{
|
||||||
[this.csrf_token]: this.csrf_hash,
|
[this.csrf_token]: this.csrf_hash,
|
||||||
|
tirada: $('#tirada').val(),
|
||||||
papel: papel,
|
papel: papel,
|
||||||
tipo: tipo,
|
tipo: tipo,
|
||||||
cubierta: 0,
|
cubierta: 0,
|
||||||
@ -886,6 +880,7 @@ class DisenioInterior {
|
|||||||
new Ajax('/papelesgenericos/getpapelcliente',
|
new Ajax('/papelesgenericos/getpapelcliente',
|
||||||
{
|
{
|
||||||
[this.csrf_token]: this.csrf_hash,
|
[this.csrf_token]: this.csrf_hash,
|
||||||
|
tirada: $('#tirada').val(),
|
||||||
papel: this.papelInterior,
|
papel: this.papelInterior,
|
||||||
tipo: tipo,
|
tipo: tipo,
|
||||||
cubierta: 0,
|
cubierta: 0,
|
||||||
@ -931,6 +926,7 @@ class DisenioInterior {
|
|||||||
new Ajax('/papelesgenericos/getpapelcliente',
|
new Ajax('/papelesgenericos/getpapelcliente',
|
||||||
{
|
{
|
||||||
[this.csrf_token]: this.csrf_hash,
|
[this.csrf_token]: this.csrf_hash,
|
||||||
|
tirada: $('#tirada').val(),
|
||||||
papel: papel,
|
papel: papel,
|
||||||
tipo: tipo,
|
tipo: tipo,
|
||||||
cubierta: 0,
|
cubierta: 0,
|
||||||
@ -954,6 +950,7 @@ class DisenioInterior {
|
|||||||
new Ajax('/papelesgenericos/getpapelcliente',
|
new Ajax('/papelesgenericos/getpapelcliente',
|
||||||
{
|
{
|
||||||
[this.csrf_token]: this.csrf_hash,
|
[this.csrf_token]: this.csrf_hash,
|
||||||
|
tirada: $('#tirada').val(),
|
||||||
papel: this.papelInterior,
|
papel: this.papelInterior,
|
||||||
tipo: tipo,
|
tipo: tipo,
|
||||||
cubierta: 0,
|
cubierta: 0,
|
||||||
|
|||||||
@ -44,7 +44,8 @@ class PresupuestoCliente {
|
|||||||
|
|
||||||
this.datos = {};
|
this.datos = {};
|
||||||
this.ajax_calcular = new Ajax('/presupuestocliente/calcular',
|
this.ajax_calcular = new Ajax('/presupuestocliente/calcular',
|
||||||
{}, this.datos,
|
this.datos,
|
||||||
|
{},
|
||||||
this.#procesarPresupuesto.bind(this),
|
this.#procesarPresupuesto.bind(this),
|
||||||
() => { $('#loader').modal('hide'); });
|
() => { $('#loader').modal('hide'); });
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user