mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
Compare commits
2 Commits
main
...
7bb6329783
| Author | SHA1 | Date | |
|---|---|---|---|
| 7bb6329783 | |||
| ad8e0ac75b |
1
.vscode/settings.json
vendored
1
.vscode/settings.json
vendored
@ -14,5 +14,4 @@
|
|||||||
"username": "sk_imn"
|
"username": "sk_imn"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -72,21 +72,4 @@ class Paths
|
|||||||
* is used when no value is provided to `Services::renderer()`.
|
* is used when no value is provided to `Services::renderer()`.
|
||||||
*/
|
*/
|
||||||
public string $viewDirectory = __DIR__ . '/../Views';
|
public string $viewDirectory = __DIR__ . '/../Views';
|
||||||
|
|
||||||
/**
|
|
||||||
* Ruta base relativa dentro de WRITEPATH donde se almacenan
|
|
||||||
* los archivos asociados a presupuestos.
|
|
||||||
*
|
|
||||||
* Esta ruta se utiliza como base para componer las rutas
|
|
||||||
* completas tanto locales como remotas (SFTP) de ficheros
|
|
||||||
* relacionados con cada presupuesto.
|
|
||||||
*
|
|
||||||
* Ejemplo:
|
|
||||||
* Si el ID del presupuesto es 123 y el nombre del archivo es "documento.pdf",
|
|
||||||
* la ruta final será: storage/presupuestos/123/documento.pdf
|
|
||||||
*
|
|
||||||
* Se recomienda mantener esta ruta fuera de `public/` por razones de seguridad
|
|
||||||
* y utilizar controladores para servir los archivos si se desea acceso web.
|
|
||||||
*/
|
|
||||||
public string $presupuestosPath = 'storage/presupuestos';
|
|
||||||
}
|
}
|
||||||
|
|||||||
29
ci4/app/Config/PedidoXML.php
Executable file
29
ci4/app/Config/PedidoXML.php
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Config;
|
||||||
|
|
||||||
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
||||||
|
class PedidoXML extends BaseConfig
|
||||||
|
{
|
||||||
|
|
||||||
|
public string $host;
|
||||||
|
public int $port;
|
||||||
|
public string $username;
|
||||||
|
public string $password;
|
||||||
|
public string $base_dir; # FTP server directory
|
||||||
|
public bool $xml_enabled;
|
||||||
|
public int $id_offset;
|
||||||
|
|
||||||
|
public function __construct() {
|
||||||
|
parent::__construct();
|
||||||
|
$this->host = env("HIDRIVE_HOST","10.5.0.6");
|
||||||
|
$this->port = env("HIDRIVE_PORT",21);
|
||||||
|
$this->username = env("HIDRIVE_USER","admin");
|
||||||
|
$this->password = env("HIDRIVE_PASS","A77h3b0X4OA2rOYAf4w2");
|
||||||
|
$this->base_dir = env("HIDRIVE_PATH_ROOT","/home/admin/safekat"); # FTP server directory
|
||||||
|
$this->xml_enabled = env("FTP_XML_ENABLED",false);
|
||||||
|
$this->id_offset = env("XML_OFFSET_CUSTOMER_ID",1000000);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,38 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Config;
|
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
|
||||||
|
|
||||||
class PresupuestoSFTP extends BaseConfig
|
|
||||||
{
|
|
||||||
public string $host;
|
|
||||||
public int $port;
|
|
||||||
public string $username;
|
|
||||||
public string $password;
|
|
||||||
public string $base_dir;
|
|
||||||
public string $remote_base_dir = 'ficheros'; // subcarpeta específica para presupuestos
|
|
||||||
public int $id_offset;
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct();
|
|
||||||
$this->host = env("HIDRIVE_FILES_HOST", "sftp.hidrive.ionos.com");
|
|
||||||
$this->port = (int) env("HIDRIVE_FILES_PORT", 22);
|
|
||||||
$this->username = env("HIDRIVE_FILES_USER");
|
|
||||||
$this->password = env("HIDRIVE_FILES_PASS");
|
|
||||||
$this->id_offset = (int) env("BUDGET_FILES_OFFSET_ID", 1000000);
|
|
||||||
|
|
||||||
// Directorio base remoto: /users/usuario/dominio
|
|
||||||
$domain = parse_url(env("app.baseURL"), PHP_URL_HOST);
|
|
||||||
$this->base_dir = "/users/{$this->username}/{$domain}";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Devuelve la ruta completa del directorio remoto para un presupuesto
|
|
||||||
*/
|
|
||||||
public function getRemoteDirForPresupuesto(int $presupuestoId): string
|
|
||||||
{
|
|
||||||
return "{$this->base_dir}/{$this->remote_base_dir}/" . ($presupuestoId + $this->id_offset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -500,6 +500,7 @@ $routes->group('pedidos', ['namespace' => 'App\Controllers\Pedidos'], function (
|
|||||||
$routes->post('cambiarestado', 'Pedido::cambiarEstado', ['as' => 'cambiarEstadoPedido']);
|
$routes->post('cambiarestado', 'Pedido::cambiarEstado', ['as' => 'cambiarEstadoPedido']);
|
||||||
$routes->post('update/(:any)', 'Pedido::update/$1', ['as' => 'actualizarPedido']);
|
$routes->post('update/(:any)', 'Pedido::update/$1', ['as' => 'actualizarPedido']);
|
||||||
$routes->post('insertfactura', 'Pedido::addFactura');
|
$routes->post('insertfactura', 'Pedido::addFactura');
|
||||||
|
$routes->get('xml/(:num)', 'Pedido::get_xml_pedido/$1', ['as' => 'getXMLPedido']);
|
||||||
$routes->post('produccion/(:num)', 'Pedido::to_produccion/$1', ['as' => 'toProduccion']);
|
$routes->post('produccion/(:num)', 'Pedido::to_produccion/$1', ['as' => 'toProduccion']);
|
||||||
$routes->get('pedidosCliente', 'Pedido::tablaClienteForm');
|
$routes->get('pedidosCliente', 'Pedido::tablaClienteForm');
|
||||||
$routes->get('getSumCliente/(:num)', 'Pedido::obtenerTotalPedidosCliente/$1');
|
$routes->get('getSumCliente/(:num)', 'Pedido::obtenerTotalPedidosCliente/$1');
|
||||||
|
|||||||
@ -37,6 +37,7 @@ $routes->group('configuracion', ['namespace' => 'App\Controllers\Configuracion']
|
|||||||
$routes->post('menuitems', 'Papelesgenericos::menuItems', ['as' => 'menuItemsOfPapelesGenericos']);
|
$routes->post('menuitems', 'Papelesgenericos::menuItems', ['as' => 'menuItemsOfPapelesGenericos']);
|
||||||
$routes->get('getpapelcliente', 'Papelesgenericos::getPapelCliente', ['as' => 'getPapelCliente']);
|
$routes->get('getpapelcliente', 'Papelesgenericos::getPapelCliente', ['as' => 'getPapelCliente']);
|
||||||
$routes->get('selectpapelespecial', 'Papelesgenericos::selectPapelEspecial', ['as' => 'selectPapelEspecial']);
|
$routes->get('selectpapelespecial', 'Papelesgenericos::selectPapelEspecial', ['as' => 'selectPapelEspecial']);
|
||||||
|
$routes->get('gettipopapel', 'Papelesgenericos::getTipoPapelCliente');
|
||||||
});
|
});
|
||||||
|
|
||||||
/* Papeles impresion */
|
/* Papeles impresion */
|
||||||
|
|||||||
@ -69,10 +69,4 @@ $routes->group('importador', ['namespace' => 'App\Controllers\Presupuestos'], fu
|
|||||||
$routes->get('getencuadernacion', 'Importadorpresupuestos::getEncuadernacionList');
|
$routes->get('getencuadernacion', 'Importadorpresupuestos::getEncuadernacionList');
|
||||||
$routes->get('getpresupuestodata', 'Importadorpresupuestos::getPresupuesto', ['as' => 'getPresupuesto']);
|
$routes->get('getpresupuestodata', 'Importadorpresupuestos::getPresupuesto', ['as' => 'getPresupuesto']);
|
||||||
$routes->post('importar', 'Importadorpresupuestos::importarPresupuesto');
|
$routes->post('importar', 'Importadorpresupuestos::importarPresupuesto');
|
||||||
});
|
|
||||||
|
|
||||||
$routes->group('files', ['namespace' => 'App\Controllers\Presupuestos'], function($routes) {
|
|
||||||
$routes->post('get_files', 'PresupuestoFicheroController::get_files', ['as' => 'getFiles']);
|
|
||||||
$routes->post('upload_files', 'PresupuestoFicheroController::upload_files', ['as' => 'uploadFiles']);
|
|
||||||
$routes->post('download_zip', 'PresupuestoFicheroController::download_zip', ['as' => 'downloadFilesZipped']);
|
|
||||||
});
|
});
|
||||||
@ -77,14 +77,6 @@ abstract class BaseResourceController extends \CodeIgniter\RESTful\ResourceContr
|
|||||||
*/
|
*/
|
||||||
public $alertStyle = 'alerts';
|
public $alertStyle = 'alerts';
|
||||||
|
|
||||||
/**
|
|
||||||
* Permiso requerido para borrar. Si es false/null, no se valida.
|
|
||||||
* Si es un string (nombre del permiso), se valida.
|
|
||||||
*
|
|
||||||
* @var string|false|null
|
|
||||||
*/
|
|
||||||
protected $deletePermission = false;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An array of helpers to be loaded automatically upon
|
* An array of helpers to be loaded automatically upon
|
||||||
@ -230,13 +222,6 @@ abstract class BaseResourceController extends \CodeIgniter\RESTful\ResourceContr
|
|||||||
*/
|
*/
|
||||||
public function delete($id = null)
|
public function delete($id = null)
|
||||||
{
|
{
|
||||||
|
|
||||||
// 🔒 Verificar permiso solo si está definido como string
|
|
||||||
if (is_string($this->deletePermission) && !auth()->user()->can($this->deletePermission)) {
|
|
||||||
$message = lang('Basic.global.permissionDenied'); // O el mensaje que uses
|
|
||||||
return $this->failWithNewToken($message, 403); // Estilo coherente con tu clase
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(static::$pluralObjectNameCc) && !empty(static::$singularObjectNameCc)) {
|
if (!empty(static::$pluralObjectNameCc) && !empty(static::$singularObjectNameCc)) {
|
||||||
$objName = mb_strtolower(lang(ucfirst(static::$pluralObjectNameCc) . '.' . static::$singularObjectNameCc));
|
$objName = mb_strtolower(lang(ucfirst(static::$pluralObjectNameCc) . '.' . static::$singularObjectNameCc));
|
||||||
} else {
|
} else {
|
||||||
@ -251,10 +236,8 @@ abstract class BaseResourceController extends \CodeIgniter\RESTful\ResourceContr
|
|||||||
} else {
|
} else {
|
||||||
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
||||||
$rawResult = $this->model->where('id', $id)
|
$rawResult = $this->model->where('id', $id)
|
||||||
->set([
|
->set(['deleted_at' => $datetime->format('Y-m-d H:i:s'),
|
||||||
'deleted_at' => $datetime->format('Y-m-d H:i:s'),
|
'is_deleted' => $this->delete_flag])
|
||||||
'is_deleted' => $this->delete_flag
|
|
||||||
])
|
|
||||||
->update();
|
->update();
|
||||||
if (!$rawResult) {
|
if (!$rawResult) {
|
||||||
return $this->failNotFound(lang('Basic.global.deleteError', [$objName]));
|
return $this->failNotFound(lang('Basic.global.deleteError', [$objName]));
|
||||||
@ -287,8 +270,7 @@ abstract class BaseResourceController extends \CodeIgniter\RESTful\ResourceContr
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($customValidationMessages == null) {
|
if ($customValidationMessages == null) {
|
||||||
$validationErrorMessages = $this->model->validationMessages ?? $this->formValidationErrorMessagess ?? null;
|
$validationErrorMessages = $this->model->validationMessages ?? $this->formValidationErrorMessagess ?? null;;
|
||||||
;
|
|
||||||
} else {
|
} else {
|
||||||
$validationErrorMessages = $customValidationMessages;
|
$validationErrorMessages = $customValidationMessages;
|
||||||
}
|
}
|
||||||
@ -384,12 +366,12 @@ abstract class BaseResourceController extends \CodeIgniter\RESTful\ResourceContr
|
|||||||
$queryStr = !is_null($query) ? $query->getQuery() : '';
|
$queryStr = !is_null($query) ? $query->getQuery() : '';
|
||||||
$dbError = $this->model->db->error();
|
$dbError = $this->model->db->error();
|
||||||
$userFriendlyErrMsg = lang('Basic.global.persistErr1', [static::$singularObjectNameCc]);
|
$userFriendlyErrMsg = lang('Basic.global.persistErr1', [static::$singularObjectNameCc]);
|
||||||
if (isset($dbError['code']) && $dbError['code'] == 1062):
|
if (isset($dbError['code']) && $dbError['code'] == 1062) :
|
||||||
$userFriendlyErrMsg .= PHP_EOL . lang('Basic.global.persistDuplErr', [static::$singularObjectNameCc]);
|
$userFriendlyErrMsg .= PHP_EOL . lang('Basic.global.persistDuplErr', [static::$singularObjectNameCc]);
|
||||||
endif;
|
endif;
|
||||||
// $userFriendlyErrMsg = str_replace("'", "\'", $userFriendlyErrMsg); // Uncomment if experiencing unescaped single quote errors
|
// $userFriendlyErrMsg = str_replace("'", "\'", $userFriendlyErrMsg); // Uncomment if experiencing unescaped single quote errors
|
||||||
log_message('error', $userFriendlyErrMsg . PHP_EOL . $e->getMessage() . PHP_EOL . $queryStr);
|
log_message('error', $userFriendlyErrMsg . PHP_EOL . $e->getMessage() . PHP_EOL . $queryStr);
|
||||||
if (isset($dbError['message']) && !empty($dbError['message'])):
|
if (isset($dbError['message']) && !empty($dbError['message'])) :
|
||||||
log_message('error', $dbError['code'] . ' : ' . $dbError['message']);
|
log_message('error', $dbError['code'] . ' : ' . $dbError['message']);
|
||||||
endif;
|
endif;
|
||||||
$this->viewData['errorMessage'] = $userFriendlyErrMsg;
|
$this->viewData['errorMessage'] = $userFriendlyErrMsg;
|
||||||
|
|||||||
@ -25,7 +25,6 @@ class Proveedores extends \App\Controllers\BaseResourceController {
|
|||||||
|
|
||||||
protected $indexRoute = 'proveedorList';
|
protected $indexRoute = 'proveedorList';
|
||||||
|
|
||||||
protected $deletePermission = 'proveedores.delete';
|
|
||||||
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger) {
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger) {
|
||||||
|
|||||||
@ -26,8 +26,6 @@ class FormasPago extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
protected $indexRoute = 'formaDePagoList';
|
protected $indexRoute = 'formaDePagoList';
|
||||||
|
|
||||||
protected $deletePermission = 'formas-pago.delete';
|
|
||||||
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
@ -46,7 +44,6 @@ class FormasPago extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
checkPermission('formas-pago.menu');
|
|
||||||
|
|
||||||
$viewData = [
|
$viewData = [
|
||||||
'currentModule' => static::$controllerSlug,
|
'currentModule' => static::$controllerSlug,
|
||||||
@ -64,7 +61,6 @@ class FormasPago extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
checkPermission('formas-pago.create');
|
|
||||||
|
|
||||||
if ($this->request->getPost()) :
|
if ($this->request->getPost()) :
|
||||||
|
|
||||||
@ -119,7 +115,6 @@ class FormasPago extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function edit($requestedId = null)
|
public function edit($requestedId = null)
|
||||||
{
|
{
|
||||||
checkPermission('formas-pago.edit');
|
|
||||||
|
|
||||||
if ($requestedId == null) :
|
if ($requestedId == null) :
|
||||||
return $this->redirect2listView();
|
return $this->redirect2listView();
|
||||||
|
|||||||
@ -21,8 +21,6 @@ class Group extends \App\Controllers\GoBaseController
|
|||||||
|
|
||||||
protected $indexRoute = 'userGroupList';
|
protected $indexRoute = 'userGroupList';
|
||||||
|
|
||||||
protected $deletePermission = 'roles-permisos.delete';
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
self::$viewPath = getenv('theme.path') . 'form/group/';
|
self::$viewPath = getenv('theme.path') . 'form/group/';
|
||||||
@ -39,8 +37,6 @@ class Group extends \App\Controllers\GoBaseController
|
|||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
checkPermission('roles-permisos.menu');
|
|
||||||
|
|
||||||
$this->viewData['usingClientSideDataTable'] = true;
|
$this->viewData['usingClientSideDataTable'] = true;
|
||||||
$this->viewData['pageSubTitle'] = lang('Basic.global.ManageAllRecords', [lang('Groups.group')]);
|
$this->viewData['pageSubTitle'] = lang('Basic.global.ManageAllRecords', [lang('Groups.group')]);
|
||||||
// IMN
|
// IMN
|
||||||
@ -52,12 +48,11 @@ class Group extends \App\Controllers\GoBaseController
|
|||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
|
|
||||||
checkPermission('roles-permisos.create');
|
|
||||||
|
|
||||||
if ($this->request->getPost()) :
|
if ($this->request->getPost()) :
|
||||||
|
|
||||||
$postData = $this->request->getPost();
|
$postData = $this->request->getPost();
|
||||||
|
|
||||||
|
$temp_data['id'] = $groupEntity->id;
|
||||||
$temp_data['title'] = $postData['title'];
|
$temp_data['title'] = $postData['title'];
|
||||||
$temp_data['description'] = $postData['description'];
|
$temp_data['description'] = $postData['description'];
|
||||||
|
|
||||||
@ -129,7 +124,6 @@ class Group extends \App\Controllers\GoBaseController
|
|||||||
|
|
||||||
public function edit($requestedId = null)
|
public function edit($requestedId = null)
|
||||||
{
|
{
|
||||||
checkPermission('roles-permisos.edit');
|
|
||||||
|
|
||||||
helper('general');
|
helper('general');
|
||||||
|
|
||||||
@ -249,4 +243,30 @@ class Group extends \App\Controllers\GoBaseController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function menuItems()
|
||||||
|
{
|
||||||
|
if ($this->request->isAJAX()) {
|
||||||
|
$searchStr = goSanitize($this->request->getPost('searchTerm'))[0];
|
||||||
|
$reqId = goSanitize($this->request->getPost('id'))[0];
|
||||||
|
$reqText = goSanitize($this->request->getPost('text'))[0];
|
||||||
|
$onlyActiveOnes = false;
|
||||||
|
$columns2select = [$reqId ?? 'id', $reqText ?? 'nombre'];
|
||||||
|
$onlyActiveOnes = false;
|
||||||
|
$menu = $this->model->getSelect2MenuItems($columns2select, $columns2select[1], $onlyActiveOnes, $searchStr);
|
||||||
|
$nonItem = new \stdClass;
|
||||||
|
$nonItem->id = '';
|
||||||
|
$nonItem->text = '- ' . lang('Basic.global.None') . ' -';
|
||||||
|
array_unshift($menu, $nonItem);
|
||||||
|
|
||||||
|
$newTokenHash = csrf_hash();
|
||||||
|
$csrfTokenName = csrf_token();
|
||||||
|
$data = [
|
||||||
|
'menu' => $menu,
|
||||||
|
$csrfTokenName => $newTokenHash
|
||||||
|
];
|
||||||
|
return $this->respond($data);
|
||||||
|
} else {
|
||||||
|
return $this->failUnauthorized('Invalid request', 403);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,7 +28,6 @@ class Maquinas extends \App\Controllers\BaseResourceController
|
|||||||
protected static $viewPath = 'themes/vuexy/form/configuracion/maquinas/';
|
protected static $viewPath = 'themes/vuexy/form/configuracion/maquinas/';
|
||||||
|
|
||||||
protected $indexRoute = 'maquinaList';
|
protected $indexRoute = 'maquinaList';
|
||||||
|
|
||||||
protected MaquinaService $maquinaService;
|
protected MaquinaService $maquinaService;
|
||||||
protected Validation $validation;
|
protected Validation $validation;
|
||||||
|
|
||||||
@ -56,7 +55,6 @@ class Maquinas extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
checkPermission('maquinas.menu');
|
|
||||||
|
|
||||||
$viewData = [
|
$viewData = [
|
||||||
'currentModule' => static::$controllerSlug,
|
'currentModule' => static::$controllerSlug,
|
||||||
@ -114,8 +112,6 @@ class Maquinas extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
checkPermission('maquinas.create');
|
|
||||||
|
|
||||||
if ($this->request->getPost()):
|
if ($this->request->getPost()):
|
||||||
|
|
||||||
$nullIfEmpty = true; // !(phpversion() >= '8.1');
|
$nullIfEmpty = true; // !(phpversion() >= '8.1');
|
||||||
@ -180,7 +176,7 @@ class Maquinas extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function edit($requestedId = null)
|
public function edit($requestedId = null)
|
||||||
{
|
{
|
||||||
checkPermission('maquinas.edit');
|
|
||||||
|
|
||||||
if ($requestedId == null):
|
if ($requestedId == null):
|
||||||
return $this->redirect2listView();
|
return $this->redirect2listView();
|
||||||
|
|||||||
@ -28,8 +28,6 @@ class Maquinasdefecto extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
protected $indexRoute = 'maquinaPorDefectoList';
|
protected $indexRoute = 'maquinaPorDefectoList';
|
||||||
|
|
||||||
protected $deletePermission = 'maquinas-defecto.delete';
|
|
||||||
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
@ -47,7 +45,6 @@ class Maquinasdefecto extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
checkPermission('maquinas-defecto.menu');
|
|
||||||
|
|
||||||
$viewData = [
|
$viewData = [
|
||||||
'currentModule' => static::$controllerSlug,
|
'currentModule' => static::$controllerSlug,
|
||||||
@ -66,7 +63,7 @@ class Maquinasdefecto extends \App\Controllers\BaseResourceController
|
|||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
|
|
||||||
checkPermission('maquinas-defecto.create');
|
|
||||||
|
|
||||||
|
|
||||||
if ($this->request->getPost()) :
|
if ($this->request->getPost()) :
|
||||||
@ -141,7 +138,6 @@ class Maquinasdefecto extends \App\Controllers\BaseResourceController
|
|||||||
public function edit($requestedId = null)
|
public function edit($requestedId = null)
|
||||||
{
|
{
|
||||||
|
|
||||||
checkPermission('maquinas-defecto.edit');
|
|
||||||
|
|
||||||
if ($requestedId == null) :
|
if ($requestedId == null) :
|
||||||
return $this->redirect2listView();
|
return $this->redirect2listView();
|
||||||
|
|||||||
@ -100,7 +100,6 @@ class Maquinaspapelesimpresion extends \App\Controllers\BaseResourceController {
|
|||||||
$resourceData = $this->model->getResource($search, $isRotativa, $tarifas, $maquina_id)
|
$resourceData = $this->model->getResource($search, $isRotativa, $tarifas, $maquina_id)
|
||||||
->orderBy($order, $dir)->orderBy($order2, $dir2)->orderBy($order3, $dir3)->orderBy($order4, $dir4)->limit($length, $start)->get()->getResultObject();
|
->orderBy($order, $dir)->orderBy($order2, $dir2)->orderBy($order3, $dir3)->orderBy($order4, $dir4)->limit($length, $start)->get()->getResultObject();
|
||||||
|
|
||||||
$query =$this->model->getLastQuery();
|
|
||||||
return $this->respond(Collection::datatable(
|
return $this->respond(Collection::datatable(
|
||||||
$resourceData,
|
$resourceData,
|
||||||
$this->model->getResource("", $isRotativa, $tarifas, $maquina_id)->countAllResults(),
|
$this->model->getResource("", $isRotativa, $tarifas, $maquina_id)->countAllResults(),
|
||||||
|
|||||||
@ -29,7 +29,6 @@ class Paises extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
protected $indexRoute = 'paisList';
|
protected $indexRoute = 'paisList';
|
||||||
|
|
||||||
protected $deletePermission = 'paises.delete';
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
@ -48,7 +47,6 @@ class Paises extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
checkPermission('paises.menu');
|
|
||||||
|
|
||||||
$viewData = [
|
$viewData = [
|
||||||
'currentModule' => static::$controllerSlug,
|
'currentModule' => static::$controllerSlug,
|
||||||
@ -67,8 +65,6 @@ class Paises extends \App\Controllers\BaseResourceController
|
|||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
|
|
||||||
checkPermission('paises.create');
|
|
||||||
|
|
||||||
if ($this->request->getPost()):
|
if ($this->request->getPost()):
|
||||||
|
|
||||||
$postData = $this->request->getPost();
|
$postData = $this->request->getPost();
|
||||||
@ -123,7 +119,6 @@ class Paises extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function edit($requestedId = null)
|
public function edit($requestedId = null)
|
||||||
{
|
{
|
||||||
checkPermission('paises.edit');
|
|
||||||
|
|
||||||
if ($requestedId == null):
|
if ($requestedId == null):
|
||||||
return $this->redirect2listView();
|
return $this->redirect2listView();
|
||||||
|
|||||||
@ -28,7 +28,6 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
protected $indexRoute = 'papelGenericoList';
|
protected $indexRoute = 'papelGenericoList';
|
||||||
|
|
||||||
protected $deletePermission = 'papel-generico.delete';
|
|
||||||
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
@ -55,7 +54,6 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
checkPermission('papel-generico.menu');
|
|
||||||
|
|
||||||
$viewData = [
|
$viewData = [
|
||||||
'currentModule' => static::$controllerSlug,
|
'currentModule' => static::$controllerSlug,
|
||||||
@ -73,7 +71,6 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
checkPermission('papel-generico.create');
|
|
||||||
|
|
||||||
if ($this->request->getPost()):
|
if ($this->request->getPost()):
|
||||||
|
|
||||||
@ -135,7 +132,6 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function edit($requestedId = null)
|
public function edit($requestedId = null)
|
||||||
{
|
{
|
||||||
checkPermission('papel-generico.edit');
|
|
||||||
|
|
||||||
if ($requestedId == null):
|
if ($requestedId == null):
|
||||||
return $this->redirect2listView();
|
return $this->redirect2listView();
|
||||||
@ -305,6 +301,53 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function getTipoPapelCliente(){
|
||||||
|
|
||||||
|
if($this->request->isAJAX()) {
|
||||||
|
|
||||||
|
$data_input = $this->request->getGet();
|
||||||
|
$result = $this->papelService->getTiposPalelGenerico((object)$data_input);
|
||||||
|
/*
|
||||||
|
|
||||||
|
$tirada = goSanitize($this->request->getGet('tirada'))[0] ?? null;
|
||||||
|
$POD = null;
|
||||||
|
if ($tirada != null) {
|
||||||
|
$POD_value = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
|
||||||
|
if (intval($tirada) <= intval($POD_value)) {
|
||||||
|
$POD = true;
|
||||||
|
} else {
|
||||||
|
$POD = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$tipo = goSanitize($this->request->getGet('tipo'))[0];
|
||||||
|
$selected_papel = goSanitize($this->request->getGet('papel'))[0] ?? null;
|
||||||
|
$cubierta = goSanitize($this->request->getGet('cubierta'))[0] ?? 0;
|
||||||
|
$tapa_dura = goSanitize($this->request->getGet('tapa_dura'))[0] ?? null;
|
||||||
|
$sobrecubierta = goSanitize($this->request->getGet('sobrecubierta'))[0] ?? 0;
|
||||||
|
$guardas = goSanitize($this->request->getGet('guardas'))[0] ?? 0;
|
||||||
|
|
||||||
|
$ancho = floatval($this->request->getGet('ancho') ?? 0);
|
||||||
|
$alto = floatval($this->request->getGet('alto') ?? 0);
|
||||||
|
$solapas = floatval($this->request->getGet('solapas') ?? 0);
|
||||||
|
$lomo = floatval($this->request->getGet('lomo') ?? 0);
|
||||||
|
|
||||||
|
$anchoLibro = $ancho;
|
||||||
|
|
||||||
|
if(intval($cubierta) == 1 || intval($sobrecubierta) == 1){
|
||||||
|
$anchoLibro = 2 * $ancho + 2 * $solapas + $lomo;
|
||||||
|
}
|
||||||
|
|
||||||
|
$menu = $this->model->getPapelCliente($tipo, $cubierta, $sobrecubierta, $guardas, $selected_papel, $tapa_dura, false, $POD, $anchoLibro, $alto, $tirada);
|
||||||
|
*/
|
||||||
|
|
||||||
|
return $this->respond($result);
|
||||||
|
} else {
|
||||||
|
return $this->failUnauthorized('Invalid request', 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public function getPapelCliente()
|
public function getPapelCliente()
|
||||||
{
|
{
|
||||||
if ($this->request->isAJAX()) {
|
if ($this->request->isAJAX()) {
|
||||||
|
|||||||
@ -52,9 +52,6 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
|
|||||||
protected static $viewPath = 'themes/vuexy/form/configuracion/papel/';
|
protected static $viewPath = 'themes/vuexy/form/configuracion/papel/';
|
||||||
|
|
||||||
protected $indexRoute = 'papelImpresionList';
|
protected $indexRoute = 'papelImpresionList';
|
||||||
|
|
||||||
protected $deletePermission = 'papel-impresion.delete';
|
|
||||||
|
|
||||||
protected Validation $validation;
|
protected Validation $validation;
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
@ -84,7 +81,6 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
checkPermission('papel-impresion.menu');
|
|
||||||
|
|
||||||
$viewData = [
|
$viewData = [
|
||||||
'currentModule' => static::$controllerSlug,
|
'currentModule' => static::$controllerSlug,
|
||||||
@ -102,7 +98,7 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
checkPermission('papel-impresion.create');
|
|
||||||
|
|
||||||
if ($this->request->getPost()) :
|
if ($this->request->getPost()) :
|
||||||
|
|
||||||
@ -165,7 +161,6 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
public function edit($requestedId = null)
|
public function edit($requestedId = null)
|
||||||
{
|
{
|
||||||
checkPermission('papel-impresion.edit');
|
|
||||||
|
|
||||||
if ($requestedId == null) :
|
if ($requestedId == null) :
|
||||||
return $this->redirect2listView();
|
return $this->redirect2listView();
|
||||||
|
|||||||
@ -22,8 +22,6 @@ class SeriesFacturas extends BaseResourceController
|
|||||||
|
|
||||||
protected $indexRoute = 'seriesFacturasList';
|
protected $indexRoute = 'seriesFacturasList';
|
||||||
|
|
||||||
protected $deletePermission = 'series-facturas.delete';
|
|
||||||
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
@ -42,7 +40,6 @@ class SeriesFacturas extends BaseResourceController
|
|||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
checkPermission('series-facturas.menu');
|
|
||||||
|
|
||||||
$viewData = [
|
$viewData = [
|
||||||
'currentModule' => static::$controllerSlug,
|
'currentModule' => static::$controllerSlug,
|
||||||
@ -60,8 +57,6 @@ class SeriesFacturas extends BaseResourceController
|
|||||||
|
|
||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
checkPermission('series-facturas.create');
|
|
||||||
|
|
||||||
if ($this->request->getPost()) :
|
if ($this->request->getPost()) :
|
||||||
|
|
||||||
$postData = $this->request->getPost();
|
$postData = $this->request->getPost();
|
||||||
@ -115,8 +110,6 @@ class SeriesFacturas extends BaseResourceController
|
|||||||
public function edit($requestedId = null)
|
public function edit($requestedId = null)
|
||||||
{
|
{
|
||||||
|
|
||||||
checkPermission('series-facturas.edit');
|
|
||||||
|
|
||||||
if ($requestedId == null) :
|
if ($requestedId == null) :
|
||||||
return $this->redirect2listView();
|
return $this->redirect2listView();
|
||||||
endif;
|
endif;
|
||||||
|
|||||||
@ -22,8 +22,6 @@ class Ubicaciones extends BaseResourceController
|
|||||||
|
|
||||||
protected $indexRoute = 'ubicacionesList';
|
protected $indexRoute = 'ubicacionesList';
|
||||||
|
|
||||||
protected $deletePermission = 'ubicaciones.delete';
|
|
||||||
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
@ -42,7 +40,6 @@ class Ubicaciones extends BaseResourceController
|
|||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
checkPermission('ubicaciones.menu');
|
|
||||||
|
|
||||||
$viewData = [
|
$viewData = [
|
||||||
'currentModule' => static::$controllerSlug,
|
'currentModule' => static::$controllerSlug,
|
||||||
@ -60,8 +57,6 @@ class Ubicaciones extends BaseResourceController
|
|||||||
|
|
||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
checkPermission('ubicaciones.create');
|
|
||||||
|
|
||||||
if ($this->request->getPost()) :
|
if ($this->request->getPost()) :
|
||||||
|
|
||||||
$postData = $this->request->getPost();
|
$postData = $this->request->getPost();
|
||||||
@ -116,7 +111,6 @@ class Ubicaciones extends BaseResourceController
|
|||||||
|
|
||||||
public function edit($requestedId = null)
|
public function edit($requestedId = null)
|
||||||
{
|
{
|
||||||
checkPermission('ubicaciones.edit');
|
|
||||||
|
|
||||||
if ($requestedId == null) :
|
if ($requestedId == null) :
|
||||||
return $this->redirect2listView();
|
return $this->redirect2listView();
|
||||||
|
|||||||
@ -69,7 +69,7 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
|
|
||||||
if ($this->request->getPost()):
|
if ($this->request->getPost()) :
|
||||||
|
|
||||||
$postData = $this->request->getPost();
|
$postData = $this->request->getPost();
|
||||||
|
|
||||||
@ -94,8 +94,8 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
// Obtener proveedor de usuarios
|
// Obtener proveedor de usuarios
|
||||||
$users = auth()->getProvider();
|
$users = auth()->getProvider();
|
||||||
|
|
||||||
if ($successfulResult = $this->canValidate()):
|
if ($successfulResult = $this->canValidate()) :
|
||||||
if ($this->canValidate()):
|
if ($this->canValidate()) :
|
||||||
try {
|
try {
|
||||||
|
|
||||||
// The Email is unique
|
// The Email is unique
|
||||||
@ -134,12 +134,17 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
|
$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 = $users->getInsertID();
|
$id = $users->getInsertID();
|
||||||
// Asignar los grupos de usuarios a los que pertenece el usuario editado
|
$this->group_user_model->where('user_id', $id)->delete();
|
||||||
$this->saveUserGroupsSafely($id, $currentGroups);
|
foreach ($currentGroups as $group) {
|
||||||
|
$group_user_data = [
|
||||||
|
'user_id' => $id,
|
||||||
|
'group' => $group
|
||||||
|
];
|
||||||
|
$this->group_user_model->insert($group_user_data);
|
||||||
|
}
|
||||||
$this->chat_department_user_model->where("user_id", $id)->delete();
|
$this->chat_department_user_model->where("user_id", $id)->delete();
|
||||||
foreach ($chatDepartments as $chatDepartment) {
|
foreach ($chatDepartments as $chatDepartment) {
|
||||||
$this->chat_department_user_model->insert([
|
$this->chat_department_user_model->insert([
|
||||||
@ -151,8 +156,8 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
$message = lang('Basic.global.saveSuccess', [mb_strtolower(lang('Users.user'))]) . '.';
|
$message = lang('Basic.global.saveSuccess', [mb_strtolower(lang('Users.user'))]) . '.';
|
||||||
$message = ucfirst(str_replace("'", "\'", $message));
|
$message = ucfirst(str_replace("'", "\'", $message));
|
||||||
|
|
||||||
if ($thenRedirect):
|
if ($thenRedirect) :
|
||||||
if (!empty($this->indexRoute)):
|
if (!empty($this->indexRoute)) :
|
||||||
return redirect()->to(route_to($this->indexRoute))->with('successMessage', $message);
|
return redirect()->to(route_to($this->indexRoute))->with('successMessage', $message);
|
||||||
else:
|
else:
|
||||||
return $this->redirect2listView('successMessage', $message);
|
return $this->redirect2listView('successMessage', $message);
|
||||||
@ -168,7 +173,7 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
$this->viewData['user'] = isset($sanitizedData) ? new UserEntity($sanitizedData) : new UserEntity();
|
$this->viewData['user'] = isset($sanitizedData) ? new UserEntity($sanitizedData) : new UserEntity();
|
||||||
$this->viewData['clienteList'] = $this->getClienteListItems();
|
$this->viewData['clienteList'] = $this->getClienteListItems();
|
||||||
$this->viewData['formAction'] = route_to('createUser');
|
$this->viewData['formAction'] = route_to('createUser');
|
||||||
$this->viewData['groups'] = $this->group_model->select('keyword, title')->where('id >', 0)->findAll();
|
$this->viewData['groups'] = $this->group_model->select('keyword, title')->findAll();
|
||||||
$this->viewData['chatDepartments'] = $this->chat_department_model->findAll();
|
$this->viewData['chatDepartments'] = $this->chat_department_model->findAll();
|
||||||
$this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . lang('Users.user') . ' ' . lang('Basic.global.addNewSuffix');
|
$this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . lang('Users.user') . ' ' . lang('Basic.global.addNewSuffix');
|
||||||
|
|
||||||
@ -186,12 +191,12 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
$users = auth()->getProvider();
|
$users = auth()->getProvider();
|
||||||
$user = $users->findById($id);
|
$user = $users->findById($id);
|
||||||
|
|
||||||
if ($user == false):
|
if ($user == false) :
|
||||||
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Users.user')), $id]);
|
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Users.user')), $id]);
|
||||||
return $this->redirect2listView('errorMessage', $message);
|
return $this->redirect2listView('errorMessage', $message);
|
||||||
endif;
|
endif;
|
||||||
|
|
||||||
if ($this->request->getPost()):
|
if ($this->request->getPost()) :
|
||||||
|
|
||||||
$postData = $this->request->getPost();
|
$postData = $this->request->getPost();
|
||||||
|
|
||||||
@ -213,9 +218,9 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
}
|
}
|
||||||
|
|
||||||
$noException = true;
|
$noException = true;
|
||||||
if ($successfulResult = $this->canValidate()):
|
if ($successfulResult = $this->canValidate()) :
|
||||||
|
|
||||||
if ($this->canValidate()):
|
if ($this->canValidate()) :
|
||||||
try {
|
try {
|
||||||
|
|
||||||
if (in_array('cliente-editor', $currentGroups) || in_array('cliente-administrador', $currentGroups)) {
|
if (in_array('cliente-editor', $currentGroups) || in_array('cliente-administrador', $currentGroups)) {
|
||||||
@ -244,11 +249,16 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
$thenRedirect = false;
|
$thenRedirect = false;
|
||||||
|
|
||||||
endif;
|
endif;
|
||||||
if ($noException && $successfulResult):
|
if ($noException && $successfulResult) :
|
||||||
|
|
||||||
// Asignar los grupos de usuarios a los que pertenece el usuario editado
|
|
||||||
$this->saveUserGroupsSafely($user->id, $currentGroups);
|
|
||||||
|
|
||||||
|
$this->group_user_model->where('user_id', $user->id)->delete();
|
||||||
|
foreach ($currentGroups as $group) {
|
||||||
|
$group_user_data = [
|
||||||
|
'user_id' => $user->id,
|
||||||
|
'group' => $group
|
||||||
|
];
|
||||||
|
$this->group_user_model->insert($group_user_data);
|
||||||
|
}
|
||||||
$this->chat_department_user_model->where("user_id", $id)->delete();
|
$this->chat_department_user_model->where("user_id", $id)->delete();
|
||||||
foreach ($chatDepartments as $chatDepartment) {
|
foreach ($chatDepartments as $chatDepartment) {
|
||||||
$this->chat_department_user_model->insert([
|
$this->chat_department_user_model->insert([
|
||||||
@ -260,8 +270,8 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
$message = lang('Basic.global.updateSuccess', [mb_strtolower(lang('Users.user'))]) . '.';
|
$message = lang('Basic.global.updateSuccess', [mb_strtolower(lang('Users.user'))]) . '.';
|
||||||
$message = ucfirst(str_replace("'", "\'", $message));
|
$message = ucfirst(str_replace("'", "\'", $message));
|
||||||
|
|
||||||
if ($thenRedirect):
|
if ($thenRedirect) :
|
||||||
if (!empty($this->indexRoute)):
|
if (!empty($this->indexRoute)) :
|
||||||
return redirect()->to(route_to($this->indexRoute))->with('successMessage', $message);
|
return redirect()->to(route_to($this->indexRoute))->with('successMessage', $message);
|
||||||
else:
|
else:
|
||||||
return $this->redirect2listView('successMessage', $message);
|
return $this->redirect2listView('successMessage', $message);
|
||||||
@ -277,7 +287,7 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
$this->viewData['clienteList'] = $this->getClienteListItems($user->cliente_id);
|
$this->viewData['clienteList'] = $this->getClienteListItems($user->cliente_id);
|
||||||
$this->viewData['formAction'] = route_to('updateUser', $id);
|
$this->viewData['formAction'] = route_to('updateUser', $id);
|
||||||
$this->viewData['selectedGroups'] = $this->group_model->getUsersRoles($requestedId);
|
$this->viewData['selectedGroups'] = $this->group_model->getUsersRoles($requestedId);
|
||||||
$this->viewData['groups'] = $this->group_model->select('keyword, title')->where('id >', 0)->findAll();
|
$this->viewData['groups'] = $this->group_model->select('keyword, title')->findAll();
|
||||||
$this->viewData['chatDepartments'] = $this->chat_department_model->select(["display", "name", "id as chatDepartmentId"])->findAll();
|
$this->viewData['chatDepartments'] = $this->chat_department_model->select(["display", "name", "id as chatDepartmentId"])->findAll();
|
||||||
$this->viewData['chatDepartmentUser'] = $this->chat_department_user_model->getChatDepartmentUser($user->id);
|
$this->viewData['chatDepartmentUser'] = $this->chat_department_user_model->getChatDepartmentUser($user->id);
|
||||||
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('Users.user') . ' ' . lang('Basic.global.edit3');
|
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('Users.user') . ' ' . lang('Basic.global.edit3');
|
||||||
@ -289,22 +299,18 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
public function delete($requestedId = null, bool $deletePermanently = true)
|
public function delete($requestedId = null, bool $deletePermanently = true)
|
||||||
{
|
{
|
||||||
|
|
||||||
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);
|
||||||
$user = $this->model->find($id);
|
$user = $this->model->find($id);
|
||||||
|
|
||||||
if ($user == false):
|
if ($user == false) :
|
||||||
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Users.user')), $id]);
|
$message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Users.user')), $id]);
|
||||||
return $this->redirect2listView('errorMessage', $message);
|
return $this->redirect2listView('errorMessage', $message);
|
||||||
endif;
|
endif;
|
||||||
|
|
||||||
// Elimina todos los grupos actuales
|
|
||||||
$this->group_user_model->where('user_id', $id)->delete();
|
|
||||||
|
|
||||||
// Elimina todos los grupos de chat actuales
|
|
||||||
$this->chat_department_user_model->where("user_id", $id)->delete();
|
$this->chat_department_user_model->where("user_id", $id)->delete();
|
||||||
|
|
||||||
$users = auth()->getProvider();
|
$users = auth()->getProvider();
|
||||||
@ -427,11 +433,11 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
protected function getClienteListItems($selId = null)
|
protected function getClienteListItems($selId = null)
|
||||||
{
|
{
|
||||||
$data = ['' => ""];
|
$data = ['' => ""];
|
||||||
if (!empty($selId)):
|
if (!empty($selId)) :
|
||||||
$clienteModel = model('App\Models\Clientes\ClienteModel');
|
$clienteModel = model('App\Models\Clientes\ClienteModel');
|
||||||
|
|
||||||
$selOption = $clienteModel->where('id', $selId)->findColumn('nombre');
|
$selOption = $clienteModel->where('id', $selId)->findColumn('nombre');
|
||||||
if (!empty($selOption)):
|
if (!empty($selOption)) :
|
||||||
$data[$selId] = $selOption[0];
|
$data[$selId] = $selOption[0];
|
||||||
endif;
|
endif;
|
||||||
endif;
|
endif;
|
||||||
@ -444,7 +450,7 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
['title' => lang("App.menu_change_session"), 'route' => route_to('maquinistaUserChangeList'), 'active' => true]
|
['title' => lang("App.menu_change_session"), 'route' => route_to('maquinistaUserChangeList'), 'active' => true]
|
||||||
];
|
];
|
||||||
$maquinistas = [];
|
$maquinistas = [];
|
||||||
$users = auth()->getProvider()->whereNotIn('id', [auth()->user()->id])->findAll();
|
$users = auth()->getProvider()->whereNotIn('id',[auth()->user()->id])->findAll();
|
||||||
foreach ($users as $key => $user) {
|
foreach ($users as $key => $user) {
|
||||||
if ($user->inGroup('maquina') && !$user->inGroup('admin', 'comercial', 'cliente-editor', 'cliente-admin')) {
|
if ($user->inGroup('maquina') && !$user->inGroup('admin', 'comercial', 'cliente-editor', 'cliente-admin')) {
|
||||||
$maquinistas[] = $user;
|
$maquinistas[] = $user;
|
||||||
@ -461,50 +467,4 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
auth()->login($user);
|
auth()->login($user);
|
||||||
return redirect("home");
|
return redirect("home");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Asigna grupos a un usuario, asegurando que no se pueda inyectar el grupo 'root',
|
|
||||||
* pero manteniéndolo si ya lo tenía previamente.
|
|
||||||
*
|
|
||||||
* @param int $userId ID del usuario al que se le asignarán los grupos
|
|
||||||
* @param array $requestedGroups Grupos solicitados desde el formulario
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
private function saveUserGroupsSafely(int $userId, array $requestedGroups): void
|
|
||||||
{
|
|
||||||
// Verifica si el usuario ya tenía el grupo 'root'
|
|
||||||
$existingGroups = $this->group_user_model
|
|
||||||
->where('user_id', $userId)
|
|
||||||
->findColumn('group') ?? [];
|
|
||||||
|
|
||||||
$hasRoot = in_array('root', $existingGroups);
|
|
||||||
|
|
||||||
// Elimina todos los grupos actuales
|
|
||||||
$this->group_user_model->where('user_id', $userId)->delete();
|
|
||||||
|
|
||||||
// Inserta solo los grupos válidos (sin 'root')
|
|
||||||
foreach ($requestedGroups as $group) {
|
|
||||||
if (!empty($group) && $group !== 'root') {
|
|
||||||
$this->group_user_model->insert([
|
|
||||||
'user_id' => $userId,
|
|
||||||
'group' => $group,
|
|
||||||
'created_at' => date('Y-m-d H:i:s'),
|
|
||||||
]);
|
|
||||||
} elseif ($group === 'root') {
|
|
||||||
log_message('alert', "Intento de asignar grupo 'root' al usuario ID $userId");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reasigna 'root' solo si el usuario ya lo tenía
|
|
||||||
if ($hasRoot) {
|
|
||||||
$this->group_user_model->insert([
|
|
||||||
'user_id' => $userId,
|
|
||||||
'group' => 'root',
|
|
||||||
'created_at' => date('Y-m-d H:i:s'),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Controllers\Importadores;
|
namespace App\Controllers\Importadores;
|
||||||
|
|
||||||
use App\Controllers\BaseResourceController;
|
use App\Controllers\BaseResourceController;
|
||||||
@ -394,7 +393,7 @@ class ImportadorBubok extends BaseResourceController
|
|||||||
'gramajeCubierta' => in_array($encuadernadoId, [1, 3]) ? 150 : 300, // 150 gramos para "fresado tapa dura" y "cosido tapa dura"
|
'gramajeCubierta' => in_array($encuadernadoId, [1, 3]) ? 150 : 300, // 150 gramos para "fresado tapa dura" y "cosido tapa dura"
|
||||||
'solapas' => !empty($producto->cover->type->consolapas) ? 80 : 0,
|
'solapas' => !empty($producto->cover->type->consolapas) ? 80 : 0,
|
||||||
'acabado' => $acabadoId,
|
'acabado' => $acabadoId,
|
||||||
'cabezada' => model('\App\Models\Configuracion\ConfigVariableModel')->getCabezadaDefault(),
|
'cabezada' => 'WHI',
|
||||||
'lomoRedondo' => 0
|
'lomoRedondo' => 0
|
||||||
],
|
],
|
||||||
'guardas' => [],
|
'guardas' => [],
|
||||||
@ -457,33 +456,85 @@ class ImportadorBubok extends BaseResourceController
|
|||||||
], 400);
|
], 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ✅ Importar archivos desde URLs y subir al SFTP
|
|
||||||
$uploaderService = new \App\Services\PresupuestoUploaderService(
|
// Descarga y subida de archivos al SFTP
|
||||||
new \App\Libraries\SftpClientWrapper(config('PresupuestoSFTP')),
|
$presupuestoFicheroModel = model('App\Models\Presupuestos\PresupuestoFicheroModel');
|
||||||
model(\App\Models\Presupuestos\PresupuestoFicheroModel::class),
|
$ftp = new \App\Libraries\SafekatFtpClient();
|
||||||
config('PresupuestoSFTP')
|
|
||||||
);
|
|
||||||
|
|
||||||
$archivoUrls = [
|
$archivoUrls = [
|
||||||
'cover' => $producto->cover->file ?? null,
|
'cover' => $producto->cover->file ?? null,
|
||||||
'body' => $producto->body->file ?? null,
|
'body' => $producto->body->file ?? null,
|
||||||
];
|
];
|
||||||
|
|
||||||
$resultadoArchivos = $uploaderService->importarArchivosDesdeUrlsBubok($response['sk_id'], $archivoUrls);
|
foreach ($archivoUrls as $tipo => $url) {
|
||||||
|
if (!$url)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (!$resultadoArchivos['success']) {
|
try {
|
||||||
log_message('warning', 'Errores al importar archivos desde Bubok: ' . print_r($resultadoArchivos['errores'], true));
|
$contenido = @file_get_contents($url); // silenciar errores de PHP
|
||||||
|
|
||||||
|
if ($contenido === false || strlen($contenido) === 0) {
|
||||||
|
// No se pudo descargar el archivo: generar archivo de error para FTP
|
||||||
|
$errorMessage = "ERROR: No se pudo descargar el archivo remoto para $tipo desde la URL: $url";
|
||||||
|
|
||||||
|
$remoteDir = $ftp->getPresupuestoRemotePath($response['sk_id']); // crea esta función si no existe
|
||||||
|
$remoteErrorFile = $remoteDir . '/ERROR_' . strtoupper($tipo) . '.txt';
|
||||||
|
|
||||||
|
// Crear archivo temporal con el mensaje de error
|
||||||
|
$tempErrorFile = WRITEPATH . 'uploads/presupuestos/ERROR_' . $tipo . '.txt';
|
||||||
|
file_put_contents($tempErrorFile, $errorMessage);
|
||||||
|
|
||||||
|
if (!$ftp->is_dir($remoteDir)) {
|
||||||
|
$ftp->mkdir($remoteDir, recursive: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ftp->put($remoteErrorFile, $tempErrorFile, $ftp::SOURCE_LOCAL_FILE);
|
||||||
|
|
||||||
|
continue; // no procesar este archivo
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Procesar normalmente si la descarga tuvo éxito
|
||||||
|
$nombreOriginal = basename(parse_url($url, PHP_URL_PATH));
|
||||||
|
$extension = pathinfo($nombreOriginal, PATHINFO_EXTENSION);
|
||||||
|
|
||||||
|
$nombreLimpio = $presupuestoFicheroModel->saveFileInBBDD(
|
||||||
|
$response['sk_id'],
|
||||||
|
$nombreOriginal,
|
||||||
|
$extension,
|
||||||
|
auth()->id()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (is_null($nombreLimpio))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$rutaLocal = WRITEPATH . 'uploads/presupuestos/';
|
||||||
|
if (!is_dir($rutaLocal)) {
|
||||||
|
mkdir($rutaLocal, 0777, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
file_put_contents($rutaLocal . $nombreLimpio, $contenido);
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
//log_message('error', 'Error inesperado en descarga de archivo remoto: ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Subir al FTP después de guardar localmente
|
||||||
|
try {
|
||||||
|
$ftp->uploadFilePresupuesto($response['sk_id']);
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
log_message('error', 'Error subiendo archivos al FTP: ' . $e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->respond([
|
return $this->respond([
|
||||||
'status' => 200,
|
'status' => 200,
|
||||||
'data' => [
|
'data' => [
|
||||||
'sk_id' => $response['sk_id'],
|
'sk_id' => $response['sk_id'],
|
||||||
'sk_url' => $response['sk_url'] ?? null,
|
'sk_url' => $response['sk_url'] ?? null
|
||||||
'archivos_subidos' => $resultadoArchivos['archivos_subidos'],
|
|
||||||
'errores_archivos' => $resultadoArchivos['errores']
|
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
return $this->respond([
|
return $this->respond([
|
||||||
'status' => 500,
|
'status' => 500,
|
||||||
@ -493,4 +544,8 @@ class ImportadorBubok extends BaseResourceController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -272,7 +272,7 @@ class ImportadorCatalogo extends BaseResourceController
|
|||||||
'gramajeCubierta' => $libro->cubierta_gramaje,
|
'gramajeCubierta' => $libro->cubierta_gramaje,
|
||||||
'solapas' => $libro->cubierta_ancho_solapas,
|
'solapas' => $libro->cubierta_ancho_solapas,
|
||||||
'acabado' => $libro->cubierta_acabado_id,
|
'acabado' => $libro->cubierta_acabado_id,
|
||||||
'cabezada' => model('\App\Models\Configuracion\ConfigVariableModel')->getCabezadaDefault(),
|
'cabezada' => 'WHI',
|
||||||
'lomoRedondo' => 0
|
'lomoRedondo' => 0
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@ use App\Controllers\Facturacion\Facturas;
|
|||||||
use App\Entities\Pedidos\PedidoEntity;
|
use App\Entities\Pedidos\PedidoEntity;
|
||||||
use App\Models\Collection;
|
use App\Models\Collection;
|
||||||
use App\Models\Pedidos\PedidoModel;
|
use App\Models\Pedidos\PedidoModel;
|
||||||
|
use App\Services\PedidoXMLService;
|
||||||
use App\Services\ProductionService;
|
use App\Services\ProductionService;
|
||||||
use Hermawan\DataTables\DataTable;
|
use Hermawan\DataTables\DataTable;
|
||||||
use CodeIgniter\I18n\Time;
|
use CodeIgniter\I18n\Time;
|
||||||
@ -613,7 +614,12 @@ class Pedido extends \App\Controllers\BaseResourceController
|
|||||||
$pedidoEntity->created_at_footer = $pedidoEntity->created_at ? date(' H:i d/m/Y', strtotime($pedidoEntity->created_at)) : '';
|
$pedidoEntity->created_at_footer = $pedidoEntity->created_at ? date(' H:i d/m/Y', strtotime($pedidoEntity->created_at)) : '';
|
||||||
$pedidoEntity->updated_at_footer = $pedidoEntity->updated_at ? date(' H:i d/m/Y', strtotime($pedidoEntity->updated_at)) : '';
|
$pedidoEntity->updated_at_footer = $pedidoEntity->updated_at ? date(' H:i d/m/Y', strtotime($pedidoEntity->updated_at)) : '';
|
||||||
}
|
}
|
||||||
|
public function get_xml_pedido($pedido_id)
|
||||||
|
{
|
||||||
|
$data = PedidoXMLService::generate_xml($pedido_id);
|
||||||
|
// $xml_service = new PedidoXMLService($this->model);
|
||||||
|
return $this->respond($data);
|
||||||
|
}
|
||||||
|
|
||||||
public function to_produccion($pedido_id)
|
public function to_produccion($pedido_id)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -36,8 +36,6 @@ class Buscador extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
protected $indexRoute = 'buscadorPresupuestosList';
|
protected $indexRoute = 'buscadorPresupuestosList';
|
||||||
|
|
||||||
protected $deletePermission = 'presupuesto.delete';
|
|
||||||
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,184 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Controllers\Presupuestos;
|
|
||||||
|
|
||||||
use App\Controllers\BaseController;
|
|
||||||
use App\Services\PresupuestoUploaderService;
|
|
||||||
use App\Libraries\SftpClientWrapper;
|
|
||||||
use App\Models\Presupuestos\PresupuestoFicheroModel;
|
|
||||||
use Config\PresupuestoSFTP;
|
|
||||||
|
|
||||||
class PresupuestoFicheroController extends BaseController
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
public function get_files()
|
|
||||||
{
|
|
||||||
// Aceptar solo POST (puedes cambiar a GET si lo necesitas)
|
|
||||||
if ($this->request->getMethod(true) !== 'POST') {
|
|
||||||
return $this->response->setStatusCode(405)->setJSON(['message' => 'Método no permitido']);
|
|
||||||
}
|
|
||||||
|
|
||||||
$presupuesto_id = $this->request->getPost('presupuesto_id') ?? 0;
|
|
||||||
|
|
||||||
$model = model('App\Models\Presupuestos\PresupuestoFicheroModel');
|
|
||||||
$files = $model->getFiles($presupuesto_id);
|
|
||||||
|
|
||||||
$result = [];
|
|
||||||
|
|
||||||
foreach ($files as $file) {
|
|
||||||
$relativePath = $file->file_path;
|
|
||||||
$fullPath = WRITEPATH . ltrim($relativePath, '/');
|
|
||||||
|
|
||||||
$relativePath = $file->file_path;
|
|
||||||
$basename = basename($relativePath); // solo el nombre del archivo
|
|
||||||
|
|
||||||
$result[] = (object) [
|
|
||||||
'name' => $file->nombre,
|
|
||||||
'size' => file_exists(WRITEPATH . $relativePath) ? filesize(WRITEPATH . $relativePath) : 0,
|
|
||||||
'hash' => $basename
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->response->setJSON($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function upload_files()
|
|
||||||
{
|
|
||||||
$request = service('request');
|
|
||||||
$model = model('App\Models\Presupuestos\PresupuestoFicheroModel');
|
|
||||||
$files = $request->getFiles()['file'] ?? [];
|
|
||||||
$presupuesto_id = $request->getPost('presupuesto_id');
|
|
||||||
$old_files = json_decode($request->getPost('oldFiles') ?? '[]');
|
|
||||||
|
|
||||||
if (!is_array($files)) {
|
|
||||||
$files = [$files];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Servicio de subida (con SFTP)
|
|
||||||
$service = new \App\Services\PresupuestoUploaderService(
|
|
||||||
new \App\Libraries\SftpClientWrapper(config('PresupuestoSFTP')),
|
|
||||||
$model,
|
|
||||||
config('PresupuestoSFTP')
|
|
||||||
);
|
|
||||||
|
|
||||||
// Borrar ficheros eliminados por el usuario (BD y remoto)
|
|
||||||
$service->removeFromRemote($presupuesto_id);
|
|
||||||
$numDeleted = $model->deleteMissingFiles($presupuesto_id, $old_files);
|
|
||||||
|
|
||||||
$results = [];
|
|
||||||
foreach ($files as $file) {
|
|
||||||
if (!$file->isValid()) {
|
|
||||||
$results[] = [
|
|
||||||
'name' => $file->getName(),
|
|
||||||
'status' => 'invalid',
|
|
||||||
'message' => $file->getErrorString()
|
|
||||||
];
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$newName = $model->saveFileInBBDD(
|
|
||||||
$presupuesto_id,
|
|
||||||
$file->getClientName(),
|
|
||||||
$file->getClientExtension(),
|
|
||||||
auth()->id()
|
|
||||||
);
|
|
||||||
|
|
||||||
// Crear directorio si no existe
|
|
||||||
$uploadDir = dirname($model->getAbsolutePath($presupuesto_id, $newName));
|
|
||||||
if (!is_dir($uploadDir)) {
|
|
||||||
mkdir($uploadDir, 0755, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
$file->move($uploadDir, $newName);
|
|
||||||
|
|
||||||
$results[] = [
|
|
||||||
'name' => $file->getClientName(),
|
|
||||||
'status' => 'uploaded'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Subida al SFTP
|
|
||||||
$sftpResult = $service->uploadToRemote($presupuesto_id);
|
|
||||||
|
|
||||||
// ✅ Contar totales para mostrar en el frontend
|
|
||||||
$numUploaded = count(array_filter($results, fn($f) => $f['status'] === 'uploaded'));
|
|
||||||
$numErrores = count(array_filter($results, fn($f) => $f['status'] !== 'uploaded'));
|
|
||||||
|
|
||||||
if (!$sftpResult['success']) {
|
|
||||||
return $this->response->setJSON([
|
|
||||||
'message' => 'Error en la subida de algunos archivos.',
|
|
||||||
'summary' => [
|
|
||||||
'subidos_ok' => $numUploaded,
|
|
||||||
'errores_locales' => $numErrores,
|
|
||||||
'errores_remotos' => count(array_filter($sftpResult['files'], fn($f) => !$f['success'])),
|
|
||||||
'borrados' => $numDeleted,
|
|
||||||
],
|
|
||||||
'details' => [
|
|
||||||
'local' => $results,
|
|
||||||
'sftp' => $sftpResult['files']
|
|
||||||
]
|
|
||||||
])->setStatusCode(500);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->response->setJSON([
|
|
||||||
'message' => 'Archivos subidos correctamente.',
|
|
||||||
'summary' => [
|
|
||||||
'subidos_ok' => $numUploaded,
|
|
||||||
'errores_locales' => $numErrores,
|
|
||||||
'errores_remotos' => 0,
|
|
||||||
'borrados' => $numDeleted
|
|
||||||
],
|
|
||||||
'details' => [
|
|
||||||
'local' => $results,
|
|
||||||
'sftp' => $sftpResult['files']
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function download_zip()
|
|
||||||
{
|
|
||||||
$presupuesto_id = $this->request->getPost('presupuesto_id');
|
|
||||||
$ot_id = $this->request->getPost('ot_id');
|
|
||||||
|
|
||||||
if (!$presupuesto_id) {
|
|
||||||
return $this->response->setStatusCode(400)->setBody('Presupuesto ID requerido');
|
|
||||||
}
|
|
||||||
|
|
||||||
$prefijo = (!empty($ot_id) && is_numeric($ot_id)) ? "OT_{$ot_id}" : null;
|
|
||||||
|
|
||||||
$service = new \App\Services\PresupuestoUploaderService(
|
|
||||||
new \App\Libraries\SftpClientWrapper(config('PresupuestoSFTP')),
|
|
||||||
model('App\Models\Presupuestos\PresupuestoFicheroModel'),
|
|
||||||
config('PresupuestoSFTP')
|
|
||||||
);
|
|
||||||
|
|
||||||
$result = $service->downloadZip((int) $presupuesto_id, $prefijo);
|
|
||||||
|
|
||||||
if (!$result['success'] || empty($result['zipPath'])) {
|
|
||||||
return $this->response
|
|
||||||
->setStatusCode(500)
|
|
||||||
->setJSON(['error' => $result['message']]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$zipPath = $result['zipPath'];
|
|
||||||
|
|
||||||
// Definir nombre final del ZIP para el cliente
|
|
||||||
$nombreArchivo = $prefijo
|
|
||||||
? "{$prefijo}_PRESUPUESTO_{$presupuesto_id}.zip"
|
|
||||||
: "archivos_presupuesto_{$presupuesto_id}.zip";
|
|
||||||
|
|
||||||
// Eliminar archivo ZIP tras terminar la descarga (una vez enviada la respuesta)
|
|
||||||
register_shutdown_function(function () use ($zipPath) {
|
|
||||||
if (file_exists($zipPath)) {
|
|
||||||
unlink($zipPath);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Descargar el archivo al cliente
|
|
||||||
return $this->response
|
|
||||||
->download($zipPath, null)
|
|
||||||
->setFileName($nombreArchivo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -460,8 +460,6 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
$this->viewData['tipo_impresion_id'] = $presupuestoEntity->tipo_impresion_id; // Cosido tapa blanda JJO
|
$this->viewData['tipo_impresion_id'] = $presupuestoEntity->tipo_impresion_id; // Cosido tapa blanda JJO
|
||||||
|
|
||||||
$this->viewData['cabezadas'] = model('\App\Models\Configuracion\ConfigVariableModel')->getCabezadasDisponibles();
|
|
||||||
|
|
||||||
$this->viewData = array_merge($this->viewData, $this->getStringsFromTipoImpresion($presupuestoEntity->tipo_impresion_id));
|
$this->viewData = array_merge($this->viewData, $this->getStringsFromTipoImpresion($presupuestoEntity->tipo_impresion_id));
|
||||||
|
|
||||||
$this->viewData['formAction'] = route_to('updatePresupuestoAdmin', $id);
|
$this->viewData['formAction'] = route_to('updatePresupuestoAdmin', $id);
|
||||||
@ -589,7 +587,6 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
|
|||||||
$data['datosGenerales']['coleccion'] = $presupuesto->coleccion;
|
$data['datosGenerales']['coleccion'] = $presupuesto->coleccion;
|
||||||
$data['datosGenerales']['numero_edicion'] = $presupuesto->numero_edicion;
|
$data['datosGenerales']['numero_edicion'] = $presupuesto->numero_edicion;
|
||||||
$data['datosGenerales']['isbn'] = $presupuesto->isbn;
|
$data['datosGenerales']['isbn'] = $presupuesto->isbn;
|
||||||
$data['datosGenerales']['iskn'] = $presupuesto->iskn;
|
|
||||||
$data['datosGenerales']['pais'] = $presupuesto->pais_id;
|
$data['datosGenerales']['pais'] = $presupuesto->pais_id;
|
||||||
$data['datosGenerales']['pais_nombre'] = model('App\Models\Configuracion\PaisModel')->find($presupuesto->pais_id)->nombre;
|
$data['datosGenerales']['pais_nombre'] = model('App\Models\Configuracion\PaisModel')->find($presupuesto->pais_id)->nombre;
|
||||||
$data['datosGenerales']['cliente']['id'] = $presupuesto->cliente_id;
|
$data['datosGenerales']['cliente']['id'] = $presupuesto->cliente_id;
|
||||||
|
|||||||
@ -133,7 +133,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$this->viewData['lomo_maximo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_fresado_cosido')->value;
|
$this->viewData['lomo_maximo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_fresado_cosido')->value;
|
||||||
$this->viewData['lomo_minimo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value;
|
$this->viewData['lomo_minimo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value;
|
||||||
$this->viewData['eb'] = 0;
|
$this->viewData['eb'] = 0;
|
||||||
$this->viewData['cabezadas'] = model('\App\Models\Configuracion\ConfigVariableModel')->getCabezadasDisponibles();
|
|
||||||
|
|
||||||
$this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . $this->viewData['pageTitle'] . ' ' . lang('Basic.global.addNewSuffix');
|
$this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . $this->viewData['pageTitle'] . ' ' . lang('Basic.global.addNewSuffix');
|
||||||
|
|
||||||
@ -179,7 +178,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$this->viewData['lomo_maximo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_fresado_cosido')->value;
|
$this->viewData['lomo_maximo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_fresado_cosido')->value;
|
||||||
$this->viewData['lomo_minimo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value;
|
$this->viewData['lomo_minimo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value;
|
||||||
$this->viewData['eb'] = $presupuestoEntity->envio_base;
|
$this->viewData['eb'] = $presupuestoEntity->envio_base;
|
||||||
$this->viewData['cabezadas'] = model('\App\Models\Configuracion\ConfigVariableModel')->getCabezadasDisponibles();
|
|
||||||
|
|
||||||
// Si se ha llamado a esta funcion porque se ha duplicado el presupuesto
|
// Si se ha llamado a esta funcion porque se ha duplicado el presupuesto
|
||||||
// se actualiza la bbdd para que sólo ejecute algunas funciones una vez
|
// se actualiza la bbdd para que sólo ejecute algunas funciones una vez
|
||||||
@ -475,6 +473,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
'errors' => $errors
|
'errors' => $errors
|
||||||
);
|
);
|
||||||
return $this->respond($data);
|
return $this->respond($data);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return $this->failUnauthorized('Invalid request', 403);
|
return $this->failUnauthorized('Invalid request', 403);
|
||||||
}
|
}
|
||||||
@ -616,7 +615,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
return $this->failServerError(
|
return $this->failServerError(
|
||||||
$return_data['exception'] . ' - ' .
|
$return_data['exception'] . ' - ' .
|
||||||
$return_data['file'] . ' - ' . $return_data['line']
|
$return_data['file'] . ' - ' . $return_data['line']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -734,6 +733,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
} else {
|
} else {
|
||||||
return $return_data;
|
return $return_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
if ($this->request) {
|
if ($this->request) {
|
||||||
if ($this->request->isAJAX())
|
if ($this->request->isAJAX())
|
||||||
@ -742,6 +742,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
return "Error: " . $e->getMessage();
|
return "Error: " . $e->getMessage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -848,9 +849,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$maxSolapa = (865 - floor($anchoTotal)) / 2;
|
$maxSolapa = (865 - floor($anchoTotal)) / 2;
|
||||||
$maxSolapa = min($maxSolapa, 0.95 * $datosPedido->ancho);
|
$maxSolapa = min($maxSolapa, 0.95 * $datosPedido->ancho);
|
||||||
return $this->respond($maxSolapa);
|
return $this->respond($maxSolapa);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return $this->failUnauthorized('Invalid request', 403);
|
return $this->failUnauthorized('Invalid request', 403);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -871,6 +874,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
'menu' => $data,
|
'menu' => $data,
|
||||||
$csrfTokenName => $newTokenHash
|
$csrfTokenName => $newTokenHash
|
||||||
]);
|
]);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return $this->failUnauthorized('Invalid request', 403);
|
return $this->failUnauthorized('Invalid request', 403);
|
||||||
}
|
}
|
||||||
@ -1105,7 +1109,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
'solapasCubierta' => intval($cubierta['solapas'] ?? 0) == 1 ? intval($cubierta['tamanioSolapas']) : 0,
|
'solapasCubierta' => intval($cubierta['solapas'] ?? 0) == 1 ? intval($cubierta['tamanioSolapas']) : 0,
|
||||||
'acabado' => $cubierta['acabado'] ?? 0,
|
'acabado' => $cubierta['acabado'] ?? 0,
|
||||||
'lomoRedondo' => $cubierta['lomoRedondo'] ?? 0,
|
'lomoRedondo' => $cubierta['lomoRedondo'] ?? 0,
|
||||||
'cabezada' => $cubierta['cabezada'] ?? model('\App\Models\Configuracion\ConfigVariableModel')->getCabezadaDefault(),
|
'cabezada' => $cubierta['cabezada'] ?? 'WHI',
|
||||||
];
|
];
|
||||||
|
|
||||||
// Sobrecubierta
|
// Sobrecubierta
|
||||||
@ -1297,6 +1301,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$coste_envio += ($coste_direccion->coste / $tirada[$i]);
|
$coste_envio += ($coste_direccion->coste / $tirada[$i]);
|
||||||
$resultado_presupuesto['info']['totales'][$i]['coste_envio'] += $coste_direccion->coste - $coste_direccion->margen;
|
$resultado_presupuesto['info']['totales'][$i]['coste_envio'] += $coste_direccion->coste - $coste_direccion->margen;
|
||||||
$resultado_presupuesto['info']['totales'][$i]['margen_envio'] += $coste_direccion->margen;
|
$resultado_presupuesto['info']['totales'][$i]['margen_envio'] += $coste_direccion->margen;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$resultado_presupuesto['coste_envio'][$i] = round($coste_envio, 2);
|
$resultado_presupuesto['coste_envio'][$i] = round($coste_envio, 2);
|
||||||
@ -1331,6 +1336,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
} else {
|
} else {
|
||||||
$resumen_totales = $resultado_presupuesto['info']['totales'][$i];
|
$resumen_totales = $resultado_presupuesto['info']['totales'][$i];
|
||||||
$resumen_totales['precio_unidad'] = round($resultado_presupuesto['precio_u'][$i], 4);
|
$resumen_totales['precio_unidad'] = round($resultado_presupuesto['precio_u'][$i], 4);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1569,6 +1575,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
if (count($direccionesFP1) > 0) {
|
if (count($direccionesFP1) > 0) {
|
||||||
$this->guardarLineaEnvio($id, $direccionesFP1, $peso_libro, true, true, 1);
|
$this->guardarLineaEnvio($id, $direccionesFP1, $peso_libro, true, true, 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (count($direccionesFP2) > 0) {
|
if (count($direccionesFP2) > 0) {
|
||||||
$this->guardarLineaEnvio($id, $direccionesFP2, $peso_libro, true, true, 2);
|
$this->guardarLineaEnvio($id, $direccionesFP2, $peso_libro, true, true, 2);
|
||||||
@ -1725,7 +1732,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$data['resumen']['base'] = $presupuesto->total_antes_descuento;
|
$data['resumen']['base'] = $presupuesto->total_antes_descuento;
|
||||||
$data['resumen']['total_envio'] = round(
|
$data['resumen']['total_envio'] = round(
|
||||||
floatval($presupuesto->total_coste_envios) +
|
floatval($presupuesto->total_coste_envios) +
|
||||||
floatval($presupuesto->total_margen_envios),
|
floatval($presupuesto->total_margen_envios),
|
||||||
2
|
2
|
||||||
);
|
);
|
||||||
$data['resumen']['precio_unidad'] = $presupuesto->total_precio_unidad;
|
$data['resumen']['precio_unidad'] = $presupuesto->total_precio_unidad;
|
||||||
@ -1749,7 +1756,96 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function get_files()
|
||||||
|
{
|
||||||
|
|
||||||
|
// Check if the request is a POST request
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||||
|
|
||||||
|
$presupuesto_id = $this->request->getPost()['presupuesto_id'] ?? 0;
|
||||||
|
|
||||||
|
$model = model('App\Models\Presupuestos\PresupuestoFicheroModel');
|
||||||
|
$files = $model->getFiles($presupuesto_id);
|
||||||
|
|
||||||
|
$result = [];
|
||||||
|
|
||||||
|
foreach ($files as $file) {
|
||||||
|
|
||||||
|
$size = filesize($file->file_path);
|
||||||
|
$splitPath = explode("presupuestos/", $file->file_path);
|
||||||
|
|
||||||
|
// se crea un objeto con el nombre del fichero y el tamaño
|
||||||
|
$obj = (object) array(
|
||||||
|
'name' => $file->nombre,
|
||||||
|
'size' => $size,
|
||||||
|
'hash' => $splitPath[1] ?? $file->file_path
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// se añade el objeto al array
|
||||||
|
array_push($result, $obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
return json_encode($result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function upload_files()
|
||||||
|
{
|
||||||
|
|
||||||
|
$model = model('App\Models\Presupuestos\PresupuestoFicheroModel');
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||||
|
|
||||||
|
$presupuesto_id = $_POST['presupuesto_id'];
|
||||||
|
$old_files = json_decode($_POST['oldFiles']);
|
||||||
|
$ftp = new SafekatFtpClient();
|
||||||
|
|
||||||
|
// Comprobar si se han subido archivos
|
||||||
|
if (!empty($_FILES['file']) || !empty($old_files)) {
|
||||||
|
|
||||||
|
|
||||||
|
// Borrar los archivos existentes del presupuesto
|
||||||
|
$ftp->removeFiles($presupuesto_id);
|
||||||
|
$model->deleteFiles($presupuesto_id, $old_files);
|
||||||
|
|
||||||
|
if (!empty($_FILES['file'])) {
|
||||||
|
$files = $_FILES['file'];
|
||||||
|
|
||||||
|
// Iterar sobre los archivos
|
||||||
|
for ($i = 0; $i < count($files['name']); $i++) {
|
||||||
|
// Aquí puedes acceder a las propiedades del archivo
|
||||||
|
$name = $files['name'][$i];
|
||||||
|
$extension = explode('.', $files['name'][$i])[1];
|
||||||
|
$tmp_name = $files['tmp_name'][$i];
|
||||||
|
|
||||||
|
$new_name = $model->saveFileInBBDD($presupuesto_id, $name, $extension, auth()->id());
|
||||||
|
|
||||||
|
// Se sube el fichero
|
||||||
|
// Pero primero se comprueba que la carpeta presupuestos exista
|
||||||
|
if (!is_dir(WRITEPATH . 'uploads/presupuestos')) {
|
||||||
|
mkdir(WRITEPATH . 'uploads/presupuestos', 0777, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_null($new_name)) {
|
||||||
|
$path = WRITEPATH . 'uploads/presupuestos/' . $new_name;
|
||||||
|
move_uploaded_file($tmp_name, $path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$ftp->uploadFilePresupuesto($presupuesto_id);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Borrar los archivos existentes del presupuesto
|
||||||
|
$ftp->removeFiles($presupuesto_id);
|
||||||
|
$model->deleteFiles($presupuesto_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return json_encode(['message' => 'Archivos subidos correctamente']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***********************
|
/***********************
|
||||||
*
|
*
|
||||||
@ -1840,7 +1936,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
{
|
{
|
||||||
|
|
||||||
if ($tipo == 'encuadernacion') {
|
if ($tipo == 'encuadernacion') {
|
||||||
|
|
||||||
$model = new PresupuestoEncuadernacionesModel();
|
$model = new PresupuestoEncuadernacionesModel();
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
@ -2108,15 +2203,16 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$lomo += floatval($linea['mano']);
|
$lomo += floatval($linea['mano']);
|
||||||
$info['lomo_interior'] += floatval($linea['mano']);
|
$info['lomo_interior'] += floatval($linea['mano']);
|
||||||
}
|
}
|
||||||
|
if ($extra_info) {
|
||||||
$this->calcular_coste_linea(
|
$this->calcular_coste_linea(
|
||||||
$linea,
|
$linea,
|
||||||
$totalPapel,
|
$totalPapel,
|
||||||
$margenPapel,
|
$margenPapel,
|
||||||
$sumForFactor,
|
$sumForFactor,
|
||||||
$totalImpresion,
|
$totalImpresion,
|
||||||
$margenImpresion
|
$margenImpresion
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2155,12 +2251,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$costeInterior = 0.0;
|
$costeInterior = 0.0;
|
||||||
$peso_interior = 0.0;
|
$peso_interior = 0.0;
|
||||||
$lomo = 0;
|
$lomo = 0;
|
||||||
$totalPapel = 0.0;
|
if ($extra_info) {
|
||||||
$margenPapel = 0.0;
|
$totalPapel = 0.0;
|
||||||
$sumForFactor = 0.0;
|
$margenPapel = 0.0;
|
||||||
$totalImpresion = 0.0;
|
$sumForFactor = 0.0;
|
||||||
$margenImpresion = 0.0;
|
$totalImpresion = 0.0;
|
||||||
|
$margenImpresion = 0.0;
|
||||||
|
}
|
||||||
foreach ($interior as $linea) {
|
foreach ($interior as $linea) {
|
||||||
if (count($linea) > 0) {
|
if (count($linea) > 0) {
|
||||||
$costeInterior += round(floatval($linea['total_impresion']), 2);
|
$costeInterior += round(floatval($linea['total_impresion']), 2);
|
||||||
@ -2169,15 +2266,17 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$lomo += floatval($linea['mano']);
|
$lomo += floatval($linea['mano']);
|
||||||
}
|
}
|
||||||
$peso_interior += floatval($linea['peso']);
|
$peso_interior += floatval($linea['peso']);
|
||||||
|
if ($extra_info) {
|
||||||
|
|
||||||
$this->calcular_coste_linea(
|
$this->calcular_coste_linea(
|
||||||
$linea,
|
$linea,
|
||||||
$totalPapel,
|
$totalPapel,
|
||||||
$margenPapel,
|
$margenPapel,
|
||||||
$sumForFactor,
|
$sumForFactor,
|
||||||
$totalImpresion,
|
$totalImpresion,
|
||||||
$margenImpresion
|
$margenImpresion
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2222,14 +2321,17 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$lomo += floatval($cubierta['mano']);
|
$lomo += floatval($cubierta['mano']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->calcular_coste_linea(
|
if ($extra_info) {
|
||||||
$cubierta,
|
|
||||||
$totalPapel,
|
$this->calcular_coste_linea(
|
||||||
$margenPapel,
|
$cubierta,
|
||||||
$sumForFactor,
|
$totalPapel,
|
||||||
$totalImpresion,
|
$margenPapel,
|
||||||
$margenImpresion
|
$sumForFactor,
|
||||||
);
|
$totalImpresion,
|
||||||
|
$margenImpresion
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($coste_cubierta <= 0) {
|
if ($coste_cubierta <= 0) {
|
||||||
|
|
||||||
@ -2248,7 +2350,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
return $return_data;
|
return $return_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
$cantidad_total = intval($datosPedido->tirada); // + intval($datosPedido->merma);
|
$cantidad_total = intval($datosPedido->tirada);// + intval($datosPedido->merma);
|
||||||
|
|
||||||
// Acabado Cubierta
|
// Acabado Cubierta
|
||||||
if (intval($datos_entrada['cubierta']['acabado']) != 0) {
|
if (intval($datos_entrada['cubierta']['acabado']) != 0) {
|
||||||
@ -2280,14 +2382,16 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
return $return_data;
|
return $return_data;
|
||||||
}
|
}
|
||||||
$coste_servicios += round(floatval($acabadoCubierta[0]->total), 2);
|
$coste_servicios += round(floatval($acabadoCubierta[0]->total), 2);
|
||||||
|
if ($extra_info) {
|
||||||
//$totalServicios += round(floatval($acabadoCubierta[0]->total), 2);
|
//$totalServicios += round(floatval($acabadoCubierta[0]->total), 2);
|
||||||
$base = round(floatval($acabadoCubierta[0]->total / (1 + $acabadoCubierta[0]->margen / 100.0)), 2);
|
$base = round(floatval($acabadoCubierta[0]->total / (1 + $acabadoCubierta[0]->margen / 100.0)), 2);
|
||||||
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
||||||
$totalServicios += $base;
|
$totalServicios += $base;
|
||||||
$margenServicios += round(floatval($acabadoCubierta[0]->total - $base), 2);
|
$margenServicios += round(floatval($acabadoCubierta[0]->total - $base), 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($lomoRedondo) {
|
if ($lomoRedondo) {
|
||||||
@ -2318,12 +2422,14 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
return $return_data;
|
return $return_data;
|
||||||
}
|
}
|
||||||
$coste_servicios += round(floatval($resultado[0]->total), 2);
|
$coste_servicios += round(floatval($resultado[0]->total), 2);
|
||||||
|
if ($extra_info) {
|
||||||
|
//$totalServicios += round(floatval($resultado[0]->total), 2);
|
||||||
|
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
||||||
|
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
||||||
|
$totalServicios += $base;
|
||||||
|
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
||||||
|
}
|
||||||
|
|
||||||
//$totalServicios += round(floatval($resultado[0]->total), 2);
|
|
||||||
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
|
||||||
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
|
||||||
$totalServicios += $base;
|
|
||||||
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2352,15 +2458,17 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
if (count($linea_sobrecubierta) > 0) {
|
if (count($linea_sobrecubierta) > 0) {
|
||||||
$coste_sobrecubierta += round(floatval($linea_sobrecubierta['total_impresion']), 2);
|
$coste_sobrecubierta += round(floatval($linea_sobrecubierta['total_impresion']), 2);
|
||||||
$peso_sobrecubierta += round(floatval($linea_sobrecubierta['peso']), 2);
|
$peso_sobrecubierta += round(floatval($linea_sobrecubierta['peso']), 2);
|
||||||
|
if ($extra_info) {
|
||||||
|
|
||||||
$this->calcular_coste_linea(
|
$this->calcular_coste_linea(
|
||||||
$linea_sobrecubierta,
|
$linea_sobrecubierta,
|
||||||
$totalPapel,
|
$totalPapel,
|
||||||
$margenPapel,
|
$margenPapel,
|
||||||
$sumForFactor,
|
$sumForFactor,
|
||||||
$totalImpresion,
|
$totalImpresion,
|
||||||
$margenImpresion
|
$margenImpresion
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($coste_sobrecubierta <= 0) {
|
if ($coste_sobrecubierta <= 0) {
|
||||||
|
|
||||||
@ -2411,12 +2519,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
}
|
}
|
||||||
|
|
||||||
$coste_servicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
|
$coste_servicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
|
||||||
|
if ($extra_info) {
|
||||||
//$totalServicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
|
//$totalServicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
|
||||||
$base = round(floatval($acabadoSobrecubierta[0]->total / (1 + $acabadoSobrecubierta[0]->margen / 100.0)), 2);
|
$base = round(floatval($acabadoSobrecubierta[0]->total / (1 + $acabadoSobrecubierta[0]->margen / 100.0)), 2);
|
||||||
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
||||||
$totalServicios += $base;
|
$totalServicios += $base;
|
||||||
$margenServicios += round(floatval($acabadoSobrecubierta[0]->total - $base), 2);
|
$margenServicios += round(floatval($acabadoSobrecubierta[0]->total - $base), 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2458,15 +2567,17 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
if (intval($tirada[$t]) == intval($selected_tirada)) {
|
if (intval($tirada[$t]) == intval($selected_tirada)) {
|
||||||
$lomo += floatval($guardas['mano']);
|
$lomo += floatval($guardas['mano']);
|
||||||
}
|
}
|
||||||
|
if ($extra_info) {
|
||||||
|
|
||||||
$this->calcular_coste_linea(
|
$this->calcular_coste_linea(
|
||||||
$guardas,
|
$guardas,
|
||||||
$totalPapel,
|
$totalPapel,
|
||||||
$margenPapel,
|
$margenPapel,
|
||||||
$sumForFactor,
|
$sumForFactor,
|
||||||
$totalImpresion,
|
$totalImpresion,
|
||||||
$margenImpresion
|
$margenImpresion
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($coste_guardas <= 0) {
|
if ($coste_guardas <= 0) {
|
||||||
$errorModel = new ErrorPresupuesto();
|
$errorModel = new ErrorPresupuesto();
|
||||||
@ -2510,15 +2621,17 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$linea_faja['tipo_linea'] = 'lp_faja';
|
$linea_faja['tipo_linea'] = 'lp_faja';
|
||||||
$coste_faja += round(floatval($linea_faja['total_impresion']), 2);
|
$coste_faja += round(floatval($linea_faja['total_impresion']), 2);
|
||||||
$peso_faja += floatval($linea_faja['peso']);
|
$peso_faja += floatval($linea_faja['peso']);
|
||||||
|
if ($extra_info) {
|
||||||
|
|
||||||
$this->calcular_coste_linea(
|
$this->calcular_coste_linea(
|
||||||
$linea_faja,
|
$linea_faja,
|
||||||
$totalPapel,
|
$totalPapel,
|
||||||
$margenPapel,
|
$margenPapel,
|
||||||
$sumForFactor,
|
$sumForFactor,
|
||||||
$totalImpresion,
|
$totalImpresion,
|
||||||
$margenImpresion
|
$margenImpresion
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($coste_faja <= 0) {
|
if ($coste_faja <= 0) {
|
||||||
|
|
||||||
@ -2568,12 +2681,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
}
|
}
|
||||||
|
|
||||||
$coste_servicios += round(floatval($acabadoFaja[0]->total), 2);
|
$coste_servicios += round(floatval($acabadoFaja[0]->total), 2);
|
||||||
|
if ($extra_info) {
|
||||||
//$totalServicios += round(floatval($acabadoFaja[0]->total), 2);
|
//$totalServicios += round(floatval($acabadoFaja[0]->total), 2);
|
||||||
$base = round(floatval($acabadoFaja[0]->total / (1 + $acabadoFaja[0]->margen / 100.0)), 2);
|
$base = round(floatval($acabadoFaja[0]->total / (1 + $acabadoFaja[0]->margen / 100.0)), 2);
|
||||||
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
||||||
$totalServicios += $base;
|
$totalServicios += $base;
|
||||||
$margenServicios += round(floatval($acabadoFaja[0]->total - $base), 2);
|
$margenServicios += round(floatval($acabadoFaja[0]->total - $base), 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2622,12 +2736,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
|
|
||||||
$costeServiciosDefecto += round(floatval($servicio->total), 2);
|
$costeServiciosDefecto += round(floatval($servicio->total), 2);
|
||||||
|
if ($extra_info) {
|
||||||
//$totalServicios += round(floatval($servicio->total), 2);
|
//$totalServicios += round(floatval($servicio->total), 2);
|
||||||
$base = round(floatval($servicio->total / (1 + $servicio->margen / 100.0)), 2);
|
$base = round(floatval($servicio->total / (1 + $servicio->margen / 100.0)), 2);
|
||||||
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
||||||
$totalServicios += $base;
|
$totalServicios += $base;
|
||||||
$margenServicios += round(floatval($servicio->total - $base), 2);
|
$margenServicios += round(floatval($servicio->total - $base), 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$servDefectoMan = PresupuestoCLienteService::getServiciosManipuladoDefault([
|
$servDefectoMan = PresupuestoCLienteService::getServiciosManipuladoDefault([
|
||||||
@ -2659,12 +2774,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
|
|
||||||
$costeServiciosDefecto += round(floatval($servicio->total), 2);
|
$costeServiciosDefecto += round(floatval($servicio->total), 2);
|
||||||
|
if ($extra_info) {
|
||||||
//$totalServicios += round(floatval($servicio->total), 2);
|
//$totalServicios += round(floatval($servicio->total), 2);
|
||||||
$base = round(floatval($servicio->total / (1 + $servicio->margen / 100.0)), 2);
|
$base = round(floatval($servicio->total / (1 + $servicio->margen / 100.0)), 2);
|
||||||
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
||||||
$totalServicios += $base;
|
$totalServicios += $base;
|
||||||
$margenServicios += round(floatval($servicio->total - $base), 2);
|
$margenServicios += round(floatval($servicio->total - $base), 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($extra_info) {
|
if ($extra_info) {
|
||||||
@ -2764,12 +2880,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
}
|
}
|
||||||
|
|
||||||
$coste_servicios += round(floatval($resultado[0]->total), 2);
|
$coste_servicios += round(floatval($resultado[0]->total), 2);
|
||||||
|
if ($extra_info) {
|
||||||
//$totalServicios += round(floatval($resultado[0]->total), 2);
|
//$totalServicios += round(floatval($resultado[0]->total), 2);
|
||||||
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
||||||
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
||||||
$totalServicios += $base;
|
$totalServicios += $base;
|
||||||
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
||||||
|
}
|
||||||
} else if ($servicio->nombre == "ferro" || $servicio->nombre == "prototipo") {
|
} else if ($servicio->nombre == "ferro" || $servicio->nombre == "prototipo") {
|
||||||
// Extra
|
// Extra
|
||||||
$resultado = PresupuestoCLienteService::getServiciosExtra([
|
$resultado = PresupuestoCLienteService::getServiciosExtra([
|
||||||
@ -2796,12 +2913,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
array_push($serviciosAutomaticos, $resultado[0]);
|
array_push($serviciosAutomaticos, $resultado[0]);
|
||||||
|
|
||||||
$coste_servicios += round(floatval($resultado[0]->precio), 2);
|
$coste_servicios += round(floatval($resultado[0]->precio), 2);
|
||||||
|
if ($extra_info) {
|
||||||
//$totalServicios += round(floatval($resultado[0]->precio), 2);
|
//$totalServicios += round(floatval($resultado[0]->precio), 2);
|
||||||
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
||||||
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
||||||
$totalServicios += $base;
|
$totalServicios += $base;
|
||||||
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
||||||
|
}
|
||||||
} else if ($servicio->nombre == 'solapas_cubierta' || $servicio->nombre == 'solapas_sobrecubierta' || $servicio->nombre == 'solapas_faja') {
|
} else if ($servicio->nombre == 'solapas_cubierta' || $servicio->nombre == 'solapas_sobrecubierta' || $servicio->nombre == 'solapas_faja') {
|
||||||
// Servicios manipulado
|
// Servicios manipulado
|
||||||
$resultado = PresupuestoCLienteService::getServiciosManipulado([
|
$resultado = PresupuestoCLienteService::getServiciosManipulado([
|
||||||
@ -2830,12 +2948,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
}
|
}
|
||||||
|
|
||||||
$coste_servicios += round(floatval($resultado[0]->total), 2);
|
$coste_servicios += round(floatval($resultado[0]->total), 2);
|
||||||
|
if ($extra_info) {
|
||||||
//$totalServicios += round(floatval($resultado[0]->total), 2);
|
//$totalServicios += round(floatval($resultado[0]->total), 2);
|
||||||
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
||||||
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
||||||
$totalServicios += $base;
|
$totalServicios += $base;
|
||||||
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2871,13 +2990,15 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
array_push($serviciosExtra, $resultado[0]);
|
array_push($serviciosExtra, $resultado[0]);
|
||||||
|
|
||||||
$coste_servicios += round(floatval($resultado[0]->precio), 2);
|
$coste_servicios += round(floatval($resultado[0]->precio), 2);
|
||||||
|
if ($extra_info) {
|
||||||
//$totalServicios += round(floatval($resultado[0]->precio), 2);
|
//$totalServicios += round(floatval($resultado[0]->precio), 2);
|
||||||
$base = round(floatval($resultado[0]->precio / (1 + $resultado[0]->margen / 100.0)), 2);
|
$base = round(floatval($resultado[0]->precio / (1 + $resultado[0]->margen / 100.0)), 2);
|
||||||
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
||||||
$totalServicios += $base;
|
$totalServicios += $base;
|
||||||
$margenServicios += round(floatval($resultado[0]->precio - $base), 2);
|
$margenServicios += round(floatval($resultado[0]->precio - $base), 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Plegado de solapas grandes
|
// Plegado de solapas grandes
|
||||||
@ -2909,12 +3030,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
}
|
}
|
||||||
|
|
||||||
$coste_servicios += round(floatval($resultado[0]->total), 2);
|
$coste_servicios += round(floatval($resultado[0]->total), 2);
|
||||||
|
if ($extra_info) {
|
||||||
//$totalServicios += round(floatval($resultado[0]->total), 2);
|
//$totalServicios += round(floatval($resultado[0]->total), 2);
|
||||||
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
||||||
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
||||||
$totalServicios += $base;
|
$totalServicios += $base;
|
||||||
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_array($sobreCubierta) && ($sobreCubierta['solapas'] > 0 && intval($linea_sobrecubierta['dimension_desarrollo']['ancho']) > 630)) {
|
if (is_array($sobreCubierta) && ($sobreCubierta['solapas'] > 0 && intval($linea_sobrecubierta['dimension_desarrollo']['ancho']) > 630)) {
|
||||||
@ -2946,12 +3068,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
}
|
}
|
||||||
|
|
||||||
$coste_servicios += round(floatval($resultado[0]->total), 2);
|
$coste_servicios += round(floatval($resultado[0]->total), 2);
|
||||||
|
if ($extra_info) {
|
||||||
//$totalServicios += round(floatval($resultado[0]->total), 2);
|
//$totalServicios += round(floatval($resultado[0]->total), 2);
|
||||||
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
||||||
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
||||||
$totalServicios += $base;
|
$totalServicios += $base;
|
||||||
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_array($faja) && $faja !== [] && ($faja['solapas'] > 0 && intval($linea_faja['dimension_desarrollo']['ancho']) > 630)) {
|
if (is_array($faja) && $faja !== [] && ($faja['solapas'] > 0 && intval($linea_faja['dimension_desarrollo']['ancho']) > 630)) {
|
||||||
@ -2983,12 +3106,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
}
|
}
|
||||||
|
|
||||||
$coste_servicios += round(floatval($resultado[0]->total), 2);
|
$coste_servicios += round(floatval($resultado[0]->total), 2);
|
||||||
|
if ($extra_info) {
|
||||||
//$totalServicios += round(floatval($resultado[0]->total), 2);
|
//$totalServicios += round(floatval($resultado[0]->total), 2);
|
||||||
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
|
||||||
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
|
||||||
$totalServicios += $base;
|
$totalServicios += $base;
|
||||||
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*$total_por_tirada = $costeInterior +
|
/*$total_por_tirada = $costeInterior +
|
||||||
@ -3117,6 +3241,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$margenImpresion += round($linea['margen_impresion_horas'], 2);
|
$margenImpresion += round($linea['margen_impresion_horas'], 2);
|
||||||
$margenImpresion += round($linea['margen_click_pedido'], 2);
|
$margenImpresion += round($linea['margen_click_pedido'], 2);
|
||||||
$margenImpresion = round($margenImpresion, 2);
|
$margenImpresion = round($margenImpresion, 2);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function calcular_lomo($lineas, $lomo_inicial)
|
protected function calcular_lomo($lineas, $lomo_inicial)
|
||||||
@ -3236,7 +3361,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$color = 'negro';
|
$color = 'negro';
|
||||||
|
|
||||||
$model = model('App\Models\Presupuestos\PresupuestoLineaModel');
|
$model = model('App\Models\Presupuestos\PresupuestoLineaModel');
|
||||||
$data = $model->where('presupuesto_id', $presupuestoId)->findAll();;
|
$data = $model->where('presupuesto_id', $presupuestoId)->findAll();
|
||||||
|
;
|
||||||
foreach ($data as $linea) {
|
foreach ($data as $linea) {
|
||||||
|
|
||||||
if (strpos($linea->tipo, "hq") !== false) { // $linea->tipo contains the substring "hq"
|
if (strpos($linea->tipo, "hq") !== false) { // $linea->tipo contains the substring "hq"
|
||||||
@ -3556,5 +3682,40 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
return $servicios;
|
return $servicios;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function download_zip()
|
||||||
|
{
|
||||||
|
$presupuesto_id = $this->request->getPost('presupuesto_id');
|
||||||
|
$ot_id = $this->request->getPost('ot_id');
|
||||||
|
|
||||||
|
if (!$presupuesto_id) {
|
||||||
|
return $this->response->setStatusCode(400)->setBody('Presupuesto ID requerido');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Definir prefijo si se recibió un ot_id válido
|
||||||
|
$prefijo = (!empty($ot_id) && is_numeric($ot_id)) ? "OT_{$ot_id}" : null;
|
||||||
|
|
||||||
|
$ftpClient = new \App\Libraries\SafekatFtpClient();
|
||||||
|
try {
|
||||||
|
$zipPath = $ftpClient->downloadZipPresupuesto((int) $presupuesto_id, $prefijo);
|
||||||
|
|
||||||
|
if ($zipPath === null || !file_exists($zipPath)) {
|
||||||
|
return $this->response->setStatusCode(404)->setBody('No se encontraron archivos');
|
||||||
|
}
|
||||||
|
|
||||||
|
$nombreArchivo = $prefijo
|
||||||
|
? "{$prefijo}_PRESUPUESTO_{$presupuesto_id}.zip"
|
||||||
|
: "archivos_presupuesto_{$presupuesto_id}.zip";
|
||||||
|
|
||||||
|
return $this->response
|
||||||
|
->download($zipPath, null)
|
||||||
|
->setFileName($nombreArchivo);
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
log_message('error', $e->getMessage());
|
||||||
|
return $this->response->setStatusCode(500)->setBody('Error interno');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,6 @@
|
|||||||
namespace App\Controllers\Sistema;
|
namespace App\Controllers\Sistema;
|
||||||
|
|
||||||
use CodeIgniter\Controller;
|
use CodeIgniter\Controller;
|
||||||
use App\Models\Presupuestos\PresupuestoFicheroModel;
|
|
||||||
|
|
||||||
class Intranet extends Controller
|
class Intranet extends Controller
|
||||||
{
|
{
|
||||||
@ -12,24 +11,25 @@ class Intranet extends Controller
|
|||||||
{
|
{
|
||||||
helper('file');
|
helper('file');
|
||||||
|
|
||||||
$model = new PresupuestoFicheroModel();
|
$resource_path = WRITEPATH . 'uploads/presupuestos/' . $resource_name;
|
||||||
$file = $model->where('file_path LIKE', "%{$resource_name}")->first();
|
|
||||||
|
|
||||||
if (!$file) {
|
|
||||||
return service('response')->setStatusCode(404)->setBody("Archivo no encontrado");
|
|
||||||
}
|
|
||||||
|
|
||||||
$resource_path = WRITEPATH . $file->file_path;
|
|
||||||
|
|
||||||
if (file_exists($resource_path)) {
|
if (file_exists($resource_path)) {
|
||||||
|
// Get the mime type of the file
|
||||||
$mime_type = mime_content_type($resource_path);
|
$mime_type = mime_content_type($resource_path);
|
||||||
|
|
||||||
|
// Get an instance of the Response class
|
||||||
$response = service('response');
|
$response = service('response');
|
||||||
|
|
||||||
|
// Set the content type
|
||||||
$response->setContentType($mime_type);
|
$response->setContentType($mime_type);
|
||||||
|
|
||||||
|
// Set the output
|
||||||
$response->setBody(file_get_contents($resource_path));
|
$response->setBody(file_get_contents($resource_path));
|
||||||
|
|
||||||
|
// Send the response to the browser
|
||||||
$response->send();
|
$response->send();
|
||||||
} else {
|
|
||||||
return service('response')->setStatusCode(404)->setBody("Archivo no encontrado");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function tickets($resource_name)
|
function tickets($resource_name)
|
||||||
@ -54,6 +54,7 @@ class Intranet extends Controller
|
|||||||
// Send the response to the browser
|
// Send the response to the browser
|
||||||
$response->send();
|
$response->send();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
function orden_trabajo($ot_id, $resource_name)
|
function orden_trabajo($ot_id, $resource_name)
|
||||||
{
|
{
|
||||||
@ -75,6 +76,7 @@ class Intranet extends Controller
|
|||||||
// Send the response to the browser
|
// Send the response to the browser
|
||||||
$response->send();
|
$response->send();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function catalogo($catalogo_id, $resource_name)
|
function catalogo($catalogo_id, $resource_name)
|
||||||
@ -97,5 +99,7 @@ class Intranet extends Controller
|
|||||||
// Send the response to the browser
|
// Send the response to the browser
|
||||||
$response->send();
|
$response->send();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
@ -25,8 +25,6 @@ class ServiciosAcabado extends BaseResourceController
|
|||||||
|
|
||||||
protected $indexRoute = 'serviciosAcabadoList';
|
protected $indexRoute = 'serviciosAcabadoList';
|
||||||
|
|
||||||
protected $deletePermission = 'tarifa-acabado.delete';
|
|
||||||
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -28,8 +28,6 @@ class TarifaAcabados extends BaseResourceController
|
|||||||
|
|
||||||
protected $indexRoute = 'tarifaAcabadoList';
|
protected $indexRoute = 'tarifaAcabadoList';
|
||||||
|
|
||||||
protected $deletePermission = 'tarifa-acabado.delete';
|
|
||||||
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -19,8 +19,6 @@ class Tarifaextra extends \App\Controllers\GoBaseController
|
|||||||
|
|
||||||
protected $indexRoute = 'tarifaextraList';
|
protected $indexRoute = 'tarifaextraList';
|
||||||
|
|
||||||
protected $deletePermission = 'tarifa-extra.delete';
|
|
||||||
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -19,8 +19,6 @@ class Tarifapreimpresion extends \App\Controllers\GoBaseController
|
|||||||
|
|
||||||
protected $indexRoute = 'tarifapreimpresionList';
|
protected $indexRoute = 'tarifapreimpresionList';
|
||||||
|
|
||||||
protected $deletePermission = 'tarifa-preimpresion.delete';
|
|
||||||
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -32,8 +32,6 @@ class Tarifasencuadernacion extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
protected $indexRoute = 'tarifaEncuadernacionList';
|
protected $indexRoute = 'tarifaEncuadernacionList';
|
||||||
|
|
||||||
protected $deletePermission = 'tarifa-encuadernacion.delete';
|
|
||||||
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -28,8 +28,6 @@ class Tarifasmanipulado extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
protected $indexRoute = 'tarifaManipuladoList';
|
protected $indexRoute = 'tarifaManipuladoList';
|
||||||
|
|
||||||
protected $deletePermission = 'tarifa-manipulado.delete';
|
|
||||||
|
|
||||||
|
|
||||||
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -15,24 +15,25 @@ use App\Models\Catalogo\CatalogoLibroModel;
|
|||||||
use App\Services\PresupuestoService;
|
use App\Services\PresupuestoService;
|
||||||
use CodeIgniter\Shield\Entities\User;
|
use CodeIgniter\Shield\Entities\User;
|
||||||
|
|
||||||
use App\Libraries\SftpClientWrapper;
|
|
||||||
use Config\PresupuestoSFTP;
|
|
||||||
|
|
||||||
|
|
||||||
class Test extends BaseController
|
class Test extends BaseController
|
||||||
{
|
{
|
||||||
function __construct() {}
|
function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public function echo()
|
public function echo()
|
||||||
{
|
{
|
||||||
|
|
||||||
echo "echo";
|
echo "echo";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -74,8 +75,10 @@ class Test extends BaseController
|
|||||||
|
|
||||||
// Insert it
|
// Insert it
|
||||||
$tel_model->insert($tarifasLinea);
|
$tel_model->insert($tarifasLinea);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -221,6 +224,7 @@ class Test extends BaseController
|
|||||||
} else {
|
} else {
|
||||||
$values = [];
|
$values = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,27 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Database\Migrations;
|
|
||||||
|
|
||||||
use CodeIgniter\Database\Migration;
|
|
||||||
|
|
||||||
class AddIsknToPresupuestos extends Migration
|
|
||||||
{
|
|
||||||
public function up()
|
|
||||||
{
|
|
||||||
$this->forge->addColumn('presupuestos', [
|
|
||||||
'iskn' => [
|
|
||||||
'type' => 'VARCHAR',
|
|
||||||
'constraint' => 64,
|
|
||||||
'null' => true,
|
|
||||||
'default' => null,
|
|
||||||
'after' => 'coleccion', // o cualquier campo existente tras el cual quieras insertarlo
|
|
||||||
'collation' => 'utf8_unicode_ci',
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function down()
|
|
||||||
{
|
|
||||||
$this->forge->dropColumn('presupuestos', 'iskn');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -47,7 +47,6 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity
|
|||||||
"titulo" => "",
|
"titulo" => "",
|
||||||
"autor" => null,
|
"autor" => null,
|
||||||
"coleccion" => null,
|
"coleccion" => null,
|
||||||
"iskn" => null,
|
|
||||||
"numero_edicion" => null,
|
"numero_edicion" => null,
|
||||||
"isbn" => null,
|
"isbn" => null,
|
||||||
"referencia_cliente" => null,
|
"referencia_cliente" => null,
|
||||||
|
|||||||
@ -123,7 +123,7 @@ if (!function_exists('checkPermission')) {
|
|||||||
$response = \Config\Services::response();
|
$response = \Config\Services::response();
|
||||||
|
|
||||||
if (!auth()->user()->can($sectionPermission)) {
|
if (!auth()->user()->can($sectionPermission)) {
|
||||||
$session->setFlashdata('errorMessage', lang('Basic.global.permissionDenied'));
|
$session->setFlashdata('errorMessage', "No tiene permisos de acceso");
|
||||||
|
|
||||||
$route = $redirectRoute ?? 'home';
|
$route = $redirectRoute ?? 'home';
|
||||||
return $response->redirect(route_to($route));
|
return $response->redirect(route_to($route));
|
||||||
|
|||||||
@ -90,7 +90,6 @@ return [
|
|||||||
'wait' => 'Wait',
|
'wait' => 'Wait',
|
||||||
'yes' => 'Yes',
|
'yes' => 'Yes',
|
||||||
'back' => 'Back',
|
'back' => 'Back',
|
||||||
'permissionDenied' => 'You do not have permission for this action'
|
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -35,7 +35,6 @@ return [
|
|||||||
'coleccion' => 'Collection',
|
'coleccion' => 'Collection',
|
||||||
'numeroEdicion' => 'Edition number',
|
'numeroEdicion' => 'Edition number',
|
||||||
'isbn' => 'ISBN',
|
'isbn' => 'ISBN',
|
||||||
'iskn' => 'Identificador ISKN',
|
|
||||||
'referenciaCliente' => 'Customer reference',
|
'referenciaCliente' => 'Customer reference',
|
||||||
'formatoLibro' => "Book format",
|
'formatoLibro' => "Book format",
|
||||||
'papelFormatoId' => "Size",
|
'papelFormatoId' => "Size",
|
||||||
|
|||||||
@ -34,7 +34,7 @@ return [
|
|||||||
"global_prev" => "Anterior",
|
"global_prev" => "Anterior",
|
||||||
"global_next" => "Siguiente",
|
"global_next" => "Siguiente",
|
||||||
"global_save_file" => "Guardar ficheros",
|
"global_save_file" => "Guardar ficheros",
|
||||||
"global_select_files" => "Seleccionar ficheros",
|
"global_upload_files" => "Subir ficheros",
|
||||||
"global_download_files" => "Descargar ficheros",
|
"global_download_files" => "Descargar ficheros",
|
||||||
"global_all" => "Todos",
|
"global_all" => "Todos",
|
||||||
// LOGIN - Index
|
// LOGIN - Index
|
||||||
|
|||||||
@ -94,7 +94,6 @@ return [
|
|||||||
'yes' => 'Si',
|
'yes' => 'Si',
|
||||||
'no' => 'No',
|
'no' => 'No',
|
||||||
'back' => 'Volver',
|
'back' => 'Volver',
|
||||||
'permissionDenied' => 'No tiene permisos de acceso'
|
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,7 @@ return [
|
|||||||
'especiales' => 'Especiales',
|
'especiales' => 'Especiales',
|
||||||
'reciclados' => 'Reciclados',
|
'reciclados' => 'Reciclados',
|
||||||
'cartulinas' => 'Cartulinas',
|
'cartulinas' => 'Cartulinas',
|
||||||
'verjurados' => 'Verjurados',
|
'verdujados' => 'Verdujados',
|
||||||
|
|
||||||
'validation' => [
|
'validation' => [
|
||||||
'code' => [
|
'code' => [
|
||||||
|
|||||||
@ -15,23 +15,52 @@ class SafekatFtpClient
|
|||||||
protected string $username;
|
protected string $username;
|
||||||
protected string $password;
|
protected string $password;
|
||||||
protected string $base_dir;
|
protected string $base_dir;
|
||||||
|
protected bool $xml_enabled;
|
||||||
protected object $pedido_xml_config;
|
protected object $pedido_xml_config;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->pedido_xml_config = config("PresupuestoSFTP");
|
$this->pedido_xml_config = config("PedidoXML");
|
||||||
$this->host = $this->pedido_xml_config->host;
|
$this->host = $this->pedido_xml_config->host;
|
||||||
$this->username = $this->pedido_xml_config->username;
|
$this->username = $this->pedido_xml_config->username;
|
||||||
$this->password = $this->pedido_xml_config->password;
|
$this->password = $this->pedido_xml_config->password;
|
||||||
$this->port = $this->pedido_xml_config->port;
|
$this->port = $this->pedido_xml_config->port;
|
||||||
$this->base_dir = $this->pedido_xml_config->base_dir;
|
$this->base_dir = $this->pedido_xml_config->base_dir;
|
||||||
|
$this->xml_enabled = $this->pedido_xml_config->xml_enabled;
|
||||||
$this->ftp = new SFTP($this->host);
|
$this->ftp = new SFTP($this->host);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Upload the content of $filename to the base directory declared in App\Config\FTP.php
|
||||||
|
*
|
||||||
|
* @param string $content
|
||||||
|
* @param string $filename
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function uploadXML(string $content, string $filename): bool
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
if ($this->xml_enabled == false)
|
||||||
|
return false;
|
||||||
|
$remotePath = implode("/", [$this->base_dir, 'pedidos', 'xml_nuevos']);
|
||||||
|
$this->ftp->login(username: $this->username, password: $this->password);
|
||||||
|
if (!$this->ftp->is_dir($remotePath)) {
|
||||||
|
$this->ftp->mkdir($remotePath, recursive: true);
|
||||||
|
}
|
||||||
|
$this->ftp->put($remotePath . '/' . $filename, $content);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} catch (\Throwable $th) {
|
||||||
|
throw $th;
|
||||||
|
log_message('error', $th->getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
public function uploadFilePresupuesto(int $presupuesto_id)
|
public function uploadFilePresupuesto(int $presupuesto_id)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
if ($this->xml_enabled == false)
|
||||||
|
return false;
|
||||||
$model = model(PresupuestoFicheroModel::class);
|
$model = model(PresupuestoFicheroModel::class);
|
||||||
$modelPedidoLinea = model(PedidoLineaModel::class);
|
$modelPedidoLinea = model(PedidoLineaModel::class);
|
||||||
$pedidoLinea = $modelPedidoLinea->findByPresupuesto($presupuesto_id);
|
$pedidoLinea = $modelPedidoLinea->findByPresupuesto($presupuesto_id);
|
||||||
@ -57,6 +86,7 @@ class SafekatFtpClient
|
|||||||
public function removeFiles(int $presupuesto_id)
|
public function removeFiles(int $presupuesto_id)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
// if ($this->xml_enabled == false) return false;
|
||||||
$model = model(PresupuestoFicheroModel::class);
|
$model = model(PresupuestoFicheroModel::class);
|
||||||
$modelPedidoLinea = model(PedidoLineaModel::class);
|
$modelPedidoLinea = model(PedidoLineaModel::class);
|
||||||
$pedidoLinea = $modelPedidoLinea->findByPresupuesto($presupuesto_id);
|
$pedidoLinea = $modelPedidoLinea->findByPresupuesto($presupuesto_id);
|
||||||
|
|||||||
@ -1,47 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Libraries;
|
|
||||||
|
|
||||||
use phpseclib3\Net\SFTP;
|
|
||||||
use Config\PresupuestoSFTP;
|
|
||||||
|
|
||||||
class SftpClientWrapper
|
|
||||||
{
|
|
||||||
protected SFTP $client;
|
|
||||||
|
|
||||||
public function __construct(PresupuestoSFTP $config)
|
|
||||||
{
|
|
||||||
$this->client = new SFTP($config->host, $config->port);
|
|
||||||
$this->client->login($config->username, $config->password);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function upload(string $local, string $remote): bool
|
|
||||||
{
|
|
||||||
return $this->client->put($remote, $local, SFTP::SOURCE_LOCAL_FILE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function delete(string $remote): bool
|
|
||||||
{
|
|
||||||
return $this->client->delete($remote);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function exists(string $remote): bool
|
|
||||||
{
|
|
||||||
return $this->client->file_exists($remote);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function mkdir(string $remote): bool
|
|
||||||
{
|
|
||||||
return $this->client->mkdir($remote, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function chmod(string $path, int $permissions): bool
|
|
||||||
{
|
|
||||||
return $this->client->chmod($permissions, $path);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get(string $remotePath, string $localPath): bool
|
|
||||||
{
|
|
||||||
return $this->client->get($remotePath, $localPath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -56,40 +56,4 @@ class ConfigVariableModel extends Model
|
|||||||
|
|
||||||
return $builder->get()->getFirstRow();
|
return $builder->get()->getFirstRow();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Devuelve solo el valor de la variable por nombre
|
|
||||||
*/
|
|
||||||
public function getValue(string $name): ?string
|
|
||||||
{
|
|
||||||
$row = $this->getVariable($name);
|
|
||||||
return $row ? $row->value : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Devuelve el valor decodificado (JSON) si aplica
|
|
||||||
*/
|
|
||||||
public function getDecodedValue(string $name): ?array
|
|
||||||
{
|
|
||||||
$value = $this->getValue($name);
|
|
||||||
$decoded = json_decode($value, true);
|
|
||||||
|
|
||||||
return (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) ? $decoded : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Devuelve las opciones disponibles de cabezadas (como array clave => langKey)
|
|
||||||
*/
|
|
||||||
public function getCabezadasDisponibles(): array
|
|
||||||
{
|
|
||||||
return $this->getDecodedValue('cabezadas_disponibles') ?? [];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Devuelve la cabezada por defecto, o 'WHI' si no está definida
|
|
||||||
*/
|
|
||||||
public function getCabezadaDefault(): string
|
|
||||||
{
|
|
||||||
return $this->getValue('cabezada_default') ?? 'WHI';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,5 +18,57 @@ class TipoPapelGenericoModel extends \App\Models\BaseModel
|
|||||||
];
|
];
|
||||||
protected $returnType = "App\Entities\Configuracion\TipoPapelGenerico";
|
protected $returnType = "App\Entities\Configuracion\TipoPapelGenerico";
|
||||||
|
|
||||||
|
public function getTiposPapel($data)
|
||||||
|
{
|
||||||
|
$builder = $this->db
|
||||||
|
->table($this->table . " t1")
|
||||||
|
->select(
|
||||||
|
"t1.id as id, t1.clave AS nombre",
|
||||||
|
// for debug, t2.nombre AS nombre_papel_impresion, t4.nombre AS maquina_nombre, t5.uso AS tarifa_uso, t5.tipo AS tarifa_tipo"
|
||||||
|
)
|
||||||
|
->join("lg_papel_generico t2", "t2.tipo_papel_generico_id = t1.id", "inner")
|
||||||
|
->join("lg_papel_impresion t3", "t3.papel_generico_id = t2.id", "inner")
|
||||||
|
->join("lg_maquina_papel_impresion t4", "t4.papel_impresion_id = t3.id", "inner")
|
||||||
|
->join("lg_maquinas t5", "t4.maquina_id = t5.id", "inner")
|
||||||
|
->join("lg_maquinas_tarifas_impresion t6", "t6.maquina_id = t5.id", "inner")
|
||||||
|
|
||||||
|
->where("t2.is_deleted", 0)
|
||||||
|
->where("t2.show_in_client", 1)
|
||||||
|
->where("t3.is_deleted", 0)
|
||||||
|
->where("t3.isActivo", 1)
|
||||||
|
->where("t3.use_in_client", 1)
|
||||||
|
->where("t4.active", 1)
|
||||||
|
->where("t5.is_deleted", 0)
|
||||||
|
->where("t5.min <= ", $data['tirada'] ?? 0)
|
||||||
|
->where("t5.max >= ", $data['tirada'] ?? 0)
|
||||||
|
->where("t5.tipo", "impresion")
|
||||||
|
->where("t6.is_deleted", 0)
|
||||||
|
->where("t6.tipo", $data['tipo'] ?? null)
|
||||||
|
->distinct('t1.id');
|
||||||
|
|
||||||
|
// Validación adicional para asegurar que t1.id esté presente en las combinaciones con t3.active = 1
|
||||||
|
$builder->whereIn("t2.id", function ($subQuery) {
|
||||||
|
$subQuery->select("t1_inner.id")
|
||||||
|
->from("lg_papel_generico t1_inner")
|
||||||
|
->join("lg_papel_impresion t2_inner", "t2_inner.papel_generico_id = t1_inner.id", "inner")
|
||||||
|
->join("lg_maquina_papel_impresion t3_inner", "t3_inner.papel_impresion_id = t2_inner.id", "inner")
|
||||||
|
->where("t3_inner.active", 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
$builder->groupStart()
|
||||||
|
->groupStart()
|
||||||
|
->where("t5.ancho_impresion >", $data['ancho'] ?? 0)
|
||||||
|
->where("t5.alto_impresion >", $data['alto'] ?? 0)
|
||||||
|
->groupEnd()
|
||||||
|
->orGroupStart()
|
||||||
|
->where("t5.ancho_impresion >", $data['alto'] ?? 0)
|
||||||
|
->where("t5.alto_impresion >", $data['ancho'] ?? 0)
|
||||||
|
->groupEnd()
|
||||||
|
->orGroupStart()
|
||||||
|
->where("t5.ancho_impresion >", $data['alto'] ?? 0)
|
||||||
|
->where("t5.is_rotativa", 1)
|
||||||
|
->groupEnd()
|
||||||
|
->groupEnd();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
namespace App\Models\Presupuestos;
|
namespace App\Models\Presupuestos;
|
||||||
|
|
||||||
use Config\Paths;
|
|
||||||
|
|
||||||
class PresupuestoFicheroModel extends \App\Models\BaseModel
|
class PresupuestoFicheroModel extends \App\Models\BaseModel
|
||||||
{
|
{
|
||||||
protected $table = "presupuesto_ficheros";
|
protected $table = "presupuesto_ficheros";
|
||||||
@ -25,42 +23,16 @@ class PresupuestoFicheroModel extends \App\Models\BaseModel
|
|||||||
|
|
||||||
public static $labelField = "nombre";
|
public static $labelField = "nombre";
|
||||||
|
|
||||||
/**
|
|
||||||
* Devuelve la ruta relativa del archivo dentro de WRITEPATH.
|
|
||||||
*
|
|
||||||
* @param int $presupuesto_id
|
|
||||||
* @param string $filename
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getRelativePath(int $presupuesto_id, string $filename): string
|
|
||||||
{
|
|
||||||
return config(Paths::class)->presupuestosPath . '/' . $presupuesto_id . '/' . $filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Devuelve la ruta absoluta en el sistema de archivos del servidor.
|
|
||||||
*
|
|
||||||
* @param int $presupuesto_id
|
|
||||||
* @param string $filename
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getAbsolutePath(int $presupuesto_id, string $filename): string
|
|
||||||
{
|
|
||||||
return WRITEPATH . $this->getRelativePath($presupuesto_id, $filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function saveFileInBBDD($presupuesto_id, $filename, $extension, $user_id)
|
public function saveFileInBBDD($presupuesto_id, $filename, $extension, $user_id)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$new_filename = $this->generateFileHash($filename) . '.' . $extension;
|
$new_filename = $this->generateFileHash($filename) . '.' . $extension;
|
||||||
$relativePath = $this->getRelativePath($presupuesto_id, $new_filename);
|
|
||||||
|
|
||||||
$this->db->table($this->table . " t1")
|
$this->db->table($this->table . " t1")
|
||||||
->set('presupuesto_id', $presupuesto_id)
|
->set('presupuesto_id', $presupuesto_id)
|
||||||
->set('nombre', $filename)
|
->set('nombre', $filename)
|
||||||
->set('file_path', $relativePath)
|
->set('file_path', WRITEPATH . 'uploads/presupuestos/' . $new_filename)
|
||||||
->set('upload_by', $user_id)
|
->set('upload_by', $user_id)
|
||||||
->set('upload_at', date('Y-m-d H:i:s'))
|
->set('upload_at', date('Y-m-d H:i:s'))
|
||||||
->insert();
|
->insert();
|
||||||
@ -82,9 +54,8 @@ class PresupuestoFicheroModel extends \App\Models\BaseModel
|
|||||||
|
|
||||||
// se comprueba que el $file->nombre no sea igual a ninguno de los elementos del array $old_files
|
// se comprueba que el $file->nombre no sea igual a ninguno de los elementos del array $old_files
|
||||||
if (!in_array($file->nombre, $old_files)) {
|
if (!in_array($file->nombre, $old_files)) {
|
||||||
$fullPath = WRITEPATH . $file->file_path;
|
if (file_exists($file->file_path)) {
|
||||||
if (file_exists($fullPath)) {
|
unlink($file->file_path);
|
||||||
unlink($fullPath);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db
|
$this->db
|
||||||
@ -105,23 +76,20 @@ class PresupuestoFicheroModel extends \App\Models\BaseModel
|
|||||||
->table($this->table . " t1")
|
->table($this->table . " t1")
|
||||||
->where('presupuesto_id', $presupuesto_id_origen)->get()->getResult();
|
->where('presupuesto_id', $presupuesto_id_origen)->get()->getResult();
|
||||||
if ($files) {
|
if ($files) {
|
||||||
|
|
||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
|
|
||||||
$hash = $this->generateFileHash($file->nombre);
|
$hash = $this->generateFileHash($file->nombre);
|
||||||
|
|
||||||
// se copia el fichero a la nueva ubicación
|
// se copia el fichero a la nueva ubicación
|
||||||
$originalPath = WRITEPATH . $file->file_path;
|
if (!file_exists(WRITEPATH . $file->file_path)) {
|
||||||
$newPath = 'uploads/presupuestos/' . $hash;
|
copy($file->file_path, WRITEPATH . 'uploads/presupuestos/' . $hash);
|
||||||
|
|
||||||
if (file_exists($originalPath)) {
|
|
||||||
copy($originalPath, WRITEPATH . $newPath);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db->table($this->table . " t1")
|
$this->db->table($this->table . " t1")
|
||||||
->set('presupuesto_id', $presupuesto_id_destino)
|
->set('presupuesto_id', $presupuesto_id_destino)
|
||||||
->set('nombre', $file->nombre)
|
->set('nombre', $file->nombre)
|
||||||
->set('file_path', $newPath)
|
->set('file_path', WRITEPATH . 'uploads/presupuestos/' . $hash)
|
||||||
->set('upload_by', auth()->user()->id)
|
->set('upload_by', auth()->user()->id)
|
||||||
->set('upload_at', date('Y-m-d H:i:s'))
|
->set('upload_at', date('Y-m-d H:i:s'))
|
||||||
->insert();
|
->insert();
|
||||||
@ -137,30 +105,6 @@ class PresupuestoFicheroModel extends \App\Models\BaseModel
|
|||||||
->where('presupuesto_id', $presupuesto_id)->get()->getResult();
|
->where('presupuesto_id', $presupuesto_id)->get()->getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function deleteMissingFiles(int $presupuesto_id, array $keepNames = [])
|
|
||||||
{
|
|
||||||
$files = $this->getFiles($presupuesto_id);
|
|
||||||
$deletedCount = 0;
|
|
||||||
|
|
||||||
foreach ($files as $file) {
|
|
||||||
if (!in_array($file->nombre, $keepNames)) {
|
|
||||||
$fullPath = WRITEPATH . $file->file_path;
|
|
||||||
if (file_exists($fullPath)) {
|
|
||||||
unlink($fullPath);
|
|
||||||
}
|
|
||||||
$this->db->table($this->table)
|
|
||||||
->where('presupuesto_id', $presupuesto_id)
|
|
||||||
->where('nombre', $file->nombre)
|
|
||||||
->delete();
|
|
||||||
|
|
||||||
$deletedCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $deletedCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Función para convertir el nombre y extensión de un fichero en un hash único
|
* Función para convertir el nombre y extensión de un fichero en un hash único
|
||||||
@ -173,4 +117,6 @@ class PresupuestoFicheroModel extends \App\Models\BaseModel
|
|||||||
{
|
{
|
||||||
return hash('sha256', $filename);
|
return hash('sha256', $filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -67,7 +67,6 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
"titulo",
|
"titulo",
|
||||||
"autor",
|
"autor",
|
||||||
"coleccion",
|
"coleccion",
|
||||||
"iskn",
|
|
||||||
"numero_edicion",
|
"numero_edicion",
|
||||||
"isbn",
|
"isbn",
|
||||||
"referencia_cliente",
|
"referencia_cliente",
|
||||||
@ -140,7 +139,7 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
'lomo_redondo',
|
'lomo_redondo',
|
||||||
'cabezada',
|
'cabezada',
|
||||||
'envio_base',
|
'envio_base',
|
||||||
'direcciones_fp_checks',
|
'direcciones_fp_checks',
|
||||||
];
|
];
|
||||||
protected $returnType = "App\Entities\Presupuestos\PresupuestoEntity";
|
protected $returnType = "App\Entities\Presupuestos\PresupuestoEntity";
|
||||||
|
|
||||||
@ -402,27 +401,15 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
function confirmarPresupuesto($presupuesto_id)
|
||||||
* Confirma un presupuesto (cambia su estado a 'confirmado') y,
|
|
||||||
* si no tiene asignado un ISKN, lo genera y lo asigna automáticamente.
|
|
||||||
*
|
|
||||||
* @param int $presupuesto_id ID del presupuesto a confirmar.
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function confirmarPresupuesto($presupuesto_id)
|
|
||||||
{
|
{
|
||||||
// Cambiar el estado del presupuesto a '2' (confirmado)
|
|
||||||
$this->db
|
$this->db
|
||||||
->table($this->table . " t1")
|
->table($this->table . " t1")
|
||||||
->where('t1.id', $presupuesto_id)
|
->where('t1.id', $presupuesto_id)
|
||||||
->set('t1.estado_id', 2)
|
->set('t1.estado_id', 2)
|
||||||
->update();
|
->update();
|
||||||
|
|
||||||
// Si existe y aún no tiene ISKN asignado, lo generamos y asignamos
|
|
||||||
$this->asignarIskn($presupuesto_id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function insertarPresupuestoCliente($id, $tirada, $data, $data_cabecera, $extra_info, $resumen_totales, $iva_reducido, $excluir_rotativa, $tiradas_alternativas)
|
function insertarPresupuestoCliente($id, $tirada, $data, $data_cabecera, $extra_info, $resumen_totales, $iva_reducido, $excluir_rotativa, $tiradas_alternativas)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -514,8 +501,8 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
|
|
||||||
'total_antes_descuento' => round(
|
'total_antes_descuento' => round(
|
||||||
$totalCostes + $totalMargenes +
|
$totalCostes + $totalMargenes +
|
||||||
$resumen_totales['coste_envio'] + $resumen_totales['margen_envio'] +
|
$resumen_totales['coste_envio'] + $resumen_totales['margen_envio'] +
|
||||||
$data['envio_base'],
|
$data['envio_base'],
|
||||||
2
|
2
|
||||||
),
|
),
|
||||||
'total_descuento' => 0,
|
'total_descuento' => 0,
|
||||||
@ -524,25 +511,25 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
'total_precio_unidad' => $resumen_totales['precio_unidad'],
|
'total_precio_unidad' => $resumen_totales['precio_unidad'],
|
||||||
'total_presupuesto' => round(
|
'total_presupuesto' => round(
|
||||||
$totalCostes + $totalMargenes +
|
$totalCostes + $totalMargenes +
|
||||||
$resumen_totales['coste_envio'] + $resumen_totales['margen_envio'] +
|
$resumen_totales['coste_envio'] + $resumen_totales['margen_envio'] +
|
||||||
$data['envio_base'],
|
$data['envio_base'],
|
||||||
2
|
2
|
||||||
),
|
),
|
||||||
'total_aceptado' => round(
|
'total_aceptado' => round(
|
||||||
$totalCostes + $totalMargenes +
|
$totalCostes + $totalMargenes +
|
||||||
$resumen_totales['coste_envio'] + $resumen_totales['margen_envio'] +
|
$resumen_totales['coste_envio'] + $resumen_totales['margen_envio'] +
|
||||||
$data['envio_base'],
|
$data['envio_base'],
|
||||||
2
|
2
|
||||||
),
|
),
|
||||||
|
|
||||||
'total_factor' => round(
|
'total_factor' => round(
|
||||||
($totalCostes + $totalMargenes) /
|
($totalCostes + $totalMargenes) /
|
||||||
$resumen_totales['sumForFactor'],
|
$resumen_totales['sumForFactor'],
|
||||||
2
|
2
|
||||||
),
|
),
|
||||||
'total_factor_ponderado' => round(
|
'total_factor_ponderado' => round(
|
||||||
($totalCostes + $totalMargenes) /
|
($totalCostes + $totalMargenes) /
|
||||||
$resumen_totales['sumForFactorPonderado'],
|
$resumen_totales['sumForFactorPonderado'],
|
||||||
2
|
2
|
||||||
),
|
),
|
||||||
|
|
||||||
@ -648,6 +635,7 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
'gramaje' => intval($data['faja']['gramaje']),
|
'gramaje' => intval($data['faja']['gramaje']),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
$json = json_encode($values);
|
$json = json_encode($values);
|
||||||
return $json;
|
return $json;
|
||||||
@ -927,19 +915,5 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function asignarIskn(int $presupuesto_id): bool
|
|
||||||
{
|
|
||||||
$presupuesto = $this->find($presupuesto_id);
|
|
||||||
|
|
||||||
// Si no existe o ya tiene ISKN, no lo modificamos
|
|
||||||
if (!$presupuesto || !empty($presupuesto->iskn)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->update($presupuesto_id, [
|
|
||||||
'iskn' => model('App\Models\Catalogo\IdentificadorIsknModel')->newIskn(),
|
|
||||||
'updated_at' => date('Y-m-d H:i:s'),
|
|
||||||
'user_update_id' => auth()->id(),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,14 +4,17 @@ namespace App\Services;
|
|||||||
|
|
||||||
use CodeIgniter\Config\BaseService;
|
use CodeIgniter\Config\BaseService;
|
||||||
use App\Models\Configuracion\TipoPapelGenericoModel;
|
use App\Models\Configuracion\TipoPapelGenericoModel;
|
||||||
|
use App\Models\Configuracion\PapelGenericoModel;
|
||||||
|
|
||||||
class PapelService extends BaseService
|
class PapelService extends BaseService
|
||||||
{
|
{
|
||||||
protected TipoPapelGenericoModel $tipoPapelGenericoModel;
|
protected TipoPapelGenericoModel $tipoPapelGenericoModel;
|
||||||
|
protected PapelGenericoModel $papelGenericoModel;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->tipoPapelGenericoModel = model(TipoPapelGenericoModel::class);
|
$this->tipoPapelGenericoModel = model(TipoPapelGenericoModel::class);
|
||||||
|
$this->papelGenericoModel = model(PapelGenericoModel::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTipoPapelGenerico()
|
public function getTipoPapelGenerico()
|
||||||
@ -24,4 +27,27 @@ class PapelService extends BaseService
|
|||||||
|
|
||||||
return $tipoPapelGenericoList;
|
return $tipoPapelGenericoList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtencion de los tipos de papel genérico dependiendo del uso
|
||||||
|
* @param object $data
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getTiposPalelGenerico($data){
|
||||||
|
|
||||||
|
if(!isset($data) || empty($data)){
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->papelGenericoModel->where('tipo_papel_generico_id !=', null)->findAll();
|
||||||
|
/*
|
||||||
|
$values = $this->papelGenericoModel->where('uso', $uso)->findAll();
|
||||||
|
$tipoPapelGenericoList = [];
|
||||||
|
foreach ($values as $value) {
|
||||||
|
$tipoPapelGenericoList[$value->id] = lang('PapelGenerico.' . $value->clave);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $tipoPapelGenericoList;
|
||||||
|
*/
|
||||||
|
}
|
||||||
}
|
}
|
||||||
222
ci4/app/Services/PedidoXMLService.php
Executable file
222
ci4/app/Services/PedidoXMLService.php
Executable file
@ -0,0 +1,222 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services;
|
||||||
|
|
||||||
|
use DOMDocument;
|
||||||
|
use App\Libraries\SafekatFtpClient;
|
||||||
|
use CodeIgniter\Config\BaseService;
|
||||||
|
use App\Models\Pedidos\PedidoModel;
|
||||||
|
use App\Models\Presupuestos\PresupuestoModel;
|
||||||
|
|
||||||
|
class PedidoXMLService extends BaseService
|
||||||
|
{
|
||||||
|
|
||||||
|
public static function get_pedido_presupuesto(int $pedido_id)
|
||||||
|
{
|
||||||
|
$data_xml = [];
|
||||||
|
$pedidoModel = model(PedidoModel::class);
|
||||||
|
$presupuestoModel = model(PresupuestoModel::class);
|
||||||
|
$data_xml['pedido_cliente_presupuesto'] = $pedidoModel->getPedidoClientePresupuesto($pedido_id);
|
||||||
|
$data_xml['pedido_presupuesto_direcciones'] = $pedidoModel->getPedidoPresupuestoDirecciones($pedido_id);
|
||||||
|
$data_xml['pedido_presupuesto_lineas'] = $pedidoModel->getPedidoPresupuestoLineas($pedido_id);
|
||||||
|
$servicios = $presupuestoModel->getServiciosPresupuesto($data_xml['pedido_cliente_presupuesto']->presupuestoId);
|
||||||
|
$data_xml['servicios'] = $servicios;
|
||||||
|
$data_xml['preimpresion'] = PedidoXMLService::parse_servicio_preimpresion($servicios['preimpresion']);
|
||||||
|
$data_xml["acabado"] = PedidoXMLService::parse_servicio_acabado($servicios['acabado']);
|
||||||
|
$data_xml["binding"] = PedidoXMLService::get_binding_code($data_xml['pedido_cliente_presupuesto']->codigoTipoImpresion,$data_xml['pedido_cliente_presupuesto']->solapas);
|
||||||
|
return $data_xml;
|
||||||
|
|
||||||
|
}
|
||||||
|
protected static function parse_servicio_acabado(array $data_xml_servicios_acabado)
|
||||||
|
{
|
||||||
|
$xml_element = [];
|
||||||
|
$service_xml_key_value = [
|
||||||
|
"ShrinkWrapping" => fn($nombre) => str_contains($nombre,"retractilado"),
|
||||||
|
"Finish" => fn($nombre) => str_contains($nombre,"brillo"),
|
||||||
|
"PlakeneT" =>fn($nombre) => str_contains($nombre,"plakene traslúcido"),];
|
||||||
|
foreach($data_xml_servicios_acabado as $servicio_acabado)
|
||||||
|
{
|
||||||
|
$service_name = strtolower($servicio_acabado->nombre);
|
||||||
|
foreach ($service_xml_key_value as $key => $value) {
|
||||||
|
$xml_element[$key] = $value($service_name) ? 1 : 0 ;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return $xml_element;
|
||||||
|
}
|
||||||
|
protected static function parse_servicio_preimpresion(array $data_xml_servicios_preimpresion)
|
||||||
|
{
|
||||||
|
$xml_element = [];
|
||||||
|
$service_xml_key_value = [
|
||||||
|
"Urgent" => fn($nombre) => str_contains($nombre,"Pedido urgente"),
|
||||||
|
"Prototype" => fn($nombre) => str_contains($nombre,"Prototipo"),
|
||||||
|
"Layout" =>fn($nombre) => str_contains($nombre,"Maquetación"),
|
||||||
|
"Correction" =>fn($nombre) => str_contains($nombre,"Corrección ortográfica"),
|
||||||
|
// "Review" =>fn($nombre) => str_contains($nombre,"Revisión Profesional de archivo"),
|
||||||
|
"Design" =>fn($nombre) => str_contains($nombre,'Diseño de Cubierta'),
|
||||||
|
];
|
||||||
|
foreach($data_xml_servicios_preimpresion as $servicio_pre)
|
||||||
|
{
|
||||||
|
$service_name = $servicio_pre->nombre;
|
||||||
|
foreach ($service_xml_key_value as $key => $value) {
|
||||||
|
$value_service = $value($service_name) ? 1 : 0 ;
|
||||||
|
if( $value_service){
|
||||||
|
$xml_element[$key] = $servicio_pre->precio ;
|
||||||
|
}else if(!isset($xml_element[$key])){
|
||||||
|
$xml_element[$key] = $value_service;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $xml_element;
|
||||||
|
}
|
||||||
|
public static function generate_xml($pedido_id)
|
||||||
|
{
|
||||||
|
$papel_formato_ancho = 0;
|
||||||
|
$papel_formato_alto = 0;
|
||||||
|
$data = PedidoXMLService::get_pedido_presupuesto($pedido_id);
|
||||||
|
$xml = new DOMDocument('1.0', 'utf-8');
|
||||||
|
$xml_order_el = $xml->createElement('Order');
|
||||||
|
$xml_header_el = $xml->createElement('Header');
|
||||||
|
$offset_pedido_id = env('XML_OFFSET_CUSTOMER_ID',1000000) + $data["pedido_cliente_presupuesto"]->pedidoId;
|
||||||
|
$xml_header_el->appendChild($xml->createElement('CustomerCode', $data["pedido_cliente_presupuesto"]->presupuestoClienteId));
|
||||||
|
$xml_header_el->appendChild($xml->createElement('CodeNode', env('NODE_CODE_XML','SFK')));
|
||||||
|
$xml_header_el->appendChild($xml->createElement('ExternId', $offset_pedido_id));
|
||||||
|
$xml_header_el->appendChild($xml->createElement('NumProducts', 1));
|
||||||
|
$xml_header_el->appendChild($xml->createElement('Date', now_db()));
|
||||||
|
$xml_order_el->appendChild($xml_header_el);
|
||||||
|
$xml_products_el = $xml->createElement('Products');
|
||||||
|
$xml_product_el = $xml->createElement('Product');
|
||||||
|
$xml_product_el->appendChild($xml->createElement('ItemId', $offset_pedido_id));
|
||||||
|
$xml_product_el->appendChild($xml->createElement('Quantity', $data["pedido_cliente_presupuesto"]->tirada));
|
||||||
|
$xml_product_el->appendChild($xml->createElement('Title', $data["pedido_cliente_presupuesto"]->titulo));
|
||||||
|
$xml_product_el->appendChild($xml->createElement('Pages', $data["pedido_cliente_presupuesto"]->paginas));
|
||||||
|
$xml_product_el->appendChild($xml->createElement('Reprint', $data["pedido_cliente_presupuesto"]->inc_rei ?? 0));
|
||||||
|
|
||||||
|
if ($data["pedido_cliente_presupuesto"]->papel_formato_personalizado) {
|
||||||
|
$papel_formato_ancho = $data["pedido_cliente_presupuesto"]->papelAnchoPersonalidado;
|
||||||
|
$papel_formato_alto = $data["pedido_cliente_presupuesto"]->papelAltoPersonalidado;
|
||||||
|
} else {
|
||||||
|
$papel_formato_ancho = $data["pedido_cliente_presupuesto"]->lgPapelFormatoAncho;
|
||||||
|
$papel_formato_alto = $data["pedido_cliente_presupuesto"]->lgPapelFormatoAlto;
|
||||||
|
}
|
||||||
|
$xml_product_el->appendChild($xml->createElement('Width', $papel_formato_ancho));
|
||||||
|
$xml_product_el->appendChild($xml->createElement('Height', $papel_formato_alto));
|
||||||
|
$presupuestoLineaTipoCubierta = null;
|
||||||
|
$xml_presupuesto_lineas_el = $xml->createElement('Lines');
|
||||||
|
## Iterate throught presupuesto_lineas
|
||||||
|
foreach ($data["pedido_presupuesto_lineas"] as $row) {
|
||||||
|
|
||||||
|
if (str_contains($row->tipo, "rot") || str_contains($row->tipo, "bn") || str_contains($row->tipo, "color")) {
|
||||||
|
$colorInterior = PedidoXMLService::get_color_interior($row);
|
||||||
|
$xmlInside = $xml->createElement('Inside');
|
||||||
|
$xmlInside->appendChild($xml->createElement('TypeOfPrint', $colorInterior));
|
||||||
|
$xmlInside->appendChild($xml->createElement('HQ', str_contains($row->tipo, 'hq') ? 1 : 0));
|
||||||
|
$xmlInside->appendChild($xml->createElement('Pages', $row->paginas));
|
||||||
|
$xmlInside->appendChild($xml->createElement('Paper', $row->papelCode));
|
||||||
|
$xmlInside->appendChild($xml->createElement('Weight', $row->gramaje));
|
||||||
|
$xml_presupuesto_lineas_el->appendChild($xmlInside);
|
||||||
|
} else if (str_contains($row->tipo, "lp_cubierta") ) {//|| str_contains($row->tipo, "sobrecubierta")
|
||||||
|
//? If both exists presupuestoLineaTipoCubierta is override by sobreCubierta making null and not adding
|
||||||
|
$papelCubiertaCode = $row->papelCode;
|
||||||
|
$papelCubiertaGramaje = $row->gramaje;
|
||||||
|
$presupuestoLineaTipoCubierta = $row->tipo == "lp_cubierta" ? $row : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$xml_product_el->appendChild($xml_presupuesto_lineas_el);
|
||||||
|
if ($presupuestoLineaTipoCubierta) {
|
||||||
|
$containsTarifaAcabadoBrillo = isset($data['acabado']['Finish']) ? true : false;
|
||||||
|
if ($containsTarifaAcabadoBrillo) {
|
||||||
|
$acabado = "brillo";
|
||||||
|
} else {
|
||||||
|
$acabado = "mate";
|
||||||
|
}
|
||||||
|
$xmlCover = $xml->createElement('Cover');
|
||||||
|
$xmlCover->appendChild($xml->createElement('Sides', $presupuestoLineaTipoCubierta->paginas / 2));
|
||||||
|
$xmlCover->appendChild($xml->createElement('Paper', $presupuestoLineaTipoCubierta->papelCode));
|
||||||
|
$xmlCover->appendChild($xml->createElement('Weight', $presupuestoLineaTipoCubierta->gramaje));
|
||||||
|
$xmlCover->appendChild($xml->createElement('Flaps', $data["pedido_cliente_presupuesto"]->solapas));
|
||||||
|
$xmlCover->appendChild($xml->createElement('WidthFlaps', $data["pedido_cliente_presupuesto"]->solapas_ancho));
|
||||||
|
$xmlCover->appendChild($xml->createElement('Finish', $acabado));
|
||||||
|
$xml_product_el->appendChild($xmlCover);
|
||||||
|
}
|
||||||
|
$xml_product_el->appendChild($xml->createElement('Binding', $data['binding']));
|
||||||
|
$xml_services_el = $xml->createElement('Services');
|
||||||
|
$xml_services_el->appendChild($xml->createElement('Bookmark', $data["pedido_cliente_presupuesto"]->marcapaginas));
|
||||||
|
foreach ($data['preimpresion'] as $key => $value) {
|
||||||
|
$xml_services_el->appendChild($xml->createElement($key, $value));
|
||||||
|
}
|
||||||
|
foreach ($data['acabado'] as $key => $value) {
|
||||||
|
$xml_services_el->appendChild($xml->createElement($key, $value));
|
||||||
|
}
|
||||||
|
|
||||||
|
$xml_product_el->appendChild($xml_services_el);
|
||||||
|
|
||||||
|
$xml_envios_el = $xml->createElement('Shipments');
|
||||||
|
foreach ($data["pedido_presupuesto_direcciones"] as $pedido_presupuesto_direccion) {
|
||||||
|
$xml_envio_el = $xml->createElement('Shipment');
|
||||||
|
$xml_envio_el->appendChild($xml->createElement('Qty', $pedido_presupuesto_direccion->cantidad));
|
||||||
|
$xml_envio_el->appendChild($xml->createElement('Price', $pedido_presupuesto_direccion->precio));
|
||||||
|
$xml_envio_el->appendChild($xml->createElement('Attention', $pedido_presupuesto_direccion->att));
|
||||||
|
$xml_envio_el->appendChild($xml->createElement('Email', $pedido_presupuesto_direccion->email));
|
||||||
|
$xml_envio_el->appendChild($xml->createElement('Address', $pedido_presupuesto_direccion->direccion));
|
||||||
|
$xml_envio_el->appendChild($xml->createElement('Province', $pedido_presupuesto_direccion->provincia));
|
||||||
|
$xml_envio_el->appendChild($xml->createElement('City', $pedido_presupuesto_direccion->municipio));
|
||||||
|
$xml_envio_el->appendChild($xml->createElement('Zip', $pedido_presupuesto_direccion->cp));
|
||||||
|
$xml_envio_el->appendChild($xml->createElement('CountryCode', $pedido_presupuesto_direccion->paisCode3));
|
||||||
|
$xml_envio_el->appendChild($xml->createElement('Telephone', $pedido_presupuesto_direccion->telefono));
|
||||||
|
$xml_envios_el->appendChild($xml_envio_el);
|
||||||
|
}
|
||||||
|
$xml_product_el->appendChild($xml_envios_el);
|
||||||
|
$xml_product_el->appendChild($xml->createElement('Comments', $data["pedido_cliente_presupuesto"]->comentarios_safekat));
|
||||||
|
$xml_product_el->appendChild($xml->createElement('CommentsClient', $data["pedido_cliente_presupuesto"]->comentarios_cliente));
|
||||||
|
$xml_products_el->appendChild($xml_product_el);
|
||||||
|
$xml_order_el->appendChild($xml_products_el);
|
||||||
|
$xml->appendChild($xml_order_el);
|
||||||
|
$file_has_suffix = hash('sha512',$offset_pedido_id);
|
||||||
|
$file_name = PedidoXMLService::generate_xml_file_name($file_has_suffix);
|
||||||
|
$ftp = new SafekatFtpClient();
|
||||||
|
$ftp->uploadXML($xml->saveXML(),$file_name);
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
protected static function generate_xml_file_name(string $hash) : string
|
||||||
|
{
|
||||||
|
return implode("",["SafekatNew_",$hash,".xml"]);
|
||||||
|
}
|
||||||
|
protected static function get_binding_code(string $tipo_impresion_nombre,bool $solapas) : ?string
|
||||||
|
{
|
||||||
|
$solapa = $solapas ? '1' : '0';
|
||||||
|
$key = implode("_",[$tipo_impresion_nombre,$solapa]);
|
||||||
|
$xml_mapping_binding =
|
||||||
|
[
|
||||||
|
"libroFresadoTapaBlanda_0" => 'RF',
|
||||||
|
"libroFresadoTapaBlanda_1" => 'RFS',
|
||||||
|
"libroCosidoTapaBlanda_0" => 'RCHV',
|
||||||
|
"libroCosidoTapaBlanda_1" => 'RCHVS',
|
||||||
|
"libroGrapado_0" => 'CC2',
|
||||||
|
"libroGrapado_1" => 'CC2S',
|
||||||
|
"libroCosidoTapaDura_0" => 'TDC',
|
||||||
|
"libroCosidoTapaDura_1" => 'TDC',
|
||||||
|
"libroFresadoTapaDura_0" => 'RDF',
|
||||||
|
"libroFresadoTapaDura_1" => 'RDF',
|
||||||
|
"libroEspiralTapaBlanda_0" => 'ESP',
|
||||||
|
"libroEspiralTapaBlanda_1" => 'ESP',
|
||||||
|
"libroWireoTapaBlanda_0" => 'WIO',
|
||||||
|
"libroWireoTapaBlanda_1" => 'WIO',
|
||||||
|
];
|
||||||
|
return $xml_mapping_binding[$key] ?? null;
|
||||||
|
}
|
||||||
|
protected static function get_color_interior($pre_linea): ?string
|
||||||
|
{
|
||||||
|
$color_interior = null;
|
||||||
|
$bn_tipo_array = ['lp_bn', 'lp_bnhq', 'lp_rot_bn'];
|
||||||
|
$color_tipo_array = ['lp_color', 'lp_color_hq', 'lp_rot_color'];
|
||||||
|
|
||||||
|
if (in_array($pre_linea->tipo, $bn_tipo_array)) {
|
||||||
|
$color_interior = "bn";
|
||||||
|
};
|
||||||
|
if (in_array($pre_linea->tipo, $color_tipo_array)) {
|
||||||
|
$color_interior = "color";
|
||||||
|
};
|
||||||
|
return $color_interior;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1903,6 +1903,7 @@ class PresupuestoService extends BaseService
|
|||||||
"user_updated_id" => auth()->user()->id,
|
"user_updated_id" => auth()->user()->id,
|
||||||
];
|
];
|
||||||
$id_linea = $model_pedido_linea->insert($data_pedido_linea);
|
$id_linea = $model_pedido_linea->insert($data_pedido_linea);
|
||||||
|
//PedidoXMLService::generate_xml($pedido_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($id_linea != 0 && $pedido_id != 0) {
|
if ($id_linea != 0 && $pedido_id != 0) {
|
||||||
|
|||||||
@ -1,306 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Services;
|
|
||||||
|
|
||||||
use App\Models\Presupuestos\PresupuestoFicheroModel;
|
|
||||||
use App\Libraries\SftpClientWrapper;
|
|
||||||
use Config\PresupuestoSFTP;
|
|
||||||
|
|
||||||
class PresupuestoUploaderService
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
protected SftpClientWrapper $ftp,
|
|
||||||
protected PresupuestoFicheroModel $fileModel,
|
|
||||||
protected PresupuestoSFTP $config
|
|
||||||
) {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sube todos los archivos asociados a un presupuesto al SFTP.
|
|
||||||
*/
|
|
||||||
public function uploadToRemote(int $presupuestoId): array
|
|
||||||
{
|
|
||||||
$remoteDir = $this->config->getRemoteDirForPresupuesto($presupuestoId);
|
|
||||||
|
|
||||||
if (!$this->ftp->exists($remoteDir)) {
|
|
||||||
if (!$this->ftp->mkdir($remoteDir, true)) {
|
|
||||||
return [
|
|
||||||
'success' => false,
|
|
||||||
'message' => "No se pudo crear el directorio remoto: $remoteDir"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
$this->ftp->chmod($remoteDir, 0755);
|
|
||||||
}
|
|
||||||
|
|
||||||
$files = $this->fileModel->getFiles($presupuestoId);
|
|
||||||
$results = [];
|
|
||||||
|
|
||||||
foreach ($files as $file) {
|
|
||||||
$filename = basename($file->file_path);
|
|
||||||
$localPath = WRITEPATH . $file->file_path;
|
|
||||||
$remotePath = $remoteDir . '/' . $filename;
|
|
||||||
|
|
||||||
if (!file_exists($localPath)) {
|
|
||||||
$results[] = [
|
|
||||||
'file' => $file->nombre,
|
|
||||||
'remotePath' => $remotePath,
|
|
||||||
'success' => false,
|
|
||||||
'error' => 'Archivo local no encontrado'
|
|
||||||
];
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$ok = $this->ftp->upload($localPath, $remotePath);
|
|
||||||
$results[] = [
|
|
||||||
'file' => $file->nombre,
|
|
||||||
'remotePath' => $remotePath,
|
|
||||||
'success' => $ok
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
$allOk = !in_array(false, array_column($results, 'success'));
|
|
||||||
|
|
||||||
return [
|
|
||||||
'success' => $allOk,
|
|
||||||
'files' => $results
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Elimina todos los archivos actuales del presupuesto del SFTP.
|
|
||||||
*/
|
|
||||||
public function removeFromRemote(int $presupuestoId): array
|
|
||||||
{
|
|
||||||
$remoteDir = $this->config->getRemoteDirForPresupuesto($presupuestoId);
|
|
||||||
$files = $this->fileModel->getFiles($presupuestoId);
|
|
||||||
|
|
||||||
$results = [];
|
|
||||||
|
|
||||||
foreach ($files as $file) {
|
|
||||||
$filename = basename($file->file_path);
|
|
||||||
$remotePath = $remoteDir . '/' . $filename;
|
|
||||||
|
|
||||||
if ($this->ftp->exists($remotePath)) {
|
|
||||||
$deleted = $this->ftp->delete($remotePath);
|
|
||||||
$results[] = [
|
|
||||||
'file' => $file->nombre,
|
|
||||||
'remotePath' => $remotePath,
|
|
||||||
'success' => $deleted,
|
|
||||||
'message' => $deleted ? 'Eliminado correctamente' : 'Falló al eliminar'
|
|
||||||
];
|
|
||||||
} else {
|
|
||||||
$results[] = [
|
|
||||||
'file' => $file->nombre,
|
|
||||||
'remotePath' => $remotePath,
|
|
||||||
'success' => false,
|
|
||||||
'message' => 'Archivo no encontrado en el SFTP'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $results;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Elimina del SFTP los archivos que ya no existen en la lista permitida.
|
|
||||||
*/
|
|
||||||
public function removeMissingFromRemote(int $presupuestoId, array $keepFileNames): void
|
|
||||||
{
|
|
||||||
$remoteDir = $this->config->getRemoteDirForPresupuesto($presupuestoId);
|
|
||||||
$files = $this->fileModel->getFiles($presupuestoId);
|
|
||||||
|
|
||||||
foreach ($files as $file) {
|
|
||||||
if (!in_array($file->nombre, $keepFileNames)) {
|
|
||||||
$remotePath = $remoteDir . '/' . basename($file->file_path);
|
|
||||||
if ($this->ftp->exists($remotePath)) {
|
|
||||||
$this->ftp->delete($remotePath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Descarga archivos de SFTP y genera un ZIP temporal para el presupuesto dado.
|
|
||||||
*
|
|
||||||
* @param int $presupuestoId ID del presupuesto.
|
|
||||||
* @param string|null $prefijo Prefijo para los nombres de los archivos.
|
|
||||||
* @return array Estructura: ['success' => bool, 'message' => string, 'zipPath' => string|null]
|
|
||||||
*/
|
|
||||||
public function downloadZip(int $presupuestoId, ?string $prefijo = null): array
|
|
||||||
{
|
|
||||||
$files = $this->fileModel->getFiles($presupuestoId);
|
|
||||||
if (empty($files)) {
|
|
||||||
return [
|
|
||||||
'success' => false,
|
|
||||||
'message' => "No hay archivos en la base de datos para el presupuesto ID {$presupuestoId}.",
|
|
||||||
'zipPath' => null
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
$remoteDir = $this->config->getRemoteDirForPresupuesto($presupuestoId);
|
|
||||||
if (!$this->ftp->exists($remoteDir)) {
|
|
||||||
return [
|
|
||||||
'success' => false,
|
|
||||||
'message' => "El directorio remoto no existe: {$remoteDir}",
|
|
||||||
'zipPath' => null
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
$localTempDir = WRITEPATH . 'zip_presupuestos/' . uniqid("presupuesto_");
|
|
||||||
if (!is_dir($localTempDir) && !mkdir($localTempDir, 0777, true)) {
|
|
||||||
return [
|
|
||||||
'success' => false,
|
|
||||||
'message' => "No se pudo crear el directorio temporal en: {$localTempDir}",
|
|
||||||
'zipPath' => null
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
$erroresDescarga = [];
|
|
||||||
foreach ($files as $file) {
|
|
||||||
$originalName = $file->nombre ?? basename($file->file_path ?? '');
|
|
||||||
$prefixedName = $prefijo ? $prefijo . '_' . $originalName : $originalName;
|
|
||||||
|
|
||||||
$localFile = $localTempDir . '/' . $prefixedName;
|
|
||||||
$remoteFile = $remoteDir . '/' . basename($file->file_path ?? '');
|
|
||||||
|
|
||||||
if (!$this->ftp->get($remoteFile, $localFile)) {
|
|
||||||
$erroresDescarga[] = "Error al descargar: {$remoteFile}";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count($erroresDescarga) === count($files)) {
|
|
||||||
return [
|
|
||||||
'success' => false,
|
|
||||||
'message' => "Fallo al descargar todos los archivos:\n" . implode("\n", $erroresDescarga),
|
|
||||||
'zipPath' => null
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
$zipPath = $localTempDir . '.zip';
|
|
||||||
$zip = new \ZipArchive();
|
|
||||||
if (!$zip->open($zipPath, \ZipArchive::CREATE | \ZipArchive::OVERWRITE)) {
|
|
||||||
return [
|
|
||||||
'success' => false,
|
|
||||||
'message' => "No se pudo crear el archivo ZIP: {$zipPath}",
|
|
||||||
'zipPath' => null
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (glob($localTempDir . '/*') as $localFile) {
|
|
||||||
$zip->addFile($localFile, basename($localFile));
|
|
||||||
}
|
|
||||||
$zip->close();
|
|
||||||
|
|
||||||
foreach (glob($localTempDir . '/*') as $localFile) {
|
|
||||||
unlink($localFile);
|
|
||||||
}
|
|
||||||
rmdir($localTempDir);
|
|
||||||
|
|
||||||
if (!file_exists($zipPath)) {
|
|
||||||
return [
|
|
||||||
'success' => false,
|
|
||||||
'message' => "El ZIP no fue generado correctamente.",
|
|
||||||
'zipPath' => null
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
return [
|
|
||||||
'success' => true,
|
|
||||||
'message' => "ZIP generado correctamente.",
|
|
||||||
'zipPath' => $zipPath
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function importarArchivosDesdeUrlsBubok(int $presupuestoId, array $urls): array
|
|
||||||
{
|
|
||||||
$resultados = [];
|
|
||||||
$errores = [];
|
|
||||||
|
|
||||||
foreach ($urls as $tipo => $url) {
|
|
||||||
if (empty($url)) {
|
|
||||||
$errores[] = "URL vacía para tipo: {$tipo}";
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Intenta descargar el contenido del archivo desde la URL
|
|
||||||
$contenido = @file_get_contents($url);
|
|
||||||
|
|
||||||
// Si no se puede descargar, se genera un archivo de error local (no se guarda en BBDD)
|
|
||||||
if ($contenido === false || strlen($contenido) === 0) {
|
|
||||||
$mensajeError = "ERROR: No se pudo descargar el archivo remoto para $tipo desde la URL: $url";
|
|
||||||
$nombreError = 'ERROR_' . strtoupper($tipo) . '.txt';
|
|
||||||
|
|
||||||
// Ruta local en la estructura estándar (no BBDD)
|
|
||||||
$rutaError = $this->fileModel->getAbsolutePath($presupuestoId, $nombreError);
|
|
||||||
|
|
||||||
// Crear el directorio si no existe
|
|
||||||
$directorio = dirname($rutaError);
|
|
||||||
if (!is_dir($directorio)) {
|
|
||||||
mkdir($directorio, 0755, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Guardar el archivo con el mensaje de error
|
|
||||||
file_put_contents($rutaError, $mensajeError);
|
|
||||||
|
|
||||||
// Registrar el error en el array de errores
|
|
||||||
$errores[] = $mensajeError;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Nombre original y extensión del archivo descargado
|
|
||||||
$nombreOriginal = basename(parse_url($url, PHP_URL_PATH));
|
|
||||||
$extension = pathinfo($nombreOriginal, PATHINFO_EXTENSION);
|
|
||||||
|
|
||||||
// Registrar el archivo en la base de datos y obtener el nombre limpio
|
|
||||||
$nombreLimpio = $this->fileModel->saveFileInBBDD(
|
|
||||||
$presupuestoId,
|
|
||||||
$nombreOriginal,
|
|
||||||
$extension,
|
|
||||||
auth()->id()
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!$nombreLimpio) {
|
|
||||||
$errores[] = "No se pudo registrar '$nombreOriginal' en la base de datos.";
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtener la ruta completa donde se guardará el archivo localmente
|
|
||||||
$rutaAbsoluta = $this->fileModel->getAbsolutePath($presupuestoId, $nombreLimpio);
|
|
||||||
|
|
||||||
// Crear el directorio si no existe
|
|
||||||
$directorio = dirname($rutaAbsoluta);
|
|
||||||
if (!is_dir($directorio)) {
|
|
||||||
mkdir($directorio, 0755, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Guardar el archivo en el sistema de archivos local
|
|
||||||
file_put_contents($rutaAbsoluta, $contenido);
|
|
||||||
|
|
||||||
// Añadir el archivo a la lista de resultados
|
|
||||||
$resultados[] = [
|
|
||||||
'nombre' => $nombreLimpio,
|
|
||||||
'tipo' => $tipo,
|
|
||||||
'ruta_local' => $rutaAbsoluta
|
|
||||||
];
|
|
||||||
} catch (\Throwable $e) {
|
|
||||||
$errores[] = "Error inesperado procesando '$tipo': " . $e->getMessage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Subida de todos los archivos válidos al servidor remoto SFTP
|
|
||||||
try {
|
|
||||||
$this->uploadToRemote($presupuestoId);
|
|
||||||
} catch (\Throwable $e) {
|
|
||||||
$errores[] = "Error al subir archivos al SFTP: " . $e->getMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Devolver el resumen del proceso
|
|
||||||
return [
|
|
||||||
'success' => empty($errores),
|
|
||||||
'archivos_subidos' => $resultados,
|
|
||||||
'errores' => $errores
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -24,7 +24,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-12 gap-2">
|
<div class="col-md-12 gap-2">
|
||||||
<button id="<?= $id ?>_btnUploadFiles" class="btn mt-3 btn-sm btn-primary waves-effect waves-light ml-2 ">
|
<button id="<?= $id ?>_btnUploadFiles" class="btn mt-3 btn-sm btn-primary waves-effect waves-light ml-2 ">
|
||||||
<span class="align-middle d-sm-inline-block d-none me-sm-1"><?= lang('App.global_select_files') ?></span>
|
<span class="align-middle d-sm-inline-block d-none me-sm-1"><?= lang('App.global_upload_files') ?></span>
|
||||||
<i class="ti ti-upload ti-xs"></i>
|
<i class="ti ti-upload ti-xs"></i>
|
||||||
</button>
|
</button>
|
||||||
<button id="<?= $id ?>_btnSubmitFiles" class="btn mt-3 btn-success btn-sm waves-effect waves-light ml-2">
|
<button id="<?= $id ?>_btnSubmitFiles" class="btn mt-3 btn-success btn-sm waves-effect waves-light ml-2">
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
|
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
|
||||||
|
|
||||||
<table id="tableConfigVariables" class="table table-striped table-hover table-responsive" style="width: 100%; word-break: break-word;">
|
<table id="tableConfigVariables" class="table table-striped table-hover" style="width: 100%;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th><?= lang('ConfigVariables.datatable.columns.name') ?></th>
|
<th><?= lang('ConfigVariables.datatable.columns.name') ?></th>
|
||||||
@ -55,13 +55,11 @@
|
|||||||
<div class="row g-4">
|
<div class="row g-4">
|
||||||
<div class="col-12 mb-0">
|
<div class="col-12 mb-0">
|
||||||
<label for="value" class="form-label"><?= lang('ConfigVariables.form.value') ?></label>
|
<label for="value" class="form-label"><?= lang('ConfigVariables.form.value') ?></label>
|
||||||
<div id="value-wrapper">
|
<input type="number" min=0 id="value" class="form-control">
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 mb-0">
|
<div class="col-12 mb-0">
|
||||||
<label for="description" class="form-label"><?= lang('ConfigVariables.form.description') ?></label>
|
<label for="description" class="form-label"><?= lang('ConfigVariables.form.description') ?></label>
|
||||||
<textarea type="text" rows="4" cols="10" id="description" class="form-control"></textarea>
|
<textarea type="text" rows="4" cols="10" id="description" class="form-control"></textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -77,13 +75,4 @@
|
|||||||
<?= $this->endSection() ?>
|
<?= $this->endSection() ?>
|
||||||
<?= $this->section("additionalExternalJs") ?>
|
<?= $this->section("additionalExternalJs") ?>
|
||||||
<script type="module" src="<?= versioned_asset('assets/js/safekat/pages/configuracion/variables.js') ?>"></script>
|
<script type="module" src="<?= versioned_asset('assets/js/safekat/pages/configuracion/variables.js') ?>"></script>
|
||||||
<script>
|
|
||||||
// Pasamos las opciones al frontend desde PHP
|
|
||||||
window.CABEZADAS_OPCIONES = <?= json_encode([
|
|
||||||
'WHI' => lang('Presupuestos.blanca'),
|
|
||||||
'GRE' => lang('Presupuestos.verde'),
|
|
||||||
'BLUE' => lang('Presupuestos.azul'),
|
|
||||||
'REDYEL' => lang('Presupuestos.rojaAmarilla'),
|
|
||||||
]) ?>;
|
|
||||||
</script>
|
|
||||||
<?= $this->endSection() ?>
|
<?= $this->endSection() ?>
|
||||||
@ -222,39 +222,46 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3): ?>
|
<?php if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3): ?>
|
||||||
<div class="col-md-12 col-lg-2 px-4">
|
<div class="col-md-12 col-lg-2 px-4">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-12 col-lg-2 px-4">
|
<div class="col-md-12 col-lg-2 px-4">
|
||||||
<label id="label_compLomoRedondo" for="compLomoRedondo" class="form-label">
|
<label id="label_compLomoRedondo" for="compLomoRedondo" class="form-label">
|
||||||
<?= lang('Presupuestos.lomoRedondo') ?>*
|
<?= lang('Presupuestos.lomoRedondo') ?>*
|
||||||
</label>
|
</label>
|
||||||
<select id="compLomoRedondo" name="lomo_redondo" service-id="<?= $serviciosAutomaticos['lomo_redondo'] ?>"
|
<select id="compLomoRedondo" name="lomo_redondo" service-id="<?= $serviciosAutomaticos['lomo_redondo'] ?>"
|
||||||
class="form-control select2bs2 comp_cubierta_items" style="width: 100%;">
|
class="form-control select2bs2 comp_cubierta_items" style="width: 100%;">
|
||||||
<option value="0">
|
<option value="0">
|
||||||
<p>
|
<p>
|
||||||
<?= lang('Presupuestos.no') ?>
|
<?= lang('Presupuestos.no') ?>
|
||||||
</p>
|
</p>
|
||||||
</option>
|
</option>
|
||||||
<option value="1">
|
<option value="1">
|
||||||
<p>
|
<p>
|
||||||
<?= lang('Presupuestos.si') ?>
|
<?= lang('Presupuestos.si') ?>
|
||||||
</p>
|
</p>
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-12 col-lg-2 px-4">
|
<div class="col-md-12 col-lg-2 px-4">
|
||||||
<label for="cabezada" class="form-label">
|
<label for="cabezada" class="form-label">
|
||||||
<?= lang('Presupuestos.cabezada') ?>
|
<?= lang('Presupuestos.cabezada') ?>
|
||||||
</label>
|
</label>
|
||||||
<select class="form-select" name="cabezada" id="cabezada">
|
<select class="form-select select2bs2" id="cabezada" name="cabezada">
|
||||||
<?php foreach ($cabezadas as $key => $langKey): ?>
|
<option value="WHI">
|
||||||
<option value="<?= esc($key) ?>">
|
<?= lang('Presupuestos.blanca') ?>
|
||||||
<?= lang($langKey) ?>
|
</option>
|
||||||
</option>
|
<option value="GRE">
|
||||||
<?php endforeach; ?>
|
<?= lang('Presupuestos.verde') ?>
|
||||||
</select>
|
</option>
|
||||||
</div>
|
<option value="BLUE">
|
||||||
|
<?= lang('Presupuestos.azul') ?>
|
||||||
|
</option>
|
||||||
|
<option value="REDYEL">
|
||||||
|
<?= lang('Presupuestos.rojaAmarilla') ?>
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<div>
|
<div>
|
||||||
<hr class="my-1">
|
<hr class="my-1">
|
||||||
@ -262,83 +269,83 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php if ($tipo_impresion_id != 5 && $tipo_impresion_id != 6 && $tipo_impresion_id != 7 && $tipo_impresion_id != 8 && $tipo_impresion_id != 21): ?>
|
<?php if ($tipo_impresion_id != 5 && $tipo_impresion_id != 6 && $tipo_impresion_id != 7 && $tipo_impresion_id != 8 && $tipo_impresion_id != 21): ?>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 col-lg-2 px-4">
|
<div class="col-md-12 col-lg-2 px-4">
|
||||||
<p>
|
<p>
|
||||||
<?= lang('PapelImpresion.sobrecubierta') ?>
|
<?= lang('PapelImpresion.sobrecubierta') ?>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
|
||||||
<div class="col-md-12 col-lg-2 px-4">
|
|
||||||
<select id="compSobrecubierta" name="comp_sobrecubierta"
|
|
||||||
class="form-control select2bs2 comp_sobrecubierta_items" style="width: 100%;">
|
|
||||||
<option value="0">
|
|
||||||
<?= lang('Presupuestos.no') ?>
|
|
||||||
</option>
|
|
||||||
<option value="1">
|
|
||||||
<?= lang('Presupuestos.si') ?>
|
|
||||||
</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-12 col-lg-6 px-4">
|
|
||||||
<select disabled id="compPapelSobrecubierta" name="comp_papel_sobrecubierta"
|
|
||||||
class="form-control select2bs2 comp_sobrecubierta_items" style="width: 100%;">
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-12 col-lg-2 px-4">
|
|
||||||
<select disabled id="compGramajeSobrecubierta" name="comp_gramaje_sobrecubierta"
|
|
||||||
class="form-control select2bs2 comp_sobrecubierta_items" style="width: 100%;">
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<hr class="my-1">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-12 col-lg-2 px-4">
|
||||||
|
<select id="compSobrecubierta" name="comp_sobrecubierta"
|
||||||
|
class="form-control select2bs2 comp_sobrecubierta_items" style="width: 100%;">
|
||||||
|
<option value="0">
|
||||||
|
<?= lang('Presupuestos.no') ?>
|
||||||
|
</option>
|
||||||
|
<option value="1">
|
||||||
|
<?= lang('Presupuestos.si') ?>
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-12 col-lg-6 px-4">
|
||||||
|
<select disabled id="compPapelSobrecubierta" name="comp_papel_sobrecubierta"
|
||||||
|
class="form-control select2bs2 comp_sobrecubierta_items" style="width: 100%;">
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-12 col-lg-2 px-4">
|
||||||
|
<select disabled id="compGramajeSobrecubierta" name="comp_gramaje_sobrecubierta"
|
||||||
|
class="form-control select2bs2 comp_sobrecubierta_items" style="width: 100%;">
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<hr class="my-1">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3 || $tipo_impresion_id == 5 || $tipo_impresion_id == 7): ?>
|
<?php if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3 || $tipo_impresion_id == 5 || $tipo_impresion_id == 7): ?>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 col-lg-2 px-4">
|
<div class="col-md-12 col-lg-2 px-4">
|
||||||
<p>
|
<p>
|
||||||
<?= lang('PapelImpresion.guardas') ?>
|
<?= lang('PapelImpresion.guardas') ?>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
|
||||||
<div class="col-md-12 col-lg-2 px-4">
|
|
||||||
<select id="compCarasGuardas" name="comp_paginas_guardas"
|
|
||||||
class="form-control select2bs2 comp_guardas_items" style="width: 100%;">
|
|
||||||
<option value="0">
|
|
||||||
<p>
|
|
||||||
<?= lang('Presupuestos.sinImpresion') ?>
|
|
||||||
</p>
|
|
||||||
</option>
|
|
||||||
<option value="4">
|
|
||||||
<p>
|
|
||||||
<?= lang('Presupuestos.unaCara') ?>
|
|
||||||
</p>
|
|
||||||
</option>
|
|
||||||
<option value="8">
|
|
||||||
<?php if ($tipo_impresion_id != 5 && $tipo_impresion_id != 6 && $tipo_impresion_id != 7 && $tipo_impresion_id != 8): ?>
|
|
||||||
<p>
|
|
||||||
<?= lang('Presupuestos.dosCaras') ?>
|
|
||||||
</p>
|
|
||||||
<?php endif ?>
|
|
||||||
</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-12 col-lg-6 px-4">
|
|
||||||
<select id="compPapelGuardas" name="comp_papel_guardas"
|
|
||||||
class="form-control select2bs2 comp_guardas_items" style="width: 100%;">
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-12 col-lg-2 px-4">
|
|
||||||
<select id="compGramajeGuardas" name="comp_gramaje_guardas"
|
|
||||||
class="form-control select2bs2 comp_guardas_items" style="width: 100%;">
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<hr class="my-1">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-12 col-lg-2 px-4">
|
||||||
|
<select id="compCarasGuardas" name="comp_paginas_guardas"
|
||||||
|
class="form-control select2bs2 comp_guardas_items" style="width: 100%;">
|
||||||
|
<option value="0">
|
||||||
|
<p>
|
||||||
|
<?= lang('Presupuestos.sinImpresion') ?>
|
||||||
|
</p>
|
||||||
|
</option>
|
||||||
|
<option value="4">
|
||||||
|
<p>
|
||||||
|
<?= lang('Presupuestos.unaCara') ?>
|
||||||
|
</p>
|
||||||
|
</option>
|
||||||
|
<option value="8">
|
||||||
|
<?php if ($tipo_impresion_id != 5 && $tipo_impresion_id != 6 && $tipo_impresion_id != 7 && $tipo_impresion_id != 8): ?>
|
||||||
|
<p>
|
||||||
|
<?= lang('Presupuestos.dosCaras') ?>
|
||||||
|
</p>
|
||||||
|
<?php endif ?>
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-12 col-lg-6 px-4">
|
||||||
|
<select id="compPapelGuardas" name="comp_papel_guardas"
|
||||||
|
class="form-control select2bs2 comp_guardas_items" style="width: 100%;">
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-12 col-lg-2 px-4">
|
||||||
|
<select id="compGramajeGuardas" name="comp_gramaje_guardas"
|
||||||
|
class="form-control select2bs2 comp_guardas_items" style="width: 100%;">
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<hr class="my-1">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -726,102 +733,102 @@
|
|||||||
|
|
||||||
<!----------------------------------------------------------------------------->
|
<!----------------------------------------------------------------------------->
|
||||||
<?php if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3 || $tipo_impresion_id == 5 || $tipo_impresion_id == 7): ?>
|
<?php if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3 || $tipo_impresion_id == 5 || $tipo_impresion_id == 7): ?>
|
||||||
<div class="accordion mt-3" id="accordionCompGuardas">
|
<div class="accordion mt-3" id="accordionCompGuardas">
|
||||||
<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 id="accordion-button-int-guardas" type="button" class="accordion-button"
|
<button id="accordion-button-int-guardas" type="button" class="accordion-button"
|
||||||
data-bs-toggle="collapse" data-bs-target="#accordionCompGuardasTip"
|
data-bs-toggle="collapse" data-bs-target="#accordionCompGuardasTip"
|
||||||
aria-expanded="false" aria-controls="accordionCompGuardasTip">
|
aria-expanded="false" aria-controls="accordionCompGuardasTip">
|
||||||
<h6 id="title_guardas">
|
<h6 id="title_guardas">
|
||||||
<?= lang("Presupuestos.Guardas") ?>
|
<?= lang("Presupuestos.Guardas") ?>
|
||||||
</h6>
|
</h6>
|
||||||
</button>
|
</button>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div id="accordionCompGuardasTip" class="accordion-collapse collapse"
|
<div id="accordionCompGuardasTip" class="accordion-collapse collapse"
|
||||||
data-bs-parent="#accordionCompGuardasTip">
|
data-bs-parent="#accordionCompGuardasTip">
|
||||||
<div class="accordion-body">
|
<div class="accordion-body">
|
||||||
|
|
||||||
<table id="tableCompGuardas" class="comparator-table table dt-responsive dataTable"
|
<table id="tableCompGuardas" class="comparator-table table dt-responsive dataTable"
|
||||||
style="width: 100%;">
|
style="width: 100%;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th style="padding-right: 0.75em;">
|
<th style="padding-right: 0.75em;">
|
||||||
<?= lang('Presupuestos.tipo') ?>
|
<?= lang('Presupuestos.tipo') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em;">
|
<th style="padding-right: 0.75em;">
|
||||||
<?= lang('Presupuestos.paginas') ?>
|
<?= lang('Presupuestos.paginas') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em;">
|
<th style="padding-right: 0.75em;">
|
||||||
<?= lang('Presupuestos.papel') ?>
|
<?= lang('Presupuestos.papel') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em;">
|
<th style="padding-right: 0.75em;">
|
||||||
<?= lang('Presupuestos.gramaje') ?>
|
<?= lang('Presupuestos.gramaje') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em;">
|
<th style="padding-right: 0.75em;">
|
||||||
<?= lang('Presupuestos.marca') ?>
|
<?= lang('Presupuestos.marca') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em;">
|
<th style="padding-right: 0.75em;">
|
||||||
<?= lang('Presupuestos.maquina') ?>
|
<?= lang('Presupuestos.maquina') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em;">
|
<th style="padding-right: 0.75em;">
|
||||||
<?= lang('Presupuestos.numeroPliegos') ?>
|
<?= lang('Presupuestos.numeroPliegos') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em; max-width:80px">
|
<th style="padding-right: 0.75em; max-width:80px">
|
||||||
<?= lang('Presupuestos.pliegosPedido') ?>
|
<?= lang('Presupuestos.pliegosPedido') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em; max-width:80px">
|
<th style="padding-right: 0.75em; max-width:80px">
|
||||||
<?= lang('Presupuestos.precioPliego') ?>
|
<?= lang('Presupuestos.precioPliego') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em;">
|
<th style="padding-right: 0.75em;">
|
||||||
<?= lang('Presupuestos.libro') ?>
|
<?= lang('Presupuestos.libro') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em; max-width:80px">
|
<th style="padding-right: 0.75em; max-width:80px">
|
||||||
<?= lang('Presupuestos.totalPapelPedido') ?>
|
<?= lang('Presupuestos.totalPapelPedido') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em;">
|
<th style="padding-right: 0.75em;">
|
||||||
<?= lang('Presupuestos.lomo') ?>
|
<?= lang('Presupuestos.lomo') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em;">
|
<th style="padding-right: 0.75em;">
|
||||||
<?= lang('Presupuestos.peso') ?>
|
<?= lang('Presupuestos.peso') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em; max-width:80px">
|
<th style="padding-right: 0.75em; max-width:80px">
|
||||||
<?= lang('Presupuestos.horas') ?>
|
<?= lang('Presupuestos.horas') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em; max-width:80px">
|
<th style="padding-right: 0.75em; max-width:80px">
|
||||||
<?= lang('Presupuestos.precioImpresion') ?>
|
<?= lang('Presupuestos.precioImpresion') ?>
|
||||||
</th>
|
</th>
|
||||||
<th style="padding-right: 0.75em;">
|
<th style="padding-right: 0.75em;">
|
||||||
<?= lang('Presupuestos.total') ?>
|
<?= lang('Presupuestos.total') ?>
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
</tbody>
|
</tbody>
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="dt-result dt-result-text" colspan="14">
|
<td class="dt-result dt-result-text" colspan="14">
|
||||||
<?= lang('Presupuestos.total') ?>
|
<?= lang('Presupuestos.total') ?>
|
||||||
<?= lang("Presupuestos.Guardas") ?>:
|
<?= lang("Presupuestos.Guardas") ?>:
|
||||||
</td>
|
</td>
|
||||||
<td id="total_comp_guardas" class="dt-result dt-result-value" colspan="2">
|
<td id="total_comp_guardas" class="dt-result dt-result-value" colspan="2">
|
||||||
0.00 </td>
|
0.00 </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button type="button" name="insertarGuardasBtn" id="insertarGuardasBtn"
|
<button type="button" name="insertarGuardasBtn" id="insertarGuardasBtn"
|
||||||
class="btn btn-primary float-end me-sm-3 me-1 mb-3 insertarLinea d-none">
|
class="btn btn-primary float-end me-sm-3 me-1 mb-3 insertarLinea d-none">
|
||||||
<?= lang('Presupuestos.insertarLinea') . ' ' . strtoupper(lang('Presupuestos.Guardas')) ?>
|
<?= lang('Presupuestos.insertarLinea') . ' ' . strtoupper(lang('Presupuestos.Guardas')) ?>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<div class="accordion mt-3" id="accordionCompFaja">
|
<div class="accordion mt-3" id="accordionCompFaja">
|
||||||
|
|||||||
@ -25,7 +25,7 @@
|
|||||||
<label for="created_at" class="form-label">
|
<label for="created_at" class="form-label">
|
||||||
<?= lang('Presupuestos.created_at') ?>
|
<?= lang('Presupuestos.created_at') ?>
|
||||||
</label>
|
</label>
|
||||||
<?php if (str_contains($formAction, 'edit')): ?>
|
<?php if(str_contains($formAction,'edit')): ?>
|
||||||
<input readonly style="background: #E8E8E8;" id="updated_at" name="updated_at" maxLength="12" class="form-control" value="">
|
<input readonly style="background: #E8E8E8;" id="updated_at" name="updated_at" maxLength="12" class="form-control" value="">
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<input readonly style="background: #E8E8E8;" id="created_at" name="created_at" maxLength="12" class="form-control" value="">
|
<input readonly style="background: #E8E8E8;" id="created_at" name="created_at" maxLength="12" class="form-control" value="">
|
||||||
@ -39,12 +39,12 @@
|
|||||||
<?= lang('Presupuestos.presupuestoEstado') ?>
|
<?= lang('Presupuestos.presupuestoEstado') ?>
|
||||||
</label>
|
</label>
|
||||||
<select disabled id="estado_id" name="estado_id" maxLength="11" style="background-color: #E8E8E8;" class="form-control select2bs" value="">
|
<select disabled id="estado_id" name="estado_id" maxLength="11" style="background-color: #E8E8E8;" class="form-control select2bs" value="">
|
||||||
<option value=1>
|
<option value=1 >
|
||||||
<?= lang('Presupuestos.presupuestoEstadoBorrador') ?>
|
<?=lang('Presupuestos.presupuestoEstadoBorrador') ?>
|
||||||
</option>
|
</option>
|
||||||
<option value=2>
|
<option value=2 >
|
||||||
<?= lang('Presupuestos.presupuestoEstadoAceptado') ?>
|
<?=lang('Presupuestos.presupuestoEstadoAceptado') ?>
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div><!--//.col -->
|
</div><!--//.col -->
|
||||||
@ -71,7 +71,7 @@
|
|||||||
<div class="col-md-12 col-lg-6 px-4">
|
<div class="col-md-12 col-lg-6 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="titulo" class="form-label">
|
<label for="titulo" class="form-label">
|
||||||
<?= lang('Presupuestos.titulo') ?>*
|
<?=lang('Presupuestos.titulo') ?>*
|
||||||
</label>
|
</label>
|
||||||
<input type="text" id="titulo" name="titulo" maxLength="300" class="form-control" value="">
|
<input type="text" id="titulo" name="titulo" maxLength="300" class="form-control" value="">
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
@ -81,7 +81,7 @@
|
|||||||
<div class="col-md-12 col-lg-6 px-4">
|
<div class="col-md-12 col-lg-6 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="autor" class="form-label">
|
<label for="autor" class="form-label">
|
||||||
<?= lang('Presupuestos.autor') ?>
|
<?=lang('Presupuestos.autor') ?>
|
||||||
</label>
|
</label>
|
||||||
<input type="text" id="autor" name="autor" maxLength="150" class="form-control" value="">
|
<input type="text" id="autor" name="autor" maxLength="150" class="form-control" value="">
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
@ -95,37 +95,37 @@
|
|||||||
<div class="col-md-12 col-lg-3 px-4">
|
<div class="col-md-12 col-lg-3 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="coleccion" class="form-label">
|
<label for="coleccion" class="form-label">
|
||||||
<?= lang('Presupuestos.coleccion') ?>
|
<?=lang('Presupuestos.coleccion') ?>
|
||||||
</label>
|
</label>
|
||||||
<input type="text" id="coleccion" name="coleccion" maxLength="255" class="form-control" value="">
|
<input type="text" id="coleccion" name="coleccion" maxLength="255" class="form-control" value="">
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-12 col-lg-3 px-4">
|
<div class="col-md-12 col-lg-3 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="numeroEdicion" class="form-label">
|
<label for="numeroEdicion" class="form-label">
|
||||||
<?= lang('Presupuestos.numeroEdicion') ?>
|
<?=lang('Presupuestos.numeroEdicion') ?>
|
||||||
</label>
|
</label>
|
||||||
<input type="text" id="numeroEdicion" name="numero_edicion" maxLength="50" class="form-control" value="">
|
<input type="text" id="numeroEdicion" name="numero_edicion" maxLength="50" class="form-control" value="">
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-12 col-lg-3 px-4">
|
<div class="col-md-12 col-lg-3 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="isbn" class="form-label">
|
<label for="isbn" class="form-label">
|
||||||
<?= lang('Presupuestos.isbn') ?>
|
<?=lang('Presupuestos.isbn') ?>
|
||||||
</label>
|
</label>
|
||||||
<input type="text" id="isbn" name="isbn" maxLength="50" class="form-control" value="">
|
<input type="text" id="isbn" name="isbn" maxLength="50" class="form-control" value="">
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-12 col-lg-3 px-4">
|
<div class="col-md-12 col-lg-3 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="paisId" class="form-label">
|
<label for="paisId" class="form-label">
|
||||||
<?= lang('Presupuestos.paisId') ?>
|
<?=lang('Presupuestos.paisId') ?>
|
||||||
</label>
|
</label>
|
||||||
<select id="paisId" name="pais_id" class="form-control select2bs" style="width: 100%;">
|
<select id="paisId" name="pais_id" class="form-control select2bs" style="width: 100%;" >
|
||||||
<?php if (isset($pais_default)): ?>
|
<?php if(isset($pais_default)): ?>
|
||||||
<option value="<?= $pais_default_id ?>" selected>
|
<option value="<?= $pais_default_id ?>" selected>
|
||||||
<?= $pais_default ?>
|
<?= $pais_default ?>
|
||||||
</option>
|
</option>
|
||||||
@ -133,43 +133,31 @@
|
|||||||
</select>
|
</select>
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div> <!--//.row -->
|
</div> <!--//.row -->
|
||||||
|
|
||||||
|
|
||||||
<!-- Fila 4 -->
|
<!-- Fila 3 -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 col-lg-6 px-4">
|
<div class="col-md-12 col-lg-6 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="clienteId" class="form-label">
|
<label for="clienteId" class="form-label">
|
||||||
<?= lang('Presupuestos.clienteId') ?>*
|
<?= lang('Presupuestos.clienteId') ?>*
|
||||||
<?php if (isset($cliente_id)): ?>
|
<?php if(isset($cliente_id)):?>
|
||||||
<a href="<?= route_to('editarCliente', $cliente_id); ?>" target="_blank"><i class="ti ti-file-search ti-sm mx-2""></i></a>
|
<a href="<?= route_to('editarCliente', $cliente_id); ?>" target="_blank" ><i class="ti ti-file-search ti-sm mx-2""></i></a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</label>
|
</label>
|
||||||
<select id="clienteId" name="cliente_id" class="form-control select2bs2" style="width: 100%;">
|
<select id="clienteId" name="cliente_id" class="form-control select2bs2" style="width: 100%;">
|
||||||
</select>
|
</select>
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div><!--//.col -->
|
</div><!--//.col -->
|
||||||
|
|
||||||
<div class="col-md-12 col-lg-3 px-4">
|
<div class="col-md-12 col-lg-6 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="referenciaCliente" class="form-label">
|
<label for="referenciaCliente" class="form-label">
|
||||||
<?= lang('Presupuestos.referenciaCliente') ?>
|
<?=lang('Presupuestos.referenciaCliente') ?>
|
||||||
</label>
|
</label>
|
||||||
<input type="text" id="referenciaCliente" name="referencia_cliente" maxLength="100" class="form-control" value="">
|
<input type="text" id="referenciaCliente" name="referencia_cliente" maxLength="100" class="form-control" value="">
|
||||||
</div><!--//.mb-3 -->
|
|
||||||
</div><!--//.col -->
|
|
||||||
|
|
||||||
|
|
||||||
<div class="col-md-12 col-lg-3 px-4">
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="iskn" class="form-label">
|
|
||||||
<?= lang('Presupuestos.iskn') ?>
|
|
||||||
</label>
|
|
||||||
<input type="text" id="iskn" name="iskn" class="form-control" readonly
|
|
||||||
value="" maxlength="64"
|
|
||||||
style="background: #E8E8E8;">
|
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div><!--//.col -->
|
</div><!--//.col -->
|
||||||
|
|
||||||
@ -179,4 +167,4 @@
|
|||||||
</div> <!-- //.accordion-body -->
|
</div> <!-- //.accordion-body -->
|
||||||
</div> <!-- //.accordion-collapse -->
|
</div> <!-- //.accordion-collapse -->
|
||||||
</div> <!-- //.accordion-item -->
|
</div> <!-- //.accordion-item -->
|
||||||
</div> <!-- //.accordion -->
|
</div> <!-- //.accordion -->
|
||||||
|
|||||||
@ -136,11 +136,10 @@
|
|||||||
<?= lang('Presupuestos.cabezada') ?>
|
<?= lang('Presupuestos.cabezada') ?>
|
||||||
</label>
|
</label>
|
||||||
<select class="form-select select2bs2" id="cabezada" name="cabezada">
|
<select class="form-select select2bs2" id="cabezada" name="cabezada">
|
||||||
<?php foreach ($cabezadas as $key => $langKey): ?>
|
<option value="WHI"><?= lang('Presupuestos.blanca') ?></option>
|
||||||
<option value="<?= esc($key) ?>">
|
<option value="GRE"><?= lang('Presupuestos.verde') ?></option>
|
||||||
<?= lang($langKey) ?>
|
<option value="BLUE"><?= lang('Presupuestos.azul') ?></option>
|
||||||
</option>
|
<option value="REDYEL"><?= lang('Presupuestos.rojaAmarilla') ?></option>
|
||||||
<?php endforeach; ?>
|
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -206,7 +206,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button id="btnUploadFile" class="btn mt-3 btn-primary btn-submit waves-effect waves-light ml-2 ">
|
<button id="btnUploadFile" class="btn mt-3 btn-primary btn-submit waves-effect waves-light ml-2 ">
|
||||||
<span class="align-middle d-sm-inline-block d-none me-sm-1"><?= lang('App.global_select_files') ?></span>
|
<span class="align-middle d-sm-inline-block d-none me-sm-1"><?= lang('App.global_upload_files') ?></span>
|
||||||
<i class="ti ti-upload ti-xs"></i>
|
<i class="ti ti-upload ti-xs"></i>
|
||||||
</button>
|
</button>
|
||||||
<button id="submit-all-files" class="btn mt-3 btn-success btn-submit waves-effect waves-light ml-2">
|
<button id="submit-all-files" class="btn mt-3 btn-success btn-submit waves-effect waves-light ml-2">
|
||||||
|
|||||||
@ -11,10 +11,7 @@ if (
|
|||||||
auth()->user()->can('maquinas.menu') ||
|
auth()->user()->can('maquinas.menu') ||
|
||||||
auth()->user()->can('maquinas-defecto.menu') ||
|
auth()->user()->can('maquinas-defecto.menu') ||
|
||||||
auth()->user()->can('usuarios.menu') ||
|
auth()->user()->can('usuarios.menu') ||
|
||||||
auth()->user()->can('roles-permisos.menu') ||
|
auth()->user()->can('roles-permisos.menu')
|
||||||
auth()->user()->can('proveedores.menu') ||
|
|
||||||
auth()->user()->can('ubicaciones.menu') ||
|
|
||||||
auth()->user()->can('series-facturas.menu')
|
|
||||||
) {
|
) {
|
||||||
?>
|
?>
|
||||||
<li class="menu-item">
|
<li class="menu-item">
|
||||||
@ -66,14 +63,14 @@ if (
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php if (auth()->user()->inGroup('root')) { ?>
|
<?php if (auth()->user()->inGroup('admin')) { ?>
|
||||||
<li class="menu-item">
|
<li class="menu-item">
|
||||||
<a href="<?= route_to("maquinaTareaList") ?>" class="menu-link">
|
<a href="<?= route_to("maquinaTareaList") ?>" class="menu-link">
|
||||||
<div> <?= lang("App.menu_maquina_tareas") ?></div>
|
<div> <?= lang("App.menu_maquina_tareas") ?></div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php if (auth()->user()->inGroup('root')) { ?>
|
<?php if (auth()->user()->inGroup('admin')) { ?>
|
||||||
<li class="menu-item">
|
<li class="menu-item">
|
||||||
<a href="<?= route_to("imposicionList") ?>" class="menu-link">
|
<a href="<?= route_to("imposicionList") ?>" class="menu-link">
|
||||||
<div> <?= lang("App.menu_imposiciones") ?></div>
|
<div> <?= lang("App.menu_imposiciones") ?></div>
|
||||||
@ -115,28 +112,29 @@ if (
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php if (auth()->user()->inGroup('root')) { ?>
|
|
||||||
|
<?php if (auth()->user()->inGroup('admin')) { ?>
|
||||||
<li class="menu-item">
|
<li class="menu-item">
|
||||||
<a href="<?= route_to('erroresPresupuestoIndex') ?>" class="menu-link">
|
<a href="<?= route_to('erroresPresupuestoIndex') ?>" class="menu-link">
|
||||||
<div> <?= lang("App.menu_error_presupuesto") ?></div>
|
<div> <?= lang("App.menu_error_presupuesto") ?></div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php if (auth()->user()->inGroup('root')) { ?>
|
<?php if (auth()->user()->inGroup('admin')) { ?>
|
||||||
<li class="menu-item">
|
<li class="menu-item">
|
||||||
<a href="<?= route_to('variablesIndex') ?>" class="menu-link">
|
<a href="<?= route_to('variablesIndex') ?>" class="menu-link">
|
||||||
<div> <?= lang("App.menu_variables") ?></div>
|
<div> <?= lang("App.menu_variables") ?></div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php if (auth()->user()->inGroup('root')) { ?>
|
<?php if (auth()->user()->inGroup('admin')) { ?>
|
||||||
<li class="menu-item">
|
<li class="menu-item">
|
||||||
<a href="<?= route_to('configMessagesIndex') ?>" class="menu-link">
|
<a href="<?= route_to('configMessagesIndex') ?>" class="menu-link">
|
||||||
<div> <?= lang("App.menu_config_messages") ?></div>
|
<div> <?= lang("App.menu_config_messages") ?></div>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php if (auth()->user()->inGroup('root')) { ?>
|
<?php if (auth()->user()->inGroup('admin')) { ?>
|
||||||
<li class="menu-item">
|
<li class="menu-item">
|
||||||
<a href="<?= route_to('festivosList') ?>" class="menu-link">
|
<a href="<?= route_to('festivosList') ?>" class="menu-link">
|
||||||
<div> <?= lang("App.menu_config_holidays") ?></div>
|
<div> <?= lang("App.menu_config_holidays") ?></div>
|
||||||
|
|||||||
@ -1,11 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>403 Forbidden</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<p>Directory access is forbidden.</p>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 8.0 KiB |
@ -130,19 +130,4 @@ export const alertWarning = (value, target = 'body',options = {}) => {
|
|||||||
timerProgressBar: true,
|
timerProgressBar: true,
|
||||||
...options
|
...options
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const alertFileUploadSuccess = (message = "Archivos subidos correctamente.") => {
|
|
||||||
return Swal.fire({
|
|
||||||
icon: "success",
|
|
||||||
title: "Carga finalizada",
|
|
||||||
text: message,
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 3000,
|
|
||||||
customClass: {
|
|
||||||
popup: 'p-4',
|
|
||||||
title: 'fs-4 fw-bold text-success',
|
|
||||||
htmlContainer: 'text-muted',
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
@ -1,8 +1,10 @@
|
|||||||
|
|
||||||
import Modal from "./modal.js";
|
import Modal from "./modal.js";
|
||||||
import Ajax from "./ajax.js";
|
import Ajax from "./ajax.js";
|
||||||
class ConfigVariableDatatable {
|
class ConfigVariableDatatable
|
||||||
constructor(domItem) {
|
{
|
||||||
|
constructor(domItem)
|
||||||
|
{
|
||||||
this.domItem = domItem
|
this.domItem = domItem
|
||||||
this.datatableItem = this.domItem
|
this.datatableItem = this.domItem
|
||||||
this.modalItem = $("#modalConfigVariableForm")
|
this.modalItem = $("#modalConfigVariableForm")
|
||||||
@ -12,69 +14,76 @@ class ConfigVariableDatatable {
|
|||||||
this.formEdit = this.modalItem.find("#formEditConfigVariable")
|
this.formEdit = this.modalItem.find("#formEditConfigVariable")
|
||||||
|
|
||||||
}
|
}
|
||||||
init() {
|
init(){
|
||||||
this.datatable = this.datatableItem.DataTable({
|
this.datatable = this.datatableItem.DataTable({
|
||||||
processing: true,
|
processing: true,
|
||||||
dom: 'Blrtip',
|
dom: 'Blrtip',
|
||||||
serverSide: true,
|
serverSide: true,
|
||||||
lengthMenu: [25, 50, 100, 200],
|
lengthMenu: [ 25, 50, 100, 200 ],
|
||||||
pageLength: 50,
|
pageLength: 50,
|
||||||
language: {
|
language: {
|
||||||
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
|
url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
|
||||||
},
|
},
|
||||||
columns: [
|
columns : [
|
||||||
{ data: 'name', searchable: true, sortable: false },
|
{data : 'name',searchable:true,sortable:false},
|
||||||
{ data: 'value', searchable: true, sortable: false },
|
{data : 'value',searchable:true,sortable:false},
|
||||||
{ data: 'description', searchable: true, sortable: false },
|
{data : 'description',searchable:true,sortable:false},
|
||||||
{
|
{data : 'action',sortable:false,searchable:false,
|
||||||
data: 'action', sortable: false, searchable: false,
|
render : (d,t) =>{
|
||||||
render: (d, t) => {
|
|
||||||
return `
|
return `
|
||||||
<div class="btn-group btn-group-sm">
|
<div class="btn-group btn-group-sm">
|
||||||
<a href="javascript:void(0)" data-id="${d}" class="edit-variable"><i class="ti ti-pencil ti-sm mx-2"></i></a>
|
<a href="javascript:void(0)" data-id="${d}" class="edit-variable"><i class="ti ti-pencil ti-sm mx-2"></i></a>
|
||||||
</div>
|
</div>
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
ajax: '/configuracion/variables/datatable'
|
ajax: '/configuracion/variables/datatable'
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
events() {
|
events()
|
||||||
this.modalItem.on("click", ".btn-update-variable", this.handleUpdateVariable.bind(this))
|
{
|
||||||
this.datatableItem.on("click", ".edit-variable", (e) => {
|
this.modalItem.on("click",".btn-update-variable",this.handleUpdateVariable.bind(this))
|
||||||
|
this.datatableItem.on("click",".edit-variable",(e)=> {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
this.variableId = $(e.currentTarget).data("id")
|
this.variableId = $(e.currentTarget).data("id")
|
||||||
this.handleGetVariable()
|
this.handleGetVariable()
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
handleGetVariable() {
|
handleGetVariable()
|
||||||
|
{
|
||||||
const url = `/configuracion/variables/find/${this.variableId}`
|
const url = `/configuracion/variables/find/${this.variableId}`
|
||||||
let ajax = new Ajax(
|
let ajax = new Ajax(
|
||||||
url, null, null,
|
url,null,null,
|
||||||
this.handleGetVariableSuccess.bind(this),
|
this.handleGetVariableSuccess.bind(this),
|
||||||
this.handleGetVariableError.bind(this)
|
this.handleGetVariableError.bind(this)
|
||||||
)
|
)
|
||||||
ajax.get()
|
ajax.get()
|
||||||
|
|
||||||
}
|
}
|
||||||
handleGetVariableSuccess(data) {
|
handleGetVariableSuccess(data){
|
||||||
this.formEdit[0].reset()
|
this.formEdit[0].reset()
|
||||||
this.modalEdit.toggle()
|
this.modalEdit.toggle()
|
||||||
this.nameInput = this.formEdit.find("#name")
|
this.nameInput = this.formEdit
|
||||||
|
.find("#name")
|
||||||
this.nameInput.val(data.name)
|
this.nameInput.val(data.name)
|
||||||
this.renderValueField(data.name, data.value)
|
this.valueInput = this.formEdit
|
||||||
this.descriptionInput = this.formEdit.find("#description")
|
.find("#value")
|
||||||
|
this.valueInput.val(data.value)
|
||||||
|
this.descriptionInput = this.formEdit
|
||||||
|
.find("#description")
|
||||||
this.descriptionInput.val(data.description)
|
this.descriptionInput.val(data.description)
|
||||||
|
|
||||||
}
|
}
|
||||||
handleGetVariableError(err) { }
|
handleGetVariableError(err){}
|
||||||
handleUpdateVariable() {
|
handleUpdateVariable()
|
||||||
|
{
|
||||||
const url = `/configuracion/variables/edit/${this.variableId}`
|
const url = `/configuracion/variables/edit/${this.variableId}`
|
||||||
const data = {
|
const data = {
|
||||||
value: this.valueInput.val(),
|
value : this.valueInput.val(),
|
||||||
description: this.descriptionInput.val(),
|
description : this.descriptionInput.val(),
|
||||||
}
|
}
|
||||||
let ajax = new Ajax(
|
let ajax = new Ajax(
|
||||||
url,
|
url,
|
||||||
@ -85,49 +94,26 @@ class ConfigVariableDatatable {
|
|||||||
)
|
)
|
||||||
ajax.post()
|
ajax.post()
|
||||||
}
|
}
|
||||||
handleUpdateVariableSucess(data) {
|
handleUpdateVariableSucess(data){
|
||||||
this.modalEdit.toggle()
|
this.modalEdit.toggle()
|
||||||
this.datatable.ajax.reload()
|
this.datatable.ajax.reload()
|
||||||
}
|
}
|
||||||
handleUpdateVariableError(err) { }
|
handleUpdateVariableError(err){}
|
||||||
|
|
||||||
handleDeleteVariable() {
|
handleDeleteVariable()
|
||||||
|
{
|
||||||
const url = `/configuracion/variables/delete/${this.variableId}`
|
const url = `/configuracion/variables/delete/${this.variableId}`
|
||||||
let ajax = new Ajax(
|
let ajax = new Ajax(
|
||||||
url, null, null,
|
url,null,null,
|
||||||
this.handleDeleteVariableSucess.bind(this),
|
this.handleDeleteVariableSucess.bind(this),
|
||||||
this.handleDeleteVariableError.bind(this)
|
this.handleDeleteVariableError.bind(this)
|
||||||
)
|
)
|
||||||
ajax.post()
|
ajax.post()
|
||||||
}
|
}
|
||||||
handleDeleteVariableSucess(data) {
|
handleDeleteVariableSucess(data){
|
||||||
this.datatable.reload()
|
this.datatable.reload()
|
||||||
}
|
}
|
||||||
handleDeleteVariableError(err) { }
|
handleDeleteVariableError(err){}
|
||||||
|
|
||||||
renderValueField(name, currentValue) {
|
|
||||||
const wrapper = this.formEdit.find("#value-wrapper");
|
|
||||||
let html = '';
|
|
||||||
|
|
||||||
if (name === 'cabezadas_disponibles') {
|
|
||||||
html = `<textarea id="value" rows="6" class="form-control">${currentValue}</textarea>`;
|
|
||||||
} else if (name === 'cabezada_default') {
|
|
||||||
const options = window.CABEZADAS_OPCIONES || {};
|
|
||||||
html = `<select id="value" class="form-select">`;
|
|
||||||
for (const [key, label] of Object.entries(options)) {
|
|
||||||
const selected = key === currentValue ? 'selected' : '';
|
|
||||||
html += `<option value="${key}" ${selected}>${label}</option>`;
|
|
||||||
}
|
|
||||||
html += `</select>`;
|
|
||||||
} else {
|
|
||||||
html = `<input type="text" id="value" class="form-control" value="${currentValue}">`;
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapper.html(html);
|
|
||||||
this.valueInput = this.formEdit.find("#value"); // Actualiza referencia
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default ConfigVariableDatatable;
|
export default ConfigVariableDatatable;
|
||||||
@ -1,84 +1,73 @@
|
|||||||
// Importación de utilidades AJAX y alertas personalizadas
|
|
||||||
import Ajax from '../ajax.js';
|
|
||||||
import { alertFileUploadSuccess, alertWarningMessage } from '../alerts/sweetAlert.js'
|
|
||||||
|
|
||||||
// Template HTML para la vista previa de cada archivo en Dropzone
|
import Ajax from '../ajax.js';
|
||||||
|
import { alertSuccessMessage, alertWarningMessage } from '../alerts/sweetAlert.js'
|
||||||
|
|
||||||
const PREVIEW_TEMPLATE = `
|
const PREVIEW_TEMPLATE = `
|
||||||
<div class="dz-preview dz-file-preview">
|
<div class="dz-preview dz-file-preview">
|
||||||
<div class="dz-details">
|
<div class="dz-details">
|
||||||
<div class="dz-thumbnail">
|
<div class="dz-thumbnail">
|
||||||
<!-- Miniatura de imagen o PDF -->
|
<!---<img data-dz-thumbnail>
|
||||||
|
<span class="dz-nopreview">No preview</span> --->
|
||||||
<div class="dz-success-mark"></div>
|
<div class="dz-success-mark"></div>
|
||||||
<div class="dz-error-mark"></div>
|
<div class="dz-error-mark"></div>
|
||||||
<div class="dz-error-message"><span data-dz-errormessage></span></div>
|
<div class="dz-error-message"><span data-dz-errormessage></span></div>
|
||||||
<div class="progress">
|
<div class="progress">
|
||||||
<div class="progress-bar progress-bar-primary" role="progressbar" aria-valuemin="0" aria-valuemax="100" data-dz-uploadprogress></div>
|
<div class="progress-bar progress-bar-primary" role="progressbar" aria-valuemin="0" aria-valuemax="100" data-dz-uploadprogress></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="dz-filename" data-dz-name></div>
|
<div class="dz-filename" data-dz-name></div>
|
||||||
<!-- Botón para descargar -->
|
<!-- Estilo uniforme con Eliminar / Ver -->
|
||||||
<a class="dz-download dz-remove" href="javascript:void(0);" style="text-align:center;">Descargar</a>
|
<a class="dz-download dz-remove" href="javascript:void(0);" style="text-align:center;">Descargar</a>
|
||||||
<div class="dz-size" data-dz-size></div>
|
<div class="dz-size" data-dz-size></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
// Clase principal que maneja el flujo de Dropzone + AJAX
|
|
||||||
class FileUploadDropzone {
|
class FileUploadDropzone {
|
||||||
|
|
||||||
|
|
||||||
constructor({ domElement, nameId = "presupuesto_id", getUri = null, postUri = null, resourcePath = "presupuestos", otId = null }) {
|
constructor({ domElement, nameId = "presupuesto_id", getUri = null, postUri = null, resourcePath = "presupuestos", otId = null }) {
|
||||||
Dropzone.autoDiscover = false; // Desactiva la auto inicialización de Dropzone
|
Dropzone.autoDiscover = false;
|
||||||
|
this.domElement = domElement
|
||||||
this.domElement = domElement;
|
this.jqElement = $(domElement)
|
||||||
this.jqElement = $(domElement); // Referencia jQuery al elemento
|
this.modelId = this.jqElement.data('id')
|
||||||
|
this.btnSelectFiles = $(`#${domElement.replace('#', '')}_btnUploadFiles`)
|
||||||
this.modelId = this.jqElement.data('id'); // ID que asocia los archivos a un modelo (presupuesto, pedido, etc.)
|
this.btnSubmitFile = $(`#${domElement.replace('#', '')}_btnSubmitFiles`)
|
||||||
|
|
||||||
// Botones asociados
|
|
||||||
this.btnSelectFiles = $(`#${domElement.replace('#', '')}_btnUploadFiles`);
|
|
||||||
this.btnSubmitFile = $(`#${domElement.replace('#', '')}_btnSubmitFiles`);
|
|
||||||
this.btnDownloadFiles = $(`#${domElement.replace('#', '')}_btnDownloadFiles`);
|
this.btnDownloadFiles = $(`#${domElement.replace('#', '')}_btnDownloadFiles`);
|
||||||
|
this.dataPost = {}
|
||||||
this.nameId = nameId;
|
this.nameId = nameId;
|
||||||
this.otId = otId;
|
this.otId = otId;
|
||||||
this.getUri = getUri;
|
this.getUri = getUri
|
||||||
this.postUri = postUri;
|
this.postUri = postUri
|
||||||
this.resourcePath = resourcePath;
|
|
||||||
|
|
||||||
this.dataPost = {};
|
|
||||||
this.dataPost[nameId] = this.modelId;
|
this.dataPost[nameId] = this.modelId;
|
||||||
}
|
this.resourcePath = resourcePath
|
||||||
|
|
||||||
// Inicializa Dropzone y los eventos externos
|
}
|
||||||
init() {
|
init() {
|
||||||
if (this.jqElement.length > 0) {
|
if (this.jqElement.length > 0) {
|
||||||
// Vincula botones externos
|
this.btnSubmitFile.on('click', this._handleUploadFiles.bind(this))
|
||||||
this.btnSubmitFile.on('click', this._handleUploadFiles.bind(this));
|
this.btnSelectFiles.on('click', () => {
|
||||||
this.btnSelectFiles.on('click', () => this.jqElement.trigger('click'));
|
this.jqElement.trigger('click')
|
||||||
this.btnDownloadFiles.on('click', this._handleDownloadFiles.bind(this));
|
})
|
||||||
|
this.btnDownloadFiles.on('click', this._handleDownloadFiles.bind(this))
|
||||||
|
|
||||||
// Inicializa Dropzone
|
|
||||||
this.dropzone = new Dropzone(this.domElement, {
|
this.dropzone = new Dropzone(this.domElement, {
|
||||||
url: this.postUri,
|
url: this.postUri,
|
||||||
addRemoveLinks: true,
|
addRemoveLinks: true,
|
||||||
previewTemplate: PREVIEW_TEMPLATE,
|
previewTemplate: PREVIEW_TEMPLATE,
|
||||||
paramName: "file",
|
paramName: "file",
|
||||||
uploadMultiple: true,
|
uploadMultiple: true,
|
||||||
parallelUploads: 4,
|
parallelUploads: 4, // Ajusta este número al máximo número de archivos que esperas subir a la vez
|
||||||
maxFiles: 5,
|
maxFiles: 5, // Ajusta este número al máximo número de archivos que esperas subir a la vez
|
||||||
autoProcessQueue: true,
|
autoProcessQueue: true,
|
||||||
dictRemoveFile: "Eliminar",
|
dictRemoveFile: "Eliminar",
|
||||||
acceptedFiles: 'image/*, application/pdf',
|
acceptedFiles: 'image/*, application/pdf',
|
||||||
maxFilesize: 5e+7, // 50 MB
|
maxFilesize: 5e+7, // Bytes
|
||||||
init: this._handleGetFiles.bind(this) // Carga inicial de archivos
|
init: this._handleGetFiles.bind(this)
|
||||||
});
|
});
|
||||||
|
|
||||||
// Cuando se añade un archivo (manual o programático)
|
|
||||||
this.dropzone.on("addedfile", this._handleAddedFile.bind(this));
|
this.dropzone.on("addedfile", this._handleAddedFile.bind(this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Botones "Ver" y "Descargar" para cada archivo
|
|
||||||
_handleAddedFile(file) {
|
_handleAddedFile(file) {
|
||||||
if (file.hash) {
|
if (file.hash) {
|
||||||
// Botón Ver
|
// Botón Ver
|
||||||
@ -101,122 +90,75 @@ class FileUploadDropzone {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Acción del botón "Ver"
|
|
||||||
onViewButton(file) {
|
onViewButton(file) {
|
||||||
const url = `${window.location.protocol}//${window.location.host}/sistema/intranet/${this.resourcePath}/${file.hash}`;
|
console.log(window.location.protocol + "//" + window.location.host + "/sistema/intranet/" + this.resourcePath + "/" + file.hash)
|
||||||
window.open(url, '_blank');
|
window.open(window.location.protocol + "//" + window.location.host + "/sistema/intranet/" + this.resourcePath + "/" + file.hash, '_blank');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prepara el objeto FormData para el envío
|
|
||||||
_getDropzoneFilesFormData() {
|
_getDropzoneFilesFormData() {
|
||||||
const files = this.dropzone.files;
|
var files = this.dropzone.files;
|
||||||
const formData = new FormData();
|
|
||||||
const oldFiles = [];
|
|
||||||
|
|
||||||
for (let file of files) {
|
var formData = new FormData();
|
||||||
if (file.upload) {
|
var oldFiles = [];
|
||||||
|
var counter = 0;
|
||||||
|
for (var i = 0; i < files.length; i++) {
|
||||||
|
|
||||||
|
if (files[i].upload) {
|
||||||
|
var file = files[i];
|
||||||
formData.append('file[]', file);
|
formData.append('file[]', file);
|
||||||
} else {
|
counter += 1;
|
||||||
oldFiles.push(file.name);
|
}
|
||||||
|
else {
|
||||||
|
oldFiles.push(files[i].name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
formData.append('oldFiles', JSON.stringify(oldFiles));
|
formData.append('oldFiles', JSON.stringify(oldFiles));
|
||||||
formData.append(this.nameId, this.modelId);
|
|
||||||
|
|
||||||
|
formData.append(this.nameId, this.modelId);
|
||||||
return formData;
|
return formData;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Acción al hacer clic en "Subir archivos"
|
|
||||||
_handleUploadFiles() {
|
_handleUploadFiles() {
|
||||||
$("#loader").modal('show');
|
$("#loader").modal('show')
|
||||||
const ajax = new Ajax(
|
let ajax = new Ajax(this.postUri,
|
||||||
this.postUri,
|
|
||||||
this._getDropzoneFilesFormData(),
|
this._getDropzoneFilesFormData(),
|
||||||
null,
|
null,
|
||||||
this._handleUploadFilesSuccess.bind(this),
|
this._handleUploadFilesSuccess.bind(this),
|
||||||
null
|
null)
|
||||||
);
|
|
||||||
ajax.ajaxForm("POST");
|
ajax.ajaxForm("POST");
|
||||||
}
|
|
||||||
|
|
||||||
// Éxito tras subir archivos
|
}
|
||||||
_handleUploadFilesSuccess(response) {
|
_handleUploadFilesSuccess(response) {
|
||||||
this.dropZoneClean();
|
this.dropZoneClean()
|
||||||
this._handleGetFiles();
|
this._handleGetFiles()
|
||||||
|
alertSuccessMessage(response?.message ?? "Archivos subidos correctamente");
|
||||||
const summary = response?.summary || {};
|
|
||||||
const numOk = summary.subidos_ok || 0;
|
|
||||||
const numErrLocal = summary.errores_locales || 0;
|
|
||||||
const numErrRemote = summary.errores_remotos || 0;
|
|
||||||
const numDeleted = summary.borrados || 0;
|
|
||||||
|
|
||||||
const partes = [];
|
|
||||||
|
|
||||||
if (numOk > 0) {
|
|
||||||
partes.push(`Se subió${numOk === 1 ? '' : 'ron'} ${numOk} archivo${numOk === 1 ? '' : 's'} correctamente.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (numDeleted > 0) {
|
|
||||||
partes.push(`Se eliminaron ${numDeleted} archivo${numDeleted === 1 ? '' : 's'} obsoleto${numDeleted === 1 ? '' : 's'}.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (numErrLocal > 0) {
|
|
||||||
partes.push(`${numErrLocal} archivo${numErrLocal === 1 ? '' : 's'} falló${numErrLocal === 1 ? '' : 'n'} en el sistema.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (numErrRemote > 0) {
|
|
||||||
partes.push(`${numErrRemote} fallo${numErrRemote === 1 ? '' : 's'} en la transferencia.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const mensaje = partes.length > 0
|
|
||||||
? partes.join(' ')
|
|
||||||
: response?.message ?? "Archivos actualizados correctamente.";
|
|
||||||
|
|
||||||
alertFileUploadSuccess(mensaje);
|
|
||||||
}
|
}
|
||||||
|
_handleUploadFilesError(errors) { }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_handleUploadFilesError(errors) {
|
|
||||||
// No implementado aún
|
|
||||||
}
|
|
||||||
|
|
||||||
// Carga inicial de archivos existentes desde el servidor
|
|
||||||
_handleGetFiles() {
|
_handleGetFiles() {
|
||||||
const ajax = new Ajax(
|
const ajax = new Ajax(
|
||||||
this.getUri,
|
this.getUri,
|
||||||
this.dataPost,
|
this.dataPost,
|
||||||
null,
|
null,
|
||||||
this._handelGetFilesSuccess.bind(this),
|
this._handelGetFilesSuccess.bind(this),
|
||||||
null
|
null,
|
||||||
);
|
|
||||||
ajax.post();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Manejo de respuesta del servidor al cargar archivos
|
)
|
||||||
|
ajax.post()
|
||||||
|
}
|
||||||
_handelGetFilesSuccess(response) {
|
_handelGetFilesSuccess(response) {
|
||||||
try {
|
try {
|
||||||
$("#loader").modal('hide');
|
$("#loader").modal('hide')
|
||||||
const files = Array.isArray(response)
|
const files = JSON.parse(response)
|
||||||
? response
|
this.dropZoneUpdateFiles(files)
|
||||||
: typeof response === 'string'
|
|
||||||
? JSON.parse(response)
|
|
||||||
: [];
|
|
||||||
|
|
||||||
this.dropZoneUpdateFiles(files);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error parseando respuesta:", error);
|
$("#loader").modal('hide')
|
||||||
$("#loader").modal('hide');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Manejo del botón "Descargar archivos ZIP"
|
|
||||||
_handleDownloadFiles() {
|
_handleDownloadFiles() {
|
||||||
$("#loader").modal('show');
|
$("#loader").modal('show');
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: `/files/download_zip`,
|
url: `/presupuestoadmin/download_zip`,
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: {
|
data: {
|
||||||
[this.nameId]: this.modelId,
|
[this.nameId]: this.modelId,
|
||||||
@ -230,7 +172,7 @@ class FileUploadDropzone {
|
|||||||
let filename = "archivos.zip";
|
let filename = "archivos.zip";
|
||||||
if (disposition && disposition.indexOf('attachment') !== -1) {
|
if (disposition && disposition.indexOf('attachment') !== -1) {
|
||||||
const match = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(disposition);
|
const match = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(disposition);
|
||||||
if (match && match[1]) {
|
if (match != null && match[1]) {
|
||||||
filename = match[1].replace(/['"]/g, '');
|
filename = match[1].replace(/['"]/g, '');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -253,57 +195,28 @@ class FileUploadDropzone {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Carga archivos simulados (mock) al Dropzone visual
|
|
||||||
dropZoneUpdateFiles(files) {
|
|
||||||
files.forEach(file => {
|
|
||||||
//console.log("Iterando archivo:", file.name);
|
|
||||||
this.dropZoneAddFile(file);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Limpia todos los archivos de Dropzone visualmente
|
dropZoneUpdateFiles(files) {
|
||||||
|
|
||||||
|
files.forEach(file => {
|
||||||
|
this.dropZoneAddFile(file)
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
dropZoneClean() {
|
dropZoneClean() {
|
||||||
this.dropzone.files.forEach(file => {
|
this.dropzone.files.forEach(file => {
|
||||||
this.dropzone.removeFile(file);
|
this.dropzone.removeFile(file);
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
|
dropZoneAddFile(mockFile) {
|
||||||
// Inserta un archivo en Dropzone manualmente (mock)
|
this.dropzone.files.push(mockFile); // add to files array
|
||||||
dropZoneAddFile(mockFileData) {
|
|
||||||
const extension = mockFileData.name.split('.').pop().toLowerCase();
|
|
||||||
const isImage = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].includes(extension);
|
|
||||||
const isPDF = extension === 'pdf';
|
|
||||||
|
|
||||||
const fileUrl = `${window.location.protocol}//${window.location.host}/sistema/intranet/${this.resourcePath}/${mockFileData.hash}`;
|
|
||||||
|
|
||||||
const mockFile = {
|
|
||||||
name: mockFileData.name,
|
|
||||||
size: mockFileData.size,
|
|
||||||
type: isImage ? `image/${extension === 'jpg' ? 'jpeg' : extension}` : 'application/pdf',
|
|
||||||
hash: mockFileData.hash,
|
|
||||||
upload: false // Impide que se vuelva a subir
|
|
||||||
};
|
|
||||||
|
|
||||||
this.dropzone.emit("addedfile", mockFile);
|
this.dropzone.emit("addedfile", mockFile);
|
||||||
|
this.dropzone.emit("thumbnail", mockFile, window.location.host + "/sistema/intranet/" + this.resourcePath + "/" + mockFile.hash);
|
||||||
|
this.dropzone.emit("complete", mockFile);
|
||||||
|
this.dropzone.options.success.call(this.dropzone, mockFile);
|
||||||
|
|
||||||
// Espera a que Dropzone genere el DOM para modificar la miniatura
|
|
||||||
setTimeout(() => {
|
|
||||||
if (isImage) {
|
|
||||||
this.dropzone.emit("thumbnail", mockFile, fileUrl);
|
|
||||||
} else if (isPDF) {
|
|
||||||
const preview = mockFile.previewElement?.querySelector('.dz-thumbnail');
|
|
||||||
if (preview) {
|
|
||||||
preview.innerHTML = `<img src="/assets/img/pdf.png" alt="PDF" style="width:100%; height:auto;" />`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.dropzone.emit("complete", mockFile);
|
|
||||||
}, 10);
|
|
||||||
|
|
||||||
this.dropzone.files.push(mockFile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exporta la clase para usarla en otros módulos JS
|
export default FileUploadDropzone;
|
||||||
export default FileUploadDropzone;
|
|
||||||
@ -2,4 +2,4 @@ import ConfigVariableDatatable from "../../components/configVariableDatatable.js
|
|||||||
|
|
||||||
const item = new ConfigVariableDatatable($("#tableConfigVariables"))
|
const item = new ConfigVariableDatatable($("#tableConfigVariables"))
|
||||||
item.init()
|
item.init()
|
||||||
item.events()
|
item.events()
|
||||||
@ -65,8 +65,8 @@ class PresupuestoAdminEdit {
|
|||||||
this.configUploadDropzone = {
|
this.configUploadDropzone = {
|
||||||
domElement: '#dropzone-presupuesto-admin-files',
|
domElement: '#dropzone-presupuesto-admin-files',
|
||||||
nameId: "presupuesto_id",
|
nameId: "presupuesto_id",
|
||||||
getUri: '/files/get_files',
|
getUri: '/presupuestos/presupuestocliente/get_files',
|
||||||
postUri: '/files/upload_files'
|
postUri: '/presupuestos/presupuestocliente/upload_files'
|
||||||
}
|
}
|
||||||
if ($(this.configUploadDropzone.domElement).length > 0) {
|
if ($(this.configUploadDropzone.domElement).length > 0) {
|
||||||
this.fileUploadDropzone = new FileUploadDropzone(this.configUploadDropzone)
|
this.fileUploadDropzone = new FileUploadDropzone(this.configUploadDropzone)
|
||||||
@ -234,7 +234,6 @@ class PresupuestoAdminEdit {
|
|||||||
titulo: this.datosGenerales.titulo.val(),
|
titulo: this.datosGenerales.titulo.val(),
|
||||||
autor: this.datosGenerales.autor.val(),
|
autor: this.datosGenerales.autor.val(),
|
||||||
isbn: this.datosGenerales.isbn.val(),
|
isbn: this.datosGenerales.isbn.val(),
|
||||||
iskn: this.datosGenerales.iskn.val(),
|
|
||||||
pais_id: this.datosGenerales.pais.getVal(),
|
pais_id: this.datosGenerales.pais.getVal(),
|
||||||
coleccion: this.datosGenerales.coleccion.val(),
|
coleccion: this.datosGenerales.coleccion.val(),
|
||||||
numero_edicion: this.datosGenerales.numeroEdicion.val(),
|
numero_edicion: this.datosGenerales.numeroEdicion.val(),
|
||||||
|
|||||||
@ -15,7 +15,6 @@ class DatosGenerales{
|
|||||||
this.coleccion = this.domItem.find('#coleccion');
|
this.coleccion = this.domItem.find('#coleccion');
|
||||||
this.numeroEdicion = this.domItem.find('#numeroEdicion');
|
this.numeroEdicion = this.domItem.find('#numeroEdicion');
|
||||||
this.isbn = this.domItem.find('#isbn');
|
this.isbn = this.domItem.find('#isbn');
|
||||||
this.iskn = this.domItem.find('#iskn');
|
|
||||||
|
|
||||||
|
|
||||||
this.cliente = new ClassSelect($('#clienteId'), '/clientes/cliente/getSelect2', 'Seleccione cliente');
|
this.cliente = new ClassSelect($('#clienteId'), '/clientes/cliente/getSelect2', 'Seleccione cliente');
|
||||||
@ -47,7 +46,6 @@ class DatosGenerales{
|
|||||||
this.coleccion.val(datos.coleccion);
|
this.coleccion.val(datos.coleccion);
|
||||||
this.numeroEdicion.val(datos.numero_edicion);
|
this.numeroEdicion.val(datos.numero_edicion);
|
||||||
this.isbn.val(datos.isbn);
|
this.isbn.val(datos.isbn);
|
||||||
this.iskn.val(datos.iskn);
|
|
||||||
|
|
||||||
|
|
||||||
this.cliente.setOption(datos.cliente.id, datos.cliente.nombre);
|
this.cliente.setOption(datos.cliente.id, datos.cliente.nombre);
|
||||||
|
|||||||
@ -111,6 +111,29 @@ class DisenioInterior {
|
|||||||
this.disenioInterior.on('click', this.#handleDisenioInterior.bind(this));
|
this.disenioInterior.on('click', this.#handleDisenioInterior.bind(this));
|
||||||
this.disenioInterior_color.on('click', this.#handleDisenioInterior.bind(this));
|
this.disenioInterior_color.on('click', this.#handleDisenioInterior.bind(this));
|
||||||
|
|
||||||
|
// test
|
||||||
|
$(document).on('keydown', function (e) {
|
||||||
|
if (e.ctrlKey && e.key === '.') {
|
||||||
|
e.preventDefault(); // Evita comportamiento por defecto si es necesario
|
||||||
|
console.log('Se pulsó Control + .');
|
||||||
|
new Ajax('/configuracion/papelesgenericos/gettipopapel',
|
||||||
|
{
|
||||||
|
[self.csrf_token]: self.csrf_hash,
|
||||||
|
tirada: $('#tirada').val(),
|
||||||
|
tipo: () => self.getTipoImpresion(),
|
||||||
|
ancho: self.presupuestoCliente.datosGenerales.getDimensionLibro().ancho,
|
||||||
|
alto: self.presupuestoCliente.datosGenerales.getDimensionLibro().alto,
|
||||||
|
solapas: 0,
|
||||||
|
lomo: 0,
|
||||||
|
cubierta: 0,
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
(response) => { console.log(response); },
|
||||||
|
(response) => { console.error(response); }
|
||||||
|
).get();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -99,7 +99,7 @@ class Resumen {
|
|||||||
</div>`;
|
</div>`;
|
||||||
|
|
||||||
this.dropzone = new Dropzone('#dropzone-multi', {
|
this.dropzone = new Dropzone('#dropzone-multi', {
|
||||||
url: "/files/upload_files",
|
url: "/presupuestos/presupuestocliente/upload_files",
|
||||||
addRemoveLinks: true,
|
addRemoveLinks: true,
|
||||||
previewTemplate: previewTemplate,
|
previewTemplate: previewTemplate,
|
||||||
paramName: "file",
|
paramName: "file",
|
||||||
@ -115,24 +115,24 @@ class Resumen {
|
|||||||
$('#loader').show();
|
$('#loader').show();
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: "/files/get_files",
|
url: "/presupuestos/presupuestocliente/get_files",
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: { presupuesto_id: id }
|
data: { presupuesto_id: id }
|
||||||
|
|
||||||
}).done(function (response) {
|
}).done(function (response) {
|
||||||
if (!response) return;
|
if (response == null || response == "") {
|
||||||
|
return;
|
||||||
let files;
|
|
||||||
try {
|
|
||||||
files = Array.isArray(response)
|
|
||||||
? response
|
|
||||||
: typeof response === 'string'
|
|
||||||
? JSON.parse(response)
|
|
||||||
: [];
|
|
||||||
} catch (e) {
|
|
||||||
console.error("Error parseando respuesta:", e);
|
|
||||||
files = [];
|
|
||||||
}
|
}
|
||||||
|
let values = JSON.parse(response);
|
||||||
|
for (var i = 0; i < values.length; i++) {
|
||||||
|
var mockFile = { name: values[i].name, size: values[i].size, hash: values[i].hash };
|
||||||
|
|
||||||
|
thisDropzone.files.push(mockFile); // add to files array
|
||||||
|
thisDropzone.emit("addedfile", mockFile);
|
||||||
|
thisDropzone.emit("thumbnail", mockFile, window.location.host + "/sistema/intranet/presupuestos/" + values[i].hash);
|
||||||
|
thisDropzone.emit("complete", mockFile);
|
||||||
|
thisDropzone.options.success.call(thisDropzone, mockFile);
|
||||||
|
};
|
||||||
}).always(function () {
|
}).always(function () {
|
||||||
$('#loader').hide();
|
$('#loader').hide();
|
||||||
});
|
});
|
||||||
@ -176,7 +176,7 @@ class Resumen {
|
|||||||
formData.append('presupuesto_id', this.presupuesto_id);
|
formData.append('presupuesto_id', this.presupuesto_id);
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: "/files/upload_files",
|
url: "/presupuestos/presupuestocliente/upload_files",
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: formData,
|
data: formData,
|
||||||
processData: false, // Indicar a jQuery que no procese los datos
|
processData: false, // Indicar a jQuery que no procese los datos
|
||||||
@ -192,7 +192,7 @@ class Resumen {
|
|||||||
$('#loader').show();
|
$('#loader').show();
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: "/files/download_zip",
|
url: "/presupuestocliente/download_zip",
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: { presupuesto_id: this.presupuesto_id },
|
data: { presupuesto_id: this.presupuesto_id },
|
||||||
xhrFields: {
|
xhrFields: {
|
||||||
|
|||||||
@ -72,8 +72,8 @@ class OrdenTrabajo {
|
|||||||
domElement: '#dropzone-ot-files',
|
domElement: '#dropzone-ot-files',
|
||||||
nameId: "presupuesto_id",
|
nameId: "presupuesto_id",
|
||||||
otId: this.otId,
|
otId: this.otId,
|
||||||
getUri: '/files/get_files',
|
getUri: '/presupuestos/presupuestocliente/get_files',
|
||||||
postUri: '/files/upload_files'
|
postUri: '/presupuestos/presupuestocliente/upload_files'
|
||||||
}
|
}
|
||||||
if ($(this.configUploadDropzone.domElement).length > 0) {
|
if ($(this.configUploadDropzone.domElement).length > 0) {
|
||||||
this.fileUploadDropzone = new FileUploadDropzone(this.configUploadDropzone)
|
this.fileUploadDropzone = new FileUploadDropzone(this.configUploadDropzone)
|
||||||
|
|||||||
Reference in New Issue
Block a user